all: regenerate APIs

Change-Id: I8ef5e9ef05bb82cae26359d4b472bfd2e4160e8c
Reviewed-on: https://code-review.googlesource.com/11690
Reviewed-by: Victor Chudnovsky <vchudnov@google.com>
diff --git a/acceleratedmobilepageurl/v1/acceleratedmobilepageurl-api.json b/acceleratedmobilepageurl/v1/acceleratedmobilepageurl-api.json
index 9c182ec..7a17e1b 100644
--- a/acceleratedmobilepageurl/v1/acceleratedmobilepageurl-api.json
+++ b/acceleratedmobilepageurl/v1/acceleratedmobilepageurl-api.json
@@ -1,11 +1,4 @@
 {
-  "basePath": "",
-  "ownerDomain": "google.com",
-  "name": "acceleratedmobilepageurl",
-  "batchPath": "batch",
-  "documentationLink": "https://developers.google.com/amp/cache/",
-  "id": "acceleratedmobilepageurl:v1",
-  "revision": "20170224",
   "title": "Accelerated Mobile Pages (AMP) URL API",
   "ownerName": "Google",
   "discoveryVersion": "v1",
@@ -33,55 +26,61 @@
   },
   "parameters": {
     "bearer_token": {
-      "location": "query",
       "description": "OAuth bearer token.",
-      "type": "string"
-    },
-    "oauth_token": {
-      "description": "OAuth 2.0 token for the current user.",
       "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"
     },
     "prettyPrint": {
-      "description": "Returns response with indentations and line breaks.",
       "type": "boolean",
       "default": "true",
-      "location": "query"
+      "location": "query",
+      "description": "Returns response with indentations and line breaks."
+    },
+    "uploadType": {
+      "location": "query",
+      "description": "Legacy upload protocol for media (e.g. \"media\", \"multipart\").",
+      "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\").",
-      "type": "string",
-      "location": "query"
-    },
     "callback": {
       "location": "query",
       "description": "JSONP",
       "type": "string"
     },
     "$.xgafv": {
-      "type": "string",
-      "enumDescriptions": [
-        "v1 error format",
-        "v2 error format"
-      ],
       "location": "query",
       "enum": [
         "1",
         "2"
       ],
-      "description": "V1 error format."
+      "description": "V1 error format.",
+      "type": "string",
+      "enumDescriptions": [
+        "v1 error format",
+        "v2 error format"
+      ]
     },
     "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",
       "description": "Data format for response.",
       "default": "json",
       "enum": [
@@ -89,13 +88,7 @@
         "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"
+      "type": "string"
     },
     "access_token": {
       "location": "query",
@@ -103,9 +96,9 @@
       "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",
-      "location": "query"
+      "type": "string"
     },
     "quotaUser": {
       "location": "query",
@@ -120,64 +113,17 @@
     }
   },
   "schemas": {
-    "AmpUrl": {
-      "description": "AMP URL response for a requested URL.",
-      "type": "object",
-      "properties": {
-        "cdnAmpUrl": {
-          "description": "The [AMP Cache URL](/amp/cache/overview#amp-cache-url-format) pointing to\nthe cached document in the Google AMP Cache.",
-          "type": "string"
-        },
-        "originalUrl": {
-          "description": "The original non-AMP URL.",
-          "type": "string"
-        },
-        "ampUrl": {
-          "description": "The AMP URL pointing to the publisher's web server.",
-          "type": "string"
-        }
-      },
-      "id": "AmpUrl"
-    },
-    "AmpUrlError": {
-      "description": "AMP URL Error resource for a requested URL that couldn't be found.",
-      "type": "object",
-      "properties": {
-        "errorCode": {
-          "enum": [
-            "ERROR_CODE_UNSPECIFIED",
-            "INPUT_URL_NOT_FOUND",
-            "NO_AMP_URL",
-            "APPLICATION_ERROR",
-            "URL_IS_VALID_AMP",
-            "URL_IS_INVALID_AMP"
-          ],
-          "description": "The error code of an API call.",
-          "type": "string",
-          "enumDescriptions": [
-            "Not specified error.",
-            "Indicates the requested URL is not found in the index, possibly because\nit's unable to be found, not able to be accessed by Googlebot, or some\nother error.",
-            "Indicates no AMP URL has been found that corresponds to the requested\nURL.",
-            "Indicates some kind of application error occurred at the server.\nClient advised to retry.",
-            "DEPRECATED: Indicates the requested URL is a valid AMP URL.  This is a\nnon-error state, should not be relied upon as a sign of success or\nfailure.  It will be removed in future versions of the API.",
-            "Indicates that an AMP URL has been found that corresponds to the request\nURL, but it is not valid AMP HTML."
-          ]
-        },
-        "originalUrl": {
-          "description": "The original non-AMP URL.",
-          "type": "string"
-        },
-        "errorMessage": {
-          "description": "An optional descriptive error message.",
-          "type": "string"
-        }
-      },
-      "id": "AmpUrlError"
-    },
     "BatchGetAmpUrlsRequest": {
       "description": "AMP URL request for a batch of URLs.",
       "type": "object",
       "properties": {
+        "urls": {
+          "description": "List of URLs to look up for the paired AMP URLs.\nThe URLs are case-sensitive. Up to 50 URLs per lookup\n(see [Usage Limits](/amp/cache/reference/limits)).",
+          "type": "array",
+          "items": {
+            "type": "string"
+          }
+        },
         "lookupStrategy": {
           "enumDescriptions": [
             "FETCH_LIVE_DOC strategy involves live document fetch of URLs not found in\nthe index. Any request URL not found in the index is crawled in realtime\nto validate if there is a corresponding AMP URL. This strategy has higher\ncoverage but with extra latency introduced by realtime crawling. This is\nthe default strategy. Applications using this strategy should set higher\nHTTP timeouts of the API calls.",
@@ -189,13 +135,6 @@
           ],
           "description": "The lookup_strategy being requested.",
           "type": "string"
-        },
-        "urls": {
-          "description": "List of URLs to look up for the paired AMP URLs.\nThe URLs are case-sensitive. Up to 50 URLs per lookup\n(see [Usage Limits](/amp/cache/reference/limits)).",
-          "type": "array",
-          "items": {
-            "type": "string"
-          }
         }
       },
       "id": "BatchGetAmpUrlsRequest"
@@ -220,6 +159,60 @@
         }
       },
       "id": "BatchGetAmpUrlsResponse"
+    },
+    "AmpUrl": {
+      "description": "AMP URL response for a requested URL.",
+      "type": "object",
+      "properties": {
+        "cdnAmpUrl": {
+          "description": "The [AMP Cache URL](/amp/cache/overview#amp-cache-url-format) pointing to\nthe cached document in the Google AMP Cache.",
+          "type": "string"
+        },
+        "originalUrl": {
+          "description": "The original non-AMP URL.",
+          "type": "string"
+        },
+        "ampUrl": {
+          "description": "The AMP URL pointing to the publisher's web server.",
+          "type": "string"
+        }
+      },
+      "id": "AmpUrl"
+    },
+    "AmpUrlError": {
+      "description": "AMP URL Error resource for a requested URL that couldn't be found.",
+      "type": "object",
+      "properties": {
+        "errorCode": {
+          "description": "The error code of an API call.",
+          "type": "string",
+          "enumDescriptions": [
+            "Not specified error.",
+            "Indicates the requested URL is not found in the index, possibly because\nit's unable to be found, not able to be accessed by Googlebot, or some\nother error.",
+            "Indicates no AMP URL has been found that corresponds to the requested\nURL.",
+            "Indicates some kind of application error occurred at the server.\nClient advised to retry.",
+            "DEPRECATED: Indicates the requested URL is a valid AMP URL.  This is a\nnon-error state, should not be relied upon as a sign of success or\nfailure.  It will be removed in future versions of the API.",
+            "Indicates that an AMP URL has been found that corresponds to the request\nURL, but it is not valid AMP HTML."
+          ],
+          "enum": [
+            "ERROR_CODE_UNSPECIFIED",
+            "INPUT_URL_NOT_FOUND",
+            "NO_AMP_URL",
+            "APPLICATION_ERROR",
+            "URL_IS_VALID_AMP",
+            "URL_IS_INVALID_AMP"
+          ]
+        },
+        "originalUrl": {
+          "description": "The original non-AMP URL.",
+          "type": "string"
+        },
+        "errorMessage": {
+          "description": "An optional descriptive error message.",
+          "type": "string"
+        }
+      },
+      "id": "AmpUrlError"
     }
   },
   "protocol": "rest",
@@ -229,8 +222,15 @@
   },
   "version": "v1",
   "baseUrl": "https://acceleratedmobilepageurl.googleapis.com/",
-  "servicePath": "",
-  "description": "This API contains a single method, batchGet. Call this method to retrieve the AMP URL (and equivalent AMP Cache URL) for given public URL(s).\n",
   "kind": "discovery#restDescription",
-  "rootUrl": "https://acceleratedmobilepageurl.googleapis.com/"
+  "description": "This API contains a single method, batchGet. Call this method to retrieve the AMP URL (and equivalent AMP Cache URL) for given public URL(s).\n",
+  "servicePath": "",
+  "rootUrl": "https://acceleratedmobilepageurl.googleapis.com/",
+  "basePath": "",
+  "ownerDomain": "google.com",
+  "name": "acceleratedmobilepageurl",
+  "batchPath": "batch",
+  "revision": "20170224",
+  "documentationLink": "https://developers.google.com/amp/cache/",
+  "id": "acceleratedmobilepageurl:v1"
 }
diff --git a/acceleratedmobilepageurl/v1/acceleratedmobilepageurl-gen.go b/acceleratedmobilepageurl/v1/acceleratedmobilepageurl-gen.go
index 3a18935c..9c8d364 100644
--- a/acceleratedmobilepageurl/v1/acceleratedmobilepageurl-gen.go
+++ b/acceleratedmobilepageurl/v1/acceleratedmobilepageurl-gen.go
@@ -55,10 +55,9 @@
 }
 
 type Service struct {
-	client                    *http.Client
-	BasePath                  string // API endpoint base URL
-	UserAgent                 string // optional additional User-Agent fragment
-	GoogleClientHeaderElement string // client header fragment, for Google use only
+	client    *http.Client
+	BasePath  string // API endpoint base URL
+	UserAgent string // optional additional User-Agent fragment
 
 	AmpUrls *AmpUrlsService
 }
@@ -70,10 +69,6 @@
 	return googleapi.UserAgent + " " + s.UserAgent
 }
 
-func (s *Service) clientHeader() string {
-	return gensupport.GoogleClientHeader("20170210", s.GoogleClientHeaderElement)
-}
-
 func NewAmpUrlsService(s *Service) *AmpUrlsService {
 	rs := &AmpUrlsService{s: s}
 	return rs
@@ -317,7 +312,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	var body io.Reader = nil
 	body, err := googleapi.WithoutDataWrapper.JSONReader(c.batchgetampurlsrequest)
 	if err != nil {
diff --git a/adexchangebuyer/v1.2/adexchangebuyer-gen.go b/adexchangebuyer/v1.2/adexchangebuyer-gen.go
index 05d2b1e..104292d 100644
--- a/adexchangebuyer/v1.2/adexchangebuyer-gen.go
+++ b/adexchangebuyer/v1.2/adexchangebuyer-gen.go
@@ -62,10 +62,9 @@
 }
 
 type Service struct {
-	client                    *http.Client
-	BasePath                  string // API endpoint base URL
-	UserAgent                 string // optional additional User-Agent fragment
-	GoogleClientHeaderElement string // client header fragment, for Google use only
+	client    *http.Client
+	BasePath  string // API endpoint base URL
+	UserAgent string // optional additional User-Agent fragment
 
 	Accounts *AccountsService
 
@@ -79,10 +78,6 @@
 	return googleapi.UserAgent + " " + s.UserAgent
 }
 
-func (s *Service) clientHeader() string {
-	return gensupport.GoogleClientHeader("20170210", s.GoogleClientHeaderElement)
-}
-
 func NewAccountsService(s *Service) *AccountsService {
 	rs := &AccountsService{s: s}
 	return rs
@@ -588,7 +583,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	if c.ifNoneMatch_ != "" {
 		reqHeaders.Set("If-None-Match", c.ifNoneMatch_)
 	}
@@ -725,7 +719,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	if c.ifNoneMatch_ != "" {
 		reqHeaders.Set("If-None-Match", c.ifNoneMatch_)
 	}
@@ -841,7 +834,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	var body io.Reader = nil
 	body, err := googleapi.WithoutDataWrapper.JSONReader(c.account)
 	if err != nil {
@@ -976,7 +968,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	var body io.Reader = nil
 	body, err := googleapi.WithoutDataWrapper.JSONReader(c.account)
 	if err != nil {
@@ -1123,7 +1114,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	if c.ifNoneMatch_ != "" {
 		reqHeaders.Set("If-None-Match", c.ifNoneMatch_)
 	}
@@ -1259,7 +1249,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	var body io.Reader = nil
 	body, err := googleapi.WithoutDataWrapper.JSONReader(c.creative)
 	if err != nil {
@@ -1416,7 +1405,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	if c.ifNoneMatch_ != "" {
 		reqHeaders.Set("If-None-Match", c.ifNoneMatch_)
 	}
diff --git a/adexchangebuyer/v1.3/adexchangebuyer-gen.go b/adexchangebuyer/v1.3/adexchangebuyer-gen.go
index b635094..3c2ef1e 100644
--- a/adexchangebuyer/v1.3/adexchangebuyer-gen.go
+++ b/adexchangebuyer/v1.3/adexchangebuyer-gen.go
@@ -67,10 +67,9 @@
 }
 
 type Service struct {
-	client                    *http.Client
-	BasePath                  string // API endpoint base URL
-	UserAgent                 string // optional additional User-Agent fragment
-	GoogleClientHeaderElement string // client header fragment, for Google use only
+	client    *http.Client
+	BasePath  string // API endpoint base URL
+	UserAgent string // optional additional User-Agent fragment
 
 	Accounts *AccountsService
 
@@ -94,10 +93,6 @@
 	return googleapi.UserAgent + " " + s.UserAgent
 }
 
-func (s *Service) clientHeader() string {
-	return gensupport.GoogleClientHeader("20170210", s.GoogleClientHeaderElement)
-}
-
 func NewAccountsService(s *Service) *AccountsService {
 	rs := &AccountsService{s: s}
 	return rs
@@ -1524,7 +1519,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	if c.ifNoneMatch_ != "" {
 		reqHeaders.Set("If-None-Match", c.ifNoneMatch_)
 	}
@@ -1661,7 +1655,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	if c.ifNoneMatch_ != "" {
 		reqHeaders.Set("If-None-Match", c.ifNoneMatch_)
 	}
@@ -1777,7 +1770,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	var body io.Reader = nil
 	body, err := googleapi.WithoutDataWrapper.JSONReader(c.account)
 	if err != nil {
@@ -1912,7 +1904,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	var body io.Reader = nil
 	body, err := googleapi.WithoutDataWrapper.JSONReader(c.account)
 	if err != nil {
@@ -2057,7 +2048,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	if c.ifNoneMatch_ != "" {
 		reqHeaders.Set("If-None-Match", c.ifNoneMatch_)
 	}
@@ -2195,7 +2185,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	if c.ifNoneMatch_ != "" {
 		reqHeaders.Set("If-None-Match", c.ifNoneMatch_)
 	}
@@ -2322,7 +2311,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	if c.ifNoneMatch_ != "" {
 		reqHeaders.Set("If-None-Match", c.ifNoneMatch_)
 	}
@@ -2465,7 +2453,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	var body io.Reader = nil
 	body, err := googleapi.WithoutDataWrapper.JSONReader(c.budget)
 	if err != nil {
@@ -2613,7 +2600,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	var body io.Reader = nil
 	body, err := googleapi.WithoutDataWrapper.JSONReader(c.budget)
 	if err != nil {
@@ -2769,7 +2755,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	if c.ifNoneMatch_ != "" {
 		reqHeaders.Set("If-None-Match", c.ifNoneMatch_)
 	}
@@ -2905,7 +2890,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	var body io.Reader = nil
 	body, err := googleapi.WithoutDataWrapper.JSONReader(c.creative)
 	if err != nil {
@@ -3081,7 +3065,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	if c.ifNoneMatch_ != "" {
 		reqHeaders.Set("If-None-Match", c.ifNoneMatch_)
 	}
@@ -3269,7 +3252,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	if c.ifNoneMatch_ != "" {
 		reqHeaders.Set("If-None-Match", c.ifNoneMatch_)
 	}
@@ -3406,7 +3388,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	if c.ifNoneMatch_ != "" {
 		reqHeaders.Set("If-None-Match", c.ifNoneMatch_)
 	}
@@ -3548,7 +3529,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	if c.ifNoneMatch_ != "" {
 		reqHeaders.Set("If-None-Match", c.ifNoneMatch_)
 	}
@@ -3702,7 +3682,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	var body io.Reader = nil
 	c.urlParams_.Set("alt", alt)
 	urls := googleapi.ResolveRelative(c.s.BasePath, "pretargetingconfigs/{accountId}/{configId}")
@@ -3821,7 +3800,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	if c.ifNoneMatch_ != "" {
 		reqHeaders.Set("If-None-Match", c.ifNoneMatch_)
 	}
@@ -3960,7 +3938,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	var body io.Reader = nil
 	body, err := googleapi.WithoutDataWrapper.JSONReader(c.pretargetingconfig)
 	if err != nil {
@@ -4105,7 +4082,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	if c.ifNoneMatch_ != "" {
 		reqHeaders.Set("If-None-Match", c.ifNoneMatch_)
 	}
@@ -4238,7 +4214,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	var body io.Reader = nil
 	body, err := googleapi.WithoutDataWrapper.JSONReader(c.pretargetingconfig)
 	if err != nil {
@@ -4384,7 +4359,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	var body io.Reader = nil
 	body, err := googleapi.WithoutDataWrapper.JSONReader(c.pretargetingconfig)
 	if err != nil {
diff --git a/adexchangebuyer/v1.4/adexchangebuyer-gen.go b/adexchangebuyer/v1.4/adexchangebuyer-gen.go
index 4e9f07f..dd1dc52 100644
--- a/adexchangebuyer/v1.4/adexchangebuyer-gen.go
+++ b/adexchangebuyer/v1.4/adexchangebuyer-gen.go
@@ -72,10 +72,9 @@
 }
 
 type Service struct {
-	client                    *http.Client
-	BasePath                  string // API endpoint base URL
-	UserAgent                 string // optional additional User-Agent fragment
-	GoogleClientHeaderElement string // client header fragment, for Google use only
+	client    *http.Client
+	BasePath  string // API endpoint base URL
+	UserAgent string // optional additional User-Agent fragment
 
 	Accounts *AccountsService
 
@@ -109,10 +108,6 @@
 	return googleapi.UserAgent + " " + s.UserAgent
 }
 
-func (s *Service) clientHeader() string {
-	return gensupport.GoogleClientHeader("20170210", s.GoogleClientHeaderElement)
-}
-
 func NewAccountsService(s *Service) *AccountsService {
 	rs := &AccountsService{s: s}
 	return rs
@@ -3811,7 +3806,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	if c.ifNoneMatch_ != "" {
 		reqHeaders.Set("If-None-Match", c.ifNoneMatch_)
 	}
@@ -3948,7 +3942,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	if c.ifNoneMatch_ != "" {
 		reqHeaders.Set("If-None-Match", c.ifNoneMatch_)
 	}
@@ -4072,7 +4065,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	var body io.Reader = nil
 	body, err := googleapi.WithoutDataWrapper.JSONReader(c.account)
 	if err != nil {
@@ -4220,7 +4212,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	var body io.Reader = nil
 	body, err := googleapi.WithoutDataWrapper.JSONReader(c.account)
 	if err != nil {
@@ -4370,7 +4361,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	if c.ifNoneMatch_ != "" {
 		reqHeaders.Set("If-None-Match", c.ifNoneMatch_)
 	}
@@ -4508,7 +4498,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	if c.ifNoneMatch_ != "" {
 		reqHeaders.Set("If-None-Match", c.ifNoneMatch_)
 	}
@@ -4635,7 +4624,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	if c.ifNoneMatch_ != "" {
 		reqHeaders.Set("If-None-Match", c.ifNoneMatch_)
 	}
@@ -4778,7 +4766,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	var body io.Reader = nil
 	body, err := googleapi.WithoutDataWrapper.JSONReader(c.budget)
 	if err != nil {
@@ -4926,7 +4913,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	var body io.Reader = nil
 	body, err := googleapi.WithoutDataWrapper.JSONReader(c.budget)
 	if err != nil {
@@ -5072,7 +5058,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	var body io.Reader = nil
 	c.urlParams_.Set("alt", alt)
 	urls := googleapi.ResolveRelative(c.s.BasePath, "creatives/{accountId}/{buyerCreativeId}/addDeal/{dealId}")
@@ -5200,7 +5185,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	if c.ifNoneMatch_ != "" {
 		reqHeaders.Set("If-None-Match", c.ifNoneMatch_)
 	}
@@ -5336,7 +5320,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	var body io.Reader = nil
 	body, err := googleapi.WithoutDataWrapper.JSONReader(c.creative)
 	if err != nil {
@@ -5535,7 +5518,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	if c.ifNoneMatch_ != "" {
 		reqHeaders.Set("If-None-Match", c.ifNoneMatch_)
 	}
@@ -5744,7 +5726,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	if c.ifNoneMatch_ != "" {
 		reqHeaders.Set("If-None-Match", c.ifNoneMatch_)
 	}
@@ -5884,7 +5865,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	var body io.Reader = nil
 	c.urlParams_.Set("alt", alt)
 	urls := googleapi.ResolveRelative(c.s.BasePath, "creatives/{accountId}/{buyerCreativeId}/removeDeal/{dealId}")
@@ -6000,7 +5980,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	var body io.Reader = nil
 	body, err := googleapi.WithoutDataWrapper.JSONReader(c.deleteorderdealsrequest)
 	if err != nil {
@@ -6134,7 +6113,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	var body io.Reader = nil
 	body, err := googleapi.WithoutDataWrapper.JSONReader(c.addorderdealsrequest)
 	if err != nil {
@@ -6284,7 +6262,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	if c.ifNoneMatch_ != "" {
 		reqHeaders.Set("If-None-Match", c.ifNoneMatch_)
 	}
@@ -6419,7 +6396,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	var body io.Reader = nil
 	body, err := googleapi.WithoutDataWrapper.JSONReader(c.editallorderdealsrequest)
 	if err != nil {
@@ -6553,7 +6529,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	var body io.Reader = nil
 	body, err := googleapi.WithoutDataWrapper.JSONReader(c.addordernotesrequest)
 	if err != nil {
@@ -6705,7 +6680,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	if c.ifNoneMatch_ != "" {
 		reqHeaders.Set("If-None-Match", c.ifNoneMatch_)
 	}
@@ -6839,7 +6813,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	var body io.Reader = nil
 	body, err := googleapi.WithoutDataWrapper.JSONReader(c.updateprivateauctionproposalrequest)
 	if err != nil {
@@ -6972,7 +6945,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	if c.ifNoneMatch_ != "" {
 		reqHeaders.Set("If-None-Match", c.ifNoneMatch_)
 	}
@@ -7126,7 +7098,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	var body io.Reader = nil
 	c.urlParams_.Set("alt", alt)
 	urls := googleapi.ResolveRelative(c.s.BasePath, "pretargetingconfigs/{accountId}/{configId}")
@@ -7245,7 +7216,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	if c.ifNoneMatch_ != "" {
 		reqHeaders.Set("If-None-Match", c.ifNoneMatch_)
 	}
@@ -7384,7 +7354,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	var body io.Reader = nil
 	body, err := googleapi.WithoutDataWrapper.JSONReader(c.pretargetingconfig)
 	if err != nil {
@@ -7529,7 +7498,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	if c.ifNoneMatch_ != "" {
 		reqHeaders.Set("If-None-Match", c.ifNoneMatch_)
 	}
@@ -7662,7 +7630,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	var body io.Reader = nil
 	body, err := googleapi.WithoutDataWrapper.JSONReader(c.pretargetingconfig)
 	if err != nil {
@@ -7808,7 +7775,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	var body io.Reader = nil
 	body, err := googleapi.WithoutDataWrapper.JSONReader(c.pretargetingconfig)
 	if err != nil {
@@ -7961,7 +7927,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	if c.ifNoneMatch_ != "" {
 		reqHeaders.Set("If-None-Match", c.ifNoneMatch_)
 	}
@@ -8104,7 +8069,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	if c.ifNoneMatch_ != "" {
 		reqHeaders.Set("If-None-Match", c.ifNoneMatch_)
 	}
@@ -8235,7 +8199,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	if c.ifNoneMatch_ != "" {
 		reqHeaders.Set("If-None-Match", c.ifNoneMatch_)
 	}
@@ -8362,7 +8325,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	var body io.Reader = nil
 	body, err := googleapi.WithoutDataWrapper.JSONReader(c.createordersrequest)
 	if err != nil {
@@ -8487,7 +8449,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	var body io.Reader = nil
 	body, err := googleapi.WithoutDataWrapper.JSONReader(c.proposal)
 	if err != nil {
@@ -8668,7 +8629,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	if c.ifNoneMatch_ != "" {
 		reqHeaders.Set("If-None-Match", c.ifNoneMatch_)
 	}
@@ -8789,7 +8749,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	var body io.Reader = nil
 	c.urlParams_.Set("alt", alt)
 	urls := googleapi.ResolveRelative(c.s.BasePath, "proposals/{proposalId}/setupcomplete")
@@ -8891,7 +8850,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	var body io.Reader = nil
 	body, err := googleapi.WithoutDataWrapper.JSONReader(c.proposal)
 	if err != nil {
@@ -9067,7 +9025,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	if c.ifNoneMatch_ != "" {
 		reqHeaders.Set("If-None-Match", c.ifNoneMatch_)
 	}
diff --git a/adexchangebuyer2/v2beta1/adexchangebuyer2-api.json b/adexchangebuyer2/v2beta1/adexchangebuyer2-api.json
index 1932695..3ac43fa 100644
--- a/adexchangebuyer2/v2beta1/adexchangebuyer2-api.json
+++ b/adexchangebuyer2/v2beta1/adexchangebuyer2-api.json
@@ -1,23 +1,1059 @@
 {
-  "kind": "discovery#restDescription",
-  "description": "Accesses the latest features for managing Ad Exchange accounts, Real-Time Bidding configurations and auction metrics, and Marketplace programmatic deals.",
+  "title": "Ad Exchange Buyer API II",
+  "ownerName": "Google",
+  "resources": {
+    "accounts": {
+      "resources": {
+        "clients": {
+          "methods": {
+            "get": {
+              "httpMethod": "GET",
+              "response": {
+                "$ref": "Client"
+              },
+              "parameterOrder": [
+                "accountId",
+                "clientAccountId"
+              ],
+              "scopes": [
+                "https://www.googleapis.com/auth/adexchange.buyer"
+              ],
+              "parameters": {
+                "accountId": {
+                  "description": "Numerical account ID of the client's sponsor buyer. (required)",
+                  "format": "int64",
+                  "required": true,
+                  "type": "string",
+                  "location": "path"
+                },
+                "clientAccountId": {
+                  "location": "path",
+                  "description": "Numerical account ID of the client buyer to retrieve. (required)",
+                  "format": "int64",
+                  "required": true,
+                  "type": "string"
+                }
+              },
+              "flatPath": "v2beta1/accounts/{accountId}/clients/{clientAccountId}",
+              "id": "adexchangebuyer2.accounts.clients.get",
+              "path": "v2beta1/accounts/{accountId}/clients/{clientAccountId}",
+              "description": "Gets a client buyer with a given client account ID."
+            },
+            "list": {
+              "path": "v2beta1/accounts/{accountId}/clients",
+              "id": "adexchangebuyer2.accounts.clients.list",
+              "description": "Lists all the clients for the current sponsor buyer.",
+              "response": {
+                "$ref": "ListClientsResponse"
+              },
+              "parameterOrder": [
+                "accountId"
+              ],
+              "httpMethod": "GET",
+              "scopes": [
+                "https://www.googleapis.com/auth/adexchange.buyer"
+              ],
+              "parameters": {
+                "pageToken": {
+                  "location": "query",
+                  "description": "A token identifying a page of results the server should return.\nTypically, this is the value of\nListClientsResponse.nextPageToken\nreturned from the previous call to the\naccounts.clients.list method.",
+                  "type": "string"
+                },
+                "accountId": {
+                  "location": "path",
+                  "description": "Unique numerical account ID of the sponsor buyer to list the clients for.",
+                  "format": "int64",
+                  "required": true,
+                  "type": "string"
+                },
+                "pageSize": {
+                  "description": "Requested page size. The server may return fewer clients than requested.\nIf unspecified, the server will pick an appropriate default.",
+                  "format": "int32",
+                  "type": "integer",
+                  "location": "query"
+                }
+              },
+              "flatPath": "v2beta1/accounts/{accountId}/clients"
+            },
+            "update": {
+              "request": {
+                "$ref": "Client"
+              },
+              "description": "Updates an existing client buyer.",
+              "response": {
+                "$ref": "Client"
+              },
+              "parameterOrder": [
+                "accountId",
+                "clientAccountId"
+              ],
+              "httpMethod": "PUT",
+              "parameters": {
+                "accountId": {
+                  "location": "path",
+                  "description": "Unique numerical account ID for the buyer of which the client buyer\nis a customer; the sponsor buyer to update a client for. (required)",
+                  "format": "int64",
+                  "required": true,
+                  "type": "string"
+                },
+                "clientAccountId": {
+                  "description": "Unique numerical account ID of the client to update. (required)",
+                  "format": "int64",
+                  "required": true,
+                  "type": "string",
+                  "location": "path"
+                }
+              },
+              "scopes": [
+                "https://www.googleapis.com/auth/adexchange.buyer"
+              ],
+              "flatPath": "v2beta1/accounts/{accountId}/clients/{clientAccountId}",
+              "path": "v2beta1/accounts/{accountId}/clients/{clientAccountId}",
+              "id": "adexchangebuyer2.accounts.clients.update"
+            },
+            "create": {
+              "path": "v2beta1/accounts/{accountId}/clients",
+              "id": "adexchangebuyer2.accounts.clients.create",
+              "request": {
+                "$ref": "Client"
+              },
+              "description": "Creates a new client buyer.",
+              "response": {
+                "$ref": "Client"
+              },
+              "parameterOrder": [
+                "accountId"
+              ],
+              "httpMethod": "POST",
+              "parameters": {
+                "accountId": {
+                  "description": "Unique numerical account ID for the buyer of which the client buyer\nis a customer; the sponsor buyer to create a client for. (required)",
+                  "format": "int64",
+                  "required": true,
+                  "type": "string",
+                  "location": "path"
+                }
+              },
+              "scopes": [
+                "https://www.googleapis.com/auth/adexchange.buyer"
+              ],
+              "flatPath": "v2beta1/accounts/{accountId}/clients"
+            }
+          },
+          "resources": {
+            "invitations": {
+              "methods": {
+                "get": {
+                  "response": {
+                    "$ref": "ClientUserInvitation"
+                  },
+                  "parameterOrder": [
+                    "accountId",
+                    "clientAccountId",
+                    "invitationId"
+                  ],
+                  "httpMethod": "GET",
+                  "scopes": [
+                    "https://www.googleapis.com/auth/adexchange.buyer"
+                  ],
+                  "parameters": {
+                    "invitationId": {
+                      "description": "Numerical identifier of the user invitation to retrieve. (required)",
+                      "format": "int64",
+                      "required": true,
+                      "type": "string",
+                      "location": "path"
+                    },
+                    "accountId": {
+                      "description": "Numerical account ID of the client's sponsor buyer. (required)",
+                      "format": "int64",
+                      "required": true,
+                      "type": "string",
+                      "location": "path"
+                    },
+                    "clientAccountId": {
+                      "location": "path",
+                      "description": "Numerical account ID of the client buyer that the user invitation\nto be retrieved is associated with. (required)",
+                      "format": "int64",
+                      "required": true,
+                      "type": "string"
+                    }
+                  },
+                  "flatPath": "v2beta1/accounts/{accountId}/clients/{clientAccountId}/invitations/{invitationId}",
+                  "path": "v2beta1/accounts/{accountId}/clients/{clientAccountId}/invitations/{invitationId}",
+                  "id": "adexchangebuyer2.accounts.clients.invitations.get",
+                  "description": "Retrieves an existing client user invitation."
+                },
+                "list": {
+                  "flatPath": "v2beta1/accounts/{accountId}/clients/{clientAccountId}/invitations",
+                  "id": "adexchangebuyer2.accounts.clients.invitations.list",
+                  "path": "v2beta1/accounts/{accountId}/clients/{clientAccountId}/invitations",
+                  "description": "Lists all the client users invitations for a client\nwith a given account ID.",
+                  "httpMethod": "GET",
+                  "response": {
+                    "$ref": "ListClientUserInvitationsResponse"
+                  },
+                  "parameterOrder": [
+                    "accountId",
+                    "clientAccountId"
+                  ],
+                  "parameters": {
+                    "pageToken": {
+                      "location": "query",
+                      "description": "A token identifying a page of results the server should return.\nTypically, this is the value of\nListClientUserInvitationsResponse.nextPageToken\nreturned from the previous call to the\nclients.invitations.list\nmethod.",
+                      "type": "string"
+                    },
+                    "accountId": {
+                      "location": "path",
+                      "description": "Numerical account ID of the client's sponsor buyer. (required)",
+                      "format": "int64",
+                      "required": true,
+                      "type": "string"
+                    },
+                    "pageSize": {
+                      "description": "Requested page size. Server may return fewer clients than requested.\nIf unspecified, server will pick an appropriate default.",
+                      "format": "int32",
+                      "type": "integer",
+                      "location": "query"
+                    },
+                    "clientAccountId": {
+                      "required": true,
+                      "type": "string",
+                      "location": "path",
+                      "description": "Numerical account ID of the client buyer to list invitations for.\n(required)\nYou must either specify a string representation of a\nnumerical account identifier or the `-` character\nto list all the invitations for all the clients\nof a given sponsor buyer."
+                    }
+                  },
+                  "scopes": [
+                    "https://www.googleapis.com/auth/adexchange.buyer"
+                  ]
+                },
+                "create": {
+                  "request": {
+                    "$ref": "ClientUserInvitation"
+                  },
+                  "description": "Creates and sends out an email invitation to access\nan Ad Exchange client buyer account.",
+                  "response": {
+                    "$ref": "ClientUserInvitation"
+                  },
+                  "parameterOrder": [
+                    "accountId",
+                    "clientAccountId"
+                  ],
+                  "httpMethod": "POST",
+                  "parameters": {
+                    "clientAccountId": {
+                      "location": "path",
+                      "description": "Numerical account ID of the client buyer that the user\nshould be associated with. (required)",
+                      "format": "int64",
+                      "required": true,
+                      "type": "string"
+                    },
+                    "accountId": {
+                      "location": "path",
+                      "description": "Numerical account ID of the client's sponsor buyer. (required)",
+                      "format": "int64",
+                      "required": true,
+                      "type": "string"
+                    }
+                  },
+                  "scopes": [
+                    "https://www.googleapis.com/auth/adexchange.buyer"
+                  ],
+                  "flatPath": "v2beta1/accounts/{accountId}/clients/{clientAccountId}/invitations",
+                  "path": "v2beta1/accounts/{accountId}/clients/{clientAccountId}/invitations",
+                  "id": "adexchangebuyer2.accounts.clients.invitations.create"
+                }
+              }
+            },
+            "users": {
+              "methods": {
+                "list": {
+                  "parameters": {
+                    "pageToken": {
+                      "location": "query",
+                      "description": "A token identifying a page of results the server should return.\nTypically, this is the value of\nListClientUsersResponse.nextPageToken\nreturned from the previous call to the\naccounts.clients.users.list method.",
+                      "type": "string"
+                    },
+                    "accountId": {
+                      "description": "Numerical account ID of the sponsor buyer of the client to list users for.\n(required)",
+                      "format": "int64",
+                      "required": true,
+                      "type": "string",
+                      "location": "path"
+                    },
+                    "pageSize": {
+                      "description": "Requested page size. The server may return fewer clients than requested.\nIf unspecified, the server will pick an appropriate default.",
+                      "format": "int32",
+                      "type": "integer",
+                      "location": "query"
+                    },
+                    "clientAccountId": {
+                      "description": "The account ID of the client buyer to list users for. (required)\nYou must specify either a string representation of a\nnumerical account identifier or the `-` character\nto list all the client users for all the clients\nof a given sponsor buyer.",
+                      "required": true,
+                      "type": "string",
+                      "location": "path"
+                    }
+                  },
+                  "scopes": [
+                    "https://www.googleapis.com/auth/adexchange.buyer"
+                  ],
+                  "flatPath": "v2beta1/accounts/{accountId}/clients/{clientAccountId}/users",
+                  "id": "adexchangebuyer2.accounts.clients.users.list",
+                  "path": "v2beta1/accounts/{accountId}/clients/{clientAccountId}/users",
+                  "description": "Lists all the known client users for a specified\nsponsor buyer account ID.",
+                  "httpMethod": "GET",
+                  "parameterOrder": [
+                    "accountId",
+                    "clientAccountId"
+                  ],
+                  "response": {
+                    "$ref": "ListClientUsersResponse"
+                  }
+                },
+                "get": {
+                  "response": {
+                    "$ref": "ClientUser"
+                  },
+                  "parameterOrder": [
+                    "accountId",
+                    "clientAccountId",
+                    "userId"
+                  ],
+                  "httpMethod": "GET",
+                  "parameters": {
+                    "userId": {
+                      "description": "Numerical identifier of the user to retrieve. (required)",
+                      "format": "int64",
+                      "required": true,
+                      "type": "string",
+                      "location": "path"
+                    },
+                    "accountId": {
+                      "description": "Numerical account ID of the client's sponsor buyer. (required)",
+                      "format": "int64",
+                      "required": true,
+                      "type": "string",
+                      "location": "path"
+                    },
+                    "clientAccountId": {
+                      "description": "Numerical account ID of the client buyer\nthat the user to be retrieved is associated with. (required)",
+                      "format": "int64",
+                      "required": true,
+                      "type": "string",
+                      "location": "path"
+                    }
+                  },
+                  "scopes": [
+                    "https://www.googleapis.com/auth/adexchange.buyer"
+                  ],
+                  "flatPath": "v2beta1/accounts/{accountId}/clients/{clientAccountId}/users/{userId}",
+                  "path": "v2beta1/accounts/{accountId}/clients/{clientAccountId}/users/{userId}",
+                  "id": "adexchangebuyer2.accounts.clients.users.get",
+                  "description": "Retrieves an existing client user."
+                },
+                "update": {
+                  "request": {
+                    "$ref": "ClientUser"
+                  },
+                  "description": "Updates an existing client user.\nOnly the user status can be changed on update.",
+                  "response": {
+                    "$ref": "ClientUser"
+                  },
+                  "parameterOrder": [
+                    "accountId",
+                    "clientAccountId",
+                    "userId"
+                  ],
+                  "httpMethod": "PUT",
+                  "parameters": {
+                    "userId": {
+                      "description": "Numerical identifier of the user to retrieve. (required)",
+                      "format": "int64",
+                      "required": true,
+                      "type": "string",
+                      "location": "path"
+                    },
+                    "accountId": {
+                      "location": "path",
+                      "description": "Numerical account ID of the client's sponsor buyer. (required)",
+                      "format": "int64",
+                      "required": true,
+                      "type": "string"
+                    },
+                    "clientAccountId": {
+                      "location": "path",
+                      "description": "Numerical account ID of the client buyer that the user to be retrieved\nis associated with. (required)",
+                      "format": "int64",
+                      "required": true,
+                      "type": "string"
+                    }
+                  },
+                  "scopes": [
+                    "https://www.googleapis.com/auth/adexchange.buyer"
+                  ],
+                  "flatPath": "v2beta1/accounts/{accountId}/clients/{clientAccountId}/users/{userId}",
+                  "path": "v2beta1/accounts/{accountId}/clients/{clientAccountId}/users/{userId}",
+                  "id": "adexchangebuyer2.accounts.clients.users.update"
+                }
+              }
+            }
+          }
+        },
+        "creatives": {
+          "resources": {
+            "dealAssociations": {
+              "methods": {
+                "add": {
+                  "httpMethod": "POST",
+                  "parameterOrder": [
+                    "accountId",
+                    "creativeId"
+                  ],
+                  "response": {
+                    "$ref": "Empty"
+                  },
+                  "parameters": {
+                    "accountId": {
+                      "description": "The account the creative belongs to.",
+                      "required": true,
+                      "type": "string",
+                      "location": "path"
+                    },
+                    "creativeId": {
+                      "required": true,
+                      "type": "string",
+                      "location": "path",
+                      "description": "The ID of the creative associated with the deal."
+                    }
+                  },
+                  "scopes": [
+                    "https://www.googleapis.com/auth/adexchange.buyer"
+                  ],
+                  "flatPath": "v2beta1/accounts/{accountId}/creatives/{creativeId}/dealAssociations:add",
+                  "id": "adexchangebuyer2.accounts.creatives.dealAssociations.add",
+                  "path": "v2beta1/accounts/{accountId}/creatives/{creativeId}/dealAssociations:add",
+                  "request": {
+                    "$ref": "AddDealAssociationRequest"
+                  },
+                  "description": "Associate an existing deal with a creative."
+                },
+                "remove": {
+                  "response": {
+                    "$ref": "Empty"
+                  },
+                  "parameterOrder": [
+                    "accountId",
+                    "creativeId"
+                  ],
+                  "httpMethod": "POST",
+                  "scopes": [
+                    "https://www.googleapis.com/auth/adexchange.buyer"
+                  ],
+                  "parameters": {
+                    "accountId": {
+                      "required": true,
+                      "type": "string",
+                      "location": "path",
+                      "description": "The account the creative belongs to."
+                    },
+                    "creativeId": {
+                      "location": "path",
+                      "description": "The ID of the creative associated with the deal.",
+                      "required": true,
+                      "type": "string"
+                    }
+                  },
+                  "flatPath": "v2beta1/accounts/{accountId}/creatives/{creativeId}/dealAssociations:remove",
+                  "path": "v2beta1/accounts/{accountId}/creatives/{creativeId}/dealAssociations:remove",
+                  "id": "adexchangebuyer2.accounts.creatives.dealAssociations.remove",
+                  "description": "Remove the association between a deal and a creative.",
+                  "request": {
+                    "$ref": "RemoveDealAssociationRequest"
+                  }
+                },
+                "list": {
+                  "description": "List all creative-deal associations.",
+                  "response": {
+                    "$ref": "ListDealAssociationsResponse"
+                  },
+                  "parameterOrder": [
+                    "accountId",
+                    "creativeId"
+                  ],
+                  "httpMethod": "GET",
+                  "parameters": {
+                    "pageToken": {
+                      "description": "A token identifying a page of results the server should return.\nTypically, this is the value of\nListDealAssociationsResponse.next_page_token\nreturned from the previous call to 'ListDealAssociations' method.",
+                      "type": "string",
+                      "location": "query"
+                    },
+                    "accountId": {
+                      "location": "path",
+                      "description": "The account to list the associations from.\nSpecify \"-\" to list all creatives the current user has access to.",
+                      "required": true,
+                      "type": "string"
+                    },
+                    "pageSize": {
+                      "description": "Requested page size. Server may return fewer associations than requested.\nIf unspecified, server will pick an appropriate default.",
+                      "format": "int32",
+                      "type": "integer",
+                      "location": "query"
+                    },
+                    "query": {
+                      "location": "query",
+                      "description": "An optional query string to filter deal associations. If no filter is\nspecified, all associations will be returned.\nSupported queries are:\n\u003cul\u003e\n\u003cli\u003eaccountId=\u003ci\u003eaccount_id_string\u003c/i\u003e\n\u003cli\u003ecreativeId=\u003ci\u003ecreative_id_string\u003c/i\u003e\n\u003cli\u003edealsId=\u003ci\u003edeals_id_string\u003c/i\u003e\n\u003cli\u003edealsStatus:{approved, conditionally_approved, disapproved,\n                  not_checked}\n\u003cli\u003eopenAuctionStatus:{approved, conditionally_approved, disapproved,\n                         not_checked}\n\u003c/ul\u003e\nExample: 'dealsId=12345 AND dealsStatus:disapproved'",
+                      "type": "string"
+                    },
+                    "creativeId": {
+                      "location": "path",
+                      "description": "The creative ID to list the associations from.\nSpecify \"-\" to list all creatives under the above account.",
+                      "required": true,
+                      "type": "string"
+                    }
+                  },
+                  "scopes": [
+                    "https://www.googleapis.com/auth/adexchange.buyer"
+                  ],
+                  "flatPath": "v2beta1/accounts/{accountId}/creatives/{creativeId}/dealAssociations",
+                  "path": "v2beta1/accounts/{accountId}/creatives/{creativeId}/dealAssociations",
+                  "id": "adexchangebuyer2.accounts.creatives.dealAssociations.list"
+                }
+              }
+            }
+          },
+          "methods": {
+            "list": {
+              "response": {
+                "$ref": "ListCreativesResponse"
+              },
+              "parameterOrder": [
+                "accountId"
+              ],
+              "httpMethod": "GET",
+              "scopes": [
+                "https://www.googleapis.com/auth/adexchange.buyer"
+              ],
+              "parameters": {
+                "accountId": {
+                  "required": true,
+                  "type": "string",
+                  "location": "path",
+                  "description": "The account to list the creatives from.\nSpecify \"-\" to list all creatives the current user has access to."
+                },
+                "pageSize": {
+                  "location": "query",
+                  "description": "Requested page size. The server may return fewer creatives than requested\n(due to timeout constraint) even if more are available via another call.\nIf unspecified, server will pick an appropriate default.\nAcceptable values are 1 to 1000, inclusive.",
+                  "format": "int32",
+                  "type": "integer"
+                },
+                "query": {
+                  "location": "query",
+                  "description": "An optional query string to filter creatives. If no filter is specified,\nall active creatives will be returned.\nSupported queries are:\n\u003cul\u003e\n\u003cli\u003eaccountId=\u003ci\u003eaccount_id_string\u003c/i\u003e\n\u003cli\u003ecreativeId=\u003ci\u003ecreative_id_string\u003c/i\u003e\n\u003cli\u003edealsStatus: {approved, conditionally_approved, disapproved,\n                   not_checked}\n\u003cli\u003eopenAuctionStatus: {approved, conditionally_approved, disapproved,\n                          not_checked}\n\u003cli\u003eattribute: {a numeric attribute from the list of attributes}\n\u003cli\u003edisapprovalReason: {a reason from DisapprovalReason\n\u003c/ul\u003e\nExample: 'accountId=12345 AND (dealsStatus:disapproved AND disapprovalReason:unacceptable_content) OR attribute:47'",
+                  "type": "string"
+                },
+                "pageToken": {
+                  "description": "A token identifying a page of results the server should return.\nTypically, this is the value of\nListCreativesResponse.next_page_token\nreturned from the previous call to 'ListCreatives' method.",
+                  "type": "string",
+                  "location": "query"
+                }
+              },
+              "flatPath": "v2beta1/accounts/{accountId}/creatives",
+              "path": "v2beta1/accounts/{accountId}/creatives",
+              "id": "adexchangebuyer2.accounts.creatives.list",
+              "description": "Lists creatives."
+            },
+            "create": {
+              "response": {
+                "$ref": "Creative"
+              },
+              "parameterOrder": [
+                "accountId"
+              ],
+              "httpMethod": "POST",
+              "scopes": [
+                "https://www.googleapis.com/auth/adexchange.buyer"
+              ],
+              "parameters": {
+                "duplicateIdMode": {
+                  "location": "query",
+                  "enum": [
+                    "NO_DUPLICATES",
+                    "FORCE_ENABLE_DUPLICATE_IDS"
+                  ],
+                  "description": "Indicates if multiple creatives can share an ID or not. Default is\nNO_DUPLICATES (one ID per creative).",
+                  "type": "string"
+                },
+                "accountId": {
+                  "location": "path",
+                  "description": "The account that this creative belongs to.\nCan be used to filter the response of the\ncreatives.list\nmethod.",
+                  "required": true,
+                  "type": "string"
+                }
+              },
+              "flatPath": "v2beta1/accounts/{accountId}/creatives",
+              "path": "v2beta1/accounts/{accountId}/creatives",
+              "id": "adexchangebuyer2.accounts.creatives.create",
+              "description": "Creates a creative.",
+              "request": {
+                "$ref": "Creative"
+              }
+            },
+            "stopWatching": {
+              "request": {
+                "$ref": "StopWatchingCreativeRequest"
+              },
+              "description": "Stops watching a creative. Will stop push notifications being sent to the\ntopics when the creative changes status.",
+              "httpMethod": "POST",
+              "parameterOrder": [
+                "accountId",
+                "creativeId"
+              ],
+              "response": {
+                "$ref": "Empty"
+              },
+              "parameters": {
+                "accountId": {
+                  "location": "path",
+                  "description": "The account of the creative to stop notifications for.",
+                  "required": true,
+                  "type": "string"
+                },
+                "creativeId": {
+                  "location": "path",
+                  "description": "The creative ID of the creative to stop notifications for.\nSpecify \"-\" to specify stopping account level notifications.",
+                  "required": true,
+                  "type": "string"
+                }
+              },
+              "scopes": [
+                "https://www.googleapis.com/auth/adexchange.buyer"
+              ],
+              "flatPath": "v2beta1/accounts/{accountId}/creatives/{creativeId}:stopWatching",
+              "id": "adexchangebuyer2.accounts.creatives.stopWatching",
+              "path": "v2beta1/accounts/{accountId}/creatives/{creativeId}:stopWatching"
+            },
+            "get": {
+              "id": "adexchangebuyer2.accounts.creatives.get",
+              "path": "v2beta1/accounts/{accountId}/creatives/{creativeId}",
+              "description": "Gets a creative.",
+              "httpMethod": "GET",
+              "parameterOrder": [
+                "accountId",
+                "creativeId"
+              ],
+              "response": {
+                "$ref": "Creative"
+              },
+              "parameters": {
+                "accountId": {
+                  "description": "The account the creative belongs to.",
+                  "required": true,
+                  "type": "string",
+                  "location": "path"
+                },
+                "creativeId": {
+                  "location": "path",
+                  "description": "The ID of the creative to retrieve.",
+                  "required": true,
+                  "type": "string"
+                }
+              },
+              "scopes": [
+                "https://www.googleapis.com/auth/adexchange.buyer"
+              ],
+              "flatPath": "v2beta1/accounts/{accountId}/creatives/{creativeId}"
+            },
+            "watch": {
+              "id": "adexchangebuyer2.accounts.creatives.watch",
+              "path": "v2beta1/accounts/{accountId}/creatives/{creativeId}:watch",
+              "description": "Watches a creative. Will result in push notifications being sent to the\ntopic when the creative changes status.",
+              "request": {
+                "$ref": "WatchCreativeRequest"
+              },
+              "httpMethod": "POST",
+              "parameterOrder": [
+                "accountId",
+                "creativeId"
+              ],
+              "response": {
+                "$ref": "Empty"
+              },
+              "scopes": [
+                "https://www.googleapis.com/auth/adexchange.buyer"
+              ],
+              "parameters": {
+                "accountId": {
+                  "location": "path",
+                  "description": "The account of the creative to watch.",
+                  "required": true,
+                  "type": "string"
+                },
+                "creativeId": {
+                  "location": "path",
+                  "description": "The creative ID to watch for status changes.\nSpecify \"-\" to watch all creatives under the above account.\nIf both creative-level and account-level notifications are\nsent, only a single notification will be sent to the\ncreative-level notification topic.",
+                  "required": true,
+                  "type": "string"
+                }
+              },
+              "flatPath": "v2beta1/accounts/{accountId}/creatives/{creativeId}:watch"
+            },
+            "update": {
+              "description": "Updates a creative.",
+              "request": {
+                "$ref": "Creative"
+              },
+              "httpMethod": "PUT",
+              "parameterOrder": [
+                "accountId",
+                "creativeId"
+              ],
+              "response": {
+                "$ref": "Creative"
+              },
+              "scopes": [
+                "https://www.googleapis.com/auth/adexchange.buyer"
+              ],
+              "parameters": {
+                "accountId": {
+                  "description": "The account that this creative belongs to.\nCan be used to filter the response of the\ncreatives.list\nmethod.",
+                  "required": true,
+                  "type": "string",
+                  "location": "path"
+                },
+                "creativeId": {
+                  "description": "The buyer-defined creative ID of this creative.\nCan be used to filter the response of the\ncreatives.list\nmethod.",
+                  "required": true,
+                  "type": "string",
+                  "location": "path"
+                }
+              },
+              "flatPath": "v2beta1/accounts/{accountId}/creatives/{creativeId}",
+              "id": "adexchangebuyer2.accounts.creatives.update",
+              "path": "v2beta1/accounts/{accountId}/creatives/{creativeId}"
+            }
+          }
+        }
+      }
+    }
+  },
+  "parameters": {
+    "oauth_token": {
+      "location": "query",
+      "description": "OAuth 2.0 token for the current user.",
+      "type": "string"
+    },
+    "bearer_token": {
+      "type": "string",
+      "location": "query",
+      "description": "OAuth bearer token."
+    },
+    "upload_protocol": {
+      "description": "Upload protocol for media (e.g. \"raw\", \"multipart\").",
+      "type": "string",
+      "location": "query"
+    },
+    "prettyPrint": {
+      "description": "Returns response with indentations and line breaks.",
+      "type": "boolean",
+      "default": "true",
+      "location": "query"
+    },
+    "fields": {
+      "description": "Selector specifying which fields to include in a partial response.",
+      "type": "string",
+      "location": "query"
+    },
+    "uploadType": {
+      "location": "query",
+      "description": "Legacy upload protocol for media (e.g. \"media\", \"multipart\").",
+      "type": "string"
+    },
+    "$.xgafv": {
+      "type": "string",
+      "enumDescriptions": [
+        "v1 error format",
+        "v2 error format"
+      ],
+      "location": "query",
+      "enum": [
+        "1",
+        "2"
+      ],
+      "description": "V1 error format."
+    },
+    "callback": {
+      "location": "query",
+      "description": "JSONP",
+      "type": "string"
+    },
+    "alt": {
+      "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",
+      "description": "Data format for response.",
+      "default": "json",
+      "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.",
+      "type": "string",
+      "location": "query"
+    },
+    "access_token": {
+      "description": "OAuth access token.",
+      "type": "string",
+      "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.",
+      "type": "string",
+      "location": "query"
+    },
+    "pp": {
+      "type": "boolean",
+      "default": "true",
+      "location": "query",
+      "description": "Pretty-print response."
+    }
+  },
+  "version": "v2beta1",
+  "baseUrl": "https://adexchangebuyer.googleapis.com/",
   "servicePath": "",
+  "description": "Accesses the latest features for managing Ad Exchange accounts, Real-Time Bidding configurations and auction metrics, and Marketplace programmatic deals.",
+  "kind": "discovery#restDescription",
   "basePath": "",
-  "revision": "20170308",
   "documentationLink": "https://developers.google.com/ad-exchange/buyer-rest/guides/client-access/",
+  "revision": "20170324",
   "id": "adexchangebuyer2:v2beta1",
   "discoveryVersion": "v1",
   "version_module": "True",
   "schemas": {
+    "Empty": {
+      "properties": {},
+      "id": "Empty",
+      "description": "A generic empty message that you can re-use to avoid defining duplicated\nempty messages in your APIs. A typical example is to use it as the request\nor the response type of an API method. For instance:\n\n    service Foo {\n      rpc Bar(google.protobuf.Empty) returns (google.protobuf.Empty);\n    }\n\nThe JSON representation for `Empty` is empty JSON object `{}`.",
+      "type": "object"
+    },
+    "WatchCreativeRequest": {
+      "description": "A request for watching changes to creative Status.",
+      "type": "object",
+      "properties": {
+        "topic": {
+          "description": "The Pub/Sub topic to publish notifications to.\nThis topic must already exist and must give permission to\nad-exchange-buyside-reports@google.com to write to the topic.\nThis should be the full resource name in\n\"projects/{project_id}/topics/{topic_id}\" format.",
+          "type": "string"
+        }
+      },
+      "id": "WatchCreativeRequest"
+    },
+    "AppContext": {
+      "id": "AppContext",
+      "description": "@OutputOnly The app type the restriction applies to for mobile device.",
+      "type": "object",
+      "properties": {
+        "appTypes": {
+          "description": "The app types this restriction applies to.",
+          "type": "array",
+          "items": {
+            "enum": [
+              "NATIVE",
+              "WEB"
+            ],
+            "type": "string"
+          },
+          "enumDescriptions": [
+            "Native app context.",
+            "Mobile web app context."
+          ]
+        }
+      }
+    },
+    "ListClientsResponse": {
+      "type": "object",
+      "properties": {
+        "nextPageToken": {
+          "description": "A token to retrieve the next page of results.\nPass this value in the\nListClientsRequest.pageToken\nfield in the subsequent call to the\naccounts.clients.list method\nto retrieve the next page of results.",
+          "type": "string"
+        },
+        "clients": {
+          "description": "The returned list of clients.",
+          "type": "array",
+          "items": {
+            "$ref": "Client"
+          }
+        }
+      },
+      "id": "ListClientsResponse"
+    },
+    "NativeContent": {
+      "id": "NativeContent",
+      "description": "Native content for a creative.",
+      "type": "object",
+      "properties": {
+        "body": {
+          "description": "A long description of the ad.",
+          "type": "string"
+        },
+        "starRating": {
+          "description": "The app rating in the app store. Must be in the range [0-5].",
+          "format": "double",
+          "type": "number"
+        },
+        "videoUrl": {
+          "description": "The URL to fetch a native video ad.",
+          "type": "string"
+        },
+        "clickLinkUrl": {
+          "description": "The URL that the browser/SDK will load when the user clicks the ad.",
+          "type": "string"
+        },
+        "logo": {
+          "$ref": "Image",
+          "description": "A smaller image, for the advertiser's logo."
+        },
+        "priceDisplayText": {
+          "description": "The price of the promoted app including currency info.",
+          "type": "string"
+        },
+        "image": {
+          "$ref": "Image",
+          "description": "A large image."
+        },
+        "clickTrackingUrl": {
+          "description": "The URL to use for click tracking.",
+          "type": "string"
+        },
+        "advertiserName": {
+          "description": "The name of the advertiser or sponsor, to be displayed in the ad creative.",
+          "type": "string"
+        },
+        "storeUrl": {
+          "description": "The URL to the app store to purchase/download the promoted app.",
+          "type": "string"
+        },
+        "headline": {
+          "description": "A short title for the ad.",
+          "type": "string"
+        },
+        "appIcon": {
+          "$ref": "Image",
+          "description": "The app icon, for app download ads."
+        },
+        "callToAction": {
+          "description": "A label for the button that the user is supposed to click.",
+          "type": "string"
+        }
+      }
+    },
+    "SecurityContext": {
+      "description": "@OutputOnly A security context.",
+      "type": "object",
+      "properties": {
+        "securities": {
+          "type": "array",
+          "items": {
+            "type": "string",
+            "enum": [
+              "INSECURE",
+              "SSL"
+            ]
+          },
+          "enumDescriptions": [
+            "Matches impressions that require insecure compatibility.",
+            "Matches impressions that require SSL compatibility."
+          ],
+          "description": "The security types in this context."
+        }
+      },
+      "id": "SecurityContext"
+    },
+    "ListCreativesResponse": {
+      "description": "A response for listing creatives.",
+      "type": "object",
+      "properties": {
+        "creatives": {
+          "description": "The list of creatives.",
+          "type": "array",
+          "items": {
+            "$ref": "Creative"
+          }
+        },
+        "nextPageToken": {
+          "description": "A token to retrieve the next page of results.\nPass this value in the\nListCreativesRequest.page_token\nfield in the subsequent call to `ListCreatives` method to retrieve the next\npage of results.",
+          "type": "string"
+        }
+      },
+      "id": "ListCreativesResponse"
+    },
+    "HtmlContent": {
+      "id": "HtmlContent",
+      "description": "HTML content for a creative.",
+      "type": "object",
+      "properties": {
+        "height": {
+          "description": "The height of the HTML snippet in pixels.",
+          "format": "int32",
+          "type": "integer"
+        },
+        "width": {
+          "description": "The width of the HTML snippet in pixels.",
+          "format": "int32",
+          "type": "integer"
+        },
+        "snippet": {
+          "description": "The HTML snippet that displays the ad when inserted in the web page.",
+          "type": "string"
+        }
+      }
+    },
+    "ServingContext": {
+      "description": "The serving context for this restriction.",
+      "type": "object",
+      "properties": {
+        "appType": {
+          "description": "Matches impressions for a particular app type.",
+          "$ref": "AppContext"
+        },
+        "securityType": {
+          "description": "Matches impressions for a particular security type.",
+          "$ref": "SecurityContext"
+        },
+        "platform": {
+          "$ref": "PlatformContext",
+          "description": "Matches impressions coming from a particular platform."
+        },
+        "location": {
+          "description": "Matches impressions coming from users *or* publishers in a specific\nlocation.",
+          "$ref": "LocationContext"
+        },
+        "auctionType": {
+          "description": "Matches impressions for a particular auction type.",
+          "$ref": "AuctionContext"
+        },
+        "all": {
+          "enumDescriptions": [
+            "A simple context."
+          ],
+          "enum": [
+            "SIMPLE_CONTEXT"
+          ],
+          "description": "Matches all contexts.",
+          "type": "string"
+        }
+      },
+      "id": "ServingContext"
+    },
     "Image": {
       "description": "An image resource. You may provide a larger image than was requested,\nso long as the aspect ratio is preserved.",
       "type": "object",
       "properties": {
-        "width": {
-          "description": "Image width in pixels.",
-          "format": "int32",
-          "type": "integer"
-        },
         "url": {
           "description": "The URL of the image.",
           "type": "string"
@@ -26,6 +1062,11 @@
           "description": "Image height in pixels.",
           "format": "int32",
           "type": "integer"
+        },
+        "width": {
+          "description": "Image width in pixels.",
+          "format": "int32",
+          "type": "integer"
         }
       },
       "id": "Image"
@@ -34,39 +1075,32 @@
       "description": "A specific filtering status and how many times it occurred.",
       "type": "object",
       "properties": {
-        "status": {
-          "description": "The filtering status code. Please refer to the\n[creative-status-codes.txt](https://storage.googleapis.com/adx-rtb-dictionaries/creative-status-codes.txt)\nfile for different statuses.",
-          "format": "int32",
-          "type": "integer"
-        },
         "count": {
           "description": "The number of times the creative was filtered for the status. The\ncount is aggregated across all publishers on the exchange.",
           "format": "int64",
           "type": "string"
+        },
+        "status": {
+          "description": "The filtering status code. Please refer to the\n[creative-status-codes.txt](https://storage.googleapis.com/adx-rtb-dictionaries/creative-status-codes.txt)\nfile for different statuses.",
+          "format": "int32",
+          "type": "integer"
         }
       },
       "id": "Reason"
     },
     "VideoContent": {
+      "description": "Video content for a creative.",
+      "type": "object",
       "properties": {
         "videoUrl": {
           "description": "The URL to fetch a video ad.",
           "type": "string"
         }
       },
-      "id": "VideoContent",
-      "description": "Video content for a creative.",
-      "type": "object"
+      "id": "VideoContent"
     },
     "ClientUserInvitation": {
-      "description": "An invitation for a new client user to get access to the Ad Exchange\nBuyer UI.\nAll fields are required unless otherwise specified.",
-      "type": "object",
       "properties": {
-        "invitationId": {
-          "description": "The unique numerical ID of the invitation that is sent to the user.\nThe value of this field is ignored in create operations.",
-          "format": "int64",
-          "type": "string"
-        },
         "email": {
           "description": "The email address to which the invitation is sent. Email\naddresses should be unique among all client users under each sponsor\nbuyer.",
           "type": "string"
@@ -75,15 +1109,26 @@
           "description": "Numerical account ID of the client buyer\nthat the invited user is associated with.\nThe value of this field is ignored in create operations.",
           "format": "int64",
           "type": "string"
+        },
+        "invitationId": {
+          "description": "The unique numerical ID of the invitation that is sent to the user.\nThe value of this field is ignored in create operations.",
+          "format": "int64",
+          "type": "string"
         }
       },
-      "id": "ClientUserInvitation"
+      "id": "ClientUserInvitation",
+      "description": "An invitation for a new client user to get access to the Ad Exchange\nBuyer UI.\nAll fields are required unless otherwise specified.",
+      "type": "object"
     },
     "AuctionContext": {
       "description": "@OutputOnly The auction type the restriction applies to.",
       "type": "object",
       "properties": {
         "auctionTypes": {
+          "enumDescriptions": [
+            "The restriction applies to open auction.",
+            "The restriction applies to direct deals."
+          ],
           "description": "The auction types this restriction applies to.",
           "type": "array",
           "items": {
@@ -92,48 +1137,44 @@
               "OPEN_AUCTION",
               "DIRECT_DEALS"
             ]
-          },
-          "enumDescriptions": [
-            "The restriction applies to open auction.",
-            "The restriction applies to direct deals."
-          ]
+          }
         }
       },
       "id": "AuctionContext"
     },
+    "ListClientUsersResponse": {
+      "properties": {
+        "nextPageToken": {
+          "description": "A token to retrieve the next page of results.\nPass this value in the\nListClientUsersRequest.pageToken\nfield in the subsequent call to the\nclients.invitations.list\nmethod to retrieve the next\npage of results.",
+          "type": "string"
+        },
+        "users": {
+          "description": "The returned list of client users.",
+          "type": "array",
+          "items": {
+            "$ref": "ClientUser"
+          }
+        }
+      },
+      "id": "ListClientUsersResponse",
+      "type": "object"
+    },
     "ListClientUserInvitationsResponse": {
-      "id": "ListClientUserInvitationsResponse",
-      "type": "object",
       "properties": {
         "nextPageToken": {
           "description": "A token to retrieve the next page of results.\nPass this value in the\nListClientUserInvitationsRequest.pageToken\nfield in the subsequent call to the\nclients.invitations.list\nmethod to retrieve the next\npage of results.",
           "type": "string"
         },
         "invitations": {
+          "description": "The returned list of client users.",
           "type": "array",
           "items": {
             "$ref": "ClientUserInvitation"
-          },
-          "description": "The returned list of client users."
-        }
-      }
-    },
-    "ListClientUsersResponse": {
-      "type": "object",
-      "properties": {
-        "users": {
-          "type": "array",
-          "items": {
-            "$ref": "ClientUser"
-          },
-          "description": "The returned list of client users."
-        },
-        "nextPageToken": {
-          "description": "A token to retrieve the next page of results.\nPass this value in the\nListClientUsersRequest.pageToken\nfield in the subsequent call to the\nclients.invitations.list\nmethod to retrieve the next\npage of results.",
-          "type": "string"
+          }
         }
       },
-      "id": "ListClientUsersResponse"
+      "id": "ListClientUserInvitationsResponse",
+      "type": "object"
     },
     "LocationContext": {
       "type": "object",
@@ -155,21 +1196,21 @@
       "type": "object",
       "properties": {
         "platforms": {
-          "enumDescriptions": [
-            "Desktop platform.",
-            "Android platform.",
-            "iOS platform."
-          ],
           "description": "The platforms this restriction applies to.",
           "type": "array",
           "items": {
+            "type": "string",
             "enum": [
               "DESKTOP",
               "ANDROID",
               "IOS"
-            ],
-            "type": "string"
-          }
+            ]
+          },
+          "enumDescriptions": [
+            "Desktop platform.",
+            "Android platform.",
+            "iOS platform."
+          ]
         }
       },
       "id": "PlatformContext"
@@ -178,27 +1219,6 @@
       "description": "A client user is created under a client buyer and has restricted access to\nthe Ad Exchange Marketplace and certain other sections\nof the Ad Exchange Buyer UI based on the role\ngranted to the associated client buyer.\n\nThe only way a new client user can be created is via accepting an\nemail invitation\n(see the\naccounts.clients.invitations.create\nmethod).\n\nAll fields are required unless otherwise specified.",
       "type": "object",
       "properties": {
-        "clientAccountId": {
-          "description": "Numerical account ID of the client buyer\nwith which the user is associated; the\nbuyer must be a client of the current sponsor buyer.\nThe value of this field is ignored in an update operation.",
-          "format": "int64",
-          "type": "string"
-        },
-        "status": {
-          "description": "The status of the client user.",
-          "type": "string",
-          "enumDescriptions": [
-            "A placeholder for an undefined user status.",
-            "A user who was already created but hasn't accepted the invitation yet.",
-            "A user that is currently active.",
-            "A user that is currently disabled."
-          ],
-          "enum": [
-            "USER_STATUS_UNSPECIFIED",
-            "PENDING",
-            "ACTIVE",
-            "DISABLED"
-          ]
-        },
         "userId": {
           "description": "The unique numerical ID of the client user\nthat has accepted an invitation.\nThe value of this field is ignored in an update operation.",
           "format": "int64",
@@ -207,6 +1227,27 @@
         "email": {
           "description": "User's email address. The value of this field\nis ignored in an update operation.",
           "type": "string"
+        },
+        "clientAccountId": {
+          "type": "string",
+          "description": "Numerical account ID of the client buyer\nwith which the user is associated; the\nbuyer must be a client of the current sponsor buyer.\nThe value of this field is ignored in an update operation.",
+          "format": "int64"
+        },
+        "status": {
+          "enum": [
+            "USER_STATUS_UNSPECIFIED",
+            "PENDING",
+            "ACTIVE",
+            "DISABLED"
+          ],
+          "description": "The status of the client user.",
+          "type": "string",
+          "enumDescriptions": [
+            "A placeholder for an undefined user status.",
+            "A user who was already created but hasn't accepted the invitation yet.",
+            "A user that is currently active.",
+            "A user that is currently disabled."
+          ]
         }
       },
       "id": "ClientUser"
@@ -230,11 +1271,180 @@
       },
       "id": "CreativeDealAssociation"
     },
+    "FilteringStats": {
+      "description": "@OutputOnly Filtering reasons for this creative during a period of a single\nday (from midnight to midnight Pacific).",
+      "type": "object",
+      "properties": {
+        "date": {
+          "description": "The day during which the data was collected.\nThe data is collected from 00:00:00 to 23:59:59 PT.\nDuring switches from PST to PDT and back, the day may\ncontain 23 or 25 hours of data instead of the usual 24.",
+          "$ref": "Date"
+        },
+        "reasons": {
+          "description": "The set of filtering reasons for this date.",
+          "type": "array",
+          "items": {
+            "$ref": "Reason"
+          }
+        }
+      },
+      "id": "FilteringStats"
+    },
     "Creative": {
-      "id": "Creative",
       "description": "A creative and its classification data.",
       "type": "object",
       "properties": {
+        "accountId": {
+          "type": "string",
+          "description": "The account that this creative belongs to.\nCan be used to filter the response of the\ncreatives.list\nmethod."
+        },
+        "native": {
+          "$ref": "NativeContent",
+          "description": "A native creative."
+        },
+        "video": {
+          "description": "A video creative.",
+          "$ref": "VideoContent"
+        },
+        "servingRestrictions": {
+          "description": "@OutputOnly The granular status of this ad in specific contexts.\nA context here relates to where something ultimately serves (for example,\na physical location, a platform, an HTTPS vs HTTP request, or the type\nof auction).",
+          "type": "array",
+          "items": {
+            "$ref": "ServingRestriction"
+          }
+        },
+        "agencyId": {
+          "description": "The agency ID for this creative.",
+          "format": "int64",
+          "type": "string"
+        },
+        "clickThroughUrls": {
+          "description": "The set of destination URLs for the creative.",
+          "type": "array",
+          "items": {
+            "type": "string"
+          }
+        },
+        "detectedSensitiveCategories": {
+          "description": "@OutputOnly Detected sensitive categories, if any.\nSee the ad-sensitive-categories.txt file in the technical documentation for\na list of IDs. You should use these IDs along with the\nexcluded-sensitive-category field in the bid request to filter your bids.",
+          "type": "array",
+          "items": {
+            "format": "int32",
+            "type": "integer"
+          }
+        },
+        "adChoicesDestinationUrl": {
+          "type": "string",
+          "description": "The link to AdChoices destination page."
+        },
+        "restrictedCategories": {
+          "description": "All restricted categories for the ads that may be shown from this creative.",
+          "type": "array",
+          "items": {
+            "type": "string",
+            "enum": [
+              "NO_RESTRICTED_CATEGORIES",
+              "ALCOHOL"
+            ]
+          },
+          "enumDescriptions": [
+            "The ad has no restricted categories",
+            "The alcohol restricted category."
+          ]
+        },
+        "corrections": {
+          "description": "@OutputOnly Shows any corrections that were applied to this creative.",
+          "type": "array",
+          "items": {
+            "$ref": "Correction"
+          }
+        },
+        "version": {
+          "description": "@OutputOnly The version of this creative.",
+          "format": "int32",
+          "type": "integer"
+        },
+        "vendorIds": {
+          "description": "All vendor IDs for the ads that may be shown from this creative.\nSee https://storage.googleapis.com/adx-rtb-dictionaries/vendors.txt\nfor possible values.",
+          "type": "array",
+          "items": {
+            "format": "int32",
+            "type": "integer"
+          }
+        },
+        "impressionTrackingUrls": {
+          "type": "array",
+          "items": {
+            "type": "string"
+          },
+          "description": "The set of URLs to be called to record an impression."
+        },
+        "html": {
+          "$ref": "HtmlContent",
+          "description": "An HTML creative."
+        },
+        "detectedProductCategories": {
+          "description": "@OutputOnly Detected product categories, if any.\nSee the ad-product-categories.txt file in the technical documentation\nfor a list of IDs.",
+          "type": "array",
+          "items": {
+            "type": "integer",
+            "format": "int32"
+          }
+        },
+        "dealsStatus": {
+          "description": "@OutputOnly The top-level deals status of this creative.\nIf disapproved, an entry for 'auctionType=DIRECT_DEALS' (or 'ALL') in\nserving_restrictions will also exist. Note\nthat this may be nuanced with other contextual restrictions, in which case,\nit may be preferable to read from serving_restrictions directly.\nCan be used to filter the response of the\ncreatives.list\nmethod.",
+          "type": "string",
+          "enumDescriptions": [
+            "The status is unknown.",
+            "The creative has not been checked.",
+            "The creative has been conditionally approved.\nSee serving_restrictions for details.",
+            "The creative has been approved.",
+            "The creative has been disapproved."
+          ],
+          "enum": [
+            "STATUS_UNSPECIFIED",
+            "NOT_CHECKED",
+            "CONDITIONALLY_APPROVED",
+            "APPROVED",
+            "DISAPPROVED"
+          ]
+        },
+        "openAuctionStatus": {
+          "description": "@OutputOnly The top-level open auction status of this creative.\nIf disapproved, an entry for 'auctionType = OPEN_AUCTION' (or 'ALL') in\nserving_restrictions will also exist. Note\nthat this may be nuanced with other contextual restrictions, in which case,\nit may be preferable to read from serving_restrictions directly.\nCan be used to filter the response of the\ncreatives.list\nmethod.",
+          "type": "string",
+          "enumDescriptions": [
+            "The status is unknown.",
+            "The creative has not been checked.",
+            "The creative has been conditionally approved.\nSee serving_restrictions for details.",
+            "The creative has been approved.",
+            "The creative has been disapproved."
+          ],
+          "enum": [
+            "STATUS_UNSPECIFIED",
+            "NOT_CHECKED",
+            "CONDITIONALLY_APPROVED",
+            "APPROVED",
+            "DISAPPROVED"
+          ]
+        },
+        "advertiserName": {
+          "description": "The name of the company being advertised in the creative.",
+          "type": "string"
+        },
+        "detectedDomains": {
+          "description": "@OutputOnly\nThe detected domains for this creative.",
+          "type": "array",
+          "items": {
+            "type": "string"
+          }
+        },
+        "detectedAdvertiserIds": {
+          "type": "array",
+          "items": {
+            "format": "int64",
+            "type": "string"
+          },
+          "description": "@OutputOnly Detected advertiser IDs, if any."
+        },
         "filteringStats": {
           "description": "@OutputOnly The filtering stats for this creative.",
           "$ref": "FilteringStats"
@@ -243,6 +1453,7 @@
           "description": "All attributes for the ads that may be shown from this creative.\nCan be used to filter the response of the\ncreatives.list\nmethod.",
           "type": "array",
           "items": {
+            "type": "string",
             "enum": [
               "ATTRIBUTE_UNSPECIFIED",
               "IS_TAGGED",
@@ -268,8 +1479,7 @@
               "NATIVE_ELIGIBILITY_ELIGIBLE",
               "NATIVE_ELIGIBILITY_NOT_ELIGIBLE",
               "RENDERING_SIZELESS_ADX"
-            ],
-            "type": "string"
+            ]
           },
           "enumDescriptions": [
             "Do not use. This is a placeholder value only.",
@@ -313,181 +1523,11 @@
         "creativeId": {
           "description": "The buyer-defined creative ID of this creative.\nCan be used to filter the response of the\ncreatives.list\nmethod.",
           "type": "string"
-        },
-        "accountId": {
-          "type": "string",
-          "description": "The account that this creative belongs to.\nCan be used to filter the response of the\ncreatives.list\nmethod."
-        },
-        "native": {
-          "$ref": "NativeContent",
-          "description": "A native creative."
-        },
-        "servingRestrictions": {
-          "description": "@OutputOnly The granular status of this ad in specific contexts.\nA context here relates to where something ultimately serves (for example,\na physical location, a platform, an HTTPS vs HTTP request, or the type\nof auction).",
-          "type": "array",
-          "items": {
-            "$ref": "ServingRestriction"
-          }
-        },
-        "video": {
-          "description": "A video creative.",
-          "$ref": "VideoContent"
-        },
-        "agencyId": {
-          "description": "The agency ID for this creative.",
-          "format": "int64",
-          "type": "string"
-        },
-        "clickThroughUrls": {
-          "type": "array",
-          "items": {
-            "type": "string"
-          },
-          "description": "The set of destination URLs for the creative."
-        },
-        "adChoicesDestinationUrl": {
-          "description": "The link to AdChoices destination page.",
-          "type": "string"
-        },
-        "detectedSensitiveCategories": {
-          "description": "@OutputOnly Detected sensitive categories, if any.\nSee the ad-sensitive-categories.txt file in the technical documentation for\na list of IDs. You should use these IDs along with the\nexcluded-sensitive-category field in the bid request to filter your bids.",
-          "type": "array",
-          "items": {
-            "type": "integer",
-            "format": "int32"
-          }
-        },
-        "restrictedCategories": {
-          "enumDescriptions": [
-            "The ad has no restricted categories",
-            "The alcohol restricted category."
-          ],
-          "description": "All restricted categories for the ads that may be shown from this creative.",
-          "type": "array",
-          "items": {
-            "enum": [
-              "NO_RESTRICTED_CATEGORIES",
-              "ALCOHOL"
-            ],
-            "type": "string"
-          }
-        },
-        "corrections": {
-          "description": "@OutputOnly Shows any corrections that were applied to this creative.",
-          "type": "array",
-          "items": {
-            "$ref": "Correction"
-          }
-        },
-        "version": {
-          "description": "@OutputOnly The version of this creative.",
-          "format": "int32",
-          "type": "integer"
-        },
-        "vendorIds": {
-          "description": "All vendor IDs for the ads that may be shown from this creative.\nSee https://storage.googleapis.com/adx-rtb-dictionaries/vendors.txt\nfor possible values.",
-          "type": "array",
-          "items": {
-            "format": "int32",
-            "type": "integer"
-          }
-        },
-        "impressionTrackingUrls": {
-          "description": "The set of URLs to be called to record an impression.",
-          "type": "array",
-          "items": {
-            "type": "string"
-          }
-        },
-        "html": {
-          "description": "An HTML creative.",
-          "$ref": "HtmlContent"
-        },
-        "dealsStatus": {
-          "type": "string",
-          "enumDescriptions": [
-            "The status is unknown.",
-            "The creative has not been checked.",
-            "The creative has been conditionally approved.\nSee serving_restrictions for details.",
-            "The creative has been approved.",
-            "The creative has been disapproved."
-          ],
-          "enum": [
-            "STATUS_UNSPECIFIED",
-            "NOT_CHECKED",
-            "CONDITIONALLY_APPROVED",
-            "APPROVED",
-            "DISAPPROVED"
-          ],
-          "description": "@OutputOnly The top-level deals status of this creative.\nIf disapproved, an entry for 'auctionType=DIRECT_DEALS' (or 'ALL') in\nserving_restrictions will also exist. Note\nthat this may be nuanced with other contextual restrictions, in which case,\nit may be preferable to read from serving_restrictions directly.\nCan be used to filter the response of the\ncreatives.list\nmethod."
-        },
-        "detectedProductCategories": {
-          "description": "@OutputOnly Detected product categories, if any.\nSee the ad-product-categories.txt file in the technical documentation\nfor a list of IDs.",
-          "type": "array",
-          "items": {
-            "format": "int32",
-            "type": "integer"
-          }
-        },
-        "openAuctionStatus": {
-          "description": "@OutputOnly The top-level open auction status of this creative.\nIf disapproved, an entry for 'auctionType = OPEN_AUCTION' (or 'ALL') in\nserving_restrictions will also exist. Note\nthat this may be nuanced with other contextual restrictions, in which case,\nit may be preferable to read from serving_restrictions directly.\nCan be used to filter the response of the\ncreatives.list\nmethod.",
-          "type": "string",
-          "enumDescriptions": [
-            "The status is unknown.",
-            "The creative has not been checked.",
-            "The creative has been conditionally approved.\nSee serving_restrictions for details.",
-            "The creative has been approved.",
-            "The creative has been disapproved."
-          ],
-          "enum": [
-            "STATUS_UNSPECIFIED",
-            "NOT_CHECKED",
-            "CONDITIONALLY_APPROVED",
-            "APPROVED",
-            "DISAPPROVED"
-          ]
-        },
-        "advertiserName": {
-          "description": "The name of the company being advertised in the creative.",
-          "type": "string"
-        },
-        "detectedDomains": {
-          "description": "@OutputOnly\nThe detected domains for this creative.",
-          "type": "array",
-          "items": {
-            "type": "string"
-          }
-        },
-        "detectedAdvertiserIds": {
-          "description": "@OutputOnly Detected advertiser IDs, if any.",
-          "type": "array",
-          "items": {
-            "type": "string",
-            "format": "int64"
-          }
-        }
-      }
-    },
-    "FilteringStats": {
-      "description": "@OutputOnly Filtering reasons for this creative during a period of a single\nday (from midnight to midnight Pacific).",
-      "type": "object",
-      "properties": {
-        "date": {
-          "description": "The day during which the data was collected.\nThe data is collected from 00:00:00 to 23:59:59 PT.\nDuring switches from PST to PDT and back, the day may\ncontain 23 or 25 hours of data instead of the usual 24.",
-          "$ref": "Date"
-        },
-        "reasons": {
-          "description": "The set of filtering reasons for this date.",
-          "type": "array",
-          "items": {
-            "$ref": "Reason"
-          }
         }
       },
-      "id": "FilteringStats"
+      "id": "Creative"
     },
     "RemoveDealAssociationRequest": {
-      "id": "RemoveDealAssociationRequest",
       "description": "A request for removing the association between a deal and a creative.",
       "type": "object",
       "properties": {
@@ -495,49 +1535,16 @@
           "$ref": "CreativeDealAssociation",
           "description": "The association between a creative and a deal that should be removed."
         }
-      }
+      },
+      "id": "RemoveDealAssociationRequest"
     },
     "Client": {
       "description": "A client resource represents a client buyer&mdash;an agency,\na brand, or an advertiser customer of the sponsor buyer.\nUsers associated with the client buyer have restricted access to\nthe Ad Exchange Marketplace and certain other sections\nof the Ad Exchange Buyer UI based on the role\ngranted to the client buyer.\nAll fields are required unless otherwise specified.",
       "type": "object",
       "properties": {
-        "clientName": {
-          "description": "Name used to represent this client to publishers.\nYou may have multiple clients that map to the same entity,\nbut for each client the combination of `clientName` and entity\nmust be unique.\nYou can specify this field as empty.",
-          "type": "string"
-        },
-        "role": {
-          "description": "The role which is assigned to the client buyer. Each role implies a set of\npermissions granted to the client. Must be one of `CLIENT_DEAL_VIEWER`,\n`CLIENT_DEAL_NEGOTIATOR` or `CLIENT_DEAL_APPROVER`.",
-          "type": "string",
-          "enumDescriptions": [
-            "A placeholder for an undefined client role.",
-            "Users associated with this client can see publisher deal offers\nin the Marketplace.\nThey can neither negotiate proposals nor approve deals.\nIf this client is visible to publishers, they can send deal proposals\nto this client.",
-            "Users associated with this client can respond to deal proposals\nsent to them by publishers. They can also initiate deal proposals\nof their own.",
-            "Users associated with this client can approve eligible deals\non your behalf. Some deals may still explicitly require publisher\nfinalization. If this role is not selected, the sponsor buyer\nwill need to manually approve each of their deals."
-          ],
-          "enum": [
-            "CLIENT_ROLE_UNSPECIFIED",
-            "CLIENT_DEAL_VIEWER",
-            "CLIENT_DEAL_NEGOTIATOR",
-            "CLIENT_DEAL_APPROVER"
-          ]
-        },
-        "visibleToSeller": {
-          "description": "Whether the client buyer will be visible to sellers.",
-          "type": "boolean"
-        },
-        "entityId": {
-          "type": "string",
-          "description": "Numerical identifier of the client entity.\nThe entity can be an advertiser, a brand, or an agency.\nThis identifier is unique among all the entities with the same type.\n\nA list of all known advertisers with their identifiers is available in the\n[advertisers.txt](https://storage.googleapis.com/adx-rtb-dictionaries/advertisers.txt)\nfile.\n\nA list of all known brands with their identifiers is available in the\n[brands.txt](https://storage.googleapis.com/adx-rtb-dictionaries/brands.txt)\nfile.\n\nA list of all known agencies with their identifiers is available in the\n[agencies.txt](https://storage.googleapis.com/adx-rtb-dictionaries/agencies.txt)\nfile.",
-          "format": "int64"
-        },
-        "clientAccountId": {
-          "description": "The globally-unique numerical ID of the client.\nThe value of this field is ignored in create and update operations.",
-          "format": "int64",
-          "type": "string"
-        },
         "entityName": {
-          "description": "The name of the entity. This field is automatically fetched based on\nthe type and ID.\nThe value of this field is ignored in create and update operations.",
-          "type": "string"
+          "type": "string",
+          "description": "The name of the entity. This field is automatically fetched based on\nthe type and ID.\nThe value of this field is ignored in create and update operations."
         },
         "status": {
           "enumDescriptions": [
@@ -554,8 +1561,6 @@
           "type": "string"
         },
         "entityType": {
-          "description": "The type of the client entity: `ADVERTISER`, `BRAND`, or `AGENCY`.",
-          "type": "string",
           "enumDescriptions": [
             "A placeholder for an undefined client entity type. Should not be used.",
             "An advertiser.",
@@ -567,30 +1572,58 @@
             "ADVERTISER",
             "BRAND",
             "AGENCY"
-          ]
+          ],
+          "description": "The type of the client entity: `ADVERTISER`, `BRAND`, or `AGENCY`.",
+          "type": "string"
+        },
+        "clientName": {
+          "description": "Name used to represent this client to publishers.\nYou may have multiple clients that map to the same entity,\nbut for each client the combination of `clientName` and entity\nmust be unique.\nYou can specify this field as empty.",
+          "type": "string"
+        },
+        "role": {
+          "enumDescriptions": [
+            "A placeholder for an undefined client role.",
+            "Users associated with this client can see publisher deal offers\nin the Marketplace.\nThey can neither negotiate proposals nor approve deals.\nIf this client is visible to publishers, they can send deal proposals\nto this client.",
+            "Users associated with this client can respond to deal proposals\nsent to them by publishers. They can also initiate deal proposals\nof their own.",
+            "Users associated with this client can approve eligible deals\non your behalf. Some deals may still explicitly require publisher\nfinalization. If this role is not selected, the sponsor buyer\nwill need to manually approve each of their deals."
+          ],
+          "enum": [
+            "CLIENT_ROLE_UNSPECIFIED",
+            "CLIENT_DEAL_VIEWER",
+            "CLIENT_DEAL_NEGOTIATOR",
+            "CLIENT_DEAL_APPROVER"
+          ],
+          "description": "The role which is assigned to the client buyer. Each role implies a set of\npermissions granted to the client. Must be one of `CLIENT_DEAL_VIEWER`,\n`CLIENT_DEAL_NEGOTIATOR` or `CLIENT_DEAL_APPROVER`.",
+          "type": "string"
+        },
+        "visibleToSeller": {
+          "description": "Whether the client buyer will be visible to sellers.",
+          "type": "boolean"
+        },
+        "entityId": {
+          "description": "Numerical identifier of the client entity.\nThe entity can be an advertiser, a brand, or an agency.\nThis identifier is unique among all the entities with the same type.\n\nA list of all known advertisers with their identifiers is available in the\n[advertisers.txt](https://storage.googleapis.com/adx-rtb-dictionaries/advertisers.txt)\nfile.\n\nA list of all known brands with their identifiers is available in the\n[brands.txt](https://storage.googleapis.com/adx-rtb-dictionaries/brands.txt)\nfile.\n\nA list of all known agencies with their identifiers is available in the\n[agencies.txt](https://storage.googleapis.com/adx-rtb-dictionaries/agencies.txt)\nfile.",
+          "format": "int64",
+          "type": "string"
+        },
+        "clientAccountId": {
+          "description": "The globally-unique numerical ID of the client.\nThe value of this field is ignored in create and update operations.",
+          "format": "int64",
+          "type": "string"
         }
       },
       "id": "Client"
     },
     "Correction": {
-      "description": "@OutputOnly Shows any corrections that were applied to this creative.",
       "type": "object",
       "properties": {
+        "details": {
+          "description": "Additional details about what was corrected.",
+          "type": "array",
+          "items": {
+            "type": "string"
+          }
+        },
         "type": {
-          "enum": [
-            "CORRECTION_TYPE_UNSPECIFIED",
-            "VENDOR_IDS_ADDED",
-            "SSL_ATTRIBUTE_REMOVED",
-            "FLASH_FREE_ATTRIBUTE_REMOVED",
-            "FLASH_FREE_ATTRIBUTE_ADDED",
-            "REQUIRED_ATTRIBUTE_ADDED",
-            "REQUIRED_VENDOR_ADDED",
-            "SSL_ATTRIBUTE_ADDED",
-            "IN_BANNER_VIDEO_ATTRIBUTE_ADDED",
-            "MRAID_ATTRIBUTE_ADDED",
-            "FLASH_ATTRIBUTE_REMOVED",
-            "VIDEO_IN_SNIPPET_ATTRIBUTE_ADDED"
-          ],
           "description": "The type of correction that was applied to the creative.",
           "type": "string",
           "enumDescriptions": [
@@ -606,6 +1639,20 @@
             "The ad makes calls to the MRAID API so the MRAID attribute was added.",
             "The ad unnecessarily declared the Flash attribute, so the Flash attribute\nwas removed.",
             "The ad contains video content."
+          ],
+          "enum": [
+            "CORRECTION_TYPE_UNSPECIFIED",
+            "VENDOR_IDS_ADDED",
+            "SSL_ATTRIBUTE_REMOVED",
+            "FLASH_FREE_ATTRIBUTE_REMOVED",
+            "FLASH_FREE_ATTRIBUTE_ADDED",
+            "REQUIRED_ATTRIBUTE_ADDED",
+            "REQUIRED_VENDOR_ADDED",
+            "SSL_ATTRIBUTE_ADDED",
+            "IN_BANNER_VIDEO_ATTRIBUTE_ADDED",
+            "MRAID_ATTRIBUTE_ADDED",
+            "FLASH_ATTRIBUTE_REMOVED",
+            "VIDEO_IN_SNIPPET_ATTRIBUTE_ADDED"
           ]
         },
         "contexts": {
@@ -614,24 +1661,18 @@
           "items": {
             "$ref": "ServingContext"
           }
-        },
-        "details": {
-          "description": "Additional details about what was corrected.",
-          "type": "array",
-          "items": {
-            "type": "string"
-          }
         }
       },
-      "id": "Correction"
+      "id": "Correction",
+      "description": "@OutputOnly Shows any corrections that were applied to this creative."
     },
     "AddDealAssociationRequest": {
       "description": "A request for associating a deal and a creative.",
       "type": "object",
       "properties": {
         "association": {
-          "description": "The association between a creative and a deal that should be added.",
-          "$ref": "CreativeDealAssociation"
+          "$ref": "CreativeDealAssociation",
+          "description": "The association between a creative and a deal that should be added."
         }
       },
       "id": "AddDealAssociationRequest"
@@ -648,19 +1689,14 @@
           }
         },
         "nextPageToken": {
-          "type": "string",
-          "description": "A token to retrieve the next page of results.\nPass this value in the\nListDealAssociationsRequest.page_token\nfield in the subsequent call to 'ListDealAssociation' method to retrieve\nthe next page of results."
+          "description": "A token to retrieve the next page of results.\nPass this value in the\nListDealAssociationsRequest.page_token\nfield in the subsequent call to 'ListDealAssociation' method to retrieve\nthe next page of results.",
+          "type": "string"
         }
       },
       "id": "ListDealAssociationsResponse"
     },
-    "StopWatchingCreativeRequest": {
-      "description": "A request for stopping notifications for changes to creative Status.",
-      "type": "object",
-      "properties": {},
-      "id": "StopWatchingCreativeRequest"
-    },
     "Disapproval": {
+      "id": "Disapproval",
       "description": "@OutputOnly The reason and details for a disapproval.",
       "type": "object",
       "properties": {
@@ -672,103 +1708,6 @@
           }
         },
         "reason": {
-          "enum": [
-            "LENGTH_OF_IMAGE_ANIMATION",
-            "BROKEN_URL",
-            "MEDIA_NOT_FUNCTIONAL",
-            "INVALID_FOURTH_PARTY_CALL",
-            "INCORRECT_REMARKETING_DECLARATION",
-            "LANDING_PAGE_ERROR",
-            "AD_SIZE_DOES_NOT_MATCH_AD_SLOT",
-            "NO_BORDER",
-            "FOURTH_PARTY_BROWSER_COOKIES",
-            "LSO_OBJECTS",
-            "BLANK_CREATIVE",
-            "DESTINATION_URLS_UNDECLARED",
-            "PROBLEM_WITH_CLICK_MACRO",
-            "INCORRECT_AD_TECHNOLOGY_DECLARATION",
-            "INCORRECT_DESTINATION_URL_DECLARATION",
-            "EXPANDABLE_INCORRECT_DIRECTION",
-            "EXPANDABLE_DIRECTION_NOT_SUPPORTED",
-            "EXPANDABLE_INVALID_VENDOR",
-            "EXPANDABLE_FUNCTIONALITY",
-            "VIDEO_INVALID_VENDOR",
-            "VIDEO_UNSUPPORTED_LENGTH",
-            "VIDEO_UNSUPPORTED_FORMAT",
-            "VIDEO_FUNCTIONALITY",
-            "LANDING_PAGE_DISABLED",
-            "MALWARE_SUSPECTED",
-            "ADULT_IMAGE_OR_VIDEO",
-            "INACCURATE_AD_TEXT",
-            "COUNTERFEIT_DESIGNER_GOODS",
-            "POP_UP",
-            "INVALID_RTB_PROTOCOL_USAGE",
-            "RAW_IP_ADDRESS_IN_SNIPPET",
-            "UNACCEPTABLE_CONTENT_SOFTWARE",
-            "UNAUTHORIZED_COOKIE_ON_GOOGLE_DOMAIN",
-            "UNDECLARED_FLASH_OBJECTS",
-            "INVALID_SSL_DECLARATION",
-            "DIRECT_DOWNLOAD_IN_AD",
-            "MAXIMUM_DOWNLOAD_SIZE_EXCEEDED",
-            "DESTINATION_URL_SITE_NOT_CRAWLABLE",
-            "BAD_URL_LEGAL_DISAPPROVAL",
-            "PHARMA_GAMBLING_ALCOHOL_NOT_ALLOWED",
-            "DYNAMIC_DNS_AT_DESTINATION_URL",
-            "POOR_IMAGE_OR_VIDEO_QUALITY",
-            "UNACCEPTABLE_IMAGE_CONTENT",
-            "INCORRECT_IMAGE_LAYOUT",
-            "IRRELEVANT_IMAGE_OR_VIDEO",
-            "DESTINATION_SITE_DOES_NOT_ALLOW_GOING_BACK",
-            "MISLEADING_CLAIMS_IN_AD",
-            "RESTRICTED_PRODUCTS",
-            "UNACCEPTABLE_CONTENT",
-            "AUTOMATED_AD_CLICKING",
-            "INVALID_URL_PROTOCOL",
-            "UNDECLARED_RESTRICTED_CONTENT",
-            "INVALID_REMARKETING_LIST_USAGE",
-            "DESTINATION_SITE_NOT_CRAWLABLE_ROBOTS_TXT",
-            "CLICK_TO_DOWNLOAD_NOT_AN_APP",
-            "INACCURATE_REVIEW_EXTENSION",
-            "SEXUALLY_EXPLICIT_CONTENT",
-            "GAINING_AN_UNFAIR_ADVANTAGE",
-            "GAMING_THE_GOOGLE_NETWORK",
-            "DANGEROUS_PRODUCTS_KNIVES",
-            "DANGEROUS_PRODUCTS_EXPLOSIVES",
-            "DANGEROUS_PRODUCTS_GUNS",
-            "DANGEROUS_PRODUCTS_DRUGS",
-            "DANGEROUS_PRODUCTS_TOBACCO",
-            "DANGEROUS_PRODUCTS_WEAPONS",
-            "UNCLEAR_OR_IRRELEVANT_AD",
-            "PROFESSIONAL_STANDARDS",
-            "DYSFUNCTIONAL_PROMOTION",
-            "INVALID_INTEREST_BASED_AD",
-            "MISUSE_OF_PERSONAL_INFORMATION",
-            "OMISSION_OF_RELEVANT_INFORMATION",
-            "UNAVAILABLE_PROMOTIONS",
-            "MISLEADING_PROMOTIONS",
-            "INAPPROPRIATE_CONTENT",
-            "SENSITIVE_EVENTS",
-            "SHOCKING_CONTENT",
-            "ENABLING_DISHONEST_BEHAVIOR",
-            "TECHNICAL_REQUIREMENTS",
-            "RESTRICTED_POLITICAL_CONTENT",
-            "UNSUPPORTED_CONTENT",
-            "INVALID_BIDDING_METHOD",
-            "VIDEO_TOO_LONG",
-            "VIOLATES_JAPANESE_PHARMACY_LAW",
-            "UNACCREDITED_PET_PHARMACY",
-            "ABORTION",
-            "CONTRACEPTIVES",
-            "NEED_CERTIFICATES_TO_ADVERTISE_IN_CHINA",
-            "KCDSP_REGISTRATION",
-            "NOT_FAMILY_SAFE",
-            "CLINICAL_TRIAL_RECRUITMENT",
-            "MAXIMUM_NUMBER_OF_HTTP_CALLS_EXCEEDED",
-            "MAXIMUM_NUMBER_OF_COOKIES_EXCEEDED",
-            "PERSONAL_LOANS",
-            "UNSUPPORTED_FLASH_CONTENT"
-          ],
-          "description": "The categorized reason for disapproval.",
           "type": "string",
           "enumDescriptions": [
             "The length of the image animation is longer than allowed.",
@@ -865,12 +1804,115 @@
             "Maximum number of cookies exceeded.",
             "Financial service ad does not adhere to specifications.",
             "Flash content was found in an unsupported context."
-          ]
+          ],
+          "enum": [
+            "LENGTH_OF_IMAGE_ANIMATION",
+            "BROKEN_URL",
+            "MEDIA_NOT_FUNCTIONAL",
+            "INVALID_FOURTH_PARTY_CALL",
+            "INCORRECT_REMARKETING_DECLARATION",
+            "LANDING_PAGE_ERROR",
+            "AD_SIZE_DOES_NOT_MATCH_AD_SLOT",
+            "NO_BORDER",
+            "FOURTH_PARTY_BROWSER_COOKIES",
+            "LSO_OBJECTS",
+            "BLANK_CREATIVE",
+            "DESTINATION_URLS_UNDECLARED",
+            "PROBLEM_WITH_CLICK_MACRO",
+            "INCORRECT_AD_TECHNOLOGY_DECLARATION",
+            "INCORRECT_DESTINATION_URL_DECLARATION",
+            "EXPANDABLE_INCORRECT_DIRECTION",
+            "EXPANDABLE_DIRECTION_NOT_SUPPORTED",
+            "EXPANDABLE_INVALID_VENDOR",
+            "EXPANDABLE_FUNCTIONALITY",
+            "VIDEO_INVALID_VENDOR",
+            "VIDEO_UNSUPPORTED_LENGTH",
+            "VIDEO_UNSUPPORTED_FORMAT",
+            "VIDEO_FUNCTIONALITY",
+            "LANDING_PAGE_DISABLED",
+            "MALWARE_SUSPECTED",
+            "ADULT_IMAGE_OR_VIDEO",
+            "INACCURATE_AD_TEXT",
+            "COUNTERFEIT_DESIGNER_GOODS",
+            "POP_UP",
+            "INVALID_RTB_PROTOCOL_USAGE",
+            "RAW_IP_ADDRESS_IN_SNIPPET",
+            "UNACCEPTABLE_CONTENT_SOFTWARE",
+            "UNAUTHORIZED_COOKIE_ON_GOOGLE_DOMAIN",
+            "UNDECLARED_FLASH_OBJECTS",
+            "INVALID_SSL_DECLARATION",
+            "DIRECT_DOWNLOAD_IN_AD",
+            "MAXIMUM_DOWNLOAD_SIZE_EXCEEDED",
+            "DESTINATION_URL_SITE_NOT_CRAWLABLE",
+            "BAD_URL_LEGAL_DISAPPROVAL",
+            "PHARMA_GAMBLING_ALCOHOL_NOT_ALLOWED",
+            "DYNAMIC_DNS_AT_DESTINATION_URL",
+            "POOR_IMAGE_OR_VIDEO_QUALITY",
+            "UNACCEPTABLE_IMAGE_CONTENT",
+            "INCORRECT_IMAGE_LAYOUT",
+            "IRRELEVANT_IMAGE_OR_VIDEO",
+            "DESTINATION_SITE_DOES_NOT_ALLOW_GOING_BACK",
+            "MISLEADING_CLAIMS_IN_AD",
+            "RESTRICTED_PRODUCTS",
+            "UNACCEPTABLE_CONTENT",
+            "AUTOMATED_AD_CLICKING",
+            "INVALID_URL_PROTOCOL",
+            "UNDECLARED_RESTRICTED_CONTENT",
+            "INVALID_REMARKETING_LIST_USAGE",
+            "DESTINATION_SITE_NOT_CRAWLABLE_ROBOTS_TXT",
+            "CLICK_TO_DOWNLOAD_NOT_AN_APP",
+            "INACCURATE_REVIEW_EXTENSION",
+            "SEXUALLY_EXPLICIT_CONTENT",
+            "GAINING_AN_UNFAIR_ADVANTAGE",
+            "GAMING_THE_GOOGLE_NETWORK",
+            "DANGEROUS_PRODUCTS_KNIVES",
+            "DANGEROUS_PRODUCTS_EXPLOSIVES",
+            "DANGEROUS_PRODUCTS_GUNS",
+            "DANGEROUS_PRODUCTS_DRUGS",
+            "DANGEROUS_PRODUCTS_TOBACCO",
+            "DANGEROUS_PRODUCTS_WEAPONS",
+            "UNCLEAR_OR_IRRELEVANT_AD",
+            "PROFESSIONAL_STANDARDS",
+            "DYSFUNCTIONAL_PROMOTION",
+            "INVALID_INTEREST_BASED_AD",
+            "MISUSE_OF_PERSONAL_INFORMATION",
+            "OMISSION_OF_RELEVANT_INFORMATION",
+            "UNAVAILABLE_PROMOTIONS",
+            "MISLEADING_PROMOTIONS",
+            "INAPPROPRIATE_CONTENT",
+            "SENSITIVE_EVENTS",
+            "SHOCKING_CONTENT",
+            "ENABLING_DISHONEST_BEHAVIOR",
+            "TECHNICAL_REQUIREMENTS",
+            "RESTRICTED_POLITICAL_CONTENT",
+            "UNSUPPORTED_CONTENT",
+            "INVALID_BIDDING_METHOD",
+            "VIDEO_TOO_LONG",
+            "VIOLATES_JAPANESE_PHARMACY_LAW",
+            "UNACCREDITED_PET_PHARMACY",
+            "ABORTION",
+            "CONTRACEPTIVES",
+            "NEED_CERTIFICATES_TO_ADVERTISE_IN_CHINA",
+            "KCDSP_REGISTRATION",
+            "NOT_FAMILY_SAFE",
+            "CLINICAL_TRIAL_RECRUITMENT",
+            "MAXIMUM_NUMBER_OF_HTTP_CALLS_EXCEEDED",
+            "MAXIMUM_NUMBER_OF_COOKIES_EXCEEDED",
+            "PERSONAL_LOANS",
+            "UNSUPPORTED_FLASH_CONTENT"
+          ],
+          "description": "The categorized reason for disapproval."
         }
-      },
-      "id": "Disapproval"
+      }
+    },
+    "StopWatchingCreativeRequest": {
+      "description": "A request for stopping notifications for changes to creative Status.",
+      "type": "object",
+      "properties": {},
+      "id": "StopWatchingCreativeRequest"
     },
     "ServingRestriction": {
+      "type": "object",
       "properties": {
         "disapprovalReasons": {
           "description": "Any disapprovals bound to this restriction.\nOnly present if status=DISAPPROVED.\nCan be used to filter the response of the\ncreatives.list\nmethod.",
@@ -880,40 +1922,36 @@
           }
         },
         "contexts": {
+          "description": "The contexts for the restriction.",
           "type": "array",
           "items": {
             "$ref": "ServingContext"
-          },
-          "description": "The contexts for the restriction."
+          }
         },
         "status": {
+          "enum": [
+            "STATUS_UNSPECIFIED",
+            "DISAPPROVAL",
+            "PENDING_REVIEW"
+          ],
           "description": "The status of the creative in this context (for example, it has been\nexplicitly disapproved or is pending review).",
           "type": "string",
           "enumDescriptions": [
             "The status is not known.",
             "The ad was disapproved in this context.",
             "The ad is pending review in this context."
-          ],
-          "enum": [
-            "STATUS_UNSPECIFIED",
-            "DISAPPROVAL",
-            "PENDING_REVIEW"
           ]
         }
       },
       "id": "ServingRestriction",
-      "description": "@OutputOnly A representation of the status of an ad in a\nspecific context. A context here relates to where something ultimately serves\n(for example, a user or publisher geo, a platform, an HTTPS vs HTTP request,\nor the type of auction).",
-      "type": "object"
+      "description": "@OutputOnly A representation of the status of an ad in a\nspecific context. A context here relates to where something ultimately serves\n(for example, a user or publisher geo, a platform, an HTTPS vs HTTP request,\nor the type of auction)."
     },
     "Date": {
-      "id": "Date",
-      "description": "Represents a whole calendar date, e.g. date of birth. The time of day and\ntime zone are either specified elsewhere or are not significant. The date\nis relative to the Proleptic Gregorian Calendar. The day may be 0 to\nrepresent a year and month where the day is not significant, e.g. credit card\nexpiration date. The year may be 0 to represent a month and day independent\nof year, e.g. anniversary date. Related types are google.type.TimeOfDay\nand `google.protobuf.Timestamp`.",
-      "type": "object",
       "properties": {
         "month": {
+          "type": "integer",
           "description": "Month of year. Must be from 1 to 12.",
-          "format": "int32",
-          "type": "integer"
+          "format": "int32"
         },
         "year": {
           "description": "Year of date. Must be from 1 to 9999, or 0 if specifying a date without\na year.",
@@ -925,221 +1963,10 @@
           "format": "int32",
           "type": "integer"
         }
-      }
-    },
-    "Empty": {
-      "type": "object",
-      "properties": {},
-      "id": "Empty",
-      "description": "A generic empty message that you can re-use to avoid defining duplicated\nempty messages in your APIs. A typical example is to use it as the request\nor the response type of an API method. For instance:\n\n    service Foo {\n      rpc Bar(google.protobuf.Empty) returns (google.protobuf.Empty);\n    }\n\nThe JSON representation for `Empty` is empty JSON object `{}`."
-    },
-    "WatchCreativeRequest": {
-      "description": "A request for watching changes to creative Status.",
-      "type": "object",
-      "properties": {
-        "topic": {
-          "description": "The Pub/Sub topic to publish notifications to.\nThis topic must already exist and must give permission to\nad-exchange-buyside-reports@google.com to write to the topic.\nThis should be the full resource name in\n\"projects/{project_id}/topics/{topic_id}\" format.",
-          "type": "string"
-        }
       },
-      "id": "WatchCreativeRequest"
-    },
-    "AppContext": {
-      "description": "@OutputOnly The app type the restriction applies to for mobile device.",
-      "type": "object",
-      "properties": {
-        "appTypes": {
-          "description": "The app types this restriction applies to.",
-          "type": "array",
-          "items": {
-            "type": "string",
-            "enum": [
-              "NATIVE",
-              "WEB"
-            ]
-          },
-          "enumDescriptions": [
-            "Native app context.",
-            "Mobile web app context."
-          ]
-        }
-      },
-      "id": "AppContext"
-    },
-    "ListClientsResponse": {
-      "type": "object",
-      "properties": {
-        "nextPageToken": {
-          "description": "A token to retrieve the next page of results.\nPass this value in the\nListClientsRequest.pageToken\nfield in the subsequent call to the\naccounts.clients.list method\nto retrieve the next page of results.",
-          "type": "string"
-        },
-        "clients": {
-          "description": "The returned list of clients.",
-          "type": "array",
-          "items": {
-            "$ref": "Client"
-          }
-        }
-      },
-      "id": "ListClientsResponse"
-    },
-    "NativeContent": {
-      "description": "Native content for a creative.",
-      "type": "object",
-      "properties": {
-        "storeUrl": {
-          "description": "The URL to the app store to purchase/download the promoted app.",
-          "type": "string"
-        },
-        "headline": {
-          "description": "A short title for the ad.",
-          "type": "string"
-        },
-        "appIcon": {
-          "$ref": "Image",
-          "description": "The app icon, for app download ads."
-        },
-        "callToAction": {
-          "description": "A label for the button that the user is supposed to click.",
-          "type": "string"
-        },
-        "body": {
-          "description": "A long description of the ad.",
-          "type": "string"
-        },
-        "starRating": {
-          "description": "The app rating in the app store. Must be in the range [0-5].",
-          "format": "double",
-          "type": "number"
-        },
-        "videoUrl": {
-          "description": "The URL to fetch a native video ad.",
-          "type": "string"
-        },
-        "clickLinkUrl": {
-          "description": "The URL that the browser/SDK will load when the user clicks the ad.",
-          "type": "string"
-        },
-        "logo": {
-          "$ref": "Image",
-          "description": "A smaller image, for the advertiser's logo."
-        },
-        "priceDisplayText": {
-          "type": "string",
-          "description": "The price of the promoted app including currency info."
-        },
-        "clickTrackingUrl": {
-          "description": "The URL to use for click tracking.",
-          "type": "string"
-        },
-        "image": {
-          "description": "A large image.",
-          "$ref": "Image"
-        },
-        "advertiserName": {
-          "description": "The name of the advertiser or sponsor, to be displayed in the ad creative.",
-          "type": "string"
-        }
-      },
-      "id": "NativeContent"
-    },
-    "SecurityContext": {
-      "id": "SecurityContext",
-      "description": "@OutputOnly A security context.",
-      "type": "object",
-      "properties": {
-        "securities": {
-          "enumDescriptions": [
-            "Matches impressions that require insecure compatibility.",
-            "Matches impressions that require SSL compatibility."
-          ],
-          "description": "The security types in this context.",
-          "type": "array",
-          "items": {
-            "enum": [
-              "INSECURE",
-              "SSL"
-            ],
-            "type": "string"
-          }
-        }
-      }
-    },
-    "ListCreativesResponse": {
-      "description": "A response for listing creatives.",
-      "type": "object",
-      "properties": {
-        "nextPageToken": {
-          "description": "A token to retrieve the next page of results.\nPass this value in the\nListCreativesRequest.page_token\nfield in the subsequent call to `ListCreatives` method to retrieve the next\npage of results.",
-          "type": "string"
-        },
-        "creatives": {
-          "description": "The list of creatives.",
-          "type": "array",
-          "items": {
-            "$ref": "Creative"
-          }
-        }
-      },
-      "id": "ListCreativesResponse"
-    },
-    "HtmlContent": {
-      "description": "HTML content for a creative.",
-      "type": "object",
-      "properties": {
-        "width": {
-          "description": "The width of the HTML snippet in pixels.",
-          "format": "int32",
-          "type": "integer"
-        },
-        "snippet": {
-          "description": "The HTML snippet that displays the ad when inserted in the web page.",
-          "type": "string"
-        },
-        "height": {
-          "type": "integer",
-          "description": "The height of the HTML snippet in pixels.",
-          "format": "int32"
-        }
-      },
-      "id": "HtmlContent"
-    },
-    "ServingContext": {
-      "description": "The serving context for this restriction.",
-      "type": "object",
-      "properties": {
-        "platform": {
-          "$ref": "PlatformContext",
-          "description": "Matches impressions coming from a particular platform."
-        },
-        "location": {
-          "description": "Matches impressions coming from users *or* publishers in a specific\nlocation.",
-          "$ref": "LocationContext"
-        },
-        "auctionType": {
-          "$ref": "AuctionContext",
-          "description": "Matches impressions for a particular auction type."
-        },
-        "all": {
-          "enumDescriptions": [
-            "A simple context."
-          ],
-          "enum": [
-            "SIMPLE_CONTEXT"
-          ],
-          "description": "Matches all contexts.",
-          "type": "string"
-        },
-        "appType": {
-          "$ref": "AppContext",
-          "description": "Matches impressions for a particular app type."
-        },
-        "securityType": {
-          "$ref": "SecurityContext",
-          "description": "Matches impressions for a particular security type."
-        }
-      },
-      "id": "ServingContext"
+      "id": "Date",
+      "description": "Represents a whole calendar date, e.g. date of birth. The time of day and\ntime zone are either specified elsewhere or are not significant. The date\nis relative to the Proleptic Gregorian Calendar. The day may be 0 to\nrepresent a year and month where the day is not significant, e.g. credit card\nexpiration date. The year may be 0 to represent a month and day independent\nof year, e.g. anniversary date. Related types are google.type.TimeOfDay\nand `google.protobuf.Timestamp`.",
+      "type": "object"
     }
   },
   "protocol": "rest",
@@ -1160,832 +1987,5 @@
   "rootUrl": "https://adexchangebuyer.googleapis.com/",
   "ownerDomain": "google.com",
   "name": "adexchangebuyer2",
-  "batchPath": "batch",
-  "title": "Ad Exchange Buyer API II",
-  "ownerName": "Google",
-  "resources": {
-    "accounts": {
-      "resources": {
-        "clients": {
-          "methods": {
-            "get": {
-              "description": "Gets a client buyer with a given client account ID.",
-              "response": {
-                "$ref": "Client"
-              },
-              "httpMethod": "GET",
-              "parameterOrder": [
-                "accountId",
-                "clientAccountId"
-              ],
-              "parameters": {
-                "accountId": {
-                  "description": "Numerical account ID of the client's sponsor buyer. (required)",
-                  "format": "int64",
-                  "required": true,
-                  "type": "string",
-                  "location": "path"
-                },
-                "clientAccountId": {
-                  "location": "path",
-                  "description": "Numerical account ID of the client buyer to retrieve. (required)",
-                  "format": "int64",
-                  "required": true,
-                  "type": "string"
-                }
-              },
-              "scopes": [
-                "https://www.googleapis.com/auth/adexchange.buyer"
-              ],
-              "flatPath": "v2beta1/accounts/{accountId}/clients/{clientAccountId}",
-              "path": "v2beta1/accounts/{accountId}/clients/{clientAccountId}",
-              "id": "adexchangebuyer2.accounts.clients.get"
-            },
-            "list": {
-              "httpMethod": "GET",
-              "parameterOrder": [
-                "accountId"
-              ],
-              "response": {
-                "$ref": "ListClientsResponse"
-              },
-              "parameters": {
-                "pageToken": {
-                  "location": "query",
-                  "description": "A token identifying a page of results the server should return.\nTypically, this is the value of\nListClientsResponse.nextPageToken\nreturned from the previous call to the\naccounts.clients.list method.",
-                  "type": "string"
-                },
-                "accountId": {
-                  "location": "path",
-                  "description": "Unique numerical account ID of the sponsor buyer to list the clients for.",
-                  "format": "int64",
-                  "required": true,
-                  "type": "string"
-                },
-                "pageSize": {
-                  "description": "Requested page size. The server may return fewer clients than requested.\nIf unspecified, the server will pick an appropriate default.",
-                  "format": "int32",
-                  "type": "integer",
-                  "location": "query"
-                }
-              },
-              "scopes": [
-                "https://www.googleapis.com/auth/adexchange.buyer"
-              ],
-              "flatPath": "v2beta1/accounts/{accountId}/clients",
-              "id": "adexchangebuyer2.accounts.clients.list",
-              "path": "v2beta1/accounts/{accountId}/clients",
-              "description": "Lists all the clients for the current sponsor buyer."
-            },
-            "update": {
-              "description": "Updates an existing client buyer.",
-              "request": {
-                "$ref": "Client"
-              },
-              "response": {
-                "$ref": "Client"
-              },
-              "parameterOrder": [
-                "accountId",
-                "clientAccountId"
-              ],
-              "httpMethod": "PUT",
-              "scopes": [
-                "https://www.googleapis.com/auth/adexchange.buyer"
-              ],
-              "parameters": {
-                "accountId": {
-                  "description": "Unique numerical account ID for the buyer of which the client buyer\nis a customer; the sponsor buyer to update a client for. (required)",
-                  "format": "int64",
-                  "required": true,
-                  "type": "string",
-                  "location": "path"
-                },
-                "clientAccountId": {
-                  "location": "path",
-                  "description": "Unique numerical account ID of the client to update. (required)",
-                  "format": "int64",
-                  "required": true,
-                  "type": "string"
-                }
-              },
-              "flatPath": "v2beta1/accounts/{accountId}/clients/{clientAccountId}",
-              "path": "v2beta1/accounts/{accountId}/clients/{clientAccountId}",
-              "id": "adexchangebuyer2.accounts.clients.update"
-            },
-            "create": {
-              "path": "v2beta1/accounts/{accountId}/clients",
-              "id": "adexchangebuyer2.accounts.clients.create",
-              "description": "Creates a new client buyer.",
-              "request": {
-                "$ref": "Client"
-              },
-              "response": {
-                "$ref": "Client"
-              },
-              "parameterOrder": [
-                "accountId"
-              ],
-              "httpMethod": "POST",
-              "scopes": [
-                "https://www.googleapis.com/auth/adexchange.buyer"
-              ],
-              "parameters": {
-                "accountId": {
-                  "required": true,
-                  "type": "string",
-                  "location": "path",
-                  "description": "Unique numerical account ID for the buyer of which the client buyer\nis a customer; the sponsor buyer to create a client for. (required)",
-                  "format": "int64"
-                }
-              },
-              "flatPath": "v2beta1/accounts/{accountId}/clients"
-            }
-          },
-          "resources": {
-            "users": {
-              "methods": {
-                "list": {
-                  "description": "Lists all the known client users for a specified\nsponsor buyer account ID.",
-                  "response": {
-                    "$ref": "ListClientUsersResponse"
-                  },
-                  "parameterOrder": [
-                    "accountId",
-                    "clientAccountId"
-                  ],
-                  "httpMethod": "GET",
-                  "scopes": [
-                    "https://www.googleapis.com/auth/adexchange.buyer"
-                  ],
-                  "parameters": {
-                    "pageToken": {
-                      "location": "query",
-                      "description": "A token identifying a page of results the server should return.\nTypically, this is the value of\nListClientUsersResponse.nextPageToken\nreturned from the previous call to the\naccounts.clients.users.list method.",
-                      "type": "string"
-                    },
-                    "accountId": {
-                      "location": "path",
-                      "description": "Numerical account ID of the sponsor buyer of the client to list users for.\n(required)",
-                      "format": "int64",
-                      "required": true,
-                      "type": "string"
-                    },
-                    "pageSize": {
-                      "location": "query",
-                      "description": "Requested page size. The server may return fewer clients than requested.\nIf unspecified, the server will pick an appropriate default.",
-                      "format": "int32",
-                      "type": "integer"
-                    },
-                    "clientAccountId": {
-                      "description": "The account ID of the client buyer to list users for. (required)\nYou must specify either a string representation of a\nnumerical account identifier or the `-` character\nto list all the client users for all the clients\nof a given sponsor buyer.",
-                      "required": true,
-                      "type": "string",
-                      "location": "path"
-                    }
-                  },
-                  "flatPath": "v2beta1/accounts/{accountId}/clients/{clientAccountId}/users",
-                  "path": "v2beta1/accounts/{accountId}/clients/{clientAccountId}/users",
-                  "id": "adexchangebuyer2.accounts.clients.users.list"
-                },
-                "get": {
-                  "id": "adexchangebuyer2.accounts.clients.users.get",
-                  "path": "v2beta1/accounts/{accountId}/clients/{clientAccountId}/users/{userId}",
-                  "description": "Retrieves an existing client user.",
-                  "httpMethod": "GET",
-                  "parameterOrder": [
-                    "accountId",
-                    "clientAccountId",
-                    "userId"
-                  ],
-                  "response": {
-                    "$ref": "ClientUser"
-                  },
-                  "parameters": {
-                    "userId": {
-                      "required": true,
-                      "type": "string",
-                      "location": "path",
-                      "description": "Numerical identifier of the user to retrieve. (required)",
-                      "format": "int64"
-                    },
-                    "accountId": {
-                      "description": "Numerical account ID of the client's sponsor buyer. (required)",
-                      "format": "int64",
-                      "required": true,
-                      "type": "string",
-                      "location": "path"
-                    },
-                    "clientAccountId": {
-                      "location": "path",
-                      "description": "Numerical account ID of the client buyer\nthat the user to be retrieved is associated with. (required)",
-                      "format": "int64",
-                      "required": true,
-                      "type": "string"
-                    }
-                  },
-                  "scopes": [
-                    "https://www.googleapis.com/auth/adexchange.buyer"
-                  ],
-                  "flatPath": "v2beta1/accounts/{accountId}/clients/{clientAccountId}/users/{userId}"
-                },
-                "update": {
-                  "request": {
-                    "$ref": "ClientUser"
-                  },
-                  "description": "Updates an existing client user.\nOnly the user status can be changed on update.",
-                  "response": {
-                    "$ref": "ClientUser"
-                  },
-                  "parameterOrder": [
-                    "accountId",
-                    "clientAccountId",
-                    "userId"
-                  ],
-                  "httpMethod": "PUT",
-                  "parameters": {
-                    "userId": {
-                      "required": true,
-                      "type": "string",
-                      "location": "path",
-                      "description": "Numerical identifier of the user to retrieve. (required)",
-                      "format": "int64"
-                    },
-                    "accountId": {
-                      "location": "path",
-                      "description": "Numerical account ID of the client's sponsor buyer. (required)",
-                      "format": "int64",
-                      "required": true,
-                      "type": "string"
-                    },
-                    "clientAccountId": {
-                      "location": "path",
-                      "description": "Numerical account ID of the client buyer that the user to be retrieved\nis associated with. (required)",
-                      "format": "int64",
-                      "required": true,
-                      "type": "string"
-                    }
-                  },
-                  "scopes": [
-                    "https://www.googleapis.com/auth/adexchange.buyer"
-                  ],
-                  "flatPath": "v2beta1/accounts/{accountId}/clients/{clientAccountId}/users/{userId}",
-                  "path": "v2beta1/accounts/{accountId}/clients/{clientAccountId}/users/{userId}",
-                  "id": "adexchangebuyer2.accounts.clients.users.update"
-                }
-              }
-            },
-            "invitations": {
-              "methods": {
-                "get": {
-                  "parameterOrder": [
-                    "accountId",
-                    "clientAccountId",
-                    "invitationId"
-                  ],
-                  "httpMethod": "GET",
-                  "response": {
-                    "$ref": "ClientUserInvitation"
-                  },
-                  "scopes": [
-                    "https://www.googleapis.com/auth/adexchange.buyer"
-                  ],
-                  "parameters": {
-                    "accountId": {
-                      "required": true,
-                      "type": "string",
-                      "location": "path",
-                      "description": "Numerical account ID of the client's sponsor buyer. (required)",
-                      "format": "int64"
-                    },
-                    "clientAccountId": {
-                      "location": "path",
-                      "description": "Numerical account ID of the client buyer that the user invitation\nto be retrieved is associated with. (required)",
-                      "format": "int64",
-                      "required": true,
-                      "type": "string"
-                    },
-                    "invitationId": {
-                      "description": "Numerical identifier of the user invitation to retrieve. (required)",
-                      "format": "int64",
-                      "required": true,
-                      "type": "string",
-                      "location": "path"
-                    }
-                  },
-                  "flatPath": "v2beta1/accounts/{accountId}/clients/{clientAccountId}/invitations/{invitationId}",
-                  "path": "v2beta1/accounts/{accountId}/clients/{clientAccountId}/invitations/{invitationId}",
-                  "id": "adexchangebuyer2.accounts.clients.invitations.get",
-                  "description": "Retrieves an existing client user invitation."
-                },
-                "list": {
-                  "description": "Lists all the client users invitations for a client\nwith a given account ID.",
-                  "response": {
-                    "$ref": "ListClientUserInvitationsResponse"
-                  },
-                  "httpMethod": "GET",
-                  "parameterOrder": [
-                    "accountId",
-                    "clientAccountId"
-                  ],
-                  "scopes": [
-                    "https://www.googleapis.com/auth/adexchange.buyer"
-                  ],
-                  "parameters": {
-                    "pageToken": {
-                      "description": "A token identifying a page of results the server should return.\nTypically, this is the value of\nListClientUserInvitationsResponse.nextPageToken\nreturned from the previous call to the\nclients.invitations.list\nmethod.",
-                      "type": "string",
-                      "location": "query"
-                    },
-                    "accountId": {
-                      "description": "Numerical account ID of the client's sponsor buyer. (required)",
-                      "format": "int64",
-                      "required": true,
-                      "type": "string",
-                      "location": "path"
-                    },
-                    "pageSize": {
-                      "location": "query",
-                      "description": "Requested page size. Server may return fewer clients than requested.\nIf unspecified, server will pick an appropriate default.",
-                      "format": "int32",
-                      "type": "integer"
-                    },
-                    "clientAccountId": {
-                      "location": "path",
-                      "description": "Numerical account ID of the client buyer to list invitations for.\n(required)\nYou must either specify a string representation of a\nnumerical account identifier or the `-` character\nto list all the invitations for all the clients\nof a given sponsor buyer.",
-                      "required": true,
-                      "type": "string"
-                    }
-                  },
-                  "flatPath": "v2beta1/accounts/{accountId}/clients/{clientAccountId}/invitations",
-                  "path": "v2beta1/accounts/{accountId}/clients/{clientAccountId}/invitations",
-                  "id": "adexchangebuyer2.accounts.clients.invitations.list"
-                },
-                "create": {
-                  "parameters": {
-                    "accountId": {
-                      "location": "path",
-                      "description": "Numerical account ID of the client's sponsor buyer. (required)",
-                      "format": "int64",
-                      "required": true,
-                      "type": "string"
-                    },
-                    "clientAccountId": {
-                      "required": true,
-                      "type": "string",
-                      "location": "path",
-                      "description": "Numerical account ID of the client buyer that the user\nshould be associated with. (required)",
-                      "format": "int64"
-                    }
-                  },
-                  "scopes": [
-                    "https://www.googleapis.com/auth/adexchange.buyer"
-                  ],
-                  "flatPath": "v2beta1/accounts/{accountId}/clients/{clientAccountId}/invitations",
-                  "id": "adexchangebuyer2.accounts.clients.invitations.create",
-                  "path": "v2beta1/accounts/{accountId}/clients/{clientAccountId}/invitations",
-                  "request": {
-                    "$ref": "ClientUserInvitation"
-                  },
-                  "description": "Creates and sends out an email invitation to access\nan Ad Exchange client buyer account.",
-                  "httpMethod": "POST",
-                  "parameterOrder": [
-                    "accountId",
-                    "clientAccountId"
-                  ],
-                  "response": {
-                    "$ref": "ClientUserInvitation"
-                  }
-                }
-              }
-            }
-          }
-        },
-        "creatives": {
-          "methods": {
-            "get": {
-              "parameters": {
-                "accountId": {
-                  "location": "path",
-                  "description": "The account the creative belongs to.",
-                  "required": true,
-                  "type": "string"
-                },
-                "creativeId": {
-                  "location": "path",
-                  "description": "The ID of the creative to retrieve.",
-                  "required": true,
-                  "type": "string"
-                }
-              },
-              "scopes": [
-                "https://www.googleapis.com/auth/adexchange.buyer"
-              ],
-              "flatPath": "v2beta1/accounts/{accountId}/creatives/{creativeId}",
-              "id": "adexchangebuyer2.accounts.creatives.get",
-              "path": "v2beta1/accounts/{accountId}/creatives/{creativeId}",
-              "description": "Gets a creative.",
-              "httpMethod": "GET",
-              "parameterOrder": [
-                "accountId",
-                "creativeId"
-              ],
-              "response": {
-                "$ref": "Creative"
-              }
-            },
-            "watch": {
-              "request": {
-                "$ref": "WatchCreativeRequest"
-              },
-              "description": "Watches a creative. Will result in push notifications being sent to the\ntopic when the creative changes status.",
-              "response": {
-                "$ref": "Empty"
-              },
-              "parameterOrder": [
-                "accountId",
-                "creativeId"
-              ],
-              "httpMethod": "POST",
-              "parameters": {
-                "creativeId": {
-                  "description": "The creative ID to watch for status changes.\nSpecify \"-\" to watch all creatives under the above account.\nIf both creative-level and account-level notifications are\nsent, only a single notification will be sent to the\ncreative-level notification topic.",
-                  "required": true,
-                  "type": "string",
-                  "location": "path"
-                },
-                "accountId": {
-                  "location": "path",
-                  "description": "The account of the creative to watch.",
-                  "required": true,
-                  "type": "string"
-                }
-              },
-              "scopes": [
-                "https://www.googleapis.com/auth/adexchange.buyer"
-              ],
-              "flatPath": "v2beta1/accounts/{accountId}/creatives/{creativeId}:watch",
-              "path": "v2beta1/accounts/{accountId}/creatives/{creativeId}:watch",
-              "id": "adexchangebuyer2.accounts.creatives.watch"
-            },
-            "update": {
-              "description": "Updates a creative.",
-              "request": {
-                "$ref": "Creative"
-              },
-              "httpMethod": "PUT",
-              "parameterOrder": [
-                "accountId",
-                "creativeId"
-              ],
-              "response": {
-                "$ref": "Creative"
-              },
-              "scopes": [
-                "https://www.googleapis.com/auth/adexchange.buyer"
-              ],
-              "parameters": {
-                "accountId": {
-                  "location": "path",
-                  "description": "The account that this creative belongs to.\nCan be used to filter the response of the\ncreatives.list\nmethod.",
-                  "required": true,
-                  "type": "string"
-                },
-                "creativeId": {
-                  "description": "The buyer-defined creative ID of this creative.\nCan be used to filter the response of the\ncreatives.list\nmethod.",
-                  "required": true,
-                  "type": "string",
-                  "location": "path"
-                }
-              },
-              "flatPath": "v2beta1/accounts/{accountId}/creatives/{creativeId}",
-              "id": "adexchangebuyer2.accounts.creatives.update",
-              "path": "v2beta1/accounts/{accountId}/creatives/{creativeId}"
-            },
-            "list": {
-              "id": "adexchangebuyer2.accounts.creatives.list",
-              "path": "v2beta1/accounts/{accountId}/creatives",
-              "description": "Lists creatives.",
-              "httpMethod": "GET",
-              "parameterOrder": [
-                "accountId"
-              ],
-              "response": {
-                "$ref": "ListCreativesResponse"
-              },
-              "parameters": {
-                "query": {
-                  "location": "query",
-                  "description": "An optional query string to filter creatives. If no filter is specified,\nall active creatives will be returned.\nSupported queries are:\n\u003cul\u003e\n\u003cli\u003eaccountId=\u003ci\u003eaccount_id_string\u003c/i\u003e\n\u003cli\u003ecreativeId=\u003ci\u003ecreative_id_string\u003c/i\u003e\n\u003cli\u003edealsStatus: {approved, conditionally_approved, disapproved,\n                   not_checked}\n\u003cli\u003eopenAuctionStatus: {approved, conditionally_approved, disapproved,\n                          not_checked}\n\u003cli\u003eattribute: {a numeric attribute from the list of attributes}\n\u003cli\u003edisapprovalReason: {a reason from DisapprovalReason\n\u003c/ul\u003e\nExample: 'accountId=12345 AND (dealsStatus:disapproved AND disapprovalReason:unacceptable_content) OR attribute:47'",
-                  "type": "string"
-                },
-                "pageToken": {
-                  "description": "A token identifying a page of results the server should return.\nTypically, this is the value of\nListCreativesResponse.next_page_token\nreturned from the previous call to 'ListCreatives' method.",
-                  "type": "string",
-                  "location": "query"
-                },
-                "accountId": {
-                  "description": "The account to list the creatives from.\nSpecify \"-\" to list all creatives the current user has access to.",
-                  "required": true,
-                  "type": "string",
-                  "location": "path"
-                },
-                "pageSize": {
-                  "location": "query",
-                  "description": "Requested page size. The server may return fewer creatives than requested\n(due to timeout constraint) even if more are available via another call.\nIf unspecified, server will pick an appropriate default.\nAcceptable values are 1 to 1000, inclusive.",
-                  "format": "int32",
-                  "type": "integer"
-                }
-              },
-              "scopes": [
-                "https://www.googleapis.com/auth/adexchange.buyer"
-              ],
-              "flatPath": "v2beta1/accounts/{accountId}/creatives"
-            },
-            "create": {
-              "request": {
-                "$ref": "Creative"
-              },
-              "description": "Creates a creative.",
-              "httpMethod": "POST",
-              "parameterOrder": [
-                "accountId"
-              ],
-              "response": {
-                "$ref": "Creative"
-              },
-              "parameters": {
-                "duplicateIdMode": {
-                  "type": "string",
-                  "location": "query",
-                  "enum": [
-                    "NO_DUPLICATES",
-                    "FORCE_ENABLE_DUPLICATE_IDS"
-                  ],
-                  "description": "Indicates if multiple creatives can share an ID or not. Default is\nNO_DUPLICATES (one ID per creative)."
-                },
-                "accountId": {
-                  "location": "path",
-                  "description": "The account that this creative belongs to.\nCan be used to filter the response of the\ncreatives.list\nmethod.",
-                  "required": true,
-                  "type": "string"
-                }
-              },
-              "scopes": [
-                "https://www.googleapis.com/auth/adexchange.buyer"
-              ],
-              "flatPath": "v2beta1/accounts/{accountId}/creatives",
-              "id": "adexchangebuyer2.accounts.creatives.create",
-              "path": "v2beta1/accounts/{accountId}/creatives"
-            },
-            "stopWatching": {
-              "path": "v2beta1/accounts/{accountId}/creatives/{creativeId}:stopWatching",
-              "id": "adexchangebuyer2.accounts.creatives.stopWatching",
-              "request": {
-                "$ref": "StopWatchingCreativeRequest"
-              },
-              "description": "Stops watching a creative. Will stop push notifications being sent to the\ntopics when the creative changes status.",
-              "response": {
-                "$ref": "Empty"
-              },
-              "parameterOrder": [
-                "accountId",
-                "creativeId"
-              ],
-              "httpMethod": "POST",
-              "parameters": {
-                "accountId": {
-                  "location": "path",
-                  "description": "The account of the creative to stop notifications for.",
-                  "required": true,
-                  "type": "string"
-                },
-                "creativeId": {
-                  "location": "path",
-                  "description": "The creative ID of the creative to stop notifications for.\nSpecify \"-\" to specify stopping account level notifications.",
-                  "required": true,
-                  "type": "string"
-                }
-              },
-              "scopes": [
-                "https://www.googleapis.com/auth/adexchange.buyer"
-              ],
-              "flatPath": "v2beta1/accounts/{accountId}/creatives/{creativeId}:stopWatching"
-            }
-          },
-          "resources": {
-            "dealAssociations": {
-              "methods": {
-                "list": {
-                  "flatPath": "v2beta1/accounts/{accountId}/creatives/{creativeId}/dealAssociations",
-                  "id": "adexchangebuyer2.accounts.creatives.dealAssociations.list",
-                  "path": "v2beta1/accounts/{accountId}/creatives/{creativeId}/dealAssociations",
-                  "description": "List all creative-deal associations.",
-                  "httpMethod": "GET",
-                  "response": {
-                    "$ref": "ListDealAssociationsResponse"
-                  },
-                  "parameterOrder": [
-                    "accountId",
-                    "creativeId"
-                  ],
-                  "scopes": [
-                    "https://www.googleapis.com/auth/adexchange.buyer"
-                  ],
-                  "parameters": {
-                    "pageToken": {
-                      "location": "query",
-                      "description": "A token identifying a page of results the server should return.\nTypically, this is the value of\nListDealAssociationsResponse.next_page_token\nreturned from the previous call to 'ListDealAssociations' method.",
-                      "type": "string"
-                    },
-                    "accountId": {
-                      "location": "path",
-                      "description": "The account to list the associations from.\nSpecify \"-\" to list all creatives the current user has access to.",
-                      "required": true,
-                      "type": "string"
-                    },
-                    "pageSize": {
-                      "description": "Requested page size. Server may return fewer associations than requested.\nIf unspecified, server will pick an appropriate default.",
-                      "format": "int32",
-                      "type": "integer",
-                      "location": "query"
-                    },
-                    "query": {
-                      "description": "An optional query string to filter deal associations. If no filter is\nspecified, all associations will be returned.\nSupported queries are:\n\u003cul\u003e\n\u003cli\u003eaccountId=\u003ci\u003eaccount_id_string\u003c/i\u003e\n\u003cli\u003ecreativeId=\u003ci\u003ecreative_id_string\u003c/i\u003e\n\u003cli\u003edealsId=\u003ci\u003edeals_id_string\u003c/i\u003e\n\u003cli\u003edealsStatus:{approved, conditionally_approved, disapproved,\n                  not_checked}\n\u003cli\u003eopenAuctionStatus:{approved, conditionally_approved, disapproved,\n                         not_checked}\n\u003c/ul\u003e\nExample: 'dealsId=12345 AND dealsStatus:disapproved'",
-                      "type": "string",
-                      "location": "query"
-                    },
-                    "creativeId": {
-                      "description": "The creative ID to list the associations from.\nSpecify \"-\" to list all creatives under the above account.",
-                      "required": true,
-                      "type": "string",
-                      "location": "path"
-                    }
-                  }
-                },
-                "add": {
-                  "httpMethod": "POST",
-                  "parameterOrder": [
-                    "accountId",
-                    "creativeId"
-                  ],
-                  "response": {
-                    "$ref": "Empty"
-                  },
-                  "scopes": [
-                    "https://www.googleapis.com/auth/adexchange.buyer"
-                  ],
-                  "parameters": {
-                    "accountId": {
-                      "required": true,
-                      "type": "string",
-                      "location": "path",
-                      "description": "The account the creative belongs to."
-                    },
-                    "creativeId": {
-                      "description": "The ID of the creative associated with the deal.",
-                      "required": true,
-                      "type": "string",
-                      "location": "path"
-                    }
-                  },
-                  "flatPath": "v2beta1/accounts/{accountId}/creatives/{creativeId}/dealAssociations:add",
-                  "id": "adexchangebuyer2.accounts.creatives.dealAssociations.add",
-                  "path": "v2beta1/accounts/{accountId}/creatives/{creativeId}/dealAssociations:add",
-                  "description": "Associate an existing deal with a creative.",
-                  "request": {
-                    "$ref": "AddDealAssociationRequest"
-                  }
-                },
-                "remove": {
-                  "response": {
-                    "$ref": "Empty"
-                  },
-                  "parameterOrder": [
-                    "accountId",
-                    "creativeId"
-                  ],
-                  "httpMethod": "POST",
-                  "parameters": {
-                    "accountId": {
-                      "description": "The account the creative belongs to.",
-                      "required": true,
-                      "type": "string",
-                      "location": "path"
-                    },
-                    "creativeId": {
-                      "description": "The ID of the creative associated with the deal.",
-                      "required": true,
-                      "type": "string",
-                      "location": "path"
-                    }
-                  },
-                  "scopes": [
-                    "https://www.googleapis.com/auth/adexchange.buyer"
-                  ],
-                  "flatPath": "v2beta1/accounts/{accountId}/creatives/{creativeId}/dealAssociations:remove",
-                  "path": "v2beta1/accounts/{accountId}/creatives/{creativeId}/dealAssociations:remove",
-                  "id": "adexchangebuyer2.accounts.creatives.dealAssociations.remove",
-                  "request": {
-                    "$ref": "RemoveDealAssociationRequest"
-                  },
-                  "description": "Remove the association between a deal and a creative."
-                }
-              }
-            }
-          }
-        }
-      }
-    }
-  },
-  "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.",
-      "type": "string",
-      "location": "query"
-    },
-    "pp": {
-      "type": "boolean",
-      "default": "true",
-      "location": "query",
-      "description": "Pretty-print response."
-    },
-    "oauth_token": {
-      "location": "query",
-      "description": "OAuth 2.0 token for the current user.",
-      "type": "string"
-    },
-    "bearer_token": {
-      "location": "query",
-      "description": "OAuth bearer token.",
-      "type": "string"
-    },
-    "upload_protocol": {
-      "description": "Upload protocol for media (e.g. \"raw\", \"multipart\").",
-      "type": "string",
-      "location": "query"
-    },
-    "prettyPrint": {
-      "location": "query",
-      "description": "Returns response with indentations and line breaks.",
-      "type": "boolean",
-      "default": "true"
-    },
-    "fields": {
-      "location": "query",
-      "description": "Selector specifying which fields to include in a partial response.",
-      "type": "string"
-    },
-    "uploadType": {
-      "location": "query",
-      "description": "Legacy upload protocol for media (e.g. \"media\", \"multipart\").",
-      "type": "string"
-    },
-    "$.xgafv": {
-      "location": "query",
-      "enum": [
-        "1",
-        "2"
-      ],
-      "description": "V1 error format.",
-      "type": "string",
-      "enumDescriptions": [
-        "v1 error format",
-        "v2 error format"
-      ]
-    },
-    "callback": {
-      "location": "query",
-      "description": "JSONP",
-      "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"
-      ],
-      "location": "query",
-      "description": "Data format for response.",
-      "default": "json",
-      "enum": [
-        "json",
-        "media",
-        "proto"
-      ],
-      "type": "string"
-    },
-    "access_token": {
-      "location": "query",
-      "description": "OAuth access token.",
-      "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"
-    }
-  },
-  "version": "v2beta1",
-  "baseUrl": "https://adexchangebuyer.googleapis.com/"
+  "batchPath": "batch"
 }
diff --git a/adexchangebuyer2/v2beta1/adexchangebuyer2-gen.go b/adexchangebuyer2/v2beta1/adexchangebuyer2-gen.go
index e9ef66f..de2276e 100644
--- a/adexchangebuyer2/v2beta1/adexchangebuyer2-gen.go
+++ b/adexchangebuyer2/v2beta1/adexchangebuyer2-gen.go
@@ -61,10 +61,9 @@
 }
 
 type Service struct {
-	client                    *http.Client
-	BasePath                  string // API endpoint base URL
-	UserAgent                 string // optional additional User-Agent fragment
-	GoogleClientHeaderElement string // client header fragment, for Google use only
+	client    *http.Client
+	BasePath  string // API endpoint base URL
+	UserAgent string // optional additional User-Agent fragment
 
 	Accounts *AccountsService
 }
@@ -76,10 +75,6 @@
 	return googleapi.UserAgent + " " + s.UserAgent
 }
 
-func (s *Service) clientHeader() string {
-	return gensupport.GoogleClientHeader("20170210", s.GoogleClientHeaderElement)
-}
-
 func NewAccountsService(s *Service) *AccountsService {
 	rs := &AccountsService{s: s}
 	rs.Clients = NewAccountsClientsService(s)
@@ -1865,7 +1860,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	var body io.Reader = nil
 	body, err := googleapi.WithoutDataWrapper.JSONReader(c.client)
 	if err != nil {
@@ -2012,7 +2006,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	if c.ifNoneMatch_ != "" {
 		reqHeaders.Set("If-None-Match", c.ifNoneMatch_)
 	}
@@ -2181,7 +2174,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	if c.ifNoneMatch_ != "" {
 		reqHeaders.Set("If-None-Match", c.ifNoneMatch_)
 	}
@@ -2346,7 +2338,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	var body io.Reader = nil
 	body, err := googleapi.WithoutDataWrapper.JSONReader(c.client)
 	if err != nil {
@@ -2494,7 +2485,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	var body io.Reader = nil
 	body, err := googleapi.WithoutDataWrapper.JSONReader(c.clientuserinvitation)
 	if err != nil {
@@ -2652,7 +2642,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	if c.ifNoneMatch_ != "" {
 		reqHeaders.Set("If-None-Match", c.ifNoneMatch_)
 	}
@@ -2835,7 +2824,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	if c.ifNoneMatch_ != "" {
 		reqHeaders.Set("If-None-Match", c.ifNoneMatch_)
 	}
@@ -3020,7 +3008,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	if c.ifNoneMatch_ != "" {
 		reqHeaders.Set("If-None-Match", c.ifNoneMatch_)
 	}
@@ -3201,7 +3188,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	if c.ifNoneMatch_ != "" {
 		reqHeaders.Set("If-None-Match", c.ifNoneMatch_)
 	}
@@ -3377,7 +3363,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	var body io.Reader = nil
 	body, err := googleapi.WithoutDataWrapper.JSONReader(c.clientuser)
 	if err != nil {
@@ -3544,7 +3529,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	var body io.Reader = nil
 	body, err := googleapi.WithoutDataWrapper.JSONReader(c.creative)
 	if err != nil {
@@ -3699,7 +3683,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	if c.ifNoneMatch_ != "" {
 		reqHeaders.Set("If-None-Match", c.ifNoneMatch_)
 	}
@@ -3894,7 +3877,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	if c.ifNoneMatch_ != "" {
 		reqHeaders.Set("If-None-Match", c.ifNoneMatch_)
 	}
@@ -4065,7 +4047,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	var body io.Reader = nil
 	body, err := googleapi.WithoutDataWrapper.JSONReader(c.stopwatchingcreativerequest)
 	if err != nil {
@@ -4210,7 +4191,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	var body io.Reader = nil
 	body, err := googleapi.WithoutDataWrapper.JSONReader(c.creative)
 	if err != nil {
@@ -4357,7 +4337,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	var body io.Reader = nil
 	body, err := googleapi.WithoutDataWrapper.JSONReader(c.watchcreativerequest)
 	if err != nil {
@@ -4502,7 +4481,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	var body io.Reader = nil
 	body, err := googleapi.WithoutDataWrapper.JSONReader(c.adddealassociationrequest)
 	if err != nil {
@@ -4698,7 +4676,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	if c.ifNoneMatch_ != "" {
 		reqHeaders.Set("If-None-Match", c.ifNoneMatch_)
 	}
@@ -4875,7 +4852,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	var body io.Reader = nil
 	body, err := googleapi.WithoutDataWrapper.JSONReader(c.removedealassociationrequest)
 	if err != nil {
diff --git a/adexchangeseller/v1.1/adexchangeseller-gen.go b/adexchangeseller/v1.1/adexchangeseller-gen.go
index abc0b90..a3b2aee 100644
--- a/adexchangeseller/v1.1/adexchangeseller-gen.go
+++ b/adexchangeseller/v1.1/adexchangeseller-gen.go
@@ -72,10 +72,9 @@
 }
 
 type Service struct {
-	client                    *http.Client
-	BasePath                  string // API endpoint base URL
-	UserAgent                 string // optional additional User-Agent fragment
-	GoogleClientHeaderElement string // client header fragment, for Google use only
+	client    *http.Client
+	BasePath  string // API endpoint base URL
+	UserAgent string // optional additional User-Agent fragment
 
 	Accounts *AccountsService
 
@@ -103,10 +102,6 @@
 	return googleapi.UserAgent + " " + s.UserAgent
 }
 
-func (s *Service) clientHeader() string {
-	return gensupport.GoogleClientHeader("20170210", s.GoogleClientHeaderElement)
-}
-
 func NewAccountsService(s *Service) *AccountsService {
 	rs := &AccountsService{s: s}
 	return rs
@@ -1180,7 +1175,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	if c.ifNoneMatch_ != "" {
 		reqHeaders.Set("If-None-Match", c.ifNoneMatch_)
 	}
@@ -1333,7 +1327,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	if c.ifNoneMatch_ != "" {
 		reqHeaders.Set("If-None-Match", c.ifNoneMatch_)
 	}
@@ -1496,7 +1489,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	if c.ifNoneMatch_ != "" {
 		reqHeaders.Set("If-None-Match", c.ifNoneMatch_)
 	}
@@ -1667,7 +1659,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	if c.ifNoneMatch_ != "" {
 		reqHeaders.Set("If-None-Match", c.ifNoneMatch_)
 	}
@@ -1865,7 +1856,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	if c.ifNoneMatch_ != "" {
 		reqHeaders.Set("If-None-Match", c.ifNoneMatch_)
 	}
@@ -2053,7 +2043,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	if c.ifNoneMatch_ != "" {
 		reqHeaders.Set("If-None-Match", c.ifNoneMatch_)
 	}
@@ -2187,7 +2176,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	if c.ifNoneMatch_ != "" {
 		reqHeaders.Set("If-None-Match", c.ifNoneMatch_)
 	}
@@ -2352,7 +2340,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	if c.ifNoneMatch_ != "" {
 		reqHeaders.Set("If-None-Match", c.ifNoneMatch_)
 	}
@@ -2550,7 +2537,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	if c.ifNoneMatch_ != "" {
 		reqHeaders.Set("If-None-Match", c.ifNoneMatch_)
 	}
@@ -2735,7 +2721,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	if c.ifNoneMatch_ != "" {
 		reqHeaders.Set("If-None-Match", c.ifNoneMatch_)
 	}
@@ -2859,7 +2844,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	if c.ifNoneMatch_ != "" {
 		reqHeaders.Set("If-None-Match", c.ifNoneMatch_)
 	}
@@ -2984,7 +2968,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	if c.ifNoneMatch_ != "" {
 		reqHeaders.Set("If-None-Match", c.ifNoneMatch_)
 	}
@@ -3121,7 +3104,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	if c.ifNoneMatch_ != "" {
 		reqHeaders.Set("If-None-Match", c.ifNoneMatch_)
 	}
@@ -3300,7 +3282,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	if c.ifNoneMatch_ != "" {
 		reqHeaders.Set("If-None-Match", c.ifNoneMatch_)
 	}
@@ -3535,7 +3516,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	if c.ifNoneMatch_ != "" {
 		reqHeaders.Set("If-None-Match", c.ifNoneMatch_)
 	}
@@ -3710,7 +3690,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	if c.ifNoneMatch_ != "" {
 		reqHeaders.Set("If-None-Match", c.ifNoneMatch_)
 	}
@@ -3888,7 +3867,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	if c.ifNoneMatch_ != "" {
 		reqHeaders.Set("If-None-Match", c.ifNoneMatch_)
 	}
diff --git a/adexchangeseller/v1/adexchangeseller-gen.go b/adexchangeseller/v1/adexchangeseller-gen.go
index e6827a9..10b943f 100644
--- a/adexchangeseller/v1/adexchangeseller-gen.go
+++ b/adexchangeseller/v1/adexchangeseller-gen.go
@@ -68,10 +68,9 @@
 }
 
 type Service struct {
-	client                    *http.Client
-	BasePath                  string // API endpoint base URL
-	UserAgent                 string // optional additional User-Agent fragment
-	GoogleClientHeaderElement string // client header fragment, for Google use only
+	client    *http.Client
+	BasePath  string // API endpoint base URL
+	UserAgent string // optional additional User-Agent fragment
 
 	Adclients *AdclientsService
 
@@ -91,10 +90,6 @@
 	return googleapi.UserAgent + " " + s.UserAgent
 }
 
-func (s *Service) clientHeader() string {
-	return gensupport.GoogleClientHeader("20170210", s.GoogleClientHeaderElement)
-}
-
 func NewAdclientsService(s *Service) *AdclientsService {
 	rs := &AdclientsService{s: s}
 	return rs
@@ -814,7 +809,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	if c.ifNoneMatch_ != "" {
 		reqHeaders.Set("If-None-Match", c.ifNoneMatch_)
 	}
@@ -977,7 +971,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	if c.ifNoneMatch_ != "" {
 		reqHeaders.Set("If-None-Match", c.ifNoneMatch_)
 	}
@@ -1148,7 +1141,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	if c.ifNoneMatch_ != "" {
 		reqHeaders.Set("If-None-Match", c.ifNoneMatch_)
 	}
@@ -1346,7 +1338,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	if c.ifNoneMatch_ != "" {
 		reqHeaders.Set("If-None-Match", c.ifNoneMatch_)
 	}
@@ -1529,7 +1520,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	if c.ifNoneMatch_ != "" {
 		reqHeaders.Set("If-None-Match", c.ifNoneMatch_)
 	}
@@ -1694,7 +1684,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	if c.ifNoneMatch_ != "" {
 		reqHeaders.Set("If-None-Match", c.ifNoneMatch_)
 	}
@@ -1892,7 +1881,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	if c.ifNoneMatch_ != "" {
 		reqHeaders.Set("If-None-Match", c.ifNoneMatch_)
 	}
@@ -2132,7 +2120,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	if c.ifNoneMatch_ != "" {
 		reqHeaders.Set("If-None-Match", c.ifNoneMatch_)
 	}
@@ -2367,7 +2354,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	if c.ifNoneMatch_ != "" {
 		reqHeaders.Set("If-None-Match", c.ifNoneMatch_)
 	}
@@ -2542,7 +2528,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	if c.ifNoneMatch_ != "" {
 		reqHeaders.Set("If-None-Match", c.ifNoneMatch_)
 	}
@@ -2720,7 +2705,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	if c.ifNoneMatch_ != "" {
 		reqHeaders.Set("If-None-Match", c.ifNoneMatch_)
 	}
diff --git a/adexchangeseller/v2.0/adexchangeseller-gen.go b/adexchangeseller/v2.0/adexchangeseller-gen.go
index bc1cabf..5b54c3a 100644
--- a/adexchangeseller/v2.0/adexchangeseller-gen.go
+++ b/adexchangeseller/v2.0/adexchangeseller-gen.go
@@ -64,10 +64,9 @@
 }
 
 type Service struct {
-	client                    *http.Client
-	BasePath                  string // API endpoint base URL
-	UserAgent                 string // optional additional User-Agent fragment
-	GoogleClientHeaderElement string // client header fragment, for Google use only
+	client    *http.Client
+	BasePath  string // API endpoint base URL
+	UserAgent string // optional additional User-Agent fragment
 
 	Accounts *AccountsService
 }
@@ -79,10 +78,6 @@
 	return googleapi.UserAgent + " " + s.UserAgent
 }
 
-func (s *Service) clientHeader() string {
-	return gensupport.GoogleClientHeader("20170210", s.GoogleClientHeaderElement)
-}
-
 func NewAccountsService(s *Service) *AccountsService {
 	rs := &AccountsService{s: s}
 	rs.Adclients = NewAccountsAdclientsService(s)
@@ -1090,7 +1085,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	if c.ifNoneMatch_ != "" {
 		reqHeaders.Set("If-None-Match", c.ifNoneMatch_)
 	}
@@ -1243,7 +1237,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	if c.ifNoneMatch_ != "" {
 		reqHeaders.Set("If-None-Match", c.ifNoneMatch_)
 	}
@@ -1420,7 +1413,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	if c.ifNoneMatch_ != "" {
 		reqHeaders.Set("If-None-Match", c.ifNoneMatch_)
 	}
@@ -1602,7 +1594,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	if c.ifNoneMatch_ != "" {
 		reqHeaders.Set("If-None-Match", c.ifNoneMatch_)
 	}
@@ -1750,7 +1741,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	if c.ifNoneMatch_ != "" {
 		reqHeaders.Set("If-None-Match", c.ifNoneMatch_)
 	}
@@ -1925,7 +1915,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	if c.ifNoneMatch_ != "" {
 		reqHeaders.Set("If-None-Match", c.ifNoneMatch_)
 	}
@@ -2107,7 +2096,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	if c.ifNoneMatch_ != "" {
 		reqHeaders.Set("If-None-Match", c.ifNoneMatch_)
 	}
@@ -2247,7 +2235,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	if c.ifNoneMatch_ != "" {
 		reqHeaders.Set("If-None-Match", c.ifNoneMatch_)
 	}
@@ -2388,7 +2375,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	if c.ifNoneMatch_ != "" {
 		reqHeaders.Set("If-None-Match", c.ifNoneMatch_)
 	}
@@ -2535,7 +2521,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	if c.ifNoneMatch_ != "" {
 		reqHeaders.Set("If-None-Match", c.ifNoneMatch_)
 	}
@@ -2730,7 +2715,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	if c.ifNoneMatch_ != "" {
 		reqHeaders.Set("If-None-Match", c.ifNoneMatch_)
 	}
@@ -2977,7 +2961,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	if c.ifNoneMatch_ != "" {
 		reqHeaders.Set("If-None-Match", c.ifNoneMatch_)
 	}
@@ -3162,7 +3145,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	if c.ifNoneMatch_ != "" {
 		reqHeaders.Set("If-None-Match", c.ifNoneMatch_)
 	}
@@ -3354,7 +3336,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	if c.ifNoneMatch_ != "" {
 		reqHeaders.Set("If-None-Match", c.ifNoneMatch_)
 	}
diff --git a/admin/datatransfer/v1/admin-gen.go b/admin/datatransfer/v1/admin-gen.go
index 9cfda85..fc783ea 100644
--- a/admin/datatransfer/v1/admin-gen.go
+++ b/admin/datatransfer/v1/admin-gen.go
@@ -65,10 +65,9 @@
 }
 
 type Service struct {
-	client                    *http.Client
-	BasePath                  string // API endpoint base URL
-	UserAgent                 string // optional additional User-Agent fragment
-	GoogleClientHeaderElement string // client header fragment, for Google use only
+	client    *http.Client
+	BasePath  string // API endpoint base URL
+	UserAgent string // optional additional User-Agent fragment
 
 	Applications *ApplicationsService
 
@@ -82,10 +81,6 @@
 	return googleapi.UserAgent + " " + s.UserAgent
 }
 
-func (s *Service) clientHeader() string {
-	return gensupport.GoogleClientHeader("20170210", s.GoogleClientHeaderElement)
-}
-
 func NewApplicationsService(s *Service) *ApplicationsService {
 	rs := &ApplicationsService{s: s}
 	return rs
@@ -428,7 +423,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	if c.ifNoneMatch_ != "" {
 		reqHeaders.Set("If-None-Match", c.ifNoneMatch_)
 	}
@@ -588,7 +582,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	if c.ifNoneMatch_ != "" {
 		reqHeaders.Set("If-None-Match", c.ifNoneMatch_)
 	}
@@ -754,7 +747,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	if c.ifNoneMatch_ != "" {
 		reqHeaders.Set("If-None-Match", c.ifNoneMatch_)
 	}
@@ -882,7 +874,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	var body io.Reader = nil
 	body, err := googleapi.WithoutDataWrapper.JSONReader(c.datatransfer)
 	if err != nil {
@@ -1051,7 +1042,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	if c.ifNoneMatch_ != "" {
 		reqHeaders.Set("If-None-Match", c.ifNoneMatch_)
 	}
diff --git a/admin/directory/v1/admin-gen.go b/admin/directory/v1/admin-gen.go
index 5a3cf6a..00d1ef1 100644
--- a/admin/directory/v1/admin-gen.go
+++ b/admin/directory/v1/admin-gen.go
@@ -157,10 +157,9 @@
 }
 
 type Service struct {
-	client                    *http.Client
-	BasePath                  string // API endpoint base URL
-	UserAgent                 string // optional additional User-Agent fragment
-	GoogleClientHeaderElement string // client header fragment, for Google use only
+	client    *http.Client
+	BasePath  string // API endpoint base URL
+	UserAgent string // optional additional User-Agent fragment
 
 	Asps *AspsService
 
@@ -208,10 +207,6 @@
 	return googleapi.UserAgent + " " + s.UserAgent
 }
 
-func (s *Service) clientHeader() string {
-	return gensupport.GoogleClientHeader("20170210", s.GoogleClientHeaderElement)
-}
-
 func NewAspsService(s *Service) *AspsService {
 	rs := &AspsService{s: s}
 	return rs
@@ -3551,7 +3546,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	var body io.Reader = nil
 	c.urlParams_.Set("alt", alt)
 	urls := googleapi.ResolveRelative(c.s.BasePath, "users/{userKey}/asps/{codeId}")
@@ -3669,7 +3663,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	if c.ifNoneMatch_ != "" {
 		reqHeaders.Set("If-None-Match", c.ifNoneMatch_)
 	}
@@ -3816,7 +3809,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	if c.ifNoneMatch_ != "" {
 		reqHeaders.Set("If-None-Match", c.ifNoneMatch_)
 	}
@@ -3943,7 +3935,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	var body io.Reader = nil
 	body, err := googleapi.WithoutDataWrapper.JSONReader(c.channel)
 	if err != nil {
@@ -4041,7 +4032,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	var body io.Reader = nil
 	body, err := googleapi.WithoutDataWrapper.JSONReader(c.chromeosdeviceaction)
 	if err != nil {
@@ -4178,7 +4168,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	if c.ifNoneMatch_ != "" {
 		reqHeaders.Set("If-None-Match", c.ifNoneMatch_)
 	}
@@ -4401,7 +4390,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	if c.ifNoneMatch_ != "" {
 		reqHeaders.Set("If-None-Match", c.ifNoneMatch_)
 	}
@@ -4632,7 +4620,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	var body io.Reader = nil
 	body, err := googleapi.WithoutDataWrapper.JSONReader(c.chromeosdevice)
 	if err != nil {
@@ -4801,7 +4788,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	var body io.Reader = nil
 	body, err := googleapi.WithoutDataWrapper.JSONReader(c.chromeosdevice)
 	if err != nil {
@@ -4965,7 +4951,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	if c.ifNoneMatch_ != "" {
 		reqHeaders.Set("If-None-Match", c.ifNoneMatch_)
 	}
@@ -5095,7 +5080,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	var body io.Reader = nil
 	body, err := googleapi.WithoutDataWrapper.JSONReader(c.customer)
 	if err != nil {
@@ -5229,7 +5213,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	var body io.Reader = nil
 	body, err := googleapi.WithoutDataWrapper.JSONReader(c.customer)
 	if err != nil {
@@ -5363,7 +5346,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	var body io.Reader = nil
 	c.urlParams_.Set("alt", alt)
 	urls := googleapi.ResolveRelative(c.s.BasePath, "customer/{customer}/domainaliases/{domainAliasName}")
@@ -5480,7 +5462,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	if c.ifNoneMatch_ != "" {
 		reqHeaders.Set("If-None-Match", c.ifNoneMatch_)
 	}
@@ -5618,7 +5599,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	var body io.Reader = nil
 	body, err := googleapi.WithoutDataWrapper.JSONReader(c.domainalias)
 	if err != nil {
@@ -5768,7 +5748,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	if c.ifNoneMatch_ != "" {
 		reqHeaders.Set("If-None-Match", c.ifNoneMatch_)
 	}
@@ -5903,7 +5882,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	var body io.Reader = nil
 	c.urlParams_.Set("alt", alt)
 	urls := googleapi.ResolveRelative(c.s.BasePath, "customer/{customer}/domains/{domainName}")
@@ -6020,7 +5998,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	if c.ifNoneMatch_ != "" {
 		reqHeaders.Set("If-None-Match", c.ifNoneMatch_)
 	}
@@ -6158,7 +6135,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	var body io.Reader = nil
 	body, err := googleapi.WithoutDataWrapper.JSONReader(c.domains)
 	if err != nil {
@@ -6301,7 +6277,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	if c.ifNoneMatch_ != "" {
 		reqHeaders.Set("If-None-Match", c.ifNoneMatch_)
 	}
@@ -6429,7 +6404,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	var body io.Reader = nil
 	c.urlParams_.Set("alt", alt)
 	urls := googleapi.ResolveRelative(c.s.BasePath, "groups/{groupKey}")
@@ -6536,7 +6510,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	if c.ifNoneMatch_ != "" {
 		reqHeaders.Set("If-None-Match", c.ifNoneMatch_)
 	}
@@ -6664,7 +6637,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	var body io.Reader = nil
 	body, err := googleapi.WithoutDataWrapper.JSONReader(c.group)
 	if err != nil {
@@ -6829,7 +6801,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	if c.ifNoneMatch_ != "" {
 		reqHeaders.Set("If-None-Match", c.ifNoneMatch_)
 	}
@@ -6995,7 +6966,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	var body io.Reader = nil
 	body, err := googleapi.WithoutDataWrapper.JSONReader(c.group)
 	if err != nil {
@@ -7129,7 +7099,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	var body io.Reader = nil
 	body, err := googleapi.WithoutDataWrapper.JSONReader(c.group)
 	if err != nil {
@@ -7263,7 +7232,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	var body io.Reader = nil
 	c.urlParams_.Set("alt", alt)
 	urls := googleapi.ResolveRelative(c.s.BasePath, "groups/{groupKey}/aliases/{alias}")
@@ -7369,7 +7337,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	var body io.Reader = nil
 	body, err := googleapi.WithoutDataWrapper.JSONReader(c.alias)
 	if err != nil {
@@ -7512,7 +7479,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	if c.ifNoneMatch_ != "" {
 		reqHeaders.Set("If-None-Match", c.ifNoneMatch_)
 	}
@@ -7643,7 +7609,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	var body io.Reader = nil
 	c.urlParams_.Set("alt", alt)
 	urls := googleapi.ResolveRelative(c.s.BasePath, "groups/{groupKey}/members/{memberKey}")
@@ -7761,7 +7726,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	if c.ifNoneMatch_ != "" {
 		reqHeaders.Set("If-None-Match", c.ifNoneMatch_)
 	}
@@ -7901,7 +7865,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	var body io.Reader = nil
 	body, err := googleapi.WithoutDataWrapper.JSONReader(c.member)
 	if err != nil {
@@ -8066,7 +8029,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	if c.ifNoneMatch_ != "" {
 		reqHeaders.Set("If-None-Match", c.ifNoneMatch_)
 	}
@@ -8239,7 +8201,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	var body io.Reader = nil
 	body, err := googleapi.WithoutDataWrapper.JSONReader(c.member)
 	if err != nil {
@@ -8384,7 +8345,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	var body io.Reader = nil
 	body, err := googleapi.WithoutDataWrapper.JSONReader(c.member)
 	if err != nil {
@@ -8529,7 +8489,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	var body io.Reader = nil
 	body, err := googleapi.WithoutDataWrapper.JSONReader(c.mobiledeviceaction)
 	if err != nil {
@@ -8644,7 +8603,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	var body io.Reader = nil
 	c.urlParams_.Set("alt", alt)
 	urls := googleapi.ResolveRelative(c.s.BasePath, "customer/{customerId}/devices/mobile/{resourceId}")
@@ -8773,7 +8731,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	if c.ifNoneMatch_ != "" {
 		reqHeaders.Set("If-None-Match", c.ifNoneMatch_)
 	}
@@ -8997,7 +8954,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	if c.ifNoneMatch_ != "" {
 		reqHeaders.Set("If-None-Match", c.ifNoneMatch_)
 	}
@@ -9217,7 +9173,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	var body io.Reader = nil
 	c.urlParams_.Set("alt", alt)
 	urls := googleapi.ResolveRelative(c.s.BasePath, "customer/{customer}/notifications/{notificationId}")
@@ -9334,7 +9289,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	if c.ifNoneMatch_ != "" {
 		reqHeaders.Set("If-None-Match", c.ifNoneMatch_)
 	}
@@ -9502,7 +9456,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	if c.ifNoneMatch_ != "" {
 		reqHeaders.Set("If-None-Match", c.ifNoneMatch_)
 	}
@@ -9670,7 +9623,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	var body io.Reader = nil
 	body, err := googleapi.WithoutDataWrapper.JSONReader(c.notification)
 	if err != nil {
@@ -9814,7 +9766,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	var body io.Reader = nil
 	body, err := googleapi.WithoutDataWrapper.JSONReader(c.notification)
 	if err != nil {
@@ -9956,7 +9907,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	var body io.Reader = nil
 	c.urlParams_.Set("alt", alt)
 	urls := googleapi.ResolveRelative(c.s.BasePath, "customer/{customerId}/orgunits{/orgUnitPath*}")
@@ -10074,7 +10024,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	if c.ifNoneMatch_ != "" {
 		reqHeaders.Set("If-None-Match", c.ifNoneMatch_)
 	}
@@ -10213,7 +10162,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	var body io.Reader = nil
 	body, err := googleapi.WithoutDataWrapper.JSONReader(c.orgunit)
 	if err != nil {
@@ -10374,7 +10322,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	if c.ifNoneMatch_ != "" {
 		reqHeaders.Set("If-None-Match", c.ifNoneMatch_)
 	}
@@ -10526,7 +10473,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	var body io.Reader = nil
 	body, err := googleapi.WithoutDataWrapper.JSONReader(c.orgunit)
 	if err != nil {
@@ -10671,7 +10617,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	var body io.Reader = nil
 	body, err := googleapi.WithoutDataWrapper.JSONReader(c.orgunit)
 	if err != nil {
@@ -10823,7 +10768,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	if c.ifNoneMatch_ != "" {
 		reqHeaders.Set("If-None-Match", c.ifNoneMatch_)
 	}
@@ -10953,7 +10897,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	var body io.Reader = nil
 	c.urlParams_.Set("alt", alt)
 	urls := googleapi.ResolveRelative(c.s.BasePath, "customer/{customer}/resources/calendars/{calendarResourceId}")
@@ -11070,7 +11013,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	if c.ifNoneMatch_ != "" {
 		reqHeaders.Set("If-None-Match", c.ifNoneMatch_)
 	}
@@ -11208,7 +11150,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	var body io.Reader = nil
 	body, err := googleapi.WithoutDataWrapper.JSONReader(c.calendarresource)
 	if err != nil {
@@ -11365,7 +11306,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	if c.ifNoneMatch_ != "" {
 		reqHeaders.Set("If-None-Match", c.ifNoneMatch_)
 	}
@@ -11532,7 +11472,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	var body io.Reader = nil
 	body, err := googleapi.WithoutDataWrapper.JSONReader(c.calendarresource)
 	if err != nil {
@@ -11676,7 +11615,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	var body io.Reader = nil
 	body, err := googleapi.WithoutDataWrapper.JSONReader(c.calendarresource)
 	if err != nil {
@@ -11818,7 +11756,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	var body io.Reader = nil
 	c.urlParams_.Set("alt", alt)
 	urls := googleapi.ResolveRelative(c.s.BasePath, "customer/{customer}/roleassignments/{roleAssignmentId}")
@@ -11935,7 +11872,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	if c.ifNoneMatch_ != "" {
 		reqHeaders.Set("If-None-Match", c.ifNoneMatch_)
 	}
@@ -12073,7 +12009,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	var body io.Reader = nil
 	body, err := googleapi.WithoutDataWrapper.JSONReader(c.roleassignment)
 	if err != nil {
@@ -12246,7 +12181,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	if c.ifNoneMatch_ != "" {
 		reqHeaders.Set("If-None-Match", c.ifNoneMatch_)
 	}
@@ -12420,7 +12354,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	var body io.Reader = nil
 	c.urlParams_.Set("alt", alt)
 	urls := googleapi.ResolveRelative(c.s.BasePath, "customer/{customer}/roles/{roleId}")
@@ -12537,7 +12470,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	if c.ifNoneMatch_ != "" {
 		reqHeaders.Set("If-None-Match", c.ifNoneMatch_)
 	}
@@ -12675,7 +12607,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	var body io.Reader = nil
 	body, err := googleapi.WithoutDataWrapper.JSONReader(c.role)
 	if err != nil {
@@ -12832,7 +12763,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	if c.ifNoneMatch_ != "" {
 		reqHeaders.Set("If-None-Match", c.ifNoneMatch_)
 	}
@@ -12998,7 +12928,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	var body io.Reader = nil
 	body, err := googleapi.WithoutDataWrapper.JSONReader(c.role)
 	if err != nil {
@@ -13142,7 +13071,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	var body io.Reader = nil
 	body, err := googleapi.WithoutDataWrapper.JSONReader(c.role)
 	if err != nil {
@@ -13284,7 +13212,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	var body io.Reader = nil
 	c.urlParams_.Set("alt", alt)
 	urls := googleapi.ResolveRelative(c.s.BasePath, "customer/{customerId}/schemas/{schemaKey}")
@@ -13401,7 +13328,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	if c.ifNoneMatch_ != "" {
 		reqHeaders.Set("If-None-Match", c.ifNoneMatch_)
 	}
@@ -13539,7 +13465,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	var body io.Reader = nil
 	body, err := googleapi.WithoutDataWrapper.JSONReader(c.schema)
 	if err != nil {
@@ -13682,7 +13607,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	if c.ifNoneMatch_ != "" {
 		reqHeaders.Set("If-None-Match", c.ifNoneMatch_)
 	}
@@ -13814,7 +13738,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	var body io.Reader = nil
 	body, err := googleapi.WithoutDataWrapper.JSONReader(c.schema)
 	if err != nil {
@@ -13958,7 +13881,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	var body io.Reader = nil
 	body, err := googleapi.WithoutDataWrapper.JSONReader(c.schema)
 	if err != nil {
@@ -14100,7 +14022,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	var body io.Reader = nil
 	c.urlParams_.Set("alt", alt)
 	urls := googleapi.ResolveRelative(c.s.BasePath, "users/{userKey}/tokens/{clientId}")
@@ -14217,7 +14138,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	if c.ifNoneMatch_ != "" {
 		reqHeaders.Set("If-None-Match", c.ifNoneMatch_)
 	}
@@ -14364,7 +14284,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	if c.ifNoneMatch_ != "" {
 		reqHeaders.Set("If-None-Match", c.ifNoneMatch_)
 	}
@@ -14491,7 +14410,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	var body io.Reader = nil
 	c.urlParams_.Set("alt", alt)
 	urls := googleapi.ResolveRelative(c.s.BasePath, "users/{userKey}")
@@ -14630,7 +14548,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	if c.ifNoneMatch_ != "" {
 		reqHeaders.Set("If-None-Match", c.ifNoneMatch_)
 	}
@@ -14793,7 +14710,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	var body io.Reader = nil
 	body, err := googleapi.WithoutDataWrapper.JSONReader(c.user)
 	if err != nil {
@@ -15035,7 +14951,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	if c.ifNoneMatch_ != "" {
 		reqHeaders.Set("If-None-Match", c.ifNoneMatch_)
 	}
@@ -15290,7 +15205,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	var body io.Reader = nil
 	body, err := googleapi.WithoutDataWrapper.JSONReader(c.usermakeadmin)
 	if err != nil {
@@ -15396,7 +15310,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	var body io.Reader = nil
 	body, err := googleapi.WithoutDataWrapper.JSONReader(c.user)
 	if err != nil {
@@ -15530,7 +15443,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	var body io.Reader = nil
 	body, err := googleapi.WithoutDataWrapper.JSONReader(c.userundelete)
 	if err != nil {
@@ -15636,7 +15548,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	var body io.Reader = nil
 	body, err := googleapi.WithoutDataWrapper.JSONReader(c.user)
 	if err != nil {
@@ -15882,7 +15793,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	var body io.Reader = nil
 	body, err := googleapi.WithoutDataWrapper.JSONReader(c.channel)
 	if err != nil {
@@ -16122,7 +16032,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	var body io.Reader = nil
 	c.urlParams_.Set("alt", alt)
 	urls := googleapi.ResolveRelative(c.s.BasePath, "users/{userKey}/aliases/{alias}")
@@ -16229,7 +16138,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	var body io.Reader = nil
 	body, err := googleapi.WithoutDataWrapper.JSONReader(c.alias)
 	if err != nil {
@@ -16384,7 +16292,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	if c.ifNoneMatch_ != "" {
 		reqHeaders.Set("If-None-Match", c.ifNoneMatch_)
 	}
@@ -16541,7 +16448,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	var body io.Reader = nil
 	body, err := googleapi.WithoutDataWrapper.JSONReader(c.channel)
 	if err != nil {
@@ -16691,7 +16597,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	var body io.Reader = nil
 	c.urlParams_.Set("alt", alt)
 	urls := googleapi.ResolveRelative(c.s.BasePath, "users/{userKey}/photos/thumbnail")
@@ -16798,7 +16703,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	if c.ifNoneMatch_ != "" {
 		reqHeaders.Set("If-None-Match", c.ifNoneMatch_)
 	}
@@ -16929,7 +16833,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	var body io.Reader = nil
 	body, err := googleapi.WithoutDataWrapper.JSONReader(c.userphoto)
 	if err != nil {
@@ -17063,7 +16966,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	var body io.Reader = nil
 	body, err := googleapi.WithoutDataWrapper.JSONReader(c.userphoto)
 	if err != nil {
@@ -17195,7 +17097,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	var body io.Reader = nil
 	c.urlParams_.Set("alt", alt)
 	urls := googleapi.ResolveRelative(c.s.BasePath, "users/{userKey}/verificationCodes/generate")
@@ -17292,7 +17193,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	var body io.Reader = nil
 	c.urlParams_.Set("alt", alt)
 	urls := googleapi.ResolveRelative(c.s.BasePath, "users/{userKey}/verificationCodes/invalidate")
@@ -17400,7 +17300,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	if c.ifNoneMatch_ != "" {
 		reqHeaders.Set("If-None-Match", c.ifNoneMatch_)
 	}
diff --git a/admin/reports/v1/admin-gen.go b/admin/reports/v1/admin-gen.go
index fe15c1b..4bd0bd7 100644
--- a/admin/reports/v1/admin-gen.go
+++ b/admin/reports/v1/admin-gen.go
@@ -67,10 +67,9 @@
 }
 
 type Service struct {
-	client                    *http.Client
-	BasePath                  string // API endpoint base URL
-	UserAgent                 string // optional additional User-Agent fragment
-	GoogleClientHeaderElement string // client header fragment, for Google use only
+	client    *http.Client
+	BasePath  string // API endpoint base URL
+	UserAgent string // optional additional User-Agent fragment
 
 	Activities *ActivitiesService
 
@@ -88,10 +87,6 @@
 	return googleapi.UserAgent + " " + s.UserAgent
 }
 
-func (s *Service) clientHeader() string {
-	return gensupport.GoogleClientHeader("20170210", s.GoogleClientHeaderElement)
-}
-
 func NewActivitiesService(s *Service) *ActivitiesService {
 	rs := &ActivitiesService{s: s}
 	return rs
@@ -780,7 +775,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	if c.ifNoneMatch_ != "" {
 		reqHeaders.Set("If-None-Match", c.ifNoneMatch_)
 	}
@@ -1047,7 +1041,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	var body io.Reader = nil
 	body, err := googleapi.WithoutDataWrapper.JSONReader(c.channel)
 	if err != nil {
@@ -1237,7 +1230,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	var body io.Reader = nil
 	body, err := googleapi.WithoutDataWrapper.JSONReader(c.channel)
 	if err != nil {
@@ -1362,7 +1354,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	if c.ifNoneMatch_ != "" {
 		reqHeaders.Set("If-None-Match", c.ifNoneMatch_)
 	}
@@ -1578,7 +1569,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	if c.ifNoneMatch_ != "" {
 		reqHeaders.Set("If-None-Match", c.ifNoneMatch_)
 	}
diff --git a/adsense/v1.3/adsense-gen.go b/adsense/v1.3/adsense-gen.go
index 6fab561..4ec72e1 100644
--- a/adsense/v1.3/adsense-gen.go
+++ b/adsense/v1.3/adsense-gen.go
@@ -72,10 +72,9 @@
 }
 
 type Service struct {
-	client                    *http.Client
-	BasePath                  string // API endpoint base URL
-	UserAgent                 string // optional additional User-Agent fragment
-	GoogleClientHeaderElement string // client header fragment, for Google use only
+	client    *http.Client
+	BasePath  string // API endpoint base URL
+	UserAgent string // optional additional User-Agent fragment
 
 	Accounts *AccountsService
 
@@ -103,10 +102,6 @@
 	return googleapi.UserAgent + " " + s.UserAgent
 }
 
-func (s *Service) clientHeader() string {
-	return gensupport.GoogleClientHeader("20170210", s.GoogleClientHeaderElement)
-}
-
 func NewAccountsService(s *Service) *AccountsService {
 	rs := &AccountsService{s: s}
 	rs.Adclients = NewAccountsAdclientsService(s)
@@ -1649,7 +1644,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	if c.ifNoneMatch_ != "" {
 		reqHeaders.Set("If-None-Match", c.ifNoneMatch_)
 	}
@@ -1807,7 +1801,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	if c.ifNoneMatch_ != "" {
 		reqHeaders.Set("If-None-Match", c.ifNoneMatch_)
 	}
@@ -1984,7 +1977,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	if c.ifNoneMatch_ != "" {
 		reqHeaders.Set("If-None-Match", c.ifNoneMatch_)
 	}
@@ -2162,7 +2154,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	if c.ifNoneMatch_ != "" {
 		reqHeaders.Set("If-None-Match", c.ifNoneMatch_)
 	}
@@ -2321,7 +2312,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	if c.ifNoneMatch_ != "" {
 		reqHeaders.Set("If-None-Match", c.ifNoneMatch_)
 	}
@@ -2502,7 +2492,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	if c.ifNoneMatch_ != "" {
 		reqHeaders.Set("If-None-Match", c.ifNoneMatch_)
 	}
@@ -2710,7 +2699,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	if c.ifNoneMatch_ != "" {
 		reqHeaders.Set("If-None-Match", c.ifNoneMatch_)
 	}
@@ -2908,7 +2896,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	if c.ifNoneMatch_ != "" {
 		reqHeaders.Set("If-None-Match", c.ifNoneMatch_)
 	}
@@ -3057,7 +3044,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	if c.ifNoneMatch_ != "" {
 		reqHeaders.Set("If-None-Match", c.ifNoneMatch_)
 	}
@@ -3232,7 +3218,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	if c.ifNoneMatch_ != "" {
 		reqHeaders.Set("If-None-Match", c.ifNoneMatch_)
 	}
@@ -3440,7 +3425,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	if c.ifNoneMatch_ != "" {
 		reqHeaders.Set("If-None-Match", c.ifNoneMatch_)
 	}
@@ -3707,7 +3691,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	if c.ifNoneMatch_ != "" {
 		reqHeaders.Set("If-None-Match", c.ifNoneMatch_)
 	}
@@ -3965,7 +3948,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	if c.ifNoneMatch_ != "" {
 		reqHeaders.Set("If-None-Match", c.ifNoneMatch_)
 	}
@@ -4150,7 +4132,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	if c.ifNoneMatch_ != "" {
 		reqHeaders.Set("If-None-Match", c.ifNoneMatch_)
 	}
@@ -4325,7 +4306,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	if c.ifNoneMatch_ != "" {
 		reqHeaders.Set("If-None-Match", c.ifNoneMatch_)
 	}
@@ -4489,7 +4469,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	if c.ifNoneMatch_ != "" {
 		reqHeaders.Set("If-None-Match", c.ifNoneMatch_)
 	}
@@ -4681,7 +4660,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	if c.ifNoneMatch_ != "" {
 		reqHeaders.Set("If-None-Match", c.ifNoneMatch_)
 	}
@@ -4876,7 +4854,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	if c.ifNoneMatch_ != "" {
 		reqHeaders.Set("If-None-Match", c.ifNoneMatch_)
 	}
@@ -5039,7 +5016,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	if c.ifNoneMatch_ != "" {
 		reqHeaders.Set("If-None-Match", c.ifNoneMatch_)
 	}
@@ -5188,7 +5164,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	if c.ifNoneMatch_ != "" {
 		reqHeaders.Set("If-None-Match", c.ifNoneMatch_)
 	}
@@ -5359,7 +5334,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	if c.ifNoneMatch_ != "" {
 		reqHeaders.Set("If-None-Match", c.ifNoneMatch_)
 	}
@@ -5557,7 +5531,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	if c.ifNoneMatch_ != "" {
 		reqHeaders.Set("If-None-Match", c.ifNoneMatch_)
 	}
@@ -5745,7 +5718,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	if c.ifNoneMatch_ != "" {
 		reqHeaders.Set("If-None-Match", c.ifNoneMatch_)
 	}
@@ -5879,7 +5851,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	if c.ifNoneMatch_ != "" {
 		reqHeaders.Set("If-None-Match", c.ifNoneMatch_)
 	}
@@ -6044,7 +6015,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	if c.ifNoneMatch_ != "" {
 		reqHeaders.Set("If-None-Match", c.ifNoneMatch_)
 	}
@@ -6242,7 +6212,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	if c.ifNoneMatch_ != "" {
 		reqHeaders.Set("If-None-Match", c.ifNoneMatch_)
 	}
@@ -6427,7 +6396,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	if c.ifNoneMatch_ != "" {
 		reqHeaders.Set("If-None-Match", c.ifNoneMatch_)
 	}
@@ -6551,7 +6519,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	if c.ifNoneMatch_ != "" {
 		reqHeaders.Set("If-None-Match", c.ifNoneMatch_)
 	}
@@ -6754,7 +6721,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	if c.ifNoneMatch_ != "" {
 		reqHeaders.Set("If-None-Match", c.ifNoneMatch_)
 	}
@@ -7006,7 +6972,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	if c.ifNoneMatch_ != "" {
 		reqHeaders.Set("If-None-Match", c.ifNoneMatch_)
 	}
@@ -7181,7 +7146,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	if c.ifNoneMatch_ != "" {
 		reqHeaders.Set("If-None-Match", c.ifNoneMatch_)
 	}
@@ -7342,7 +7306,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	if c.ifNoneMatch_ != "" {
 		reqHeaders.Set("If-None-Match", c.ifNoneMatch_)
 	}
@@ -7496,7 +7459,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	if c.ifNoneMatch_ != "" {
 		reqHeaders.Set("If-None-Match", c.ifNoneMatch_)
 	}
@@ -7674,7 +7636,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	if c.ifNoneMatch_ != "" {
 		reqHeaders.Set("If-None-Match", c.ifNoneMatch_)
 	}
diff --git a/adsense/v1.4/adsense-gen.go b/adsense/v1.4/adsense-gen.go
index 30b49b6..e691969 100644
--- a/adsense/v1.4/adsense-gen.go
+++ b/adsense/v1.4/adsense-gen.go
@@ -73,10 +73,9 @@
 }
 
 type Service struct {
-	client                    *http.Client
-	BasePath                  string // API endpoint base URL
-	UserAgent                 string // optional additional User-Agent fragment
-	GoogleClientHeaderElement string // client header fragment, for Google use only
+	client    *http.Client
+	BasePath  string // API endpoint base URL
+	UserAgent string // optional additional User-Agent fragment
 
 	Accounts *AccountsService
 
@@ -106,10 +105,6 @@
 	return googleapi.UserAgent + " " + s.UserAgent
 }
 
-func (s *Service) clientHeader() string {
-	return gensupport.GoogleClientHeader("20170210", s.GoogleClientHeaderElement)
-}
-
 func NewAccountsService(s *Service) *AccountsService {
 	rs := &AccountsService{s: s}
 	rs.Adclients = NewAccountsAdclientsService(s)
@@ -1763,7 +1758,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	if c.ifNoneMatch_ != "" {
 		reqHeaders.Set("If-None-Match", c.ifNoneMatch_)
 	}
@@ -1921,7 +1915,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	if c.ifNoneMatch_ != "" {
 		reqHeaders.Set("If-None-Match", c.ifNoneMatch_)
 	}
@@ -2098,7 +2091,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	if c.ifNoneMatch_ != "" {
 		reqHeaders.Set("If-None-Match", c.ifNoneMatch_)
 	}
@@ -2276,7 +2268,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	if c.ifNoneMatch_ != "" {
 		reqHeaders.Set("If-None-Match", c.ifNoneMatch_)
 	}
@@ -2435,7 +2426,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	if c.ifNoneMatch_ != "" {
 		reqHeaders.Set("If-None-Match", c.ifNoneMatch_)
 	}
@@ -2616,7 +2606,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	if c.ifNoneMatch_ != "" {
 		reqHeaders.Set("If-None-Match", c.ifNoneMatch_)
 	}
@@ -2824,7 +2813,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	if c.ifNoneMatch_ != "" {
 		reqHeaders.Set("If-None-Match", c.ifNoneMatch_)
 	}
@@ -3005,7 +2993,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	var body io.Reader = nil
 	c.urlParams_.Set("alt", alt)
 	urls := googleapi.ResolveRelative(c.s.BasePath, "accounts/{accountId}/alerts/{alertId}")
@@ -3129,7 +3116,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	if c.ifNoneMatch_ != "" {
 		reqHeaders.Set("If-None-Match", c.ifNoneMatch_)
 	}
@@ -3278,7 +3264,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	if c.ifNoneMatch_ != "" {
 		reqHeaders.Set("If-None-Match", c.ifNoneMatch_)
 	}
@@ -3453,7 +3438,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	if c.ifNoneMatch_ != "" {
 		reqHeaders.Set("If-None-Match", c.ifNoneMatch_)
 	}
@@ -3661,7 +3645,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	if c.ifNoneMatch_ != "" {
 		reqHeaders.Set("If-None-Match", c.ifNoneMatch_)
 	}
@@ -3855,7 +3838,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	if c.ifNoneMatch_ != "" {
 		reqHeaders.Set("If-None-Match", c.ifNoneMatch_)
 	}
@@ -4067,7 +4049,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	if c.ifNoneMatch_ != "" {
 		reqHeaders.Set("If-None-Match", c.ifNoneMatch_)
 	}
@@ -4325,7 +4306,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	if c.ifNoneMatch_ != "" {
 		reqHeaders.Set("If-None-Match", c.ifNoneMatch_)
 	}
@@ -4510,7 +4490,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	if c.ifNoneMatch_ != "" {
 		reqHeaders.Set("If-None-Match", c.ifNoneMatch_)
 	}
@@ -4685,7 +4664,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	if c.ifNoneMatch_ != "" {
 		reqHeaders.Set("If-None-Match", c.ifNoneMatch_)
 	}
@@ -4849,7 +4827,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	if c.ifNoneMatch_ != "" {
 		reqHeaders.Set("If-None-Match", c.ifNoneMatch_)
 	}
@@ -5041,7 +5018,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	if c.ifNoneMatch_ != "" {
 		reqHeaders.Set("If-None-Match", c.ifNoneMatch_)
 	}
@@ -5236,7 +5212,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	if c.ifNoneMatch_ != "" {
 		reqHeaders.Set("If-None-Match", c.ifNoneMatch_)
 	}
@@ -5399,7 +5374,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	if c.ifNoneMatch_ != "" {
 		reqHeaders.Set("If-None-Match", c.ifNoneMatch_)
 	}
@@ -5548,7 +5522,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	if c.ifNoneMatch_ != "" {
 		reqHeaders.Set("If-None-Match", c.ifNoneMatch_)
 	}
@@ -5719,7 +5692,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	if c.ifNoneMatch_ != "" {
 		reqHeaders.Set("If-None-Match", c.ifNoneMatch_)
 	}
@@ -5917,7 +5889,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	if c.ifNoneMatch_ != "" {
 		reqHeaders.Set("If-None-Match", c.ifNoneMatch_)
 	}
@@ -6088,7 +6059,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	var body io.Reader = nil
 	c.urlParams_.Set("alt", alt)
 	urls := googleapi.ResolveRelative(c.s.BasePath, "alerts/{alertId}")
@@ -6202,7 +6172,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	if c.ifNoneMatch_ != "" {
 		reqHeaders.Set("If-None-Match", c.ifNoneMatch_)
 	}
@@ -6336,7 +6305,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	if c.ifNoneMatch_ != "" {
 		reqHeaders.Set("If-None-Match", c.ifNoneMatch_)
 	}
@@ -6501,7 +6469,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	if c.ifNoneMatch_ != "" {
 		reqHeaders.Set("If-None-Match", c.ifNoneMatch_)
 	}
@@ -6699,7 +6666,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	if c.ifNoneMatch_ != "" {
 		reqHeaders.Set("If-None-Match", c.ifNoneMatch_)
 	}
@@ -6884,7 +6850,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	if c.ifNoneMatch_ != "" {
 		reqHeaders.Set("If-None-Match", c.ifNoneMatch_)
 	}
@@ -7008,7 +6973,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	if c.ifNoneMatch_ != "" {
 		reqHeaders.Set("If-None-Match", c.ifNoneMatch_)
 	}
@@ -7131,7 +7095,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	if c.ifNoneMatch_ != "" {
 		reqHeaders.Set("If-None-Match", c.ifNoneMatch_)
 	}
@@ -7334,7 +7297,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	if c.ifNoneMatch_ != "" {
 		reqHeaders.Set("If-None-Match", c.ifNoneMatch_)
 	}
@@ -7586,7 +7548,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	if c.ifNoneMatch_ != "" {
 		reqHeaders.Set("If-None-Match", c.ifNoneMatch_)
 	}
@@ -7761,7 +7722,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	if c.ifNoneMatch_ != "" {
 		reqHeaders.Set("If-None-Match", c.ifNoneMatch_)
 	}
@@ -7922,7 +7882,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	if c.ifNoneMatch_ != "" {
 		reqHeaders.Set("If-None-Match", c.ifNoneMatch_)
 	}
@@ -8076,7 +8035,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	if c.ifNoneMatch_ != "" {
 		reqHeaders.Set("If-None-Match", c.ifNoneMatch_)
 	}
@@ -8254,7 +8212,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	if c.ifNoneMatch_ != "" {
 		reqHeaders.Set("If-None-Match", c.ifNoneMatch_)
 	}
diff --git a/adsensehost/v4.1/adsensehost-gen.go b/adsensehost/v4.1/adsensehost-gen.go
index 94c21ee..647b506 100644
--- a/adsensehost/v4.1/adsensehost-gen.go
+++ b/adsensehost/v4.1/adsensehost-gen.go
@@ -66,10 +66,9 @@
 }
 
 type Service struct {
-	client                    *http.Client
-	BasePath                  string // API endpoint base URL
-	UserAgent                 string // optional additional User-Agent fragment
-	GoogleClientHeaderElement string // client header fragment, for Google use only
+	client    *http.Client
+	BasePath  string // API endpoint base URL
+	UserAgent string // optional additional User-Agent fragment
 
 	Accounts *AccountsService
 
@@ -91,10 +90,6 @@
 	return googleapi.UserAgent + " " + s.UserAgent
 }
 
-func (s *Service) clientHeader() string {
-	return gensupport.GoogleClientHeader("20170210", s.GoogleClientHeaderElement)
-}
-
 func NewAccountsService(s *Service) *AccountsService {
 	rs := &AccountsService{s: s}
 	rs.Adclients = NewAccountsAdclientsService(s)
@@ -1104,7 +1099,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	if c.ifNoneMatch_ != "" {
 		reqHeaders.Set("If-None-Match", c.ifNoneMatch_)
 	}
@@ -1242,7 +1236,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	if c.ifNoneMatch_ != "" {
 		reqHeaders.Set("If-None-Match", c.ifNoneMatch_)
 	}
@@ -1381,7 +1374,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	if c.ifNoneMatch_ != "" {
 		reqHeaders.Set("If-None-Match", c.ifNoneMatch_)
 	}
@@ -1543,7 +1535,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	if c.ifNoneMatch_ != "" {
 		reqHeaders.Set("If-None-Match", c.ifNoneMatch_)
 	}
@@ -1709,7 +1700,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	var body io.Reader = nil
 	c.urlParams_.Set("alt", alt)
 	urls := googleapi.ResolveRelative(c.s.BasePath, "accounts/{accountId}/adclients/{adClientId}/adunits/{adUnitId}")
@@ -1864,7 +1854,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	if c.ifNoneMatch_ != "" {
 		reqHeaders.Set("If-None-Match", c.ifNoneMatch_)
 	}
@@ -2030,7 +2019,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	if c.ifNoneMatch_ != "" {
 		reqHeaders.Set("If-None-Match", c.ifNoneMatch_)
 	}
@@ -2184,7 +2172,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	var body io.Reader = nil
 	body, err := googleapi.WithoutDataWrapper.JSONReader(c.adunit)
 	if err != nil {
@@ -2360,7 +2347,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	if c.ifNoneMatch_ != "" {
 		reqHeaders.Set("If-None-Match", c.ifNoneMatch_)
 	}
@@ -2540,7 +2526,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	var body io.Reader = nil
 	body, err := googleapi.WithoutDataWrapper.JSONReader(c.adunit)
 	if err != nil {
@@ -2692,7 +2677,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	var body io.Reader = nil
 	body, err := googleapi.WithoutDataWrapper.JSONReader(c.adunit)
 	if err != nil {
@@ -2899,7 +2883,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	if c.ifNoneMatch_ != "" {
 		reqHeaders.Set("If-None-Match", c.ifNoneMatch_)
 	}
@@ -3104,7 +3087,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	if c.ifNoneMatch_ != "" {
 		reqHeaders.Set("If-None-Match", c.ifNoneMatch_)
 	}
@@ -3256,7 +3238,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	if c.ifNoneMatch_ != "" {
 		reqHeaders.Set("If-None-Match", c.ifNoneMatch_)
 	}
@@ -3431,7 +3412,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	if c.ifNoneMatch_ != "" {
 		reqHeaders.Set("If-None-Match", c.ifNoneMatch_)
 	}
@@ -3598,7 +3578,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	if c.ifNoneMatch_ != "" {
 		reqHeaders.Set("If-None-Match", c.ifNoneMatch_)
 	}
@@ -3725,7 +3704,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	var body io.Reader = nil
 	c.urlParams_.Set("alt", alt)
 	urls := googleapi.ResolveRelative(c.s.BasePath, "adclients/{adClientId}/customchannels/{customChannelId}")
@@ -3870,7 +3848,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	if c.ifNoneMatch_ != "" {
 		reqHeaders.Set("If-None-Match", c.ifNoneMatch_)
 	}
@@ -4007,7 +3984,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	var body io.Reader = nil
 	body, err := googleapi.WithoutDataWrapper.JSONReader(c.customchannel)
 	if err != nil {
@@ -4167,7 +4143,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	if c.ifNoneMatch_ != "" {
 		reqHeaders.Set("If-None-Match", c.ifNoneMatch_)
 	}
@@ -4332,7 +4307,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	var body io.Reader = nil
 	body, err := googleapi.WithoutDataWrapper.JSONReader(c.customchannel)
 	if err != nil {
@@ -4473,7 +4447,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	var body io.Reader = nil
 	body, err := googleapi.WithoutDataWrapper.JSONReader(c.customchannel)
 	if err != nil {
@@ -4670,7 +4643,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	if c.ifNoneMatch_ != "" {
 		reqHeaders.Set("If-None-Match", c.ifNoneMatch_)
 	}
@@ -4855,7 +4827,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	var body io.Reader = nil
 	c.urlParams_.Set("alt", alt)
 	urls := googleapi.ResolveRelative(c.s.BasePath, "adclients/{adClientId}/urlchannels/{urlChannelId}")
@@ -4989,7 +4960,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	var body io.Reader = nil
 	body, err := googleapi.WithoutDataWrapper.JSONReader(c.urlchannel)
 	if err != nil {
@@ -5148,7 +5118,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	if c.ifNoneMatch_ != "" {
 		reqHeaders.Set("If-None-Match", c.ifNoneMatch_)
 	}
diff --git a/analytics/v2.4/analytics-gen.go b/analytics/v2.4/analytics-gen.go
index 3c870a7..00d1d85 100644
--- a/analytics/v2.4/analytics-gen.go
+++ b/analytics/v2.4/analytics-gen.go
@@ -65,10 +65,9 @@
 }
 
 type Service struct {
-	client                    *http.Client
-	BasePath                  string // API endpoint base URL
-	UserAgent                 string // optional additional User-Agent fragment
-	GoogleClientHeaderElement string // client header fragment, for Google use only
+	client    *http.Client
+	BasePath  string // API endpoint base URL
+	UserAgent string // optional additional User-Agent fragment
 
 	Data *DataService
 
@@ -82,10 +81,6 @@
 	return googleapi.UserAgent + " " + s.UserAgent
 }
 
-func (s *Service) clientHeader() string {
-	return gensupport.GoogleClientHeader("20170210", s.GoogleClientHeaderElement)
-}
-
 func NewDataService(s *Service) *DataService {
 	rs := &DataService{s: s}
 	return rs
@@ -270,7 +265,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	if c.ifNoneMatch_ != "" {
 		reqHeaders.Set("If-None-Match", c.ifNoneMatch_)
 	}
@@ -452,7 +446,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	if c.ifNoneMatch_ != "" {
 		reqHeaders.Set("If-None-Match", c.ifNoneMatch_)
 	}
@@ -583,7 +576,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	if c.ifNoneMatch_ != "" {
 		reqHeaders.Set("If-None-Match", c.ifNoneMatch_)
 	}
@@ -740,7 +732,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	if c.ifNoneMatch_ != "" {
 		reqHeaders.Set("If-None-Match", c.ifNoneMatch_)
 	}
@@ -885,7 +876,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	if c.ifNoneMatch_ != "" {
 		reqHeaders.Set("If-None-Match", c.ifNoneMatch_)
 	}
@@ -1012,7 +1002,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	if c.ifNoneMatch_ != "" {
 		reqHeaders.Set("If-None-Match", c.ifNoneMatch_)
 	}
diff --git a/analytics/v3/analytics-api.json b/analytics/v3/analytics-api.json
index fa2757e..8ea920a 100644
--- a/analytics/v3/analytics-api.json
+++ b/analytics/v3/analytics-api.json
@@ -1,11 +1,11 @@
 {
  "kind": "discovery#restDescription",
- "etag": "\"C5oy1hgQsABtYOYIOXWcR3BgYqU/CEwIV9fdNgUw9Oy31M8HLJeTPyQ\"",
+ "etag": "\"tbys6C40o18GZwyMen5GMkdK-3s/kNCxeHzf8zHSdahaoD4fNF__mRA\"",
  "discoveryVersion": "v1",
  "id": "analytics:v3",
  "name": "analytics",
  "version": "v3",
- "revision": "20161004",
+ "revision": "20170321",
  "title": "Google Analytics API",
  "description": "Views and manages your Google Analytics data.",
  "ownerDomain": "google.com",
@@ -5944,6 +5944,40 @@
     },
     "remarketingAudience": {
      "methods": {
+      "delete": {
+       "id": "analytics.management.remarketingAudience.delete",
+       "path": "management/accounts/{accountId}/webproperties/{webPropertyId}/remarketingAudiences/{remarketingAudienceId}",
+       "httpMethod": "DELETE",
+       "description": "Delete a remarketing audience.",
+       "parameters": {
+        "accountId": {
+         "type": "string",
+         "description": "Account ID to which the remarketing audience belongs.",
+         "required": true,
+         "location": "path"
+        },
+        "remarketingAudienceId": {
+         "type": "string",
+         "description": "The ID of the remarketing audience to delete.",
+         "required": true,
+         "location": "path"
+        },
+        "webPropertyId": {
+         "type": "string",
+         "description": "Web property ID to which the remarketing audience belongs.",
+         "required": true,
+         "location": "path"
+        }
+       },
+       "parameterOrder": [
+        "accountId",
+        "webPropertyId",
+        "remarketingAudienceId"
+       ],
+       "scopes": [
+        "https://www.googleapis.com/auth/analytics.edit"
+       ]
+      },
       "get": {
        "id": "analytics.management.remarketingAudience.get",
        "path": "management/accounts/{accountId}/webproperties/{webPropertyId}/remarketingAudiences/{remarketingAudienceId}",
diff --git a/analytics/v3/analytics-gen.go b/analytics/v3/analytics-gen.go
index 4c83cbb..fad26c5 100644
--- a/analytics/v3/analytics-gen.go
+++ b/analytics/v3/analytics-gen.go
@@ -80,10 +80,9 @@
 }
 
 type Service struct {
-	client                    *http.Client
-	BasePath                  string // API endpoint base URL
-	UserAgent                 string // optional additional User-Agent fragment
-	GoogleClientHeaderElement string // client header fragment, for Google use only
+	client    *http.Client
+	BasePath  string // API endpoint base URL
+	UserAgent string // optional additional User-Agent fragment
 
 	Data *DataService
 
@@ -101,10 +100,6 @@
 	return googleapi.UserAgent + " " + s.UserAgent
 }
 
-func (s *Service) clientHeader() string {
-	return gensupport.GoogleClientHeader("20170210", s.GoogleClientHeaderElement)
-}
-
 func NewDataService(s *Service) *DataService {
 	rs := &DataService{s: s}
 	rs.Ga = NewDataGaService(s)
@@ -5673,7 +5668,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	if c.ifNoneMatch_ != "" {
 		reqHeaders.Set("If-None-Match", c.ifNoneMatch_)
 	}
@@ -5958,7 +5952,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	if c.ifNoneMatch_ != "" {
 		reqHeaders.Set("If-None-Match", c.ifNoneMatch_)
 	}
@@ -6195,7 +6188,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	if c.ifNoneMatch_ != "" {
 		reqHeaders.Set("If-None-Match", c.ifNoneMatch_)
 	}
@@ -6379,7 +6371,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	if c.ifNoneMatch_ != "" {
 		reqHeaders.Set("If-None-Match", c.ifNoneMatch_)
 	}
@@ -6510,7 +6501,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	var body io.Reader = nil
 	c.urlParams_.Set("alt", alt)
 	urls := googleapi.ResolveRelative(c.s.BasePath, "management/accounts/{accountId}/entityUserLinks/{linkId}")
@@ -6616,7 +6606,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	var body io.Reader = nil
 	body, err := googleapi.WithoutDataWrapper.JSONReader(c.entityuserlink)
 	if err != nil {
@@ -6774,7 +6763,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	if c.ifNoneMatch_ != "" {
 		reqHeaders.Set("If-None-Match", c.ifNoneMatch_)
 	}
@@ -6920,7 +6908,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	var body io.Reader = nil
 	body, err := googleapi.WithoutDataWrapper.JSONReader(c.entityuserlink)
 	if err != nil {
@@ -7084,7 +7071,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	if c.ifNoneMatch_ != "" {
 		reqHeaders.Set("If-None-Match", c.ifNoneMatch_)
 	}
@@ -7242,7 +7228,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	if c.ifNoneMatch_ != "" {
 		reqHeaders.Set("If-None-Match", c.ifNoneMatch_)
 	}
@@ -7410,7 +7395,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	if c.ifNoneMatch_ != "" {
 		reqHeaders.Set("If-None-Match", c.ifNoneMatch_)
 	}
@@ -7558,7 +7542,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	var body io.Reader = nil
 	body, err := googleapi.WithoutDataWrapper.JSONReader(c.customdimension)
 	if err != nil {
@@ -7726,7 +7709,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	if c.ifNoneMatch_ != "" {
 		reqHeaders.Set("If-None-Match", c.ifNoneMatch_)
 	}
@@ -7891,7 +7873,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	var body io.Reader = nil
 	body, err := googleapi.WithoutDataWrapper.JSONReader(c.customdimension)
 	if err != nil {
@@ -8060,7 +8041,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	var body io.Reader = nil
 	body, err := googleapi.WithoutDataWrapper.JSONReader(c.customdimension)
 	if err != nil {
@@ -8229,7 +8209,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	if c.ifNoneMatch_ != "" {
 		reqHeaders.Set("If-None-Match", c.ifNoneMatch_)
 	}
@@ -8377,7 +8356,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	var body io.Reader = nil
 	body, err := googleapi.WithoutDataWrapper.JSONReader(c.custommetric)
 	if err != nil {
@@ -8545,7 +8523,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	if c.ifNoneMatch_ != "" {
 		reqHeaders.Set("If-None-Match", c.ifNoneMatch_)
 	}
@@ -8710,7 +8687,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	var body io.Reader = nil
 	body, err := googleapi.WithoutDataWrapper.JSONReader(c.custommetric)
 	if err != nil {
@@ -8879,7 +8855,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	var body io.Reader = nil
 	body, err := googleapi.WithoutDataWrapper.JSONReader(c.custommetric)
 	if err != nil {
@@ -9039,7 +9014,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	var body io.Reader = nil
 	c.urlParams_.Set("alt", alt)
 	urls := googleapi.ResolveRelative(c.s.BasePath, "management/accounts/{accountId}/webproperties/{webPropertyId}/profiles/{profileId}/experiments/{experimentId}")
@@ -9177,7 +9151,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	if c.ifNoneMatch_ != "" {
 		reqHeaders.Set("If-None-Match", c.ifNoneMatch_)
 	}
@@ -9336,7 +9309,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	var body io.Reader = nil
 	body, err := googleapi.WithoutDataWrapper.JSONReader(c.experiment)
 	if err != nil {
@@ -9515,7 +9487,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	if c.ifNoneMatch_ != "" {
 		reqHeaders.Set("If-None-Match", c.ifNoneMatch_)
 	}
@@ -9685,7 +9656,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	var body io.Reader = nil
 	body, err := googleapi.WithoutDataWrapper.JSONReader(c.experiment)
 	if err != nil {
@@ -9850,7 +9820,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	var body io.Reader = nil
 	body, err := googleapi.WithoutDataWrapper.JSONReader(c.experiment)
 	if err != nil {
@@ -10009,7 +9978,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	var body io.Reader = nil
 	c.urlParams_.Set("alt", alt)
 	urls := googleapi.ResolveRelative(c.s.BasePath, "management/accounts/{accountId}/filters/{filterId}")
@@ -10154,7 +10122,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	if c.ifNoneMatch_ != "" {
 		reqHeaders.Set("If-None-Match", c.ifNoneMatch_)
 	}
@@ -10292,7 +10259,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	var body io.Reader = nil
 	body, err := googleapi.WithoutDataWrapper.JSONReader(c.filter)
 	if err != nil {
@@ -10450,7 +10416,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	if c.ifNoneMatch_ != "" {
 		reqHeaders.Set("If-None-Match", c.ifNoneMatch_)
 	}
@@ -10597,7 +10562,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	var body io.Reader = nil
 	body, err := googleapi.WithoutDataWrapper.JSONReader(c.filter)
 	if err != nil {
@@ -10741,7 +10705,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	var body io.Reader = nil
 	body, err := googleapi.WithoutDataWrapper.JSONReader(c.filter)
 	if err != nil {
@@ -10898,7 +10861,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	if c.ifNoneMatch_ != "" {
 		reqHeaders.Set("If-None-Match", c.ifNoneMatch_)
 	}
@@ -11056,7 +11018,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	var body io.Reader = nil
 	body, err := googleapi.WithoutDataWrapper.JSONReader(c.goal)
 	if err != nil {
@@ -11234,7 +11195,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	if c.ifNoneMatch_ != "" {
 		reqHeaders.Set("If-None-Match", c.ifNoneMatch_)
 	}
@@ -11401,7 +11361,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	var body io.Reader = nil
 	body, err := googleapi.WithoutDataWrapper.JSONReader(c.goal)
 	if err != nil {
@@ -11565,7 +11524,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	var body io.Reader = nil
 	body, err := googleapi.WithoutDataWrapper.JSONReader(c.goal)
 	if err != nil {
@@ -11727,7 +11685,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	var body io.Reader = nil
 	c.urlParams_.Set("alt", alt)
 	urls := googleapi.ResolveRelative(c.s.BasePath, "management/accounts/{accountId}/webproperties/{webPropertyId}/profiles/{profileId}/profileFilterLinks/{linkId}")
@@ -11868,7 +11825,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	if c.ifNoneMatch_ != "" {
 		reqHeaders.Set("If-None-Match", c.ifNoneMatch_)
 	}
@@ -12030,7 +11986,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	var body io.Reader = nil
 	body, err := googleapi.WithoutDataWrapper.JSONReader(c.profilefilterlink)
 	if err != nil {
@@ -12211,7 +12166,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	if c.ifNoneMatch_ != "" {
 		reqHeaders.Set("If-None-Match", c.ifNoneMatch_)
 	}
@@ -12378,7 +12332,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	var body io.Reader = nil
 	body, err := googleapi.WithoutDataWrapper.JSONReader(c.profilefilterlink)
 	if err != nil {
@@ -12546,7 +12499,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	var body io.Reader = nil
 	body, err := googleapi.WithoutDataWrapper.JSONReader(c.profilefilterlink)
 	if err != nil {
@@ -12712,7 +12664,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	var body io.Reader = nil
 	c.urlParams_.Set("alt", alt)
 	urls := googleapi.ResolveRelative(c.s.BasePath, "management/accounts/{accountId}/webproperties/{webPropertyId}/profiles/{profileId}/entityUserLinks/{linkId}")
@@ -12838,7 +12789,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	var body io.Reader = nil
 	body, err := googleapi.WithoutDataWrapper.JSONReader(c.entityuserlink)
 	if err != nil {
@@ -13016,7 +12966,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	if c.ifNoneMatch_ != "" {
 		reqHeaders.Set("If-None-Match", c.ifNoneMatch_)
 	}
@@ -13182,7 +13131,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	var body io.Reader = nil
 	body, err := googleapi.WithoutDataWrapper.JSONReader(c.entityuserlink)
 	if err != nil {
@@ -13342,7 +13290,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	var body io.Reader = nil
 	c.urlParams_.Set("alt", alt)
 	urls := googleapi.ResolveRelative(c.s.BasePath, "management/accounts/{accountId}/webproperties/{webPropertyId}/profiles/{profileId}")
@@ -13469,7 +13416,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	if c.ifNoneMatch_ != "" {
 		reqHeaders.Set("If-None-Match", c.ifNoneMatch_)
 	}
@@ -13620,7 +13566,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	var body io.Reader = nil
 	body, err := googleapi.WithoutDataWrapper.JSONReader(c.profile)
 	if err != nil {
@@ -13788,7 +13733,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	if c.ifNoneMatch_ != "" {
 		reqHeaders.Set("If-None-Match", c.ifNoneMatch_)
 	}
@@ -13945,7 +13889,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	var body io.Reader = nil
 	body, err := googleapi.WithoutDataWrapper.JSONReader(c.profile)
 	if err != nil {
@@ -14099,7 +14042,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	var body io.Reader = nil
 	body, err := googleapi.WithoutDataWrapper.JSONReader(c.profile)
 	if err != nil {
@@ -14199,6 +14141,121 @@
 
 }
 
+// method id "analytics.management.remarketingAudience.delete":
+
+type ManagementRemarketingAudienceDeleteCall struct {
+	s                     *Service
+	accountId             string
+	webPropertyId         string
+	remarketingAudienceId string
+	urlParams_            gensupport.URLParams
+	ctx_                  context.Context
+	header_               http.Header
+}
+
+// Delete: Delete a remarketing audience.
+func (r *ManagementRemarketingAudienceService) Delete(accountId string, webPropertyId string, remarketingAudienceId string) *ManagementRemarketingAudienceDeleteCall {
+	c := &ManagementRemarketingAudienceDeleteCall{s: r.s, urlParams_: make(gensupport.URLParams)}
+	c.accountId = accountId
+	c.webPropertyId = webPropertyId
+	c.remarketingAudienceId = remarketingAudienceId
+	return c
+}
+
+// Fields allows partial responses to be retrieved. See
+// https://developers.google.com/gdata/docs/2.0/basics#PartialResponse
+// for more information.
+func (c *ManagementRemarketingAudienceDeleteCall) Fields(s ...googleapi.Field) *ManagementRemarketingAudienceDeleteCall {
+	c.urlParams_.Set("fields", googleapi.CombineFields(s))
+	return c
+}
+
+// Context sets the context to be used in this call's Do method. Any
+// pending HTTP request will be aborted if the provided context is
+// canceled.
+func (c *ManagementRemarketingAudienceDeleteCall) Context(ctx context.Context) *ManagementRemarketingAudienceDeleteCall {
+	c.ctx_ = ctx
+	return c
+}
+
+// Header returns an http.Header that can be modified by the caller to
+// add HTTP headers to the request.
+func (c *ManagementRemarketingAudienceDeleteCall) Header() http.Header {
+	if c.header_ == nil {
+		c.header_ = make(http.Header)
+	}
+	return c.header_
+}
+
+func (c *ManagementRemarketingAudienceDeleteCall) doRequest(alt string) (*http.Response, error) {
+	reqHeaders := make(http.Header)
+	for k, v := range c.header_ {
+		reqHeaders[k] = v
+	}
+	reqHeaders.Set("User-Agent", c.s.userAgent())
+	var body io.Reader = nil
+	c.urlParams_.Set("alt", alt)
+	urls := googleapi.ResolveRelative(c.s.BasePath, "management/accounts/{accountId}/webproperties/{webPropertyId}/remarketingAudiences/{remarketingAudienceId}")
+	urls += "?" + c.urlParams_.Encode()
+	req, _ := http.NewRequest("DELETE", urls, body)
+	req.Header = reqHeaders
+	googleapi.Expand(req.URL, map[string]string{
+		"accountId":             c.accountId,
+		"webPropertyId":         c.webPropertyId,
+		"remarketingAudienceId": c.remarketingAudienceId,
+	})
+	return gensupport.SendRequest(c.ctx_, c.s.client, req)
+}
+
+// Do executes the "analytics.management.remarketingAudience.delete" call.
+func (c *ManagementRemarketingAudienceDeleteCall) Do(opts ...googleapi.CallOption) error {
+	gensupport.SetOptions(c.urlParams_, opts...)
+	res, err := c.doRequest("json")
+	if err != nil {
+		return err
+	}
+	defer googleapi.CloseBody(res)
+	if err := googleapi.CheckResponse(res); err != nil {
+		return err
+	}
+	return nil
+	// {
+	//   "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"
+	//   ]
+	// }
+
+}
+
 // method id "analytics.management.remarketingAudience.get":
 
 type ManagementRemarketingAudienceGetCall struct {
@@ -14262,7 +14319,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	if c.ifNoneMatch_ != "" {
 		reqHeaders.Set("If-None-Match", c.ifNoneMatch_)
 	}
@@ -14410,7 +14466,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	var body io.Reader = nil
 	body, err := googleapi.WithoutDataWrapper.JSONReader(c.remarketingaudience)
 	if err != nil {
@@ -14584,7 +14639,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	if c.ifNoneMatch_ != "" {
 		reqHeaders.Set("If-None-Match", c.ifNoneMatch_)
 	}
@@ -14745,7 +14799,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	var body io.Reader = nil
 	body, err := googleapi.WithoutDataWrapper.JSONReader(c.remarketingaudience)
 	if err != nil {
@@ -14899,7 +14952,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	var body io.Reader = nil
 	body, err := googleapi.WithoutDataWrapper.JSONReader(c.remarketingaudience)
 	if err != nil {
@@ -15071,7 +15123,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	if c.ifNoneMatch_ != "" {
 		reqHeaders.Set("If-None-Match", c.ifNoneMatch_)
 	}
@@ -15207,7 +15258,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	var body io.Reader = nil
 	c.urlParams_.Set("alt", alt)
 	urls := googleapi.ResolveRelative(c.s.BasePath, "management/accounts/{accountId}/webproperties/{webPropertyId}/profiles/{profileId}/unsampledReports/{unsampledReportId}")
@@ -15344,7 +15394,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	if c.ifNoneMatch_ != "" {
 		reqHeaders.Set("If-None-Match", c.ifNoneMatch_)
 	}
@@ -15503,7 +15552,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	var body io.Reader = nil
 	body, err := googleapi.WithoutDataWrapper.JSONReader(c.unsampledreport)
 	if err != nil {
@@ -15682,7 +15730,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	if c.ifNoneMatch_ != "" {
 		reqHeaders.Set("If-None-Match", c.ifNoneMatch_)
 	}
@@ -15846,7 +15893,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	var body io.Reader = nil
 	body, err := googleapi.WithoutDataWrapper.JSONReader(c.analyticsdataimportdeleteuploaddatarequest)
 	if err != nil {
@@ -15987,7 +16033,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	if c.ifNoneMatch_ != "" {
 		reqHeaders.Set("If-None-Match", c.ifNoneMatch_)
 	}
@@ -16174,7 +16219,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	if c.ifNoneMatch_ != "" {
 		reqHeaders.Set("If-None-Match", c.ifNoneMatch_)
 	}
@@ -16393,7 +16437,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	var body io.Reader = nil
 	c.urlParams_.Set("alt", alt)
 	urls := googleapi.ResolveRelative(c.s.BasePath, "management/accounts/{accountId}/webproperties/{webPropertyId}/customDataSources/{customDataSourceId}/uploads")
@@ -16605,7 +16648,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	var body io.Reader = nil
 	c.urlParams_.Set("alt", alt)
 	urls := googleapi.ResolveRelative(c.s.BasePath, "management/accounts/{accountId}/webproperties/{webPropertyId}/entityAdWordsLinks/{webPropertyAdWordsLinkId}")
@@ -16733,7 +16775,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	if c.ifNoneMatch_ != "" {
 		reqHeaders.Set("If-None-Match", c.ifNoneMatch_)
 	}
@@ -16881,7 +16922,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	var body io.Reader = nil
 	body, err := googleapi.WithoutDataWrapper.JSONReader(c.entityadwordslink)
 	if err != nil {
@@ -17049,7 +17089,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	if c.ifNoneMatch_ != "" {
 		reqHeaders.Set("If-None-Match", c.ifNoneMatch_)
 	}
@@ -17206,7 +17245,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	var body io.Reader = nil
 	body, err := googleapi.WithoutDataWrapper.JSONReader(c.entityadwordslink)
 	if err != nil {
@@ -17360,7 +17398,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	var body io.Reader = nil
 	body, err := googleapi.WithoutDataWrapper.JSONReader(c.entityadwordslink)
 	if err != nil {
@@ -17521,7 +17558,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	if c.ifNoneMatch_ != "" {
 		reqHeaders.Set("If-None-Match", c.ifNoneMatch_)
 	}
@@ -17663,7 +17699,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	var body io.Reader = nil
 	body, err := googleapi.WithoutDataWrapper.JSONReader(c.webproperty)
 	if err != nil {
@@ -17821,7 +17856,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	if c.ifNoneMatch_ != "" {
 		reqHeaders.Set("If-None-Match", c.ifNoneMatch_)
 	}
@@ -17968,7 +18002,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	var body io.Reader = nil
 	body, err := googleapi.WithoutDataWrapper.JSONReader(c.webproperty)
 	if err != nil {
@@ -18112,7 +18145,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	var body io.Reader = nil
 	body, err := googleapi.WithoutDataWrapper.JSONReader(c.webproperty)
 	if err != nil {
@@ -18256,7 +18288,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	var body io.Reader = nil
 	c.urlParams_.Set("alt", alt)
 	urls := googleapi.ResolveRelative(c.s.BasePath, "management/accounts/{accountId}/webproperties/{webPropertyId}/entityUserLinks/{linkId}")
@@ -18372,7 +18403,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	var body io.Reader = nil
 	body, err := googleapi.WithoutDataWrapper.JSONReader(c.entityuserlink)
 	if err != nil {
@@ -18540,7 +18570,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	if c.ifNoneMatch_ != "" {
 		reqHeaders.Set("If-None-Match", c.ifNoneMatch_)
 	}
@@ -18696,7 +18725,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	var body io.Reader = nil
 	body, err := googleapi.WithoutDataWrapper.JSONReader(c.entityuserlink)
 	if err != nil {
@@ -18855,7 +18883,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	if c.ifNoneMatch_ != "" {
 		reqHeaders.Set("If-None-Match", c.ifNoneMatch_)
 	}
@@ -18985,7 +19012,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	var body io.Reader = nil
 	body, err := googleapi.WithoutDataWrapper.JSONReader(c.accountticket)
 	if err != nil {
diff --git a/analyticsreporting/v4/analyticsreporting-api.json b/analyticsreporting/v4/analyticsreporting-api.json
index a53770e..19e6c0a 100644
--- a/analyticsreporting/v4/analyticsreporting-api.json
+++ b/analyticsreporting/v4/analyticsreporting-api.json
@@ -1,13 +1,130 @@
 {
+  "resources": {
+    "reports": {
+      "methods": {
+        "batchGet": {
+          "request": {
+            "$ref": "GetReportsRequest"
+          },
+          "description": "Returns the Analytics data.",
+          "httpMethod": "POST",
+          "parameterOrder": [],
+          "response": {
+            "$ref": "GetReportsResponse"
+          },
+          "parameters": {},
+          "scopes": [
+            "https://www.googleapis.com/auth/analytics",
+            "https://www.googleapis.com/auth/analytics.readonly"
+          ],
+          "flatPath": "v4/reports:batchGet",
+          "id": "analyticsreporting.reports.batchGet",
+          "path": "v4/reports:batchGet"
+        }
+      }
+    }
+  },
+  "parameters": {
+    "pp": {
+      "location": "query",
+      "description": "Pretty-print response.",
+      "type": "boolean",
+      "default": "true"
+    },
+    "oauth_token": {
+      "location": "query",
+      "description": "OAuth 2.0 token for the current user.",
+      "type": "string"
+    },
+    "bearer_token": {
+      "location": "query",
+      "description": "OAuth bearer token.",
+      "type": "string"
+    },
+    "upload_protocol": {
+      "location": "query",
+      "description": "Upload protocol for media (e.g. \"raw\", \"multipart\").",
+      "type": "string"
+    },
+    "prettyPrint": {
+      "description": "Returns response with indentations and line breaks.",
+      "type": "boolean",
+      "default": "true",
+      "location": "query"
+    },
+    "uploadType": {
+      "location": "query",
+      "description": "Legacy upload protocol for media (e.g. \"media\", \"multipart\").",
+      "type": "string"
+    },
+    "fields": {
+      "description": "Selector specifying which fields to include in a partial response.",
+      "type": "string",
+      "location": "query"
+    },
+    "$.xgafv": {
+      "description": "V1 error format.",
+      "type": "string",
+      "enumDescriptions": [
+        "v1 error format",
+        "v2 error format"
+      ],
+      "location": "query",
+      "enum": [
+        "1",
+        "2"
+      ]
+    },
+    "callback": {
+      "description": "JSONP",
+      "type": "string",
+      "location": "query"
+    },
+    "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"
+    },
+    "access_token": {
+      "location": "query",
+      "description": "OAuth access token.",
+      "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"
+    },
+    "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"
+    }
+  },
+  "version": "v4",
+  "baseUrl": "https://analyticsreporting.googleapis.com/",
+  "servicePath": "",
+  "description": "Accesses Analytics report data.",
+  "kind": "discovery#restDescription",
   "basePath": "",
   "id": "analyticsreporting:v4",
-  "documentationLink": "https://developers.google.com/analytics/devguides/reporting/core/v4/",
   "revision": "20170309",
+  "documentationLink": "https://developers.google.com/analytics/devguides/reporting/core/v4/",
   "discoveryVersion": "v1",
   "version_module": "True",
   "schemas": {
     "DateRange": {
-      "id": "DateRange",
       "description": "A contiguous set of days: startDate, startDate + 1 day, ..., endDate.\nThe start and end dates are specified in\n[ISO8601](https://en.wikipedia.org/wiki/ISO_8601) date format `YYYY-MM-DD`.",
       "type": "object",
       "properties": {
@@ -19,78 +136,13 @@
           "description": "The end date for the query in the format `YYYY-MM-DD`.",
           "type": "string"
         }
-      }
-    },
-    "MetricFilter": {
-      "description": "MetricFilter specifies the filter on a metric.",
-      "type": "object",
-      "properties": {
-        "not": {
-          "description": "Logical `NOT` operator. If this boolean is set to true, then the matching\nmetric values will be excluded in the report. The default is false.",
-          "type": "boolean"
-        },
-        "metricName": {
-          "description": "The metric that will be filtered on. A metricFilter must contain a metric\nname. A metric name can be an alias earlier defined as a metric or it can\nalso be a metric expression.",
-          "type": "string"
-        },
-        "comparisonValue": {
-          "description": "The value to compare against.",
-          "type": "string"
-        },
-        "operator": {
-          "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.\nDoesn't take comparisonValue into account."
-          ],
-          "enum": [
-            "OPERATOR_UNSPECIFIED",
-            "EQUAL",
-            "LESS_THAN",
-            "GREATER_THAN",
-            "IS_MISSING"
-          ],
-          "description": "Is the metric `EQUAL`, `LESS_THAN` or `GREATER_THAN` the\ncomparisonValue, the default is `EQUAL`. If the operator is\n`IS_MISSING`, checks if the metric is missing and would ignore the\ncomparisonValue.",
-          "type": "string"
-        }
       },
-      "id": "MetricFilter"
+      "id": "DateRange"
     },
     "ReportRequest": {
       "description": "The main request class which specifies the Reporting API request.",
       "type": "object",
       "properties": {
-        "pageToken": {
-          "description": "A continuation token to get the next page of the results. Adding this to\nthe request will return the rows after the pageToken. The pageToken should\nbe the value returned in the nextPageToken parameter in the response to\nthe GetReports request.",
-          "type": "string"
-        },
-        "dateRanges": {
-          "type": "array",
-          "items": {
-            "$ref": "DateRange"
-          },
-          "description": "Date ranges in the request. The request can have a maximum of 2 date\nranges. The response will contain a set of metric values for each\ncombination of the dimensions for each date range in the request. So, if\nthere are two date ranges, there will be two set of metric values, one for\nthe original date range and one for the second date range.\nThe `reportRequest.dateRanges` field should not be specified for cohorts\nor Lifetime value requests.\nIf a date range is not provided, the default date range is (startDate:\ncurrent date - 7 days, endDate: current date - 1 day). Every\n[ReportRequest](#ReportRequest) within a `batchGet` method must\ncontain the same `dateRanges` definition."
-        },
-        "pivots": {
-          "description": "The pivot definitions. Requests can have a maximum of 2 pivots.",
-          "type": "array",
-          "items": {
-            "$ref": "Pivot"
-          }
-        },
-        "includeEmptyRows": {
-          "description": "If set to false, the response does not include rows if all the retrieved\nmetrics are equal to zero. The default is false which will exclude these\nrows.",
-          "type": "boolean"
-        },
-        "metricFilterClauses": {
-          "description": "The metric filter clauses. They are logically combined with the `AND`\noperator.  Metric filters look at only the first date range and not the\ncomparing date range. Note that filtering on metrics occurs after the\nmetrics are aggregated.",
-          "type": "array",
-          "items": {
-            "$ref": "MetricFilterClause"
-          }
-        },
         "pageSize": {
           "description": "Page size is for paging and specifies the maximum number of returned rows.\nPage size should be \u003e= 0. A query returns the default of 1,000 rows.\nThe Analytics Core Reporting API returns a maximum of 10,000 rows per\nrequest, no matter how many you ask for. It can also return fewer rows\nthan requested, if there aren't as many dimension segments as you expect.\nFor instance, there are fewer than 300 possible values for `ga:country`,\nso when segmenting only by country, you can't get more than 300 rows,\neven if you set `pageSize` to a higher value.",
           "format": "int32",
@@ -104,24 +156,24 @@
           "description": "If set to true, hides the minimum and maximum across all matching rows.\nThe default is false and the value ranges are returned.",
           "type": "boolean"
         },
+        "cohortGroup": {
+          "$ref": "CohortGroup",
+          "description": "Cohort group associated with this request. If there is a cohort group\nin the request the `ga:cohort` dimension must be present.\nEvery [ReportRequest](#ReportRequest) within a `batchGet` method must\ncontain the same `cohortGroup` definition."
+        },
         "filtersExpression": {
           "description": "Dimension or metric filters that restrict the data returned for your\nrequest. To use the `filtersExpression`, supply a dimension or metric on\nwhich to filter, followed by the filter expression. For example, the\nfollowing expression selects `ga:browser` dimension which starts with\nFirefox; `ga:browser=~^Firefox`. For more information on dimensions\nand metric filters, see\n[Filters reference](https://developers.google.com/analytics/devguides/reporting/core/v3/reference#filters).",
           "type": "string"
         },
-        "cohortGroup": {
-          "description": "Cohort group associated with this request. If there is a cohort group\nin the request the `ga:cohort` dimension must be present.\nEvery [ReportRequest](#ReportRequest) within a `batchGet` method must\ncontain the same `cohortGroup` definition.",
-          "$ref": "CohortGroup"
-        },
         "viewId": {
           "description": "The Analytics\n[view ID](https://support.google.com/analytics/answer/1009618)\nfrom which to retrieve data. Every [ReportRequest](#ReportRequest)\nwithin a `batchGet` method must contain the same `viewId`.",
           "type": "string"
         },
         "metrics": {
+          "description": "The metrics requested.\nRequests must specify at least one metric. Requests can have a\ntotal of 10 metrics.",
           "type": "array",
           "items": {
             "$ref": "Metric"
-          },
-          "description": "The metrics requested.\nRequests must specify at least one metric. Requests can have a\ntotal of 10 metrics."
+          }
         },
         "dimensionFilterClauses": {
           "description": "The dimension filter clauses for filtering Dimension Values. They are\nlogically combined with the `AND` operator. Note that filtering occurs\nbefore any dimensions are aggregated, so that the returned metrics\nrepresent the total for only the relevant dimensions.",
@@ -131,11 +183,11 @@
           }
         },
         "orderBys": {
+          "description": "Sort order on output rows. To compare two rows, the elements of the\nfollowing are applied in order until a difference is found.  All date\nranges in the output get the same row order.",
           "type": "array",
           "items": {
             "$ref": "OrderBy"
-          },
-          "description": "Sort order on output rows. To compare two rows, the elements of the\nfollowing are applied in order until a difference is found.  All date\nranges in the output get the same row order."
+          }
         },
         "segments": {
           "description": "Segment the data returned for the request. A segment definition helps look\nat a subset of the segment request. A request can contain up to four\nsegments. Every [ReportRequest](#ReportRequest) within a\n`batchGet` method must contain the same `segments` definition. Requests\nwith segments must have the `ga:segment` dimension.",
@@ -166,12 +218,77 @@
           "items": {
             "$ref": "Dimension"
           }
+        },
+        "dateRanges": {
+          "description": "Date ranges in the request. The request can have a maximum of 2 date\nranges. The response will contain a set of metric values for each\ncombination of the dimensions for each date range in the request. So, if\nthere are two date ranges, there will be two set of metric values, one for\nthe original date range and one for the second date range.\nThe `reportRequest.dateRanges` field should not be specified for cohorts\nor Lifetime value requests.\nIf a date range is not provided, the default date range is (startDate:\ncurrent date - 7 days, endDate: current date - 1 day). Every\n[ReportRequest](#ReportRequest) within a `batchGet` method must\ncontain the same `dateRanges` definition.",
+          "type": "array",
+          "items": {
+            "$ref": "DateRange"
+          }
+        },
+        "pageToken": {
+          "description": "A continuation token to get the next page of the results. Adding this to\nthe request will return the rows after the pageToken. The pageToken should\nbe the value returned in the nextPageToken parameter in the response to\nthe GetReports request.",
+          "type": "string"
+        },
+        "pivots": {
+          "description": "The pivot definitions. Requests can have a maximum of 2 pivots.",
+          "type": "array",
+          "items": {
+            "$ref": "Pivot"
+          }
+        },
+        "includeEmptyRows": {
+          "description": "If set to false, the response does not include rows if all the retrieved\nmetrics are equal to zero. The default is false which will exclude these\nrows.",
+          "type": "boolean"
+        },
+        "metricFilterClauses": {
+          "description": "The metric filter clauses. They are logically combined with the `AND`\noperator.  Metric filters look at only the first date range and not the\ncomparing date range. Note that filtering on metrics occurs after the\nmetrics are aggregated.",
+          "type": "array",
+          "items": {
+            "$ref": "MetricFilterClause"
+          }
         }
       },
       "id": "ReportRequest"
     },
+    "MetricFilter": {
+      "description": "MetricFilter specifies the filter on a metric.",
+      "type": "object",
+      "properties": {
+        "metricName": {
+          "description": "The metric that will be filtered on. A metricFilter must contain a metric\nname. A metric name can be an alias earlier defined as a metric or it can\nalso be a metric expression.",
+          "type": "string"
+        },
+        "comparisonValue": {
+          "description": "The value to compare against.",
+          "type": "string"
+        },
+        "operator": {
+          "description": "Is the metric `EQUAL`, `LESS_THAN` or `GREATER_THAN` the\ncomparisonValue, the default is `EQUAL`. If the operator is\n`IS_MISSING`, checks if the metric is missing and would ignore the\ncomparisonValue.",
+          "type": "string",
+          "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.\nDoesn't take comparisonValue into account."
+          ],
+          "enum": [
+            "OPERATOR_UNSPECIFIED",
+            "EQUAL",
+            "LESS_THAN",
+            "GREATER_THAN",
+            "IS_MISSING"
+          ]
+        },
+        "not": {
+          "description": "Logical `NOT` operator. If this boolean is set to true, then the matching\nmetric values will be excluded in the report. The default is false.",
+          "type": "boolean"
+        }
+      },
+      "id": "MetricFilter"
+    },
     "Dimension": {
-      "id": "Dimension",
       "description": "[Dimensions](https://support.google.com/analytics/answer/1033861)\nare attributes of your data. For example, the dimension `ga:city`\nindicates the city, for example, \"Paris\" or \"New York\", from which\na session originates.",
       "type": "object",
       "properties": {
@@ -187,13 +304,17 @@
           "description": "Name of the dimension to fetch, for example `ga:browser`.",
           "type": "string"
         }
-      }
+      },
+      "id": "Dimension"
     },
     "DynamicSegment": {
-      "id": "DynamicSegment",
       "description": "Dynamic segment definition for defining the segment within the request.\nA segment can select users, sessions or both.",
       "type": "object",
       "properties": {
+        "userSegment": {
+          "$ref": "SegmentDefinition",
+          "description": "User Segment to select users to include in the segment."
+        },
         "sessionSegment": {
           "$ref": "SegmentDefinition",
           "description": "Session Segment to select sessions to include in the segment."
@@ -201,12 +322,9 @@
         "name": {
           "description": "The name of the dynamic segment.",
           "type": "string"
-        },
-        "userSegment": {
-          "$ref": "SegmentDefinition",
-          "description": "User Segment to select users to include in the segment."
         }
-      }
+      },
+      "id": "DynamicSegment"
     },
     "SimpleSegment": {
       "description": "A Simple segment conditions consist of one or more dimension/metric\nconditions that can be combined.",
@@ -223,13 +341,12 @@
       "id": "SimpleSegment"
     },
     "ColumnHeader": {
-      "id": "ColumnHeader",
       "description": "Column headers.",
       "type": "object",
       "properties": {
         "metricHeader": {
-          "description": "Metric headers for the metrics in the response.",
-          "$ref": "MetricHeader"
+          "$ref": "MetricHeader",
+          "description": "Metric headers for the metrics in the response."
         },
         "dimensions": {
           "description": "The dimension names in the response.",
@@ -238,34 +355,33 @@
             "type": "string"
           }
         }
-      }
+      },
+      "id": "ColumnHeader"
     },
     "SegmentFilterClause": {
+      "description": "Filter Clause to be used in a segment definition, can be wither a metric or\na dimension filter.",
+      "type": "object",
       "properties": {
-        "not": {
-          "description": "Matches the complement (`!`) of the filter.",
-          "type": "boolean"
-        },
         "dimensionFilter": {
-          "description": "Dimension Filter for the segment definition.",
-          "$ref": "SegmentDimensionFilter"
+          "$ref": "SegmentDimensionFilter",
+          "description": "Dimension Filter for the segment definition."
         },
         "metricFilter": {
           "description": "Metric Filter for the segment definition.",
           "$ref": "SegmentMetricFilter"
+        },
+        "not": {
+          "description": "Matches the complement (`!`) of the filter.",
+          "type": "boolean"
         }
       },
-      "id": "SegmentFilterClause",
-      "description": "Filter Clause to be used in a segment definition, can be wither a metric or\na dimension filter.",
-      "type": "object"
+      "id": "SegmentFilterClause"
     },
     "MetricFilterClause": {
       "description": "Represents a group of metric filters.\nSet the operator value to specify how the filters are logically combined.",
       "type": "object",
       "properties": {
         "operator": {
-          "description": "The operator for combining multiple metric filters. If unspecified, it is\ntreated as an `OR`.",
-          "type": "string",
           "enumDescriptions": [
             "Unspecified operator. It is treated as an `OR`.",
             "The logical `OR` operator.",
@@ -275,7 +391,9 @@
             "OPERATOR_UNSPECIFIED",
             "OR",
             "AND"
-          ]
+          ],
+          "description": "The operator for combining multiple metric filters. If unspecified, it is\ntreated as an `OR`.",
+          "type": "string"
         },
         "filters": {
           "description": "The repeated set of filters. They are logically combined based on the\noperator specified.",
@@ -287,34 +405,9 @@
       },
       "id": "MetricFilterClause"
     },
-    "Cohort": {
-      "description": "Defines a cohort. A cohort is a group of users who share a common\ncharacteristic. For example, all users with the same acquisition date\nbelong to the same cohort.",
-      "type": "object",
-      "properties": {
-        "name": {
-          "type": "string",
-          "description": "A unique name for the cohort. If not defined name will be auto-generated\nwith values cohort_[1234...]."
-        },
-        "dateRange": {
-          "description": "This is used for `FIRST_VISIT_DATE` cohort, the cohort selects users\nwhose first visit date is between start date and end date defined in the\nDateRange. The date ranges should be aligned for cohort requests. If the\nrequest contains `ga:cohortNthDay` it should be exactly one day long,\nif `ga:cohortNthWeek` it should be aligned to the week boundary (starting\nat Sunday and ending Saturday), and for `ga:cohortNthMonth` the date range\nshould be aligned to the month (starting at the first and ending on the\nlast day of the month).\nFor LTV requests there are no such restrictions.\nYou do not need to supply a date range for the\n`reportsRequest.dateRanges` field.",
-          "$ref": "DateRange"
-        },
-        "type": {
-          "enum": [
-            "UNSPECIFIED_COHORT_TYPE",
-            "FIRST_VISIT_DATE"
-          ],
-          "description": "Type of the cohort. The only supported type as of now is\n`FIRST_VISIT_DATE`. If this field is unspecified the cohort is treated\nas `FIRST_VISIT_DATE` type cohort.",
-          "type": "string",
-          "enumDescriptions": [
-            "If unspecified it's treated as `FIRST_VISIT_DATE`.",
-            "Cohorts that are selected based on first visit date."
-          ]
-        }
-      },
-      "id": "Cohort"
-    },
     "ReportRow": {
+      "description": "A row in the report.",
+      "type": "object",
       "properties": {
         "metrics": {
           "description": "List of metrics for each requested DateRange.",
@@ -331,9 +424,34 @@
           }
         }
       },
-      "id": "ReportRow",
-      "description": "A row in the report.",
-      "type": "object"
+      "id": "ReportRow"
+    },
+    "Cohort": {
+      "description": "Defines a cohort. A cohort is a group of users who share a common\ncharacteristic. For example, all users with the same acquisition date\nbelong to the same cohort.",
+      "type": "object",
+      "properties": {
+        "name": {
+          "description": "A unique name for the cohort. If not defined name will be auto-generated\nwith values cohort_[1234...].",
+          "type": "string"
+        },
+        "dateRange": {
+          "description": "This is used for `FIRST_VISIT_DATE` cohort, the cohort selects users\nwhose first visit date is between start date and end date defined in the\nDateRange. The date ranges should be aligned for cohort requests. If the\nrequest contains `ga:cohortNthDay` it should be exactly one day long,\nif `ga:cohortNthWeek` it should be aligned to the week boundary (starting\nat Sunday and ending Saturday), and for `ga:cohortNthMonth` the date range\nshould be aligned to the month (starting at the first and ending on the\nlast day of the month).\nFor LTV requests there are no such restrictions.\nYou do not need to supply a date range for the\n`reportsRequest.dateRanges` field.",
+          "$ref": "DateRange"
+        },
+        "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"
+          ],
+          "description": "Type of the cohort. The only supported type as of now is\n`FIRST_VISIT_DATE`. If this field is unspecified the cohort is treated\nas `FIRST_VISIT_DATE` type cohort.",
+          "type": "string"
+        }
+      },
+      "id": "Cohort"
     },
     "OrFiltersForSegment": {
       "description": "A list of segment filters in the `OR` group are combined with the logical OR\noperator.",
@@ -350,6 +468,8 @@
       "id": "OrFiltersForSegment"
     },
     "MetricHeader": {
+      "description": "The headers for the metrics.",
+      "type": "object",
       "properties": {
         "pivotHeaders": {
           "description": "Headers for the pivots in the response.",
@@ -366,9 +486,7 @@
           }
         }
       },
-      "id": "MetricHeader",
-      "description": "The headers for the metrics.",
-      "type": "object"
+      "id": "MetricHeader"
     },
     "DimensionFilterClause": {
       "description": "A group of dimension filters. Set the operator value to specify how\nthe filters are logically combined.",
@@ -399,6 +517,7 @@
       "id": "DimensionFilterClause"
     },
     "GetReportsResponse": {
+      "description": "The main response class which holds the reports from the Reporting API\n`batchGet` call.",
       "type": "object",
       "properties": {
         "reports": {
@@ -409,8 +528,7 @@
           }
         }
       },
-      "id": "GetReportsResponse",
-      "description": "The main response class which holds the reports from the Reporting API\n`batchGet` call."
+      "id": "GetReportsResponse"
     },
     "SequenceSegment": {
       "description": "Sequence conditions consist of one or more steps, where each step is defined\nby one or more dimension/metric conditions. Multiple steps can be combined\nwith special sequence operators.",
@@ -434,6 +552,28 @@
       "description": "Metric filter to be used in a segment filter clause.",
       "type": "object",
       "properties": {
+        "metricName": {
+          "description": "The metric that will be filtered on. A `metricFilter` must contain a\nmetric name.",
+          "type": "string"
+        },
+        "scope": {
+          "description": "Scope for a metric defines the level at which that metric is defined.  The\nspecified metric scope must be equal to or greater than its primary scope\nas defined in the data model. The primary scope is defined by if the\nsegment is selecting users or sessions.",
+          "type": "string",
+          "enumDescriptions": [
+            "If the scope is unspecified, it defaults to the condition scope,\n`USER` or `SESSION` depending on if the segment is trying to choose\nusers or sessions.",
+            "Product scope.",
+            "Hit scope.",
+            "Session scope.",
+            "User scope."
+          ],
+          "enum": [
+            "UNSPECIFIED_SCOPE",
+            "PRODUCT",
+            "HIT",
+            "SESSION",
+            "USER"
+          ]
+        },
         "maxComparisonValue": {
           "description": "Max comparison value is only used for `BETWEEN` operator.",
           "type": "string"
@@ -443,13 +583,6 @@
           "type": "string"
         },
         "operator": {
-          "enum": [
-            "UNSPECIFIED_OPERATOR",
-            "LESS_THAN",
-            "GREATER_THAN",
-            "EQUAL",
-            "BETWEEN"
-          ],
           "description": "Specifies is the operation to perform to compare the metric. The default\nis `EQUAL`.",
           "type": "string",
           "enumDescriptions": [
@@ -458,35 +591,19 @@
             "Checks if the metric value is greater than comparison value.",
             "Equals operator.",
             "For between operator, both the minimum and maximum are exclusive.\nWe will use `LT` and `GT` for comparison."
-          ]
-        },
-        "metricName": {
-          "description": "The metric that will be filtered on. A `metricFilter` must contain a\nmetric name.",
-          "type": "string"
-        },
-        "scope": {
-          "enum": [
-            "UNSPECIFIED_SCOPE",
-            "PRODUCT",
-            "HIT",
-            "SESSION",
-            "USER"
           ],
-          "description": "Scope for a metric defines the level at which that metric is defined.  The\nspecified metric scope must be equal to or greater than its primary scope\nas defined in the data model. The primary scope is defined by if the\nsegment is selecting users or sessions.",
-          "type": "string",
-          "enumDescriptions": [
-            "If the scope is unspecified, it defaults to the condition scope,\n`USER` or `SESSION` depending on if the segment is trying to choose\nusers or sessions.",
-            "Product scope.",
-            "Hit scope.",
-            "Session scope.",
-            "User scope."
+          "enum": [
+            "UNSPECIFIED_OPERATOR",
+            "LESS_THAN",
+            "GREATER_THAN",
+            "EQUAL",
+            "BETWEEN"
           ]
         }
       },
       "id": "SegmentMetricFilter"
     },
     "DateRangeValues": {
-      "id": "DateRangeValues",
       "description": "Used to return a list of metrics for a single DateRange / dimension\ncombination",
       "type": "object",
       "properties": {
@@ -504,28 +621,28 @@
             "$ref": "PivotValueRegion"
           }
         }
-      }
+      },
+      "id": "DateRangeValues"
     },
     "CohortGroup": {
       "description": "Defines a cohort group.\nFor example:\n\n    \"cohortGroup\": {\n      \"cohorts\": [{\n        \"name\": \"cohort 1\",\n        \"type\": \"FIRST_VISIT_DATE\",\n        \"dateRange\": { \"startDate\": \"2015-08-01\", \"endDate\": \"2015-08-01\" }\n      },{\n        \"name\": \"cohort 2\"\n         \"type\": \"FIRST_VISIT_DATE\"\n         \"dateRange\": { \"startDate\": \"2015-07-01\", \"endDate\": \"2015-07-01\" }\n      }]\n    }",
       "type": "object",
       "properties": {
+        "lifetimeValue": {
+          "description": "Enable Life Time Value (LTV).  LTV measures lifetime value for users\nacquired through different channels.\nPlease see:\n[Cohort Analysis](https://support.google.com/analytics/answer/6074676) and\n[Lifetime Value](https://support.google.com/analytics/answer/6182550)\nIf the value of lifetimeValue is false:\n\n- The metric values are similar to the values in the web interface cohort\n  report.\n- The cohort definition date ranges must be aligned to the calendar week\n  and month. i.e. while requesting `ga:cohortNthWeek` the `startDate` in\n  the cohort definition should be a Sunday and the `endDate` should be the\n  following Saturday, and for `ga:cohortNthMonth`, the `startDate`\n  should be the 1st of the month and `endDate` should be the last day\n  of the month.\n\nWhen the lifetimeValue is true:\n\n- The metric values will correspond to the values in the web interface\n  LifeTime value report.\n- The Lifetime Value report shows you how user value (Revenue) and\n  engagement (Appviews, Goal Completions, Sessions, and Session Duration)\n  grow during the 90 days after a user is acquired.\n- The metrics are calculated as a cumulative average per user per the time\n  increment.\n- The cohort definition date ranges need not be aligned to the calendar\n  week and month boundaries.\n- The `viewId` must be an\n  [app view ID](https://support.google.com/analytics/answer/2649553#WebVersusAppViews)",
+          "type": "boolean"
+        },
         "cohorts": {
           "description": "The definition for the cohort.",
           "type": "array",
           "items": {
             "$ref": "Cohort"
           }
-        },
-        "lifetimeValue": {
-          "description": "Enable Life Time Value (LTV).  LTV measures lifetime value for users\nacquired through different channels.\nPlease see:\n[Cohort Analysis](https://support.google.com/analytics/answer/6074676) and\n[Lifetime Value](https://support.google.com/analytics/answer/6182550)\nIf the value of lifetimeValue is false:\n\n- The metric values are similar to the values in the web interface cohort\n  report.\n- The cohort definition date ranges must be aligned to the calendar week\n  and month. i.e. while requesting `ga:cohortNthWeek` the `startDate` in\n  the cohort definition should be a Sunday and the `endDate` should be the\n  following Saturday, and for `ga:cohortNthMonth`, the `startDate`\n  should be the 1st of the month and `endDate` should be the last day\n  of the month.\n\nWhen the lifetimeValue is true:\n\n- The metric values will correspond to the values in the web interface\n  LifeTime value report.\n- The Lifetime Value report shows you how user value (Revenue) and\n  engagement (Appviews, Goal Completions, Sessions, and Session Duration)\n  grow during the 90 days after a user is acquired.\n- The metrics are calculated as a cumulative average per user per the time\n  increment.\n- The cohort definition date ranges need not be aligned to the calendar\n  week and month boundaries.\n- The `viewId` must be an\n  [app view ID](https://support.google.com/analytics/answer/2649553#WebVersusAppViews)",
-          "type": "boolean"
         }
       },
       "id": "CohortGroup"
     },
     "GetReportsRequest": {
-      "id": "GetReportsRequest",
       "description": "The batch request containing multiple report request.",
       "type": "object",
       "properties": {
@@ -536,17 +653,13 @@
             "$ref": "ReportRequest"
           }
         }
-      }
+      },
+      "id": "GetReportsRequest"
     },
     "Pivot": {
       "description": "The Pivot describes the pivot section in the request.\nThe Pivot helps rearrange the information in the table for certain reports\nby pivoting your data on a second dimension.",
       "type": "object",
       "properties": {
-        "startGroup": {
-          "description": "If k metrics were requested, then the response will contain some\ndata-dependent multiple of k columns in the report.  E.g., if you pivoted\non the dimension `ga:browser` then you'd get k columns for \"Firefox\", k\ncolumns for \"IE\", k columns for \"Chrome\", etc. The ordering of the groups\nof columns is determined by descending order of \"total\" for the first of\nthe k values.  Ties are broken by lexicographic ordering of the first\npivot dimension, then lexicographic ordering of the second pivot\ndimension, and so on.  E.g., if the totals for the first value for\nFirefox, IE, and Chrome were 8, 2, 8, respectively, the order of columns\nwould be Chrome, Firefox, IE.\n\nThe following let you choose which of the groups of k columns are\nincluded in the response.",
-          "format": "int32",
-          "type": "integer"
-        },
         "metrics": {
           "description": "The pivot metrics. Pivot metrics are part of the\nrestriction on total number of metrics allowed in the request.",
           "type": "array",
@@ -572,19 +685,19 @@
           "description": "Specifies the maximum number of groups to return.\nThe default value is 10, also the maximum value is 1,000.",
           "format": "int32",
           "type": "integer"
+        },
+        "startGroup": {
+          "description": "If k metrics were requested, then the response will contain some\ndata-dependent multiple of k columns in the report.  E.g., if you pivoted\non the dimension `ga:browser` then you'd get k columns for \"Firefox\", k\ncolumns for \"IE\", k columns for \"Chrome\", etc. The ordering of the groups\nof columns is determined by descending order of \"total\" for the first of\nthe k values.  Ties are broken by lexicographic ordering of the first\npivot dimension, then lexicographic ordering of the second pivot\ndimension, and so on.  E.g., if the totals for the first value for\nFirefox, IE, and Chrome were 8, 2, 8, respectively, the order of columns\nwould be Chrome, Firefox, IE.\n\nThe following let you choose which of the groups of k columns are\nincluded in the response.",
+          "format": "int32",
+          "type": "integer"
         }
       },
       "id": "Pivot"
     },
     "PivotHeaderEntry": {
+      "description": "The headers for the each of the metric column corresponding to the metrics\nrequested in the pivots section of the response.",
+      "type": "object",
       "properties": {
-        "dimensionValues": {
-          "type": "array",
-          "items": {
-            "type": "string"
-          },
-          "description": "The values for the dimensions in the pivot."
-        },
         "dimensionNames": {
           "description": "The name of the dimensions in the pivot response.",
           "type": "array",
@@ -593,18 +706,27 @@
           }
         },
         "metric": {
-          "description": "The metric header for the metric in the pivot.",
-          "$ref": "MetricHeaderEntry"
+          "$ref": "MetricHeaderEntry",
+          "description": "The metric header for the metric in the pivot."
+        },
+        "dimensionValues": {
+          "description": "The values for the dimensions in the pivot.",
+          "type": "array",
+          "items": {
+            "type": "string"
+          }
         }
       },
-      "id": "PivotHeaderEntry",
-      "description": "The headers for the each of the metric column corresponding to the metrics\nrequested in the pivots section of the response.",
-      "type": "object"
+      "id": "PivotHeaderEntry"
     },
     "SegmentFilter": {
       "description": "SegmentFilter defines the segment to be either a simple or a sequence\nsegment. A simple segment condition contains dimension and metric conditions\nto select the sessions or users. A sequence segment condition can be used to\nselect users or sessions based on sequential conditions.",
       "type": "object",
       "properties": {
+        "sequenceSegment": {
+          "description": "Sequence conditions consist of one or more steps, where each step is\ndefined by one or more dimension/metric conditions. Multiple steps can\nbe combined with special sequence operators.",
+          "$ref": "SequenceSegment"
+        },
         "not": {
           "description": "If true, match the complement of simple or sequence segment.\nFor example, to match all visits not from \"New York\", we can define the\nsegment as follows:\n\n      \"sessionSegment\": {\n        \"segmentFilters\": [{\n          \"simpleSegment\" :{\n            \"orFiltersForSegment\": [{\n              \"segmentFilterClauses\":[{\n                \"dimensionFilter\": {\n                  \"dimensionName\": \"ga:city\",\n                  \"expressions\": [\"New York\"]\n                }\n              }]\n            }]\n          },\n          \"not\": \"True\"\n        }]\n      },",
           "type": "boolean"
@@ -612,10 +734,6 @@
         "simpleSegment": {
           "$ref": "SimpleSegment",
           "description": "A Simple segment conditions consist of one or more dimension/metric\nconditions that can be combined"
-        },
-        "sequenceSegment": {
-          "description": "Sequence conditions consist of one or more steps, where each step is\ndefined by one or more dimension/metric conditions. Multiple steps can\nbe combined with special sequence operators.",
-          "$ref": "SequenceSegment"
         }
       },
       "id": "SegmentFilter"
@@ -638,10 +756,6 @@
       "description": "Header for the metrics.",
       "type": "object",
       "properties": {
-        "name": {
-          "description": "The name of the header.",
-          "type": "string"
-        },
         "type": {
           "description": "The type of the metric, for example `INTEGER`.",
           "type": "string",
@@ -661,58 +775,18 @@
             "PERCENT",
             "TIME"
           ]
+        },
+        "name": {
+          "description": "The name of the header.",
+          "type": "string"
         }
       },
       "id": "MetricHeaderEntry"
     },
     "ReportData": {
-      "id": "ReportData",
       "description": "The data part of the report.",
       "type": "object",
       "properties": {
-        "isDataGolden": {
-          "description": "Indicates if response to this request is golden or not. Data is\ngolden when the exact same request will not produce any new results if\nasked at a later point in time.",
-          "type": "boolean"
-        },
-        "rows": {
-          "description": "There's one ReportRow for every unique combination of dimensions.",
-          "type": "array",
-          "items": {
-            "$ref": "ReportRow"
-          }
-        },
-        "rowCount": {
-          "description": "Total number of matching rows for this query.",
-          "format": "int32",
-          "type": "integer"
-        },
-        "dataLastRefreshed": {
-          "description": "The last time the data in the report was refreshed. All the hits received\nbefore this timestamp are included in the calculation of the report.",
-          "format": "google-datetime",
-          "type": "string"
-        },
-        "maximums": {
-          "description": "Minimum and maximum values seen over all matching rows. These are both\nempty when `hideValueRanges` in the request is false, or when\nrowCount is zero.",
-          "type": "array",
-          "items": {
-            "$ref": "DateRangeValues"
-          }
-        },
-        "minimums": {
-          "description": "Minimum and maximum values seen over all matching rows. These are both\nempty when `hideValueRanges` in the request is false, or when\nrowCount is zero.",
-          "type": "array",
-          "items": {
-            "$ref": "DateRangeValues"
-          }
-        },
-        "samplingSpaceSizes": {
-          "description": "If the results are\n[sampled](https://support.google.com/analytics/answer/2637192),\nthis returns the total number of\nsamples present, one entry per date range. If the results are not sampled\nthis field will not be defined. See\n[developer guide](/analytics/devguides/reporting/core/v4/basics#sampling)\nfor details.",
-          "type": "array",
-          "items": {
-            "format": "int64",
-            "type": "string"
-          }
-        },
         "totals": {
           "description": "For each requested date range, for the set of all rows that match\nthe query, every requested value format gets a total. The total\nfor a value format is computed by first totaling the metrics\nmentioned in the value format and then evaluating the value\nformat as a scalar expression.  E.g., The \"totals\" for\n`3 / (ga:sessions + 2)` we compute\n`3 / ((sum of all relevant ga:sessions) + 2)`.\nTotals are computed before pagination.",
           "type": "array",
@@ -727,24 +801,57 @@
             "format": "int64",
             "type": "string"
           }
+        },
+        "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.",
+          "type": "array",
+          "items": {
+            "$ref": "ReportRow"
+          }
+        },
+        "isDataGolden": {
+          "description": "Indicates if response to this request is golden or not. Data is\ngolden when the exact same request will not produce any new results if\nasked at a later point in time.",
+          "type": "boolean"
+        },
+        "dataLastRefreshed": {
+          "description": "The last time the data in the report was refreshed. All the hits received\nbefore this timestamp are included in the calculation of the report.",
+          "format": "google-datetime",
+          "type": "string"
+        },
+        "maximums": {
+          "description": "Minimum and maximum values seen over all matching rows. These are both\nempty when `hideValueRanges` in the request is false, or when\nrowCount is zero.",
+          "type": "array",
+          "items": {
+            "$ref": "DateRangeValues"
+          }
+        },
+        "samplingSpaceSizes": {
+          "description": "If the results are\n[sampled](https://support.google.com/analytics/answer/2637192),\nthis returns the total number of\nsamples present, one entry per date range. If the results are not sampled\nthis field will not be defined. See\n[developer guide](/analytics/devguides/reporting/core/v4/basics#sampling)\nfor details.",
+          "type": "array",
+          "items": {
+            "format": "int64",
+            "type": "string"
+          }
+        },
+        "minimums": {
+          "description": "Minimum and maximum values seen over all matching rows. These are both\nempty when `hideValueRanges` in the request is false, or when\nrowCount is zero.",
+          "type": "array",
+          "items": {
+            "$ref": "DateRangeValues"
+          }
         }
-      }
+      },
+      "id": "ReportData"
     },
     "DimensionFilter": {
       "description": "Dimension filter specifies the filtering options on a dimension.",
       "type": "object",
       "properties": {
-        "not": {
-          "description": "Logical `NOT` operator. If this boolean is set to true, then the matching\ndimension values will be excluded in the report. The default is false.",
-          "type": "boolean"
-        },
-        "expressions": {
-          "description": "Strings or regular expression to match against. Only the first value of\nthe list is used for comparison unless the operator is `IN_LIST`.\nIf `IN_LIST` operator, then the entire list is used to filter the\ndimensions as explained in the description of the `IN_LIST` operator.",
-          "type": "array",
-          "items": {
-            "type": "string"
-          }
-        },
         "caseSensitive": {
           "description": "Should the match be case sensitive? Default is false.",
           "type": "boolean"
@@ -754,8 +861,6 @@
           "type": "string"
         },
         "operator": {
-          "description": "How to match the dimension to the expression. The default is REGEXP.",
-          "type": "string",
           "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\nare not treated as regular expressions.",
@@ -779,80 +884,43 @@
             "NUMERIC_GREATER_THAN",
             "NUMERIC_LESS_THAN",
             "IN_LIST"
-          ]
+          ],
+          "description": "How to match the dimension to the expression. The default is REGEXP.",
+          "type": "string"
+        },
+        "not": {
+          "description": "Logical `NOT` operator. If this boolean is set to true, then the matching\ndimension values will be excluded in the report. The default is false.",
+          "type": "boolean"
+        },
+        "expressions": {
+          "description": "Strings or regular expression to match against. Only the first value of\nthe list is used for comparison unless the operator is `IN_LIST`.\nIf `IN_LIST` operator, then the entire list is used to filter the\ndimensions as explained in the description of the `IN_LIST` operator.",
+          "type": "array",
+          "items": {
+            "type": "string"
+          }
         }
       },
       "id": "DimensionFilter"
     },
-    "Segment": {
-      "description": "The segment definition, if the report needs to be segmented.\nA Segment is a subset of the Analytics data. For example, of the entire\nset of users, one Segment might be users from a particular country or city.",
-      "type": "object",
-      "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"
-        }
-      },
-      "id": "Segment"
-    },
-    "OrderBy": {
-      "description": "Specifies the sorting options.",
-      "type": "object",
-      "properties": {
-        "fieldName": {
-          "description": "The field which to sort by. The default sort order is ascending. Example:\n`ga:browser`.\nNote, that you can only specify one field for sort here. For example,\n`ga:browser, ga:city` is not valid.",
-          "type": "string"
-        },
-        "orderType": {
-          "type": "string",
-          "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\nthe first date range.",
-            "The sort order is based on the difference of the values of the chosen\ncolumn between the first two date ranges.  Usable only if there are\nexactly two date ranges.",
-            "The sort order is based on weighted value of the chosen column.  If\ncolumn has n/d format, then weighted value of this ratio will\nbe `(n + totals.n)/(d + totals.d)` Usable only for metrics that\nrepresent ratios.",
-            "Histogram order type is applicable only to dimension columns with\nnon-empty histogram-buckets.",
-            "If the dimensions are fixed length numbers, ordinary sort would just\nwork fine. `DIMENSION_AS_INTEGER` can be used if the dimensions are\nvariable length numbers."
-          ],
-          "enum": [
-            "ORDER_TYPE_UNSPECIFIED",
-            "VALUE",
-            "DELTA",
-            "SMART",
-            "HISTOGRAM_BUCKET",
-            "DIMENSION_AS_INTEGER"
-          ],
-          "description": "The order type. The default orderType is `VALUE`."
-        },
-        "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."
-          ],
-          "enum": [
-            "SORT_ORDER_UNSPECIFIED",
-            "ASCENDING",
-            "DESCENDING"
-          ],
-          "description": "The sorting order for the field.",
-          "type": "string"
-        }
-      },
-      "id": "OrderBy"
-    },
     "SegmentDimensionFilter": {
       "description": "Dimension filter specifies the filtering options on a dimension.",
       "type": "object",
       "properties": {
+        "minComparisonValue": {
+          "description": "Minimum comparison values for `BETWEEN` match type.",
+          "type": "string"
+        },
+        "maxComparisonValue": {
+          "description": "Maximum comparison values for `BETWEEN` match type.",
+          "type": "string"
+        },
         "dimensionName": {
           "description": "Name of the dimension for which the filter is being applied.",
           "type": "string"
         },
         "operator": {
+          "description": "The operator to use to match the dimension with the expressions.",
+          "type": "string",
           "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\ntypes are not treated as regular expressions.",
@@ -876,9 +944,7 @@
             "NUMERIC_LESS_THAN",
             "NUMERIC_GREATER_THAN",
             "NUMERIC_BETWEEN"
-          ],
-          "description": "The operator to use to match the dimension with the expressions.",
-          "type": "string"
+          ]
         },
         "expressions": {
           "description": "The list of expressions, only the first element is used for all operators",
@@ -888,21 +954,75 @@
           }
         },
         "caseSensitive": {
-          "type": "boolean",
-          "description": "Should the match be case sensitive, ignored for `IN_LIST` operator."
-        },
-        "minComparisonValue": {
-          "description": "Minimum comparison values for `BETWEEN` match type.",
-          "type": "string"
-        },
-        "maxComparisonValue": {
-          "description": "Maximum comparison values for `BETWEEN` match type.",
-          "type": "string"
+          "description": "Should the match be case sensitive, ignored for `IN_LIST` operator.",
+          "type": "boolean"
         }
       },
       "id": "SegmentDimensionFilter"
     },
+    "OrderBy": {
+      "description": "Specifies the sorting options.",
+      "type": "object",
+      "properties": {
+        "fieldName": {
+          "description": "The field which to sort by. The default sort order is ascending. Example:\n`ga:browser`.\nNote, that you can only specify one field for sort here. For example,\n`ga:browser, ga:city` is not valid.",
+          "type": "string"
+        },
+        "orderType": {
+          "description": "The order type. The default orderType is `VALUE`.",
+          "type": "string",
+          "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\nthe first date range.",
+            "The sort order is based on the difference of the values of the chosen\ncolumn between the first two date ranges.  Usable only if there are\nexactly two date ranges.",
+            "The sort order is based on weighted value of the chosen column.  If\ncolumn has n/d format, then weighted value of this ratio will\nbe `(n + totals.n)/(d + totals.d)` Usable only for metrics that\nrepresent ratios.",
+            "Histogram order type is applicable only to dimension columns with\nnon-empty histogram-buckets.",
+            "If the dimensions are fixed length numbers, ordinary sort would just\nwork fine. `DIMENSION_AS_INTEGER` can be used if the dimensions are\nvariable length numbers."
+          ],
+          "enum": [
+            "ORDER_TYPE_UNSPECIFIED",
+            "VALUE",
+            "DELTA",
+            "SMART",
+            "HISTOGRAM_BUCKET",
+            "DIMENSION_AS_INTEGER"
+          ]
+        },
+        "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."
+          ],
+          "enum": [
+            "SORT_ORDER_UNSPECIFIED",
+            "ASCENDING",
+            "DESCENDING"
+          ],
+          "description": "The sorting order for the field.",
+          "type": "string"
+        }
+      },
+      "id": "OrderBy"
+    },
+    "Segment": {
+      "description": "The segment definition, if the report needs to be segmented.\nA Segment is a subset of the Analytics data. For example, of the entire\nset of users, one Segment might be users from a particular country or city.",
+      "type": "object",
+      "properties": {
+        "segmentId": {
+          "description": "The segment ID of a built-in or custom segment, for example `gaid::-3`.",
+          "type": "string"
+        },
+        "dynamicSegment": {
+          "description": "A dynamic segment definition in the request.",
+          "$ref": "DynamicSegment"
+        }
+      },
+      "id": "Segment"
+    },
     "SegmentSequenceStep": {
+      "description": "A segment sequence definition.",
+      "type": "object",
       "properties": {
         "orFiltersForSegment": {
           "description": "A sequence is specified with a list of Or grouped filters which are\ncombined with `AND` operator.",
@@ -912,7 +1032,6 @@
           }
         },
         "matchType": {
-          "type": "string",
           "enumDescriptions": [
             "Unspecified match type is treated as precedes.",
             "Operator indicates that the previous step precedes the next step.",
@@ -923,17 +1042,19 @@
             "PRECEDES",
             "IMMEDIATELY_PRECEDES"
           ],
-          "description": "Specifies if the step immediately precedes or can be any time before the\nnext step."
+          "description": "Specifies if the step immediately precedes or can be any time before the\nnext step.",
+          "type": "string"
         }
       },
-      "id": "SegmentSequenceStep",
-      "description": "A segment sequence definition.",
-      "type": "object"
+      "id": "SegmentSequenceStep"
     },
     "Metric": {
+      "description": "[Metrics](https://support.google.com/analytics/answer/1033861)\nare the quantitative measurements. For example, the metric `ga:users`\nindicates the total number of users for the requested time period.",
       "type": "object",
       "properties": {
         "formattingType": {
+          "description": "Specifies how the metric expression should be formatted, for example\n`INTEGER`.",
+          "type": "string",
           "enumDescriptions": [
             "Metric type is unspecified.",
             "Integer metric.",
@@ -949,9 +1070,7 @@
             "CURRENCY",
             "PERCENT",
             "TIME"
-          ],
-          "description": "Specifies how the metric expression should be formatted, for example\n`INTEGER`.",
-          "type": "string"
+          ]
         },
         "alias": {
           "description": "An alias for the metric expression is an alternate name for the\nexpression. The alias can be used for filtering and sorting. This field\nis optional and is useful if the expression is not a single metric but\na complex expression which cannot be used in filtering and sorting.\nThe alias is also used in the response column header.",
@@ -962,10 +1081,10 @@
           "type": "string"
         }
       },
-      "id": "Metric",
-      "description": "[Metrics](https://support.google.com/analytics/answer/1033861)\nare the quantitative measurements. For example, the metric `ga:users`\nindicates the total number of users for the requested time period."
+      "id": "Metric"
     },
     "PivotValueRegion": {
+      "description": "The metric values in the pivot region.",
       "type": "object",
       "properties": {
         "values": {
@@ -976,17 +1095,12 @@
           }
         }
       },
-      "id": "PivotValueRegion",
-      "description": "The metric values in the pivot region."
+      "id": "PivotValueRegion"
     },
     "Report": {
       "description": "The data response corresponding to the request.",
       "type": "object",
       "properties": {
-        "columnHeader": {
-          "$ref": "ColumnHeader",
-          "description": "The column headers."
-        },
         "data": {
           "description": "Response data.",
           "$ref": "ReportData"
@@ -994,6 +1108,10 @@
         "nextPageToken": {
           "description": "Page token to retrieve the next page of results in the list.",
           "type": "string"
+        },
+        "columnHeader": {
+          "description": "The column headers.",
+          "$ref": "ColumnHeader"
         }
       },
       "id": "Report"
@@ -1041,123 +1159,5 @@
   "name": "analyticsreporting",
   "batchPath": "batch",
   "title": "Google Analytics Reporting API",
-  "ownerName": "Google",
-  "resources": {
-    "reports": {
-      "methods": {
-        "batchGet": {
-          "response": {
-            "$ref": "GetReportsResponse"
-          },
-          "parameterOrder": [],
-          "httpMethod": "POST",
-          "scopes": [
-            "https://www.googleapis.com/auth/analytics",
-            "https://www.googleapis.com/auth/analytics.readonly"
-          ],
-          "parameters": {},
-          "flatPath": "v4/reports:batchGet",
-          "path": "v4/reports:batchGet",
-          "id": "analyticsreporting.reports.batchGet",
-          "description": "Returns the Analytics data.",
-          "request": {
-            "$ref": "GetReportsRequest"
-          }
-        }
-      }
-    }
-  },
-  "parameters": {
-    "upload_protocol": {
-      "description": "Upload protocol for media (e.g. \"raw\", \"multipart\").",
-      "type": "string",
-      "location": "query"
-    },
-    "prettyPrint": {
-      "type": "boolean",
-      "default": "true",
-      "location": "query",
-      "description": "Returns response with indentations and line breaks."
-    },
-    "uploadType": {
-      "description": "Legacy upload protocol for media (e.g. \"media\", \"multipart\").",
-      "type": "string",
-      "location": "query"
-    },
-    "fields": {
-      "location": "query",
-      "description": "Selector specifying which fields to include in a partial response.",
-      "type": "string"
-    },
-    "$.xgafv": {
-      "enumDescriptions": [
-        "v1 error format",
-        "v2 error format"
-      ],
-      "location": "query",
-      "enum": [
-        "1",
-        "2"
-      ],
-      "description": "V1 error format.",
-      "type": "string"
-    },
-    "callback": {
-      "description": "JSONP",
-      "type": "string",
-      "location": "query"
-    },
-    "alt": {
-      "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",
-      "description": "Data format for response.",
-      "default": "json",
-      "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"
-    },
-    "access_token": {
-      "description": "OAuth access token.",
-      "type": "string",
-      "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"
-    },
-    "pp": {
-      "description": "Pretty-print response.",
-      "type": "boolean",
-      "default": "true",
-      "location": "query"
-    },
-    "oauth_token": {
-      "location": "query",
-      "description": "OAuth 2.0 token for the current user.",
-      "type": "string"
-    },
-    "bearer_token": {
-      "location": "query",
-      "description": "OAuth bearer token.",
-      "type": "string"
-    }
-  },
-  "version": "v4",
-  "baseUrl": "https://analyticsreporting.googleapis.com/",
-  "servicePath": "",
-  "description": "Accesses Analytics report data.",
-  "kind": "discovery#restDescription"
+  "ownerName": "Google"
 }
diff --git a/analyticsreporting/v4/analyticsreporting-gen.go b/analyticsreporting/v4/analyticsreporting-gen.go
index 41676f2..055e301 100644
--- a/analyticsreporting/v4/analyticsreporting-gen.go
+++ b/analyticsreporting/v4/analyticsreporting-gen.go
@@ -64,10 +64,9 @@
 }
 
 type Service struct {
-	client                    *http.Client
-	BasePath                  string // API endpoint base URL
-	UserAgent                 string // optional additional User-Agent fragment
-	GoogleClientHeaderElement string // client header fragment, for Google use only
+	client    *http.Client
+	BasePath  string // API endpoint base URL
+	UserAgent string // optional additional User-Agent fragment
 
 	Reports *ReportsService
 }
@@ -79,10 +78,6 @@
 	return googleapi.UserAgent + " " + s.UserAgent
 }
 
-func (s *Service) clientHeader() string {
-	return gensupport.GoogleClientHeader("20170210", s.GoogleClientHeaderElement)
-}
-
 func NewReportsService(s *Service) *ReportsService {
 	rs := &ReportsService{s: s}
 	return rs
@@ -2077,7 +2072,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	var body io.Reader = nil
 	body, err := googleapi.WithoutDataWrapper.JSONReader(c.getreportsrequest)
 	if err != nil {
diff --git a/androidenterprise/v1/androidenterprise-api.json b/androidenterprise/v1/androidenterprise-api.json
index eb83a3b..e3427fd 100644
--- a/androidenterprise/v1/androidenterprise-api.json
+++ b/androidenterprise/v1/androidenterprise-api.json
@@ -1,12 +1,12 @@
 {
  "kind": "discovery#restDescription",
- "etag": "\"tbys6C40o18GZwyMen5GMkdK-3s/7Hat7OD71pyaIh88VMr8fQ27dGA\"",
+ "etag": "\"tbys6C40o18GZwyMen5GMkdK-3s/jiWbk7G2WkHiEt7DpObbSxusffU\"",
  "discoveryVersion": "v1",
  "id": "androidenterprise:v1",
  "name": "androidenterprise",
  "canonicalName": "Android Enterprise",
  "version": "v1",
- "revision": "20170215",
+ "revision": "20170322",
  "title": "Google Play EMM API",
  "description": "Manages the deployment of apps to Android for Work users.",
  "ownerDomain": "google.com",
@@ -1226,7 +1226,7 @@
    "properties": {
     "homepageId": {
      "type": "string",
-     "description": "The ID of the store page to be used as the homepage. The homepage will be used as the first page shown in the managed Google Play store.\n\nIf a homepage has not been set, the Play store shown on devices will be empty. Not specifying a homepage on a store layout effectively empties the store.\n\nIf there exists at least one page, this field must be set to the ID of a valid page."
+     "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.\n\nNot specifying a homepage is equivalent to setting the store layout type to \"basic\"."
     },
     "kind": {
      "type": "string",
@@ -1235,7 +1235,7 @@
     },
     "storeLayoutType": {
      "type": "string",
-     "description": "The store layout type. By default, this value is set to \"basic\". If set to \"custom\", \"homepageId\" must be specified. If set to \"basic\", the layout will consist of all approved apps accessible by the user, split in pages of 100 each; in this case, \"homepageId\" must not be specified. The \"basic\" setting takes precedence over any existing collections setup for this enterprise (if any). Should the enterprise use collectionViewers for controlling access rights, these will still be respected."
+     "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."
     }
    }
   },
@@ -1750,7 +1750,7 @@
      "id": "androidenterprise.enterprises.getStoreLayout",
      "path": "enterprises/{enterpriseId}/storeLayout",
      "httpMethod": "GET",
-     "description": "Returns the store layout for the enterprise. If the store layout has not been set, or if the store layout has no homepageId set, returns a NOT_FOUND error.",
+     "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.",
      "parameters": {
       "enterpriseId": {
        "type": "string",
@@ -1898,7 +1898,7 @@
      "id": "androidenterprise.enterprises.setStoreLayout",
      "path": "enterprises/{enterpriseId}/storeLayout",
      "httpMethod": "PUT",
-     "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\"), the basic store layout is disabled.",
+     "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.",
      "parameters": {
       "enterpriseId": {
        "type": "string",
diff --git a/androidenterprise/v1/androidenterprise-gen.go b/androidenterprise/v1/androidenterprise-gen.go
index 3fbcac0..c3981f5 100644
--- a/androidenterprise/v1/androidenterprise-gen.go
+++ b/androidenterprise/v1/androidenterprise-gen.go
@@ -74,10 +74,9 @@
 }
 
 type Service struct {
-	client                    *http.Client
-	BasePath                  string // API endpoint base URL
-	UserAgent                 string // optional additional User-Agent fragment
-	GoogleClientHeaderElement string // client header fragment, for Google use only
+	client    *http.Client
+	BasePath  string // API endpoint base URL
+	UserAgent string // optional additional User-Agent fragment
 
 	Devices *DevicesService
 
@@ -115,10 +114,6 @@
 	return googleapi.UserAgent + " " + s.UserAgent
 }
 
-func (s *Service) clientHeader() string {
-	return gensupport.GoogleClientHeader("20170210", s.GoogleClientHeaderElement)
-}
-
 func NewDevicesService(s *Service) *DevicesService {
 	rs := &DevicesService{s: s}
 	return rs
@@ -2534,15 +2529,11 @@
 // the store is opened.
 type StoreLayout struct {
 	// HomepageId: The ID of the store page to be used as the homepage. The
-	// homepage will be used as the first page shown in the managed Google
-	// Play store.
+	// homepage is the first page shown in the managed Google Play
+	// Store.
 	//
-	// If a homepage has not been set, the Play store shown on devices will
-	// be empty. Not specifying a homepage on a store layout effectively
-	// empties the store.
-	//
-	// If there exists at least one page, this field must be set to the ID
-	// of a valid page.
+	// Not specifying a homepage is equivalent to setting the store layout
+	// type to "basic".
 	HomepageId string `json:"homepageId,omitempty"`
 
 	// Kind: Identifies what kind of resource this is. Value: the fixed
@@ -2550,13 +2541,9 @@
 	Kind string `json:"kind,omitempty"`
 
 	// StoreLayoutType: The store layout type. By default, this value is set
-	// to "basic". If set to "custom", "homepageId" must be specified. If
-	// set to "basic", the layout will consist of all approved apps
-	// accessible by the user, split in pages of 100 each; in this case,
-	// "homepageId" must not be specified. The "basic" setting takes
-	// precedence over any existing collections setup for this enterprise
-	// (if any). Should the enterprise use collectionViewers for controlling
-	// access rights, these will still be respected.
+	// 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.
 	StoreLayoutType string `json:"storeLayoutType,omitempty"`
 
 	// ServerResponse contains the HTTP response code and headers from the
@@ -2963,7 +2950,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	if c.ifNoneMatch_ != "" {
 		reqHeaders.Set("If-None-Match", c.ifNoneMatch_)
 	}
@@ -3126,7 +3112,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	if c.ifNoneMatch_ != "" {
 		reqHeaders.Set("If-None-Match", c.ifNoneMatch_)
 	}
@@ -3282,7 +3267,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	if c.ifNoneMatch_ != "" {
 		reqHeaders.Set("If-None-Match", c.ifNoneMatch_)
 	}
@@ -3428,7 +3412,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	var body io.Reader = nil
 	body, err := googleapi.WithoutDataWrapper.JSONReader(c.devicestate)
 	if err != nil {
@@ -3584,7 +3567,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	var body io.Reader = nil
 	c.urlParams_.Set("alt", alt)
 	urls := googleapi.ResolveRelative(c.s.BasePath, "enterprises/acknowledgeNotificationSet")
@@ -3687,7 +3669,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	var body io.Reader = nil
 	c.urlParams_.Set("alt", alt)
 	urls := googleapi.ResolveRelative(c.s.BasePath, "enterprises/completeSignup")
@@ -3815,7 +3796,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	var body io.Reader = nil
 	body, err := googleapi.WithoutDataWrapper.JSONReader(c.administratorwebtokenspec)
 	if err != nil {
@@ -3950,7 +3930,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	var body io.Reader = nil
 	c.urlParams_.Set("alt", alt)
 	urls := googleapi.ResolveRelative(c.s.BasePath, "enterprises/{enterpriseId}")
@@ -4047,7 +4026,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	var body io.Reader = nil
 	body, err := googleapi.WithoutDataWrapper.JSONReader(c.enterprise)
 	if err != nil {
@@ -4189,7 +4167,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	var body io.Reader = nil
 	c.urlParams_.Set("alt", alt)
 	urls := googleapi.ResolveRelative(c.s.BasePath, "enterprises/signupUrl")
@@ -4317,7 +4294,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	if c.ifNoneMatch_ != "" {
 		reqHeaders.Set("If-None-Match", c.ifNoneMatch_)
 	}
@@ -4481,7 +4457,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	if c.ifNoneMatch_ != "" {
 		reqHeaders.Set("If-None-Match", c.ifNoneMatch_)
 	}
@@ -4585,8 +4560,8 @@
 }
 
 // GetStoreLayout: Returns the store layout for the enterprise. If the
-// store layout has not been set, or if the store layout has no
-// homepageId set, returns a NOT_FOUND error.
+// store layout has not been set, returns "basic" as the store layout
+// type and no homepage.
 func (r *EnterprisesService) GetStoreLayout(enterpriseId string) *EnterprisesGetStoreLayoutCall {
 	c := &EnterprisesGetStoreLayoutCall{s: r.s, urlParams_: make(gensupport.URLParams)}
 	c.enterpriseId = enterpriseId
@@ -4634,7 +4609,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	if c.ifNoneMatch_ != "" {
 		reqHeaders.Set("If-None-Match", c.ifNoneMatch_)
 	}
@@ -4688,7 +4662,7 @@
 	}
 	return ret, nil
 	// {
-	//   "description": "Returns the store layout for the enterprise. If the store layout has not been set, or if the store layout has no homepageId set, returns a NOT_FOUND error.",
+	//   "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.",
 	//   "httpMethod": "GET",
 	//   "id": "androidenterprise.enterprises.getStoreLayout",
 	//   "parameterOrder": [
@@ -4763,7 +4737,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	var body io.Reader = nil
 	body, err := googleapi.WithoutDataWrapper.JSONReader(c.enterprise)
 	if err != nil {
@@ -4906,7 +4879,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	if c.ifNoneMatch_ != "" {
 		reqHeaders.Set("If-None-Match", c.ifNoneMatch_)
 	}
@@ -5064,7 +5036,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	var body io.Reader = nil
 	c.urlParams_.Set("alt", alt)
 	urls := googleapi.ResolveRelative(c.s.BasePath, "enterprises/pullNotificationSet")
@@ -5191,7 +5162,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	var body io.Reader = nil
 	c.urlParams_.Set("alt", alt)
 	urls := googleapi.ResolveRelative(c.s.BasePath, "enterprises/{enterpriseId}/sendTestPushNotification")
@@ -5320,7 +5290,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	var body io.Reader = nil
 	body, err := googleapi.WithoutDataWrapper.JSONReader(c.enterpriseaccount)
 	if err != nil {
@@ -5421,8 +5390,8 @@
 // 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"), the basic store
-// layout is disabled.
+// layout (by setting storeLayoutType = "custom" and setting a
+// homepage), the basic store layout is disabled.
 func (r *EnterprisesService) SetStoreLayout(enterpriseId string, storelayout *StoreLayout) *EnterprisesSetStoreLayoutCall {
 	c := &EnterprisesSetStoreLayoutCall{s: r.s, urlParams_: make(gensupport.URLParams)}
 	c.enterpriseId = enterpriseId
@@ -5461,7 +5430,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	var body io.Reader = nil
 	body, err := googleapi.WithoutDataWrapper.JSONReader(c.storelayout)
 	if err != nil {
@@ -5517,7 +5485,7 @@
 	}
 	return ret, nil
 	// {
-	//   "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\"), the basic store layout is disabled.",
+	//   "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.",
 	//   "httpMethod": "PUT",
 	//   "id": "androidenterprise.enterprises.setStoreLayout",
 	//   "parameterOrder": [
@@ -5593,7 +5561,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	var body io.Reader = nil
 	c.urlParams_.Set("alt", alt)
 	urls := googleapi.ResolveRelative(c.s.BasePath, "enterprises/{enterpriseId}/unenroll")
@@ -5693,7 +5660,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	var body io.Reader = nil
 	c.urlParams_.Set("alt", alt)
 	urls := googleapi.ResolveRelative(c.s.BasePath, "enterprises/{enterpriseId}/users/{userId}/entitlements/{entitlementId}")
@@ -5820,7 +5786,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	if c.ifNoneMatch_ != "" {
 		reqHeaders.Set("If-None-Match", c.ifNoneMatch_)
 	}
@@ -5977,7 +5942,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	if c.ifNoneMatch_ != "" {
 		reqHeaders.Set("If-None-Match", c.ifNoneMatch_)
 	}
@@ -6129,7 +6093,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	var body io.Reader = nil
 	body, err := googleapi.WithoutDataWrapper.JSONReader(c.entitlement)
 	if err != nil {
@@ -6298,7 +6261,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	var body io.Reader = nil
 	body, err := googleapi.WithoutDataWrapper.JSONReader(c.entitlement)
 	if err != nil {
@@ -6465,7 +6427,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	if c.ifNoneMatch_ != "" {
 		reqHeaders.Set("If-None-Match", c.ifNoneMatch_)
 	}
@@ -6612,7 +6573,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	if c.ifNoneMatch_ != "" {
 		reqHeaders.Set("If-None-Match", c.ifNoneMatch_)
 	}
@@ -6753,7 +6713,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	if c.ifNoneMatch_ != "" {
 		reqHeaders.Set("If-None-Match", c.ifNoneMatch_)
 	}
@@ -6896,7 +6855,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	var body io.Reader = nil
 	c.urlParams_.Set("alt", alt)
 	urls := googleapi.ResolveRelative(c.s.BasePath, "enterprises/{enterpriseId}/users/{userId}/devices/{deviceId}/installs/{installId}")
@@ -7033,7 +6991,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	if c.ifNoneMatch_ != "" {
 		reqHeaders.Set("If-None-Match", c.ifNoneMatch_)
 	}
@@ -7200,7 +7157,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	if c.ifNoneMatch_ != "" {
 		reqHeaders.Set("If-None-Match", c.ifNoneMatch_)
 	}
@@ -7353,7 +7309,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	var body io.Reader = nil
 	body, err := googleapi.WithoutDataWrapper.JSONReader(c.install)
 	if err != nil {
@@ -7519,7 +7474,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	var body io.Reader = nil
 	body, err := googleapi.WithoutDataWrapper.JSONReader(c.install)
 	if err != nil {
@@ -7682,7 +7636,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	var body io.Reader = nil
 	c.urlParams_.Set("alt", alt)
 	urls := googleapi.ResolveRelative(c.s.BasePath, "enterprises/{enterpriseId}/users/{userId}/devices/{deviceId}/managedConfigurationsForDevice/{managedConfigurationForDeviceId}")
@@ -7819,7 +7772,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	if c.ifNoneMatch_ != "" {
 		reqHeaders.Set("If-None-Match", c.ifNoneMatch_)
 	}
@@ -7986,7 +7938,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	if c.ifNoneMatch_ != "" {
 		reqHeaders.Set("If-None-Match", c.ifNoneMatch_)
 	}
@@ -8140,7 +8091,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	var body io.Reader = nil
 	body, err := googleapi.WithoutDataWrapper.JSONReader(c.managedconfiguration)
 	if err != nil {
@@ -8305,7 +8255,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	var body io.Reader = nil
 	body, err := googleapi.WithoutDataWrapper.JSONReader(c.managedconfiguration)
 	if err != nil {
@@ -8466,7 +8415,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	var body io.Reader = nil
 	c.urlParams_.Set("alt", alt)
 	urls := googleapi.ResolveRelative(c.s.BasePath, "enterprises/{enterpriseId}/users/{userId}/managedConfigurationsForUser/{managedConfigurationForUserId}")
@@ -8594,7 +8542,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	if c.ifNoneMatch_ != "" {
 		reqHeaders.Set("If-None-Match", c.ifNoneMatch_)
 	}
@@ -8751,7 +8698,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	if c.ifNoneMatch_ != "" {
 		reqHeaders.Set("If-None-Match", c.ifNoneMatch_)
 	}
@@ -8895,7 +8841,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	var body io.Reader = nil
 	body, err := googleapi.WithoutDataWrapper.JSONReader(c.managedconfiguration)
 	if err != nil {
@@ -9050,7 +8995,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	var body io.Reader = nil
 	body, err := googleapi.WithoutDataWrapper.JSONReader(c.managedconfiguration)
 	if err != nil {
@@ -9217,7 +9161,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	if c.ifNoneMatch_ != "" {
 		reqHeaders.Set("If-None-Match", c.ifNoneMatch_)
 	}
@@ -9359,7 +9302,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	var body io.Reader = nil
 	body, err := googleapi.WithoutDataWrapper.JSONReader(c.productsapproverequest)
 	if err != nil {
@@ -9491,7 +9433,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	var body io.Reader = nil
 	c.urlParams_.Set("alt", alt)
 	urls := googleapi.ResolveRelative(c.s.BasePath, "enterprises/{enterpriseId}/products/{productId}/generateApprovalUrl")
@@ -9650,7 +9591,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	if c.ifNoneMatch_ != "" {
 		reqHeaders.Set("If-None-Match", c.ifNoneMatch_)
 	}
@@ -9816,7 +9756,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	if c.ifNoneMatch_ != "" {
 		reqHeaders.Set("If-None-Match", c.ifNoneMatch_)
 	}
@@ -9970,7 +9909,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	if c.ifNoneMatch_ != "" {
 		reqHeaders.Set("If-None-Match", c.ifNoneMatch_)
 	}
@@ -10161,7 +10099,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	if c.ifNoneMatch_ != "" {
 		reqHeaders.Set("If-None-Match", c.ifNoneMatch_)
 	}
@@ -10317,7 +10254,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	var body io.Reader = nil
 	c.urlParams_.Set("alt", alt)
 	urls := googleapi.ResolveRelative(c.s.BasePath, "enterprises/{enterpriseId}/products/{productId}/unapprove")
@@ -10427,7 +10363,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	var body io.Reader = nil
 	c.urlParams_.Set("alt", alt)
 	urls := googleapi.ResolveRelative(c.s.BasePath, "enterprises/{enterpriseId}/serviceAccountKeys/{keyId}")
@@ -10540,7 +10475,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	var body io.Reader = nil
 	body, err := googleapi.WithoutDataWrapper.JSONReader(c.serviceaccountkey)
 	if err != nil {
@@ -10687,7 +10621,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	if c.ifNoneMatch_ != "" {
 		reqHeaders.Set("If-None-Match", c.ifNoneMatch_)
 	}
@@ -10818,7 +10751,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	var body io.Reader = nil
 	c.urlParams_.Set("alt", alt)
 	urls := googleapi.ResolveRelative(c.s.BasePath, "enterprises/{enterpriseId}/storeLayout/pages/{pageId}/clusters/{clusterId}")
@@ -10945,7 +10877,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	if c.ifNoneMatch_ != "" {
 		reqHeaders.Set("If-None-Match", c.ifNoneMatch_)
 	}
@@ -11092,7 +11023,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	var body io.Reader = nil
 	body, err := googleapi.WithoutDataWrapper.JSONReader(c.storecluster)
 	if err != nil {
@@ -11245,7 +11175,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	if c.ifNoneMatch_ != "" {
 		reqHeaders.Set("If-None-Match", c.ifNoneMatch_)
 	}
@@ -11386,7 +11315,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	var body io.Reader = nil
 	body, err := googleapi.WithoutDataWrapper.JSONReader(c.storecluster)
 	if err != nil {
@@ -11540,7 +11468,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	var body io.Reader = nil
 	body, err := googleapi.WithoutDataWrapper.JSONReader(c.storecluster)
 	if err != nil {
@@ -11690,7 +11617,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	var body io.Reader = nil
 	c.urlParams_.Set("alt", alt)
 	urls := googleapi.ResolveRelative(c.s.BasePath, "enterprises/{enterpriseId}/storeLayout/pages/{pageId}")
@@ -11807,7 +11733,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	if c.ifNoneMatch_ != "" {
 		reqHeaders.Set("If-None-Match", c.ifNoneMatch_)
 	}
@@ -11944,7 +11869,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	var body io.Reader = nil
 	body, err := googleapi.WithoutDataWrapper.JSONReader(c.storepage)
 	if err != nil {
@@ -12087,7 +12011,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	if c.ifNoneMatch_ != "" {
 		reqHeaders.Set("If-None-Match", c.ifNoneMatch_)
 	}
@@ -12219,7 +12142,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	var body io.Reader = nil
 	body, err := googleapi.WithoutDataWrapper.JSONReader(c.storepage)
 	if err != nil {
@@ -12363,7 +12285,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	var body io.Reader = nil
 	body, err := googleapi.WithoutDataWrapper.JSONReader(c.storepage)
 	if err != nil {
@@ -12505,7 +12426,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	var body io.Reader = nil
 	c.urlParams_.Set("alt", alt)
 	urls := googleapi.ResolveRelative(c.s.BasePath, "enterprises/{enterpriseId}/users/{userId}")
@@ -12616,7 +12536,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	var body io.Reader = nil
 	c.urlParams_.Set("alt", alt)
 	urls := googleapi.ResolveRelative(c.s.BasePath, "enterprises/{enterpriseId}/users/{userId}/authenticationToken")
@@ -12754,7 +12673,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	var body io.Reader = nil
 	c.urlParams_.Set("alt", alt)
 	urls := googleapi.ResolveRelative(c.s.BasePath, "enterprises/{enterpriseId}/users/{userId}/token")
@@ -12899,7 +12817,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	if c.ifNoneMatch_ != "" {
 		reqHeaders.Set("If-None-Match", c.ifNoneMatch_)
 	}
@@ -13048,7 +12965,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	if c.ifNoneMatch_ != "" {
 		reqHeaders.Set("If-None-Match", c.ifNoneMatch_)
 	}
@@ -13191,7 +13107,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	var body io.Reader = nil
 	body, err := googleapi.WithoutDataWrapper.JSONReader(c.user)
 	if err != nil {
@@ -13338,7 +13253,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	if c.ifNoneMatch_ != "" {
 		reqHeaders.Set("If-None-Match", c.ifNoneMatch_)
 	}
@@ -13482,7 +13396,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	var body io.Reader = nil
 	body, err := googleapi.WithoutDataWrapper.JSONReader(c.user)
 	if err != nil {
@@ -13625,7 +13538,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	var body io.Reader = nil
 	c.urlParams_.Set("alt", alt)
 	urls := googleapi.ResolveRelative(c.s.BasePath, "enterprises/{enterpriseId}/users/{userId}/token")
@@ -13736,7 +13648,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	var body io.Reader = nil
 	body, err := googleapi.WithoutDataWrapper.JSONReader(c.productset)
 	if err != nil {
@@ -13885,7 +13796,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	var body io.Reader = nil
 	body, err := googleapi.WithoutDataWrapper.JSONReader(c.user)
 	if err != nil {
diff --git a/androidpublisher/v1.1/androidpublisher-gen.go b/androidpublisher/v1.1/androidpublisher-gen.go
index 60c4317..c4d799f 100644
--- a/androidpublisher/v1.1/androidpublisher-gen.go
+++ b/androidpublisher/v1.1/androidpublisher-gen.go
@@ -62,10 +62,9 @@
 }
 
 type Service struct {
-	client                    *http.Client
-	BasePath                  string // API endpoint base URL
-	UserAgent                 string // optional additional User-Agent fragment
-	GoogleClientHeaderElement string // client header fragment, for Google use only
+	client    *http.Client
+	BasePath  string // API endpoint base URL
+	UserAgent string // optional additional User-Agent fragment
 
 	Inapppurchases *InapppurchasesService
 
@@ -79,10 +78,6 @@
 	return googleapi.UserAgent + " " + s.UserAgent
 }
 
-func (s *Service) clientHeader() string {
-	return gensupport.GoogleClientHeader("20170210", s.GoogleClientHeaderElement)
-}
-
 func NewInapppurchasesService(s *Service) *InapppurchasesService {
 	rs := &InapppurchasesService{s: s}
 	return rs
@@ -265,7 +260,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	if c.ifNoneMatch_ != "" {
 		reqHeaders.Set("If-None-Match", c.ifNoneMatch_)
 	}
@@ -413,7 +407,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	var body io.Reader = nil
 	c.urlParams_.Set("alt", alt)
 	urls := googleapi.ResolveRelative(c.s.BasePath, "{packageName}/subscriptions/{subscriptionId}/purchases/{token}/cancel")
@@ -541,7 +534,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	if c.ifNoneMatch_ != "" {
 		reqHeaders.Set("If-None-Match", c.ifNoneMatch_)
 	}
diff --git a/androidpublisher/v1/androidpublisher-gen.go b/androidpublisher/v1/androidpublisher-gen.go
index 62566d3..dfa9987 100644
--- a/androidpublisher/v1/androidpublisher-gen.go
+++ b/androidpublisher/v1/androidpublisher-gen.go
@@ -61,10 +61,9 @@
 }
 
 type Service struct {
-	client                    *http.Client
-	BasePath                  string // API endpoint base URL
-	UserAgent                 string // optional additional User-Agent fragment
-	GoogleClientHeaderElement string // client header fragment, for Google use only
+	client    *http.Client
+	BasePath  string // API endpoint base URL
+	UserAgent string // optional additional User-Agent fragment
 
 	Purchases *PurchasesService
 }
@@ -76,10 +75,6 @@
 	return googleapi.UserAgent + " " + s.UserAgent
 }
 
-func (s *Service) clientHeader() string {
-	return gensupport.GoogleClientHeader("20170210", s.GoogleClientHeaderElement)
-}
-
 func NewPurchasesService(s *Service) *PurchasesService {
 	rs := &PurchasesService{s: s}
 	return rs
@@ -188,7 +183,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	var body io.Reader = nil
 	c.urlParams_.Set("alt", alt)
 	urls := googleapi.ResolveRelative(c.s.BasePath, "{packageName}/subscriptions/{subscriptionId}/purchases/{token}/cancel")
@@ -316,7 +310,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	if c.ifNoneMatch_ != "" {
 		reqHeaders.Set("If-None-Match", c.ifNoneMatch_)
 	}
diff --git a/androidpublisher/v2/androidpublisher-gen.go b/androidpublisher/v2/androidpublisher-gen.go
index e5b60bd..cbf8721 100644
--- a/androidpublisher/v2/androidpublisher-gen.go
+++ b/androidpublisher/v2/androidpublisher-gen.go
@@ -65,10 +65,9 @@
 }
 
 type Service struct {
-	client                    *http.Client
-	BasePath                  string // API endpoint base URL
-	UserAgent                 string // optional additional User-Agent fragment
-	GoogleClientHeaderElement string // client header fragment, for Google use only
+	client    *http.Client
+	BasePath  string // API endpoint base URL
+	UserAgent string // optional additional User-Agent fragment
 
 	Edits *EditsService
 
@@ -88,10 +87,6 @@
 	return googleapi.UserAgent + " " + s.UserAgent
 }
 
-func (s *Service) clientHeader() string {
-	return gensupport.GoogleClientHeader("20170210", s.GoogleClientHeaderElement)
-}
-
 func NewEditsService(s *Service) *EditsService {
 	rs := &EditsService{s: s}
 	rs.Apklistings = NewEditsApklistingsService(s)
@@ -2524,7 +2519,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	var body io.Reader = nil
 	c.urlParams_.Set("alt", alt)
 	urls := googleapi.ResolveRelative(c.s.BasePath, "{packageName}/edits/{editId}:commit")
@@ -2660,7 +2654,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	var body io.Reader = nil
 	c.urlParams_.Set("alt", alt)
 	urls := googleapi.ResolveRelative(c.s.BasePath, "{packageName}/edits/{editId}")
@@ -2779,7 +2772,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	if c.ifNoneMatch_ != "" {
 		reqHeaders.Set("If-None-Match", c.ifNoneMatch_)
 	}
@@ -2917,7 +2909,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	var body io.Reader = nil
 	body, err := googleapi.WithoutDataWrapper.JSONReader(c.appedit)
 	if err != nil {
@@ -3052,7 +3043,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	var body io.Reader = nil
 	c.urlParams_.Set("alt", alt)
 	urls := googleapi.ResolveRelative(c.s.BasePath, "{packageName}/edits/{editId}:validate")
@@ -3191,7 +3181,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	var body io.Reader = nil
 	c.urlParams_.Set("alt", alt)
 	urls := googleapi.ResolveRelative(c.s.BasePath, "{packageName}/edits/{editId}/apks/{apkVersionCode}/listings/{language}")
@@ -3317,7 +3306,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	var body io.Reader = nil
 	c.urlParams_.Set("alt", alt)
 	urls := googleapi.ResolveRelative(c.s.BasePath, "{packageName}/edits/{editId}/apks/{apkVersionCode}/listings")
@@ -3448,7 +3436,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	if c.ifNoneMatch_ != "" {
 		reqHeaders.Set("If-None-Match", c.ifNoneMatch_)
 	}
@@ -3616,7 +3603,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	if c.ifNoneMatch_ != "" {
 		reqHeaders.Set("If-None-Match", c.ifNoneMatch_)
 	}
@@ -3770,7 +3756,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	var body io.Reader = nil
 	body, err := googleapi.WithoutDataWrapper.JSONReader(c.apklisting)
 	if err != nil {
@@ -3936,7 +3921,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	var body io.Reader = nil
 	body, err := googleapi.WithoutDataWrapper.JSONReader(c.apklisting)
 	if err != nil {
@@ -4101,7 +4085,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	var body io.Reader = nil
 	body, err := googleapi.WithoutDataWrapper.JSONReader(c.apksaddexternallyhostedrequest)
 	if err != nil {
@@ -4254,7 +4237,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	if c.ifNoneMatch_ != "" {
 		reqHeaders.Set("If-None-Match", c.ifNoneMatch_)
 	}
@@ -4443,7 +4425,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	var body io.Reader = nil
 	c.urlParams_.Set("alt", alt)
 	urls := googleapi.ResolveRelative(c.s.BasePath, "{packageName}/edits/{editId}/apks")
@@ -4700,7 +4681,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	var body io.Reader = nil
 	c.urlParams_.Set("alt", alt)
 	urls := googleapi.ResolveRelative(c.s.BasePath, "{packageName}/edits/{editId}/apks/{apkVersionCode}/deobfuscationFiles/{deobfuscationFileType}")
@@ -4933,7 +4913,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	if c.ifNoneMatch_ != "" {
 		reqHeaders.Set("If-None-Match", c.ifNoneMatch_)
 	}
@@ -5073,7 +5052,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	var body io.Reader = nil
 	body, err := googleapi.WithoutDataWrapper.JSONReader(c.appdetails)
 	if err != nil {
@@ -5217,7 +5195,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	var body io.Reader = nil
 	body, err := googleapi.WithoutDataWrapper.JSONReader(c.appdetails)
 	if err != nil {
@@ -5374,7 +5351,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	if c.ifNoneMatch_ != "" {
 		reqHeaders.Set("If-None-Match", c.ifNoneMatch_)
 	}
@@ -5543,7 +5519,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	var body io.Reader = nil
 	body, err := googleapi.WithoutDataWrapper.JSONReader(c.expansionfile)
 	if err != nil {
@@ -5717,7 +5692,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	var body io.Reader = nil
 	body, err := googleapi.WithoutDataWrapper.JSONReader(c.expansionfile)
 	if err != nil {
@@ -5941,7 +5915,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	var body io.Reader = nil
 	c.urlParams_.Set("alt", alt)
 	urls := googleapi.ResolveRelative(c.s.BasePath, "{packageName}/edits/{editId}/apks/{apkVersionCode}/expansionFiles/{expansionFileType}")
@@ -6170,7 +6143,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	var body io.Reader = nil
 	c.urlParams_.Set("alt", alt)
 	urls := googleapi.ResolveRelative(c.s.BasePath, "{packageName}/edits/{editId}/listings/{language}/{imageType}/{imageId}")
@@ -6326,7 +6298,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	var body io.Reader = nil
 	c.urlParams_.Set("alt", alt)
 	urls := googleapi.ResolveRelative(c.s.BasePath, "{packageName}/edits/{editId}/listings/{language}/{imageType}")
@@ -6512,7 +6483,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	if c.ifNoneMatch_ != "" {
 		reqHeaders.Set("If-None-Match", c.ifNoneMatch_)
 	}
@@ -6744,7 +6714,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	var body io.Reader = nil
 	c.urlParams_.Set("alt", alt)
 	urls := googleapi.ResolveRelative(c.s.BasePath, "{packageName}/edits/{editId}/listings/{language}/{imageType}")
@@ -6982,7 +6951,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	var body io.Reader = nil
 	c.urlParams_.Set("alt", alt)
 	urls := googleapi.ResolveRelative(c.s.BasePath, "{packageName}/edits/{editId}/listings/{language}")
@@ -7096,7 +7064,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	var body io.Reader = nil
 	c.urlParams_.Set("alt", alt)
 	urls := googleapi.ResolveRelative(c.s.BasePath, "{packageName}/edits/{editId}/listings")
@@ -7215,7 +7182,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	if c.ifNoneMatch_ != "" {
 		reqHeaders.Set("If-None-Match", c.ifNoneMatch_)
 	}
@@ -7372,7 +7338,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	if c.ifNoneMatch_ != "" {
 		reqHeaders.Set("If-None-Match", c.ifNoneMatch_)
 	}
@@ -7514,7 +7479,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	var body io.Reader = nil
 	body, err := googleapi.WithoutDataWrapper.JSONReader(c.listing)
 	if err != nil {
@@ -7668,7 +7632,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	var body io.Reader = nil
 	body, err := googleapi.WithoutDataWrapper.JSONReader(c.listing)
 	if err != nil {
@@ -7831,7 +7794,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	if c.ifNoneMatch_ != "" {
 		reqHeaders.Set("If-None-Match", c.ifNoneMatch_)
 	}
@@ -7990,7 +7952,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	var body io.Reader = nil
 	body, err := googleapi.WithoutDataWrapper.JSONReader(c.testers)
 	if err != nil {
@@ -8154,7 +8115,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	var body io.Reader = nil
 	body, err := googleapi.WithoutDataWrapper.JSONReader(c.testers)
 	if err != nil {
@@ -8328,7 +8288,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	if c.ifNoneMatch_ != "" {
 		reqHeaders.Set("If-None-Match", c.ifNoneMatch_)
 	}
@@ -8496,7 +8455,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	if c.ifNoneMatch_ != "" {
 		reqHeaders.Set("If-None-Match", c.ifNoneMatch_)
 	}
@@ -8640,7 +8598,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	var body io.Reader = nil
 	body, err := googleapi.WithoutDataWrapper.JSONReader(c.track2)
 	if err != nil {
@@ -8808,7 +8765,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	var body io.Reader = nil
 	body, err := googleapi.WithoutDataWrapper.JSONReader(c.track2)
 	if err != nil {
@@ -9006,7 +8962,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	if c.ifNoneMatch_ != "" {
 		reqHeaders.Set("If-None-Match", c.ifNoneMatch_)
 	}
@@ -9149,7 +9104,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	var body io.Reader = nil
 	body, err := googleapi.WithoutDataWrapper.JSONReader(c.inappproductsbatchrequest)
 	if err != nil {
@@ -9268,7 +9222,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	var body io.Reader = nil
 	c.urlParams_.Set("alt", alt)
 	urls := googleapi.ResolveRelative(c.s.BasePath, "{packageName}/inappproducts/{sku}")
@@ -9385,7 +9338,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	if c.ifNoneMatch_ != "" {
 		reqHeaders.Set("If-None-Match", c.ifNoneMatch_)
 	}
@@ -9531,7 +9483,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	var body io.Reader = nil
 	body, err := googleapi.WithoutDataWrapper.JSONReader(c.inappproduct)
 	if err != nil {
@@ -9698,7 +9649,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	if c.ifNoneMatch_ != "" {
 		reqHeaders.Set("If-None-Match", c.ifNoneMatch_)
 	}
@@ -9854,7 +9804,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	var body io.Reader = nil
 	body, err := googleapi.WithoutDataWrapper.JSONReader(c.inappproduct)
 	if err != nil {
@@ -10013,7 +9962,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	var body io.Reader = nil
 	body, err := googleapi.WithoutDataWrapper.JSONReader(c.inappproduct)
 	if err != nil {
@@ -10173,7 +10121,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	if c.ifNoneMatch_ != "" {
 		reqHeaders.Set("If-None-Match", c.ifNoneMatch_)
 	}
@@ -10321,7 +10268,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	var body io.Reader = nil
 	c.urlParams_.Set("alt", alt)
 	urls := googleapi.ResolveRelative(c.s.BasePath, "{packageName}/purchases/subscriptions/{subscriptionId}/tokens/{token}:cancel")
@@ -10440,7 +10386,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	var body io.Reader = nil
 	body, err := googleapi.WithoutDataWrapper.JSONReader(c.subscriptionpurchasesdeferrequest)
 	if err != nil {
@@ -10605,7 +10550,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	if c.ifNoneMatch_ != "" {
 		reqHeaders.Set("If-None-Match", c.ifNoneMatch_)
 	}
@@ -10754,7 +10698,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	var body io.Reader = nil
 	c.urlParams_.Set("alt", alt)
 	urls := googleapi.ResolveRelative(c.s.BasePath, "{packageName}/purchases/subscriptions/{subscriptionId}/tokens/{token}:refund")
@@ -10872,7 +10815,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	var body io.Reader = nil
 	c.urlParams_.Set("alt", alt)
 	urls := googleapi.ResolveRelative(c.s.BasePath, "{packageName}/purchases/subscriptions/{subscriptionId}/tokens/{token}:revoke")
@@ -11034,7 +10976,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	if c.ifNoneMatch_ != "" {
 		reqHeaders.Set("If-None-Match", c.ifNoneMatch_)
 	}
@@ -11207,7 +11148,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	if c.ifNoneMatch_ != "" {
 		reqHeaders.Set("If-None-Match", c.ifNoneMatch_)
 	}
@@ -11382,7 +11322,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	if c.ifNoneMatch_ != "" {
 		reqHeaders.Set("If-None-Match", c.ifNoneMatch_)
 	}
@@ -11531,7 +11470,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	var body io.Reader = nil
 	body, err := googleapi.WithoutDataWrapper.JSONReader(c.reviewsreplyrequest)
 	if err != nil {
diff --git a/api-list.json b/api-list.json
index a6170d9..310a427 100644
--- a/api-list.json
+++ b/api-list.json
@@ -340,36 +340,6 @@
   },
   {
    "kind": "discovery#directoryItem",
-   "id": "appengine:v1alpha",
-   "name": "appengine",
-   "version": "v1alpha",
-   "title": "Google App Engine Admin API",
-   "description": "The App Engine Admin API enables developers to provision and manage their App Engine applications.",
-   "discoveryRestUrl": "https://appengine.googleapis.com/$discovery/rest?version=v1alpha",
-   "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"
-   },
-   "documentationLink": "https://cloud.google.com/appengine/docs/admin-api/",
-   "preferred": true
-  },
-  {
-   "kind": "discovery#directoryItem",
-   "id": "appengine:v1beta",
-   "name": "appengine",
-   "version": "v1beta",
-   "title": "Google App Engine Admin API",
-   "description": "The App Engine Admin API enables developers to provision and manage their App Engine applications.",
-   "discoveryRestUrl": "https://appengine.googleapis.com/$discovery/rest?version=v1beta",
-   "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"
-   },
-   "documentationLink": "https://cloud.google.com/appengine/docs/admin-api/",
-   "preferred": false
-  },
-  {
-   "kind": "discovery#directoryItem",
    "id": "appsactivity:v1",
    "name": "appsactivity",
    "version": "v1",
@@ -624,21 +594,6 @@
   },
   {
    "kind": "discovery#directoryItem",
-   "id": "cloudkms:v1beta1",
-   "name": "cloudkms",
-   "version": "v1beta1",
-   "title": "Google Cloud Key Management Service (KMS) API",
-   "description": "Manages encryption for your cloud services the same way you do on-premise. You can generate, use, rotate, and destroy AES256 encryption keys.",
-   "discoveryRestUrl": "https://cloudkms.googleapis.com/$discovery/rest?version=v1beta1",
-   "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"
-   },
-   "documentationLink": "https://cloud.google.com/kms/",
-   "preferred": false
-  },
-  {
-   "kind": "discovery#directoryItem",
    "id": "cloudmonitoring:v2beta2",
    "name": "cloudmonitoring",
    "version": "v2beta2",
@@ -1093,6 +1048,21 @@
   },
   {
    "kind": "discovery#directoryItem",
+   "id": "dlp:v2beta1",
+   "name": "dlp",
+   "version": "v2beta1",
+   "title": "DLP API",
+   "description": "The Google Data Loss Prevention API provides methods for detection of privacy-sensitive fragments in text, images, and Google Cloud Platform storage repositories.",
+   "discoveryRestUrl": "https://dlp.googleapis.com/$discovery/rest?version=v2beta1",
+   "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"
+   },
+   "documentationLink": "https://cloud.google.com/dlp/docs/",
+   "preferred": true
+  },
+  {
+   "kind": "discovery#directoryItem",
    "id": "dns:v1",
    "name": "dns",
    "version": "v1",
@@ -1396,6 +1366,36 @@
   },
   {
    "kind": "discovery#directoryItem",
+   "id": "appengine:v1alpha",
+   "name": "appengine",
+   "version": "v1alpha",
+   "title": "Google App Engine Admin API",
+   "description": "Provisions and manages App Engine applications.",
+   "discoveryRestUrl": "https://www.googleapis.com/discovery/v1/apis/appengine/v1alpha/rest",
+   "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/appengine/docs/admin-api/",
+   "preferred": false
+  },
+  {
+   "kind": "discovery#directoryItem",
+   "id": "appengine:v1beta",
+   "name": "appengine",
+   "version": "v1beta",
+   "title": "Google App Engine Admin API",
+   "description": "Provisions and manages App Engine applications.",
+   "discoveryRestUrl": "https://www.googleapis.com/discovery/v1/apis/appengine/v1beta/rest",
+   "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/appengine/docs/admin-api/",
+   "preferred": false
+  },
+  {
+   "kind": "discovery#directoryItem",
    "id": "appengine:v1",
    "name": "appengine",
    "version": "v1",
diff --git a/appengine/v1/appengine-api.json b/appengine/v1/appengine-api.json
index 0972739..8ea2a6b 100644
--- a/appengine/v1/appengine-api.json
+++ b/appengine/v1/appengine-api.json
@@ -1,11 +1,11 @@
 {
  "kind": "discovery#restDescription",
- "etag": "\"tbys6C40o18GZwyMen5GMkdK-3s/SCAzF4YnJN_-_ipPBdcy29eZhto\"",
+ "etag": "\"tbys6C40o18GZwyMen5GMkdK-3s/jvAB1N_FX7xzyPOdjzd58bQdWjQ\"",
  "discoveryVersion": "v1",
  "id": "appengine:v1",
  "name": "appengine",
  "version": "v1",
- "revision": "20170223",
+ "revision": "20170324",
  "title": "Google App Engine Admin API",
  "description": "Provisions and manages App Engine applications.",
  "ownerDomain": "google.com",
@@ -212,7 +212,7 @@
     },
     "dispatchRules": {
      "type": "array",
-     "description": "HTTP path dispatch rules for requests to the application that do not explicitly target a service or version. Rules are order-dependent.@OutputOnly",
+     "description": "HTTP path dispatch rules for requests to the application that do not explicitly target a service or version. Rules are order-dependent. Up to 20 dispatch rules can be supported.@OutputOnly",
      "items": {
       "$ref": "UrlDispatchRule"
      }
@@ -271,7 +271,7 @@
     },
     "path": {
      "type": "string",
-     "description": "Pathname within the host. Must start with a \"/\". A single \"*\" can be included at the end of the path. The sum of the lengths of the domain and path may not exceed 100 characters."
+     "description": "Pathname within the host. Must start with a \"/\". A single \"*\" can be included at the end of the path.The sum of the lengths of the domain and path may not exceed 100 characters."
     },
     "service": {
      "type": "string",
@@ -355,7 +355,8 @@
      "enum": [
       "UNSPECIFIED",
       "COOKIE",
-      "IP"
+      "IP",
+      "RANDOM"
      ]
     },
     "allocations": {
@@ -1074,12 +1075,12 @@
      "type": "string",
      "description": "Host header to send when performing a HTTP Readiness check. Example: \"myapp.appspot.com\""
     },
-    "unhealthyThreshold": {
+    "failureThreshold": {
      "type": "integer",
      "description": "Number of consecutive failed checks required before removing traffic.",
      "format": "uint32"
     },
-    "healthyThreshold": {
+    "successThreshold": {
      "type": "integer",
      "description": "Number of consecutive successful checks required before receiving traffic.",
      "format": "uint32"
@@ -1107,12 +1108,12 @@
      "type": "string",
      "description": "Host header to send when performing a HTTP Liveness check. Example: \"myapp.appspot.com\""
     },
-    "unhealthyThreshold": {
+    "failureThreshold": {
      "type": "integer",
      "description": "Number of consecutive failed checks required before considering the VM unhealthy.",
      "format": "uint32"
     },
-    "healthyThreshold": {
+    "successThreshold": {
      "type": "integer",
      "description": "Number of consecutive successful checks required before considering the VM healthy.",
      "format": "uint32"
@@ -1457,44 +1458,6 @@
     }
    }
   },
-  "OperationMetadataV1Alpha": {
-   "id": "OperationMetadataV1Alpha",
-   "type": "object",
-   "description": "Metadata for the given google.longrunning.Operation.",
-   "properties": {
-    "method": {
-     "type": "string",
-     "description": "API method that initiated this operation. Example: google.appengine.v1alpha.Versions.CreateVersion.@OutputOnly"
-    },
-    "insertTime": {
-     "type": "string",
-     "description": "Time that this operation was created.@OutputOnly"
-    },
-    "endTime": {
-     "type": "string",
-     "description": "Time that this operation completed.@OutputOnly"
-    },
-    "user": {
-     "type": "string",
-     "description": "User who requested this operation.@OutputOnly"
-    },
-    "target": {
-     "type": "string",
-     "description": "Name of the resource that this operation is acting on. Example: apps/myapp/services/default.@OutputOnly"
-    },
-    "ephemeralMessage": {
-     "type": "string",
-     "description": "Ephemeral message that may change every time the operation is polled. @OutputOnly"
-    },
-    "warning": {
-     "type": "array",
-     "description": "Durable messages that persist on every operation poll. @OutputOnly",
-     "items": {
-      "type": "string"
-     }
-    }
-   }
-  },
   "OperationMetadataV1Beta": {
    "id": "OperationMetadataV1Beta",
    "type": "object",
diff --git a/appengine/v1/appengine-gen.go b/appengine/v1/appengine-gen.go
index 61be99b..1265af5 100644
--- a/appengine/v1/appengine-gen.go
+++ b/appengine/v1/appengine-gen.go
@@ -67,10 +67,9 @@
 }
 
 type APIService struct {
-	client                    *http.Client
-	BasePath                  string // API endpoint base URL
-	UserAgent                 string // optional additional User-Agent fragment
-	GoogleClientHeaderElement string // client header fragment, for Google use only
+	client    *http.Client
+	BasePath  string // API endpoint base URL
+	UserAgent string // optional additional User-Agent fragment
 
 	Apps *AppsService
 }
@@ -82,10 +81,6 @@
 	return googleapi.UserAgent + " " + s.UserAgent
 }
 
-func (s *APIService) clientHeader() string {
-	return gensupport.GoogleClientHeader("20170210", s.GoogleClientHeaderElement)
-}
-
 func NewAppsService(s *APIService) *AppsService {
 	rs := &AppsService{s: s}
 	rs.Locations = NewAppsLocationsService(s)
@@ -274,7 +269,8 @@
 
 	// DispatchRules: HTTP path dispatch rules for requests to the
 	// application that do not explicitly target a service or version. Rules
-	// are order-dependent.@OutputOnly
+	// are order-dependent. Up to 20 dispatch rules can be
+	// supported.@OutputOnly
 	DispatchRules []*UrlDispatchRule `json:"dispatchRules,omitempty"`
 
 	// GcrDomain: The Google Container Registry domain used for storing
@@ -1190,9 +1186,9 @@
 	// CheckInterval: Interval between health checks.
 	CheckInterval string `json:"checkInterval,omitempty"`
 
-	// HealthyThreshold: Number of consecutive successful checks required
-	// before considering the VM healthy.
-	HealthyThreshold int64 `json:"healthyThreshold,omitempty"`
+	// FailureThreshold: Number of consecutive failed checks required before
+	// considering the VM unhealthy.
+	FailureThreshold int64 `json:"failureThreshold,omitempty"`
 
 	// Host: Host header to send when performing a HTTP Liveness check.
 	// Example: "myapp.appspot.com"
@@ -1205,13 +1201,13 @@
 	// Path: The request path.
 	Path string `json:"path,omitempty"`
 
+	// SuccessThreshold: Number of consecutive successful checks required
+	// before considering the VM healthy.
+	SuccessThreshold int64 `json:"successThreshold,omitempty"`
+
 	// Timeout: Time before the check is considered failed.
 	Timeout string `json:"timeout,omitempty"`
 
-	// UnhealthyThreshold: Number of consecutive failed checks required
-	// before considering the VM unhealthy.
-	UnhealthyThreshold int64 `json:"unhealthyThreshold,omitempty"`
-
 	// ForceSendFields is a list of field names (e.g. "CheckInterval") to
 	// unconditionally include in API requests. By default, fields with
 	// empty values are omitted from API requests. However, any non-pointer,
@@ -1647,57 +1643,6 @@
 	return gensupport.MarshalJSON(raw, s.ForceSendFields, s.NullFields)
 }
 
-// OperationMetadataV1Alpha: Metadata for the given
-// google.longrunning.Operation.
-type OperationMetadataV1Alpha struct {
-	// EndTime: Time that this operation completed.@OutputOnly
-	EndTime string `json:"endTime,omitempty"`
-
-	// EphemeralMessage: Ephemeral message that may change every time the
-	// operation is polled. @OutputOnly
-	EphemeralMessage string `json:"ephemeralMessage,omitempty"`
-
-	// InsertTime: Time that this operation was created.@OutputOnly
-	InsertTime string `json:"insertTime,omitempty"`
-
-	// Method: API method that initiated this operation. Example:
-	// google.appengine.v1alpha.Versions.CreateVersion.@OutputOnly
-	Method string `json:"method,omitempty"`
-
-	// Target: Name of the resource that this operation is acting on.
-	// Example: apps/myapp/services/default.@OutputOnly
-	Target string `json:"target,omitempty"`
-
-	// User: User who requested this operation.@OutputOnly
-	User string `json:"user,omitempty"`
-
-	// Warning: Durable messages that persist on every operation poll.
-	// @OutputOnly
-	Warning []string `json:"warning,omitempty"`
-
-	// ForceSendFields is a list of field names (e.g. "EndTime") to
-	// unconditionally include in API requests. By default, fields with
-	// empty values are omitted from API requests. However, any non-pointer,
-	// non-interface field appearing in ForceSendFields will be sent to the
-	// server regardless of whether the field is empty or not. This may be
-	// used to include empty fields in Patch requests.
-	ForceSendFields []string `json:"-"`
-
-	// NullFields is a list of field names (e.g. "EndTime") to include in
-	// API requests with the JSON null value. By default, fields with empty
-	// values are omitted from API requests. However, any field with an
-	// empty value appearing in NullFields will be sent to the server as
-	// null. It is an error if a field in this list has a non-empty value.
-	// This may be used to include null fields in Patch requests.
-	NullFields []string `json:"-"`
-}
-
-func (s *OperationMetadataV1Alpha) MarshalJSON() ([]byte, error) {
-	type noMethod OperationMetadataV1Alpha
-	raw := noMethod(*s)
-	return gensupport.MarshalJSON(raw, s.ForceSendFields, s.NullFields)
-}
-
 // OperationMetadataV1Beta: Metadata for the given
 // google.longrunning.Operation.
 type OperationMetadataV1Beta struct {
@@ -1798,9 +1743,9 @@
 	// CheckInterval: Interval between health checks.
 	CheckInterval string `json:"checkInterval,omitempty"`
 
-	// HealthyThreshold: Number of consecutive successful checks required
-	// before receiving traffic.
-	HealthyThreshold int64 `json:"healthyThreshold,omitempty"`
+	// FailureThreshold: Number of consecutive failed checks required before
+	// removing traffic.
+	FailureThreshold int64 `json:"failureThreshold,omitempty"`
 
 	// Host: Host header to send when performing a HTTP Readiness check.
 	// Example: "myapp.appspot.com"
@@ -1809,13 +1754,13 @@
 	// Path: The request path.
 	Path string `json:"path,omitempty"`
 
+	// SuccessThreshold: Number of consecutive successful checks required
+	// before receiving traffic.
+	SuccessThreshold int64 `json:"successThreshold,omitempty"`
+
 	// Timeout: Time before the check is considered failed.
 	Timeout string `json:"timeout,omitempty"`
 
-	// UnhealthyThreshold: Number of consecutive failed checks required
-	// before removing traffic.
-	UnhealthyThreshold int64 `json:"unhealthyThreshold,omitempty"`
-
 	// ForceSendFields is a list of field names (e.g. "CheckInterval") to
 	// unconditionally include in API requests. By default, fields with
 	// empty values are omitted from API requests. However, any non-pointer,
@@ -2164,6 +2109,7 @@
 	//   "UNSPECIFIED"
 	//   "COOKIE"
 	//   "IP"
+	//   "RANDOM"
 	ShardBy string `json:"shardBy,omitempty"`
 
 	// ForceSendFields is a list of field names (e.g. "Allocations") to
@@ -2198,7 +2144,7 @@
 	Domain string `json:"domain,omitempty"`
 
 	// Path: Pathname within the host. Must start with a "/". A single "*"
-	// can be included at the end of the path. The sum of the lengths of the
+	// can be included at the end of the path.The sum of the lengths of the
 	// domain and path may not exceed 100 characters.
 	Path string `json:"path,omitempty"`
 
@@ -2651,7 +2597,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	var body io.Reader = nil
 	body, err := googleapi.WithoutDataWrapper.JSONReader(c.application)
 	if err != nil {
@@ -2780,7 +2725,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	if c.ifNoneMatch_ != "" {
 		reqHeaders.Set("If-None-Match", c.ifNoneMatch_)
 	}
@@ -2921,7 +2865,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	var body io.Reader = nil
 	body, err := googleapi.WithoutDataWrapper.JSONReader(c.application)
 	if err != nil {
@@ -3064,7 +3007,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	var body io.Reader = nil
 	body, err := googleapi.WithoutDataWrapper.JSONReader(c.repairapplicationrequest)
 	if err != nil {
@@ -3209,7 +3151,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	if c.ifNoneMatch_ != "" {
 		reqHeaders.Set("If-None-Match", c.ifNoneMatch_)
 	}
@@ -3379,7 +3320,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	if c.ifNoneMatch_ != "" {
 		reqHeaders.Set("If-None-Match", c.ifNoneMatch_)
 	}
@@ -3560,7 +3500,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	if c.ifNoneMatch_ != "" {
 		reqHeaders.Set("If-None-Match", c.ifNoneMatch_)
 	}
@@ -3733,7 +3672,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	if c.ifNoneMatch_ != "" {
 		reqHeaders.Set("If-None-Match", c.ifNoneMatch_)
 	}
@@ -3901,7 +3839,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	var body io.Reader = nil
 	c.urlParams_.Set("alt", alt)
 	urls := googleapi.ResolveRelative(c.s.BasePath, "v1/apps/{appsId}/services/{servicesId}")
@@ -4046,7 +3983,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	if c.ifNoneMatch_ != "" {
 		reqHeaders.Set("If-None-Match", c.ifNoneMatch_)
 	}
@@ -4208,7 +4144,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	if c.ifNoneMatch_ != "" {
 		reqHeaders.Set("If-None-Match", c.ifNoneMatch_)
 	}
@@ -4400,7 +4335,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	var body io.Reader = nil
 	body, err := googleapi.WithoutDataWrapper.JSONReader(c.service)
 	if err != nil {
@@ -4554,7 +4488,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	var body io.Reader = nil
 	body, err := googleapi.WithoutDataWrapper.JSONReader(c.version)
 	if err != nil {
@@ -4698,7 +4631,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	var body io.Reader = nil
 	c.urlParams_.Set("alt", alt)
 	urls := googleapi.ResolveRelative(c.s.BasePath, "v1/apps/{appsId}/services/{servicesId}/versions/{versionsId}")
@@ -4866,7 +4798,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	if c.ifNoneMatch_ != "" {
 		reqHeaders.Set("If-None-Match", c.ifNoneMatch_)
 	}
@@ -5058,7 +4989,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	if c.ifNoneMatch_ != "" {
 		reqHeaders.Set("If-None-Match", c.ifNoneMatch_)
 	}
@@ -5267,7 +5197,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	var body io.Reader = nil
 	body, err := googleapi.WithoutDataWrapper.JSONReader(c.version)
 	if err != nil {
@@ -5434,7 +5363,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	var body io.Reader = nil
 	body, err := googleapi.WithoutDataWrapper.JSONReader(c.debuginstancerequest)
 	if err != nil {
@@ -5596,7 +5524,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	var body io.Reader = nil
 	c.urlParams_.Set("alt", alt)
 	urls := googleapi.ResolveRelative(c.s.BasePath, "v1/apps/{appsId}/services/{servicesId}/versions/{versionsId}/instances/{instancesId}")
@@ -5761,7 +5688,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	if c.ifNoneMatch_ != "" {
 		reqHeaders.Set("If-None-Match", c.ifNoneMatch_)
 	}
@@ -5946,7 +5872,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	if c.ifNoneMatch_ != "" {
 		reqHeaders.Set("If-None-Match", c.ifNoneMatch_)
 	}
diff --git a/appengine/v1alpha/appengine-api.json b/appengine/v1alpha/appengine-api.json
index adbd3c9..cd6a027 100644
--- a/appengine/v1alpha/appengine-api.json
+++ b/appengine/v1alpha/appengine-api.json
@@ -1,2544 +1,584 @@
 {
-  "rootUrl": "https://appengine.googleapis.com/",
-  "basePath": "",
-  "ownerDomain": "google.com",
-  "name": "appengine",
-  "batchPath": "batch",
-  "revision": "20170302",
-  "id": "appengine:v1alpha",
-  "documentationLink": "https://cloud.google.com/appengine/docs/admin-api/",
-  "title": "Google App Engine Admin API",
-  "discoveryVersion": "v1",
-  "ownerName": "Google",
-  "resources": {
-    "apps": {
-      "resources": {
-        "services": {
-          "methods": {
-            "delete": {
-              "httpMethod": "DELETE",
-              "response": {
-                "$ref": "Operation"
-              },
-              "parameterOrder": [
-                "appsId",
-                "servicesId"
-              ],
-              "parameters": {
-                "servicesId": {
-                  "location": "path",
-                  "description": "Part of `name`. See documentation of `appsId`.",
-                  "required": true,
-                  "type": "string"
-                },
-                "appsId": {
-                  "description": "Part of `name`. Name of the resource requested. Example: apps/myapp/services/default.",
-                  "required": true,
-                  "type": "string",
-                  "location": "path"
-                }
-              },
-              "scopes": [
-                "https://www.googleapis.com/auth/cloud-platform"
-              ],
-              "flatPath": "v1alpha/apps/{appsId}/services/{servicesId}",
-              "id": "appengine.apps.services.delete",
-              "path": "v1alpha/apps/{appsId}/services/{servicesId}",
-              "description": "Deletes the specified service and all enclosed versions."
-            },
-            "list": {
-              "description": "Lists all the services in the application.",
-              "response": {
-                "$ref": "ListServicesResponse"
-              },
-              "parameterOrder": [
-                "appsId"
-              ],
-              "httpMethod": "GET",
-              "parameters": {
-                "appsId": {
-                  "description": "Part of `parent`. Name of the parent Application resource. Example: apps/myapp.",
-                  "required": true,
-                  "type": "string",
-                  "location": "path"
-                },
-                "pageToken": {
-                  "description": "Continuation token for fetching the next page of results.",
-                  "type": "string",
-                  "location": "query"
-                },
-                "pageSize": {
-                  "description": "Maximum results to return per page.",
-                  "format": "int32",
-                  "type": "integer",
-                  "location": "query"
-                }
-              },
-              "scopes": [
-                "https://www.googleapis.com/auth/appengine.admin",
-                "https://www.googleapis.com/auth/cloud-platform",
-                "https://www.googleapis.com/auth/cloud-platform.read-only"
-              ],
-              "flatPath": "v1alpha/apps/{appsId}/services",
-              "path": "v1alpha/apps/{appsId}/services",
-              "id": "appengine.apps.services.list"
-            },
-            "get": {
-              "httpMethod": "GET",
-              "parameterOrder": [
-                "appsId",
-                "servicesId"
-              ],
-              "response": {
-                "$ref": "Service"
-              },
-              "parameters": {
-                "appsId": {
-                  "description": "Part of `name`. Name of the resource requested. Example: apps/myapp/services/default.",
-                  "required": true,
-                  "type": "string",
-                  "location": "path"
-                },
-                "servicesId": {
-                  "location": "path",
-                  "description": "Part of `name`. See documentation of `appsId`.",
-                  "required": true,
-                  "type": "string"
-                }
-              },
-              "scopes": [
-                "https://www.googleapis.com/auth/appengine.admin",
-                "https://www.googleapis.com/auth/cloud-platform",
-                "https://www.googleapis.com/auth/cloud-platform.read-only"
-              ],
-              "flatPath": "v1alpha/apps/{appsId}/services/{servicesId}",
-              "id": "appengine.apps.services.get",
-              "path": "v1alpha/apps/{appsId}/services/{servicesId}",
-              "description": "Gets the current configuration of the specified service."
-            },
-            "patch": {
-              "request": {
-                "$ref": "Service"
-              },
-              "description": "Updates the configuration of the specified service.",
-              "response": {
-                "$ref": "Operation"
-              },
-              "parameterOrder": [
-                "appsId",
-                "servicesId"
-              ],
-              "httpMethod": "PATCH",
-              "parameters": {
-                "updateMask": {
-                  "location": "query",
-                  "description": "Standard field mask for the set of fields to be updated.",
-                  "format": "google-fieldmask",
-                  "type": "string"
-                },
-                "servicesId": {
-                  "description": "Part of `name`. See documentation of `appsId`.",
-                  "required": true,
-                  "type": "string",
-                  "location": "path"
-                },
-                "appsId": {
-                  "description": "Part of `name`. Name of the resource to update. Example: apps/myapp/services/default.",
-                  "required": true,
-                  "type": "string",
-                  "location": "path"
-                },
-                "migrateTraffic": {
-                  "description": "Set to true to gradually shift traffic to one or more versions that you specify. By default, traffic is shifted immediately. For gradual traffic migration, the target versions must be located within instances that are configured for both warmup requests (https://cloud.google.com/appengine/docs/admin-api/reference/rest/v1alpha/apps.services.versions#inboundservicetype) and automatic scaling (https://cloud.google.com/appengine/docs/admin-api/reference/rest/v1alpha/apps.services.versions#automaticscaling). You must specify the shardBy (https://cloud.google.com/appengine/docs/admin-api/reference/rest/v1alpha/apps.services#shardby) field in the Service resource. Gradual traffic migration is not supported in the App Engine flexible environment. For examples, see Migrating and Splitting Traffic (https://cloud.google.com/appengine/docs/admin-api/migrating-splitting-traffic).",
-                  "type": "boolean",
-                  "location": "query"
-                }
-              },
-              "scopes": [
-                "https://www.googleapis.com/auth/cloud-platform"
-              ],
-              "flatPath": "v1alpha/apps/{appsId}/services/{servicesId}",
-              "path": "v1alpha/apps/{appsId}/services/{servicesId}",
-              "id": "appengine.apps.services.patch"
-            }
-          },
-          "resources": {
-            "versions": {
-              "methods": {
-                "delete": {
-                  "description": "Deletes an existing Version resource.",
-                  "response": {
-                    "$ref": "Operation"
-                  },
-                  "parameterOrder": [
-                    "appsId",
-                    "servicesId",
-                    "versionsId"
-                  ],
-                  "httpMethod": "DELETE",
-                  "scopes": [
-                    "https://www.googleapis.com/auth/cloud-platform"
-                  ],
-                  "parameters": {
-                    "servicesId": {
-                      "location": "path",
-                      "description": "Part of `name`. See documentation of `appsId`.",
-                      "required": true,
-                      "type": "string"
-                    },
-                    "appsId": {
-                      "description": "Part of `name`. Name of the resource requested. Example: apps/myapp/services/default/versions/v1.",
-                      "required": true,
-                      "type": "string",
-                      "location": "path"
-                    },
-                    "versionsId": {
-                      "description": "Part of `name`. See documentation of `appsId`.",
-                      "required": true,
-                      "type": "string",
-                      "location": "path"
-                    }
-                  },
-                  "flatPath": "v1alpha/apps/{appsId}/services/{servicesId}/versions/{versionsId}",
-                  "path": "v1alpha/apps/{appsId}/services/{servicesId}/versions/{versionsId}",
-                  "id": "appengine.apps.services.versions.delete"
-                },
-                "list": {
-                  "description": "Lists the versions of a service.",
-                  "httpMethod": "GET",
-                  "response": {
-                    "$ref": "ListVersionsResponse"
-                  },
-                  "parameterOrder": [
-                    "appsId",
-                    "servicesId"
-                  ],
-                  "scopes": [
-                    "https://www.googleapis.com/auth/appengine.admin",
-                    "https://www.googleapis.com/auth/cloud-platform",
-                    "https://www.googleapis.com/auth/cloud-platform.read-only"
-                  ],
-                  "parameters": {
-                    "appsId": {
-                      "description": "Part of `parent`. Name of the parent Service resource. Example: apps/myapp/services/default.",
-                      "required": true,
-                      "type": "string",
-                      "location": "path"
-                    },
-                    "pageToken": {
-                      "location": "query",
-                      "description": "Continuation token for fetching the next page of results.",
-                      "type": "string"
-                    },
-                    "pageSize": {
-                      "description": "Maximum results to return per page.",
-                      "format": "int32",
-                      "type": "integer",
-                      "location": "query"
-                    },
-                    "view": {
-                      "location": "query",
-                      "enum": [
-                        "BASIC",
-                        "FULL"
-                      ],
-                      "description": "Controls the set of fields returned in the List response.",
-                      "type": "string"
-                    },
-                    "servicesId": {
-                      "description": "Part of `parent`. See documentation of `appsId`.",
-                      "required": true,
-                      "type": "string",
-                      "location": "path"
-                    }
-                  },
-                  "flatPath": "v1alpha/apps/{appsId}/services/{servicesId}/versions",
-                  "id": "appengine.apps.services.versions.list",
-                  "path": "v1alpha/apps/{appsId}/services/{servicesId}/versions"
-                },
-                "get": {
-                  "id": "appengine.apps.services.versions.get",
-                  "path": "v1alpha/apps/{appsId}/services/{servicesId}/versions/{versionsId}",
-                  "description": "Gets the specified Version resource. By default, only a BASIC_VIEW will be returned. Specify the FULL_VIEW parameter to get the full resource.",
-                  "parameterOrder": [
-                    "appsId",
-                    "servicesId",
-                    "versionsId"
-                  ],
-                  "response": {
-                    "$ref": "Version"
-                  },
-                  "httpMethod": "GET",
-                  "parameters": {
-                    "appsId": {
-                      "description": "Part of `name`. Name of the resource requested. Example: apps/myapp/services/default/versions/v1.",
-                      "required": true,
-                      "type": "string",
-                      "location": "path"
-                    },
-                    "versionsId": {
-                      "description": "Part of `name`. See documentation of `appsId`.",
-                      "required": true,
-                      "type": "string",
-                      "location": "path"
-                    },
-                    "view": {
-                      "enum": [
-                        "BASIC",
-                        "FULL"
-                      ],
-                      "description": "Controls the set of fields returned in the Get response.",
-                      "type": "string",
-                      "location": "query"
-                    },
-                    "servicesId": {
-                      "location": "path",
-                      "description": "Part of `name`. See documentation of `appsId`.",
-                      "required": true,
-                      "type": "string"
-                    }
-                  },
-                  "scopes": [
-                    "https://www.googleapis.com/auth/appengine.admin",
-                    "https://www.googleapis.com/auth/cloud-platform",
-                    "https://www.googleapis.com/auth/cloud-platform.read-only"
-                  ],
-                  "flatPath": "v1alpha/apps/{appsId}/services/{servicesId}/versions/{versionsId}"
-                },
-                "patch": {
-                  "description": "Updates the specified Version resource. You can specify the following fields depending on the App Engine environment and type of scaling that the version resource uses:\nserving_status (https://cloud.google.com/appengine/docs/admin-api/reference/rest/v1alpha/apps.services.versions#Version.FIELDS.serving_status):  For Version resources that use basic scaling, manual scaling, or run in  the App Engine flexible environment.\ninstance_class (https://cloud.google.com/appengine/docs/admin-api/reference/rest/v1alpha/apps.services.versions#Version.FIELDS.instance_class):  For Version resources that run in the App Engine standard environment.\nautomatic_scaling.min_idle_instances (https://cloud.google.com/appengine/docs/admin-api/reference/rest/v1alpha/apps.services.versions#Version.FIELDS.automatic_scaling):  For Version resources that use automatic scaling and run in the App  Engine standard environment.\nautomatic_scaling.max_idle_instances (https://cloud.google.com/appengine/docs/admin-api/reference/rest/v1alpha/apps.services.versions#Version.FIELDS.automatic_scaling):  For Version resources that use automatic scaling and run in the App  Engine standard environment.",
-                  "request": {
-                    "$ref": "Version"
-                  },
-                  "response": {
-                    "$ref": "Operation"
-                  },
-                  "parameterOrder": [
-                    "appsId",
-                    "servicesId",
-                    "versionsId"
-                  ],
-                  "httpMethod": "PATCH",
-                  "scopes": [
-                    "https://www.googleapis.com/auth/cloud-platform"
-                  ],
-                  "parameters": {
-                    "updateMask": {
-                      "description": "Standard field mask for the set of fields to be updated.",
-                      "format": "google-fieldmask",
-                      "type": "string",
-                      "location": "query"
-                    },
-                    "servicesId": {
-                      "description": "Part of `name`. See documentation of `appsId`.",
-                      "required": true,
-                      "type": "string",
-                      "location": "path"
-                    },
-                    "appsId": {
-                      "location": "path",
-                      "description": "Part of `name`. Name of the resource to update. Example: apps/myapp/services/default/versions/1.",
-                      "required": true,
-                      "type": "string"
-                    },
-                    "versionsId": {
-                      "description": "Part of `name`. See documentation of `appsId`.",
-                      "required": true,
-                      "type": "string",
-                      "location": "path"
-                    }
-                  },
-                  "flatPath": "v1alpha/apps/{appsId}/services/{servicesId}/versions/{versionsId}",
-                  "path": "v1alpha/apps/{appsId}/services/{servicesId}/versions/{versionsId}",
-                  "id": "appengine.apps.services.versions.patch"
-                },
-                "create": {
-                  "response": {
-                    "$ref": "Operation"
-                  },
-                  "parameterOrder": [
-                    "appsId",
-                    "servicesId"
-                  ],
-                  "httpMethod": "POST",
-                  "parameters": {
-                    "servicesId": {
-                      "location": "path",
-                      "description": "Part of `parent`. See documentation of `appsId`.",
-                      "required": true,
-                      "type": "string"
-                    },
-                    "appsId": {
-                      "description": "Part of `parent`. Name of the parent resource to create this version under. Example: apps/myapp/services/default.",
-                      "required": true,
-                      "type": "string",
-                      "location": "path"
-                    }
-                  },
-                  "scopes": [
-                    "https://www.googleapis.com/auth/cloud-platform"
-                  ],
-                  "flatPath": "v1alpha/apps/{appsId}/services/{servicesId}/versions",
-                  "path": "v1alpha/apps/{appsId}/services/{servicesId}/versions",
-                  "id": "appengine.apps.services.versions.create",
-                  "request": {
-                    "$ref": "Version"
-                  },
-                  "description": "Deploys code and resource files to a new version."
-                }
-              },
-              "resources": {
-                "instances": {
-                  "methods": {
-                    "delete": {
-                      "response": {
-                        "$ref": "Operation"
-                      },
-                      "parameterOrder": [
-                        "appsId",
-                        "servicesId",
-                        "versionsId",
-                        "instancesId"
-                      ],
-                      "httpMethod": "DELETE",
-                      "parameters": {
-                        "appsId": {
-                          "location": "path",
-                          "description": "Part of `name`. Name of the resource requested. Example: apps/myapp/services/default/versions/v1/instances/instance-1.",
-                          "required": true,
-                          "type": "string"
-                        },
-                        "instancesId": {
-                          "description": "Part of `name`. See documentation of `appsId`.",
-                          "required": true,
-                          "type": "string",
-                          "location": "path"
-                        },
-                        "versionsId": {
-                          "location": "path",
-                          "description": "Part of `name`. See documentation of `appsId`.",
-                          "required": true,
-                          "type": "string"
-                        },
-                        "servicesId": {
-                          "description": "Part of `name`. See documentation of `appsId`.",
-                          "required": true,
-                          "type": "string",
-                          "location": "path"
-                        }
-                      },
-                      "scopes": [
-                        "https://www.googleapis.com/auth/cloud-platform"
-                      ],
-                      "flatPath": "v1alpha/apps/{appsId}/services/{servicesId}/versions/{versionsId}/instances/{instancesId}",
-                      "path": "v1alpha/apps/{appsId}/services/{servicesId}/versions/{versionsId}/instances/{instancesId}",
-                      "id": "appengine.apps.services.versions.instances.delete",
-                      "description": "Stops a running instance."
-                    },
-                    "list": {
-                      "httpMethod": "GET",
-                      "response": {
-                        "$ref": "ListInstancesResponse"
-                      },
-                      "parameterOrder": [
-                        "appsId",
-                        "servicesId",
-                        "versionsId"
-                      ],
-                      "scopes": [
-                        "https://www.googleapis.com/auth/appengine.admin",
-                        "https://www.googleapis.com/auth/cloud-platform",
-                        "https://www.googleapis.com/auth/cloud-platform.read-only"
-                      ],
-                      "parameters": {
-                        "appsId": {
-                          "description": "Part of `parent`. Name of the parent Version resource. Example: apps/myapp/services/default/versions/v1.",
-                          "required": true,
-                          "type": "string",
-                          "location": "path"
-                        },
-                        "pageToken": {
-                          "description": "Continuation token for fetching the next page of results.",
-                          "type": "string",
-                          "location": "query"
-                        },
-                        "pageSize": {
-                          "location": "query",
-                          "description": "Maximum results to return per page.",
-                          "format": "int32",
-                          "type": "integer"
-                        },
-                        "versionsId": {
-                          "description": "Part of `parent`. See documentation of `appsId`.",
-                          "required": true,
-                          "type": "string",
-                          "location": "path"
-                        },
-                        "servicesId": {
-                          "description": "Part of `parent`. See documentation of `appsId`.",
-                          "required": true,
-                          "type": "string",
-                          "location": "path"
-                        }
-                      },
-                      "flatPath": "v1alpha/apps/{appsId}/services/{servicesId}/versions/{versionsId}/instances",
-                      "id": "appengine.apps.services.versions.instances.list",
-                      "path": "v1alpha/apps/{appsId}/services/{servicesId}/versions/{versionsId}/instances",
-                      "description": "Lists the instances of a version.Tip: To aggregate details about instances over time, see the Stackdriver Monitoring API (https://cloud.google.com/monitoring/api/ref_v3/rest/v3/projects.timeSeries/list)."
-                    },
-                    "get": {
-                      "description": "Gets instance information.",
-                      "response": {
-                        "$ref": "Instance"
-                      },
-                      "parameterOrder": [
-                        "appsId",
-                        "servicesId",
-                        "versionsId",
-                        "instancesId"
-                      ],
-                      "httpMethod": "GET",
-                      "parameters": {
-                        "servicesId": {
-                          "description": "Part of `name`. See documentation of `appsId`.",
-                          "required": true,
-                          "type": "string",
-                          "location": "path"
-                        },
-                        "appsId": {
-                          "location": "path",
-                          "description": "Part of `name`. Name of the resource requested. Example: apps/myapp/services/default/versions/v1/instances/instance-1.",
-                          "required": true,
-                          "type": "string"
-                        },
-                        "instancesId": {
-                          "location": "path",
-                          "description": "Part of `name`. See documentation of `appsId`.",
-                          "required": true,
-                          "type": "string"
-                        },
-                        "versionsId": {
-                          "location": "path",
-                          "description": "Part of `name`. See documentation of `appsId`.",
-                          "required": true,
-                          "type": "string"
-                        }
-                      },
-                      "scopes": [
-                        "https://www.googleapis.com/auth/appengine.admin",
-                        "https://www.googleapis.com/auth/cloud-platform",
-                        "https://www.googleapis.com/auth/cloud-platform.read-only"
-                      ],
-                      "flatPath": "v1alpha/apps/{appsId}/services/{servicesId}/versions/{versionsId}/instances/{instancesId}",
-                      "path": "v1alpha/apps/{appsId}/services/{servicesId}/versions/{versionsId}/instances/{instancesId}",
-                      "id": "appengine.apps.services.versions.instances.get"
-                    },
-                    "debug": {
-                      "response": {
-                        "$ref": "Operation"
-                      },
-                      "parameterOrder": [
-                        "appsId",
-                        "servicesId",
-                        "versionsId",
-                        "instancesId"
-                      ],
-                      "httpMethod": "POST",
-                      "scopes": [
-                        "https://www.googleapis.com/auth/cloud-platform"
-                      ],
-                      "parameters": {
-                        "appsId": {
-                          "location": "path",
-                          "description": "Part of `name`. Name of the resource requested. Example: apps/myapp/services/default/versions/v1/instances/instance-1.",
-                          "required": true,
-                          "type": "string"
-                        },
-                        "instancesId": {
-                          "description": "Part of `name`. See documentation of `appsId`.",
-                          "required": true,
-                          "type": "string",
-                          "location": "path"
-                        },
-                        "versionsId": {
-                          "description": "Part of `name`. See documentation of `appsId`.",
-                          "required": true,
-                          "type": "string",
-                          "location": "path"
-                        },
-                        "servicesId": {
-                          "location": "path",
-                          "description": "Part of `name`. See documentation of `appsId`.",
-                          "required": true,
-                          "type": "string"
-                        }
-                      },
-                      "flatPath": "v1alpha/apps/{appsId}/services/{servicesId}/versions/{versionsId}/instances/{instancesId}:debug",
-                      "path": "v1alpha/apps/{appsId}/services/{servicesId}/versions/{versionsId}/instances/{instancesId}:debug",
-                      "id": "appengine.apps.services.versions.instances.debug",
-                      "description": "Enables debugging on a VM instance. This allows you to use the SSH command to connect to the virtual machine where the instance lives. While in \"debug mode\", the instance continues to serve live traffic. You should delete the instance when you are done debugging and then allow the system to take over and determine if another instance should be started.Only applicable for instances in App Engine flexible environment.",
-                      "request": {
-                        "$ref": "DebugInstanceRequest"
-                      }
-                    }
-                  }
-                }
-              }
-            }
-          }
-        },
-        "operations": {
-          "methods": {
-            "list": {
-              "httpMethod": "GET",
-              "parameterOrder": [
-                "appsId"
-              ],
-              "response": {
-                "$ref": "ListOperationsResponse"
-              },
-              "scopes": [
-                "https://www.googleapis.com/auth/appengine.admin",
-                "https://www.googleapis.com/auth/cloud-platform",
-                "https://www.googleapis.com/auth/cloud-platform.read-only"
-              ],
-              "parameters": {
-                "filter": {
-                  "description": "The standard list filter.",
-                  "type": "string",
-                  "location": "query"
-                },
-                "appsId": {
-                  "description": "Part of `name`. The name of the operation collection.",
-                  "required": true,
-                  "type": "string",
-                  "location": "path"
-                },
-                "pageToken": {
-                  "description": "The standard list page token.",
-                  "type": "string",
-                  "location": "query"
-                },
-                "pageSize": {
-                  "location": "query",
-                  "description": "The standard list page size.",
-                  "format": "int32",
-                  "type": "integer"
-                }
-              },
-              "flatPath": "v1alpha/apps/{appsId}/operations",
-              "id": "appengine.apps.operations.list",
-              "path": "v1alpha/apps/{appsId}/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 below allows API services to override the binding to use different resource name schemes, such as users/*/operations."
-            },
-            "get": {
-              "response": {
-                "$ref": "Operation"
-              },
-              "parameterOrder": [
-                "appsId",
-                "operationsId"
-              ],
-              "httpMethod": "GET",
-              "parameters": {
-                "appsId": {
-                  "description": "Part of `name`. The name of the operation resource.",
-                  "required": true,
-                  "type": "string",
-                  "location": "path"
-                },
-                "operationsId": {
-                  "description": "Part of `name`. See documentation of `appsId`.",
-                  "required": true,
-                  "type": "string",
-                  "location": "path"
-                }
-              },
-              "scopes": [
-                "https://www.googleapis.com/auth/appengine.admin",
-                "https://www.googleapis.com/auth/cloud-platform",
-                "https://www.googleapis.com/auth/cloud-platform.read-only"
-              ],
-              "flatPath": "v1alpha/apps/{appsId}/operations/{operationsId}",
-              "path": "v1alpha/apps/{appsId}/operations/{operationsId}",
-              "id": "appengine.apps.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."
-            }
-          }
-        },
-        "locations": {
-          "methods": {
-            "list": {
-              "description": "Lists information about the supported locations for this service.",
-              "httpMethod": "GET",
-              "response": {
-                "$ref": "ListLocationsResponse"
-              },
-              "parameterOrder": [
-                "appsId"
-              ],
-              "parameters": {
-                "filter": {
-                  "location": "query",
-                  "description": "The standard list filter.",
-                  "type": "string"
-                },
-                "appsId": {
-                  "description": "Part of `name`. The resource that owns the locations collection, if applicable.",
-                  "required": true,
-                  "type": "string",
-                  "location": "path"
-                },
-                "pageToken": {
-                  "location": "query",
-                  "description": "The standard list page token.",
-                  "type": "string"
-                },
-                "pageSize": {
-                  "description": "The standard list page size.",
-                  "format": "int32",
-                  "type": "integer",
-                  "location": "query"
-                }
-              },
-              "scopes": [
-                "https://www.googleapis.com/auth/appengine.admin",
-                "https://www.googleapis.com/auth/cloud-platform",
-                "https://www.googleapis.com/auth/cloud-platform.read-only"
-              ],
-              "flatPath": "v1alpha/apps/{appsId}/locations",
-              "id": "appengine.apps.locations.list",
-              "path": "v1alpha/apps/{appsId}/locations"
-            },
-            "get": {
-              "id": "appengine.apps.locations.get",
-              "path": "v1alpha/apps/{appsId}/locations/{locationsId}",
-              "description": "Get information about a location.",
-              "httpMethod": "GET",
-              "response": {
-                "$ref": "Location"
-              },
-              "parameterOrder": [
-                "appsId",
-                "locationsId"
-              ],
-              "scopes": [
-                "https://www.googleapis.com/auth/appengine.admin",
-                "https://www.googleapis.com/auth/cloud-platform",
-                "https://www.googleapis.com/auth/cloud-platform.read-only"
-              ],
-              "parameters": {
-                "appsId": {
-                  "location": "path",
-                  "description": "Part of `name`. Resource name for the location.",
-                  "required": true,
-                  "type": "string"
-                },
-                "locationsId": {
-                  "location": "path",
-                  "description": "Part of `name`. See documentation of `appsId`.",
-                  "required": true,
-                  "type": "string"
-                }
-              },
-              "flatPath": "v1alpha/apps/{appsId}/locations/{locationsId}"
-            }
-          }
-        }
-      },
-      "methods": {
-        "repair": {
-          "request": {
-            "$ref": "RepairApplicationRequest"
-          },
-          "description": "Recreates the required App Engine features for the specified App Engine application, for example a Cloud Storage bucket or App Engine service account. Use this method if you receive an error message about a missing feature, for example, Error retrieving the App Engine service account.",
-          "response": {
-            "$ref": "Operation"
-          },
-          "parameterOrder": [
-            "appsId"
-          ],
-          "httpMethod": "POST",
-          "parameters": {
-            "appsId": {
-              "description": "Part of `name`. Name of the application to repair. Example: apps/myapp",
-              "required": true,
-              "type": "string",
-              "location": "path"
-            }
-          },
-          "scopes": [
-            "https://www.googleapis.com/auth/cloud-platform"
-          ],
-          "flatPath": "v1alpha/apps/{appsId}:repair",
-          "path": "v1alpha/apps/{appsId}:repair",
-          "id": "appengine.apps.repair"
-        },
-        "get": {
-          "httpMethod": "GET",
-          "parameterOrder": [
-            "appsId"
-          ],
-          "response": {
-            "$ref": "Application"
-          },
-          "parameters": {
-            "appsId": {
-              "location": "path",
-              "description": "Part of `name`. Name of the Application resource to get. Example: apps/myapp.",
-              "required": true,
-              "type": "string"
-            }
-          },
-          "scopes": [
-            "https://www.googleapis.com/auth/appengine.admin",
-            "https://www.googleapis.com/auth/cloud-platform",
-            "https://www.googleapis.com/auth/cloud-platform.read-only"
-          ],
-          "flatPath": "v1alpha/apps/{appsId}",
-          "id": "appengine.apps.get",
-          "path": "v1alpha/apps/{appsId}",
-          "description": "Gets information about an application."
-        },
-        "patch": {
-          "response": {
-            "$ref": "Operation"
-          },
-          "parameterOrder": [
-            "appsId"
-          ],
-          "httpMethod": "PATCH",
-          "scopes": [
-            "https://www.googleapis.com/auth/cloud-platform"
-          ],
-          "parameters": {
-            "appsId": {
-              "description": "Part of `name`. Name of the Application resource to update. Example: apps/myapp.",
-              "required": true,
-              "type": "string",
-              "location": "path"
-            },
-            "updateMask": {
-              "location": "query",
-              "description": "Standard field mask for the set of fields to be updated.",
-              "format": "google-fieldmask",
-              "type": "string"
-            }
-          },
-          "flatPath": "v1alpha/apps/{appsId}",
-          "path": "v1alpha/apps/{appsId}",
-          "id": "appengine.apps.patch",
-          "description": "Updates the specified Application resource. You can update the following fields:\nauth_domain - Google authentication domain for controlling user access to the application.\ndefault_cookie_expiration - Cookie expiration policy for the application.",
-          "request": {
-            "$ref": "Application"
-          }
-        },
-        "create": {
-          "path": "v1alpha/apps",
-          "id": "appengine.apps.create",
-          "description": "Creates an App Engine application for a Google Cloud Platform project. Required fields:\nid - The ID of the target Cloud Platform project.\nlocation - The region (https://cloud.google.com/appengine/docs/locations) where you want the App Engine application located.For more information about App Engine applications, see Managing Projects, Applications, and Billing (https://cloud.google.com/appengine/docs/python/console/).",
-          "request": {
-            "$ref": "Application"
-          },
-          "response": {
-            "$ref": "Operation"
-          },
-          "parameterOrder": [],
-          "httpMethod": "POST",
-          "scopes": [
-            "https://www.googleapis.com/auth/cloud-platform"
-          ],
-          "parameters": {},
-          "flatPath": "v1alpha/apps"
-        }
+ "kind": "discovery#restDescription",
+ "etag": "\"tbys6C40o18GZwyMen5GMkdK-3s/1MBWTgxRZMDpMvtX9XjtAWiAbHU\"",
+ "discoveryVersion": "v1",
+ "id": "appengine:v1alpha",
+ "name": "appengine",
+ "version": "v1alpha",
+ "revision": "20170324",
+ "title": "Google App Engine Admin API",
+ "description": "Provisions and manages App Engine applications.",
+ "ownerDomain": "google.com",
+ "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"
+ },
+ "documentationLink": "https://cloud.google.com/appengine/docs/admin-api/",
+ "protocol": "rest",
+ "baseUrl": "https://appengine.googleapis.com/",
+ "basePath": "",
+ "rootUrl": "https://appengine.googleapis.com/",
+ "servicePath": "",
+ "batchPath": "batch",
+ "parameters": {
+  "access_token": {
+   "type": "string",
+   "description": "OAuth access token.",
+   "location": "query"
+  },
+  "alt": {
+   "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"
+   ],
+   "location": "query"
+  },
+  "bearer_token": {
+   "type": "string",
+   "description": "OAuth bearer token.",
+   "location": "query"
+  },
+  "callback": {
+   "type": "string",
+   "description": "JSONP",
+   "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"
+  },
+  "pp": {
+   "type": "boolean",
+   "description": "Pretty-print response.",
+   "default": "true",
+   "location": "query"
+  },
+  "prettyPrint": {
+   "type": "boolean",
+   "description": "Returns response with indentations and line breaks.",
+   "default": "true",
+   "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"
+  },
+  "upload_protocol": {
+   "type": "string",
+   "description": "Upload protocol for media (e.g. \"raw\", \"multipart\").",
+   "location": "query"
+  },
+  "uploadType": {
+   "type": "string",
+   "description": "Legacy upload protocol for media (e.g. \"media\", \"multipart\").",
+   "location": "query"
+  },
+  "$.xgafv": {
+   "type": "string",
+   "description": "V1 error format.",
+   "enumDescriptions": [
+    "v1 error format",
+    "v2 error format"
+   ],
+   "location": "query"
+  }
+ },
+ "auth": {
+  "oauth2": {
+   "scopes": {
+    "https://www.googleapis.com/auth/appengine.admin": {
+     "description": "View and manage your applications deployed on Google App Engine"
+    },
+    "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"
+    }
+   }
+  }
+ },
+ "schemas": {
+  "ListOperationsResponse": {
+   "id": "ListOperationsResponse",
+   "type": "object",
+   "description": "The response message for Operations.ListOperations.",
+   "properties": {
+    "operations": {
+     "type": "array",
+     "description": "A list of operations that matches the specified filter in the request.",
+     "items": {
+      "$ref": "Operation"
+     }
+    },
+    "nextPageToken": {
+     "type": "string",
+     "description": "The standard List next-page token."
+    }
+   }
+  },
+  "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 have the format of operations/some/unique/name."
+    },
+    "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."
+     }
+    },
+    "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."
+    },
+    "error": {
+     "$ref": "Status",
+     "description": "The error result of the operation in case of failure or cancellation."
+    },
+    "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": {
+      "type": "any",
+      "description": "Properties of the object. Contains field @type with type URL."
+     }
+    }
+   }
+  },
+  "Status": {
+   "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). The error model is designed to be: Simple to use and understand for most users Flexible enough to meet unexpected needsOverviewThe Status message contains three pieces of data: error code, error message, and error details. The error code should be an enum value of google.rpc.Code, but it may accept additional error codes if needed. The error message should be a developer-facing English message that helps developers understand and resolve the error. If a localized user-facing error message is needed, put the localized message in the error details or localize it in the client. The optional error details may contain arbitrary information about the error. There is a predefined set of error detail types in the package google.rpc which can be used for common error conditions.Language mappingThe Status message is the logical representation of the error model, but it is not necessarily the actual wire format. When the Status message is exposed in different client libraries and different wire protocols, it can be mapped differently. For example, it will likely be mapped to some exceptions in Java, but more likely mapped to some error codes in C.Other usesThe error model and the Status message can be used in a variety of environments, either with or without APIs, to provide a consistent developer experience across different environments.Example uses of this error model include: Partial errors. If a service needs to return partial errors to the client, it may embed the Status in the normal response to indicate the partial errors. Workflow errors. A typical workflow has multiple steps. Each step may have a Status message for error reporting purpose. Batch operations. If a client uses batch request and batch response, the Status message should be used directly inside batch response, one for each error sub-response. Asynchronous operations. If an API call embeds asynchronous operation results in its response, the status of those operations should be represented directly using the Status message. Logging. If some API errors are stored in logs, the message Status could be used directly after any stripping needed for security/privacy reasons.",
+   "properties": {
+    "code": {
+     "type": "integer",
+     "description": "The status code, which should be an enum value of google.rpc.Code.",
+     "format": "int32"
+    },
+    "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": {
+     "type": "array",
+     "description": "A list of messages that carry the error details. There will be 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."
       }
+     }
     }
+   }
   },
-  "parameters": {
-    "upload_protocol": {
-      "location": "query",
-      "description": "Upload protocol for media (e.g. \"raw\", \"multipart\").",
-      "type": "string"
+  "ListLocationsResponse": {
+   "id": "ListLocationsResponse",
+   "type": "object",
+   "description": "The response message for Locations.ListLocations.",
+   "properties": {
+    "locations": {
+     "type": "array",
+     "description": "A list of locations that matches the specified filter in the request.",
+     "items": {
+      "$ref": "Location"
+     }
     },
-    "prettyPrint": {
-      "location": "query",
-      "description": "Returns response with indentations and line breaks.",
-      "type": "boolean",
-      "default": "true"
-    },
-    "uploadType": {
-      "location": "query",
-      "description": "Legacy upload protocol for media (e.g. \"media\", \"multipart\").",
-      "type": "string"
-    },
-    "fields": {
-      "location": "query",
-      "description": "Selector specifying which fields to include in a partial response.",
-      "type": "string"
-    },
-    "$.xgafv": {
-      "enum": [
-        "1",
-        "2"
-      ],
-      "description": "V1 error format.",
-      "type": "string",
-      "enumDescriptions": [
-        "v1 error format",
-        "v2 error format"
-      ],
-      "location": "query"
-    },
-    "callback": {
-      "location": "query",
-      "description": "JSONP",
-      "type": "string"
-    },
-    "alt": {
-      "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",
-      "description": "Data format for response.",
-      "default": "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"
-    },
-    "access_token": {
-      "location": "query",
-      "description": "OAuth access token.",
-      "type": "string"
-    },
-    "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"
-    },
-    "pp": {
-      "description": "Pretty-print response.",
-      "type": "boolean",
-      "default": "true",
-      "location": "query"
-    },
-    "oauth_token": {
-      "description": "OAuth 2.0 token for the current user.",
-      "type": "string",
-      "location": "query"
-    },
-    "bearer_token": {
-      "location": "query",
-      "description": "OAuth bearer token.",
-      "type": "string"
+    "nextPageToken": {
+     "type": "string",
+     "description": "The standard List next-page token."
     }
+   }
   },
-  "schemas": {
-    "RequestUtilization": {
-      "description": "Target scaling by request utilization. Only applicable for VM runtimes.",
-      "type": "object",
-      "properties": {
-        "targetRequestCountPerSecond": {
-          "description": "Target requests per second.",
-          "format": "int32",
-          "type": "integer"
-        },
-        "targetConcurrentRequests": {
-          "description": "Target number of concurrent requests.",
-          "format": "int32",
-          "type": "integer"
-        }
-      },
-      "id": "RequestUtilization"
+  "Location": {
+   "id": "Location",
+   "type": "object",
+   "description": "A resource that represents Google Cloud Platform location.",
+   "properties": {
+    "name": {
+     "type": "string",
+     "description": "Resource name for the location, which may vary between implementations. For example: \"projects/example-project/locations/us-east1\""
     },
-    "UrlMap": {
-      "description": "URL pattern and description of how the URL should be handled. App Engine can handle URLs by executing application code or by serving static files uploaded with the version, such as images, CSS, or JavaScript.",
-      "type": "object",
-      "properties": {
-        "securityLevel": {
-          "enum": [
-            "SECURE_UNSPECIFIED",
-            "SECURE_DEFAULT",
-            "SECURE_NEVER",
-            "SECURE_OPTIONAL",
-            "SECURE_ALWAYS"
-          ],
-          "description": "Security (HTTPS) enforcement for this URL.",
-          "type": "string",
-          "enumDescriptions": [
-            "Not specified.",
-            "Both HTTP and HTTPS requests with URLs that match the handler succeed without redirects. The application can examine the request to determine which protocol was used, and respond accordingly.",
-            "Requests for a URL that match this handler that use HTTPS are automatically redirected to the HTTP equivalent URL.",
-            "Both HTTP and HTTPS requests with URLs that match the handler succeed without redirects. The application can examine the request to determine which protocol was used and respond accordingly.",
-            "Requests for a URL that match this handler that do not use HTTPS are automatically redirected to the HTTPS URL with the same path. Query parameters are reserved for the redirect."
-          ]
-        },
-        "authFailAction": {
-          "enumDescriptions": [
-            "Not specified. AUTH_FAIL_ACTION_REDIRECT is assumed.",
-            "Redirects user to \"accounts.google.com\". The user is redirected back to the application URL after signing in or creating an account.",
-            "Rejects request with a 401 HTTP status code and an error message."
-          ],
-          "enum": [
-            "AUTH_FAIL_ACTION_UNSPECIFIED",
-            "AUTH_FAIL_ACTION_REDIRECT",
-            "AUTH_FAIL_ACTION_UNAUTHORIZED"
-          ],
-          "description": "Action to take when users access resources that require authentication. Defaults to redirect.",
-          "type": "string"
-        },
-        "script": {
-          "description": "Executes a script to handle the request that matches this URL pattern.",
-          "$ref": "ScriptHandler"
-        },
-        "urlRegex": {
-          "description": "URL prefix. Uses regular expression syntax, which means regexp special characters must be escaped, but should not contain groupings. All URLs that begin with this prefix are handled by this handler, using the portion of the URL after the prefix as part of the file path.",
-          "type": "string"
-        },
-        "login": {
-          "enum": [
-            "LOGIN_UNSPECIFIED",
-            "LOGIN_OPTIONAL",
-            "LOGIN_ADMIN",
-            "LOGIN_REQUIRED"
-          ],
-          "description": "Level of login required to access this resource.",
-          "type": "string",
-          "enumDescriptions": [
-            "Not specified. LOGIN_OPTIONAL is assumed.",
-            "Does not require that the user is signed in.",
-            "If the user is not signed in, the auth_fail_action is taken. In addition, if the user is not an administrator for the application, they are given an error message regardless of auth_fail_action. If the user is an administrator, the handler proceeds.",
-            "If the user has signed in, the handler proceeds normally. Otherwise, the auth_fail_action is taken."
-          ]
-        },
-        "apiEndpoint": {
-          "description": "Uses API Endpoints to handle requests.",
-          "$ref": "ApiEndpointHandler"
-        },
-        "staticFiles": {
-          "description": "Returns the contents of a file, such as an image, as the response.",
-          "$ref": "StaticFilesHandler"
-        },
-        "redirectHttpResponseCode": {
-          "enumDescriptions": [
-            "Not specified. 302 is assumed.",
-            "301 Moved Permanently code.",
-            "302 Moved Temporarily code.",
-            "303 See Other code.",
-            "307 Temporary Redirect code."
-          ],
-          "enum": [
-            "REDIRECT_HTTP_RESPONSE_CODE_UNSPECIFIED",
-            "REDIRECT_HTTP_RESPONSE_CODE_301",
-            "REDIRECT_HTTP_RESPONSE_CODE_302",
-            "REDIRECT_HTTP_RESPONSE_CODE_303",
-            "REDIRECT_HTTP_RESPONSE_CODE_307"
-          ],
-          "description": "30x code to use when performing redirects for the secure field. Defaults to 302.",
-          "type": "string"
-        }
-      },
-      "id": "UrlMap"
+    "locationId": {
+     "type": "string",
+     "description": "The canonical id for this location. For example: \"us-east1\"."
     },
-    "EndpointsApiService": {
-      "properties": {
-        "name": {
-          "description": "Endpoints service name which is the name of the \"service\" resource in the Service Management API. For example \"myapi.endpoints.myproject.cloud.goog\"",
-          "type": "string"
-        },
-        "configId": {
-          "description": "Endpoints service configuration id as specified by the Service Management API. For example \"2016-09-19r1\"",
-          "type": "string"
-        }
-      },
-      "id": "EndpointsApiService",
-      "description": "Cloud Endpoints (https://cloud.google.com/endpoints) configuration. The Endpoints API Service provides tooling for serving Open API and gRPC endpoints via an NGINX proxy.The fields here refer to the name and configuration id of a \"service\" resource in the Service Management API (https://cloud.google.com/service-management/overview).",
-      "type": "object"
+    "labels": {
+     "type": "object",
+     "description": "Cross-service attributes for the location. For example {\"cloud.googleapis.com/region\": \"us-east1\"}",
+     "additionalProperties": {
+      "type": "string"
+     }
     },
-    "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"
-        },
-        "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"
-        },
-        "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 have the format of operations/some/unique/name.",
-          "type": "string"
-        },
-        "error": {
-          "description": "The error result of the operation in case of failure or cancellation.",
-          "$ref": "Status"
-        },
-        "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"
-        }
-      },
-      "id": "Operation",
-      "description": "This resource represents a long-running operation that is the result of a network API call.",
-      "type": "object"
-    },
-    "ApiConfigHandler": {
-      "description": "Google Cloud Endpoints (https://cloud.google.com/appengine/docs/python/endpoints/) configuration for API handlers.",
-      "type": "object",
-      "properties": {
-        "url": {
-          "description": "URL to serve the endpoint at.",
-          "type": "string"
-        },
-        "securityLevel": {
-          "enumDescriptions": [
-            "Not specified.",
-            "Both HTTP and HTTPS requests with URLs that match the handler succeed without redirects. The application can examine the request to determine which protocol was used, and respond accordingly.",
-            "Requests for a URL that match this handler that use HTTPS are automatically redirected to the HTTP equivalent URL.",
-            "Both HTTP and HTTPS requests with URLs that match the handler succeed without redirects. The application can examine the request to determine which protocol was used and respond accordingly.",
-            "Requests for a URL that match this handler that do not use HTTPS are automatically redirected to the HTTPS URL with the same path. Query parameters are reserved for the redirect."
-          ],
-          "enum": [
-            "SECURE_UNSPECIFIED",
-            "SECURE_DEFAULT",
-            "SECURE_NEVER",
-            "SECURE_OPTIONAL",
-            "SECURE_ALWAYS"
-          ],
-          "description": "Security (HTTPS) enforcement for this URL.",
-          "type": "string"
-        },
-        "authFailAction": {
-          "enum": [
-            "AUTH_FAIL_ACTION_UNSPECIFIED",
-            "AUTH_FAIL_ACTION_REDIRECT",
-            "AUTH_FAIL_ACTION_UNAUTHORIZED"
-          ],
-          "description": "Action to take when users access resources that require authentication. Defaults to redirect.",
-          "type": "string",
-          "enumDescriptions": [
-            "Not specified. AUTH_FAIL_ACTION_REDIRECT is assumed.",
-            "Redirects user to \"accounts.google.com\". The user is redirected back to the application URL after signing in or creating an account.",
-            "Rejects request with a 401 HTTP status code and an error message."
-          ]
-        },
-        "script": {
-          "description": "Path to the script from the application root directory.",
-          "type": "string"
-        },
-        "login": {
-          "enumDescriptions": [
-            "Not specified. LOGIN_OPTIONAL is assumed.",
-            "Does not require that the user is signed in.",
-            "If the user is not signed in, the auth_fail_action is taken. In addition, if the user is not an administrator for the application, they are given an error message regardless of auth_fail_action. If the user is an administrator, the handler proceeds.",
-            "If the user has signed in, the handler proceeds normally. Otherwise, the auth_fail_action is taken."
-          ],
-          "enum": [
-            "LOGIN_UNSPECIFIED",
-            "LOGIN_OPTIONAL",
-            "LOGIN_ADMIN",
-            "LOGIN_REQUIRED"
-          ],
-          "description": "Level of login required to access this resource. Defaults to optional.",
-          "type": "string"
-        }
-      },
-      "id": "ApiConfigHandler"
-    },
-    "StaticFilesHandler": {
-      "description": "Files served directly to the user for a given URL, such as images, CSS stylesheets, or JavaScript source files. Static file handlers describe which files in the application directory are static files, and which URLs serve them.",
-      "type": "object",
-      "properties": {
-        "applicationReadable": {
-          "description": "Whether files should also be uploaded as code data. By default, files declared in static file handlers are uploaded as static data and are only served to end users; they cannot be read by the application. If enabled, uploads are charged against both your code and static data storage resource quotas.",
-          "type": "boolean"
-        },
-        "httpHeaders": {
-          "additionalProperties": {
-            "type": "string"
-          },
-          "description": "HTTP headers to use for all responses from these URLs.",
-          "type": "object"
-        },
-        "uploadPathRegex": {
-          "description": "Regular expression that matches the file paths for all files that should be referenced by this handler.",
-          "type": "string"
-        },
-        "path": {
-          "description": "Path to the static files matched by the URL pattern, from the application root directory. The path can refer to text matched in groupings in the URL pattern.",
-          "type": "string"
-        },
-        "mimeType": {
-          "description": "MIME type used to serve all files served by this handler.Defaults to file-specific MIME types, which are derived from each file's filename extension.",
-          "type": "string"
-        },
-        "requireMatchingFile": {
-          "description": "Whether this handler should match the request if the file referenced by the handler does not exist.",
-          "type": "boolean"
-        },
-        "expiration": {
-          "description": "Time a static file served by this handler should be cached by web proxies and browsers.",
-          "format": "google-duration",
-          "type": "string"
-        }
-      },
-      "id": "StaticFilesHandler"
-    },
-    "BasicScaling": {
-      "description": "A service with basic scaling will create an instance when the application receives a request. The instance will be turned down when the app becomes idle. Basic scaling is ideal for work that is intermittent or driven by user activity.",
-      "type": "object",
-      "properties": {
-        "idleTimeout": {
-          "description": "Duration of time after the last request that an instance must wait before the instance is shut down.",
-          "format": "google-duration",
-          "type": "string"
-        },
-        "maxInstances": {
-          "description": "Maximum number of instances to create for this version.",
-          "format": "int32",
-          "type": "integer"
-        }
-      },
-      "id": "BasicScaling"
-    },
-    "DiskUtilization": {
-      "properties": {
-        "targetReadBytesPerSecond": {
-          "description": "Target bytes read per second.",
-          "format": "int32",
-          "type": "integer"
-        },
-        "targetReadOpsPerSecond": {
-          "description": "Target ops read per seconds.",
-          "format": "int32",
-          "type": "integer"
-        },
-        "targetWriteOpsPerSecond": {
-          "description": "Target ops written per second.",
-          "format": "int32",
-          "type": "integer"
-        },
-        "targetWriteBytesPerSecond": {
-          "description": "Target bytes written per second.",
-          "format": "int32",
-          "type": "integer"
-        }
-      },
-      "id": "DiskUtilization",
-      "description": "Target scaling by disk usage. Only applicable for VM runtimes.",
-      "type": "object"
-    },
-    "CpuUtilization": {
-      "properties": {
-        "aggregationWindowLength": {
-          "description": "Period of time over which CPU utilization is calculated.",
-          "format": "google-duration",
-          "type": "string"
-        },
-        "targetUtilization": {
-          "description": "Target CPU utilization ratio to maintain when scaling. Must be between 0 and 1.",
-          "format": "double",
-          "type": "number"
-        }
-      },
-      "id": "CpuUtilization",
-      "description": "Target scaling by CPU usage.",
-      "type": "object"
-    },
-    "IdentityAwareProxy": {
-      "properties": {
-        "oauth2ClientSecretSha256": {
-          "description": "Hex-encoded SHA-256 hash of the client secret.@OutputOnly",
-          "type": "string"
-        },
-        "enabled": {
-          "description": "Whether the serving infrastructure will authenticate and authorize all incoming requests.If true, the oauth2_client_id and oauth2_client_secret fields must be non-empty.",
-          "type": "boolean"
-        },
-        "oauth2ClientSecret": {
-          "description": "OAuth2 client secret to use for the authentication flow.For security reasons, this value cannot be retrieved via the API. Instead, the SHA-256 hash of the value is returned in the oauth2_client_secret_sha256 field.@InputOnly",
-          "type": "string"
-        },
-        "oauth2ClientId": {
-          "description": "OAuth2 client ID to use for the authentication flow.",
-          "type": "string"
-        }
-      },
-      "id": "IdentityAwareProxy",
-      "description": "Identity-Aware Proxy",
-      "type": "object"
-    },
-    "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": {
-          "description": "A list of messages that carry the error details. There will be 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"
-            },
-            "type": "object"
-          }
-        },
-        "code": {
-          "description": "The status code, which should be an enum value of google.rpc.Code.",
-          "format": "int32",
-          "type": "integer"
-        }
-      },
-      "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). The error model is designed to be:\nSimple to use and understand for most users\nFlexible enough to meet unexpected needsOverviewThe Status message contains three pieces of data: error code, error message, and error details. The error code should be an enum value of google.rpc.Code, but it may accept additional error codes if needed. The error message should be a developer-facing English message that helps developers understand and resolve the error. If a localized user-facing error message is needed, put the localized message in the error details or localize it in the client. The optional error details may contain arbitrary information about the error. There is a predefined set of error detail types in the package google.rpc which can be used for common error conditions.Language mappingThe Status message is the logical representation of the error model, but it is not necessarily the actual wire format. When the Status message is exposed in different client libraries and different wire protocols, it can be mapped differently. For example, it will likely be mapped to some exceptions in Java, but more likely mapped to some error codes in C.Other usesThe error model and the Status message can be used in a variety of environments, either with or without APIs, to provide a consistent developer experience across different environments.Example uses of this error model include:\nPartial errors. If a service needs to return partial errors to the client, it may embed the Status in the normal response to indicate the partial errors.\nWorkflow errors. A typical workflow has multiple steps. Each step may have a Status message for error reporting purpose.\nBatch operations. If a client uses batch request and batch response, the Status message should be used directly inside batch response, one for each error sub-response.\nAsynchronous operations. If an API call embeds asynchronous operation results in its response, the status of those operations should be represented directly using the Status message.\nLogging. If some API errors are stored in logs, the message Status could be used directly after any stripping needed for security/privacy reasons.",
-      "type": "object"
-    },
-    "ManualScaling": {
-      "description": "A service with manual scaling runs continuously, allowing you to perform complex initialization and rely on the state of its memory over time.",
-      "type": "object",
-      "properties": {
-        "instances": {
-          "description": "Number of instances to assign to the service at the start. This number can later be altered by using the Modules API (https://cloud.google.com/appengine/docs/python/modules/functions) set_num_instances() function.",
-          "format": "int32",
-          "type": "integer"
-        }
-      },
-      "id": "ManualScaling"
-    },
-    "LocationMetadata": {
-      "description": "Metadata for the given google.cloud.location.Location.",
-      "type": "object",
-      "properties": {
-        "standardEnvironmentAvailable": {
-          "description": "App Engine Standard Environment is available in the given location.@OutputOnly",
-          "type": "boolean"
-        },
-        "flexibleEnvironmentAvailable": {
-          "description": "App Engine Flexible Environment is available in the given location.@OutputOnly",
-          "type": "boolean"
-        }
-      },
-      "id": "LocationMetadata"
-    },
-    "Service": {
-      "description": "A Service resource is a logical component of an application that can share state and communicate in a secure fashion with other services. For example, an application that handles customer requests might include separate services to handle tasks such as backend data analysis or API requests from mobile devices. Each service has a collection of versions that define a specific set of code used to implement the functionality of that service.",
-      "type": "object",
-      "properties": {
-        "name": {
-          "description": "Full path to the Service resource in the API. Example: apps/myapp/services/default.@OutputOnly",
-          "type": "string"
-        },
-        "split": {
-          "description": "Mapping that defines fractional HTTP traffic diversion to different versions within the service.",
-          "$ref": "TrafficSplit"
-        },
-        "id": {
-          "description": "Relative name of the service within the application. Example: default.@OutputOnly",
-          "type": "string"
-        }
-      },
-      "id": "Service"
-    },
-    "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.",
-          "type": "array",
-          "items": {
-            "$ref": "Operation"
-          }
-        }
-      },
-      "id": "ListOperationsResponse",
-      "description": "The response message for Operations.ListOperations.",
-      "type": "object"
-    },
-    "OperationMetadata": {
-      "properties": {
-        "user": {
-          "description": "User who requested this operation.@OutputOnly",
-          "type": "string"
-        },
-        "target": {
-          "description": "Name of the resource that this operation is acting on. Example: apps/myapp/modules/default.@OutputOnly",
-          "type": "string"
-        },
-        "method": {
-          "description": "API method that initiated this operation. Example: google.appengine.v1beta4.Version.CreateVersion.@OutputOnly",
-          "type": "string"
-        },
-        "endTime": {
-          "description": "Timestamp that this operation completed.@OutputOnly",
-          "format": "google-datetime",
-          "type": "string"
-        },
-        "operationType": {
-          "description": "Type of this operation. Deprecated, use method field instead. Example: \"create_version\".@OutputOnly",
-          "type": "string"
-        },
-        "insertTime": {
-          "description": "Timestamp that this operation was created.@OutputOnly",
-          "format": "google-datetime",
-          "type": "string"
-        }
-      },
-      "id": "OperationMetadata",
-      "description": "Metadata for the given google.longrunning.Operation.",
-      "type": "object"
-    },
-    "OperationMetadataV1": {
-      "properties": {
-        "method": {
-          "description": "API method that initiated this operation. Example: google.appengine.v1.Versions.CreateVersion.@OutputOnly",
-          "type": "string"
-        },
-        "endTime": {
-          "description": "Time that this operation completed.@OutputOnly",
-          "format": "google-datetime",
-          "type": "string"
-        },
-        "warning": {
-          "description": "Durable messages that persist on every operation poll. @OutputOnly",
-          "type": "array",
-          "items": {
-            "type": "string"
-          }
-        },
-        "insertTime": {
-          "description": "Time that this operation was created.@OutputOnly",
-          "format": "google-datetime",
-          "type": "string"
-        },
-        "user": {
-          "description": "User who requested this operation.@OutputOnly",
-          "type": "string"
-        },
-        "target": {
-          "description": "Name of the resource that this operation is acting on. Example: apps/myapp/services/default.@OutputOnly",
-          "type": "string"
-        },
-        "ephemeralMessage": {
-          "description": "Ephemeral message that may change every time the operation is polled. @OutputOnly",
-          "type": "string"
-        }
-      },
-      "id": "OperationMetadataV1",
-      "description": "Metadata for the given google.longrunning.Operation.",
-      "type": "object"
-    },
-    "ErrorHandler": {
-      "description": "Custom static error page to be served when an error occurs.",
-      "type": "object",
-      "properties": {
-        "errorCode": {
-          "enumDescriptions": [
-            "Not specified. ERROR_CODE_DEFAULT is assumed.",
-            "All other error types.",
-            "Application has exceeded a resource quota.",
-            "Client blocked by the application's Denial of Service protection configuration.",
-            "Deadline reached before the application responds."
-          ],
-          "enum": [
-            "ERROR_CODE_UNSPECIFIED",
-            "ERROR_CODE_DEFAULT",
-            "ERROR_CODE_OVER_QUOTA",
-            "ERROR_CODE_DOS_API_DENIAL",
-            "ERROR_CODE_TIMEOUT"
-          ],
-          "description": "Error condition this handler applies to.",
-          "type": "string"
-        },
-        "mimeType": {
-          "description": "MIME type of file. Defaults to text/html.",
-          "type": "string"
-        },
-        "staticFile": {
-          "description": "Static file content to be served for this error.",
-          "type": "string"
-        }
-      },
-      "id": "ErrorHandler"
-    },
-    "Network": {
-      "description": "Extra network settings. Only applicable for VM runtimes.",
-      "type": "object",
-      "properties": {
-        "forwardedPorts": {
-          "description": "List of ports, or port pairs, to forward from the virtual machine to the application container.",
-          "type": "array",
-          "items": {
-            "type": "string"
-          }
-        },
-        "instanceTag": {
-          "description": "Tag to apply to the VM instance during creation.",
-          "type": "string"
-        },
-        "subnetworkName": {
-          "description": "Google Cloud Platform sub-network where the virtual machines are created. Specify the short name, not the resource path.If a subnetwork name is specified, a network name will also be required unless it is for the default network.\nIf the network the VM instance is being created in is a Legacy network, then the IP address is allocated from the IPv4Range.\nIf the network the VM instance is being created in is an auto Subnet Mode Network, then only network name should be specified (not the subnetwork_name) and the IP address is created from the IPCidrRange of the subnetwork that exists in that zone for that network.\nIf the network the VM instance is being created in is a custom Subnet Mode Network, then the subnetwork_name must be specified and the IP address is created from the IPCidrRange of the subnetwork.If specified, the subnetwork must exist in the same region as the Flex app.",
-          "type": "string"
-        },
-        "name": {
-          "description": "Google Cloud Platform network where the virtual machines are created. Specify the short name, not the resource path.Defaults to default.",
-          "type": "string"
-        }
-      },
-      "id": "Network"
-    },
-    "Application": {
-      "properties": {
-        "locationId": {
-          "description": "Location from which this application will be run. Application instances will run out of data centers in the chosen location, which is also where all of the application's end user content is stored.Defaults to us-central.Options are:us-central - Central USeurope-west - Western Europeus-east1 - Eastern US",
-          "type": "string"
-        },
-        "servingStatus": {
-          "enum": [
-            "UNSPECIFIED",
-            "SERVING",
-            "USER_DISABLED",
-            "SYSTEM_DISABLED"
-          ],
-          "description": "Serving status of this application.",
-          "type": "string",
-          "enumDescriptions": [
-            "Serving status is unspecified.",
-            "Application is serving.",
-            "Application has been disabled by the user.",
-            "Application has been disabled by the system."
-          ]
-        },
-        "defaultHostname": {
-          "description": "Hostname used to reach this application, as resolved by App Engine.@OutputOnly",
-          "type": "string"
-        },
-        "iap": {
-          "$ref": "IdentityAwareProxy"
-        },
-        "authDomain": {
-          "description": "Google Apps authentication domain that controls which users can access this application.Defaults to open access for any Google Account.",
-          "type": "string"
-        },
-        "codeBucket": {
-          "description": "Google Cloud Storage bucket that can be used for storing files associated with this application. This bucket is associated with the application and can be used by the gcloud deployment commands.@OutputOnly",
-          "type": "string"
-        },
-        "defaultBucket": {
-          "description": "Google Cloud Storage bucket that can be used by this application to store content.@OutputOnly",
-          "type": "string"
-        },
-        "dispatchRules": {
-          "description": "HTTP path dispatch rules for requests to the application that do not explicitly target a service or version. Rules are order-dependent.@OutputOnly",
-          "type": "array",
-          "items": {
-            "$ref": "UrlDispatchRule"
-          }
-        },
-        "gcrDomain": {
-          "description": "The Google Container Registry domain used for storing managed build docker images for this application.",
-          "type": "string"
-        },
-        "name": {
-          "description": "Full path to the Application resource in the API. Example: apps/myapp.@OutputOnly",
-          "type": "string"
-        },
-        "defaultCookieExpiration": {
-          "description": "Cookie expiration policy for this application.",
-          "format": "google-duration",
-          "type": "string"
-        },
-        "id": {
-          "description": "Identifier of the Application resource. This identifier is equivalent to the project ID of the Google Cloud Platform project where you want to deploy your application. Example: myapp.",
-          "type": "string"
-        }
-      },
-      "id": "Application",
-      "description": "An Application resource contains the top-level configuration of an App Engine application.",
-      "type": "object"
-    },
-    "Instance": {
-      "properties": {
-        "errors": {
-          "description": "Number of errors since this instance was started.@OutputOnly",
-          "format": "int32",
-          "type": "integer"
-        },
-        "availability": {
-          "enum": [
-            "UNSPECIFIED",
-            "RESIDENT",
-            "DYNAMIC"
-          ],
-          "description": "Availability of the instance.@OutputOnly",
-          "type": "string",
-          "enumDescriptions": [
-            "",
-            "",
-            ""
-          ]
-        },
-        "vmStatus": {
-          "description": "Status of the virtual machine where this instance lives. Only applicable for instances in App Engine flexible environment.@OutputOnly",
-          "type": "string"
-        },
-        "startTime": {
-          "description": "Time that this instance was started.@OutputOnly",
-          "format": "google-datetime",
-          "type": "string"
-        },
-        "vmDebugEnabled": {
-          "description": "Whether this instance is in debug mode. Only applicable for instances in App Engine flexible environment.@OutputOnly",
-          "type": "boolean"
-        },
-        "requests": {
-          "description": "Number of requests since this instance was started.@OutputOnly",
-          "format": "int32",
-          "type": "integer"
-        },
-        "appEngineRelease": {
-          "description": "App Engine release this instance is running on.@OutputOnly",
-          "type": "string"
-        },
-        "vmName": {
-          "description": "Name of the virtual machine where this instance lives. Only applicable for instances in App Engine flexible environment.@OutputOnly",
-          "type": "string"
-        },
-        "vmId": {
-          "description": "Virtual machine ID of this instance. Only applicable for instances in App Engine flexible environment.@OutputOnly",
-          "type": "string"
-        },
-        "qps": {
-          "description": "Average queries per second (QPS) over the last minute.@OutputOnly",
-          "format": "float",
-          "type": "number"
-        },
-        "vmZoneName": {
-          "description": "Zone where the virtual machine is located. Only applicable for instances in App Engine flexible environment.@OutputOnly",
-          "type": "string"
-        },
-        "name": {
-          "description": "Full path to the Instance resource in the API. Example: apps/myapp/services/default/versions/v1/instances/instance-1.@OutputOnly",
-          "type": "string"
-        },
-        "averageLatency": {
-          "description": "Average latency (ms) over the last minute.@OutputOnly",
-          "format": "int32",
-          "type": "integer"
-        },
-        "id": {
-          "description": "Relative name of the instance within the version. Example: instance-1.@OutputOnly",
-          "type": "string"
-        },
-        "memoryUsage": {
-          "description": "Total memory in use (bytes).@OutputOnly",
-          "format": "int64",
-          "type": "string"
-        },
-        "vmIp": {
-          "description": "The IP address of this instance. Only applicable for instances in App Engine flexible environment.@OutputOnly",
-          "type": "string"
-        }
-      },
-      "id": "Instance",
-      "description": "An Instance resource is the computing unit that App Engine uses to automatically scale an application.",
-      "type": "object"
-    },
-    "LivenessCheck": {
-      "properties": {
-        "path": {
-          "description": "The request path.",
-          "type": "string"
-        },
-        "host": {
-          "description": "Host header to send when performing a HTTP Liveness check. Example: \"myapp.appspot.com\"",
-          "type": "string"
-        },
-        "healthyThreshold": {
-          "description": "Number of consecutive successful checks required before considering the VM healthy.",
-          "format": "uint32",
-          "type": "integer"
-        },
-        "checkInterval": {
-          "description": "Interval between health checks.",
-          "format": "google-duration",
-          "type": "string"
-        },
-        "timeout": {
-          "description": "Time before the check is considered failed.",
-          "format": "google-duration",
-          "type": "string"
-        },
-        "initialDelay": {
-          "description": "The initial delay before starting to execute the checks.",
-          "format": "google-duration",
-          "type": "string"
-        },
-        "unhealthyThreshold": {
-          "description": "Number of consecutive failed checks required before considering the VM unhealthy.",
-          "format": "uint32",
-          "type": "integer"
-        }
-      },
-      "id": "LivenessCheck",
-      "description": "Health checking configuration for VM instances. Unhealthy instances are killed and replaced with new instances.",
-      "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"
-        },
-        "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"
-        },
-        "labels": {
-          "additionalProperties": {
-            "type": "string"
-          },
-          "description": "Cross-service attributes for the location. For example\n{\"cloud.googleapis.com/region\": \"us-east1\"}\n",
-          "type": "object"
-        }
-      },
-      "id": "Location"
-    },
-    "NetworkUtilization": {
-      "description": "Target scaling by network usage. Only applicable for VM runtimes.",
-      "type": "object",
-      "properties": {
-        "targetSentBytesPerSecond": {
-          "description": "Target bytes sent per second.",
-          "format": "int32",
-          "type": "integer"
-        },
-        "targetSentPacketsPerSecond": {
-          "description": "Target packets sent per second.",
-          "format": "int32",
-          "type": "integer"
-        },
-        "targetReceivedBytesPerSecond": {
-          "description": "Target bytes received per second.",
-          "format": "int32",
-          "type": "integer"
-        },
-        "targetReceivedPacketsPerSecond": {
-          "description": "Target packets received per second.",
-          "format": "int32",
-          "type": "integer"
-        }
-      },
-      "id": "NetworkUtilization"
-    },
-    "HealthCheck": {
-      "description": "Health checking configuration for VM instances. Unhealthy instances are killed and replaced with new instances. Only applicable for instances in App Engine flexible environment.",
-      "type": "object",
-      "properties": {
-        "unhealthyThreshold": {
-          "description": "Number of consecutive failed health checks required before removing traffic.",
-          "format": "uint32",
-          "type": "integer"
-        },
-        "disableHealthCheck": {
-          "description": "Whether to explicitly disable health checks for this instance.",
-          "type": "boolean"
-        },
-        "host": {
-          "description": "Host header to send when performing an HTTP health check. Example: \"myapp.appspot.com\"",
-          "type": "string"
-        },
-        "healthyThreshold": {
-          "description": "Number of consecutive successful health checks required before receiving traffic.",
-          "format": "uint32",
-          "type": "integer"
-        },
-        "restartThreshold": {
-          "description": "Number of consecutive failed health checks required before an instance is restarted.",
-          "format": "uint32",
-          "type": "integer"
-        },
-        "checkInterval": {
-          "description": "Interval between health checks.",
-          "format": "google-duration",
-          "type": "string"
-        },
-        "timeout": {
-          "description": "Time before the health check is considered failed.",
-          "format": "google-duration",
-          "type": "string"
-        }
-      },
-      "id": "HealthCheck"
-    },
-    "ReadinessCheck": {
-      "description": "Readiness checking configuration for VM instances. Unhealthy instances are removed from traffic rotation.",
-      "type": "object",
-      "properties": {
-        "path": {
-          "description": "The request path.",
-          "type": "string"
-        },
-        "host": {
-          "description": "Host header to send when performing a HTTP Readiness check. Example: \"myapp.appspot.com\"",
-          "type": "string"
-        },
-        "healthyThreshold": {
-          "description": "Number of consecutive successful checks required before receiving traffic.",
-          "format": "uint32",
-          "type": "integer"
-        },
-        "checkInterval": {
-          "description": "Interval between health checks.",
-          "format": "google-duration",
-          "type": "string"
-        },
-        "timeout": {
-          "description": "Time before the check is considered failed.",
-          "format": "google-duration",
-          "type": "string"
-        },
-        "unhealthyThreshold": {
-          "description": "Number of consecutive failed checks required before removing traffic.",
-          "format": "uint32",
-          "type": "integer"
-        }
-      },
-      "id": "ReadinessCheck"
-    },
-    "DebugInstanceRequest": {
-      "properties": {
-        "sshKey": {
-          "description": "Public SSH key to add to the instance. Examples:\n[USERNAME]:ssh-rsa [KEY_VALUE] [USERNAME]\n[USERNAME]:ssh-rsa [KEY_VALUE] google-ssh {\"userName\":\"[USERNAME]\",\"expireOn\":\"[EXPIRE_TIME]\"}For more information, see Adding and Removing SSH Keys (https://cloud.google.com/compute/docs/instances/adding-removing-ssh-keys).",
-          "type": "string"
-        }
-      },
-      "id": "DebugInstanceRequest",
-      "description": "Request message for Instances.DebugInstance.",
-      "type": "object"
-    },
-    "OperationMetadataV1Beta5": {
-      "description": "Metadata for the given google.longrunning.Operation.",
-      "type": "object",
-      "properties": {
-        "method": {
-          "description": "API method name that initiated this operation. Example: google.appengine.v1beta5.Version.CreateVersion.@OutputOnly",
-          "type": "string"
-        },
-        "insertTime": {
-          "description": "Timestamp that this operation was created.@OutputOnly",
-          "format": "google-datetime",
-          "type": "string"
-        },
-        "endTime": {
-          "description": "Timestamp that this operation completed.@OutputOnly",
-          "format": "google-datetime",
-          "type": "string"
-        },
-        "user": {
-          "description": "User who requested this operation.@OutputOnly",
-          "type": "string"
-        },
-        "target": {
-          "description": "Name of the resource that this operation is acting on. Example: apps/myapp/services/default.@OutputOnly",
-          "type": "string"
-        }
-      },
-      "id": "OperationMetadataV1Beta5"
-    },
-    "Version": {
-      "description": "A Version resource is a specific set of source code and configuration files that are deployed into a service.",
-      "type": "object",
-      "properties": {
-        "createdBy": {
-          "description": "Email address of the user who created this version.@OutputOnly",
-          "type": "string"
-        },
-        "id": {
-          "description": "Relative name of the version within the service. Example: v1. Version names can contain only lowercase letters, numbers, or hyphens. Reserved names: \"default\", \"latest\", and any name with the prefix \"ah-\".",
-          "type": "string"
-        },
-        "envVariables": {
-          "additionalProperties": {
-            "type": "string"
-          },
-          "description": "Environment variables available to the application.Only returned in GET requests if view=FULL is set.",
-          "type": "object"
-        },
-        "livenessCheck": {
-          "description": "Configures liveness health checking for VM instances. Unhealthy instances are stopped and replaced with new instancesOnly returned in GET requests if view=FULL is set.",
-          "$ref": "LivenessCheck"
-        },
-        "network": {
-          "$ref": "Network",
-          "description": "Extra network settings. Only applicable for VM runtimes."
-        },
-        "betaSettings": {
-          "additionalProperties": {
-            "type": "string"
-          },
-          "description": "Metadata settings that are supplied to this version to enable beta runtime features.",
-          "type": "object"
-        },
-        "env": {
-          "description": "App Engine execution environment for this version.Defaults to standard.",
-          "type": "string"
-        },
-        "handlers": {
-          "description": "An ordered list of URL-matching patterns that should be applied to incoming requests. The first matching URL handles the request and other request handlers are not attempted.Only returned in GET requests if view=FULL is set.",
-          "type": "array",
-          "items": {
-            "$ref": "UrlMap"
-          }
-        },
-        "automaticScaling": {
-          "description": "Automatic scaling is based on request rate, response latencies, and other application metrics.",
-          "$ref": "AutomaticScaling"
-        },
-        "diskUsageBytes": {
-          "description": "Total size in bytes of all the files that are included in this version and curerntly hosted on the App Engine disk.@OutputOnly",
-          "format": "int64",
-          "type": "string"
-        },
-        "healthCheck": {
-          "description": "Configures health checking for VM instances. Unhealthy instances are stopped and replaced with new instances. Only applicable for VM runtimes.Only returned in GET requests if view=FULL is set.",
-          "$ref": "HealthCheck"
-        },
-        "threadsafe": {
-          "description": "Whether multiple requests can be dispatched to this version at once.",
-          "type": "boolean"
-        },
-        "readinessCheck": {
-          "description": "Configures readiness health checking for VM instances. Unhealthy instances are not put into the backend traffic rotation.Only returned in GET requests if view=FULL is set.",
-          "$ref": "ReadinessCheck"
-        },
-        "manualScaling": {
-          "description": "A service with manual scaling runs continuously, allowing you to perform complex initialization and rely on the state of its memory over time.",
-          "$ref": "ManualScaling"
-        },
-        "name": {
-          "description": "Full path to the Version resource in the API. Example: apps/myapp/services/default/versions/v1.@OutputOnly",
-          "type": "string"
-        },
-        "apiConfig": {
-          "$ref": "ApiConfigHandler",
-          "description": "Serving configuration for Google Cloud Endpoints (https://cloud.google.com/appengine/docs/python/endpoints/).Only returned in GET requests if view=FULL is set."
-        },
-        "endpointsApiService": {
-          "description": "Cloud Endpoints configuration.If endpoints_api_service is set, the Cloud Endpoints Extensible Service Proxy will be provided to serve the API implemented by the app.",
-          "$ref": "EndpointsApiService"
-        },
-        "versionUrl": {
-          "description": "Serving URL for this version. Example: \"https://myversion-dot-myservice-dot-myapp.appspot.com\"@OutputOnly",
-          "type": "string"
-        },
-        "vm": {
-          "description": "Whether to deploy this version in a container on a virtual machine.",
-          "type": "boolean"
-        },
-        "instanceClass": {
-          "description": "Instance class that is used to run this version. Valid values are:\nAutomaticScaling: F1, F2, F4, F4_1G\nManualScaling or BasicScaling: B1, B2, B4, B8, B4_1GDefaults to F1 for AutomaticScaling and B1 for ManualScaling or BasicScaling.",
-          "type": "string"
-        },
-        "servingStatus": {
-          "enumDescriptions": [
-            "Not specified.",
-            "Currently serving. Instances are created according to the scaling settings of the version.",
-            "Disabled. No instances will be created and the scaling settings are ignored until the state of the version changes to SERVING."
-          ],
-          "enum": [
-            "SERVING_STATUS_UNSPECIFIED",
-            "SERVING",
-            "STOPPED"
-          ],
-          "description": "Current serving status of this version. Only the versions with a SERVING status create instances and can be billed.SERVING_STATUS_UNSPECIFIED is an invalid value. Defaults to SERVING.",
-          "type": "string"
-        },
-        "deployment": {
-          "description": "Code and application artifacts that make up this version.Only returned in GET requests if view=FULL is set.",
-          "$ref": "Deployment"
-        },
-        "createTime": {
-          "description": "Time that this version was created.@OutputOnly",
-          "format": "google-datetime",
-          "type": "string"
-        },
-        "inboundServices": {
-          "description": "Before an application can receive email or XMPP messages, the application must be configured to enable the service.",
-          "type": "array",
-          "items": {
-            "enum": [
-              "INBOUND_SERVICE_UNSPECIFIED",
-              "INBOUND_SERVICE_MAIL",
-              "INBOUND_SERVICE_MAIL_BOUNCE",
-              "INBOUND_SERVICE_XMPP_ERROR",
-              "INBOUND_SERVICE_XMPP_MESSAGE",
-              "INBOUND_SERVICE_XMPP_SUBSCRIBE",
-              "INBOUND_SERVICE_XMPP_PRESENCE",
-              "INBOUND_SERVICE_CHANNEL_PRESENCE",
-              "INBOUND_SERVICE_WARMUP"
-            ],
-            "type": "string"
-          },
-          "enumDescriptions": [
-            "Not specified.",
-            "Allows an application to receive mail.",
-            "Allows an application to receive email-bound notifications.",
-            "Allows an application to receive error stanzas.",
-            "Allows an application to receive instant messages.",
-            "Allows an application to receive user subscription POSTs.",
-            "Allows an application to receive a user's chat presence.",
-            "Registers an application for notifications when a client connects or disconnects from a channel.",
-            "Enables warmup requests."
-          ]
-        },
-        "resources": {
-          "description": "Machine resources for this version. Only applicable for VM runtimes.",
-          "$ref": "Resources"
-        },
-        "errorHandlers": {
-          "description": "Custom static error pages. Limited to 10KB per page.Only returned in GET requests if view=FULL is set.",
-          "type": "array",
-          "items": {
-            "$ref": "ErrorHandler"
-          }
-        },
-        "defaultExpiration": {
-          "description": "Duration that static files should be cached by web proxies and browsers. Only applicable if the corresponding StaticFilesHandler (https://cloud.google.com/appengine/docs/admin-api/reference/rest/v1alpha/apps.services.versions#staticfileshandler) does not specify its own expiration time.Only returned in GET requests if view=FULL is set.",
-          "format": "google-duration",
-          "type": "string"
-        },
-        "libraries": {
-          "description": "Configuration for third-party Python runtime libraries that are required by the application.Only returned in GET requests if view=FULL is set.",
-          "type": "array",
-          "items": {
-            "$ref": "Library"
-          }
-        },
-        "nobuildFilesRegex": {
-          "description": "Files that match this pattern will not be built into this version. Only applicable for Go runtimes.Only returned in GET requests if view=FULL is set.",
-          "type": "string"
-        },
-        "basicScaling": {
-          "$ref": "BasicScaling",
-          "description": "A service with basic scaling will create an instance when the application receives a request. The instance will be turned down when the app becomes idle. Basic scaling is ideal for work that is intermittent or driven by user activity."
-        },
-        "runtime": {
-          "description": "Desired runtime. Example: python27.",
-          "type": "string"
-        }
-      },
-      "id": "Version"
-    },
-    "RepairApplicationRequest": {
-      "properties": {},
-      "id": "RepairApplicationRequest",
-      "description": "Request message for 'Applications.RepairApplication'.",
-      "type": "object"
-    },
-    "ScriptHandler": {
-      "properties": {
-        "scriptPath": {
-          "description": "Path to the script from the application root directory.",
-          "type": "string"
-        }
-      },
-      "id": "ScriptHandler",
-      "description": "Executes a script to handle the request that matches the URL pattern.",
-      "type": "object"
-    },
-    "FileInfo": {
-      "properties": {
-        "sourceUrl": {
-          "description": "URL source to use to fetch this file. Must be a URL to a resource in Google Cloud Storage in the form 'http(s)://storage.googleapis.com/\u003cbucket\u003e/\u003cobject\u003e'.",
-          "type": "string"
-        },
-        "sha1Sum": {
-          "description": "The SHA1 hash of the file, in hex.",
-          "type": "string"
-        },
-        "mimeType": {
-          "description": "The MIME type of the file.Defaults to the value from Google Cloud Storage.",
-          "type": "string"
-        }
-      },
-      "id": "FileInfo",
-      "description": "Single source file that is part of the version to be deployed. Each source file that is deployed must be specified separately.",
-      "type": "object"
-    },
-    "OperationMetadataExperimental": {
-      "description": "Metadata for the given google.longrunning.Operation.",
-      "type": "object",
-      "properties": {
-        "user": {
-          "description": "User who requested this operation.@OutputOnly",
-          "type": "string"
-        },
-        "target": {
-          "description": "Name of the resource that this operation is acting on. Example: apps/myapp/customDomains/example.com.@OutputOnly",
-          "type": "string"
-        },
-        "method": {
-          "description": "API method that initiated this operation. Example: google.appengine.experimental.CustomDomains.CreateCustomDomain.@OutputOnly",
-          "type": "string"
-        },
-        "insertTime": {
-          "description": "Time that this operation was created.@OutputOnly",
-          "format": "google-datetime",
-          "type": "string"
-        },
-        "endTime": {
-          "description": "Time that this operation completed.@OutputOnly",
-          "format": "google-datetime",
-          "type": "string"
-        }
-      },
-      "id": "OperationMetadataExperimental"
-    },
-    "TrafficSplit": {
-      "properties": {
-        "shardBy": {
-          "enumDescriptions": [
-            "Diversion method unspecified.",
-            "Diversion based on a specially named cookie, \"GOOGAPPUID.\" The cookie must be set by the application itself or no diversion will occur.",
-            "Diversion based on applying the modulus operation to a fingerprint of the IP address.",
-            "Diversion based on weighted random assignment. An incoming request is randomly routed to a version in the traffic split, with probability proportional to the version's traffic share."
-          ],
-          "enum": [
-            "UNSPECIFIED",
-            "COOKIE",
-            "IP",
-            "RANDOM"
-          ],
-          "description": "Mechanism used to determine which version a request is sent to. The traffic selection algorithm will be stable for either type until allocations are changed.",
-          "type": "string"
-        },
-        "allocations": {
-          "additionalProperties": {
-            "format": "double",
-            "type": "number"
-          },
-          "description": "Mapping from version IDs within the service to fractional (0.000, 1] allocations of traffic for that version. Each version can be specified only once, but some versions in the service may not have any traffic allocation. Services that have traffic allocated cannot be deleted until either the service is deleted or their traffic allocation is removed. Allocations must sum to 1. Up to two decimal place precision is supported for IP-based splits and up to three decimal places is supported for cookie-based splits.",
-          "type": "object"
-        }
-      },
-      "id": "TrafficSplit",
-      "description": "Traffic routing configuration for versions within a single service. Traffic splits define how traffic directed to the service is assigned to versions.",
-      "type": "object"
-    },
-    "OperationMetadataV1Beta": {
-      "description": "Metadata for the given google.longrunning.Operation.",
-      "type": "object",
-      "properties": {
-        "method": {
-          "description": "API method that initiated this operation. Example: google.appengine.v1beta.Versions.CreateVersion.@OutputOnly",
-          "type": "string"
-        },
-        "endTime": {
-          "description": "Time that this operation completed.@OutputOnly",
-          "format": "google-datetime",
-          "type": "string"
-        },
-        "warning": {
-          "description": "Durable messages that persist on every operation poll. @OutputOnly",
-          "type": "array",
-          "items": {
-            "type": "string"
-          }
-        },
-        "insertTime": {
-          "description": "Time that this operation was created.@OutputOnly",
-          "format": "google-datetime",
-          "type": "string"
-        },
-        "user": {
-          "description": "User who requested this operation.@OutputOnly",
-          "type": "string"
-        },
-        "target": {
-          "description": "Name of the resource that this operation is acting on. Example: apps/myapp/services/default.@OutputOnly",
-          "type": "string"
-        },
-        "ephemeralMessage": {
-          "description": "Ephemeral message that may change every time the operation is polled. @OutputOnly",
-          "type": "string"
-        }
-      },
-      "id": "OperationMetadataV1Beta"
-    },
-    "ListServicesResponse": {
-      "properties": {
-        "services": {
-          "description": "The services belonging to the requested application.",
-          "type": "array",
-          "items": {
-            "$ref": "Service"
-          }
-        },
-        "nextPageToken": {
-          "description": "Continuation token for fetching the next page of results.",
-          "type": "string"
-        }
-      },
-      "id": "ListServicesResponse",
-      "description": "Response message for Services.ListServices.",
-      "type": "object"
-    },
-    "Deployment": {
-      "description": "Code and application artifacts used to deploy a version to App Engine.",
-      "type": "object",
-      "properties": {
-        "files": {
-          "additionalProperties": {
-            "$ref": "FileInfo"
-          },
-          "description": "Manifest of the files stored in Google Cloud Storage that are included as part of this version. All files must be readable using the credentials supplied with this call.",
-          "type": "object"
-        },
-        "zip": {
-          "description": "The zip file for this deployment, if this is a zip deployment.",
-          "$ref": "ZipInfo"
-        },
-        "container": {
-          "description": "The Docker image for the container that runs the version. Only applicable for instances running in the App Engine flexible environment.",
-          "$ref": "ContainerInfo"
-        }
-      },
-      "id": "Deployment"
-    },
-    "Resources": {
-      "properties": {
-        "volumes": {
-          "description": "User specified volumes.",
-          "type": "array",
-          "items": {
-            "$ref": "Volume"
-          }
-        },
-        "diskGb": {
-          "description": "Disk size (GB) needed.",
-          "format": "double",
-          "type": "number"
-        },
-        "cpu": {
-          "description": "Number of CPU cores needed.",
-          "format": "double",
-          "type": "number"
-        },
-        "memoryGb": {
-          "description": "Memory (GB) needed.",
-          "format": "double",
-          "type": "number"
-        }
-      },
-      "id": "Resources",
-      "description": "Machine resources for a version.",
-      "type": "object"
-    },
-    "Volume": {
-      "properties": {
-        "volumeType": {
-          "description": "Underlying volume type, e.g. 'tmpfs'.",
-          "type": "string"
-        },
-        "sizeGb": {
-          "description": "Volume size in gigabytes.",
-          "format": "double",
-          "type": "number"
-        },
-        "name": {
-          "description": "Unique name for the volume.",
-          "type": "string"
-        }
-      },
-      "id": "Volume",
-      "description": "Volumes mounted within the app container. Only applicable for VM runtimes.",
-      "type": "object"
-    },
-    "ListInstancesResponse": {
-      "properties": {
-        "instances": {
-          "description": "The instances belonging to the requested version.",
-          "type": "array",
-          "items": {
-            "$ref": "Instance"
-          }
-        },
-        "nextPageToken": {
-          "description": "Continuation token for fetching the next page of results.",
-          "type": "string"
-        }
-      },
-      "id": "ListInstancesResponse",
-      "description": "Response message for Instances.ListInstances.",
-      "type": "object"
-    },
-    "OperationMetadataV1Alpha": {
-      "properties": {
-        "warning": {
-          "description": "Durable messages that persist on every operation poll. @OutputOnly",
-          "type": "array",
-          "items": {
-            "type": "string"
-          }
-        },
-        "insertTime": {
-          "description": "Time that this operation was created.@OutputOnly",
-          "format": "google-datetime",
-          "type": "string"
-        },
-        "target": {
-          "description": "Name of the resource that this operation is acting on. Example: apps/myapp/services/default.@OutputOnly",
-          "type": "string"
-        },
-        "user": {
-          "description": "User who requested this operation.@OutputOnly",
-          "type": "string"
-        },
-        "ephemeralMessage": {
-          "description": "Ephemeral message that may change every time the operation is polled. @OutputOnly",
-          "type": "string"
-        },
-        "method": {
-          "description": "API method that initiated this operation. Example: google.appengine.v1alpha.Versions.CreateVersion.@OutputOnly",
-          "type": "string"
-        },
-        "endTime": {
-          "description": "Time that this operation completed.@OutputOnly",
-          "format": "google-datetime",
-          "type": "string"
-        }
-      },
-      "id": "OperationMetadataV1Alpha",
-      "description": "Metadata for the given google.longrunning.Operation.",
-      "type": "object"
-    },
-    "UrlDispatchRule": {
-      "properties": {
-        "path": {
-          "description": "Pathname within the host. Must start with a \"/\". A single \"*\" can be included at the end of the path. The sum of the lengths of the domain and path may not exceed 100 characters.",
-          "type": "string"
-        },
-        "domain": {
-          "description": "Domain name to match against. The wildcard \"*\" is supported if specified before a period: \"*.\".Defaults to matching all domains: \"*\".",
-          "type": "string"
-        },
-        "service": {
-          "description": "Resource ID of a service in this application that should serve the matched request. The service must already exist. Example: default.",
-          "type": "string"
-        }
-      },
-      "id": "UrlDispatchRule",
-      "description": "Rules to match an HTTP request and dispatch that request to a service.",
-      "type": "object"
-    },
-    "ListVersionsResponse": {
-      "description": "Response message for Versions.ListVersions.",
-      "type": "object",
-      "properties": {
-        "versions": {
-          "description": "The versions belonging to the requested service.",
-          "type": "array",
-          "items": {
-            "$ref": "Version"
-          }
-        },
-        "nextPageToken": {
-          "description": "Continuation token for fetching the next page of results.",
-          "type": "string"
-        }
-      },
-      "id": "ListVersionsResponse"
-    },
-    "ApiEndpointHandler": {
-      "properties": {
-        "scriptPath": {
-          "description": "Path to the script from the application root directory.",
-          "type": "string"
-        }
-      },
-      "id": "ApiEndpointHandler",
-      "description": "Uses Google Cloud Endpoints to handle requests.",
-      "type": "object"
-    },
-    "AutomaticScaling": {
-      "properties": {
-        "diskUtilization": {
-          "description": "Target scaling by disk usage.",
-          "$ref": "DiskUtilization"
-        },
-        "minPendingLatency": {
-          "description": "Minimum amount of time a request should wait in the pending queue before starting a new instance to handle it.",
-          "format": "google-duration",
-          "type": "string"
-        },
-        "requestUtilization": {
-          "description": "Target scaling by request utilization.",
-          "$ref": "RequestUtilization"
-        },
-        "maxIdleInstances": {
-          "description": "Maximum number of idle instances that should be maintained for this version.",
-          "format": "int32",
-          "type": "integer"
-        },
-        "minIdleInstances": {
-          "description": "Minimum number of idle instances that should be maintained for this version. Only applicable for the default version of a service.",
-          "format": "int32",
-          "type": "integer"
-        },
-        "maxTotalInstances": {
-          "description": "Maximum number of instances that should be started to handle requests.",
-          "format": "int32",
-          "type": "integer"
-        },
-        "minTotalInstances": {
-          "description": "Minimum number of instances that should be maintained for this version.",
-          "format": "int32",
-          "type": "integer"
-        },
-        "networkUtilization": {
-          "$ref": "NetworkUtilization",
-          "description": "Target scaling by network usage."
-        },
-        "maxConcurrentRequests": {
-          "description": "Number of concurrent requests an automatic scaling instance can accept before the scheduler spawns a new instance.Defaults to a runtime-specific value.",
-          "format": "int32",
-          "type": "integer"
-        },
-        "coolDownPeriod": {
-          "description": "Amount of time that the Autoscaler (https://cloud.google.com/compute/docs/autoscaler/) should wait between changes to the number of virtual machines. Only applicable for VM runtimes.",
-          "format": "google-duration",
-          "type": "string"
-        },
-        "maxPendingLatency": {
-          "description": "Maximum amount of time that a request should wait in the pending queue before starting a new instance to handle it.",
-          "format": "google-duration",
-          "type": "string"
-        },
-        "cpuUtilization": {
-          "$ref": "CpuUtilization",
-          "description": "Target scaling by CPU usage."
-        }
-      },
-      "id": "AutomaticScaling",
-      "description": "Automatic scaling is based on request rate, response latencies, and other application metrics.",
-      "type": "object"
-    },
-    "ZipInfo": {
-      "properties": {
-        "filesCount": {
-          "description": "An estimate of the number of files in a zip for a zip deployment. If set, must be greater than or equal to the actual number of files. Used for optimizing performance; if not provided, deployment may be slow.",
-          "format": "int32",
-          "type": "integer"
-        },
-        "sourceUrl": {
-          "description": "URL of the zip file to deploy from. Must be a URL to a resource in Google Cloud Storage in the form 'http(s)://storage.googleapis.com/\u003cbucket\u003e/\u003cobject\u003e'.",
-          "type": "string"
-        }
-      },
-      "id": "ZipInfo",
-      "description": "The zip file information for a zip deployment.",
-      "type": "object"
-    },
-    "Library": {
-      "description": "Third-party Python runtime library that is required by the application.",
-      "type": "object",
-      "properties": {
-        "name": {
-          "description": "Name of the library. Example: \"django\".",
-          "type": "string"
-        },
-        "version": {
-          "description": "Version of the library to select, or \"latest\".",
-          "type": "string"
-        }
-      },
-      "id": "Library"
-    },
-    "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"
-    },
-    "ContainerInfo": {
-      "description": "Docker image that is used to create a container and start a VM instance for the version that you deploy. Only applicable for instances running in the App Engine flexible environment.",
-      "type": "object",
-      "properties": {
-        "image": {
-          "description": "URI to the hosted container image in Google Container Registry. The URI must be fully qualified and include a tag or digest. Examples: \"gcr.io/my-project/image:tag\" or \"gcr.io/my-project/image@digest\"",
-          "type": "string"
-        }
-      },
-      "id": "ContainerInfo"
+    "metadata": {
+     "type": "object",
+     "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."
+     }
     }
+   }
   },
-  "icons": {
-    "x16": "http://www.google.com/images/icons/product/search-16.gif",
-    "x32": "http://www.google.com/images/icons/product/search-32.gif"
+  "OperationMetadataExperimental": {
+   "id": "OperationMetadataExperimental",
+   "type": "object",
+   "description": "Metadata for the given google.longrunning.Operation.",
+   "properties": {
+    "method": {
+     "type": "string",
+     "description": "API method that initiated this operation. Example: google.appengine.experimental.CustomDomains.CreateCustomDomain.@OutputOnly"
+    },
+    "insertTime": {
+     "type": "string",
+     "description": "Time that this operation was created.@OutputOnly"
+    },
+    "endTime": {
+     "type": "string",
+     "description": "Time that this operation completed.@OutputOnly"
+    },
+    "user": {
+     "type": "string",
+     "description": "User who requested this operation.@OutputOnly"
+    },
+    "target": {
+     "type": "string",
+     "description": "Name of the resource that this operation is acting on. Example: apps/myapp/customDomains/example.com.@OutputOnly"
+    }
+   }
   },
-  "protocol": "rest",
-  "version": "v1alpha",
-  "baseUrl": "https://appengine.googleapis.com/",
-  "auth": {
-    "oauth2": {
-      "scopes": {
-        "https://www.googleapis.com/auth/cloud-platform": {
-          "description": "View and manage your data across Google Cloud Platform services"
+  "OperationMetadata": {
+   "id": "OperationMetadata",
+   "type": "object",
+   "description": "Metadata for the given google.longrunning.Operation.",
+   "properties": {
+    "operationType": {
+     "type": "string",
+     "description": "Type of this operation. Deprecated, use method field instead. Example: \"create_version\".@OutputOnly"
+    },
+    "insertTime": {
+     "type": "string",
+     "description": "Timestamp that this operation was created.@OutputOnly"
+    },
+    "endTime": {
+     "type": "string",
+     "description": "Timestamp that this operation completed.@OutputOnly"
+    },
+    "user": {
+     "type": "string",
+     "description": "User who requested this operation.@OutputOnly"
+    },
+    "target": {
+     "type": "string",
+     "description": "Name of the resource that this operation is acting on. Example: apps/myapp/modules/default.@OutputOnly"
+    },
+    "method": {
+     "type": "string",
+     "description": "API method that initiated this operation. Example: google.appengine.v1beta4.Version.CreateVersion.@OutputOnly"
+    }
+   }
+  },
+  "OperationMetadataV1Beta5": {
+   "id": "OperationMetadataV1Beta5",
+   "type": "object",
+   "description": "Metadata for the given google.longrunning.Operation.",
+   "properties": {
+    "method": {
+     "type": "string",
+     "description": "API method name that initiated this operation. Example: google.appengine.v1beta5.Version.CreateVersion.@OutputOnly"
+    },
+    "insertTime": {
+     "type": "string",
+     "description": "Timestamp that this operation was created.@OutputOnly"
+    },
+    "endTime": {
+     "type": "string",
+     "description": "Timestamp that this operation completed.@OutputOnly"
+    },
+    "user": {
+     "type": "string",
+     "description": "User who requested this operation.@OutputOnly"
+    },
+    "target": {
+     "type": "string",
+     "description": "Name of the resource that this operation is acting on. Example: apps/myapp/services/default.@OutputOnly"
+    }
+   }
+  },
+  "OperationMetadataV1Beta": {
+   "id": "OperationMetadataV1Beta",
+   "type": "object",
+   "description": "Metadata for the given google.longrunning.Operation.",
+   "properties": {
+    "method": {
+     "type": "string",
+     "description": "API method that initiated this operation. Example: google.appengine.v1beta.Versions.CreateVersion.@OutputOnly"
+    },
+    "insertTime": {
+     "type": "string",
+     "description": "Time that this operation was created.@OutputOnly"
+    },
+    "endTime": {
+     "type": "string",
+     "description": "Time that this operation completed.@OutputOnly"
+    },
+    "user": {
+     "type": "string",
+     "description": "User who requested this operation.@OutputOnly"
+    },
+    "target": {
+     "type": "string",
+     "description": "Name of the resource that this operation is acting on. Example: apps/myapp/services/default.@OutputOnly"
+    },
+    "ephemeralMessage": {
+     "type": "string",
+     "description": "Ephemeral message that may change every time the operation is polled. @OutputOnly"
+    },
+    "warning": {
+     "type": "array",
+     "description": "Durable messages that persist on every operation poll. @OutputOnly",
+     "items": {
+      "type": "string"
+     }
+    }
+   }
+  },
+  "OperationMetadataV1": {
+   "id": "OperationMetadataV1",
+   "type": "object",
+   "description": "Metadata for the given google.longrunning.Operation.",
+   "properties": {
+    "method": {
+     "type": "string",
+     "description": "API method that initiated this operation. Example: google.appengine.v1.Versions.CreateVersion.@OutputOnly"
+    },
+    "insertTime": {
+     "type": "string",
+     "description": "Time that this operation was created.@OutputOnly"
+    },
+    "endTime": {
+     "type": "string",
+     "description": "Time that this operation completed.@OutputOnly"
+    },
+    "user": {
+     "type": "string",
+     "description": "User who requested this operation.@OutputOnly"
+    },
+    "target": {
+     "type": "string",
+     "description": "Name of the resource that this operation is acting on. Example: apps/myapp/services/default.@OutputOnly"
+    },
+    "ephemeralMessage": {
+     "type": "string",
+     "description": "Ephemeral message that may change every time the operation is polled. @OutputOnly"
+    },
+    "warning": {
+     "type": "array",
+     "description": "Durable messages that persist on every operation poll. @OutputOnly",
+     "items": {
+      "type": "string"
+     }
+    }
+   }
+  },
+  "LocationMetadata": {
+   "id": "LocationMetadata",
+   "type": "object",
+   "description": "Metadata for the given google.cloud.location.Location.",
+   "properties": {
+    "standardEnvironmentAvailable": {
+     "type": "boolean",
+     "description": "App Engine Standard Environment is available in the given location.@OutputOnly"
+    },
+    "flexibleEnvironmentAvailable": {
+     "type": "boolean",
+     "description": "App Engine Flexible Environment is available in the given location.@OutputOnly"
+    }
+   }
+  }
+ },
+ "resources": {
+  "apps": {
+   "resources": {
+    "operations": {
+     "methods": {
+      "list": {
+       "id": "appengine.apps.operations.list",
+       "path": "v1alpha/apps/{appsId}/operations",
+       "httpMethod": "GET",
+       "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 below allows API services to override the binding to use different resource name schemes, such as users/*/operations.",
+       "parameters": {
+        "appsId": {
+         "type": "string",
+         "description": "Part of `name`. The name of the operation collection.",
+         "required": true,
+         "location": "path"
         },
-        "https://www.googleapis.com/auth/appengine.admin": {
-          "description": "View and manage your applications deployed on Google App Engine"
+        "filter": {
+         "type": "string",
+         "description": "The standard list filter.",
+         "location": "query"
         },
-        "https://www.googleapis.com/auth/cloud-platform.read-only": {
-          "description": "View your data across Google Cloud Platform services"
+        "pageSize": {
+         "type": "integer",
+         "description": "The standard list page size.",
+         "format": "int32",
+         "location": "query"
+        },
+        "pageToken": {
+         "type": "string",
+         "description": "The standard list page token.",
+         "location": "query"
         }
+       },
+       "parameterOrder": [
+        "appsId"
+       ],
+       "response": {
+        "$ref": "ListOperationsResponse"
+       },
+       "scopes": [
+        "https://www.googleapis.com/auth/appengine.admin",
+        "https://www.googleapis.com/auth/cloud-platform",
+        "https://www.googleapis.com/auth/cloud-platform.read-only"
+       ]
+      },
+      "get": {
+       "id": "appengine.apps.operations.get",
+       "path": "v1alpha/apps/{appsId}/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.",
+       "parameters": {
+        "appsId": {
+         "type": "string",
+         "description": "Part of `name`. The name of the operation resource.",
+         "required": true,
+         "location": "path"
+        },
+        "operationsId": {
+         "type": "string",
+         "description": "Part of `name`. See documentation of `appsId`.",
+         "required": true,
+         "location": "path"
+        }
+       },
+       "parameterOrder": [
+        "appsId",
+        "operationsId"
+       ],
+       "response": {
+        "$ref": "Operation"
+       },
+       "scopes": [
+        "https://www.googleapis.com/auth/appengine.admin",
+        "https://www.googleapis.com/auth/cloud-platform",
+        "https://www.googleapis.com/auth/cloud-platform.read-only"
+       ]
       }
+     }
+    },
+    "locations": {
+     "methods": {
+      "list": {
+       "id": "appengine.apps.locations.list",
+       "path": "v1alpha/apps/{appsId}/locations",
+       "httpMethod": "GET",
+       "description": "Lists information about the supported locations for this service.",
+       "parameters": {
+        "appsId": {
+         "type": "string",
+         "description": "Part of `name`. The resource that owns the locations collection, if applicable.",
+         "required": true,
+         "location": "path"
+        },
+        "filter": {
+         "type": "string",
+         "description": "The standard list filter.",
+         "location": "query"
+        },
+        "pageSize": {
+         "type": "integer",
+         "description": "The standard list page size.",
+         "format": "int32",
+         "location": "query"
+        },
+        "pageToken": {
+         "type": "string",
+         "description": "The standard list page token.",
+         "location": "query"
+        }
+       },
+       "parameterOrder": [
+        "appsId"
+       ],
+       "response": {
+        "$ref": "ListLocationsResponse"
+       },
+       "scopes": [
+        "https://www.googleapis.com/auth/appengine.admin",
+        "https://www.googleapis.com/auth/cloud-platform",
+        "https://www.googleapis.com/auth/cloud-platform.read-only"
+       ]
+      },
+      "get": {
+       "id": "appengine.apps.locations.get",
+       "path": "v1alpha/apps/{appsId}/locations/{locationsId}",
+       "httpMethod": "GET",
+       "description": "Get information about a location.",
+       "parameters": {
+        "appsId": {
+         "type": "string",
+         "description": "Part of `name`. Resource name for the location.",
+         "required": true,
+         "location": "path"
+        },
+        "locationsId": {
+         "type": "string",
+         "description": "Part of `name`. See documentation of `appsId`.",
+         "required": true,
+         "location": "path"
+        }
+       },
+       "parameterOrder": [
+        "appsId",
+        "locationsId"
+       ],
+       "response": {
+        "$ref": "Location"
+       },
+       "scopes": [
+        "https://www.googleapis.com/auth/appengine.admin",
+        "https://www.googleapis.com/auth/cloud-platform",
+        "https://www.googleapis.com/auth/cloud-platform.read-only"
+       ]
+      }
+     }
     }
-  },
-  "kind": "discovery#restDescription",
-  "description": "Provisions and manages App Engine applications.",
-  "servicePath": ""
+   }
+  }
+ }
 }
diff --git a/appengine/v1alpha/appengine-gen.go b/appengine/v1alpha/appengine-gen.go
index 172b28d..8b49ca5 100644
--- a/appengine/v1alpha/appengine-gen.go
+++ b/appengine/v1alpha/appengine-gen.go
@@ -67,10 +67,9 @@
 }
 
 type APIService struct {
-	client                    *http.Client
-	BasePath                  string // API endpoint base URL
-	UserAgent                 string // optional additional User-Agent fragment
-	GoogleClientHeaderElement string // client header fragment, for Google use only
+	client    *http.Client
+	BasePath  string // API endpoint base URL
+	UserAgent string // optional additional User-Agent fragment
 
 	Apps *AppsService
 }
@@ -82,15 +81,10 @@
 	return googleapi.UserAgent + " " + s.UserAgent
 }
 
-func (s *APIService) clientHeader() string {
-	return gensupport.GoogleClientHeader("20170210", s.GoogleClientHeaderElement)
-}
-
 func NewAppsService(s *APIService) *AppsService {
 	rs := &AppsService{s: s}
 	rs.Locations = NewAppsLocationsService(s)
 	rs.Operations = NewAppsOperationsService(s)
-	rs.Services = NewAppsServicesService(s)
 	return rs
 }
 
@@ -100,8 +94,6 @@
 	Locations *AppsLocationsService
 
 	Operations *AppsOperationsService
-
-	Services *AppsServicesService
 }
 
 func NewAppsLocationsService(s *APIService) *AppsLocationsService {
@@ -122,945 +114,6 @@
 	s *APIService
 }
 
-func NewAppsServicesService(s *APIService) *AppsServicesService {
-	rs := &AppsServicesService{s: s}
-	rs.Versions = NewAppsServicesVersionsService(s)
-	return rs
-}
-
-type AppsServicesService struct {
-	s *APIService
-
-	Versions *AppsServicesVersionsService
-}
-
-func NewAppsServicesVersionsService(s *APIService) *AppsServicesVersionsService {
-	rs := &AppsServicesVersionsService{s: s}
-	rs.Instances = NewAppsServicesVersionsInstancesService(s)
-	return rs
-}
-
-type AppsServicesVersionsService struct {
-	s *APIService
-
-	Instances *AppsServicesVersionsInstancesService
-}
-
-func NewAppsServicesVersionsInstancesService(s *APIService) *AppsServicesVersionsInstancesService {
-	rs := &AppsServicesVersionsInstancesService{s: s}
-	return rs
-}
-
-type AppsServicesVersionsInstancesService struct {
-	s *APIService
-}
-
-// ApiConfigHandler: Google Cloud Endpoints
-// (https://cloud.google.com/appengine/docs/python/endpoints/)
-// configuration for API handlers.
-type ApiConfigHandler struct {
-	// AuthFailAction: Action to take when users access resources that
-	// require authentication. Defaults to redirect.
-	//
-	// Possible values:
-	//   "AUTH_FAIL_ACTION_UNSPECIFIED" - Not specified.
-	// AUTH_FAIL_ACTION_REDIRECT is assumed.
-	//   "AUTH_FAIL_ACTION_REDIRECT" - Redirects user to
-	// "accounts.google.com". The user is redirected back to the application
-	// URL after signing in or creating an account.
-	//   "AUTH_FAIL_ACTION_UNAUTHORIZED" - Rejects request with a 401 HTTP
-	// status code and an error message.
-	AuthFailAction string `json:"authFailAction,omitempty"`
-
-	// Login: Level of login required to access this resource. Defaults to
-	// optional.
-	//
-	// Possible values:
-	//   "LOGIN_UNSPECIFIED" - Not specified. LOGIN_OPTIONAL is assumed.
-	//   "LOGIN_OPTIONAL" - Does not require that the user is signed in.
-	//   "LOGIN_ADMIN" - If the user is not signed in, the auth_fail_action
-	// is taken. In addition, if the user is not an administrator for the
-	// application, they are given an error message regardless of
-	// auth_fail_action. If the user is an administrator, the handler
-	// proceeds.
-	//   "LOGIN_REQUIRED" - If the user has signed in, the handler proceeds
-	// normally. Otherwise, the auth_fail_action is taken.
-	Login string `json:"login,omitempty"`
-
-	// Script: Path to the script from the application root directory.
-	Script string `json:"script,omitempty"`
-
-	// SecurityLevel: Security (HTTPS) enforcement for this URL.
-	//
-	// Possible values:
-	//   "SECURE_UNSPECIFIED" - Not specified.
-	//   "SECURE_DEFAULT" - Both HTTP and HTTPS requests with URLs that
-	// match the handler succeed without redirects. The application can
-	// examine the request to determine which protocol was used, and respond
-	// accordingly.
-	//   "SECURE_NEVER" - Requests for a URL that match this handler that
-	// use HTTPS are automatically redirected to the HTTP equivalent URL.
-	//   "SECURE_OPTIONAL" - Both HTTP and HTTPS requests with URLs that
-	// match the handler succeed without redirects. The application can
-	// examine the request to determine which protocol was used and respond
-	// accordingly.
-	//   "SECURE_ALWAYS" - Requests for a URL that match this handler that
-	// do not use HTTPS are automatically redirected to the HTTPS URL with
-	// the same path. Query parameters are reserved for the redirect.
-	SecurityLevel string `json:"securityLevel,omitempty"`
-
-	// Url: URL to serve the endpoint at.
-	Url string `json:"url,omitempty"`
-
-	// ForceSendFields is a list of field names (e.g. "AuthFailAction") to
-	// unconditionally include in API requests. By default, fields with
-	// empty values are omitted from API requests. However, any non-pointer,
-	// non-interface field appearing in ForceSendFields will be sent to the
-	// server regardless of whether the field is empty or not. This may be
-	// used to include empty fields in Patch requests.
-	ForceSendFields []string `json:"-"`
-
-	// NullFields is a list of field names (e.g. "AuthFailAction") to
-	// include in API requests with the JSON null value. By default, fields
-	// with empty values are omitted from API requests. However, any field
-	// with an empty value appearing in NullFields will be sent to the
-	// server as null. It is an error if a field in this list has a
-	// non-empty value. This may be used to include null fields in Patch
-	// requests.
-	NullFields []string `json:"-"`
-}
-
-func (s *ApiConfigHandler) MarshalJSON() ([]byte, error) {
-	type noMethod ApiConfigHandler
-	raw := noMethod(*s)
-	return gensupport.MarshalJSON(raw, s.ForceSendFields, s.NullFields)
-}
-
-// ApiEndpointHandler: Uses Google Cloud Endpoints to handle requests.
-type ApiEndpointHandler struct {
-	// ScriptPath: Path to the script from the application root directory.
-	ScriptPath string `json:"scriptPath,omitempty"`
-
-	// ForceSendFields is a list of field names (e.g. "ScriptPath") to
-	// unconditionally include in API requests. By default, fields with
-	// empty values are omitted from API requests. However, any non-pointer,
-	// non-interface field appearing in ForceSendFields will be sent to the
-	// server regardless of whether the field is empty or not. This may be
-	// used to include empty fields in Patch requests.
-	ForceSendFields []string `json:"-"`
-
-	// NullFields is a list of field names (e.g. "ScriptPath") to include in
-	// API requests with the JSON null value. By default, fields with empty
-	// values are omitted from API requests. However, any field with an
-	// empty value appearing in NullFields will be sent to the server as
-	// null. It is an error if a field in this list has a non-empty value.
-	// This may be used to include null fields in Patch requests.
-	NullFields []string `json:"-"`
-}
-
-func (s *ApiEndpointHandler) MarshalJSON() ([]byte, error) {
-	type noMethod ApiEndpointHandler
-	raw := noMethod(*s)
-	return gensupport.MarshalJSON(raw, s.ForceSendFields, s.NullFields)
-}
-
-// Application: An Application resource contains the top-level
-// configuration of an App Engine application.
-type Application struct {
-	// AuthDomain: Google Apps authentication domain that controls which
-	// users can access this application.Defaults to open access for any
-	// Google Account.
-	AuthDomain string `json:"authDomain,omitempty"`
-
-	// CodeBucket: Google Cloud Storage bucket that can be used for storing
-	// files associated with this application. This bucket is associated
-	// with the application and can be used by the gcloud deployment
-	// commands.@OutputOnly
-	CodeBucket string `json:"codeBucket,omitempty"`
-
-	// DefaultBucket: Google Cloud Storage bucket that can be used by this
-	// application to store content.@OutputOnly
-	DefaultBucket string `json:"defaultBucket,omitempty"`
-
-	// DefaultCookieExpiration: Cookie expiration policy for this
-	// application.
-	DefaultCookieExpiration string `json:"defaultCookieExpiration,omitempty"`
-
-	// DefaultHostname: Hostname used to reach this application, as resolved
-	// by App Engine.@OutputOnly
-	DefaultHostname string `json:"defaultHostname,omitempty"`
-
-	// DispatchRules: HTTP path dispatch rules for requests to the
-	// application that do not explicitly target a service or version. Rules
-	// are order-dependent.@OutputOnly
-	DispatchRules []*UrlDispatchRule `json:"dispatchRules,omitempty"`
-
-	// GcrDomain: The Google Container Registry domain used for storing
-	// managed build docker images for this application.
-	GcrDomain string `json:"gcrDomain,omitempty"`
-
-	Iap *IdentityAwareProxy `json:"iap,omitempty"`
-
-	// Id: Identifier of the Application resource. This identifier is
-	// equivalent to the project ID of the Google Cloud Platform project
-	// where you want to deploy your application. Example: myapp.
-	Id string `json:"id,omitempty"`
-
-	// LocationId: Location from which this application will be run.
-	// Application instances will run out of data centers in the chosen
-	// location, which is also where all of the application's end user
-	// content is stored.Defaults to us-central.Options are:us-central -
-	// Central USeurope-west - Western Europeus-east1 - Eastern US
-	LocationId string `json:"locationId,omitempty"`
-
-	// Name: Full path to the Application resource in the API. Example:
-	// apps/myapp.@OutputOnly
-	Name string `json:"name,omitempty"`
-
-	// ServingStatus: Serving status of this application.
-	//
-	// Possible values:
-	//   "UNSPECIFIED" - Serving status is unspecified.
-	//   "SERVING" - Application is serving.
-	//   "USER_DISABLED" - Application has been disabled by the user.
-	//   "SYSTEM_DISABLED" - Application has been disabled by the system.
-	ServingStatus string `json:"servingStatus,omitempty"`
-
-	// ServerResponse contains the HTTP response code and headers from the
-	// server.
-	googleapi.ServerResponse `json:"-"`
-
-	// ForceSendFields is a list of field names (e.g. "AuthDomain") to
-	// unconditionally include in API requests. By default, fields with
-	// empty values are omitted from API requests. However, any non-pointer,
-	// non-interface field appearing in ForceSendFields will be sent to the
-	// server regardless of whether the field is empty or not. This may be
-	// used to include empty fields in Patch requests.
-	ForceSendFields []string `json:"-"`
-
-	// NullFields is a list of field names (e.g. "AuthDomain") to include in
-	// API requests with the JSON null value. By default, fields with empty
-	// values are omitted from API requests. However, any field with an
-	// empty value appearing in NullFields will be sent to the server as
-	// null. It is an error if a field in this list has a non-empty value.
-	// This may be used to include null fields in Patch requests.
-	NullFields []string `json:"-"`
-}
-
-func (s *Application) MarshalJSON() ([]byte, error) {
-	type noMethod Application
-	raw := noMethod(*s)
-	return gensupport.MarshalJSON(raw, s.ForceSendFields, s.NullFields)
-}
-
-// AutomaticScaling: Automatic scaling is based on request rate,
-// response latencies, and other application metrics.
-type AutomaticScaling struct {
-	// CoolDownPeriod: Amount of time that the Autoscaler
-	// (https://cloud.google.com/compute/docs/autoscaler/) should wait
-	// between changes to the number of virtual machines. Only applicable
-	// for VM runtimes.
-	CoolDownPeriod string `json:"coolDownPeriod,omitempty"`
-
-	// CpuUtilization: Target scaling by CPU usage.
-	CpuUtilization *CpuUtilization `json:"cpuUtilization,omitempty"`
-
-	// DiskUtilization: Target scaling by disk usage.
-	DiskUtilization *DiskUtilization `json:"diskUtilization,omitempty"`
-
-	// MaxConcurrentRequests: Number of concurrent requests an automatic
-	// scaling instance can accept before the scheduler spawns a new
-	// instance.Defaults to a runtime-specific value.
-	MaxConcurrentRequests int64 `json:"maxConcurrentRequests,omitempty"`
-
-	// MaxIdleInstances: Maximum number of idle instances that should be
-	// maintained for this version.
-	MaxIdleInstances int64 `json:"maxIdleInstances,omitempty"`
-
-	// MaxPendingLatency: Maximum amount of time that a request should wait
-	// in the pending queue before starting a new instance to handle it.
-	MaxPendingLatency string `json:"maxPendingLatency,omitempty"`
-
-	// MaxTotalInstances: Maximum number of instances that should be started
-	// to handle requests.
-	MaxTotalInstances int64 `json:"maxTotalInstances,omitempty"`
-
-	// MinIdleInstances: Minimum number of idle instances that should be
-	// maintained for this version. Only applicable for the default version
-	// of a service.
-	MinIdleInstances int64 `json:"minIdleInstances,omitempty"`
-
-	// MinPendingLatency: Minimum amount of time a request should wait in
-	// the pending queue before starting a new instance to handle it.
-	MinPendingLatency string `json:"minPendingLatency,omitempty"`
-
-	// MinTotalInstances: Minimum number of instances that should be
-	// maintained for this version.
-	MinTotalInstances int64 `json:"minTotalInstances,omitempty"`
-
-	// NetworkUtilization: Target scaling by network usage.
-	NetworkUtilization *NetworkUtilization `json:"networkUtilization,omitempty"`
-
-	// RequestUtilization: Target scaling by request utilization.
-	RequestUtilization *RequestUtilization `json:"requestUtilization,omitempty"`
-
-	// ForceSendFields is a list of field names (e.g. "CoolDownPeriod") to
-	// unconditionally include in API requests. By default, fields with
-	// empty values are omitted from API requests. However, any non-pointer,
-	// non-interface field appearing in ForceSendFields will be sent to the
-	// server regardless of whether the field is empty or not. This may be
-	// used to include empty fields in Patch requests.
-	ForceSendFields []string `json:"-"`
-
-	// NullFields is a list of field names (e.g. "CoolDownPeriod") to
-	// include in API requests with the JSON null value. By default, fields
-	// with empty values are omitted from API requests. However, any field
-	// with an empty value appearing in NullFields will be sent to the
-	// server as null. It is an error if a field in this list has a
-	// non-empty value. This may be used to include null fields in Patch
-	// requests.
-	NullFields []string `json:"-"`
-}
-
-func (s *AutomaticScaling) MarshalJSON() ([]byte, error) {
-	type noMethod AutomaticScaling
-	raw := noMethod(*s)
-	return gensupport.MarshalJSON(raw, s.ForceSendFields, s.NullFields)
-}
-
-// BasicScaling: A service with basic scaling will create an instance
-// when the application receives a request. The instance will be turned
-// down when the app becomes idle. Basic scaling is ideal for work that
-// is intermittent or driven by user activity.
-type BasicScaling struct {
-	// IdleTimeout: Duration of time after the last request that an instance
-	// must wait before the instance is shut down.
-	IdleTimeout string `json:"idleTimeout,omitempty"`
-
-	// MaxInstances: Maximum number of instances to create for this version.
-	MaxInstances int64 `json:"maxInstances,omitempty"`
-
-	// ForceSendFields is a list of field names (e.g. "IdleTimeout") to
-	// unconditionally include in API requests. By default, fields with
-	// empty values are omitted from API requests. However, any non-pointer,
-	// non-interface field appearing in ForceSendFields will be sent to the
-	// server regardless of whether the field is empty or not. This may be
-	// used to include empty fields in Patch requests.
-	ForceSendFields []string `json:"-"`
-
-	// NullFields is a list of field names (e.g. "IdleTimeout") to include
-	// in API requests with the JSON null value. By default, fields with
-	// empty values are omitted from API requests. However, any field with
-	// an empty value appearing in NullFields will be sent to the server as
-	// null. It is an error if a field in this list has a non-empty value.
-	// This may be used to include null fields in Patch requests.
-	NullFields []string `json:"-"`
-}
-
-func (s *BasicScaling) MarshalJSON() ([]byte, error) {
-	type noMethod BasicScaling
-	raw := noMethod(*s)
-	return gensupport.MarshalJSON(raw, s.ForceSendFields, s.NullFields)
-}
-
-// ContainerInfo: Docker image that is used to create a container and
-// start a VM instance for the version that you deploy. Only applicable
-// for instances running in the App Engine flexible environment.
-type ContainerInfo struct {
-	// Image: URI to the hosted container image in Google Container
-	// Registry. The URI must be fully qualified and include a tag or
-	// digest. Examples: "gcr.io/my-project/image:tag" or
-	// "gcr.io/my-project/image@digest"
-	Image string `json:"image,omitempty"`
-
-	// ForceSendFields is a list of field names (e.g. "Image") to
-	// unconditionally include in API requests. By default, fields with
-	// empty values are omitted from API requests. However, any non-pointer,
-	// non-interface field appearing in ForceSendFields will be sent to the
-	// server regardless of whether the field is empty or not. This may be
-	// used to include empty fields in Patch requests.
-	ForceSendFields []string `json:"-"`
-
-	// NullFields is a list of field names (e.g. "Image") to include in API
-	// requests with the JSON null value. By default, fields with empty
-	// values are omitted from API requests. However, any field with an
-	// empty value appearing in NullFields will be sent to the server as
-	// null. It is an error if a field in this list has a non-empty value.
-	// This may be used to include null fields in Patch requests.
-	NullFields []string `json:"-"`
-}
-
-func (s *ContainerInfo) MarshalJSON() ([]byte, error) {
-	type noMethod ContainerInfo
-	raw := noMethod(*s)
-	return gensupport.MarshalJSON(raw, s.ForceSendFields, s.NullFields)
-}
-
-// CpuUtilization: Target scaling by CPU usage.
-type CpuUtilization struct {
-	// AggregationWindowLength: Period of time over which CPU utilization is
-	// calculated.
-	AggregationWindowLength string `json:"aggregationWindowLength,omitempty"`
-
-	// TargetUtilization: Target CPU utilization ratio to maintain when
-	// scaling. Must be between 0 and 1.
-	TargetUtilization float64 `json:"targetUtilization,omitempty"`
-
-	// ForceSendFields is a list of field names (e.g.
-	// "AggregationWindowLength") to unconditionally include in API
-	// requests. By default, fields with empty values are omitted from API
-	// requests. However, any non-pointer, non-interface field appearing in
-	// ForceSendFields will be sent to the server regardless of whether the
-	// field is empty or not. This may be used to include empty fields in
-	// Patch requests.
-	ForceSendFields []string `json:"-"`
-
-	// NullFields is a list of field names (e.g. "AggregationWindowLength")
-	// to include in API requests with the JSON null value. By default,
-	// fields with empty values are omitted from API requests. However, any
-	// field with an empty value appearing in NullFields will be sent to the
-	// server as null. It is an error if a field in this list has a
-	// non-empty value. This may be used to include null fields in Patch
-	// requests.
-	NullFields []string `json:"-"`
-}
-
-func (s *CpuUtilization) MarshalJSON() ([]byte, error) {
-	type noMethod CpuUtilization
-	raw := noMethod(*s)
-	return gensupport.MarshalJSON(raw, s.ForceSendFields, s.NullFields)
-}
-
-func (s *CpuUtilization) UnmarshalJSON(data []byte) error {
-	type noMethod CpuUtilization
-	var s1 struct {
-		TargetUtilization gensupport.JSONFloat64 `json:"targetUtilization"`
-		*noMethod
-	}
-	s1.noMethod = (*noMethod)(s)
-	if err := json.Unmarshal(data, &s1); err != nil {
-		return err
-	}
-	s.TargetUtilization = float64(s1.TargetUtilization)
-	return nil
-}
-
-// DebugInstanceRequest: Request message for Instances.DebugInstance.
-type DebugInstanceRequest struct {
-	// SshKey: Public SSH key to add to the instance.
-	// Examples:
-	// [USERNAME]:ssh-rsa [KEY_VALUE] [USERNAME]
-	// [USERNAME]:ssh-rsa [KEY_VALUE] google-ssh
-	// {"userName":"[USERNAME]","expireOn":"[EXPIRE_TIME]"}For more
-	// information, see Adding and Removing SSH Keys
-	// (https://cloud.google.com/compute/docs/instances/adding-removing-ssh-k
-	// eys).
-	SshKey string `json:"sshKey,omitempty"`
-
-	// ForceSendFields is a list of field names (e.g. "SshKey") to
-	// unconditionally include in API requests. By default, fields with
-	// empty values are omitted from API requests. However, any non-pointer,
-	// non-interface field appearing in ForceSendFields will be sent to the
-	// server regardless of whether the field is empty or not. This may be
-	// used to include empty fields in Patch requests.
-	ForceSendFields []string `json:"-"`
-
-	// NullFields is a list of field names (e.g. "SshKey") to include in API
-	// requests with the JSON null value. By default, fields with empty
-	// values are omitted from API requests. However, any field with an
-	// empty value appearing in NullFields will be sent to the server as
-	// null. It is an error if a field in this list has a non-empty value.
-	// This may be used to include null fields in Patch requests.
-	NullFields []string `json:"-"`
-}
-
-func (s *DebugInstanceRequest) MarshalJSON() ([]byte, error) {
-	type noMethod DebugInstanceRequest
-	raw := noMethod(*s)
-	return gensupport.MarshalJSON(raw, s.ForceSendFields, s.NullFields)
-}
-
-// Deployment: Code and application artifacts used to deploy a version
-// to App Engine.
-type Deployment struct {
-	// Container: The Docker image for the container that runs the version.
-	// Only applicable for instances running in the App Engine flexible
-	// environment.
-	Container *ContainerInfo `json:"container,omitempty"`
-
-	// Files: Manifest of the files stored in Google Cloud Storage that are
-	// included as part of this version. All files must be readable using
-	// the credentials supplied with this call.
-	Files map[string]FileInfo `json:"files,omitempty"`
-
-	// Zip: The zip file for this deployment, if this is a zip deployment.
-	Zip *ZipInfo `json:"zip,omitempty"`
-
-	// ForceSendFields is a list of field names (e.g. "Container") to
-	// unconditionally include in API requests. By default, fields with
-	// empty values are omitted from API requests. However, any non-pointer,
-	// non-interface field appearing in ForceSendFields will be sent to the
-	// server regardless of whether the field is empty or not. This may be
-	// used to include empty fields in Patch requests.
-	ForceSendFields []string `json:"-"`
-
-	// NullFields is a list of field names (e.g. "Container") to include in
-	// API requests with the JSON null value. By default, fields with empty
-	// values are omitted from API requests. However, any field with an
-	// empty value appearing in NullFields will be sent to the server as
-	// null. It is an error if a field in this list has a non-empty value.
-	// This may be used to include null fields in Patch requests.
-	NullFields []string `json:"-"`
-}
-
-func (s *Deployment) MarshalJSON() ([]byte, error) {
-	type noMethod Deployment
-	raw := noMethod(*s)
-	return gensupport.MarshalJSON(raw, s.ForceSendFields, s.NullFields)
-}
-
-// DiskUtilization: Target scaling by disk usage. Only applicable for VM
-// runtimes.
-type DiskUtilization struct {
-	// TargetReadBytesPerSecond: Target bytes read per second.
-	TargetReadBytesPerSecond int64 `json:"targetReadBytesPerSecond,omitempty"`
-
-	// TargetReadOpsPerSecond: Target ops read per seconds.
-	TargetReadOpsPerSecond int64 `json:"targetReadOpsPerSecond,omitempty"`
-
-	// TargetWriteBytesPerSecond: Target bytes written per second.
-	TargetWriteBytesPerSecond int64 `json:"targetWriteBytesPerSecond,omitempty"`
-
-	// TargetWriteOpsPerSecond: Target ops written per second.
-	TargetWriteOpsPerSecond int64 `json:"targetWriteOpsPerSecond,omitempty"`
-
-	// ForceSendFields is a list of field names (e.g.
-	// "TargetReadBytesPerSecond") to unconditionally include in API
-	// requests. By default, fields with empty values are omitted from API
-	// requests. However, any non-pointer, non-interface field appearing in
-	// ForceSendFields will be sent to the server regardless of whether the
-	// field is empty or not. This may be used to include empty fields in
-	// Patch requests.
-	ForceSendFields []string `json:"-"`
-
-	// NullFields is a list of field names (e.g. "TargetReadBytesPerSecond")
-	// to include in API requests with the JSON null value. By default,
-	// fields with empty values are omitted from API requests. However, any
-	// field with an empty value appearing in NullFields will be sent to the
-	// server as null. It is an error if a field in this list has a
-	// non-empty value. This may be used to include null fields in Patch
-	// requests.
-	NullFields []string `json:"-"`
-}
-
-func (s *DiskUtilization) MarshalJSON() ([]byte, error) {
-	type noMethod DiskUtilization
-	raw := noMethod(*s)
-	return gensupport.MarshalJSON(raw, s.ForceSendFields, s.NullFields)
-}
-
-// EndpointsApiService: Cloud Endpoints
-// (https://cloud.google.com/endpoints) configuration. The Endpoints API
-// Service provides tooling for serving Open API and gRPC endpoints via
-// an NGINX proxy.The fields here refer to the name and configuration id
-// of a "service" resource in the Service Management API
-// (https://cloud.google.com/service-management/overview).
-type EndpointsApiService struct {
-	// ConfigId: Endpoints service configuration id as specified by the
-	// Service Management API. For example "2016-09-19r1"
-	ConfigId string `json:"configId,omitempty"`
-
-	// Name: Endpoints service name which is the name of the "service"
-	// resource in the Service Management API. For example
-	// "myapi.endpoints.myproject.cloud.goog"
-	Name string `json:"name,omitempty"`
-
-	// ForceSendFields is a list of field names (e.g. "ConfigId") to
-	// unconditionally include in API requests. By default, fields with
-	// empty values are omitted from API requests. However, any non-pointer,
-	// non-interface field appearing in ForceSendFields will be sent to the
-	// server regardless of whether the field is empty or not. This may be
-	// used to include empty fields in Patch requests.
-	ForceSendFields []string `json:"-"`
-
-	// NullFields is a list of field names (e.g. "ConfigId") to include in
-	// API requests with the JSON null value. By default, fields with empty
-	// values are omitted from API requests. However, any field with an
-	// empty value appearing in NullFields will be sent to the server as
-	// null. It is an error if a field in this list has a non-empty value.
-	// This may be used to include null fields in Patch requests.
-	NullFields []string `json:"-"`
-}
-
-func (s *EndpointsApiService) MarshalJSON() ([]byte, error) {
-	type noMethod EndpointsApiService
-	raw := noMethod(*s)
-	return gensupport.MarshalJSON(raw, s.ForceSendFields, s.NullFields)
-}
-
-// ErrorHandler: Custom static error page to be served when an error
-// occurs.
-type ErrorHandler struct {
-	// ErrorCode: Error condition this handler applies to.
-	//
-	// Possible values:
-	//   "ERROR_CODE_UNSPECIFIED" - Not specified. ERROR_CODE_DEFAULT is
-	// assumed.
-	//   "ERROR_CODE_DEFAULT" - All other error types.
-	//   "ERROR_CODE_OVER_QUOTA" - Application has exceeded a resource
-	// quota.
-	//   "ERROR_CODE_DOS_API_DENIAL" - Client blocked by the application's
-	// Denial of Service protection configuration.
-	//   "ERROR_CODE_TIMEOUT" - Deadline reached before the application
-	// responds.
-	ErrorCode string `json:"errorCode,omitempty"`
-
-	// MimeType: MIME type of file. Defaults to text/html.
-	MimeType string `json:"mimeType,omitempty"`
-
-	// StaticFile: Static file content to be served for this error.
-	StaticFile string `json:"staticFile,omitempty"`
-
-	// ForceSendFields is a list of field names (e.g. "ErrorCode") to
-	// unconditionally include in API requests. By default, fields with
-	// empty values are omitted from API requests. However, any non-pointer,
-	// non-interface field appearing in ForceSendFields will be sent to the
-	// server regardless of whether the field is empty or not. This may be
-	// used to include empty fields in Patch requests.
-	ForceSendFields []string `json:"-"`
-
-	// NullFields is a list of field names (e.g. "ErrorCode") to include in
-	// API requests with the JSON null value. By default, fields with empty
-	// values are omitted from API requests. However, any field with an
-	// empty value appearing in NullFields will be sent to the server as
-	// null. It is an error if a field in this list has a non-empty value.
-	// This may be used to include null fields in Patch requests.
-	NullFields []string `json:"-"`
-}
-
-func (s *ErrorHandler) MarshalJSON() ([]byte, error) {
-	type noMethod ErrorHandler
-	raw := noMethod(*s)
-	return gensupport.MarshalJSON(raw, s.ForceSendFields, s.NullFields)
-}
-
-// FileInfo: Single source file that is part of the version to be
-// deployed. Each source file that is deployed must be specified
-// separately.
-type FileInfo struct {
-	// MimeType: The MIME type of the file.Defaults to the value from Google
-	// Cloud Storage.
-	MimeType string `json:"mimeType,omitempty"`
-
-	// Sha1Sum: The SHA1 hash of the file, in hex.
-	Sha1Sum string `json:"sha1Sum,omitempty"`
-
-	// SourceUrl: URL source to use to fetch this file. Must be a URL to a
-	// resource in Google Cloud Storage in the form
-	// 'http(s)://storage.googleapis.com/<bucket>/<object>'.
-	SourceUrl string `json:"sourceUrl,omitempty"`
-
-	// ForceSendFields is a list of field names (e.g. "MimeType") to
-	// unconditionally include in API requests. By default, fields with
-	// empty values are omitted from API requests. However, any non-pointer,
-	// non-interface field appearing in ForceSendFields will be sent to the
-	// server regardless of whether the field is empty or not. This may be
-	// used to include empty fields in Patch requests.
-	ForceSendFields []string `json:"-"`
-
-	// NullFields is a list of field names (e.g. "MimeType") to include in
-	// API requests with the JSON null value. By default, fields with empty
-	// values are omitted from API requests. However, any field with an
-	// empty value appearing in NullFields will be sent to the server as
-	// null. It is an error if a field in this list has a non-empty value.
-	// This may be used to include null fields in Patch requests.
-	NullFields []string `json:"-"`
-}
-
-func (s *FileInfo) MarshalJSON() ([]byte, error) {
-	type noMethod FileInfo
-	raw := noMethod(*s)
-	return gensupport.MarshalJSON(raw, s.ForceSendFields, s.NullFields)
-}
-
-// HealthCheck: Health checking configuration for VM instances.
-// Unhealthy instances are killed and replaced with new instances. Only
-// applicable for instances in App Engine flexible environment.
-type HealthCheck struct {
-	// CheckInterval: Interval between health checks.
-	CheckInterval string `json:"checkInterval,omitempty"`
-
-	// DisableHealthCheck: Whether to explicitly disable health checks for
-	// this instance.
-	DisableHealthCheck bool `json:"disableHealthCheck,omitempty"`
-
-	// HealthyThreshold: Number of consecutive successful health checks
-	// required before receiving traffic.
-	HealthyThreshold int64 `json:"healthyThreshold,omitempty"`
-
-	// Host: Host header to send when performing an HTTP health check.
-	// Example: "myapp.appspot.com"
-	Host string `json:"host,omitempty"`
-
-	// RestartThreshold: Number of consecutive failed health checks required
-	// before an instance is restarted.
-	RestartThreshold int64 `json:"restartThreshold,omitempty"`
-
-	// Timeout: Time before the health check is considered failed.
-	Timeout string `json:"timeout,omitempty"`
-
-	// UnhealthyThreshold: Number of consecutive failed health checks
-	// required before removing traffic.
-	UnhealthyThreshold int64 `json:"unhealthyThreshold,omitempty"`
-
-	// ForceSendFields is a list of field names (e.g. "CheckInterval") to
-	// unconditionally include in API requests. By default, fields with
-	// empty values are omitted from API requests. However, any non-pointer,
-	// non-interface field appearing in ForceSendFields will be sent to the
-	// server regardless of whether the field is empty or not. This may be
-	// used to include empty fields in Patch requests.
-	ForceSendFields []string `json:"-"`
-
-	// NullFields is a list of field names (e.g. "CheckInterval") to include
-	// in API requests with the JSON null value. By default, fields with
-	// empty values are omitted from API requests. However, any field with
-	// an empty value appearing in NullFields will be sent to the server as
-	// null. It is an error if a field in this list has a non-empty value.
-	// This may be used to include null fields in Patch requests.
-	NullFields []string `json:"-"`
-}
-
-func (s *HealthCheck) MarshalJSON() ([]byte, error) {
-	type noMethod HealthCheck
-	raw := noMethod(*s)
-	return gensupport.MarshalJSON(raw, s.ForceSendFields, s.NullFields)
-}
-
-// IdentityAwareProxy: Identity-Aware Proxy
-type IdentityAwareProxy struct {
-	// Enabled: Whether the serving infrastructure will authenticate and
-	// authorize all incoming requests.If true, the oauth2_client_id and
-	// oauth2_client_secret fields must be non-empty.
-	Enabled bool `json:"enabled,omitempty"`
-
-	// Oauth2ClientId: OAuth2 client ID to use for the authentication flow.
-	Oauth2ClientId string `json:"oauth2ClientId,omitempty"`
-
-	// Oauth2ClientSecret: OAuth2 client secret to use for the
-	// authentication flow.For security reasons, this value cannot be
-	// retrieved via the API. Instead, the SHA-256 hash of the value is
-	// returned in the oauth2_client_secret_sha256 field.@InputOnly
-	Oauth2ClientSecret string `json:"oauth2ClientSecret,omitempty"`
-
-	// Oauth2ClientSecretSha256: Hex-encoded SHA-256 hash of the client
-	// secret.@OutputOnly
-	Oauth2ClientSecretSha256 string `json:"oauth2ClientSecretSha256,omitempty"`
-
-	// ForceSendFields is a list of field names (e.g. "Enabled") to
-	// unconditionally include in API requests. By default, fields with
-	// empty values are omitted from API requests. However, any non-pointer,
-	// non-interface field appearing in ForceSendFields will be sent to the
-	// server regardless of whether the field is empty or not. This may be
-	// used to include empty fields in Patch requests.
-	ForceSendFields []string `json:"-"`
-
-	// NullFields is a list of field names (e.g. "Enabled") to include in
-	// API requests with the JSON null value. By default, fields with empty
-	// values are omitted from API requests. However, any field with an
-	// empty value appearing in NullFields will be sent to the server as
-	// null. It is an error if a field in this list has a non-empty value.
-	// This may be used to include null fields in Patch requests.
-	NullFields []string `json:"-"`
-}
-
-func (s *IdentityAwareProxy) MarshalJSON() ([]byte, error) {
-	type noMethod IdentityAwareProxy
-	raw := noMethod(*s)
-	return gensupport.MarshalJSON(raw, s.ForceSendFields, s.NullFields)
-}
-
-// Instance: An Instance resource is the computing unit that App Engine
-// uses to automatically scale an application.
-type Instance struct {
-	// AppEngineRelease: App Engine release this instance is running
-	// on.@OutputOnly
-	AppEngineRelease string `json:"appEngineRelease,omitempty"`
-
-	// Availability: Availability of the instance.@OutputOnly
-	//
-	// Possible values:
-	//   "UNSPECIFIED"
-	//   "RESIDENT"
-	//   "DYNAMIC"
-	Availability string `json:"availability,omitempty"`
-
-	// AverageLatency: Average latency (ms) over the last minute.@OutputOnly
-	AverageLatency int64 `json:"averageLatency,omitempty"`
-
-	// Errors: Number of errors since this instance was started.@OutputOnly
-	Errors int64 `json:"errors,omitempty"`
-
-	// Id: Relative name of the instance within the version. Example:
-	// instance-1.@OutputOnly
-	Id string `json:"id,omitempty"`
-
-	// MemoryUsage: Total memory in use (bytes).@OutputOnly
-	MemoryUsage int64 `json:"memoryUsage,omitempty,string"`
-
-	// Name: Full path to the Instance resource in the API. Example:
-	// apps/myapp/services/default/versions/v1/instances/instance-1.@OutputOn
-	// ly
-	Name string `json:"name,omitempty"`
-
-	// Qps: Average queries per second (QPS) over the last
-	// minute.@OutputOnly
-	Qps float64 `json:"qps,omitempty"`
-
-	// Requests: Number of requests since this instance was
-	// started.@OutputOnly
-	Requests int64 `json:"requests,omitempty"`
-
-	// StartTime: Time that this instance was started.@OutputOnly
-	StartTime string `json:"startTime,omitempty"`
-
-	// VmDebugEnabled: Whether this instance is in debug mode. Only
-	// applicable for instances in App Engine flexible
-	// environment.@OutputOnly
-	VmDebugEnabled bool `json:"vmDebugEnabled,omitempty"`
-
-	// VmId: Virtual machine ID of this instance. Only applicable for
-	// instances in App Engine flexible environment.@OutputOnly
-	VmId string `json:"vmId,omitempty"`
-
-	// VmIp: The IP address of this instance. Only applicable for instances
-	// in App Engine flexible environment.@OutputOnly
-	VmIp string `json:"vmIp,omitempty"`
-
-	// VmName: Name of the virtual machine where this instance lives. Only
-	// applicable for instances in App Engine flexible
-	// environment.@OutputOnly
-	VmName string `json:"vmName,omitempty"`
-
-	// VmStatus: Status of the virtual machine where this instance lives.
-	// Only applicable for instances in App Engine flexible
-	// environment.@OutputOnly
-	VmStatus string `json:"vmStatus,omitempty"`
-
-	// VmZoneName: Zone where the virtual machine is located. Only
-	// applicable for instances in App Engine flexible
-	// environment.@OutputOnly
-	VmZoneName string `json:"vmZoneName,omitempty"`
-
-	// ServerResponse contains the HTTP response code and headers from the
-	// server.
-	googleapi.ServerResponse `json:"-"`
-
-	// ForceSendFields is a list of field names (e.g. "AppEngineRelease") to
-	// unconditionally include in API requests. By default, fields with
-	// empty values are omitted from API requests. However, any non-pointer,
-	// non-interface field appearing in ForceSendFields will be sent to the
-	// server regardless of whether the field is empty or not. This may be
-	// used to include empty fields in Patch requests.
-	ForceSendFields []string `json:"-"`
-
-	// NullFields is a list of field names (e.g. "AppEngineRelease") to
-	// include in API requests with the JSON null value. By default, fields
-	// with empty values are omitted from API requests. However, any field
-	// with an empty value appearing in NullFields will be sent to the
-	// server as null. It is an error if a field in this list has a
-	// non-empty value. This may be used to include null fields in Patch
-	// requests.
-	NullFields []string `json:"-"`
-}
-
-func (s *Instance) MarshalJSON() ([]byte, error) {
-	type noMethod Instance
-	raw := noMethod(*s)
-	return gensupport.MarshalJSON(raw, s.ForceSendFields, s.NullFields)
-}
-
-func (s *Instance) UnmarshalJSON(data []byte) error {
-	type noMethod Instance
-	var s1 struct {
-		Qps gensupport.JSONFloat64 `json:"qps"`
-		*noMethod
-	}
-	s1.noMethod = (*noMethod)(s)
-	if err := json.Unmarshal(data, &s1); err != nil {
-		return err
-	}
-	s.Qps = float64(s1.Qps)
-	return nil
-}
-
-// Library: Third-party Python runtime library that is required by the
-// application.
-type Library struct {
-	// Name: Name of the library. Example: "django".
-	Name string `json:"name,omitempty"`
-
-	// Version: Version of the library to select, or "latest".
-	Version string `json:"version,omitempty"`
-
-	// ForceSendFields is a list of field names (e.g. "Name") to
-	// unconditionally include in API requests. By default, fields with
-	// empty values are omitted from API requests. However, any non-pointer,
-	// non-interface field appearing in ForceSendFields will be sent to the
-	// server regardless of whether the field is empty or not. This may be
-	// used to include empty fields in Patch requests.
-	ForceSendFields []string `json:"-"`
-
-	// NullFields is a list of field names (e.g. "Name") to include in API
-	// requests with the JSON null value. By default, fields with empty
-	// values are omitted from API requests. However, any field with an
-	// empty value appearing in NullFields will be sent to the server as
-	// null. It is an error if a field in this list has a non-empty value.
-	// This may be used to include null fields in Patch requests.
-	NullFields []string `json:"-"`
-}
-
-func (s *Library) MarshalJSON() ([]byte, error) {
-	type noMethod Library
-	raw := noMethod(*s)
-	return gensupport.MarshalJSON(raw, s.ForceSendFields, s.NullFields)
-}
-
-// ListInstancesResponse: Response message for Instances.ListInstances.
-type ListInstancesResponse struct {
-	// Instances: The instances belonging to the requested version.
-	Instances []*Instance `json:"instances,omitempty"`
-
-	// NextPageToken: Continuation token for fetching the next page of
-	// results.
-	NextPageToken string `json:"nextPageToken,omitempty"`
-
-	// ServerResponse contains the HTTP response code and headers from the
-	// server.
-	googleapi.ServerResponse `json:"-"`
-
-	// ForceSendFields is a list of field names (e.g. "Instances") to
-	// unconditionally include in API requests. By default, fields with
-	// empty values are omitted from API requests. However, any non-pointer,
-	// non-interface field appearing in ForceSendFields will be sent to the
-	// server regardless of whether the field is empty or not. This may be
-	// used to include empty fields in Patch requests.
-	ForceSendFields []string `json:"-"`
-
-	// NullFields is a list of field names (e.g. "Instances") to include in
-	// API requests with the JSON null value. By default, fields with empty
-	// values are omitted from API requests. However, any field with an
-	// empty value appearing in NullFields will be sent to the server as
-	// null. It is an error if a field in this list has a non-empty value.
-	// This may be used to include null fields in Patch requests.
-	NullFields []string `json:"-"`
-}
-
-func (s *ListInstancesResponse) MarshalJSON() ([]byte, error) {
-	type noMethod ListInstancesResponse
-	raw := noMethod(*s)
-	return gensupport.MarshalJSON(raw, s.ForceSendFields, s.NullFields)
-}
-
 // ListLocationsResponse: The response message for
 // Locations.ListLocations.
 type ListLocationsResponse struct {
@@ -1135,135 +188,10 @@
 	return gensupport.MarshalJSON(raw, s.ForceSendFields, s.NullFields)
 }
 
-// ListServicesResponse: Response message for Services.ListServices.
-type ListServicesResponse struct {
-	// NextPageToken: Continuation token for fetching the next page of
-	// results.
-	NextPageToken string `json:"nextPageToken,omitempty"`
-
-	// Services: The services belonging to the requested application.
-	Services []*Service `json:"services,omitempty"`
-
-	// ServerResponse contains the HTTP response code and headers from the
-	// server.
-	googleapi.ServerResponse `json:"-"`
-
-	// ForceSendFields is a list of field names (e.g. "NextPageToken") to
-	// unconditionally include in API requests. By default, fields with
-	// empty values are omitted from API requests. However, any non-pointer,
-	// non-interface field appearing in ForceSendFields will be sent to the
-	// server regardless of whether the field is empty or not. This may be
-	// used to include empty fields in Patch requests.
-	ForceSendFields []string `json:"-"`
-
-	// NullFields is a list of field names (e.g. "NextPageToken") to include
-	// in API requests with the JSON null value. By default, fields with
-	// empty values are omitted from API requests. However, any field with
-	// an empty value appearing in NullFields will be sent to the server as
-	// null. It is an error if a field in this list has a non-empty value.
-	// This may be used to include null fields in Patch requests.
-	NullFields []string `json:"-"`
-}
-
-func (s *ListServicesResponse) MarshalJSON() ([]byte, error) {
-	type noMethod ListServicesResponse
-	raw := noMethod(*s)
-	return gensupport.MarshalJSON(raw, s.ForceSendFields, s.NullFields)
-}
-
-// ListVersionsResponse: Response message for Versions.ListVersions.
-type ListVersionsResponse struct {
-	// NextPageToken: Continuation token for fetching the next page of
-	// results.
-	NextPageToken string `json:"nextPageToken,omitempty"`
-
-	// Versions: The versions belonging to the requested service.
-	Versions []*Version `json:"versions,omitempty"`
-
-	// ServerResponse contains the HTTP response code and headers from the
-	// server.
-	googleapi.ServerResponse `json:"-"`
-
-	// ForceSendFields is a list of field names (e.g. "NextPageToken") to
-	// unconditionally include in API requests. By default, fields with
-	// empty values are omitted from API requests. However, any non-pointer,
-	// non-interface field appearing in ForceSendFields will be sent to the
-	// server regardless of whether the field is empty or not. This may be
-	// used to include empty fields in Patch requests.
-	ForceSendFields []string `json:"-"`
-
-	// NullFields is a list of field names (e.g. "NextPageToken") to include
-	// in API requests with the JSON null value. By default, fields with
-	// empty values are omitted from API requests. However, any field with
-	// an empty value appearing in NullFields will be sent to the server as
-	// null. It is an error if a field in this list has a non-empty value.
-	// This may be used to include null fields in Patch requests.
-	NullFields []string `json:"-"`
-}
-
-func (s *ListVersionsResponse) MarshalJSON() ([]byte, error) {
-	type noMethod ListVersionsResponse
-	raw := noMethod(*s)
-	return gensupport.MarshalJSON(raw, s.ForceSendFields, s.NullFields)
-}
-
-// LivenessCheck: Health checking configuration for VM instances.
-// Unhealthy instances are killed and replaced with new instances.
-type LivenessCheck struct {
-	// CheckInterval: Interval between health checks.
-	CheckInterval string `json:"checkInterval,omitempty"`
-
-	// HealthyThreshold: Number of consecutive successful checks required
-	// before considering the VM healthy.
-	HealthyThreshold int64 `json:"healthyThreshold,omitempty"`
-
-	// Host: Host header to send when performing a HTTP Liveness check.
-	// Example: "myapp.appspot.com"
-	Host string `json:"host,omitempty"`
-
-	// InitialDelay: The initial delay before starting to execute the
-	// checks.
-	InitialDelay string `json:"initialDelay,omitempty"`
-
-	// Path: The request path.
-	Path string `json:"path,omitempty"`
-
-	// Timeout: Time before the check is considered failed.
-	Timeout string `json:"timeout,omitempty"`
-
-	// UnhealthyThreshold: Number of consecutive failed checks required
-	// before considering the VM unhealthy.
-	UnhealthyThreshold int64 `json:"unhealthyThreshold,omitempty"`
-
-	// ForceSendFields is a list of field names (e.g. "CheckInterval") to
-	// unconditionally include in API requests. By default, fields with
-	// empty values are omitted from API requests. However, any non-pointer,
-	// non-interface field appearing in ForceSendFields will be sent to the
-	// server regardless of whether the field is empty or not. This may be
-	// used to include empty fields in Patch requests.
-	ForceSendFields []string `json:"-"`
-
-	// NullFields is a list of field names (e.g. "CheckInterval") to include
-	// in API requests with the JSON null value. By default, fields with
-	// empty values are omitted from API requests. However, any field with
-	// an empty value appearing in NullFields will be sent to the server as
-	// null. It is an error if a field in this list has a non-empty value.
-	// This may be used to include null fields in Patch requests.
-	NullFields []string `json:"-"`
-}
-
-func (s *LivenessCheck) MarshalJSON() ([]byte, error) {
-	type noMethod LivenessCheck
-	raw := noMethod(*s)
-	return gensupport.MarshalJSON(raw, s.ForceSendFields, s.NullFields)
-}
-
 // Location: A resource that represents Google Cloud Platform location.
 type Location struct {
-	// Labels: Cross-service attributes for the location. For
-	// example
+	// Labels: Cross-service attributes for the location. For example
 	// {"cloud.googleapis.com/region": "us-east1"}
-	//
 	Labels map[string]string `json:"labels,omitempty"`
 
 	// LocationId: The canonical id for this location. For example:
@@ -1342,134 +270,6 @@
 	return gensupport.MarshalJSON(raw, s.ForceSendFields, s.NullFields)
 }
 
-// ManualScaling: A service with manual scaling runs continuously,
-// allowing you to perform complex initialization and rely on the state
-// of its memory over time.
-type ManualScaling struct {
-	// Instances: Number of instances to assign to the service at the start.
-	// This number can later be altered by using the Modules API
-	// (https://cloud.google.com/appengine/docs/python/modules/functions)
-	// set_num_instances() function.
-	Instances int64 `json:"instances,omitempty"`
-
-	// ForceSendFields is a list of field names (e.g. "Instances") to
-	// unconditionally include in API requests. By default, fields with
-	// empty values are omitted from API requests. However, any non-pointer,
-	// non-interface field appearing in ForceSendFields will be sent to the
-	// server regardless of whether the field is empty or not. This may be
-	// used to include empty fields in Patch requests.
-	ForceSendFields []string `json:"-"`
-
-	// NullFields is a list of field names (e.g. "Instances") to include in
-	// API requests with the JSON null value. By default, fields with empty
-	// values are omitted from API requests. However, any field with an
-	// empty value appearing in NullFields will be sent to the server as
-	// null. It is an error if a field in this list has a non-empty value.
-	// This may be used to include null fields in Patch requests.
-	NullFields []string `json:"-"`
-}
-
-func (s *ManualScaling) MarshalJSON() ([]byte, error) {
-	type noMethod ManualScaling
-	raw := noMethod(*s)
-	return gensupport.MarshalJSON(raw, s.ForceSendFields, s.NullFields)
-}
-
-// Network: Extra network settings. Only applicable for VM runtimes.
-type Network struct {
-	// ForwardedPorts: List of ports, or port pairs, to forward from the
-	// virtual machine to the application container.
-	ForwardedPorts []string `json:"forwardedPorts,omitempty"`
-
-	// InstanceTag: Tag to apply to the VM instance during creation.
-	InstanceTag string `json:"instanceTag,omitempty"`
-
-	// Name: Google Cloud Platform network where the virtual machines are
-	// created. Specify the short name, not the resource path.Defaults to
-	// default.
-	Name string `json:"name,omitempty"`
-
-	// SubnetworkName: Google Cloud Platform sub-network where the virtual
-	// machines are created. Specify the short name, not the resource
-	// path.If a subnetwork name is specified, a network name will also be
-	// required unless it is for the default network.
-	// If the network the VM instance is being created in is a Legacy
-	// network, then the IP address is allocated from the IPv4Range.
-	// If the network the VM instance is being created in is an auto Subnet
-	// Mode Network, then only network name should be specified (not the
-	// subnetwork_name) and the IP address is created from the IPCidrRange
-	// of the subnetwork that exists in that zone for that network.
-	// If the network the VM instance is being created in is a custom Subnet
-	// Mode Network, then the subnetwork_name must be specified and the IP
-	// address is created from the IPCidrRange of the subnetwork.If
-	// specified, the subnetwork must exist in the same region as the Flex
-	// app.
-	SubnetworkName string `json:"subnetworkName,omitempty"`
-
-	// ForceSendFields is a list of field names (e.g. "ForwardedPorts") to
-	// unconditionally include in API requests. By default, fields with
-	// empty values are omitted from API requests. However, any non-pointer,
-	// non-interface field appearing in ForceSendFields will be sent to the
-	// server regardless of whether the field is empty or not. This may be
-	// used to include empty fields in Patch requests.
-	ForceSendFields []string `json:"-"`
-
-	// NullFields is a list of field names (e.g. "ForwardedPorts") to
-	// include in API requests with the JSON null value. By default, fields
-	// with empty values are omitted from API requests. However, any field
-	// with an empty value appearing in NullFields will be sent to the
-	// server as null. It is an error if a field in this list has a
-	// non-empty value. This may be used to include null fields in Patch
-	// requests.
-	NullFields []string `json:"-"`
-}
-
-func (s *Network) MarshalJSON() ([]byte, error) {
-	type noMethod Network
-	raw := noMethod(*s)
-	return gensupport.MarshalJSON(raw, s.ForceSendFields, s.NullFields)
-}
-
-// NetworkUtilization: Target scaling by network usage. Only applicable
-// for VM runtimes.
-type NetworkUtilization struct {
-	// TargetReceivedBytesPerSecond: Target bytes received per second.
-	TargetReceivedBytesPerSecond int64 `json:"targetReceivedBytesPerSecond,omitempty"`
-
-	// TargetReceivedPacketsPerSecond: Target packets received per second.
-	TargetReceivedPacketsPerSecond int64 `json:"targetReceivedPacketsPerSecond,omitempty"`
-
-	// TargetSentBytesPerSecond: Target bytes sent per second.
-	TargetSentBytesPerSecond int64 `json:"targetSentBytesPerSecond,omitempty"`
-
-	// TargetSentPacketsPerSecond: Target packets sent per second.
-	TargetSentPacketsPerSecond int64 `json:"targetSentPacketsPerSecond,omitempty"`
-
-	// ForceSendFields is a list of field names (e.g.
-	// "TargetReceivedBytesPerSecond") to unconditionally include in API
-	// requests. By default, fields with empty values are omitted from API
-	// requests. However, any non-pointer, non-interface field appearing in
-	// ForceSendFields will be sent to the server regardless of whether the
-	// field is empty or not. This may be used to include empty fields in
-	// Patch requests.
-	ForceSendFields []string `json:"-"`
-
-	// NullFields is a list of field names (e.g.
-	// "TargetReceivedBytesPerSecond") to include in API requests with the
-	// JSON null value. By default, fields with empty values are omitted
-	// from API requests. However, any field with an empty value appearing
-	// in NullFields will be sent to the server as null. It is an error if a
-	// field in this list has a non-empty value. This may be used to include
-	// null fields in Patch requests.
-	NullFields []string `json:"-"`
-}
-
-func (s *NetworkUtilization) MarshalJSON() ([]byte, error) {
-	type noMethod NetworkUtilization
-	raw := noMethod(*s)
-	return gensupport.MarshalJSON(raw, s.ForceSendFields, s.NullFields)
-}
-
 // Operation: This resource represents a long-running operation that is
 // the result of a network API call.
 type Operation struct {
@@ -1673,57 +473,6 @@
 	return gensupport.MarshalJSON(raw, s.ForceSendFields, s.NullFields)
 }
 
-// OperationMetadataV1Alpha: Metadata for the given
-// google.longrunning.Operation.
-type OperationMetadataV1Alpha struct {
-	// EndTime: Time that this operation completed.@OutputOnly
-	EndTime string `json:"endTime,omitempty"`
-
-	// EphemeralMessage: Ephemeral message that may change every time the
-	// operation is polled. @OutputOnly
-	EphemeralMessage string `json:"ephemeralMessage,omitempty"`
-
-	// InsertTime: Time that this operation was created.@OutputOnly
-	InsertTime string `json:"insertTime,omitempty"`
-
-	// Method: API method that initiated this operation. Example:
-	// google.appengine.v1alpha.Versions.CreateVersion.@OutputOnly
-	Method string `json:"method,omitempty"`
-
-	// Target: Name of the resource that this operation is acting on.
-	// Example: apps/myapp/services/default.@OutputOnly
-	Target string `json:"target,omitempty"`
-
-	// User: User who requested this operation.@OutputOnly
-	User string `json:"user,omitempty"`
-
-	// Warning: Durable messages that persist on every operation poll.
-	// @OutputOnly
-	Warning []string `json:"warning,omitempty"`
-
-	// ForceSendFields is a list of field names (e.g. "EndTime") to
-	// unconditionally include in API requests. By default, fields with
-	// empty values are omitted from API requests. However, any non-pointer,
-	// non-interface field appearing in ForceSendFields will be sent to the
-	// server regardless of whether the field is empty or not. This may be
-	// used to include empty fields in Patch requests.
-	ForceSendFields []string `json:"-"`
-
-	// NullFields is a list of field names (e.g. "EndTime") to include in
-	// API requests with the JSON null value. By default, fields with empty
-	// values are omitted from API requests. However, any field with an
-	// empty value appearing in NullFields will be sent to the server as
-	// null. It is an error if a field in this list has a non-empty value.
-	// This may be used to include null fields in Patch requests.
-	NullFields []string `json:"-"`
-}
-
-func (s *OperationMetadataV1Alpha) MarshalJSON() ([]byte, error) {
-	type noMethod OperationMetadataV1Alpha
-	raw := noMethod(*s)
-	return gensupport.MarshalJSON(raw, s.ForceSendFields, s.NullFields)
-}
-
 // OperationMetadataV1Beta: Metadata for the given
 // google.longrunning.Operation.
 type OperationMetadataV1Beta struct {
@@ -1818,289 +567,10 @@
 	return gensupport.MarshalJSON(raw, s.ForceSendFields, s.NullFields)
 }
 
-// ReadinessCheck: Readiness checking configuration for VM instances.
-// Unhealthy instances are removed from traffic rotation.
-type ReadinessCheck struct {
-	// CheckInterval: Interval between health checks.
-	CheckInterval string `json:"checkInterval,omitempty"`
-
-	// HealthyThreshold: Number of consecutive successful checks required
-	// before receiving traffic.
-	HealthyThreshold int64 `json:"healthyThreshold,omitempty"`
-
-	// Host: Host header to send when performing a HTTP Readiness check.
-	// Example: "myapp.appspot.com"
-	Host string `json:"host,omitempty"`
-
-	// Path: The request path.
-	Path string `json:"path,omitempty"`
-
-	// Timeout: Time before the check is considered failed.
-	Timeout string `json:"timeout,omitempty"`
-
-	// UnhealthyThreshold: Number of consecutive failed checks required
-	// before removing traffic.
-	UnhealthyThreshold int64 `json:"unhealthyThreshold,omitempty"`
-
-	// ForceSendFields is a list of field names (e.g. "CheckInterval") to
-	// unconditionally include in API requests. By default, fields with
-	// empty values are omitted from API requests. However, any non-pointer,
-	// non-interface field appearing in ForceSendFields will be sent to the
-	// server regardless of whether the field is empty or not. This may be
-	// used to include empty fields in Patch requests.
-	ForceSendFields []string `json:"-"`
-
-	// NullFields is a list of field names (e.g. "CheckInterval") to include
-	// in API requests with the JSON null value. By default, fields with
-	// empty values are omitted from API requests. However, any field with
-	// an empty value appearing in NullFields will be sent to the server as
-	// null. It is an error if a field in this list has a non-empty value.
-	// This may be used to include null fields in Patch requests.
-	NullFields []string `json:"-"`
-}
-
-func (s *ReadinessCheck) MarshalJSON() ([]byte, error) {
-	type noMethod ReadinessCheck
-	raw := noMethod(*s)
-	return gensupport.MarshalJSON(raw, s.ForceSendFields, s.NullFields)
-}
-
-// RepairApplicationRequest: Request message for
-// 'Applications.RepairApplication'.
-type RepairApplicationRequest struct {
-}
-
-// RequestUtilization: Target scaling by request utilization. Only
-// applicable for VM runtimes.
-type RequestUtilization struct {
-	// TargetConcurrentRequests: Target number of concurrent requests.
-	TargetConcurrentRequests int64 `json:"targetConcurrentRequests,omitempty"`
-
-	// TargetRequestCountPerSecond: Target requests per second.
-	TargetRequestCountPerSecond int64 `json:"targetRequestCountPerSecond,omitempty"`
-
-	// ForceSendFields is a list of field names (e.g.
-	// "TargetConcurrentRequests") to unconditionally include in API
-	// requests. By default, fields with empty values are omitted from API
-	// requests. However, any non-pointer, non-interface field appearing in
-	// ForceSendFields will be sent to the server regardless of whether the
-	// field is empty or not. This may be used to include empty fields in
-	// Patch requests.
-	ForceSendFields []string `json:"-"`
-
-	// NullFields is a list of field names (e.g. "TargetConcurrentRequests")
-	// to include in API requests with the JSON null value. By default,
-	// fields with empty values are omitted from API requests. However, any
-	// field with an empty value appearing in NullFields will be sent to the
-	// server as null. It is an error if a field in this list has a
-	// non-empty value. This may be used to include null fields in Patch
-	// requests.
-	NullFields []string `json:"-"`
-}
-
-func (s *RequestUtilization) MarshalJSON() ([]byte, error) {
-	type noMethod RequestUtilization
-	raw := noMethod(*s)
-	return gensupport.MarshalJSON(raw, s.ForceSendFields, s.NullFields)
-}
-
-// Resources: Machine resources for a version.
-type Resources struct {
-	// Cpu: Number of CPU cores needed.
-	Cpu float64 `json:"cpu,omitempty"`
-
-	// DiskGb: Disk size (GB) needed.
-	DiskGb float64 `json:"diskGb,omitempty"`
-
-	// MemoryGb: Memory (GB) needed.
-	MemoryGb float64 `json:"memoryGb,omitempty"`
-
-	// Volumes: User specified volumes.
-	Volumes []*Volume `json:"volumes,omitempty"`
-
-	// ForceSendFields is a list of field names (e.g. "Cpu") to
-	// unconditionally include in API requests. By default, fields with
-	// empty values are omitted from API requests. However, any non-pointer,
-	// non-interface field appearing in ForceSendFields will be sent to the
-	// server regardless of whether the field is empty or not. This may be
-	// used to include empty fields in Patch requests.
-	ForceSendFields []string `json:"-"`
-
-	// NullFields is a list of field names (e.g. "Cpu") to include in API
-	// requests with the JSON null value. By default, fields with empty
-	// values are omitted from API requests. However, any field with an
-	// empty value appearing in NullFields will be sent to the server as
-	// null. It is an error if a field in this list has a non-empty value.
-	// This may be used to include null fields in Patch requests.
-	NullFields []string `json:"-"`
-}
-
-func (s *Resources) MarshalJSON() ([]byte, error) {
-	type noMethod Resources
-	raw := noMethod(*s)
-	return gensupport.MarshalJSON(raw, s.ForceSendFields, s.NullFields)
-}
-
-func (s *Resources) UnmarshalJSON(data []byte) error {
-	type noMethod Resources
-	var s1 struct {
-		Cpu      gensupport.JSONFloat64 `json:"cpu"`
-		DiskGb   gensupport.JSONFloat64 `json:"diskGb"`
-		MemoryGb gensupport.JSONFloat64 `json:"memoryGb"`
-		*noMethod
-	}
-	s1.noMethod = (*noMethod)(s)
-	if err := json.Unmarshal(data, &s1); err != nil {
-		return err
-	}
-	s.Cpu = float64(s1.Cpu)
-	s.DiskGb = float64(s1.DiskGb)
-	s.MemoryGb = float64(s1.MemoryGb)
-	return nil
-}
-
-// ScriptHandler: Executes a script to handle the request that matches
-// the URL pattern.
-type ScriptHandler struct {
-	// ScriptPath: Path to the script from the application root directory.
-	ScriptPath string `json:"scriptPath,omitempty"`
-
-	// ForceSendFields is a list of field names (e.g. "ScriptPath") to
-	// unconditionally include in API requests. By default, fields with
-	// empty values are omitted from API requests. However, any non-pointer,
-	// non-interface field appearing in ForceSendFields will be sent to the
-	// server regardless of whether the field is empty or not. This may be
-	// used to include empty fields in Patch requests.
-	ForceSendFields []string `json:"-"`
-
-	// NullFields is a list of field names (e.g. "ScriptPath") to include in
-	// API requests with the JSON null value. By default, fields with empty
-	// values are omitted from API requests. However, any field with an
-	// empty value appearing in NullFields will be sent to the server as
-	// null. It is an error if a field in this list has a non-empty value.
-	// This may be used to include null fields in Patch requests.
-	NullFields []string `json:"-"`
-}
-
-func (s *ScriptHandler) MarshalJSON() ([]byte, error) {
-	type noMethod ScriptHandler
-	raw := noMethod(*s)
-	return gensupport.MarshalJSON(raw, s.ForceSendFields, s.NullFields)
-}
-
-// Service: A Service resource is a logical component of an application
-// that can share state and communicate in a secure fashion with other
-// services. For example, an application that handles customer requests
-// might include separate services to handle tasks such as backend data
-// analysis or API requests from mobile devices. Each service has a
-// collection of versions that define a specific set of code used to
-// implement the functionality of that service.
-type Service struct {
-	// Id: Relative name of the service within the application. Example:
-	// default.@OutputOnly
-	Id string `json:"id,omitempty"`
-
-	// Name: Full path to the Service resource in the API. Example:
-	// apps/myapp/services/default.@OutputOnly
-	Name string `json:"name,omitempty"`
-
-	// Split: Mapping that defines fractional HTTP traffic diversion to
-	// different versions within the service.
-	Split *TrafficSplit `json:"split,omitempty"`
-
-	// ServerResponse contains the HTTP response code and headers from the
-	// server.
-	googleapi.ServerResponse `json:"-"`
-
-	// ForceSendFields is a list of field names (e.g. "Id") to
-	// unconditionally include in API requests. By default, fields with
-	// empty values are omitted from API requests. However, any non-pointer,
-	// non-interface field appearing in ForceSendFields will be sent to the
-	// server regardless of whether the field is empty or not. This may be
-	// used to include empty fields in Patch requests.
-	ForceSendFields []string `json:"-"`
-
-	// NullFields is a list of field names (e.g. "Id") to include in API
-	// requests with the JSON null value. By default, fields with empty
-	// values are omitted from API requests. However, any field with an
-	// empty value appearing in NullFields will be sent to the server as
-	// null. It is an error if a field in this list has a non-empty value.
-	// This may be used to include null fields in Patch requests.
-	NullFields []string `json:"-"`
-}
-
-func (s *Service) MarshalJSON() ([]byte, error) {
-	type noMethod Service
-	raw := noMethod(*s)
-	return gensupport.MarshalJSON(raw, s.ForceSendFields, s.NullFields)
-}
-
-// StaticFilesHandler: Files served directly to the user for a given
-// URL, such as images, CSS stylesheets, or JavaScript source files.
-// Static file handlers describe which files in the application
-// directory are static files, and which URLs serve them.
-type StaticFilesHandler struct {
-	// ApplicationReadable: Whether files should also be uploaded as code
-	// data. By default, files declared in static file handlers are uploaded
-	// as static data and are only served to end users; they cannot be read
-	// by the application. If enabled, uploads are charged against both your
-	// code and static data storage resource quotas.
-	ApplicationReadable bool `json:"applicationReadable,omitempty"`
-
-	// Expiration: Time a static file served by this handler should be
-	// cached by web proxies and browsers.
-	Expiration string `json:"expiration,omitempty"`
-
-	// HttpHeaders: HTTP headers to use for all responses from these URLs.
-	HttpHeaders map[string]string `json:"httpHeaders,omitempty"`
-
-	// MimeType: MIME type used to serve all files served by this
-	// handler.Defaults to file-specific MIME types, which are derived from
-	// each file's filename extension.
-	MimeType string `json:"mimeType,omitempty"`
-
-	// Path: Path to the static files matched by the URL pattern, from the
-	// application root directory. The path can refer to text matched in
-	// groupings in the URL pattern.
-	Path string `json:"path,omitempty"`
-
-	// RequireMatchingFile: Whether this handler should match the request if
-	// the file referenced by the handler does not exist.
-	RequireMatchingFile bool `json:"requireMatchingFile,omitempty"`
-
-	// UploadPathRegex: Regular expression that matches the file paths for
-	// all files that should be referenced by this handler.
-	UploadPathRegex string `json:"uploadPathRegex,omitempty"`
-
-	// ForceSendFields is a list of field names (e.g. "ApplicationReadable")
-	// to unconditionally include in API requests. By default, fields with
-	// empty values are omitted from API requests. However, any non-pointer,
-	// non-interface field appearing in ForceSendFields will be sent to the
-	// server regardless of whether the field is empty or not. This may be
-	// used to include empty fields in Patch requests.
-	ForceSendFields []string `json:"-"`
-
-	// NullFields is a list of field names (e.g. "ApplicationReadable") to
-	// include in API requests with the JSON null value. By default, fields
-	// with empty values are omitted from API requests. However, any field
-	// with an empty value appearing in NullFields will be sent to the
-	// server as null. It is an error if a field in this list has a
-	// non-empty value. This may be used to include null fields in Patch
-	// requests.
-	NullFields []string `json:"-"`
-}
-
-func (s *StaticFilesHandler) MarshalJSON() ([]byte, error) {
-	type noMethod StaticFilesHandler
-	raw := noMethod(*s)
-	return gensupport.MarshalJSON(raw, s.ForceSendFields, s.NullFields)
-}
-
 // Status: 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). The error
-// model is designed to be:
-// Simple to use and understand for most users
+// model is designed to be: Simple to use and understand for most users
 // Flexible enough to meet unexpected needsOverviewThe Status message
 // contains three pieces of data: error code, error message, and error
 // details. The error code should be an enum value of google.rpc.Code,
@@ -2120,21 +590,18 @@
 // C.Other usesThe error model and the Status message can be used in a
 // variety of environments, either with or without APIs, to provide a
 // consistent developer experience across different environments.Example
-// uses of this error model include:
-// Partial errors. If a service needs to return partial errors to the
-// client, it may embed the Status in the normal response to indicate
-// the partial errors.
-// Workflow errors. A typical workflow has multiple steps. Each step may
-// have a Status message for error reporting purpose.
-// Batch operations. If a client uses batch request and batch response,
-// the Status message should be used directly inside batch response, one
-// for each error sub-response.
+// uses of this error model include: Partial errors. If a service needs
+// to return partial errors to the client, it may embed the Status in
+// the normal response to indicate the partial errors. Workflow errors.
+// A typical workflow has multiple steps. Each step may have a Status
+// message for error reporting purpose. Batch operations. If a client
+// uses batch request and batch response, the Status message should be
+// used directly inside batch response, one for each error sub-response.
 // Asynchronous operations. If an API call embeds asynchronous operation
 // results in its response, the status of those operations should be
-// represented directly using the Status message.
-// Logging. If some API errors are stored in logs, the message Status
-// could be used directly after any stripping needed for
-// security/privacy reasons.
+// represented directly using the Status message. Logging. If some API
+// errors are stored in logs, the message Status could be used directly
+// after any stripping needed for security/privacy reasons.
 type Status struct {
 	// Code: The status code, which should be an enum value of
 	// google.rpc.Code.
@@ -2172,1052 +639,6 @@
 	return gensupport.MarshalJSON(raw, s.ForceSendFields, s.NullFields)
 }
 
-// TrafficSplit: Traffic routing configuration for versions within a
-// single service. Traffic splits define how traffic directed to the
-// service is assigned to versions.
-type TrafficSplit struct {
-	// Allocations: Mapping from version IDs within the service to
-	// fractional (0.000, 1] allocations of traffic for that version. Each
-	// version can be specified only once, but some versions in the service
-	// may not have any traffic allocation. Services that have traffic
-	// allocated cannot be deleted until either the service is deleted or
-	// their traffic allocation is removed. Allocations must sum to 1. Up to
-	// two decimal place precision is supported for IP-based splits and up
-	// to three decimal places is supported for cookie-based splits.
-	Allocations map[string]float64 `json:"allocations,omitempty"`
-
-	// ShardBy: Mechanism used to determine which version a request is sent
-	// to. The traffic selection algorithm will be stable for either type
-	// until allocations are changed.
-	//
-	// Possible values:
-	//   "UNSPECIFIED" - Diversion method unspecified.
-	//   "COOKIE" - Diversion based on a specially named cookie,
-	// "GOOGAPPUID." The cookie must be set by the application itself or no
-	// diversion will occur.
-	//   "IP" - Diversion based on applying the modulus operation to a
-	// fingerprint of the IP address.
-	//   "RANDOM" - Diversion based on weighted random assignment. An
-	// incoming request is randomly routed to a version in the traffic
-	// split, with probability proportional to the version's traffic share.
-	ShardBy string `json:"shardBy,omitempty"`
-
-	// ForceSendFields is a list of field names (e.g. "Allocations") to
-	// unconditionally include in API requests. By default, fields with
-	// empty values are omitted from API requests. However, any non-pointer,
-	// non-interface field appearing in ForceSendFields will be sent to the
-	// server regardless of whether the field is empty or not. This may be
-	// used to include empty fields in Patch requests.
-	ForceSendFields []string `json:"-"`
-
-	// NullFields is a list of field names (e.g. "Allocations") to include
-	// in API requests with the JSON null value. By default, fields with
-	// empty values are omitted from API requests. However, any field with
-	// an empty value appearing in NullFields will be sent to the server as
-	// null. It is an error if a field in this list has a non-empty value.
-	// This may be used to include null fields in Patch requests.
-	NullFields []string `json:"-"`
-}
-
-func (s *TrafficSplit) MarshalJSON() ([]byte, error) {
-	type noMethod TrafficSplit
-	raw := noMethod(*s)
-	return gensupport.MarshalJSON(raw, s.ForceSendFields, s.NullFields)
-}
-
-// UrlDispatchRule: Rules to match an HTTP request and dispatch that
-// request to a service.
-type UrlDispatchRule struct {
-	// Domain: Domain name to match against. The wildcard "*" is supported
-	// if specified before a period: "*.".Defaults to matching all domains:
-	// "*".
-	Domain string `json:"domain,omitempty"`
-
-	// Path: Pathname within the host. Must start with a "/". A single "*"
-	// can be included at the end of the path. The sum of the lengths of the
-	// domain and path may not exceed 100 characters.
-	Path string `json:"path,omitempty"`
-
-	// Service: Resource ID of a service in this application that should
-	// serve the matched request. The service must already exist. Example:
-	// default.
-	Service string `json:"service,omitempty"`
-
-	// ForceSendFields is a list of field names (e.g. "Domain") to
-	// unconditionally include in API requests. By default, fields with
-	// empty values are omitted from API requests. However, any non-pointer,
-	// non-interface field appearing in ForceSendFields will be sent to the
-	// server regardless of whether the field is empty or not. This may be
-	// used to include empty fields in Patch requests.
-	ForceSendFields []string `json:"-"`
-
-	// NullFields is a list of field names (e.g. "Domain") to include in API
-	// requests with the JSON null value. By default, fields with empty
-	// values are omitted from API requests. However, any field with an
-	// empty value appearing in NullFields will be sent to the server as
-	// null. It is an error if a field in this list has a non-empty value.
-	// This may be used to include null fields in Patch requests.
-	NullFields []string `json:"-"`
-}
-
-func (s *UrlDispatchRule) MarshalJSON() ([]byte, error) {
-	type noMethod UrlDispatchRule
-	raw := noMethod(*s)
-	return gensupport.MarshalJSON(raw, s.ForceSendFields, s.NullFields)
-}
-
-// UrlMap: URL pattern and description of how the URL should be handled.
-// App Engine can handle URLs by executing application code or by
-// serving static files uploaded with the version, such as images, CSS,
-// or JavaScript.
-type UrlMap struct {
-	// ApiEndpoint: Uses API Endpoints to handle requests.
-	ApiEndpoint *ApiEndpointHandler `json:"apiEndpoint,omitempty"`
-
-	// AuthFailAction: Action to take when users access resources that
-	// require authentication. Defaults to redirect.
-	//
-	// Possible values:
-	//   "AUTH_FAIL_ACTION_UNSPECIFIED" - Not specified.
-	// AUTH_FAIL_ACTION_REDIRECT is assumed.
-	//   "AUTH_FAIL_ACTION_REDIRECT" - Redirects user to
-	// "accounts.google.com". The user is redirected back to the application
-	// URL after signing in or creating an account.
-	//   "AUTH_FAIL_ACTION_UNAUTHORIZED" - Rejects request with a 401 HTTP
-	// status code and an error message.
-	AuthFailAction string `json:"authFailAction,omitempty"`
-
-	// Login: Level of login required to access this resource.
-	//
-	// Possible values:
-	//   "LOGIN_UNSPECIFIED" - Not specified. LOGIN_OPTIONAL is assumed.
-	//   "LOGIN_OPTIONAL" - Does not require that the user is signed in.
-	//   "LOGIN_ADMIN" - If the user is not signed in, the auth_fail_action
-	// is taken. In addition, if the user is not an administrator for the
-	// application, they are given an error message regardless of
-	// auth_fail_action. If the user is an administrator, the handler
-	// proceeds.
-	//   "LOGIN_REQUIRED" - If the user has signed in, the handler proceeds
-	// normally. Otherwise, the auth_fail_action is taken.
-	Login string `json:"login,omitempty"`
-
-	// RedirectHttpResponseCode: 30x code to use when performing redirects
-	// for the secure field. Defaults to 302.
-	//
-	// Possible values:
-	//   "REDIRECT_HTTP_RESPONSE_CODE_UNSPECIFIED" - Not specified. 302 is
-	// assumed.
-	//   "REDIRECT_HTTP_RESPONSE_CODE_301" - 301 Moved Permanently code.
-	//   "REDIRECT_HTTP_RESPONSE_CODE_302" - 302 Moved Temporarily code.
-	//   "REDIRECT_HTTP_RESPONSE_CODE_303" - 303 See Other code.
-	//   "REDIRECT_HTTP_RESPONSE_CODE_307" - 307 Temporary Redirect code.
-	RedirectHttpResponseCode string `json:"redirectHttpResponseCode,omitempty"`
-
-	// Script: Executes a script to handle the request that matches this URL
-	// pattern.
-	Script *ScriptHandler `json:"script,omitempty"`
-
-	// SecurityLevel: Security (HTTPS) enforcement for this URL.
-	//
-	// Possible values:
-	//   "SECURE_UNSPECIFIED" - Not specified.
-	//   "SECURE_DEFAULT" - Both HTTP and HTTPS requests with URLs that
-	// match the handler succeed without redirects. The application can
-	// examine the request to determine which protocol was used, and respond
-	// accordingly.
-	//   "SECURE_NEVER" - Requests for a URL that match this handler that
-	// use HTTPS are automatically redirected to the HTTP equivalent URL.
-	//   "SECURE_OPTIONAL" - Both HTTP and HTTPS requests with URLs that
-	// match the handler succeed without redirects. The application can
-	// examine the request to determine which protocol was used and respond
-	// accordingly.
-	//   "SECURE_ALWAYS" - Requests for a URL that match this handler that
-	// do not use HTTPS are automatically redirected to the HTTPS URL with
-	// the same path. Query parameters are reserved for the redirect.
-	SecurityLevel string `json:"securityLevel,omitempty"`
-
-	// StaticFiles: Returns the contents of a file, such as an image, as the
-	// response.
-	StaticFiles *StaticFilesHandler `json:"staticFiles,omitempty"`
-
-	// UrlRegex: URL prefix. Uses regular expression syntax, which means
-	// regexp special characters must be escaped, but should not contain
-	// groupings. All URLs that begin with this prefix are handled by this
-	// handler, using the portion of the URL after the prefix as part of the
-	// file path.
-	UrlRegex string `json:"urlRegex,omitempty"`
-
-	// ForceSendFields is a list of field names (e.g. "ApiEndpoint") to
-	// unconditionally include in API requests. By default, fields with
-	// empty values are omitted from API requests. However, any non-pointer,
-	// non-interface field appearing in ForceSendFields will be sent to the
-	// server regardless of whether the field is empty or not. This may be
-	// used to include empty fields in Patch requests.
-	ForceSendFields []string `json:"-"`
-
-	// NullFields is a list of field names (e.g. "ApiEndpoint") to include
-	// in API requests with the JSON null value. By default, fields with
-	// empty values are omitted from API requests. However, any field with
-	// an empty value appearing in NullFields will be sent to the server as
-	// null. It is an error if a field in this list has a non-empty value.
-	// This may be used to include null fields in Patch requests.
-	NullFields []string `json:"-"`
-}
-
-func (s *UrlMap) MarshalJSON() ([]byte, error) {
-	type noMethod UrlMap
-	raw := noMethod(*s)
-	return gensupport.MarshalJSON(raw, s.ForceSendFields, s.NullFields)
-}
-
-// Version: A Version resource is a specific set of source code and
-// configuration files that are deployed into a service.
-type Version struct {
-	// ApiConfig: Serving configuration for Google Cloud Endpoints
-	// (https://cloud.google.com/appengine/docs/python/endpoints/).Only
-	// returned in GET requests if view=FULL is set.
-	ApiConfig *ApiConfigHandler `json:"apiConfig,omitempty"`
-
-	// AutomaticScaling: Automatic scaling is based on request rate,
-	// response latencies, and other application metrics.
-	AutomaticScaling *AutomaticScaling `json:"automaticScaling,omitempty"`
-
-	// BasicScaling: A service with basic scaling will create an instance
-	// when the application receives a request. The instance will be turned
-	// down when the app becomes idle. Basic scaling is ideal for work that
-	// is intermittent or driven by user activity.
-	BasicScaling *BasicScaling `json:"basicScaling,omitempty"`
-
-	// BetaSettings: Metadata settings that are supplied to this version to
-	// enable beta runtime features.
-	BetaSettings map[string]string `json:"betaSettings,omitempty"`
-
-	// CreateTime: Time that this version was created.@OutputOnly
-	CreateTime string `json:"createTime,omitempty"`
-
-	// CreatedBy: Email address of the user who created this
-	// version.@OutputOnly
-	CreatedBy string `json:"createdBy,omitempty"`
-
-	// DefaultExpiration: Duration that static files should be cached by web
-	// proxies and browsers. Only applicable if the corresponding
-	// StaticFilesHandler
-	// (https://cloud.google.com/appengine/docs/admin-api/reference/rest/v1al
-	// pha/apps.services.versions#staticfileshandler) does not specify its
-	// own expiration time.Only returned in GET requests if view=FULL is
-	// set.
-	DefaultExpiration string `json:"defaultExpiration,omitempty"`
-
-	// Deployment: Code and application artifacts that make up this
-	// version.Only returned in GET requests if view=FULL is set.
-	Deployment *Deployment `json:"deployment,omitempty"`
-
-	// DiskUsageBytes: Total size in bytes of all the files that are
-	// included in this version and curerntly hosted on the App Engine
-	// disk.@OutputOnly
-	DiskUsageBytes int64 `json:"diskUsageBytes,omitempty,string"`
-
-	// EndpointsApiService: Cloud Endpoints configuration.If
-	// endpoints_api_service is set, the Cloud Endpoints Extensible Service
-	// Proxy will be provided to serve the API implemented by the app.
-	EndpointsApiService *EndpointsApiService `json:"endpointsApiService,omitempty"`
-
-	// Env: App Engine execution environment for this version.Defaults to
-	// standard.
-	Env string `json:"env,omitempty"`
-
-	// EnvVariables: Environment variables available to the application.Only
-	// returned in GET requests if view=FULL is set.
-	EnvVariables map[string]string `json:"envVariables,omitempty"`
-
-	// ErrorHandlers: Custom static error pages. Limited to 10KB per
-	// page.Only returned in GET requests if view=FULL is set.
-	ErrorHandlers []*ErrorHandler `json:"errorHandlers,omitempty"`
-
-	// Handlers: An ordered list of URL-matching patterns that should be
-	// applied to incoming requests. The first matching URL handles the
-	// request and other request handlers are not attempted.Only returned in
-	// GET requests if view=FULL is set.
-	Handlers []*UrlMap `json:"handlers,omitempty"`
-
-	// HealthCheck: Configures health checking for VM instances. Unhealthy
-	// instances are stopped and replaced with new instances. Only
-	// applicable for VM runtimes.Only returned in GET requests if view=FULL
-	// is set.
-	HealthCheck *HealthCheck `json:"healthCheck,omitempty"`
-
-	// Id: Relative name of the version within the service. Example: v1.
-	// Version names can contain only lowercase letters, numbers, or
-	// hyphens. Reserved names: "default", "latest", and any name with the
-	// prefix "ah-".
-	Id string `json:"id,omitempty"`
-
-	// InboundServices: Before an application can receive email or XMPP
-	// messages, the application must be configured to enable the service.
-	//
-	// Possible values:
-	//   "INBOUND_SERVICE_UNSPECIFIED" - Not specified.
-	//   "INBOUND_SERVICE_MAIL" - Allows an application to receive mail.
-	//   "INBOUND_SERVICE_MAIL_BOUNCE" - Allows an application to receive
-	// email-bound notifications.
-	//   "INBOUND_SERVICE_XMPP_ERROR" - Allows an application to receive
-	// error stanzas.
-	//   "INBOUND_SERVICE_XMPP_MESSAGE" - Allows an application to receive
-	// instant messages.
-	//   "INBOUND_SERVICE_XMPP_SUBSCRIBE" - Allows an application to receive
-	// user subscription POSTs.
-	//   "INBOUND_SERVICE_XMPP_PRESENCE" - Allows an application to receive
-	// a user's chat presence.
-	//   "INBOUND_SERVICE_CHANNEL_PRESENCE" - Registers an application for
-	// notifications when a client connects or disconnects from a channel.
-	//   "INBOUND_SERVICE_WARMUP" - Enables warmup requests.
-	InboundServices []string `json:"inboundServices,omitempty"`
-
-	// InstanceClass: Instance class that is used to run this version. Valid
-	// values are:
-	// AutomaticScaling: F1, F2, F4, F4_1G
-	// ManualScaling or BasicScaling: B1, B2, B4, B8, B4_1GDefaults to F1
-	// for AutomaticScaling and B1 for ManualScaling or BasicScaling.
-	InstanceClass string `json:"instanceClass,omitempty"`
-
-	// Libraries: Configuration for third-party Python runtime libraries
-	// that are required by the application.Only returned in GET requests if
-	// view=FULL is set.
-	Libraries []*Library `json:"libraries,omitempty"`
-
-	// LivenessCheck: Configures liveness health checking for VM instances.
-	// Unhealthy instances are stopped and replaced with new instancesOnly
-	// returned in GET requests if view=FULL is set.
-	LivenessCheck *LivenessCheck `json:"livenessCheck,omitempty"`
-
-	// ManualScaling: A service with manual scaling runs continuously,
-	// allowing you to perform complex initialization and rely on the state
-	// of its memory over time.
-	ManualScaling *ManualScaling `json:"manualScaling,omitempty"`
-
-	// Name: Full path to the Version resource in the API. Example:
-	// apps/myapp/services/default/versions/v1.@OutputOnly
-	Name string `json:"name,omitempty"`
-
-	// Network: Extra network settings. Only applicable for VM runtimes.
-	Network *Network `json:"network,omitempty"`
-
-	// NobuildFilesRegex: Files that match this pattern will not be built
-	// into this version. Only applicable for Go runtimes.Only returned in
-	// GET requests if view=FULL is set.
-	NobuildFilesRegex string `json:"nobuildFilesRegex,omitempty"`
-
-	// ReadinessCheck: Configures readiness health checking for VM
-	// instances. Unhealthy instances are not put into the backend traffic
-	// rotation.Only returned in GET requests if view=FULL is set.
-	ReadinessCheck *ReadinessCheck `json:"readinessCheck,omitempty"`
-
-	// Resources: Machine resources for this version. Only applicable for VM
-	// runtimes.
-	Resources *Resources `json:"resources,omitempty"`
-
-	// Runtime: Desired runtime. Example: python27.
-	Runtime string `json:"runtime,omitempty"`
-
-	// ServingStatus: Current serving status of this version. Only the
-	// versions with a SERVING status create instances and can be
-	// billed.SERVING_STATUS_UNSPECIFIED is an invalid value. Defaults to
-	// SERVING.
-	//
-	// Possible values:
-	//   "SERVING_STATUS_UNSPECIFIED" - Not specified.
-	//   "SERVING" - Currently serving. Instances are created according to
-	// the scaling settings of the version.
-	//   "STOPPED" - Disabled. No instances will be created and the scaling
-	// settings are ignored until the state of the version changes to
-	// SERVING.
-	ServingStatus string `json:"servingStatus,omitempty"`
-
-	// Threadsafe: Whether multiple requests can be dispatched to this
-	// version at once.
-	Threadsafe bool `json:"threadsafe,omitempty"`
-
-	// VersionUrl: Serving URL for this version. Example:
-	// "https://myversion-dot-myservice-dot-myapp.appspot.com"@OutputOnly
-	VersionUrl string `json:"versionUrl,omitempty"`
-
-	// Vm: Whether to deploy this version in a container on a virtual
-	// machine.
-	Vm bool `json:"vm,omitempty"`
-
-	// ServerResponse contains the HTTP response code and headers from the
-	// server.
-	googleapi.ServerResponse `json:"-"`
-
-	// ForceSendFields is a list of field names (e.g. "ApiConfig") to
-	// unconditionally include in API requests. By default, fields with
-	// empty values are omitted from API requests. However, any non-pointer,
-	// non-interface field appearing in ForceSendFields will be sent to the
-	// server regardless of whether the field is empty or not. This may be
-	// used to include empty fields in Patch requests.
-	ForceSendFields []string `json:"-"`
-
-	// NullFields is a list of field names (e.g. "ApiConfig") to include in
-	// API requests with the JSON null value. By default, fields with empty
-	// values are omitted from API requests. However, any field with an
-	// empty value appearing in NullFields will be sent to the server as
-	// null. It is an error if a field in this list has a non-empty value.
-	// This may be used to include null fields in Patch requests.
-	NullFields []string `json:"-"`
-}
-
-func (s *Version) MarshalJSON() ([]byte, error) {
-	type noMethod Version
-	raw := noMethod(*s)
-	return gensupport.MarshalJSON(raw, s.ForceSendFields, s.NullFields)
-}
-
-// Volume: Volumes mounted within the app container. Only applicable for
-// VM runtimes.
-type Volume struct {
-	// Name: Unique name for the volume.
-	Name string `json:"name,omitempty"`
-
-	// SizeGb: Volume size in gigabytes.
-	SizeGb float64 `json:"sizeGb,omitempty"`
-
-	// VolumeType: Underlying volume type, e.g. 'tmpfs'.
-	VolumeType string `json:"volumeType,omitempty"`
-
-	// ForceSendFields is a list of field names (e.g. "Name") to
-	// unconditionally include in API requests. By default, fields with
-	// empty values are omitted from API requests. However, any non-pointer,
-	// non-interface field appearing in ForceSendFields will be sent to the
-	// server regardless of whether the field is empty or not. This may be
-	// used to include empty fields in Patch requests.
-	ForceSendFields []string `json:"-"`
-
-	// NullFields is a list of field names (e.g. "Name") to include in API
-	// requests with the JSON null value. By default, fields with empty
-	// values are omitted from API requests. However, any field with an
-	// empty value appearing in NullFields will be sent to the server as
-	// null. It is an error if a field in this list has a non-empty value.
-	// This may be used to include null fields in Patch requests.
-	NullFields []string `json:"-"`
-}
-
-func (s *Volume) MarshalJSON() ([]byte, error) {
-	type noMethod Volume
-	raw := noMethod(*s)
-	return gensupport.MarshalJSON(raw, s.ForceSendFields, s.NullFields)
-}
-
-func (s *Volume) UnmarshalJSON(data []byte) error {
-	type noMethod Volume
-	var s1 struct {
-		SizeGb gensupport.JSONFloat64 `json:"sizeGb"`
-		*noMethod
-	}
-	s1.noMethod = (*noMethod)(s)
-	if err := json.Unmarshal(data, &s1); err != nil {
-		return err
-	}
-	s.SizeGb = float64(s1.SizeGb)
-	return nil
-}
-
-// ZipInfo: The zip file information for a zip deployment.
-type ZipInfo struct {
-	// FilesCount: An estimate of the number of files in a zip for a zip
-	// deployment. If set, must be greater than or equal to the actual
-	// number of files. Used for optimizing performance; if not provided,
-	// deployment may be slow.
-	FilesCount int64 `json:"filesCount,omitempty"`
-
-	// SourceUrl: URL of the zip file to deploy from. Must be a URL to a
-	// resource in Google Cloud Storage in the form
-	// 'http(s)://storage.googleapis.com/<bucket>/<object>'.
-	SourceUrl string `json:"sourceUrl,omitempty"`
-
-	// ForceSendFields is a list of field names (e.g. "FilesCount") to
-	// unconditionally include in API requests. By default, fields with
-	// empty values are omitted from API requests. However, any non-pointer,
-	// non-interface field appearing in ForceSendFields will be sent to the
-	// server regardless of whether the field is empty or not. This may be
-	// used to include empty fields in Patch requests.
-	ForceSendFields []string `json:"-"`
-
-	// NullFields is a list of field names (e.g. "FilesCount") to include in
-	// API requests with the JSON null value. By default, fields with empty
-	// values are omitted from API requests. However, any field with an
-	// empty value appearing in NullFields will be sent to the server as
-	// null. It is an error if a field in this list has a non-empty value.
-	// This may be used to include null fields in Patch requests.
-	NullFields []string `json:"-"`
-}
-
-func (s *ZipInfo) MarshalJSON() ([]byte, error) {
-	type noMethod ZipInfo
-	raw := noMethod(*s)
-	return gensupport.MarshalJSON(raw, s.ForceSendFields, s.NullFields)
-}
-
-// method id "appengine.apps.create":
-
-type AppsCreateCall struct {
-	s           *APIService
-	application *Application
-	urlParams_  gensupport.URLParams
-	ctx_        context.Context
-	header_     http.Header
-}
-
-// Create: Creates an App Engine application for a Google Cloud Platform
-// project. Required fields:
-// id - The ID of the target Cloud Platform project.
-// location - The region
-// (https://cloud.google.com/appengine/docs/locations) where you want
-// the App Engine application located.For more information about App
-// Engine applications, see Managing Projects, Applications, and Billing
-// (https://cloud.google.com/appengine/docs/python/console/).
-func (r *AppsService) Create(application *Application) *AppsCreateCall {
-	c := &AppsCreateCall{s: r.s, urlParams_: make(gensupport.URLParams)}
-	c.application = application
-	return c
-}
-
-// Fields allows partial responses to be retrieved. See
-// https://developers.google.com/gdata/docs/2.0/basics#PartialResponse
-// for more information.
-func (c *AppsCreateCall) Fields(s ...googleapi.Field) *AppsCreateCall {
-	c.urlParams_.Set("fields", googleapi.CombineFields(s))
-	return c
-}
-
-// Context sets the context to be used in this call's Do method. Any
-// pending HTTP request will be aborted if the provided context is
-// canceled.
-func (c *AppsCreateCall) Context(ctx context.Context) *AppsCreateCall {
-	c.ctx_ = ctx
-	return c
-}
-
-// Header returns an http.Header that can be modified by the caller to
-// add HTTP headers to the request.
-func (c *AppsCreateCall) Header() http.Header {
-	if c.header_ == nil {
-		c.header_ = make(http.Header)
-	}
-	return c.header_
-}
-
-func (c *AppsCreateCall) doRequest(alt string) (*http.Response, error) {
-	reqHeaders := make(http.Header)
-	for k, v := range c.header_ {
-		reqHeaders[k] = v
-	}
-	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
-	var body io.Reader = nil
-	body, err := googleapi.WithoutDataWrapper.JSONReader(c.application)
-	if err != nil {
-		return nil, err
-	}
-	reqHeaders.Set("Content-Type", "application/json")
-	c.urlParams_.Set("alt", alt)
-	urls := googleapi.ResolveRelative(c.s.BasePath, "v1alpha/apps")
-	urls += "?" + c.urlParams_.Encode()
-	req, _ := http.NewRequest("POST", urls, body)
-	req.Header = reqHeaders
-	return gensupport.SendRequest(c.ctx_, c.s.client, req)
-}
-
-// Do executes the "appengine.apps.create" call.
-// Exactly one of *Operation or error will be non-nil. Any non-2xx
-// status code is an error. Response headers are in either
-// *Operation.ServerResponse.Header or (if a response was returned at
-// all) in error.(*googleapi.Error).Header. Use googleapi.IsNotModified
-// to check whether the returned error was because
-// http.StatusNotModified was returned.
-func (c *AppsCreateCall) Do(opts ...googleapi.CallOption) (*Operation, error) {
-	gensupport.SetOptions(c.urlParams_, opts...)
-	res, err := c.doRequest("json")
-	if res != nil && res.StatusCode == http.StatusNotModified {
-		if res.Body != nil {
-			res.Body.Close()
-		}
-		return nil, &googleapi.Error{
-			Code:   res.StatusCode,
-			Header: res.Header,
-		}
-	}
-	if err != nil {
-		return nil, err
-	}
-	defer googleapi.CloseBody(res)
-	if err := googleapi.CheckResponse(res); err != nil {
-		return nil, err
-	}
-	ret := &Operation{
-		ServerResponse: googleapi.ServerResponse{
-			Header:         res.Header,
-			HTTPStatusCode: res.StatusCode,
-		},
-	}
-	target := &ret
-	if err := json.NewDecoder(res.Body).Decode(target); err != nil {
-		return nil, err
-	}
-	return ret, nil
-	// {
-	//   "description": "Creates an App Engine application for a Google Cloud Platform project. Required fields:\nid - The ID of the target Cloud Platform project.\nlocation - The region (https://cloud.google.com/appengine/docs/locations) where you want the App Engine application located.For more information about App Engine applications, see Managing Projects, Applications, and Billing (https://cloud.google.com/appengine/docs/python/console/).",
-	//   "flatPath": "v1alpha/apps",
-	//   "httpMethod": "POST",
-	//   "id": "appengine.apps.create",
-	//   "parameterOrder": [],
-	//   "parameters": {},
-	//   "path": "v1alpha/apps",
-	//   "request": {
-	//     "$ref": "Application"
-	//   },
-	//   "response": {
-	//     "$ref": "Operation"
-	//   },
-	//   "scopes": [
-	//     "https://www.googleapis.com/auth/cloud-platform"
-	//   ]
-	// }
-
-}
-
-// method id "appengine.apps.get":
-
-type AppsGetCall struct {
-	s            *APIService
-	appsId       string
-	urlParams_   gensupport.URLParams
-	ifNoneMatch_ string
-	ctx_         context.Context
-	header_      http.Header
-}
-
-// Get: Gets information about an application.
-func (r *AppsService) Get(appsId string) *AppsGetCall {
-	c := &AppsGetCall{s: r.s, urlParams_: make(gensupport.URLParams)}
-	c.appsId = appsId
-	return c
-}
-
-// Fields allows partial responses to be retrieved. See
-// https://developers.google.com/gdata/docs/2.0/basics#PartialResponse
-// for more information.
-func (c *AppsGetCall) Fields(s ...googleapi.Field) *AppsGetCall {
-	c.urlParams_.Set("fields", googleapi.CombineFields(s))
-	return c
-}
-
-// IfNoneMatch sets the optional parameter which makes the operation
-// fail if the object's ETag matches the given value. This is useful for
-// getting updates only after the object has changed since the last
-// request. Use googleapi.IsNotModified to check whether the response
-// error from Do is the result of In-None-Match.
-func (c *AppsGetCall) IfNoneMatch(entityTag string) *AppsGetCall {
-	c.ifNoneMatch_ = entityTag
-	return c
-}
-
-// Context sets the context to be used in this call's Do method. Any
-// pending HTTP request will be aborted if the provided context is
-// canceled.
-func (c *AppsGetCall) Context(ctx context.Context) *AppsGetCall {
-	c.ctx_ = ctx
-	return c
-}
-
-// Header returns an http.Header that can be modified by the caller to
-// add HTTP headers to the request.
-func (c *AppsGetCall) Header() http.Header {
-	if c.header_ == nil {
-		c.header_ = make(http.Header)
-	}
-	return c.header_
-}
-
-func (c *AppsGetCall) doRequest(alt string) (*http.Response, error) {
-	reqHeaders := make(http.Header)
-	for k, v := range c.header_ {
-		reqHeaders[k] = v
-	}
-	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
-	if c.ifNoneMatch_ != "" {
-		reqHeaders.Set("If-None-Match", c.ifNoneMatch_)
-	}
-	var body io.Reader = nil
-	c.urlParams_.Set("alt", alt)
-	urls := googleapi.ResolveRelative(c.s.BasePath, "v1alpha/apps/{appsId}")
-	urls += "?" + c.urlParams_.Encode()
-	req, _ := http.NewRequest("GET", urls, body)
-	req.Header = reqHeaders
-	googleapi.Expand(req.URL, map[string]string{
-		"appsId": c.appsId,
-	})
-	return gensupport.SendRequest(c.ctx_, c.s.client, req)
-}
-
-// Do executes the "appengine.apps.get" call.
-// Exactly one of *Application or error will be non-nil. Any non-2xx
-// status code is an error. Response headers are in either
-// *Application.ServerResponse.Header or (if a response was returned at
-// all) in error.(*googleapi.Error).Header. Use googleapi.IsNotModified
-// to check whether the returned error was because
-// http.StatusNotModified was returned.
-func (c *AppsGetCall) Do(opts ...googleapi.CallOption) (*Application, error) {
-	gensupport.SetOptions(c.urlParams_, opts...)
-	res, err := c.doRequest("json")
-	if res != nil && res.StatusCode == http.StatusNotModified {
-		if res.Body != nil {
-			res.Body.Close()
-		}
-		return nil, &googleapi.Error{
-			Code:   res.StatusCode,
-			Header: res.Header,
-		}
-	}
-	if err != nil {
-		return nil, err
-	}
-	defer googleapi.CloseBody(res)
-	if err := googleapi.CheckResponse(res); err != nil {
-		return nil, err
-	}
-	ret := &Application{
-		ServerResponse: googleapi.ServerResponse{
-			Header:         res.Header,
-			HTTPStatusCode: res.StatusCode,
-		},
-	}
-	target := &ret
-	if err := json.NewDecoder(res.Body).Decode(target); err != nil {
-		return nil, err
-	}
-	return ret, nil
-	// {
-	//   "description": "Gets information about an application.",
-	//   "flatPath": "v1alpha/apps/{appsId}",
-	//   "httpMethod": "GET",
-	//   "id": "appengine.apps.get",
-	//   "parameterOrder": [
-	//     "appsId"
-	//   ],
-	//   "parameters": {
-	//     "appsId": {
-	//       "description": "Part of `name`. Name of the Application resource to get. Example: apps/myapp.",
-	//       "location": "path",
-	//       "required": true,
-	//       "type": "string"
-	//     }
-	//   },
-	//   "path": "v1alpha/apps/{appsId}",
-	//   "response": {
-	//     "$ref": "Application"
-	//   },
-	//   "scopes": [
-	//     "https://www.googleapis.com/auth/appengine.admin",
-	//     "https://www.googleapis.com/auth/cloud-platform",
-	//     "https://www.googleapis.com/auth/cloud-platform.read-only"
-	//   ]
-	// }
-
-}
-
-// method id "appengine.apps.patch":
-
-type AppsPatchCall struct {
-	s           *APIService
-	appsId      string
-	application *Application
-	urlParams_  gensupport.URLParams
-	ctx_        context.Context
-	header_     http.Header
-}
-
-// Patch: Updates the specified Application resource. You can update the
-// following fields:
-// auth_domain - Google authentication domain for controlling user
-// access to the application.
-// default_cookie_expiration - Cookie expiration policy for the
-// application.
-func (r *AppsService) Patch(appsId string, application *Application) *AppsPatchCall {
-	c := &AppsPatchCall{s: r.s, urlParams_: make(gensupport.URLParams)}
-	c.appsId = appsId
-	c.application = application
-	return c
-}
-
-// UpdateMask sets the optional parameter "updateMask": Standard field
-// mask for the set of fields to be updated.
-func (c *AppsPatchCall) UpdateMask(updateMask string) *AppsPatchCall {
-	c.urlParams_.Set("updateMask", updateMask)
-	return c
-}
-
-// Fields allows partial responses to be retrieved. See
-// https://developers.google.com/gdata/docs/2.0/basics#PartialResponse
-// for more information.
-func (c *AppsPatchCall) Fields(s ...googleapi.Field) *AppsPatchCall {
-	c.urlParams_.Set("fields", googleapi.CombineFields(s))
-	return c
-}
-
-// Context sets the context to be used in this call's Do method. Any
-// pending HTTP request will be aborted if the provided context is
-// canceled.
-func (c *AppsPatchCall) Context(ctx context.Context) *AppsPatchCall {
-	c.ctx_ = ctx
-	return c
-}
-
-// Header returns an http.Header that can be modified by the caller to
-// add HTTP headers to the request.
-func (c *AppsPatchCall) Header() http.Header {
-	if c.header_ == nil {
-		c.header_ = make(http.Header)
-	}
-	return c.header_
-}
-
-func (c *AppsPatchCall) doRequest(alt string) (*http.Response, error) {
-	reqHeaders := make(http.Header)
-	for k, v := range c.header_ {
-		reqHeaders[k] = v
-	}
-	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
-	var body io.Reader = nil
-	body, err := googleapi.WithoutDataWrapper.JSONReader(c.application)
-	if err != nil {
-		return nil, err
-	}
-	reqHeaders.Set("Content-Type", "application/json")
-	c.urlParams_.Set("alt", alt)
-	urls := googleapi.ResolveRelative(c.s.BasePath, "v1alpha/apps/{appsId}")
-	urls += "?" + c.urlParams_.Encode()
-	req, _ := http.NewRequest("PATCH", urls, body)
-	req.Header = reqHeaders
-	googleapi.Expand(req.URL, map[string]string{
-		"appsId": c.appsId,
-	})
-	return gensupport.SendRequest(c.ctx_, c.s.client, req)
-}
-
-// Do executes the "appengine.apps.patch" call.
-// Exactly one of *Operation or error will be non-nil. Any non-2xx
-// status code is an error. Response headers are in either
-// *Operation.ServerResponse.Header or (if a response was returned at
-// all) in error.(*googleapi.Error).Header. Use googleapi.IsNotModified
-// to check whether the returned error was because
-// http.StatusNotModified was returned.
-func (c *AppsPatchCall) Do(opts ...googleapi.CallOption) (*Operation, error) {
-	gensupport.SetOptions(c.urlParams_, opts...)
-	res, err := c.doRequest("json")
-	if res != nil && res.StatusCode == http.StatusNotModified {
-		if res.Body != nil {
-			res.Body.Close()
-		}
-		return nil, &googleapi.Error{
-			Code:   res.StatusCode,
-			Header: res.Header,
-		}
-	}
-	if err != nil {
-		return nil, err
-	}
-	defer googleapi.CloseBody(res)
-	if err := googleapi.CheckResponse(res); err != nil {
-		return nil, err
-	}
-	ret := &Operation{
-		ServerResponse: googleapi.ServerResponse{
-			Header:         res.Header,
-			HTTPStatusCode: res.StatusCode,
-		},
-	}
-	target := &ret
-	if err := json.NewDecoder(res.Body).Decode(target); err != nil {
-		return nil, err
-	}
-	return ret, nil
-	// {
-	//   "description": "Updates the specified Application resource. You can update the following fields:\nauth_domain - Google authentication domain for controlling user access to the application.\ndefault_cookie_expiration - Cookie expiration policy for the application.",
-	//   "flatPath": "v1alpha/apps/{appsId}",
-	//   "httpMethod": "PATCH",
-	//   "id": "appengine.apps.patch",
-	//   "parameterOrder": [
-	//     "appsId"
-	//   ],
-	//   "parameters": {
-	//     "appsId": {
-	//       "description": "Part of `name`. Name of the Application resource to update. Example: apps/myapp.",
-	//       "location": "path",
-	//       "required": true,
-	//       "type": "string"
-	//     },
-	//     "updateMask": {
-	//       "description": "Standard field mask for the set of fields to be updated.",
-	//       "format": "google-fieldmask",
-	//       "location": "query",
-	//       "type": "string"
-	//     }
-	//   },
-	//   "path": "v1alpha/apps/{appsId}",
-	//   "request": {
-	//     "$ref": "Application"
-	//   },
-	//   "response": {
-	//     "$ref": "Operation"
-	//   },
-	//   "scopes": [
-	//     "https://www.googleapis.com/auth/cloud-platform"
-	//   ]
-	// }
-
-}
-
-// method id "appengine.apps.repair":
-
-type AppsRepairCall struct {
-	s                        *APIService
-	appsId                   string
-	repairapplicationrequest *RepairApplicationRequest
-	urlParams_               gensupport.URLParams
-	ctx_                     context.Context
-	header_                  http.Header
-}
-
-// Repair: Recreates the required App Engine features for the specified
-// App Engine application, for example a Cloud Storage bucket or App
-// Engine service account. Use this method if you receive an error
-// message about a missing feature, for example, Error retrieving the
-// App Engine service account.
-func (r *AppsService) Repair(appsId string, repairapplicationrequest *RepairApplicationRequest) *AppsRepairCall {
-	c := &AppsRepairCall{s: r.s, urlParams_: make(gensupport.URLParams)}
-	c.appsId = appsId
-	c.repairapplicationrequest = repairapplicationrequest
-	return c
-}
-
-// Fields allows partial responses to be retrieved. See
-// https://developers.google.com/gdata/docs/2.0/basics#PartialResponse
-// for more information.
-func (c *AppsRepairCall) Fields(s ...googleapi.Field) *AppsRepairCall {
-	c.urlParams_.Set("fields", googleapi.CombineFields(s))
-	return c
-}
-
-// Context sets the context to be used in this call's Do method. Any
-// pending HTTP request will be aborted if the provided context is
-// canceled.
-func (c *AppsRepairCall) Context(ctx context.Context) *AppsRepairCall {
-	c.ctx_ = ctx
-	return c
-}
-
-// Header returns an http.Header that can be modified by the caller to
-// add HTTP headers to the request.
-func (c *AppsRepairCall) Header() http.Header {
-	if c.header_ == nil {
-		c.header_ = make(http.Header)
-	}
-	return c.header_
-}
-
-func (c *AppsRepairCall) doRequest(alt string) (*http.Response, error) {
-	reqHeaders := make(http.Header)
-	for k, v := range c.header_ {
-		reqHeaders[k] = v
-	}
-	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
-	var body io.Reader = nil
-	body, err := googleapi.WithoutDataWrapper.JSONReader(c.repairapplicationrequest)
-	if err != nil {
-		return nil, err
-	}
-	reqHeaders.Set("Content-Type", "application/json")
-	c.urlParams_.Set("alt", alt)
-	urls := googleapi.ResolveRelative(c.s.BasePath, "v1alpha/apps/{appsId}:repair")
-	urls += "?" + c.urlParams_.Encode()
-	req, _ := http.NewRequest("POST", urls, body)
-	req.Header = reqHeaders
-	googleapi.Expand(req.URL, map[string]string{
-		"appsId": c.appsId,
-	})
-	return gensupport.SendRequest(c.ctx_, c.s.client, req)
-}
-
-// Do executes the "appengine.apps.repair" call.
-// Exactly one of *Operation or error will be non-nil. Any non-2xx
-// status code is an error. Response headers are in either
-// *Operation.ServerResponse.Header or (if a response was returned at
-// all) in error.(*googleapi.Error).Header. Use googleapi.IsNotModified
-// to check whether the returned error was because
-// http.StatusNotModified was returned.
-func (c *AppsRepairCall) Do(opts ...googleapi.CallOption) (*Operation, error) {
-	gensupport.SetOptions(c.urlParams_, opts...)
-	res, err := c.doRequest("json")
-	if res != nil && res.StatusCode == http.StatusNotModified {
-		if res.Body != nil {
-			res.Body.Close()
-		}
-		return nil, &googleapi.Error{
-			Code:   res.StatusCode,
-			Header: res.Header,
-		}
-	}
-	if err != nil {
-		return nil, err
-	}
-	defer googleapi.CloseBody(res)
-	if err := googleapi.CheckResponse(res); err != nil {
-		return nil, err
-	}
-	ret := &Operation{
-		ServerResponse: googleapi.ServerResponse{
-			Header:         res.Header,
-			HTTPStatusCode: res.StatusCode,
-		},
-	}
-	target := &ret
-	if err := json.NewDecoder(res.Body).Decode(target); err != nil {
-		return nil, err
-	}
-	return ret, nil
-	// {
-	//   "description": "Recreates the required App Engine features for the specified App Engine application, for example a Cloud Storage bucket or App Engine service account. Use this method if you receive an error message about a missing feature, for example, Error retrieving the App Engine service account.",
-	//   "flatPath": "v1alpha/apps/{appsId}:repair",
-	//   "httpMethod": "POST",
-	//   "id": "appengine.apps.repair",
-	//   "parameterOrder": [
-	//     "appsId"
-	//   ],
-	//   "parameters": {
-	//     "appsId": {
-	//       "description": "Part of `name`. Name of the application to repair. Example: apps/myapp",
-	//       "location": "path",
-	//       "required": true,
-	//       "type": "string"
-	//     }
-	//   },
-	//   "path": "v1alpha/apps/{appsId}:repair",
-	//   "request": {
-	//     "$ref": "RepairApplicationRequest"
-	//   },
-	//   "response": {
-	//     "$ref": "Operation"
-	//   },
-	//   "scopes": [
-	//     "https://www.googleapis.com/auth/cloud-platform"
-	//   ]
-	// }
-
-}
-
 // method id "appengine.apps.locations.get":
 
 type AppsLocationsGetCall struct {
@@ -3279,7 +700,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	if c.ifNoneMatch_ != "" {
 		reqHeaders.Set("If-None-Match", c.ifNoneMatch_)
 	}
@@ -3335,7 +755,6 @@
 	return ret, nil
 	// {
 	//   "description": "Get information about a location.",
-	//   "flatPath": "v1alpha/apps/{appsId}/locations/{locationsId}",
 	//   "httpMethod": "GET",
 	//   "id": "appengine.apps.locations.get",
 	//   "parameterOrder": [
@@ -3450,7 +869,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	if c.ifNoneMatch_ != "" {
 		reqHeaders.Set("If-None-Match", c.ifNoneMatch_)
 	}
@@ -3505,7 +923,6 @@
 	return ret, nil
 	// {
 	//   "description": "Lists information about the supported locations for this service.",
-	//   "flatPath": "v1alpha/apps/{appsId}/locations",
 	//   "httpMethod": "GET",
 	//   "id": "appengine.apps.locations.list",
 	//   "parameterOrder": [
@@ -3632,7 +1049,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	if c.ifNoneMatch_ != "" {
 		reqHeaders.Set("If-None-Match", c.ifNoneMatch_)
 	}
@@ -3688,7 +1104,6 @@
 	return ret, nil
 	// {
 	//   "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": "v1alpha/apps/{appsId}/operations/{operationsId}",
 	//   "httpMethod": "GET",
 	//   "id": "appengine.apps.operations.get",
 	//   "parameterOrder": [
@@ -3806,7 +1221,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	if c.ifNoneMatch_ != "" {
 		reqHeaders.Set("If-None-Match", c.ifNoneMatch_)
 	}
@@ -3861,7 +1275,6 @@
 	return ret, nil
 	// {
 	//   "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 below allows API services to override the binding to use different resource name schemes, such as users/*/operations.",
-	//   "flatPath": "v1alpha/apps/{appsId}/operations",
 	//   "httpMethod": "GET",
 	//   "id": "appengine.apps.operations.list",
 	//   "parameterOrder": [
@@ -3924,2247 +1337,3 @@
 		c.PageToken(x.NextPageToken)
 	}
 }
-
-// method id "appengine.apps.services.delete":
-
-type AppsServicesDeleteCall struct {
-	s          *APIService
-	appsId     string
-	servicesId string
-	urlParams_ gensupport.URLParams
-	ctx_       context.Context
-	header_    http.Header
-}
-
-// Delete: Deletes the specified service and all enclosed versions.
-func (r *AppsServicesService) Delete(appsId string, servicesId string) *AppsServicesDeleteCall {
-	c := &AppsServicesDeleteCall{s: r.s, urlParams_: make(gensupport.URLParams)}
-	c.appsId = appsId
-	c.servicesId = servicesId
-	return c
-}
-
-// Fields allows partial responses to be retrieved. See
-// https://developers.google.com/gdata/docs/2.0/basics#PartialResponse
-// for more information.
-func (c *AppsServicesDeleteCall) Fields(s ...googleapi.Field) *AppsServicesDeleteCall {
-	c.urlParams_.Set("fields", googleapi.CombineFields(s))
-	return c
-}
-
-// Context sets the context to be used in this call's Do method. Any
-// pending HTTP request will be aborted if the provided context is
-// canceled.
-func (c *AppsServicesDeleteCall) Context(ctx context.Context) *AppsServicesDeleteCall {
-	c.ctx_ = ctx
-	return c
-}
-
-// Header returns an http.Header that can be modified by the caller to
-// add HTTP headers to the request.
-func (c *AppsServicesDeleteCall) Header() http.Header {
-	if c.header_ == nil {
-		c.header_ = make(http.Header)
-	}
-	return c.header_
-}
-
-func (c *AppsServicesDeleteCall) doRequest(alt string) (*http.Response, error) {
-	reqHeaders := make(http.Header)
-	for k, v := range c.header_ {
-		reqHeaders[k] = v
-	}
-	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
-	var body io.Reader = nil
-	c.urlParams_.Set("alt", alt)
-	urls := googleapi.ResolveRelative(c.s.BasePath, "v1alpha/apps/{appsId}/services/{servicesId}")
-	urls += "?" + c.urlParams_.Encode()
-	req, _ := http.NewRequest("DELETE", urls, body)
-	req.Header = reqHeaders
-	googleapi.Expand(req.URL, map[string]string{
-		"appsId":     c.appsId,
-		"servicesId": c.servicesId,
-	})
-	return gensupport.SendRequest(c.ctx_, c.s.client, req)
-}
-
-// Do executes the "appengine.apps.services.delete" call.
-// Exactly one of *Operation or error will be non-nil. Any non-2xx
-// status code is an error. Response headers are in either
-// *Operation.ServerResponse.Header or (if a response was returned at
-// all) in error.(*googleapi.Error).Header. Use googleapi.IsNotModified
-// to check whether the returned error was because
-// http.StatusNotModified was returned.
-func (c *AppsServicesDeleteCall) Do(opts ...googleapi.CallOption) (*Operation, error) {
-	gensupport.SetOptions(c.urlParams_, opts...)
-	res, err := c.doRequest("json")
-	if res != nil && res.StatusCode == http.StatusNotModified {
-		if res.Body != nil {
-			res.Body.Close()
-		}
-		return nil, &googleapi.Error{
-			Code:   res.StatusCode,
-			Header: res.Header,
-		}
-	}
-	if err != nil {
-		return nil, err
-	}
-	defer googleapi.CloseBody(res)
-	if err := googleapi.CheckResponse(res); err != nil {
-		return nil, err
-	}
-	ret := &Operation{
-		ServerResponse: googleapi.ServerResponse{
-			Header:         res.Header,
-			HTTPStatusCode: res.StatusCode,
-		},
-	}
-	target := &ret
-	if err := json.NewDecoder(res.Body).Decode(target); err != nil {
-		return nil, err
-	}
-	return ret, nil
-	// {
-	//   "description": "Deletes the specified service and all enclosed versions.",
-	//   "flatPath": "v1alpha/apps/{appsId}/services/{servicesId}",
-	//   "httpMethod": "DELETE",
-	//   "id": "appengine.apps.services.delete",
-	//   "parameterOrder": [
-	//     "appsId",
-	//     "servicesId"
-	//   ],
-	//   "parameters": {
-	//     "appsId": {
-	//       "description": "Part of `name`. Name of the resource requested. Example: apps/myapp/services/default.",
-	//       "location": "path",
-	//       "required": true,
-	//       "type": "string"
-	//     },
-	//     "servicesId": {
-	//       "description": "Part of `name`. See documentation of `appsId`.",
-	//       "location": "path",
-	//       "required": true,
-	//       "type": "string"
-	//     }
-	//   },
-	//   "path": "v1alpha/apps/{appsId}/services/{servicesId}",
-	//   "response": {
-	//     "$ref": "Operation"
-	//   },
-	//   "scopes": [
-	//     "https://www.googleapis.com/auth/cloud-platform"
-	//   ]
-	// }
-
-}
-
-// method id "appengine.apps.services.get":
-
-type AppsServicesGetCall struct {
-	s            *APIService
-	appsId       string
-	servicesId   string
-	urlParams_   gensupport.URLParams
-	ifNoneMatch_ string
-	ctx_         context.Context
-	header_      http.Header
-}
-
-// Get: Gets the current configuration of the specified service.
-func (r *AppsServicesService) Get(appsId string, servicesId string) *AppsServicesGetCall {
-	c := &AppsServicesGetCall{s: r.s, urlParams_: make(gensupport.URLParams)}
-	c.appsId = appsId
-	c.servicesId = servicesId
-	return c
-}
-
-// Fields allows partial responses to be retrieved. See
-// https://developers.google.com/gdata/docs/2.0/basics#PartialResponse
-// for more information.
-func (c *AppsServicesGetCall) Fields(s ...googleapi.Field) *AppsServicesGetCall {
-	c.urlParams_.Set("fields", googleapi.CombineFields(s))
-	return c
-}
-
-// IfNoneMatch sets the optional parameter which makes the operation
-// fail if the object's ETag matches the given value. This is useful for
-// getting updates only after the object has changed since the last
-// request. Use googleapi.IsNotModified to check whether the response
-// error from Do is the result of In-None-Match.
-func (c *AppsServicesGetCall) IfNoneMatch(entityTag string) *AppsServicesGetCall {
-	c.ifNoneMatch_ = entityTag
-	return c
-}
-
-// Context sets the context to be used in this call's Do method. Any
-// pending HTTP request will be aborted if the provided context is
-// canceled.
-func (c *AppsServicesGetCall) Context(ctx context.Context) *AppsServicesGetCall {
-	c.ctx_ = ctx
-	return c
-}
-
-// Header returns an http.Header that can be modified by the caller to
-// add HTTP headers to the request.
-func (c *AppsServicesGetCall) Header() http.Header {
-	if c.header_ == nil {
-		c.header_ = make(http.Header)
-	}
-	return c.header_
-}
-
-func (c *AppsServicesGetCall) doRequest(alt string) (*http.Response, error) {
-	reqHeaders := make(http.Header)
-	for k, v := range c.header_ {
-		reqHeaders[k] = v
-	}
-	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
-	if c.ifNoneMatch_ != "" {
-		reqHeaders.Set("If-None-Match", c.ifNoneMatch_)
-	}
-	var body io.Reader = nil
-	c.urlParams_.Set("alt", alt)
-	urls := googleapi.ResolveRelative(c.s.BasePath, "v1alpha/apps/{appsId}/services/{servicesId}")
-	urls += "?" + c.urlParams_.Encode()
-	req, _ := http.NewRequest("GET", urls, body)
-	req.Header = reqHeaders
-	googleapi.Expand(req.URL, map[string]string{
-		"appsId":     c.appsId,
-		"servicesId": c.servicesId,
-	})
-	return gensupport.SendRequest(c.ctx_, c.s.client, req)
-}
-
-// Do executes the "appengine.apps.services.get" call.
-// Exactly one of *Service or error will be non-nil. Any non-2xx status
-// code is an error. Response headers are in either
-// *Service.ServerResponse.Header or (if a response was returned at all)
-// in error.(*googleapi.Error).Header. Use googleapi.IsNotModified to
-// check whether the returned error was because http.StatusNotModified
-// was returned.
-func (c *AppsServicesGetCall) Do(opts ...googleapi.CallOption) (*Service, error) {
-	gensupport.SetOptions(c.urlParams_, opts...)
-	res, err := c.doRequest("json")
-	if res != nil && res.StatusCode == http.StatusNotModified {
-		if res.Body != nil {
-			res.Body.Close()
-		}
-		return nil, &googleapi.Error{
-			Code:   res.StatusCode,
-			Header: res.Header,
-		}
-	}
-	if err != nil {
-		return nil, err
-	}
-	defer googleapi.CloseBody(res)
-	if err := googleapi.CheckResponse(res); err != nil {
-		return nil, err
-	}
-	ret := &Service{
-		ServerResponse: googleapi.ServerResponse{
-			Header:         res.Header,
-			HTTPStatusCode: res.StatusCode,
-		},
-	}
-	target := &ret
-	if err := json.NewDecoder(res.Body).Decode(target); err != nil {
-		return nil, err
-	}
-	return ret, nil
-	// {
-	//   "description": "Gets the current configuration of the specified service.",
-	//   "flatPath": "v1alpha/apps/{appsId}/services/{servicesId}",
-	//   "httpMethod": "GET",
-	//   "id": "appengine.apps.services.get",
-	//   "parameterOrder": [
-	//     "appsId",
-	//     "servicesId"
-	//   ],
-	//   "parameters": {
-	//     "appsId": {
-	//       "description": "Part of `name`. Name of the resource requested. Example: apps/myapp/services/default.",
-	//       "location": "path",
-	//       "required": true,
-	//       "type": "string"
-	//     },
-	//     "servicesId": {
-	//       "description": "Part of `name`. See documentation of `appsId`.",
-	//       "location": "path",
-	//       "required": true,
-	//       "type": "string"
-	//     }
-	//   },
-	//   "path": "v1alpha/apps/{appsId}/services/{servicesId}",
-	//   "response": {
-	//     "$ref": "Service"
-	//   },
-	//   "scopes": [
-	//     "https://www.googleapis.com/auth/appengine.admin",
-	//     "https://www.googleapis.com/auth/cloud-platform",
-	//     "https://www.googleapis.com/auth/cloud-platform.read-only"
-	//   ]
-	// }
-
-}
-
-// method id "appengine.apps.services.list":
-
-type AppsServicesListCall struct {
-	s            *APIService
-	appsId       string
-	urlParams_   gensupport.URLParams
-	ifNoneMatch_ string
-	ctx_         context.Context
-	header_      http.Header
-}
-
-// List: Lists all the services in the application.
-func (r *AppsServicesService) List(appsId string) *AppsServicesListCall {
-	c := &AppsServicesListCall{s: r.s, urlParams_: make(gensupport.URLParams)}
-	c.appsId = appsId
-	return c
-}
-
-// PageSize sets the optional parameter "pageSize": Maximum results to
-// return per page.
-func (c *AppsServicesListCall) PageSize(pageSize int64) *AppsServicesListCall {
-	c.urlParams_.Set("pageSize", fmt.Sprint(pageSize))
-	return c
-}
-
-// PageToken sets the optional parameter "pageToken": Continuation token
-// for fetching the next page of results.
-func (c *AppsServicesListCall) PageToken(pageToken string) *AppsServicesListCall {
-	c.urlParams_.Set("pageToken", pageToken)
-	return c
-}
-
-// Fields allows partial responses to be retrieved. See
-// https://developers.google.com/gdata/docs/2.0/basics#PartialResponse
-// for more information.
-func (c *AppsServicesListCall) Fields(s ...googleapi.Field) *AppsServicesListCall {
-	c.urlParams_.Set("fields", googleapi.CombineFields(s))
-	return c
-}
-
-// IfNoneMatch sets the optional parameter which makes the operation
-// fail if the object's ETag matches the given value. This is useful for
-// getting updates only after the object has changed since the last
-// request. Use googleapi.IsNotModified to check whether the response
-// error from Do is the result of In-None-Match.
-func (c *AppsServicesListCall) IfNoneMatch(entityTag string) *AppsServicesListCall {
-	c.ifNoneMatch_ = entityTag
-	return c
-}
-
-// Context sets the context to be used in this call's Do method. Any
-// pending HTTP request will be aborted if the provided context is
-// canceled.
-func (c *AppsServicesListCall) Context(ctx context.Context) *AppsServicesListCall {
-	c.ctx_ = ctx
-	return c
-}
-
-// Header returns an http.Header that can be modified by the caller to
-// add HTTP headers to the request.
-func (c *AppsServicesListCall) Header() http.Header {
-	if c.header_ == nil {
-		c.header_ = make(http.Header)
-	}
-	return c.header_
-}
-
-func (c *AppsServicesListCall) doRequest(alt string) (*http.Response, error) {
-	reqHeaders := make(http.Header)
-	for k, v := range c.header_ {
-		reqHeaders[k] = v
-	}
-	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
-	if c.ifNoneMatch_ != "" {
-		reqHeaders.Set("If-None-Match", c.ifNoneMatch_)
-	}
-	var body io.Reader = nil
-	c.urlParams_.Set("alt", alt)
-	urls := googleapi.ResolveRelative(c.s.BasePath, "v1alpha/apps/{appsId}/services")
-	urls += "?" + c.urlParams_.Encode()
-	req, _ := http.NewRequest("GET", urls, body)
-	req.Header = reqHeaders
-	googleapi.Expand(req.URL, map[string]string{
-		"appsId": c.appsId,
-	})
-	return gensupport.SendRequest(c.ctx_, c.s.client, req)
-}
-
-// Do executes the "appengine.apps.services.list" call.
-// Exactly one of *ListServicesResponse or error will be non-nil. Any
-// non-2xx status code is an error. Response headers are in either
-// *ListServicesResponse.ServerResponse.Header or (if a response was
-// returned at all) in error.(*googleapi.Error).Header. Use
-// googleapi.IsNotModified to check whether the returned error was
-// because http.StatusNotModified was returned.
-func (c *AppsServicesListCall) Do(opts ...googleapi.CallOption) (*ListServicesResponse, error) {
-	gensupport.SetOptions(c.urlParams_, opts...)
-	res, err := c.doRequest("json")
-	if res != nil && res.StatusCode == http.StatusNotModified {
-		if res.Body != nil {
-			res.Body.Close()
-		}
-		return nil, &googleapi.Error{
-			Code:   res.StatusCode,
-			Header: res.Header,
-		}
-	}
-	if err != nil {
-		return nil, err
-	}
-	defer googleapi.CloseBody(res)
-	if err := googleapi.CheckResponse(res); err != nil {
-		return nil, err
-	}
-	ret := &ListServicesResponse{
-		ServerResponse: googleapi.ServerResponse{
-			Header:         res.Header,
-			HTTPStatusCode: res.StatusCode,
-		},
-	}
-	target := &ret
-	if err := json.NewDecoder(res.Body).Decode(target); err != nil {
-		return nil, err
-	}
-	return ret, nil
-	// {
-	//   "description": "Lists all the services in the application.",
-	//   "flatPath": "v1alpha/apps/{appsId}/services",
-	//   "httpMethod": "GET",
-	//   "id": "appengine.apps.services.list",
-	//   "parameterOrder": [
-	//     "appsId"
-	//   ],
-	//   "parameters": {
-	//     "appsId": {
-	//       "description": "Part of `parent`. Name of the parent Application resource. Example: apps/myapp.",
-	//       "location": "path",
-	//       "required": true,
-	//       "type": "string"
-	//     },
-	//     "pageSize": {
-	//       "description": "Maximum results to return per page.",
-	//       "format": "int32",
-	//       "location": "query",
-	//       "type": "integer"
-	//     },
-	//     "pageToken": {
-	//       "description": "Continuation token for fetching the next page of results.",
-	//       "location": "query",
-	//       "type": "string"
-	//     }
-	//   },
-	//   "path": "v1alpha/apps/{appsId}/services",
-	//   "response": {
-	//     "$ref": "ListServicesResponse"
-	//   },
-	//   "scopes": [
-	//     "https://www.googleapis.com/auth/appengine.admin",
-	//     "https://www.googleapis.com/auth/cloud-platform",
-	//     "https://www.googleapis.com/auth/cloud-platform.read-only"
-	//   ]
-	// }
-
-}
-
-// Pages invokes f for each page of results.
-// A non-nil error returned from f will halt the iteration.
-// The provided context supersedes any context provided to the Context method.
-func (c *AppsServicesListCall) Pages(ctx context.Context, f func(*ListServicesResponse) error) error {
-	c.ctx_ = ctx
-	defer c.PageToken(c.urlParams_.Get("pageToken")) // reset paging to original point
-	for {
-		x, err := c.Do()
-		if err != nil {
-			return err
-		}
-		if err := f(x); err != nil {
-			return err
-		}
-		if x.NextPageToken == "" {
-			return nil
-		}
-		c.PageToken(x.NextPageToken)
-	}
-}
-
-// method id "appengine.apps.services.patch":
-
-type AppsServicesPatchCall struct {
-	s          *APIService
-	appsId     string
-	servicesId string
-	service    *Service
-	urlParams_ gensupport.URLParams
-	ctx_       context.Context
-	header_    http.Header
-}
-
-// Patch: Updates the configuration of the specified service.
-func (r *AppsServicesService) Patch(appsId string, servicesId string, service *Service) *AppsServicesPatchCall {
-	c := &AppsServicesPatchCall{s: r.s, urlParams_: make(gensupport.URLParams)}
-	c.appsId = appsId
-	c.servicesId = servicesId
-	c.service = service
-	return c
-}
-
-// MigrateTraffic sets the optional parameter "migrateTraffic": Set to
-// true to gradually shift traffic to one or more versions that you
-// specify. By default, traffic is shifted immediately. For gradual
-// traffic migration, the target versions must be located within
-// instances that are configured for both warmup requests
-// (https://cloud.google.com/appengine/docs/admin-api/reference/rest/v1al
-// pha/apps.services.versions#inboundservicetype) and automatic scaling
-// (https://cloud.google.com/appengine/docs/admin-api/reference/rest/v1al
-// pha/apps.services.versions#automaticscaling). You must specify the
-// shardBy
-// (https://cloud.google.com/appengine/docs/admin-api/reference/rest/v1al
-// pha/apps.services#shardby) field in the Service resource. Gradual
-// traffic migration is not supported in the App Engine flexible
-// environment. For examples, see Migrating and Splitting Traffic
-// (https://cloud.google.com/appengine/docs/admin-api/migrating-splitting
-// -traffic).
-func (c *AppsServicesPatchCall) MigrateTraffic(migrateTraffic bool) *AppsServicesPatchCall {
-	c.urlParams_.Set("migrateTraffic", fmt.Sprint(migrateTraffic))
-	return c
-}
-
-// UpdateMask sets the optional parameter "updateMask": Standard field
-// mask for the set of fields to be updated.
-func (c *AppsServicesPatchCall) UpdateMask(updateMask string) *AppsServicesPatchCall {
-	c.urlParams_.Set("updateMask", updateMask)
-	return c
-}
-
-// Fields allows partial responses to be retrieved. See
-// https://developers.google.com/gdata/docs/2.0/basics#PartialResponse
-// for more information.
-func (c *AppsServicesPatchCall) Fields(s ...googleapi.Field) *AppsServicesPatchCall {
-	c.urlParams_.Set("fields", googleapi.CombineFields(s))
-	return c
-}
-
-// Context sets the context to be used in this call's Do method. Any
-// pending HTTP request will be aborted if the provided context is
-// canceled.
-func (c *AppsServicesPatchCall) Context(ctx context.Context) *AppsServicesPatchCall {
-	c.ctx_ = ctx
-	return c
-}
-
-// Header returns an http.Header that can be modified by the caller to
-// add HTTP headers to the request.
-func (c *AppsServicesPatchCall) Header() http.Header {
-	if c.header_ == nil {
-		c.header_ = make(http.Header)
-	}
-	return c.header_
-}
-
-func (c *AppsServicesPatchCall) doRequest(alt string) (*http.Response, error) {
-	reqHeaders := make(http.Header)
-	for k, v := range c.header_ {
-		reqHeaders[k] = v
-	}
-	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
-	var body io.Reader = nil
-	body, err := googleapi.WithoutDataWrapper.JSONReader(c.service)
-	if err != nil {
-		return nil, err
-	}
-	reqHeaders.Set("Content-Type", "application/json")
-	c.urlParams_.Set("alt", alt)
-	urls := googleapi.ResolveRelative(c.s.BasePath, "v1alpha/apps/{appsId}/services/{servicesId}")
-	urls += "?" + c.urlParams_.Encode()
-	req, _ := http.NewRequest("PATCH", urls, body)
-	req.Header = reqHeaders
-	googleapi.Expand(req.URL, map[string]string{
-		"appsId":     c.appsId,
-		"servicesId": c.servicesId,
-	})
-	return gensupport.SendRequest(c.ctx_, c.s.client, req)
-}
-
-// Do executes the "appengine.apps.services.patch" call.
-// Exactly one of *Operation or error will be non-nil. Any non-2xx
-// status code is an error. Response headers are in either
-// *Operation.ServerResponse.Header or (if a response was returned at
-// all) in error.(*googleapi.Error).Header. Use googleapi.IsNotModified
-// to check whether the returned error was because
-// http.StatusNotModified was returned.
-func (c *AppsServicesPatchCall) Do(opts ...googleapi.CallOption) (*Operation, error) {
-	gensupport.SetOptions(c.urlParams_, opts...)
-	res, err := c.doRequest("json")
-	if res != nil && res.StatusCode == http.StatusNotModified {
-		if res.Body != nil {
-			res.Body.Close()
-		}
-		return nil, &googleapi.Error{
-			Code:   res.StatusCode,
-			Header: res.Header,
-		}
-	}
-	if err != nil {
-		return nil, err
-	}
-	defer googleapi.CloseBody(res)
-	if err := googleapi.CheckResponse(res); err != nil {
-		return nil, err
-	}
-	ret := &Operation{
-		ServerResponse: googleapi.ServerResponse{
-			Header:         res.Header,
-			HTTPStatusCode: res.StatusCode,
-		},
-	}
-	target := &ret
-	if err := json.NewDecoder(res.Body).Decode(target); err != nil {
-		return nil, err
-	}
-	return ret, nil
-	// {
-	//   "description": "Updates the configuration of the specified service.",
-	//   "flatPath": "v1alpha/apps/{appsId}/services/{servicesId}",
-	//   "httpMethod": "PATCH",
-	//   "id": "appengine.apps.services.patch",
-	//   "parameterOrder": [
-	//     "appsId",
-	//     "servicesId"
-	//   ],
-	//   "parameters": {
-	//     "appsId": {
-	//       "description": "Part of `name`. Name of the resource to update. Example: apps/myapp/services/default.",
-	//       "location": "path",
-	//       "required": true,
-	//       "type": "string"
-	//     },
-	//     "migrateTraffic": {
-	//       "description": "Set to true to gradually shift traffic to one or more versions that you specify. By default, traffic is shifted immediately. For gradual traffic migration, the target versions must be located within instances that are configured for both warmup requests (https://cloud.google.com/appengine/docs/admin-api/reference/rest/v1alpha/apps.services.versions#inboundservicetype) and automatic scaling (https://cloud.google.com/appengine/docs/admin-api/reference/rest/v1alpha/apps.services.versions#automaticscaling). You must specify the shardBy (https://cloud.google.com/appengine/docs/admin-api/reference/rest/v1alpha/apps.services#shardby) field in the Service resource. Gradual traffic migration is not supported in the App Engine flexible environment. For examples, see Migrating and Splitting Traffic (https://cloud.google.com/appengine/docs/admin-api/migrating-splitting-traffic).",
-	//       "location": "query",
-	//       "type": "boolean"
-	//     },
-	//     "servicesId": {
-	//       "description": "Part of `name`. See documentation of `appsId`.",
-	//       "location": "path",
-	//       "required": true,
-	//       "type": "string"
-	//     },
-	//     "updateMask": {
-	//       "description": "Standard field mask for the set of fields to be updated.",
-	//       "format": "google-fieldmask",
-	//       "location": "query",
-	//       "type": "string"
-	//     }
-	//   },
-	//   "path": "v1alpha/apps/{appsId}/services/{servicesId}",
-	//   "request": {
-	//     "$ref": "Service"
-	//   },
-	//   "response": {
-	//     "$ref": "Operation"
-	//   },
-	//   "scopes": [
-	//     "https://www.googleapis.com/auth/cloud-platform"
-	//   ]
-	// }
-
-}
-
-// method id "appengine.apps.services.versions.create":
-
-type AppsServicesVersionsCreateCall struct {
-	s          *APIService
-	appsId     string
-	servicesId string
-	version    *Version
-	urlParams_ gensupport.URLParams
-	ctx_       context.Context
-	header_    http.Header
-}
-
-// Create: Deploys code and resource files to a new version.
-func (r *AppsServicesVersionsService) Create(appsId string, servicesId string, version *Version) *AppsServicesVersionsCreateCall {
-	c := &AppsServicesVersionsCreateCall{s: r.s, urlParams_: make(gensupport.URLParams)}
-	c.appsId = appsId
-	c.servicesId = servicesId
-	c.version = version
-	return c
-}
-
-// Fields allows partial responses to be retrieved. See
-// https://developers.google.com/gdata/docs/2.0/basics#PartialResponse
-// for more information.
-func (c *AppsServicesVersionsCreateCall) Fields(s ...googleapi.Field) *AppsServicesVersionsCreateCall {
-	c.urlParams_.Set("fields", googleapi.CombineFields(s))
-	return c
-}
-
-// Context sets the context to be used in this call's Do method. Any
-// pending HTTP request will be aborted if the provided context is
-// canceled.
-func (c *AppsServicesVersionsCreateCall) Context(ctx context.Context) *AppsServicesVersionsCreateCall {
-	c.ctx_ = ctx
-	return c
-}
-
-// Header returns an http.Header that can be modified by the caller to
-// add HTTP headers to the request.
-func (c *AppsServicesVersionsCreateCall) Header() http.Header {
-	if c.header_ == nil {
-		c.header_ = make(http.Header)
-	}
-	return c.header_
-}
-
-func (c *AppsServicesVersionsCreateCall) doRequest(alt string) (*http.Response, error) {
-	reqHeaders := make(http.Header)
-	for k, v := range c.header_ {
-		reqHeaders[k] = v
-	}
-	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
-	var body io.Reader = nil
-	body, err := googleapi.WithoutDataWrapper.JSONReader(c.version)
-	if err != nil {
-		return nil, err
-	}
-	reqHeaders.Set("Content-Type", "application/json")
-	c.urlParams_.Set("alt", alt)
-	urls := googleapi.ResolveRelative(c.s.BasePath, "v1alpha/apps/{appsId}/services/{servicesId}/versions")
-	urls += "?" + c.urlParams_.Encode()
-	req, _ := http.NewRequest("POST", urls, body)
-	req.Header = reqHeaders
-	googleapi.Expand(req.URL, map[string]string{
-		"appsId":     c.appsId,
-		"servicesId": c.servicesId,
-	})
-	return gensupport.SendRequest(c.ctx_, c.s.client, req)
-}
-
-// Do executes the "appengine.apps.services.versions.create" call.
-// Exactly one of *Operation or error will be non-nil. Any non-2xx
-// status code is an error. Response headers are in either
-// *Operation.ServerResponse.Header or (if a response was returned at
-// all) in error.(*googleapi.Error).Header. Use googleapi.IsNotModified
-// to check whether the returned error was because
-// http.StatusNotModified was returned.
-func (c *AppsServicesVersionsCreateCall) Do(opts ...googleapi.CallOption) (*Operation, error) {
-	gensupport.SetOptions(c.urlParams_, opts...)
-	res, err := c.doRequest("json")
-	if res != nil && res.StatusCode == http.StatusNotModified {
-		if res.Body != nil {
-			res.Body.Close()
-		}
-		return nil, &googleapi.Error{
-			Code:   res.StatusCode,
-			Header: res.Header,
-		}
-	}
-	if err != nil {
-		return nil, err
-	}
-	defer googleapi.CloseBody(res)
-	if err := googleapi.CheckResponse(res); err != nil {
-		return nil, err
-	}
-	ret := &Operation{
-		ServerResponse: googleapi.ServerResponse{
-			Header:         res.Header,
-			HTTPStatusCode: res.StatusCode,
-		},
-	}
-	target := &ret
-	if err := json.NewDecoder(res.Body).Decode(target); err != nil {
-		return nil, err
-	}
-	return ret, nil
-	// {
-	//   "description": "Deploys code and resource files to a new version.",
-	//   "flatPath": "v1alpha/apps/{appsId}/services/{servicesId}/versions",
-	//   "httpMethod": "POST",
-	//   "id": "appengine.apps.services.versions.create",
-	//   "parameterOrder": [
-	//     "appsId",
-	//     "servicesId"
-	//   ],
-	//   "parameters": {
-	//     "appsId": {
-	//       "description": "Part of `parent`. Name of the parent resource to create this version under. Example: apps/myapp/services/default.",
-	//       "location": "path",
-	//       "required": true,
-	//       "type": "string"
-	//     },
-	//     "servicesId": {
-	//       "description": "Part of `parent`. See documentation of `appsId`.",
-	//       "location": "path",
-	//       "required": true,
-	//       "type": "string"
-	//     }
-	//   },
-	//   "path": "v1alpha/apps/{appsId}/services/{servicesId}/versions",
-	//   "request": {
-	//     "$ref": "Version"
-	//   },
-	//   "response": {
-	//     "$ref": "Operation"
-	//   },
-	//   "scopes": [
-	//     "https://www.googleapis.com/auth/cloud-platform"
-	//   ]
-	// }
-
-}
-
-// method id "appengine.apps.services.versions.delete":
-
-type AppsServicesVersionsDeleteCall struct {
-	s          *APIService
-	appsId     string
-	servicesId string
-	versionsId string
-	urlParams_ gensupport.URLParams
-	ctx_       context.Context
-	header_    http.Header
-}
-
-// Delete: Deletes an existing Version resource.
-func (r *AppsServicesVersionsService) Delete(appsId string, servicesId string, versionsId string) *AppsServicesVersionsDeleteCall {
-	c := &AppsServicesVersionsDeleteCall{s: r.s, urlParams_: make(gensupport.URLParams)}
-	c.appsId = appsId
-	c.servicesId = servicesId
-	c.versionsId = versionsId
-	return c
-}
-
-// Fields allows partial responses to be retrieved. See
-// https://developers.google.com/gdata/docs/2.0/basics#PartialResponse
-// for more information.
-func (c *AppsServicesVersionsDeleteCall) Fields(s ...googleapi.Field) *AppsServicesVersionsDeleteCall {
-	c.urlParams_.Set("fields", googleapi.CombineFields(s))
-	return c
-}
-
-// Context sets the context to be used in this call's Do method. Any
-// pending HTTP request will be aborted if the provided context is
-// canceled.
-func (c *AppsServicesVersionsDeleteCall) Context(ctx context.Context) *AppsServicesVersionsDeleteCall {
-	c.ctx_ = ctx
-	return c
-}
-
-// Header returns an http.Header that can be modified by the caller to
-// add HTTP headers to the request.
-func (c *AppsServicesVersionsDeleteCall) Header() http.Header {
-	if c.header_ == nil {
-		c.header_ = make(http.Header)
-	}
-	return c.header_
-}
-
-func (c *AppsServicesVersionsDeleteCall) doRequest(alt string) (*http.Response, error) {
-	reqHeaders := make(http.Header)
-	for k, v := range c.header_ {
-		reqHeaders[k] = v
-	}
-	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
-	var body io.Reader = nil
-	c.urlParams_.Set("alt", alt)
-	urls := googleapi.ResolveRelative(c.s.BasePath, "v1alpha/apps/{appsId}/services/{servicesId}/versions/{versionsId}")
-	urls += "?" + c.urlParams_.Encode()
-	req, _ := http.NewRequest("DELETE", urls, body)
-	req.Header = reqHeaders
-	googleapi.Expand(req.URL, map[string]string{
-		"appsId":     c.appsId,
-		"servicesId": c.servicesId,
-		"versionsId": c.versionsId,
-	})
-	return gensupport.SendRequest(c.ctx_, c.s.client, req)
-}
-
-// Do executes the "appengine.apps.services.versions.delete" call.
-// Exactly one of *Operation or error will be non-nil. Any non-2xx
-// status code is an error. Response headers are in either
-// *Operation.ServerResponse.Header or (if a response was returned at
-// all) in error.(*googleapi.Error).Header. Use googleapi.IsNotModified
-// to check whether the returned error was because
-// http.StatusNotModified was returned.
-func (c *AppsServicesVersionsDeleteCall) Do(opts ...googleapi.CallOption) (*Operation, error) {
-	gensupport.SetOptions(c.urlParams_, opts...)
-	res, err := c.doRequest("json")
-	if res != nil && res.StatusCode == http.StatusNotModified {
-		if res.Body != nil {
-			res.Body.Close()
-		}
-		return nil, &googleapi.Error{
-			Code:   res.StatusCode,
-			Header: res.Header,
-		}
-	}
-	if err != nil {
-		return nil, err
-	}
-	defer googleapi.CloseBody(res)
-	if err := googleapi.CheckResponse(res); err != nil {
-		return nil, err
-	}
-	ret := &Operation{
-		ServerResponse: googleapi.ServerResponse{
-			Header:         res.Header,
-			HTTPStatusCode: res.StatusCode,
-		},
-	}
-	target := &ret
-	if err := json.NewDecoder(res.Body).Decode(target); err != nil {
-		return nil, err
-	}
-	return ret, nil
-	// {
-	//   "description": "Deletes an existing Version resource.",
-	//   "flatPath": "v1alpha/apps/{appsId}/services/{servicesId}/versions/{versionsId}",
-	//   "httpMethod": "DELETE",
-	//   "id": "appengine.apps.services.versions.delete",
-	//   "parameterOrder": [
-	//     "appsId",
-	//     "servicesId",
-	//     "versionsId"
-	//   ],
-	//   "parameters": {
-	//     "appsId": {
-	//       "description": "Part of `name`. Name of the resource requested. Example: apps/myapp/services/default/versions/v1.",
-	//       "location": "path",
-	//       "required": true,
-	//       "type": "string"
-	//     },
-	//     "servicesId": {
-	//       "description": "Part of `name`. See documentation of `appsId`.",
-	//       "location": "path",
-	//       "required": true,
-	//       "type": "string"
-	//     },
-	//     "versionsId": {
-	//       "description": "Part of `name`. See documentation of `appsId`.",
-	//       "location": "path",
-	//       "required": true,
-	//       "type": "string"
-	//     }
-	//   },
-	//   "path": "v1alpha/apps/{appsId}/services/{servicesId}/versions/{versionsId}",
-	//   "response": {
-	//     "$ref": "Operation"
-	//   },
-	//   "scopes": [
-	//     "https://www.googleapis.com/auth/cloud-platform"
-	//   ]
-	// }
-
-}
-
-// method id "appengine.apps.services.versions.get":
-
-type AppsServicesVersionsGetCall struct {
-	s            *APIService
-	appsId       string
-	servicesId   string
-	versionsId   string
-	urlParams_   gensupport.URLParams
-	ifNoneMatch_ string
-	ctx_         context.Context
-	header_      http.Header
-}
-
-// Get: Gets the specified Version resource. By default, only a
-// BASIC_VIEW will be returned. Specify the FULL_VIEW parameter to get
-// the full resource.
-func (r *AppsServicesVersionsService) Get(appsId string, servicesId string, versionsId string) *AppsServicesVersionsGetCall {
-	c := &AppsServicesVersionsGetCall{s: r.s, urlParams_: make(gensupport.URLParams)}
-	c.appsId = appsId
-	c.servicesId = servicesId
-	c.versionsId = versionsId
-	return c
-}
-
-// View sets the optional parameter "view": Controls the set of fields
-// returned in the Get response.
-//
-// Possible values:
-//   "BASIC"
-//   "FULL"
-func (c *AppsServicesVersionsGetCall) View(view string) *AppsServicesVersionsGetCall {
-	c.urlParams_.Set("view", view)
-	return c
-}
-
-// Fields allows partial responses to be retrieved. See
-// https://developers.google.com/gdata/docs/2.0/basics#PartialResponse
-// for more information.
-func (c *AppsServicesVersionsGetCall) Fields(s ...googleapi.Field) *AppsServicesVersionsGetCall {
-	c.urlParams_.Set("fields", googleapi.CombineFields(s))
-	return c
-}
-
-// IfNoneMatch sets the optional parameter which makes the operation
-// fail if the object's ETag matches the given value. This is useful for
-// getting updates only after the object has changed since the last
-// request. Use googleapi.IsNotModified to check whether the response
-// error from Do is the result of In-None-Match.
-func (c *AppsServicesVersionsGetCall) IfNoneMatch(entityTag string) *AppsServicesVersionsGetCall {
-	c.ifNoneMatch_ = entityTag
-	return c
-}
-
-// Context sets the context to be used in this call's Do method. Any
-// pending HTTP request will be aborted if the provided context is
-// canceled.
-func (c *AppsServicesVersionsGetCall) Context(ctx context.Context) *AppsServicesVersionsGetCall {
-	c.ctx_ = ctx
-	return c
-}
-
-// Header returns an http.Header that can be modified by the caller to
-// add HTTP headers to the request.
-func (c *AppsServicesVersionsGetCall) Header() http.Header {
-	if c.header_ == nil {
-		c.header_ = make(http.Header)
-	}
-	return c.header_
-}
-
-func (c *AppsServicesVersionsGetCall) doRequest(alt string) (*http.Response, error) {
-	reqHeaders := make(http.Header)
-	for k, v := range c.header_ {
-		reqHeaders[k] = v
-	}
-	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
-	if c.ifNoneMatch_ != "" {
-		reqHeaders.Set("If-None-Match", c.ifNoneMatch_)
-	}
-	var body io.Reader = nil
-	c.urlParams_.Set("alt", alt)
-	urls := googleapi.ResolveRelative(c.s.BasePath, "v1alpha/apps/{appsId}/services/{servicesId}/versions/{versionsId}")
-	urls += "?" + c.urlParams_.Encode()
-	req, _ := http.NewRequest("GET", urls, body)
-	req.Header = reqHeaders
-	googleapi.Expand(req.URL, map[string]string{
-		"appsId":     c.appsId,
-		"servicesId": c.servicesId,
-		"versionsId": c.versionsId,
-	})
-	return gensupport.SendRequest(c.ctx_, c.s.client, req)
-}
-
-// Do executes the "appengine.apps.services.versions.get" call.
-// Exactly one of *Version or error will be non-nil. Any non-2xx status
-// code is an error. Response headers are in either
-// *Version.ServerResponse.Header or (if a response was returned at all)
-// in error.(*googleapi.Error).Header. Use googleapi.IsNotModified to
-// check whether the returned error was because http.StatusNotModified
-// was returned.
-func (c *AppsServicesVersionsGetCall) Do(opts ...googleapi.CallOption) (*Version, error) {
-	gensupport.SetOptions(c.urlParams_, opts...)
-	res, err := c.doRequest("json")
-	if res != nil && res.StatusCode == http.StatusNotModified {
-		if res.Body != nil {
-			res.Body.Close()
-		}
-		return nil, &googleapi.Error{
-			Code:   res.StatusCode,
-			Header: res.Header,
-		}
-	}
-	if err != nil {
-		return nil, err
-	}
-	defer googleapi.CloseBody(res)
-	if err := googleapi.CheckResponse(res); err != nil {
-		return nil, err
-	}
-	ret := &Version{
-		ServerResponse: googleapi.ServerResponse{
-			Header:         res.Header,
-			HTTPStatusCode: res.StatusCode,
-		},
-	}
-	target := &ret
-	if err := json.NewDecoder(res.Body).Decode(target); err != nil {
-		return nil, err
-	}
-	return ret, nil
-	// {
-	//   "description": "Gets the specified Version resource. By default, only a BASIC_VIEW will be returned. Specify the FULL_VIEW parameter to get the full resource.",
-	//   "flatPath": "v1alpha/apps/{appsId}/services/{servicesId}/versions/{versionsId}",
-	//   "httpMethod": "GET",
-	//   "id": "appengine.apps.services.versions.get",
-	//   "parameterOrder": [
-	//     "appsId",
-	//     "servicesId",
-	//     "versionsId"
-	//   ],
-	//   "parameters": {
-	//     "appsId": {
-	//       "description": "Part of `name`. Name of the resource requested. Example: apps/myapp/services/default/versions/v1.",
-	//       "location": "path",
-	//       "required": true,
-	//       "type": "string"
-	//     },
-	//     "servicesId": {
-	//       "description": "Part of `name`. See documentation of `appsId`.",
-	//       "location": "path",
-	//       "required": true,
-	//       "type": "string"
-	//     },
-	//     "versionsId": {
-	//       "description": "Part of `name`. See documentation of `appsId`.",
-	//       "location": "path",
-	//       "required": true,
-	//       "type": "string"
-	//     },
-	//     "view": {
-	//       "description": "Controls the set of fields returned in the Get response.",
-	//       "enum": [
-	//         "BASIC",
-	//         "FULL"
-	//       ],
-	//       "location": "query",
-	//       "type": "string"
-	//     }
-	//   },
-	//   "path": "v1alpha/apps/{appsId}/services/{servicesId}/versions/{versionsId}",
-	//   "response": {
-	//     "$ref": "Version"
-	//   },
-	//   "scopes": [
-	//     "https://www.googleapis.com/auth/appengine.admin",
-	//     "https://www.googleapis.com/auth/cloud-platform",
-	//     "https://www.googleapis.com/auth/cloud-platform.read-only"
-	//   ]
-	// }
-
-}
-
-// method id "appengine.apps.services.versions.list":
-
-type AppsServicesVersionsListCall struct {
-	s            *APIService
-	appsId       string
-	servicesId   string
-	urlParams_   gensupport.URLParams
-	ifNoneMatch_ string
-	ctx_         context.Context
-	header_      http.Header
-}
-
-// List: Lists the versions of a service.
-func (r *AppsServicesVersionsService) List(appsId string, servicesId string) *AppsServicesVersionsListCall {
-	c := &AppsServicesVersionsListCall{s: r.s, urlParams_: make(gensupport.URLParams)}
-	c.appsId = appsId
-	c.servicesId = servicesId
-	return c
-}
-
-// PageSize sets the optional parameter "pageSize": Maximum results to
-// return per page.
-func (c *AppsServicesVersionsListCall) PageSize(pageSize int64) *AppsServicesVersionsListCall {
-	c.urlParams_.Set("pageSize", fmt.Sprint(pageSize))
-	return c
-}
-
-// PageToken sets the optional parameter "pageToken": Continuation token
-// for fetching the next page of results.
-func (c *AppsServicesVersionsListCall) PageToken(pageToken string) *AppsServicesVersionsListCall {
-	c.urlParams_.Set("pageToken", pageToken)
-	return c
-}
-
-// View sets the optional parameter "view": Controls the set of fields
-// returned in the List response.
-//
-// Possible values:
-//   "BASIC"
-//   "FULL"
-func (c *AppsServicesVersionsListCall) View(view string) *AppsServicesVersionsListCall {
-	c.urlParams_.Set("view", view)
-	return c
-}
-
-// Fields allows partial responses to be retrieved. See
-// https://developers.google.com/gdata/docs/2.0/basics#PartialResponse
-// for more information.
-func (c *AppsServicesVersionsListCall) Fields(s ...googleapi.Field) *AppsServicesVersionsListCall {
-	c.urlParams_.Set("fields", googleapi.CombineFields(s))
-	return c
-}
-
-// IfNoneMatch sets the optional parameter which makes the operation
-// fail if the object's ETag matches the given value. This is useful for
-// getting updates only after the object has changed since the last
-// request. Use googleapi.IsNotModified to check whether the response
-// error from Do is the result of In-None-Match.
-func (c *AppsServicesVersionsListCall) IfNoneMatch(entityTag string) *AppsServicesVersionsListCall {
-	c.ifNoneMatch_ = entityTag
-	return c
-}
-
-// Context sets the context to be used in this call's Do method. Any
-// pending HTTP request will be aborted if the provided context is
-// canceled.
-func (c *AppsServicesVersionsListCall) Context(ctx context.Context) *AppsServicesVersionsListCall {
-	c.ctx_ = ctx
-	return c
-}
-
-// Header returns an http.Header that can be modified by the caller to
-// add HTTP headers to the request.
-func (c *AppsServicesVersionsListCall) Header() http.Header {
-	if c.header_ == nil {
-		c.header_ = make(http.Header)
-	}
-	return c.header_
-}
-
-func (c *AppsServicesVersionsListCall) doRequest(alt string) (*http.Response, error) {
-	reqHeaders := make(http.Header)
-	for k, v := range c.header_ {
-		reqHeaders[k] = v
-	}
-	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
-	if c.ifNoneMatch_ != "" {
-		reqHeaders.Set("If-None-Match", c.ifNoneMatch_)
-	}
-	var body io.Reader = nil
-	c.urlParams_.Set("alt", alt)
-	urls := googleapi.ResolveRelative(c.s.BasePath, "v1alpha/apps/{appsId}/services/{servicesId}/versions")
-	urls += "?" + c.urlParams_.Encode()
-	req, _ := http.NewRequest("GET", urls, body)
-	req.Header = reqHeaders
-	googleapi.Expand(req.URL, map[string]string{
-		"appsId":     c.appsId,
-		"servicesId": c.servicesId,
-	})
-	return gensupport.SendRequest(c.ctx_, c.s.client, req)
-}
-
-// Do executes the "appengine.apps.services.versions.list" call.
-// Exactly one of *ListVersionsResponse or error will be non-nil. Any
-// non-2xx status code is an error. Response headers are in either
-// *ListVersionsResponse.ServerResponse.Header or (if a response was
-// returned at all) in error.(*googleapi.Error).Header. Use
-// googleapi.IsNotModified to check whether the returned error was
-// because http.StatusNotModified was returned.
-func (c *AppsServicesVersionsListCall) Do(opts ...googleapi.CallOption) (*ListVersionsResponse, error) {
-	gensupport.SetOptions(c.urlParams_, opts...)
-	res, err := c.doRequest("json")
-	if res != nil && res.StatusCode == http.StatusNotModified {
-		if res.Body != nil {
-			res.Body.Close()
-		}
-		return nil, &googleapi.Error{
-			Code:   res.StatusCode,
-			Header: res.Header,
-		}
-	}
-	if err != nil {
-		return nil, err
-	}
-	defer googleapi.CloseBody(res)
-	if err := googleapi.CheckResponse(res); err != nil {
-		return nil, err
-	}
-	ret := &ListVersionsResponse{
-		ServerResponse: googleapi.ServerResponse{
-			Header:         res.Header,
-			HTTPStatusCode: res.StatusCode,
-		},
-	}
-	target := &ret
-	if err := json.NewDecoder(res.Body).Decode(target); err != nil {
-		return nil, err
-	}
-	return ret, nil
-	// {
-	//   "description": "Lists the versions of a service.",
-	//   "flatPath": "v1alpha/apps/{appsId}/services/{servicesId}/versions",
-	//   "httpMethod": "GET",
-	//   "id": "appengine.apps.services.versions.list",
-	//   "parameterOrder": [
-	//     "appsId",
-	//     "servicesId"
-	//   ],
-	//   "parameters": {
-	//     "appsId": {
-	//       "description": "Part of `parent`. Name of the parent Service resource. Example: apps/myapp/services/default.",
-	//       "location": "path",
-	//       "required": true,
-	//       "type": "string"
-	//     },
-	//     "pageSize": {
-	//       "description": "Maximum results to return per page.",
-	//       "format": "int32",
-	//       "location": "query",
-	//       "type": "integer"
-	//     },
-	//     "pageToken": {
-	//       "description": "Continuation token for fetching the next page of results.",
-	//       "location": "query",
-	//       "type": "string"
-	//     },
-	//     "servicesId": {
-	//       "description": "Part of `parent`. See documentation of `appsId`.",
-	//       "location": "path",
-	//       "required": true,
-	//       "type": "string"
-	//     },
-	//     "view": {
-	//       "description": "Controls the set of fields returned in the List response.",
-	//       "enum": [
-	//         "BASIC",
-	//         "FULL"
-	//       ],
-	//       "location": "query",
-	//       "type": "string"
-	//     }
-	//   },
-	//   "path": "v1alpha/apps/{appsId}/services/{servicesId}/versions",
-	//   "response": {
-	//     "$ref": "ListVersionsResponse"
-	//   },
-	//   "scopes": [
-	//     "https://www.googleapis.com/auth/appengine.admin",
-	//     "https://www.googleapis.com/auth/cloud-platform",
-	//     "https://www.googleapis.com/auth/cloud-platform.read-only"
-	//   ]
-	// }
-
-}
-
-// Pages invokes f for each page of results.
-// A non-nil error returned from f will halt the iteration.
-// The provided context supersedes any context provided to the Context method.
-func (c *AppsServicesVersionsListCall) Pages(ctx context.Context, f func(*ListVersionsResponse) error) error {
-	c.ctx_ = ctx
-	defer c.PageToken(c.urlParams_.Get("pageToken")) // reset paging to original point
-	for {
-		x, err := c.Do()
-		if err != nil {
-			return err
-		}
-		if err := f(x); err != nil {
-			return err
-		}
-		if x.NextPageToken == "" {
-			return nil
-		}
-		c.PageToken(x.NextPageToken)
-	}
-}
-
-// method id "appengine.apps.services.versions.patch":
-
-type AppsServicesVersionsPatchCall struct {
-	s          *APIService
-	appsId     string
-	servicesId string
-	versionsId string
-	version    *Version
-	urlParams_ gensupport.URLParams
-	ctx_       context.Context
-	header_    http.Header
-}
-
-// Patch: Updates the specified Version resource. You can specify the
-// following fields depending on the App Engine environment and type of
-// scaling that the version resource uses:
-// serving_status
-// (https://cloud.google.com/appengine/docs/admin-api/reference/rest/v1al
-// pha/apps.services.versions#Version.FIELDS.serving_status):  For
-// Version resources that use basic scaling, manual scaling, or run in
-// the App Engine flexible environment.
-// instance_class
-// (https://cloud.google.com/appengine/docs/admin-api/reference/rest/v1al
-// pha/apps.services.versions#Version.FIELDS.instance_class):  For
-// Version resources that run in the App Engine standard
-// environment.
-// automatic_scaling.min_idle_instances
-// (https://cloud.google.com/appengine/docs/admin-api/reference/rest/v1al
-// pha/apps.services.versions#Version.FIELDS.automatic_scaling):  For
-// Version resources that use automatic scaling and run in the App
-// Engine standard environment.
-// automatic_scaling.max_idle_instances
-// (https://cloud.google.com/appengine/docs/admin-api/reference/rest/v1al
-// pha/apps.services.versions#Version.FIELDS.automatic_scaling):  For
-// Version resources that use automatic scaling and run in the App
-// Engine standard environment.
-func (r *AppsServicesVersionsService) Patch(appsId string, servicesId string, versionsId string, version *Version) *AppsServicesVersionsPatchCall {
-	c := &AppsServicesVersionsPatchCall{s: r.s, urlParams_: make(gensupport.URLParams)}
-	c.appsId = appsId
-	c.servicesId = servicesId
-	c.versionsId = versionsId
-	c.version = version
-	return c
-}
-
-// UpdateMask sets the optional parameter "updateMask": Standard field
-// mask for the set of fields to be updated.
-func (c *AppsServicesVersionsPatchCall) UpdateMask(updateMask string) *AppsServicesVersionsPatchCall {
-	c.urlParams_.Set("updateMask", updateMask)
-	return c
-}
-
-// Fields allows partial responses to be retrieved. See
-// https://developers.google.com/gdata/docs/2.0/basics#PartialResponse
-// for more information.
-func (c *AppsServicesVersionsPatchCall) Fields(s ...googleapi.Field) *AppsServicesVersionsPatchCall {
-	c.urlParams_.Set("fields", googleapi.CombineFields(s))
-	return c
-}
-
-// Context sets the context to be used in this call's Do method. Any
-// pending HTTP request will be aborted if the provided context is
-// canceled.
-func (c *AppsServicesVersionsPatchCall) Context(ctx context.Context) *AppsServicesVersionsPatchCall {
-	c.ctx_ = ctx
-	return c
-}
-
-// Header returns an http.Header that can be modified by the caller to
-// add HTTP headers to the request.
-func (c *AppsServicesVersionsPatchCall) Header() http.Header {
-	if c.header_ == nil {
-		c.header_ = make(http.Header)
-	}
-	return c.header_
-}
-
-func (c *AppsServicesVersionsPatchCall) doRequest(alt string) (*http.Response, error) {
-	reqHeaders := make(http.Header)
-	for k, v := range c.header_ {
-		reqHeaders[k] = v
-	}
-	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
-	var body io.Reader = nil
-	body, err := googleapi.WithoutDataWrapper.JSONReader(c.version)
-	if err != nil {
-		return nil, err
-	}
-	reqHeaders.Set("Content-Type", "application/json")
-	c.urlParams_.Set("alt", alt)
-	urls := googleapi.ResolveRelative(c.s.BasePath, "v1alpha/apps/{appsId}/services/{servicesId}/versions/{versionsId}")
-	urls += "?" + c.urlParams_.Encode()
-	req, _ := http.NewRequest("PATCH", urls, body)
-	req.Header = reqHeaders
-	googleapi.Expand(req.URL, map[string]string{
-		"appsId":     c.appsId,
-		"servicesId": c.servicesId,
-		"versionsId": c.versionsId,
-	})
-	return gensupport.SendRequest(c.ctx_, c.s.client, req)
-}
-
-// Do executes the "appengine.apps.services.versions.patch" call.
-// Exactly one of *Operation or error will be non-nil. Any non-2xx
-// status code is an error. Response headers are in either
-// *Operation.ServerResponse.Header or (if a response was returned at
-// all) in error.(*googleapi.Error).Header. Use googleapi.IsNotModified
-// to check whether the returned error was because
-// http.StatusNotModified was returned.
-func (c *AppsServicesVersionsPatchCall) Do(opts ...googleapi.CallOption) (*Operation, error) {
-	gensupport.SetOptions(c.urlParams_, opts...)
-	res, err := c.doRequest("json")
-	if res != nil && res.StatusCode == http.StatusNotModified {
-		if res.Body != nil {
-			res.Body.Close()
-		}
-		return nil, &googleapi.Error{
-			Code:   res.StatusCode,
-			Header: res.Header,
-		}
-	}
-	if err != nil {
-		return nil, err
-	}
-	defer googleapi.CloseBody(res)
-	if err := googleapi.CheckResponse(res); err != nil {
-		return nil, err
-	}
-	ret := &Operation{
-		ServerResponse: googleapi.ServerResponse{
-			Header:         res.Header,
-			HTTPStatusCode: res.StatusCode,
-		},
-	}
-	target := &ret
-	if err := json.NewDecoder(res.Body).Decode(target); err != nil {
-		return nil, err
-	}
-	return ret, nil
-	// {
-	//   "description": "Updates the specified Version resource. You can specify the following fields depending on the App Engine environment and type of scaling that the version resource uses:\nserving_status (https://cloud.google.com/appengine/docs/admin-api/reference/rest/v1alpha/apps.services.versions#Version.FIELDS.serving_status):  For Version resources that use basic scaling, manual scaling, or run in  the App Engine flexible environment.\ninstance_class (https://cloud.google.com/appengine/docs/admin-api/reference/rest/v1alpha/apps.services.versions#Version.FIELDS.instance_class):  For Version resources that run in the App Engine standard environment.\nautomatic_scaling.min_idle_instances (https://cloud.google.com/appengine/docs/admin-api/reference/rest/v1alpha/apps.services.versions#Version.FIELDS.automatic_scaling):  For Version resources that use automatic scaling and run in the App  Engine standard environment.\nautomatic_scaling.max_idle_instances (https://cloud.google.com/appengine/docs/admin-api/reference/rest/v1alpha/apps.services.versions#Version.FIELDS.automatic_scaling):  For Version resources that use automatic scaling and run in the App  Engine standard environment.",
-	//   "flatPath": "v1alpha/apps/{appsId}/services/{servicesId}/versions/{versionsId}",
-	//   "httpMethod": "PATCH",
-	//   "id": "appengine.apps.services.versions.patch",
-	//   "parameterOrder": [
-	//     "appsId",
-	//     "servicesId",
-	//     "versionsId"
-	//   ],
-	//   "parameters": {
-	//     "appsId": {
-	//       "description": "Part of `name`. Name of the resource to update. Example: apps/myapp/services/default/versions/1.",
-	//       "location": "path",
-	//       "required": true,
-	//       "type": "string"
-	//     },
-	//     "servicesId": {
-	//       "description": "Part of `name`. See documentation of `appsId`.",
-	//       "location": "path",
-	//       "required": true,
-	//       "type": "string"
-	//     },
-	//     "updateMask": {
-	//       "description": "Standard field mask for the set of fields to be updated.",
-	//       "format": "google-fieldmask",
-	//       "location": "query",
-	//       "type": "string"
-	//     },
-	//     "versionsId": {
-	//       "description": "Part of `name`. See documentation of `appsId`.",
-	//       "location": "path",
-	//       "required": true,
-	//       "type": "string"
-	//     }
-	//   },
-	//   "path": "v1alpha/apps/{appsId}/services/{servicesId}/versions/{versionsId}",
-	//   "request": {
-	//     "$ref": "Version"
-	//   },
-	//   "response": {
-	//     "$ref": "Operation"
-	//   },
-	//   "scopes": [
-	//     "https://www.googleapis.com/auth/cloud-platform"
-	//   ]
-	// }
-
-}
-
-// method id "appengine.apps.services.versions.instances.debug":
-
-type AppsServicesVersionsInstancesDebugCall struct {
-	s                    *APIService
-	appsId               string
-	servicesId           string
-	versionsId           string
-	instancesId          string
-	debuginstancerequest *DebugInstanceRequest
-	urlParams_           gensupport.URLParams
-	ctx_                 context.Context
-	header_              http.Header
-}
-
-// Debug: Enables debugging on a VM instance. This allows you to use the
-// SSH command to connect to the virtual machine where the instance
-// lives. While in "debug mode", the instance continues to serve live
-// traffic. You should delete the instance when you are done debugging
-// and then allow the system to take over and determine if another
-// instance should be started.Only applicable for instances in App
-// Engine flexible environment.
-func (r *AppsServicesVersionsInstancesService) Debug(appsId string, servicesId string, versionsId string, instancesId string, debuginstancerequest *DebugInstanceRequest) *AppsServicesVersionsInstancesDebugCall {
-	c := &AppsServicesVersionsInstancesDebugCall{s: r.s, urlParams_: make(gensupport.URLParams)}
-	c.appsId = appsId
-	c.servicesId = servicesId
-	c.versionsId = versionsId
-	c.instancesId = instancesId
-	c.debuginstancerequest = debuginstancerequest
-	return c
-}
-
-// Fields allows partial responses to be retrieved. See
-// https://developers.google.com/gdata/docs/2.0/basics#PartialResponse
-// for more information.
-func (c *AppsServicesVersionsInstancesDebugCall) Fields(s ...googleapi.Field) *AppsServicesVersionsInstancesDebugCall {
-	c.urlParams_.Set("fields", googleapi.CombineFields(s))
-	return c
-}
-
-// Context sets the context to be used in this call's Do method. Any
-// pending HTTP request will be aborted if the provided context is
-// canceled.
-func (c *AppsServicesVersionsInstancesDebugCall) Context(ctx context.Context) *AppsServicesVersionsInstancesDebugCall {
-	c.ctx_ = ctx
-	return c
-}
-
-// Header returns an http.Header that can be modified by the caller to
-// add HTTP headers to the request.
-func (c *AppsServicesVersionsInstancesDebugCall) Header() http.Header {
-	if c.header_ == nil {
-		c.header_ = make(http.Header)
-	}
-	return c.header_
-}
-
-func (c *AppsServicesVersionsInstancesDebugCall) doRequest(alt string) (*http.Response, error) {
-	reqHeaders := make(http.Header)
-	for k, v := range c.header_ {
-		reqHeaders[k] = v
-	}
-	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
-	var body io.Reader = nil
-	body, err := googleapi.WithoutDataWrapper.JSONReader(c.debuginstancerequest)
-	if err != nil {
-		return nil, err
-	}
-	reqHeaders.Set("Content-Type", "application/json")
-	c.urlParams_.Set("alt", alt)
-	urls := googleapi.ResolveRelative(c.s.BasePath, "v1alpha/apps/{appsId}/services/{servicesId}/versions/{versionsId}/instances/{instancesId}:debug")
-	urls += "?" + c.urlParams_.Encode()
-	req, _ := http.NewRequest("POST", urls, body)
-	req.Header = reqHeaders
-	googleapi.Expand(req.URL, map[string]string{
-		"appsId":      c.appsId,
-		"servicesId":  c.servicesId,
-		"versionsId":  c.versionsId,
-		"instancesId": c.instancesId,
-	})
-	return gensupport.SendRequest(c.ctx_, c.s.client, req)
-}
-
-// Do executes the "appengine.apps.services.versions.instances.debug" call.
-// Exactly one of *Operation or error will be non-nil. Any non-2xx
-// status code is an error. Response headers are in either
-// *Operation.ServerResponse.Header or (if a response was returned at
-// all) in error.(*googleapi.Error).Header. Use googleapi.IsNotModified
-// to check whether the returned error was because
-// http.StatusNotModified was returned.
-func (c *AppsServicesVersionsInstancesDebugCall) Do(opts ...googleapi.CallOption) (*Operation, error) {
-	gensupport.SetOptions(c.urlParams_, opts...)
-	res, err := c.doRequest("json")
-	if res != nil && res.StatusCode == http.StatusNotModified {
-		if res.Body != nil {
-			res.Body.Close()
-		}
-		return nil, &googleapi.Error{
-			Code:   res.StatusCode,
-			Header: res.Header,
-		}
-	}
-	if err != nil {
-		return nil, err
-	}
-	defer googleapi.CloseBody(res)
-	if err := googleapi.CheckResponse(res); err != nil {
-		return nil, err
-	}
-	ret := &Operation{
-		ServerResponse: googleapi.ServerResponse{
-			Header:         res.Header,
-			HTTPStatusCode: res.StatusCode,
-		},
-	}
-	target := &ret
-	if err := json.NewDecoder(res.Body).Decode(target); err != nil {
-		return nil, err
-	}
-	return ret, nil
-	// {
-	//   "description": "Enables debugging on a VM instance. This allows you to use the SSH command to connect to the virtual machine where the instance lives. While in \"debug mode\", the instance continues to serve live traffic. You should delete the instance when you are done debugging and then allow the system to take over and determine if another instance should be started.Only applicable for instances in App Engine flexible environment.",
-	//   "flatPath": "v1alpha/apps/{appsId}/services/{servicesId}/versions/{versionsId}/instances/{instancesId}:debug",
-	//   "httpMethod": "POST",
-	//   "id": "appengine.apps.services.versions.instances.debug",
-	//   "parameterOrder": [
-	//     "appsId",
-	//     "servicesId",
-	//     "versionsId",
-	//     "instancesId"
-	//   ],
-	//   "parameters": {
-	//     "appsId": {
-	//       "description": "Part of `name`. Name of the resource requested. Example: apps/myapp/services/default/versions/v1/instances/instance-1.",
-	//       "location": "path",
-	//       "required": true,
-	//       "type": "string"
-	//     },
-	//     "instancesId": {
-	//       "description": "Part of `name`. See documentation of `appsId`.",
-	//       "location": "path",
-	//       "required": true,
-	//       "type": "string"
-	//     },
-	//     "servicesId": {
-	//       "description": "Part of `name`. See documentation of `appsId`.",
-	//       "location": "path",
-	//       "required": true,
-	//       "type": "string"
-	//     },
-	//     "versionsId": {
-	//       "description": "Part of `name`. See documentation of `appsId`.",
-	//       "location": "path",
-	//       "required": true,
-	//       "type": "string"
-	//     }
-	//   },
-	//   "path": "v1alpha/apps/{appsId}/services/{servicesId}/versions/{versionsId}/instances/{instancesId}:debug",
-	//   "request": {
-	//     "$ref": "DebugInstanceRequest"
-	//   },
-	//   "response": {
-	//     "$ref": "Operation"
-	//   },
-	//   "scopes": [
-	//     "https://www.googleapis.com/auth/cloud-platform"
-	//   ]
-	// }
-
-}
-
-// method id "appengine.apps.services.versions.instances.delete":
-
-type AppsServicesVersionsInstancesDeleteCall struct {
-	s           *APIService
-	appsId      string
-	servicesId  string
-	versionsId  string
-	instancesId string
-	urlParams_  gensupport.URLParams
-	ctx_        context.Context
-	header_     http.Header
-}
-
-// Delete: Stops a running instance.
-func (r *AppsServicesVersionsInstancesService) Delete(appsId string, servicesId string, versionsId string, instancesId string) *AppsServicesVersionsInstancesDeleteCall {
-	c := &AppsServicesVersionsInstancesDeleteCall{s: r.s, urlParams_: make(gensupport.URLParams)}
-	c.appsId = appsId
-	c.servicesId = servicesId
-	c.versionsId = versionsId
-	c.instancesId = instancesId
-	return c
-}
-
-// Fields allows partial responses to be retrieved. See
-// https://developers.google.com/gdata/docs/2.0/basics#PartialResponse
-// for more information.
-func (c *AppsServicesVersionsInstancesDeleteCall) Fields(s ...googleapi.Field) *AppsServicesVersionsInstancesDeleteCall {
-	c.urlParams_.Set("fields", googleapi.CombineFields(s))
-	return c
-}
-
-// Context sets the context to be used in this call's Do method. Any
-// pending HTTP request will be aborted if the provided context is
-// canceled.
-func (c *AppsServicesVersionsInstancesDeleteCall) Context(ctx context.Context) *AppsServicesVersionsInstancesDeleteCall {
-	c.ctx_ = ctx
-	return c
-}
-
-// Header returns an http.Header that can be modified by the caller to
-// add HTTP headers to the request.
-func (c *AppsServicesVersionsInstancesDeleteCall) Header() http.Header {
-	if c.header_ == nil {
-		c.header_ = make(http.Header)
-	}
-	return c.header_
-}
-
-func (c *AppsServicesVersionsInstancesDeleteCall) doRequest(alt string) (*http.Response, error) {
-	reqHeaders := make(http.Header)
-	for k, v := range c.header_ {
-		reqHeaders[k] = v
-	}
-	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
-	var body io.Reader = nil
-	c.urlParams_.Set("alt", alt)
-	urls := googleapi.ResolveRelative(c.s.BasePath, "v1alpha/apps/{appsId}/services/{servicesId}/versions/{versionsId}/instances/{instancesId}")
-	urls += "?" + c.urlParams_.Encode()
-	req, _ := http.NewRequest("DELETE", urls, body)
-	req.Header = reqHeaders
-	googleapi.Expand(req.URL, map[string]string{
-		"appsId":      c.appsId,
-		"servicesId":  c.servicesId,
-		"versionsId":  c.versionsId,
-		"instancesId": c.instancesId,
-	})
-	return gensupport.SendRequest(c.ctx_, c.s.client, req)
-}
-
-// Do executes the "appengine.apps.services.versions.instances.delete" call.
-// Exactly one of *Operation or error will be non-nil. Any non-2xx
-// status code is an error. Response headers are in either
-// *Operation.ServerResponse.Header or (if a response was returned at
-// all) in error.(*googleapi.Error).Header. Use googleapi.IsNotModified
-// to check whether the returned error was because
-// http.StatusNotModified was returned.
-func (c *AppsServicesVersionsInstancesDeleteCall) Do(opts ...googleapi.CallOption) (*Operation, error) {
-	gensupport.SetOptions(c.urlParams_, opts...)
-	res, err := c.doRequest("json")
-	if res != nil && res.StatusCode == http.StatusNotModified {
-		if res.Body != nil {
-			res.Body.Close()
-		}
-		return nil, &googleapi.Error{
-			Code:   res.StatusCode,
-			Header: res.Header,
-		}
-	}
-	if err != nil {
-		return nil, err
-	}
-	defer googleapi.CloseBody(res)
-	if err := googleapi.CheckResponse(res); err != nil {
-		return nil, err
-	}
-	ret := &Operation{
-		ServerResponse: googleapi.ServerResponse{
-			Header:         res.Header,
-			HTTPStatusCode: res.StatusCode,
-		},
-	}
-	target := &ret
-	if err := json.NewDecoder(res.Body).Decode(target); err != nil {
-		return nil, err
-	}
-	return ret, nil
-	// {
-	//   "description": "Stops a running instance.",
-	//   "flatPath": "v1alpha/apps/{appsId}/services/{servicesId}/versions/{versionsId}/instances/{instancesId}",
-	//   "httpMethod": "DELETE",
-	//   "id": "appengine.apps.services.versions.instances.delete",
-	//   "parameterOrder": [
-	//     "appsId",
-	//     "servicesId",
-	//     "versionsId",
-	//     "instancesId"
-	//   ],
-	//   "parameters": {
-	//     "appsId": {
-	//       "description": "Part of `name`. Name of the resource requested. Example: apps/myapp/services/default/versions/v1/instances/instance-1.",
-	//       "location": "path",
-	//       "required": true,
-	//       "type": "string"
-	//     },
-	//     "instancesId": {
-	//       "description": "Part of `name`. See documentation of `appsId`.",
-	//       "location": "path",
-	//       "required": true,
-	//       "type": "string"
-	//     },
-	//     "servicesId": {
-	//       "description": "Part of `name`. See documentation of `appsId`.",
-	//       "location": "path",
-	//       "required": true,
-	//       "type": "string"
-	//     },
-	//     "versionsId": {
-	//       "description": "Part of `name`. See documentation of `appsId`.",
-	//       "location": "path",
-	//       "required": true,
-	//       "type": "string"
-	//     }
-	//   },
-	//   "path": "v1alpha/apps/{appsId}/services/{servicesId}/versions/{versionsId}/instances/{instancesId}",
-	//   "response": {
-	//     "$ref": "Operation"
-	//   },
-	//   "scopes": [
-	//     "https://www.googleapis.com/auth/cloud-platform"
-	//   ]
-	// }
-
-}
-
-// method id "appengine.apps.services.versions.instances.get":
-
-type AppsServicesVersionsInstancesGetCall struct {
-	s            *APIService
-	appsId       string
-	servicesId   string
-	versionsId   string
-	instancesId  string
-	urlParams_   gensupport.URLParams
-	ifNoneMatch_ string
-	ctx_         context.Context
-	header_      http.Header
-}
-
-// Get: Gets instance information.
-func (r *AppsServicesVersionsInstancesService) Get(appsId string, servicesId string, versionsId string, instancesId string) *AppsServicesVersionsInstancesGetCall {
-	c := &AppsServicesVersionsInstancesGetCall{s: r.s, urlParams_: make(gensupport.URLParams)}
-	c.appsId = appsId
-	c.servicesId = servicesId
-	c.versionsId = versionsId
-	c.instancesId = instancesId
-	return c
-}
-
-// Fields allows partial responses to be retrieved. See
-// https://developers.google.com/gdata/docs/2.0/basics#PartialResponse
-// for more information.
-func (c *AppsServicesVersionsInstancesGetCall) Fields(s ...googleapi.Field) *AppsServicesVersionsInstancesGetCall {
-	c.urlParams_.Set("fields", googleapi.CombineFields(s))
-	return c
-}
-
-// IfNoneMatch sets the optional parameter which makes the operation
-// fail if the object's ETag matches the given value. This is useful for
-// getting updates only after the object has changed since the last
-// request. Use googleapi.IsNotModified to check whether the response
-// error from Do is the result of In-None-Match.
-func (c *AppsServicesVersionsInstancesGetCall) IfNoneMatch(entityTag string) *AppsServicesVersionsInstancesGetCall {
-	c.ifNoneMatch_ = entityTag
-	return c
-}
-
-// Context sets the context to be used in this call's Do method. Any
-// pending HTTP request will be aborted if the provided context is
-// canceled.
-func (c *AppsServicesVersionsInstancesGetCall) Context(ctx context.Context) *AppsServicesVersionsInstancesGetCall {
-	c.ctx_ = ctx
-	return c
-}
-
-// Header returns an http.Header that can be modified by the caller to
-// add HTTP headers to the request.
-func (c *AppsServicesVersionsInstancesGetCall) Header() http.Header {
-	if c.header_ == nil {
-		c.header_ = make(http.Header)
-	}
-	return c.header_
-}
-
-func (c *AppsServicesVersionsInstancesGetCall) doRequest(alt string) (*http.Response, error) {
-	reqHeaders := make(http.Header)
-	for k, v := range c.header_ {
-		reqHeaders[k] = v
-	}
-	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
-	if c.ifNoneMatch_ != "" {
-		reqHeaders.Set("If-None-Match", c.ifNoneMatch_)
-	}
-	var body io.Reader = nil
-	c.urlParams_.Set("alt", alt)
-	urls := googleapi.ResolveRelative(c.s.BasePath, "v1alpha/apps/{appsId}/services/{servicesId}/versions/{versionsId}/instances/{instancesId}")
-	urls += "?" + c.urlParams_.Encode()
-	req, _ := http.NewRequest("GET", urls, body)
-	req.Header = reqHeaders
-	googleapi.Expand(req.URL, map[string]string{
-		"appsId":      c.appsId,
-		"servicesId":  c.servicesId,
-		"versionsId":  c.versionsId,
-		"instancesId": c.instancesId,
-	})
-	return gensupport.SendRequest(c.ctx_, c.s.client, req)
-}
-
-// Do executes the "appengine.apps.services.versions.instances.get" call.
-// Exactly one of *Instance or error will be non-nil. Any non-2xx status
-// code is an error. Response headers are in either
-// *Instance.ServerResponse.Header or (if a response was returned at
-// all) in error.(*googleapi.Error).Header. Use googleapi.IsNotModified
-// to check whether the returned error was because
-// http.StatusNotModified was returned.
-func (c *AppsServicesVersionsInstancesGetCall) Do(opts ...googleapi.CallOption) (*Instance, error) {
-	gensupport.SetOptions(c.urlParams_, opts...)
-	res, err := c.doRequest("json")
-	if res != nil && res.StatusCode == http.StatusNotModified {
-		if res.Body != nil {
-			res.Body.Close()
-		}
-		return nil, &googleapi.Error{
-			Code:   res.StatusCode,
-			Header: res.Header,
-		}
-	}
-	if err != nil {
-		return nil, err
-	}
-	defer googleapi.CloseBody(res)
-	if err := googleapi.CheckResponse(res); err != nil {
-		return nil, err
-	}
-	ret := &Instance{
-		ServerResponse: googleapi.ServerResponse{
-			Header:         res.Header,
-			HTTPStatusCode: res.StatusCode,
-		},
-	}
-	target := &ret
-	if err := json.NewDecoder(res.Body).Decode(target); err != nil {
-		return nil, err
-	}
-	return ret, nil
-	// {
-	//   "description": "Gets instance information.",
-	//   "flatPath": "v1alpha/apps/{appsId}/services/{servicesId}/versions/{versionsId}/instances/{instancesId}",
-	//   "httpMethod": "GET",
-	//   "id": "appengine.apps.services.versions.instances.get",
-	//   "parameterOrder": [
-	//     "appsId",
-	//     "servicesId",
-	//     "versionsId",
-	//     "instancesId"
-	//   ],
-	//   "parameters": {
-	//     "appsId": {
-	//       "description": "Part of `name`. Name of the resource requested. Example: apps/myapp/services/default/versions/v1/instances/instance-1.",
-	//       "location": "path",
-	//       "required": true,
-	//       "type": "string"
-	//     },
-	//     "instancesId": {
-	//       "description": "Part of `name`. See documentation of `appsId`.",
-	//       "location": "path",
-	//       "required": true,
-	//       "type": "string"
-	//     },
-	//     "servicesId": {
-	//       "description": "Part of `name`. See documentation of `appsId`.",
-	//       "location": "path",
-	//       "required": true,
-	//       "type": "string"
-	//     },
-	//     "versionsId": {
-	//       "description": "Part of `name`. See documentation of `appsId`.",
-	//       "location": "path",
-	//       "required": true,
-	//       "type": "string"
-	//     }
-	//   },
-	//   "path": "v1alpha/apps/{appsId}/services/{servicesId}/versions/{versionsId}/instances/{instancesId}",
-	//   "response": {
-	//     "$ref": "Instance"
-	//   },
-	//   "scopes": [
-	//     "https://www.googleapis.com/auth/appengine.admin",
-	//     "https://www.googleapis.com/auth/cloud-platform",
-	//     "https://www.googleapis.com/auth/cloud-platform.read-only"
-	//   ]
-	// }
-
-}
-
-// method id "appengine.apps.services.versions.instances.list":
-
-type AppsServicesVersionsInstancesListCall struct {
-	s            *APIService
-	appsId       string
-	servicesId   string
-	versionsId   string
-	urlParams_   gensupport.URLParams
-	ifNoneMatch_ string
-	ctx_         context.Context
-	header_      http.Header
-}
-
-// List: Lists the instances of a version.Tip: To aggregate details
-// about instances over time, see the Stackdriver Monitoring API
-// (https://cloud.google.com/monitoring/api/ref_v3/rest/v3/projects.timeS
-// eries/list).
-func (r *AppsServicesVersionsInstancesService) List(appsId string, servicesId string, versionsId string) *AppsServicesVersionsInstancesListCall {
-	c := &AppsServicesVersionsInstancesListCall{s: r.s, urlParams_: make(gensupport.URLParams)}
-	c.appsId = appsId
-	c.servicesId = servicesId
-	c.versionsId = versionsId
-	return c
-}
-
-// PageSize sets the optional parameter "pageSize": Maximum results to
-// return per page.
-func (c *AppsServicesVersionsInstancesListCall) PageSize(pageSize int64) *AppsServicesVersionsInstancesListCall {
-	c.urlParams_.Set("pageSize", fmt.Sprint(pageSize))
-	return c
-}
-
-// PageToken sets the optional parameter "pageToken": Continuation token
-// for fetching the next page of results.
-func (c *AppsServicesVersionsInstancesListCall) PageToken(pageToken string) *AppsServicesVersionsInstancesListCall {
-	c.urlParams_.Set("pageToken", pageToken)
-	return c
-}
-
-// Fields allows partial responses to be retrieved. See
-// https://developers.google.com/gdata/docs/2.0/basics#PartialResponse
-// for more information.
-func (c *AppsServicesVersionsInstancesListCall) Fields(s ...googleapi.Field) *AppsServicesVersionsInstancesListCall {
-	c.urlParams_.Set("fields", googleapi.CombineFields(s))
-	return c
-}
-
-// IfNoneMatch sets the optional parameter which makes the operation
-// fail if the object's ETag matches the given value. This is useful for
-// getting updates only after the object has changed since the last
-// request. Use googleapi.IsNotModified to check whether the response
-// error from Do is the result of In-None-Match.
-func (c *AppsServicesVersionsInstancesListCall) IfNoneMatch(entityTag string) *AppsServicesVersionsInstancesListCall {
-	c.ifNoneMatch_ = entityTag
-	return c
-}
-
-// Context sets the context to be used in this call's Do method. Any
-// pending HTTP request will be aborted if the provided context is
-// canceled.
-func (c *AppsServicesVersionsInstancesListCall) Context(ctx context.Context) *AppsServicesVersionsInstancesListCall {
-	c.ctx_ = ctx
-	return c
-}
-
-// Header returns an http.Header that can be modified by the caller to
-// add HTTP headers to the request.
-func (c *AppsServicesVersionsInstancesListCall) Header() http.Header {
-	if c.header_ == nil {
-		c.header_ = make(http.Header)
-	}
-	return c.header_
-}
-
-func (c *AppsServicesVersionsInstancesListCall) doRequest(alt string) (*http.Response, error) {
-	reqHeaders := make(http.Header)
-	for k, v := range c.header_ {
-		reqHeaders[k] = v
-	}
-	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
-	if c.ifNoneMatch_ != "" {
-		reqHeaders.Set("If-None-Match", c.ifNoneMatch_)
-	}
-	var body io.Reader = nil
-	c.urlParams_.Set("alt", alt)
-	urls := googleapi.ResolveRelative(c.s.BasePath, "v1alpha/apps/{appsId}/services/{servicesId}/versions/{versionsId}/instances")
-	urls += "?" + c.urlParams_.Encode()
-	req, _ := http.NewRequest("GET", urls, body)
-	req.Header = reqHeaders
-	googleapi.Expand(req.URL, map[string]string{
-		"appsId":     c.appsId,
-		"servicesId": c.servicesId,
-		"versionsId": c.versionsId,
-	})
-	return gensupport.SendRequest(c.ctx_, c.s.client, req)
-}
-
-// Do executes the "appengine.apps.services.versions.instances.list" call.
-// Exactly one of *ListInstancesResponse or error will be non-nil. Any
-// non-2xx status code is an error. Response headers are in either
-// *ListInstancesResponse.ServerResponse.Header or (if a response was
-// returned at all) in error.(*googleapi.Error).Header. Use
-// googleapi.IsNotModified to check whether the returned error was
-// because http.StatusNotModified was returned.
-func (c *AppsServicesVersionsInstancesListCall) Do(opts ...googleapi.CallOption) (*ListInstancesResponse, error) {
-	gensupport.SetOptions(c.urlParams_, opts...)
-	res, err := c.doRequest("json")
-	if res != nil && res.StatusCode == http.StatusNotModified {
-		if res.Body != nil {
-			res.Body.Close()
-		}
-		return nil, &googleapi.Error{
-			Code:   res.StatusCode,
-			Header: res.Header,
-		}
-	}
-	if err != nil {
-		return nil, err
-	}
-	defer googleapi.CloseBody(res)
-	if err := googleapi.CheckResponse(res); err != nil {
-		return nil, err
-	}
-	ret := &ListInstancesResponse{
-		ServerResponse: googleapi.ServerResponse{
-			Header:         res.Header,
-			HTTPStatusCode: res.StatusCode,
-		},
-	}
-	target := &ret
-	if err := json.NewDecoder(res.Body).Decode(target); err != nil {
-		return nil, err
-	}
-	return ret, nil
-	// {
-	//   "description": "Lists the instances of a version.Tip: To aggregate details about instances over time, see the Stackdriver Monitoring API (https://cloud.google.com/monitoring/api/ref_v3/rest/v3/projects.timeSeries/list).",
-	//   "flatPath": "v1alpha/apps/{appsId}/services/{servicesId}/versions/{versionsId}/instances",
-	//   "httpMethod": "GET",
-	//   "id": "appengine.apps.services.versions.instances.list",
-	//   "parameterOrder": [
-	//     "appsId",
-	//     "servicesId",
-	//     "versionsId"
-	//   ],
-	//   "parameters": {
-	//     "appsId": {
-	//       "description": "Part of `parent`. Name of the parent Version resource. Example: apps/myapp/services/default/versions/v1.",
-	//       "location": "path",
-	//       "required": true,
-	//       "type": "string"
-	//     },
-	//     "pageSize": {
-	//       "description": "Maximum results to return per page.",
-	//       "format": "int32",
-	//       "location": "query",
-	//       "type": "integer"
-	//     },
-	//     "pageToken": {
-	//       "description": "Continuation token for fetching the next page of results.",
-	//       "location": "query",
-	//       "type": "string"
-	//     },
-	//     "servicesId": {
-	//       "description": "Part of `parent`. See documentation of `appsId`.",
-	//       "location": "path",
-	//       "required": true,
-	//       "type": "string"
-	//     },
-	//     "versionsId": {
-	//       "description": "Part of `parent`. See documentation of `appsId`.",
-	//       "location": "path",
-	//       "required": true,
-	//       "type": "string"
-	//     }
-	//   },
-	//   "path": "v1alpha/apps/{appsId}/services/{servicesId}/versions/{versionsId}/instances",
-	//   "response": {
-	//     "$ref": "ListInstancesResponse"
-	//   },
-	//   "scopes": [
-	//     "https://www.googleapis.com/auth/appengine.admin",
-	//     "https://www.googleapis.com/auth/cloud-platform",
-	//     "https://www.googleapis.com/auth/cloud-platform.read-only"
-	//   ]
-	// }
-
-}
-
-// Pages invokes f for each page of results.
-// A non-nil error returned from f will halt the iteration.
-// The provided context supersedes any context provided to the Context method.
-func (c *AppsServicesVersionsInstancesListCall) Pages(ctx context.Context, f func(*ListInstancesResponse) error) error {
-	c.ctx_ = ctx
-	defer c.PageToken(c.urlParams_.Get("pageToken")) // reset paging to original point
-	for {
-		x, err := c.Do()
-		if err != nil {
-			return err
-		}
-		if err := f(x); err != nil {
-			return err
-		}
-		if x.NextPageToken == "" {
-			return nil
-		}
-		c.PageToken(x.NextPageToken)
-	}
-}
diff --git a/appengine/v1beta/appengine-api.json b/appengine/v1beta/appengine-api.json
index ad4b761..5676030 100644
--- a/appengine/v1beta/appengine-api.json
+++ b/appengine/v1beta/appengine-api.json
@@ -1,2544 +1,2947 @@
 {
-  "basePath": "",
-  "ownerDomain": "google.com",
-  "name": "appengine",
-  "batchPath": "batch",
-  "revision": "20170302",
-  "id": "appengine:v1beta",
-  "documentationLink": "https://cloud.google.com/appengine/docs/admin-api/",
-  "title": "Google App Engine Admin API",
-  "discoveryVersion": "v1",
-  "ownerName": "Google",
-  "resources": {
-    "apps": {
-      "methods": {
-        "repair": {
-          "request": {
-            "$ref": "RepairApplicationRequest"
+ "kind": "discovery#restDescription",
+ "etag": "\"tbys6C40o18GZwyMen5GMkdK-3s/0wieiWOLZ-Vm6vgB6dsBIuzASBg\"",
+ "discoveryVersion": "v1",
+ "id": "appengine:v1beta",
+ "name": "appengine",
+ "version": "v1beta",
+ "revision": "20170324",
+ "title": "Google App Engine Admin API",
+ "description": "Provisions and manages App Engine applications.",
+ "ownerDomain": "google.com",
+ "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"
+ },
+ "documentationLink": "https://cloud.google.com/appengine/docs/admin-api/",
+ "protocol": "rest",
+ "baseUrl": "https://appengine.googleapis.com/",
+ "basePath": "",
+ "rootUrl": "https://appengine.googleapis.com/",
+ "servicePath": "",
+ "batchPath": "batch",
+ "parameters": {
+  "access_token": {
+   "type": "string",
+   "description": "OAuth access token.",
+   "location": "query"
+  },
+  "alt": {
+   "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"
+   ],
+   "location": "query"
+  },
+  "bearer_token": {
+   "type": "string",
+   "description": "OAuth bearer token.",
+   "location": "query"
+  },
+  "callback": {
+   "type": "string",
+   "description": "JSONP",
+   "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"
+  },
+  "pp": {
+   "type": "boolean",
+   "description": "Pretty-print response.",
+   "default": "true",
+   "location": "query"
+  },
+  "prettyPrint": {
+   "type": "boolean",
+   "description": "Returns response with indentations and line breaks.",
+   "default": "true",
+   "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"
+  },
+  "upload_protocol": {
+   "type": "string",
+   "description": "Upload protocol for media (e.g. \"raw\", \"multipart\").",
+   "location": "query"
+  },
+  "uploadType": {
+   "type": "string",
+   "description": "Legacy upload protocol for media (e.g. \"media\", \"multipart\").",
+   "location": "query"
+  },
+  "$.xgafv": {
+   "type": "string",
+   "description": "V1 error format.",
+   "enumDescriptions": [
+    "v1 error format",
+    "v2 error format"
+   ],
+   "location": "query"
+  }
+ },
+ "auth": {
+  "oauth2": {
+   "scopes": {
+    "https://www.googleapis.com/auth/appengine.admin": {
+     "description": "View and manage your applications deployed on Google App Engine"
+    },
+    "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"
+    }
+   }
+  }
+ },
+ "schemas": {
+  "ListOperationsResponse": {
+   "id": "ListOperationsResponse",
+   "type": "object",
+   "description": "The response message for Operations.ListOperations.",
+   "properties": {
+    "operations": {
+     "type": "array",
+     "description": "A list of operations that matches the specified filter in the request.",
+     "items": {
+      "$ref": "Operation"
+     }
+    },
+    "nextPageToken": {
+     "type": "string",
+     "description": "The standard List next-page token."
+    }
+   }
+  },
+  "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 have the format of operations/some/unique/name."
+    },
+    "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."
+     }
+    },
+    "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."
+    },
+    "error": {
+     "$ref": "Status",
+     "description": "The error result of the operation in case of failure or cancellation."
+    },
+    "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": {
+      "type": "any",
+      "description": "Properties of the object. Contains field @type with type URL."
+     }
+    }
+   }
+  },
+  "Status": {
+   "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). The error model is designed to be: Simple to use and understand for most users Flexible enough to meet unexpected needsOverviewThe Status message contains three pieces of data: error code, error message, and error details. The error code should be an enum value of google.rpc.Code, but it may accept additional error codes if needed. The error message should be a developer-facing English message that helps developers understand and resolve the error. If a localized user-facing error message is needed, put the localized message in the error details or localize it in the client. The optional error details may contain arbitrary information about the error. There is a predefined set of error detail types in the package google.rpc which can be used for common error conditions.Language mappingThe Status message is the logical representation of the error model, but it is not necessarily the actual wire format. When the Status message is exposed in different client libraries and different wire protocols, it can be mapped differently. For example, it will likely be mapped to some exceptions in Java, but more likely mapped to some error codes in C.Other usesThe error model and the Status message can be used in a variety of environments, either with or without APIs, to provide a consistent developer experience across different environments.Example uses of this error model include: Partial errors. If a service needs to return partial errors to the client, it may embed the Status in the normal response to indicate the partial errors. Workflow errors. A typical workflow has multiple steps. Each step may have a Status message for error reporting purpose. Batch operations. If a client uses batch request and batch response, the Status message should be used directly inside batch response, one for each error sub-response. Asynchronous operations. If an API call embeds asynchronous operation results in its response, the status of those operations should be represented directly using the Status message. Logging. If some API errors are stored in logs, the message Status could be used directly after any stripping needed for security/privacy reasons.",
+   "properties": {
+    "code": {
+     "type": "integer",
+     "description": "The status code, which should be an enum value of google.rpc.Code.",
+     "format": "int32"
+    },
+    "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": {
+     "type": "array",
+     "description": "A list of messages that carry the error details. There will be 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."
+      }
+     }
+    }
+   }
+  },
+  "Application": {
+   "id": "Application",
+   "type": "object",
+   "description": "An Application resource contains the top-level configuration of an App Engine application.",
+   "properties": {
+    "name": {
+     "type": "string",
+     "description": "Full path to the Application resource in the API. Example: apps/myapp.@OutputOnly"
+    },
+    "id": {
+     "type": "string",
+     "description": "Identifier of the Application resource. This identifier is equivalent to the project ID of the Google Cloud Platform project where you want to deploy your application. Example: myapp."
+    },
+    "dispatchRules": {
+     "type": "array",
+     "description": "HTTP path dispatch rules for requests to the application that do not explicitly target a service or version. Rules are order-dependent. Up to 20 dispatch rules can be supported.@OutputOnly",
+     "items": {
+      "$ref": "UrlDispatchRule"
+     }
+    },
+    "authDomain": {
+     "type": "string",
+     "description": "Google Apps authentication domain that controls which users can access this application.Defaults to open access for any Google Account."
+    },
+    "locationId": {
+     "type": "string",
+     "description": "Location from which this application will be run. Application instances will run out of data centers in the chosen location, which is also where all of the application's end user content is stored.Defaults to us-central.Options are:us-central - Central USeurope-west - Western Europeus-east1 - Eastern US"
+    },
+    "codeBucket": {
+     "type": "string",
+     "description": "Google Cloud Storage bucket that can be used for storing files associated with this application. This bucket is associated with the application and can be used by the gcloud deployment commands.@OutputOnly"
+    },
+    "defaultCookieExpiration": {
+     "type": "string",
+     "description": "Cookie expiration policy for this application."
+    },
+    "servingStatus": {
+     "type": "string",
+     "description": "Serving status of this application.",
+     "enum": [
+      "UNSPECIFIED",
+      "SERVING",
+      "USER_DISABLED",
+      "SYSTEM_DISABLED"
+     ]
+    },
+    "defaultHostname": {
+     "type": "string",
+     "description": "Hostname used to reach this application, as resolved by App Engine.@OutputOnly"
+    },
+    "defaultBucket": {
+     "type": "string",
+     "description": "Google Cloud Storage bucket that can be used by this application to store content.@OutputOnly"
+    },
+    "iap": {
+     "$ref": "IdentityAwareProxy"
+    },
+    "gcrDomain": {
+     "type": "string",
+     "description": "The Google Container Registry domain used for storing managed build docker images for this application."
+    }
+   }
+  },
+  "UrlDispatchRule": {
+   "id": "UrlDispatchRule",
+   "type": "object",
+   "description": "Rules to match an HTTP request and dispatch that request to a service.",
+   "properties": {
+    "domain": {
+     "type": "string",
+     "description": "Domain name to match against. The wildcard \"*\" is supported if specified before a period: \"*.\".Defaults to matching all domains: \"*\"."
+    },
+    "path": {
+     "type": "string",
+     "description": "Pathname within the host. Must start with a \"/\". A single \"*\" can be included at the end of the path.The sum of the lengths of the domain and path may not exceed 100 characters."
+    },
+    "service": {
+     "type": "string",
+     "description": "Resource ID of a service in this application that should serve the matched request. The service must already exist. Example: default."
+    }
+   }
+  },
+  "IdentityAwareProxy": {
+   "id": "IdentityAwareProxy",
+   "type": "object",
+   "description": "Identity-Aware Proxy",
+   "properties": {
+    "enabled": {
+     "type": "boolean",
+     "description": "Whether the serving infrastructure will authenticate and authorize all incoming requests.If true, the oauth2_client_id and oauth2_client_secret fields must be non-empty."
+    },
+    "oauth2ClientId": {
+     "type": "string",
+     "description": "OAuth2 client ID to use for the authentication flow."
+    },
+    "oauth2ClientSecret": {
+     "type": "string",
+     "description": "OAuth2 client secret to use for the authentication flow.For security reasons, this value cannot be retrieved via the API. Instead, the SHA-256 hash of the value is returned in the oauth2_client_secret_sha256 field.@InputOnly"
+    },
+    "oauth2ClientSecretSha256": {
+     "type": "string",
+     "description": "Hex-encoded SHA-256 hash of the client secret.@OutputOnly"
+    }
+   }
+  },
+  "RepairApplicationRequest": {
+   "id": "RepairApplicationRequest",
+   "type": "object",
+   "description": "Request message for 'Applications.RepairApplication'."
+  },
+  "ListServicesResponse": {
+   "id": "ListServicesResponse",
+   "type": "object",
+   "description": "Response message for Services.ListServices.",
+   "properties": {
+    "services": {
+     "type": "array",
+     "description": "The services belonging to the requested application.",
+     "items": {
+      "$ref": "Service"
+     }
+    },
+    "nextPageToken": {
+     "type": "string",
+     "description": "Continuation token for fetching the next page of results."
+    }
+   }
+  },
+  "Service": {
+   "id": "Service",
+   "type": "object",
+   "description": "A Service resource is a logical component of an application that can share state and communicate in a secure fashion with other services. For example, an application that handles customer requests might include separate services to handle tasks such as backend data analysis or API requests from mobile devices. Each service has a collection of versions that define a specific set of code used to implement the functionality of that service.",
+   "properties": {
+    "name": {
+     "type": "string",
+     "description": "Full path to the Service resource in the API. Example: apps/myapp/services/default.@OutputOnly"
+    },
+    "id": {
+     "type": "string",
+     "description": "Relative name of the service within the application. Example: default.@OutputOnly"
+    },
+    "split": {
+     "$ref": "TrafficSplit",
+     "description": "Mapping that defines fractional HTTP traffic diversion to different versions within the service."
+    }
+   }
+  },
+  "TrafficSplit": {
+   "id": "TrafficSplit",
+   "type": "object",
+   "description": "Traffic routing configuration for versions within a single service. Traffic splits define how traffic directed to the service is assigned to versions.",
+   "properties": {
+    "shardBy": {
+     "type": "string",
+     "description": "Mechanism used to determine which version a request is sent to. The traffic selection algorithm will be stable for either type until allocations are changed.",
+     "enum": [
+      "UNSPECIFIED",
+      "COOKIE",
+      "IP",
+      "RANDOM"
+     ]
+    },
+    "allocations": {
+     "type": "object",
+     "description": "Mapping from version IDs within the service to fractional (0.000, 1] allocations of traffic for that version. Each version can be specified only once, but some versions in the service may not have any traffic allocation. Services that have traffic allocated cannot be deleted until either the service is deleted or their traffic allocation is removed. Allocations must sum to 1. Up to two decimal place precision is supported for IP-based splits and up to three decimal places is supported for cookie-based splits.",
+     "additionalProperties": {
+      "type": "number",
+      "format": "double"
+     }
+    }
+   }
+  },
+  "ListVersionsResponse": {
+   "id": "ListVersionsResponse",
+   "type": "object",
+   "description": "Response message for Versions.ListVersions.",
+   "properties": {
+    "versions": {
+     "type": "array",
+     "description": "The versions belonging to the requested service.",
+     "items": {
+      "$ref": "Version"
+     }
+    },
+    "nextPageToken": {
+     "type": "string",
+     "description": "Continuation token for fetching the next page of results."
+    }
+   }
+  },
+  "Version": {
+   "id": "Version",
+   "type": "object",
+   "description": "A Version resource is a specific set of source code and configuration files that are deployed into a service.",
+   "properties": {
+    "name": {
+     "type": "string",
+     "description": "Full path to the Version resource in the API. Example: apps/myapp/services/default/versions/v1.@OutputOnly"
+    },
+    "id": {
+     "type": "string",
+     "description": "Relative name of the version within the service. Example: v1. Version names can contain only lowercase letters, numbers, or hyphens. Reserved names: \"default\", \"latest\", and any name with the prefix \"ah-\"."
+    },
+    "automaticScaling": {
+     "$ref": "AutomaticScaling",
+     "description": "Automatic scaling is based on request rate, response latencies, and other application metrics."
+    },
+    "basicScaling": {
+     "$ref": "BasicScaling",
+     "description": "A service with basic scaling will create an instance when the application receives a request. The instance will be turned down when the app becomes idle. Basic scaling is ideal for work that is intermittent or driven by user activity."
+    },
+    "manualScaling": {
+     "$ref": "ManualScaling",
+     "description": "A service with manual scaling runs continuously, allowing you to perform complex initialization and rely on the state of its memory over time."
+    },
+    "inboundServices": {
+     "type": "array",
+     "description": "Before an application can receive email or XMPP messages, the application must be configured to enable the service.",
+     "enumDescriptions": [
+      "Not specified.",
+      "Allows an application to receive mail.",
+      "Allows an application to receive email-bound notifications.",
+      "Allows an application to receive error stanzas.",
+      "Allows an application to receive instant messages.",
+      "Allows an application to receive user subscription POSTs.",
+      "Allows an application to receive a user's chat presence.",
+      "Registers an application for notifications when a client connects or disconnects from a channel.",
+      "Enables warmup requests."
+     ],
+     "items": {
+      "type": "string",
+      "enum": [
+       "INBOUND_SERVICE_UNSPECIFIED",
+       "INBOUND_SERVICE_MAIL",
+       "INBOUND_SERVICE_MAIL_BOUNCE",
+       "INBOUND_SERVICE_XMPP_ERROR",
+       "INBOUND_SERVICE_XMPP_MESSAGE",
+       "INBOUND_SERVICE_XMPP_SUBSCRIBE",
+       "INBOUND_SERVICE_XMPP_PRESENCE",
+       "INBOUND_SERVICE_CHANNEL_PRESENCE",
+       "INBOUND_SERVICE_WARMUP"
+      ]
+     }
+    },
+    "instanceClass": {
+     "type": "string",
+     "description": "Instance class that is used to run this version. Valid values are: AutomaticScaling: F1, F2, F4, F4_1G ManualScaling or BasicScaling: B1, B2, B4, B8, B4_1GDefaults to F1 for AutomaticScaling and B1 for ManualScaling or BasicScaling."
+    },
+    "network": {
+     "$ref": "Network",
+     "description": "Extra network settings. Only applicable for VM runtimes."
+    },
+    "resources": {
+     "$ref": "Resources",
+     "description": "Machine resources for this version. Only applicable for VM runtimes."
+    },
+    "runtime": {
+     "type": "string",
+     "description": "Desired runtime. Example: python27."
+    },
+    "threadsafe": {
+     "type": "boolean",
+     "description": "Whether multiple requests can be dispatched to this version at once."
+    },
+    "vm": {
+     "type": "boolean",
+     "description": "Whether to deploy this version in a container on a virtual machine."
+    },
+    "betaSettings": {
+     "type": "object",
+     "description": "Metadata settings that are supplied to this version to enable beta runtime features.",
+     "additionalProperties": {
+      "type": "string"
+     }
+    },
+    "env": {
+     "type": "string",
+     "description": "App Engine execution environment for this version.Defaults to standard."
+    },
+    "servingStatus": {
+     "type": "string",
+     "description": "Current serving status of this version. Only the versions with a SERVING status create instances and can be billed.SERVING_STATUS_UNSPECIFIED is an invalid value. Defaults to SERVING.",
+     "enum": [
+      "SERVING_STATUS_UNSPECIFIED",
+      "SERVING",
+      "STOPPED"
+     ]
+    },
+    "createdBy": {
+     "type": "string",
+     "description": "Email address of the user who created this version.@OutputOnly"
+    },
+    "createTime": {
+     "type": "string",
+     "description": "Time that this version was created.@OutputOnly"
+    },
+    "diskUsageBytes": {
+     "type": "string",
+     "description": "Total size in bytes of all the files that are included in this version and curerntly hosted on the App Engine disk.@OutputOnly",
+     "format": "int64"
+    },
+    "handlers": {
+     "type": "array",
+     "description": "An ordered list of URL-matching patterns that should be applied to incoming requests. The first matching URL handles the request and other request handlers are not attempted.Only returned in GET requests if view=FULL is set.",
+     "items": {
+      "$ref": "UrlMap"
+     }
+    },
+    "errorHandlers": {
+     "type": "array",
+     "description": "Custom static error pages. Limited to 10KB per page.Only returned in GET requests if view=FULL is set.",
+     "items": {
+      "$ref": "ErrorHandler"
+     }
+    },
+    "libraries": {
+     "type": "array",
+     "description": "Configuration for third-party Python runtime libraries that are required by the application.Only returned in GET requests if view=FULL is set.",
+     "items": {
+      "$ref": "Library"
+     }
+    },
+    "apiConfig": {
+     "$ref": "ApiConfigHandler",
+     "description": "Serving configuration for Google Cloud Endpoints (https://cloud.google.com/appengine/docs/python/endpoints/).Only returned in GET requests if view=FULL is set."
+    },
+    "envVariables": {
+     "type": "object",
+     "description": "Environment variables available to the application.Only returned in GET requests if view=FULL is set.",
+     "additionalProperties": {
+      "type": "string"
+     }
+    },
+    "defaultExpiration": {
+     "type": "string",
+     "description": "Duration that static files should be cached by web proxies and browsers. Only applicable if the corresponding StaticFilesHandler (https://cloud.google.com/appengine/docs/admin-api/reference/rest/v1beta/apps.services.versions#staticfileshandler) does not specify its own expiration time.Only returned in GET requests if view=FULL is set."
+    },
+    "healthCheck": {
+     "$ref": "HealthCheck",
+     "description": "Configures health checking for VM instances. Unhealthy instances are stopped and replaced with new instances. Only applicable for VM runtimes.Only returned in GET requests if view=FULL is set."
+    },
+    "readinessCheck": {
+     "$ref": "ReadinessCheck",
+     "description": "Configures readiness health checking for VM instances. Unhealthy instances are not put into the backend traffic rotation.Only returned in GET requests if view=FULL is set."
+    },
+    "livenessCheck": {
+     "$ref": "LivenessCheck",
+     "description": "Configures liveness health checking for VM instances. Unhealthy instances are stopped and replaced with new instancesOnly returned in GET requests if view=FULL is set."
+    },
+    "nobuildFilesRegex": {
+     "type": "string",
+     "description": "Files that match this pattern will not be built into this version. Only applicable for Go runtimes.Only returned in GET requests if view=FULL is set."
+    },
+    "deployment": {
+     "$ref": "Deployment",
+     "description": "Code and application artifacts that make up this version.Only returned in GET requests if view=FULL is set."
+    },
+    "versionUrl": {
+     "type": "string",
+     "description": "Serving URL for this version. Example: \"https://myversion-dot-myservice-dot-myapp.appspot.com\"@OutputOnly"
+    },
+    "endpointsApiService": {
+     "$ref": "EndpointsApiService",
+     "description": "Cloud Endpoints configuration.If endpoints_api_service is set, the Cloud Endpoints Extensible Service Proxy will be provided to serve the API implemented by the app."
+    }
+   }
+  },
+  "AutomaticScaling": {
+   "id": "AutomaticScaling",
+   "type": "object",
+   "description": "Automatic scaling is based on request rate, response latencies, and other application metrics.",
+   "properties": {
+    "coolDownPeriod": {
+     "type": "string",
+     "description": "Amount of time that the Autoscaler (https://cloud.google.com/compute/docs/autoscaler/) should wait between changes to the number of virtual machines. Only applicable for VM runtimes."
+    },
+    "cpuUtilization": {
+     "$ref": "CpuUtilization",
+     "description": "Target scaling by CPU usage."
+    },
+    "maxConcurrentRequests": {
+     "type": "integer",
+     "description": "Number of concurrent requests an automatic scaling instance can accept before the scheduler spawns a new instance.Defaults to a runtime-specific value.",
+     "format": "int32"
+    },
+    "maxIdleInstances": {
+     "type": "integer",
+     "description": "Maximum number of idle instances that should be maintained for this version.",
+     "format": "int32"
+    },
+    "maxTotalInstances": {
+     "type": "integer",
+     "description": "Maximum number of instances that should be started to handle requests.",
+     "format": "int32"
+    },
+    "maxPendingLatency": {
+     "type": "string",
+     "description": "Maximum amount of time that a request should wait in the pending queue before starting a new instance to handle it."
+    },
+    "minIdleInstances": {
+     "type": "integer",
+     "description": "Minimum number of idle instances that should be maintained for this version. Only applicable for the default version of a service.",
+     "format": "int32"
+    },
+    "minTotalInstances": {
+     "type": "integer",
+     "description": "Minimum number of instances that should be maintained for this version.",
+     "format": "int32"
+    },
+    "minPendingLatency": {
+     "type": "string",
+     "description": "Minimum amount of time a request should wait in the pending queue before starting a new instance to handle it."
+    },
+    "requestUtilization": {
+     "$ref": "RequestUtilization",
+     "description": "Target scaling by request utilization."
+    },
+    "diskUtilization": {
+     "$ref": "DiskUtilization",
+     "description": "Target scaling by disk usage."
+    },
+    "networkUtilization": {
+     "$ref": "NetworkUtilization",
+     "description": "Target scaling by network usage."
+    }
+   }
+  },
+  "CpuUtilization": {
+   "id": "CpuUtilization",
+   "type": "object",
+   "description": "Target scaling by CPU usage.",
+   "properties": {
+    "aggregationWindowLength": {
+     "type": "string",
+     "description": "Period of time over which CPU utilization is calculated."
+    },
+    "targetUtilization": {
+     "type": "number",
+     "description": "Target CPU utilization ratio to maintain when scaling. Must be between 0 and 1.",
+     "format": "double"
+    }
+   }
+  },
+  "RequestUtilization": {
+   "id": "RequestUtilization",
+   "type": "object",
+   "description": "Target scaling by request utilization. Only applicable for VM runtimes.",
+   "properties": {
+    "targetRequestCountPerSecond": {
+     "type": "integer",
+     "description": "Target requests per second.",
+     "format": "int32"
+    },
+    "targetConcurrentRequests": {
+     "type": "integer",
+     "description": "Target number of concurrent requests.",
+     "format": "int32"
+    }
+   }
+  },
+  "DiskUtilization": {
+   "id": "DiskUtilization",
+   "type": "object",
+   "description": "Target scaling by disk usage. Only applicable for VM runtimes.",
+   "properties": {
+    "targetWriteBytesPerSecond": {
+     "type": "integer",
+     "description": "Target bytes written per second.",
+     "format": "int32"
+    },
+    "targetWriteOpsPerSecond": {
+     "type": "integer",
+     "description": "Target ops written per second.",
+     "format": "int32"
+    },
+    "targetReadBytesPerSecond": {
+     "type": "integer",
+     "description": "Target bytes read per second.",
+     "format": "int32"
+    },
+    "targetReadOpsPerSecond": {
+     "type": "integer",
+     "description": "Target ops read per seconds.",
+     "format": "int32"
+    }
+   }
+  },
+  "NetworkUtilization": {
+   "id": "NetworkUtilization",
+   "type": "object",
+   "description": "Target scaling by network usage. Only applicable for VM runtimes.",
+   "properties": {
+    "targetSentBytesPerSecond": {
+     "type": "integer",
+     "description": "Target bytes sent per second.",
+     "format": "int32"
+    },
+    "targetSentPacketsPerSecond": {
+     "type": "integer",
+     "description": "Target packets sent per second.",
+     "format": "int32"
+    },
+    "targetReceivedBytesPerSecond": {
+     "type": "integer",
+     "description": "Target bytes received per second.",
+     "format": "int32"
+    },
+    "targetReceivedPacketsPerSecond": {
+     "type": "integer",
+     "description": "Target packets received per second.",
+     "format": "int32"
+    }
+   }
+  },
+  "BasicScaling": {
+   "id": "BasicScaling",
+   "type": "object",
+   "description": "A service with basic scaling will create an instance when the application receives a request. The instance will be turned down when the app becomes idle. Basic scaling is ideal for work that is intermittent or driven by user activity.",
+   "properties": {
+    "idleTimeout": {
+     "type": "string",
+     "description": "Duration of time after the last request that an instance must wait before the instance is shut down."
+    },
+    "maxInstances": {
+     "type": "integer",
+     "description": "Maximum number of instances to create for this version.",
+     "format": "int32"
+    }
+   }
+  },
+  "ManualScaling": {
+   "id": "ManualScaling",
+   "type": "object",
+   "description": "A service with manual scaling runs continuously, allowing you to perform complex initialization and rely on the state of its memory over time.",
+   "properties": {
+    "instances": {
+     "type": "integer",
+     "description": "Number of instances to assign to the service at the start. This number can later be altered by using the Modules API (https://cloud.google.com/appengine/docs/python/modules/functions) set_num_instances() function.",
+     "format": "int32"
+    }
+   }
+  },
+  "Network": {
+   "id": "Network",
+   "type": "object",
+   "description": "Extra network settings. Only applicable for VM runtimes.",
+   "properties": {
+    "forwardedPorts": {
+     "type": "array",
+     "description": "List of ports, or port pairs, to forward from the virtual machine to the application container.",
+     "items": {
+      "type": "string"
+     }
+    },
+    "instanceTag": {
+     "type": "string",
+     "description": "Tag to apply to the VM instance during creation."
+    },
+    "name": {
+     "type": "string",
+     "description": "Google Cloud Platform network where the virtual machines are created. Specify the short name, not the resource path.Defaults to default."
+    },
+    "subnetworkName": {
+     "type": "string",
+     "description": "Google Cloud Platform sub-network where the virtual machines are created. Specify the short name, not the resource path.If a subnetwork name is specified, a network name will also be required unless it is for the default network. If the network the VM instance is being created in is a Legacy network, then the IP address is allocated from the IPv4Range. If the network the VM instance is being created in is an auto Subnet Mode Network, then only network name should be specified (not the subnetwork_name) and the IP address is created from the IPCidrRange of the subnetwork that exists in that zone for that network. If the network the VM instance is being created in is a custom Subnet Mode Network, then the subnetwork_name must be specified and the IP address is created from the IPCidrRange of the subnetwork.If specified, the subnetwork must exist in the same region as the Flex app."
+    }
+   }
+  },
+  "Resources": {
+   "id": "Resources",
+   "type": "object",
+   "description": "Machine resources for a version.",
+   "properties": {
+    "cpu": {
+     "type": "number",
+     "description": "Number of CPU cores needed.",
+     "format": "double"
+    },
+    "diskGb": {
+     "type": "number",
+     "description": "Disk size (GB) needed.",
+     "format": "double"
+    },
+    "memoryGb": {
+     "type": "number",
+     "description": "Memory (GB) needed.",
+     "format": "double"
+    },
+    "volumes": {
+     "type": "array",
+     "description": "User specified volumes.",
+     "items": {
+      "$ref": "Volume"
+     }
+    }
+   }
+  },
+  "Volume": {
+   "id": "Volume",
+   "type": "object",
+   "description": "Volumes mounted within the app container. Only applicable for VM runtimes.",
+   "properties": {
+    "name": {
+     "type": "string",
+     "description": "Unique name for the volume."
+    },
+    "volumeType": {
+     "type": "string",
+     "description": "Underlying volume type, e.g. 'tmpfs'."
+    },
+    "sizeGb": {
+     "type": "number",
+     "description": "Volume size in gigabytes.",
+     "format": "double"
+    }
+   }
+  },
+  "UrlMap": {
+   "id": "UrlMap",
+   "type": "object",
+   "description": "URL pattern and description of how the URL should be handled. App Engine can handle URLs by executing application code or by serving static files uploaded with the version, such as images, CSS, or JavaScript.",
+   "properties": {
+    "urlRegex": {
+     "type": "string",
+     "description": "URL prefix. Uses regular expression syntax, which means regexp special characters must be escaped, but should not contain groupings. All URLs that begin with this prefix are handled by this handler, using the portion of the URL after the prefix as part of the file path."
+    },
+    "staticFiles": {
+     "$ref": "StaticFilesHandler",
+     "description": "Returns the contents of a file, such as an image, as the response."
+    },
+    "script": {
+     "$ref": "ScriptHandler",
+     "description": "Executes a script to handle the request that matches this URL pattern."
+    },
+    "apiEndpoint": {
+     "$ref": "ApiEndpointHandler",
+     "description": "Uses API Endpoints to handle requests."
+    },
+    "securityLevel": {
+     "type": "string",
+     "description": "Security (HTTPS) enforcement for this URL.",
+     "enum": [
+      "SECURE_UNSPECIFIED",
+      "SECURE_DEFAULT",
+      "SECURE_NEVER",
+      "SECURE_OPTIONAL",
+      "SECURE_ALWAYS"
+     ]
+    },
+    "login": {
+     "type": "string",
+     "description": "Level of login required to access this resource.",
+     "enum": [
+      "LOGIN_UNSPECIFIED",
+      "LOGIN_OPTIONAL",
+      "LOGIN_ADMIN",
+      "LOGIN_REQUIRED"
+     ]
+    },
+    "authFailAction": {
+     "type": "string",
+     "description": "Action to take when users access resources that require authentication. Defaults to redirect.",
+     "enum": [
+      "AUTH_FAIL_ACTION_UNSPECIFIED",
+      "AUTH_FAIL_ACTION_REDIRECT",
+      "AUTH_FAIL_ACTION_UNAUTHORIZED"
+     ]
+    },
+    "redirectHttpResponseCode": {
+     "type": "string",
+     "description": "30x code to use when performing redirects for the secure field. Defaults to 302.",
+     "enum": [
+      "REDIRECT_HTTP_RESPONSE_CODE_UNSPECIFIED",
+      "REDIRECT_HTTP_RESPONSE_CODE_301",
+      "REDIRECT_HTTP_RESPONSE_CODE_302",
+      "REDIRECT_HTTP_RESPONSE_CODE_303",
+      "REDIRECT_HTTP_RESPONSE_CODE_307"
+     ]
+    }
+   }
+  },
+  "StaticFilesHandler": {
+   "id": "StaticFilesHandler",
+   "type": "object",
+   "description": "Files served directly to the user for a given URL, such as images, CSS stylesheets, or JavaScript source files. Static file handlers describe which files in the application directory are static files, and which URLs serve them.",
+   "properties": {
+    "path": {
+     "type": "string",
+     "description": "Path to the static files matched by the URL pattern, from the application root directory. The path can refer to text matched in groupings in the URL pattern."
+    },
+    "uploadPathRegex": {
+     "type": "string",
+     "description": "Regular expression that matches the file paths for all files that should be referenced by this handler."
+    },
+    "httpHeaders": {
+     "type": "object",
+     "description": "HTTP headers to use for all responses from these URLs.",
+     "additionalProperties": {
+      "type": "string"
+     }
+    },
+    "mimeType": {
+     "type": "string",
+     "description": "MIME type used to serve all files served by this handler.Defaults to file-specific MIME types, which are derived from each file's filename extension."
+    },
+    "expiration": {
+     "type": "string",
+     "description": "Time a static file served by this handler should be cached by web proxies and browsers."
+    },
+    "requireMatchingFile": {
+     "type": "boolean",
+     "description": "Whether this handler should match the request if the file referenced by the handler does not exist."
+    },
+    "applicationReadable": {
+     "type": "boolean",
+     "description": "Whether files should also be uploaded as code data. By default, files declared in static file handlers are uploaded as static data and are only served to end users; they cannot be read by the application. If enabled, uploads are charged against both your code and static data storage resource quotas."
+    }
+   }
+  },
+  "ScriptHandler": {
+   "id": "ScriptHandler",
+   "type": "object",
+   "description": "Executes a script to handle the request that matches the URL pattern.",
+   "properties": {
+    "scriptPath": {
+     "type": "string",
+     "description": "Path to the script from the application root directory."
+    }
+   }
+  },
+  "ApiEndpointHandler": {
+   "id": "ApiEndpointHandler",
+   "type": "object",
+   "description": "Uses Google Cloud Endpoints to handle requests.",
+   "properties": {
+    "scriptPath": {
+     "type": "string",
+     "description": "Path to the script from the application root directory."
+    }
+   }
+  },
+  "ErrorHandler": {
+   "id": "ErrorHandler",
+   "type": "object",
+   "description": "Custom static error page to be served when an error occurs.",
+   "properties": {
+    "errorCode": {
+     "type": "string",
+     "description": "Error condition this handler applies to.",
+     "enum": [
+      "ERROR_CODE_UNSPECIFIED",
+      "ERROR_CODE_DEFAULT",
+      "ERROR_CODE_OVER_QUOTA",
+      "ERROR_CODE_DOS_API_DENIAL",
+      "ERROR_CODE_TIMEOUT"
+     ]
+    },
+    "staticFile": {
+     "type": "string",
+     "description": "Static file content to be served for this error."
+    },
+    "mimeType": {
+     "type": "string",
+     "description": "MIME type of file. Defaults to text/html."
+    }
+   }
+  },
+  "Library": {
+   "id": "Library",
+   "type": "object",
+   "description": "Third-party Python runtime library that is required by the application.",
+   "properties": {
+    "name": {
+     "type": "string",
+     "description": "Name of the library. Example: \"django\"."
+    },
+    "version": {
+     "type": "string",
+     "description": "Version of the library to select, or \"latest\"."
+    }
+   }
+  },
+  "ApiConfigHandler": {
+   "id": "ApiConfigHandler",
+   "type": "object",
+   "description": "Google Cloud Endpoints (https://cloud.google.com/appengine/docs/python/endpoints/) configuration for API handlers.",
+   "properties": {
+    "authFailAction": {
+     "type": "string",
+     "description": "Action to take when users access resources that require authentication. Defaults to redirect.",
+     "enum": [
+      "AUTH_FAIL_ACTION_UNSPECIFIED",
+      "AUTH_FAIL_ACTION_REDIRECT",
+      "AUTH_FAIL_ACTION_UNAUTHORIZED"
+     ]
+    },
+    "login": {
+     "type": "string",
+     "description": "Level of login required to access this resource. Defaults to optional.",
+     "enum": [
+      "LOGIN_UNSPECIFIED",
+      "LOGIN_OPTIONAL",
+      "LOGIN_ADMIN",
+      "LOGIN_REQUIRED"
+     ]
+    },
+    "script": {
+     "type": "string",
+     "description": "Path to the script from the application root directory."
+    },
+    "securityLevel": {
+     "type": "string",
+     "description": "Security (HTTPS) enforcement for this URL.",
+     "enum": [
+      "SECURE_UNSPECIFIED",
+      "SECURE_DEFAULT",
+      "SECURE_NEVER",
+      "SECURE_OPTIONAL",
+      "SECURE_ALWAYS"
+     ]
+    },
+    "url": {
+     "type": "string",
+     "description": "URL to serve the endpoint at."
+    }
+   }
+  },
+  "HealthCheck": {
+   "id": "HealthCheck",
+   "type": "object",
+   "description": "Health checking configuration for VM instances. Unhealthy instances are killed and replaced with new instances. Only applicable for instances in App Engine flexible environment.",
+   "properties": {
+    "disableHealthCheck": {
+     "type": "boolean",
+     "description": "Whether to explicitly disable health checks for this instance."
+    },
+    "host": {
+     "type": "string",
+     "description": "Host header to send when performing an HTTP health check. Example: \"myapp.appspot.com\""
+    },
+    "healthyThreshold": {
+     "type": "integer",
+     "description": "Number of consecutive successful health checks required before receiving traffic.",
+     "format": "uint32"
+    },
+    "unhealthyThreshold": {
+     "type": "integer",
+     "description": "Number of consecutive failed health checks required before removing traffic.",
+     "format": "uint32"
+    },
+    "restartThreshold": {
+     "type": "integer",
+     "description": "Number of consecutive failed health checks required before an instance is restarted.",
+     "format": "uint32"
+    },
+    "checkInterval": {
+     "type": "string",
+     "description": "Interval between health checks."
+    },
+    "timeout": {
+     "type": "string",
+     "description": "Time before the health check is considered failed."
+    }
+   }
+  },
+  "ReadinessCheck": {
+   "id": "ReadinessCheck",
+   "type": "object",
+   "description": "Readiness checking configuration for VM instances. Unhealthy instances are removed from traffic rotation.",
+   "properties": {
+    "path": {
+     "type": "string",
+     "description": "The request path."
+    },
+    "host": {
+     "type": "string",
+     "description": "Host header to send when performing a HTTP Readiness check. Example: \"myapp.appspot.com\""
+    },
+    "failureThreshold": {
+     "type": "integer",
+     "description": "Number of consecutive failed checks required before removing traffic.",
+     "format": "uint32"
+    },
+    "successThreshold": {
+     "type": "integer",
+     "description": "Number of consecutive successful checks required before receiving traffic.",
+     "format": "uint32"
+    },
+    "checkInterval": {
+     "type": "string",
+     "description": "Interval between health checks."
+    },
+    "timeout": {
+     "type": "string",
+     "description": "Time before the check is considered failed."
+    }
+   }
+  },
+  "LivenessCheck": {
+   "id": "LivenessCheck",
+   "type": "object",
+   "description": "Health checking configuration for VM instances. Unhealthy instances are killed and replaced with new instances.",
+   "properties": {
+    "path": {
+     "type": "string",
+     "description": "The request path."
+    },
+    "host": {
+     "type": "string",
+     "description": "Host header to send when performing a HTTP Liveness check. Example: \"myapp.appspot.com\""
+    },
+    "failureThreshold": {
+     "type": "integer",
+     "description": "Number of consecutive failed checks required before considering the VM unhealthy.",
+     "format": "uint32"
+    },
+    "successThreshold": {
+     "type": "integer",
+     "description": "Number of consecutive successful checks required before considering the VM healthy.",
+     "format": "uint32"
+    },
+    "checkInterval": {
+     "type": "string",
+     "description": "Interval between health checks."
+    },
+    "timeout": {
+     "type": "string",
+     "description": "Time before the check is considered failed."
+    },
+    "initialDelay": {
+     "type": "string",
+     "description": "The initial delay before starting to execute the checks."
+    }
+   }
+  },
+  "Deployment": {
+   "id": "Deployment",
+   "type": "object",
+   "description": "Code and application artifacts used to deploy a version to App Engine.",
+   "properties": {
+    "files": {
+     "type": "object",
+     "description": "Manifest of the files stored in Google Cloud Storage that are included as part of this version. All files must be readable using the credentials supplied with this call.",
+     "additionalProperties": {
+      "$ref": "FileInfo"
+     }
+    },
+    "container": {
+     "$ref": "ContainerInfo",
+     "description": "The Docker image for the container that runs the version. Only applicable for instances running in the App Engine flexible environment."
+    },
+    "zip": {
+     "$ref": "ZipInfo",
+     "description": "The zip file for this deployment, if this is a zip deployment."
+    }
+   }
+  },
+  "FileInfo": {
+   "id": "FileInfo",
+   "type": "object",
+   "description": "Single source file that is part of the version to be deployed. Each source file that is deployed must be specified separately.",
+   "properties": {
+    "sourceUrl": {
+     "type": "string",
+     "description": "URL source to use to fetch this file. Must be a URL to a resource in Google Cloud Storage in the form 'http(s)://storage.googleapis.com//'."
+    },
+    "sha1Sum": {
+     "type": "string",
+     "description": "The SHA1 hash of the file, in hex."
+    },
+    "mimeType": {
+     "type": "string",
+     "description": "The MIME type of the file.Defaults to the value from Google Cloud Storage."
+    }
+   }
+  },
+  "ContainerInfo": {
+   "id": "ContainerInfo",
+   "type": "object",
+   "description": "Docker image that is used to create a container and start a VM instance for the version that you deploy. Only applicable for instances running in the App Engine flexible environment.",
+   "properties": {
+    "image": {
+     "type": "string",
+     "description": "URI to the hosted container image in Google Container Registry. The URI must be fully qualified and include a tag or digest. Examples: \"gcr.io/my-project/image:tag\" or \"gcr.io/my-project/image@digest\""
+    }
+   }
+  },
+  "ZipInfo": {
+   "id": "ZipInfo",
+   "type": "object",
+   "description": "The zip file information for a zip deployment.",
+   "properties": {
+    "sourceUrl": {
+     "type": "string",
+     "description": "URL of the zip file to deploy from. Must be a URL to a resource in Google Cloud Storage in the form 'http(s)://storage.googleapis.com//'."
+    },
+    "filesCount": {
+     "type": "integer",
+     "description": "An estimate of the number of files in a zip for a zip deployment. If set, must be greater than or equal to the actual number of files. Used for optimizing performance; if not provided, deployment may be slow.",
+     "format": "int32"
+    }
+   }
+  },
+  "EndpointsApiService": {
+   "id": "EndpointsApiService",
+   "type": "object",
+   "description": "Cloud Endpoints (https://cloud.google.com/endpoints) configuration. The Endpoints API Service provides tooling for serving Open API and gRPC endpoints via an NGINX proxy.The fields here refer to the name and configuration id of a \"service\" resource in the Service Management API (https://cloud.google.com/service-management/overview).",
+   "properties": {
+    "name": {
+     "type": "string",
+     "description": "Endpoints service name which is the name of the \"service\" resource in the Service Management API. For example \"myapi.endpoints.myproject.cloud.goog\""
+    },
+    "configId": {
+     "type": "string",
+     "description": "Endpoints service configuration id as specified by the Service Management API. For example \"2016-09-19r1\""
+    }
+   }
+  },
+  "ListInstancesResponse": {
+   "id": "ListInstancesResponse",
+   "type": "object",
+   "description": "Response message for Instances.ListInstances.",
+   "properties": {
+    "instances": {
+     "type": "array",
+     "description": "The instances belonging to the requested version.",
+     "items": {
+      "$ref": "Instance"
+     }
+    },
+    "nextPageToken": {
+     "type": "string",
+     "description": "Continuation token for fetching the next page of results."
+    }
+   }
+  },
+  "Instance": {
+   "id": "Instance",
+   "type": "object",
+   "description": "An Instance resource is the computing unit that App Engine uses to automatically scale an application.",
+   "properties": {
+    "name": {
+     "type": "string",
+     "description": "Full path to the Instance resource in the API. Example: apps/myapp/services/default/versions/v1/instances/instance-1.@OutputOnly"
+    },
+    "id": {
+     "type": "string",
+     "description": "Relative name of the instance within the version. Example: instance-1.@OutputOnly"
+    },
+    "appEngineRelease": {
+     "type": "string",
+     "description": "App Engine release this instance is running on.@OutputOnly"
+    },
+    "availability": {
+     "type": "string",
+     "description": "Availability of the instance.@OutputOnly",
+     "enum": [
+      "UNSPECIFIED",
+      "RESIDENT",
+      "DYNAMIC"
+     ]
+    },
+    "vmName": {
+     "type": "string",
+     "description": "Name of the virtual machine where this instance lives. Only applicable for instances in App Engine flexible environment.@OutputOnly"
+    },
+    "vmZoneName": {
+     "type": "string",
+     "description": "Zone where the virtual machine is located. Only applicable for instances in App Engine flexible environment.@OutputOnly"
+    },
+    "vmId": {
+     "type": "string",
+     "description": "Virtual machine ID of this instance. Only applicable for instances in App Engine flexible environment.@OutputOnly"
+    },
+    "startTime": {
+     "type": "string",
+     "description": "Time that this instance was started.@OutputOnly"
+    },
+    "requests": {
+     "type": "integer",
+     "description": "Number of requests since this instance was started.@OutputOnly",
+     "format": "int32"
+    },
+    "errors": {
+     "type": "integer",
+     "description": "Number of errors since this instance was started.@OutputOnly",
+     "format": "int32"
+    },
+    "qps": {
+     "type": "number",
+     "description": "Average queries per second (QPS) over the last minute.@OutputOnly",
+     "format": "float"
+    },
+    "averageLatency": {
+     "type": "integer",
+     "description": "Average latency (ms) over the last minute.@OutputOnly",
+     "format": "int32"
+    },
+    "memoryUsage": {
+     "type": "string",
+     "description": "Total memory in use (bytes).@OutputOnly",
+     "format": "int64"
+    },
+    "vmStatus": {
+     "type": "string",
+     "description": "Status of the virtual machine where this instance lives. Only applicable for instances in App Engine flexible environment.@OutputOnly"
+    },
+    "vmDebugEnabled": {
+     "type": "boolean",
+     "description": "Whether this instance is in debug mode. Only applicable for instances in App Engine flexible environment.@OutputOnly"
+    },
+    "vmIp": {
+     "type": "string",
+     "description": "The IP address of this instance. Only applicable for instances in App Engine flexible environment.@OutputOnly"
+    }
+   }
+  },
+  "DebugInstanceRequest": {
+   "id": "DebugInstanceRequest",
+   "type": "object",
+   "description": "Request message for Instances.DebugInstance.",
+   "properties": {
+    "sshKey": {
+     "type": "string",
+     "description": "Public SSH key to add to the instance. Examples: [USERNAME]:ssh-rsa [KEY_VALUE] [USERNAME] [USERNAME]:ssh-rsa [KEY_VALUE] google-ssh {\"userName\":\"[USERNAME]\",\"expireOn\":\"[EXPIRE_TIME]\"}For more information, see Adding and Removing SSH Keys (https://cloud.google.com/compute/docs/instances/adding-removing-ssh-keys)."
+    }
+   }
+  },
+  "ListAuthorizedDomainsResponse": {
+   "id": "ListAuthorizedDomainsResponse",
+   "type": "object",
+   "description": "Response message for AuthorizedDomains.ListAuthorizedDomains.",
+   "properties": {
+    "domains": {
+     "type": "array",
+     "description": "The authorized domains belonging to the user.",
+     "items": {
+      "$ref": "AuthorizedDomain"
+     }
+    },
+    "nextPageToken": {
+     "type": "string",
+     "description": "Continuation token for fetching the next page of results."
+    }
+   }
+  },
+  "AuthorizedDomain": {
+   "id": "AuthorizedDomain",
+   "type": "object",
+   "description": "A domain that a user has been authorized to administer. To authorize use of a domain, verify ownership via Webmaster Central (https://www.google.com/webmasters/verification/home).",
+   "properties": {
+    "name": {
+     "type": "string",
+     "description": "Full path to the AuthorizedDomain resource in the API. Example: apps/myapp/authorizedDomains/example.com.@OutputOnly"
+    },
+    "id": {
+     "type": "string",
+     "description": "Fully qualified domain name of the domain authorized for use. Example: example.com."
+    }
+   }
+  },
+  "ListAuthorizedCertificatesResponse": {
+   "id": "ListAuthorizedCertificatesResponse",
+   "type": "object",
+   "description": "Response message for AuthorizedCertificates.ListAuthorizedCertificates.",
+   "properties": {
+    "certificates": {
+     "type": "array",
+     "description": "The SSL certificates the user is authorized to administer.",
+     "items": {
+      "$ref": "AuthorizedCertificate"
+     }
+    },
+    "nextPageToken": {
+     "type": "string",
+     "description": "Continuation token for fetching the next page of results."
+    }
+   }
+  },
+  "AuthorizedCertificate": {
+   "id": "AuthorizedCertificate",
+   "type": "object",
+   "description": "An SSL certificate that a user has been authorized to administer. A user is authorized to administer any certificate that applies to one of their authorized domains.",
+   "properties": {
+    "name": {
+     "type": "string",
+     "description": "Full path to the AuthorizedCertificate resource in the API. Example: apps/myapp/authorizedCertificates/12345.@OutputOnly"
+    },
+    "id": {
+     "type": "string",
+     "description": "Relative name of the certificate. This is a unique value autogenerated on AuthorizedCertificate resource creation. Example: 12345.@OutputOnly"
+    },
+    "displayName": {
+     "type": "string",
+     "description": "The user-specified display name of the certificate. This is not guaranteed to be unique. Example: My Certificate."
+    },
+    "domainNames": {
+     "type": "array",
+     "description": "Topmost applicable domains of this certificate. This certificate applies to these domains and their subdomains. Example: example.com.@OutputOnly",
+     "items": {
+      "type": "string"
+     }
+    },
+    "expireTime": {
+     "type": "string",
+     "description": "The time when this certificate expires. To update the renewal time on this certificate, upload an SSL certificate with a different expiration time using AuthorizedCertificates.UpdateAuthorizedCertificate.@OutputOnly"
+    },
+    "certificateRawData": {
+     "$ref": "CertificateRawData",
+     "description": "The SSL certificate serving the AuthorizedCertificate resource. This must be obtained independently from a certificate authority."
+    },
+    "visibleDomainMappings": {
+     "type": "array",
+     "description": "The full paths to user visible Domain Mapping resources that have this certificate mapped. Example: apps/myapp/domainMappings/example.com.This may not represent the full list of mapped domain mappings if the user does not have VIEWER permissions on all of the applications that have this certificate mapped. See domain_mappings_count for a complete count.Only returned by GET requests when specifically requested by the view=FULL option.@OutputOnly",
+     "items": {
+      "type": "string"
+     }
+    },
+    "domainMappingsCount": {
+     "type": "integer",
+     "description": "Aggregate count of the domain mappings with this certificate mapped. This count includes domain mappings on applications for which the user does not have VIEWER permissions.Only returned by GET requests when specifically requested by the view=FULL option.@OutputOnly",
+     "format": "int32"
+    }
+   }
+  },
+  "CertificateRawData": {
+   "id": "CertificateRawData",
+   "type": "object",
+   "description": "An SSL certificate obtained from a certificate authority.",
+   "properties": {
+    "publicCertificate": {
+     "type": "string",
+     "description": "PEM encoded x.509 public key certificate. This field is set once on certificate creation. Must include the header and footer. Example:\n-----BEGIN CERTIFICATE-----  -----END CERTIFICATE-----"
+    },
+    "privateKey": {
+     "type": "string",
+     "description": "Unencrypted PEM encoded RSA private key. This field is set once on certificate creation and then encrypted. The key size must be 2048 bits or fewer. Must include the header and footer. Example:\n-----BEGIN RSA PRIVATE KEY-----  -----END RSA PRIVATE KEY-----\n@InputOnly"
+    }
+   }
+  },
+  "Empty": {
+   "id": "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 {}."
+  },
+  "ListDomainMappingsResponse": {
+   "id": "ListDomainMappingsResponse",
+   "type": "object",
+   "description": "Response message for DomainMappings.ListDomainMappings.",
+   "properties": {
+    "domainMappings": {
+     "type": "array",
+     "description": "The domain mappings for the application.",
+     "items": {
+      "$ref": "DomainMapping"
+     }
+    },
+    "nextPageToken": {
+     "type": "string",
+     "description": "Continuation token for fetching the next page of results."
+    }
+   }
+  },
+  "DomainMapping": {
+   "id": "DomainMapping",
+   "type": "object",
+   "description": "A domain serving an App Engine application.",
+   "properties": {
+    "name": {
+     "type": "string",
+     "description": "Full path to the DomainMapping resource in the API. Example: apps/myapp/domainMapping/example.com.@OutputOnly"
+    },
+    "id": {
+     "type": "string",
+     "description": "Relative name of the domain serving the application. Example: example.com."
+    },
+    "sslSettings": {
+     "$ref": "SslSettings",
+     "description": "SSL configuration for this domain. If unconfigured, this domain will not serve with SSL."
+    },
+    "resourceRecords": {
+     "type": "array",
+     "description": "The resource records required to configure this domain mapping. These records must be added to the domain's DNS configuration in order to serve the application via this domain mapping.@OutputOnly",
+     "items": {
+      "$ref": "ResourceRecord"
+     }
+    }
+   }
+  },
+  "SslSettings": {
+   "id": "SslSettings",
+   "type": "object",
+   "description": "SSL configuration for a DomainMapping resource.",
+   "properties": {
+    "certificateId": {
+     "type": "string",
+     "description": "ID of the AuthorizedCertificate resource configuring SSL for the application. Clearing this field will remove SSL support. Example: 12345."
+    }
+   }
+  },
+  "ResourceRecord": {
+   "id": "ResourceRecord",
+   "type": "object",
+   "description": "A DNS resource record.",
+   "properties": {
+    "name": {
+     "type": "string",
+     "description": "Relative name of the object affected by this record. Only applicable for CNAME records. Example: 'www'."
+    },
+    "rrdata": {
+     "type": "string",
+     "description": "Data for this record. Values vary by record type, as defined in RFC 1035 (section 5) and RFC 1034 (section 3.6.1)."
+    },
+    "type": {
+     "type": "string",
+     "description": "Resource record type. Example: AAAA.",
+     "enum": [
+      "A",
+      "AAAA",
+      "CNAME"
+     ]
+    }
+   }
+  },
+  "ListLocationsResponse": {
+   "id": "ListLocationsResponse",
+   "type": "object",
+   "description": "The response message for Locations.ListLocations.",
+   "properties": {
+    "locations": {
+     "type": "array",
+     "description": "A list of locations that matches the specified filter in the request.",
+     "items": {
+      "$ref": "Location"
+     }
+    },
+    "nextPageToken": {
+     "type": "string",
+     "description": "The standard List next-page token."
+    }
+   }
+  },
+  "Location": {
+   "id": "Location",
+   "type": "object",
+   "description": "A resource that represents Google Cloud Platform location.",
+   "properties": {
+    "name": {
+     "type": "string",
+     "description": "Resource name for the location, which may vary between implementations. For example: \"projects/example-project/locations/us-east1\""
+    },
+    "locationId": {
+     "type": "string",
+     "description": "The canonical id for this location. For example: \"us-east1\"."
+    },
+    "labels": {
+     "type": "object",
+     "description": "Cross-service attributes for the location. For example {\"cloud.googleapis.com/region\": \"us-east1\"}",
+     "additionalProperties": {
+      "type": "string"
+     }
+    },
+    "metadata": {
+     "type": "object",
+     "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."
+     }
+    }
+   }
+  },
+  "OperationMetadataExperimental": {
+   "id": "OperationMetadataExperimental",
+   "type": "object",
+   "description": "Metadata for the given google.longrunning.Operation.",
+   "properties": {
+    "method": {
+     "type": "string",
+     "description": "API method that initiated this operation. Example: google.appengine.experimental.CustomDomains.CreateCustomDomain.@OutputOnly"
+    },
+    "insertTime": {
+     "type": "string",
+     "description": "Time that this operation was created.@OutputOnly"
+    },
+    "endTime": {
+     "type": "string",
+     "description": "Time that this operation completed.@OutputOnly"
+    },
+    "user": {
+     "type": "string",
+     "description": "User who requested this operation.@OutputOnly"
+    },
+    "target": {
+     "type": "string",
+     "description": "Name of the resource that this operation is acting on. Example: apps/myapp/customDomains/example.com.@OutputOnly"
+    }
+   }
+  },
+  "OperationMetadata": {
+   "id": "OperationMetadata",
+   "type": "object",
+   "description": "Metadata for the given google.longrunning.Operation.",
+   "properties": {
+    "operationType": {
+     "type": "string",
+     "description": "Type of this operation. Deprecated, use method field instead. Example: \"create_version\".@OutputOnly"
+    },
+    "insertTime": {
+     "type": "string",
+     "description": "Timestamp that this operation was created.@OutputOnly"
+    },
+    "endTime": {
+     "type": "string",
+     "description": "Timestamp that this operation completed.@OutputOnly"
+    },
+    "user": {
+     "type": "string",
+     "description": "User who requested this operation.@OutputOnly"
+    },
+    "target": {
+     "type": "string",
+     "description": "Name of the resource that this operation is acting on. Example: apps/myapp/modules/default.@OutputOnly"
+    },
+    "method": {
+     "type": "string",
+     "description": "API method that initiated this operation. Example: google.appengine.v1beta4.Version.CreateVersion.@OutputOnly"
+    }
+   }
+  },
+  "OperationMetadataV1Beta5": {
+   "id": "OperationMetadataV1Beta5",
+   "type": "object",
+   "description": "Metadata for the given google.longrunning.Operation.",
+   "properties": {
+    "method": {
+     "type": "string",
+     "description": "API method name that initiated this operation. Example: google.appengine.v1beta5.Version.CreateVersion.@OutputOnly"
+    },
+    "insertTime": {
+     "type": "string",
+     "description": "Timestamp that this operation was created.@OutputOnly"
+    },
+    "endTime": {
+     "type": "string",
+     "description": "Timestamp that this operation completed.@OutputOnly"
+    },
+    "user": {
+     "type": "string",
+     "description": "User who requested this operation.@OutputOnly"
+    },
+    "target": {
+     "type": "string",
+     "description": "Name of the resource that this operation is acting on. Example: apps/myapp/services/default.@OutputOnly"
+    }
+   }
+  },
+  "OperationMetadataV1Beta": {
+   "id": "OperationMetadataV1Beta",
+   "type": "object",
+   "description": "Metadata for the given google.longrunning.Operation.",
+   "properties": {
+    "method": {
+     "type": "string",
+     "description": "API method that initiated this operation. Example: google.appengine.v1beta.Versions.CreateVersion.@OutputOnly"
+    },
+    "insertTime": {
+     "type": "string",
+     "description": "Time that this operation was created.@OutputOnly"
+    },
+    "endTime": {
+     "type": "string",
+     "description": "Time that this operation completed.@OutputOnly"
+    },
+    "user": {
+     "type": "string",
+     "description": "User who requested this operation.@OutputOnly"
+    },
+    "target": {
+     "type": "string",
+     "description": "Name of the resource that this operation is acting on. Example: apps/myapp/services/default.@OutputOnly"
+    },
+    "ephemeralMessage": {
+     "type": "string",
+     "description": "Ephemeral message that may change every time the operation is polled. @OutputOnly"
+    },
+    "warning": {
+     "type": "array",
+     "description": "Durable messages that persist on every operation poll. @OutputOnly",
+     "items": {
+      "type": "string"
+     }
+    }
+   }
+  },
+  "OperationMetadataV1": {
+   "id": "OperationMetadataV1",
+   "type": "object",
+   "description": "Metadata for the given google.longrunning.Operation.",
+   "properties": {
+    "method": {
+     "type": "string",
+     "description": "API method that initiated this operation. Example: google.appengine.v1.Versions.CreateVersion.@OutputOnly"
+    },
+    "insertTime": {
+     "type": "string",
+     "description": "Time that this operation was created.@OutputOnly"
+    },
+    "endTime": {
+     "type": "string",
+     "description": "Time that this operation completed.@OutputOnly"
+    },
+    "user": {
+     "type": "string",
+     "description": "User who requested this operation.@OutputOnly"
+    },
+    "target": {
+     "type": "string",
+     "description": "Name of the resource that this operation is acting on. Example: apps/myapp/services/default.@OutputOnly"
+    },
+    "ephemeralMessage": {
+     "type": "string",
+     "description": "Ephemeral message that may change every time the operation is polled. @OutputOnly"
+    },
+    "warning": {
+     "type": "array",
+     "description": "Durable messages that persist on every operation poll. @OutputOnly",
+     "items": {
+      "type": "string"
+     }
+    }
+   }
+  },
+  "LocationMetadata": {
+   "id": "LocationMetadata",
+   "type": "object",
+   "description": "Metadata for the given google.cloud.location.Location.",
+   "properties": {
+    "standardEnvironmentAvailable": {
+     "type": "boolean",
+     "description": "App Engine Standard Environment is available in the given location.@OutputOnly"
+    },
+    "flexibleEnvironmentAvailable": {
+     "type": "boolean",
+     "description": "App Engine Flexible Environment is available in the given location.@OutputOnly"
+    }
+   }
+  }
+ },
+ "resources": {
+  "apps": {
+   "methods": {
+    "get": {
+     "id": "appengine.apps.get",
+     "path": "v1beta/apps/{appsId}",
+     "httpMethod": "GET",
+     "description": "Gets information about an application.",
+     "parameters": {
+      "appsId": {
+       "type": "string",
+       "description": "Part of `name`. Name of the Application resource to get. Example: apps/myapp.",
+       "required": true,
+       "location": "path"
+      }
+     },
+     "parameterOrder": [
+      "appsId"
+     ],
+     "response": {
+      "$ref": "Application"
+     },
+     "scopes": [
+      "https://www.googleapis.com/auth/appengine.admin",
+      "https://www.googleapis.com/auth/cloud-platform",
+      "https://www.googleapis.com/auth/cloud-platform.read-only"
+     ]
+    },
+    "create": {
+     "id": "appengine.apps.create",
+     "path": "v1beta/apps",
+     "httpMethod": "POST",
+     "description": "Creates an App Engine application for a Google Cloud Platform project. Required fields: id - The ID of the target Cloud Platform project. location - The region (https://cloud.google.com/appengine/docs/locations) where you want the App Engine application located.For more information about App Engine applications, see Managing Projects, Applications, and Billing (https://cloud.google.com/appengine/docs/python/console/).",
+     "request": {
+      "$ref": "Application"
+     },
+     "response": {
+      "$ref": "Operation"
+     },
+     "scopes": [
+      "https://www.googleapis.com/auth/cloud-platform"
+     ]
+    },
+    "patch": {
+     "id": "appengine.apps.patch",
+     "path": "v1beta/apps/{appsId}",
+     "httpMethod": "PATCH",
+     "description": "Updates the specified Application resource. You can update the following fields: auth_domain - Google authentication domain for controlling user access to the application. default_cookie_expiration - Cookie expiration policy for the application.",
+     "parameters": {
+      "appsId": {
+       "type": "string",
+       "description": "Part of `name`. Name of the Application resource to update. Example: apps/myapp.",
+       "required": true,
+       "location": "path"
+      },
+      "updateMask": {
+       "type": "string",
+       "description": "Standard field mask for the set of fields to be updated.",
+       "location": "query"
+      }
+     },
+     "parameterOrder": [
+      "appsId"
+     ],
+     "request": {
+      "$ref": "Application"
+     },
+     "response": {
+      "$ref": "Operation"
+     },
+     "scopes": [
+      "https://www.googleapis.com/auth/cloud-platform"
+     ]
+    },
+    "repair": {
+     "id": "appengine.apps.repair",
+     "path": "v1beta/apps/{appsId}:repair",
+     "httpMethod": "POST",
+     "description": "Recreates the required App Engine features for the specified App Engine application, for example a Cloud Storage bucket or App Engine service account. Use this method if you receive an error message about a missing feature, for example, Error retrieving the App Engine service account.",
+     "parameters": {
+      "appsId": {
+       "type": "string",
+       "description": "Part of `name`. Name of the application to repair. Example: apps/myapp",
+       "required": true,
+       "location": "path"
+      }
+     },
+     "parameterOrder": [
+      "appsId"
+     ],
+     "request": {
+      "$ref": "RepairApplicationRequest"
+     },
+     "response": {
+      "$ref": "Operation"
+     },
+     "scopes": [
+      "https://www.googleapis.com/auth/cloud-platform"
+     ]
+    }
+   },
+   "resources": {
+    "operations": {
+     "methods": {
+      "list": {
+       "id": "appengine.apps.operations.list",
+       "path": "v1beta/apps/{appsId}/operations",
+       "httpMethod": "GET",
+       "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 below allows API services to override the binding to use different resource name schemes, such as users/*/operations.",
+       "parameters": {
+        "appsId": {
+         "type": "string",
+         "description": "Part of `name`. The name of the operation collection.",
+         "required": true,
+         "location": "path"
+        },
+        "filter": {
+         "type": "string",
+         "description": "The standard list filter.",
+         "location": "query"
+        },
+        "pageSize": {
+         "type": "integer",
+         "description": "The standard list page size.",
+         "format": "int32",
+         "location": "query"
+        },
+        "pageToken": {
+         "type": "string",
+         "description": "The standard list page token.",
+         "location": "query"
+        }
+       },
+       "parameterOrder": [
+        "appsId"
+       ],
+       "response": {
+        "$ref": "ListOperationsResponse"
+       },
+       "scopes": [
+        "https://www.googleapis.com/auth/appengine.admin",
+        "https://www.googleapis.com/auth/cloud-platform",
+        "https://www.googleapis.com/auth/cloud-platform.read-only"
+       ]
+      },
+      "get": {
+       "id": "appengine.apps.operations.get",
+       "path": "v1beta/apps/{appsId}/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.",
+       "parameters": {
+        "appsId": {
+         "type": "string",
+         "description": "Part of `name`. The name of the operation resource.",
+         "required": true,
+         "location": "path"
+        },
+        "operationsId": {
+         "type": "string",
+         "description": "Part of `name`. See documentation of `appsId`.",
+         "required": true,
+         "location": "path"
+        }
+       },
+       "parameterOrder": [
+        "appsId",
+        "operationsId"
+       ],
+       "response": {
+        "$ref": "Operation"
+       },
+       "scopes": [
+        "https://www.googleapis.com/auth/appengine.admin",
+        "https://www.googleapis.com/auth/cloud-platform",
+        "https://www.googleapis.com/auth/cloud-platform.read-only"
+       ]
+      }
+     }
+    },
+    "services": {
+     "methods": {
+      "list": {
+       "id": "appengine.apps.services.list",
+       "path": "v1beta/apps/{appsId}/services",
+       "httpMethod": "GET",
+       "description": "Lists all the services in the application.",
+       "parameters": {
+        "appsId": {
+         "type": "string",
+         "description": "Part of `parent`. Name of the parent Application resource. Example: apps/myapp.",
+         "required": true,
+         "location": "path"
+        },
+        "pageSize": {
+         "type": "integer",
+         "description": "Maximum results to return per page.",
+         "format": "int32",
+         "location": "query"
+        },
+        "pageToken": {
+         "type": "string",
+         "description": "Continuation token for fetching the next page of results.",
+         "location": "query"
+        }
+       },
+       "parameterOrder": [
+        "appsId"
+       ],
+       "response": {
+        "$ref": "ListServicesResponse"
+       },
+       "scopes": [
+        "https://www.googleapis.com/auth/appengine.admin",
+        "https://www.googleapis.com/auth/cloud-platform",
+        "https://www.googleapis.com/auth/cloud-platform.read-only"
+       ]
+      },
+      "get": {
+       "id": "appengine.apps.services.get",
+       "path": "v1beta/apps/{appsId}/services/{servicesId}",
+       "httpMethod": "GET",
+       "description": "Gets the current configuration of the specified service.",
+       "parameters": {
+        "appsId": {
+         "type": "string",
+         "description": "Part of `name`. Name of the resource requested. Example: apps/myapp/services/default.",
+         "required": true,
+         "location": "path"
+        },
+        "servicesId": {
+         "type": "string",
+         "description": "Part of `name`. See documentation of `appsId`.",
+         "required": true,
+         "location": "path"
+        }
+       },
+       "parameterOrder": [
+        "appsId",
+        "servicesId"
+       ],
+       "response": {
+        "$ref": "Service"
+       },
+       "scopes": [
+        "https://www.googleapis.com/auth/appengine.admin",
+        "https://www.googleapis.com/auth/cloud-platform",
+        "https://www.googleapis.com/auth/cloud-platform.read-only"
+       ]
+      },
+      "patch": {
+       "id": "appengine.apps.services.patch",
+       "path": "v1beta/apps/{appsId}/services/{servicesId}",
+       "httpMethod": "PATCH",
+       "description": "Updates the configuration of the specified service.",
+       "parameters": {
+        "appsId": {
+         "type": "string",
+         "description": "Part of `name`. Name of the resource to update. Example: apps/myapp/services/default.",
+         "required": true,
+         "location": "path"
+        },
+        "servicesId": {
+         "type": "string",
+         "description": "Part of `name`. See documentation of `appsId`.",
+         "required": true,
+         "location": "path"
+        },
+        "updateMask": {
+         "type": "string",
+         "description": "Standard field mask for the set of fields to be updated.",
+         "location": "query"
+        },
+        "migrateTraffic": {
+         "type": "boolean",
+         "description": "Set to true to gradually shift traffic to one or more versions that you specify. By default, traffic is shifted immediately. For gradual traffic migration, the target versions must be located within instances that are configured for both warmup requests (https://cloud.google.com/appengine/docs/admin-api/reference/rest/v1beta/apps.services.versions#inboundservicetype) and automatic scaling (https://cloud.google.com/appengine/docs/admin-api/reference/rest/v1beta/apps.services.versions#automaticscaling). You must specify the shardBy (https://cloud.google.com/appengine/docs/admin-api/reference/rest/v1beta/apps.services#shardby) field in the Service resource. Gradual traffic migration is not supported in the App Engine flexible environment. For examples, see Migrating and Splitting Traffic (https://cloud.google.com/appengine/docs/admin-api/migrating-splitting-traffic).",
+         "location": "query"
+        }
+       },
+       "parameterOrder": [
+        "appsId",
+        "servicesId"
+       ],
+       "request": {
+        "$ref": "Service"
+       },
+       "response": {
+        "$ref": "Operation"
+       },
+       "scopes": [
+        "https://www.googleapis.com/auth/cloud-platform"
+       ]
+      },
+      "delete": {
+       "id": "appengine.apps.services.delete",
+       "path": "v1beta/apps/{appsId}/services/{servicesId}",
+       "httpMethod": "DELETE",
+       "description": "Deletes the specified service and all enclosed versions.",
+       "parameters": {
+        "appsId": {
+         "type": "string",
+         "description": "Part of `name`. Name of the resource requested. Example: apps/myapp/services/default.",
+         "required": true,
+         "location": "path"
+        },
+        "servicesId": {
+         "type": "string",
+         "description": "Part of `name`. See documentation of `appsId`.",
+         "required": true,
+         "location": "path"
+        }
+       },
+       "parameterOrder": [
+        "appsId",
+        "servicesId"
+       ],
+       "response": {
+        "$ref": "Operation"
+       },
+       "scopes": [
+        "https://www.googleapis.com/auth/cloud-platform"
+       ]
+      }
+     },
+     "resources": {
+      "versions": {
+       "methods": {
+        "list": {
+         "id": "appengine.apps.services.versions.list",
+         "path": "v1beta/apps/{appsId}/services/{servicesId}/versions",
+         "httpMethod": "GET",
+         "description": "Lists the versions of a service.",
+         "parameters": {
+          "appsId": {
+           "type": "string",
+           "description": "Part of `parent`. Name of the parent Service resource. Example: apps/myapp/services/default.",
+           "required": true,
+           "location": "path"
           },
-          "description": "Recreates the required App Engine features for the specified App Engine application, for example a Cloud Storage bucket or App Engine service account. Use this method if you receive an error message about a missing feature, for example, Error retrieving the App Engine service account.",
-          "response": {
-            "$ref": "Operation"
+          "servicesId": {
+           "type": "string",
+           "description": "Part of `parent`. See documentation of `appsId`.",
+           "required": true,
+           "location": "path"
           },
-          "parameterOrder": [
-            "appsId"
-          ],
-          "httpMethod": "POST",
-          "parameters": {
-            "appsId": {
-              "location": "path",
-              "description": "Part of `name`. Name of the application to repair. Example: apps/myapp",
-              "required": true,
-              "type": "string"
-            }
+          "view": {
+           "type": "string",
+           "description": "Controls the set of fields returned in the List response.",
+           "enum": [
+            "BASIC",
+            "FULL"
+           ],
+           "location": "query"
           },
-          "scopes": [
-            "https://www.googleapis.com/auth/cloud-platform"
-          ],
-          "flatPath": "v1beta/apps/{appsId}:repair",
-          "path": "v1beta/apps/{appsId}:repair",
-          "id": "appengine.apps.repair"
+          "pageSize": {
+           "type": "integer",
+           "description": "Maximum results to return per page.",
+           "format": "int32",
+           "location": "query"
+          },
+          "pageToken": {
+           "type": "string",
+           "description": "Continuation token for fetching the next page of results.",
+           "location": "query"
+          }
+         },
+         "parameterOrder": [
+          "appsId",
+          "servicesId"
+         ],
+         "response": {
+          "$ref": "ListVersionsResponse"
+         },
+         "scopes": [
+          "https://www.googleapis.com/auth/appengine.admin",
+          "https://www.googleapis.com/auth/cloud-platform",
+          "https://www.googleapis.com/auth/cloud-platform.read-only"
+         ]
         },
         "get": {
-          "parameters": {
-            "appsId": {
-              "location": "path",
-              "description": "Part of `name`. Name of the Application resource to get. Example: apps/myapp.",
-              "required": true,
-              "type": "string"
-            }
+         "id": "appengine.apps.services.versions.get",
+         "path": "v1beta/apps/{appsId}/services/{servicesId}/versions/{versionsId}",
+         "httpMethod": "GET",
+         "description": "Gets the specified Version resource. By default, only a BASIC_VIEW will be returned. Specify the FULL_VIEW parameter to get the full resource.",
+         "parameters": {
+          "appsId": {
+           "type": "string",
+           "description": "Part of `name`. Name of the resource requested. Example: apps/myapp/services/default/versions/v1.",
+           "required": true,
+           "location": "path"
           },
-          "scopes": [
+          "servicesId": {
+           "type": "string",
+           "description": "Part of `name`. See documentation of `appsId`.",
+           "required": true,
+           "location": "path"
+          },
+          "versionsId": {
+           "type": "string",
+           "description": "Part of `name`. See documentation of `appsId`.",
+           "required": true,
+           "location": "path"
+          },
+          "view": {
+           "type": "string",
+           "description": "Controls the set of fields returned in the Get response.",
+           "enum": [
+            "BASIC",
+            "FULL"
+           ],
+           "location": "query"
+          }
+         },
+         "parameterOrder": [
+          "appsId",
+          "servicesId",
+          "versionsId"
+         ],
+         "response": {
+          "$ref": "Version"
+         },
+         "scopes": [
+          "https://www.googleapis.com/auth/appengine.admin",
+          "https://www.googleapis.com/auth/cloud-platform",
+          "https://www.googleapis.com/auth/cloud-platform.read-only"
+         ]
+        },
+        "create": {
+         "id": "appengine.apps.services.versions.create",
+         "path": "v1beta/apps/{appsId}/services/{servicesId}/versions",
+         "httpMethod": "POST",
+         "description": "Deploys code and resource files to a new version.",
+         "parameters": {
+          "appsId": {
+           "type": "string",
+           "description": "Part of `parent`. Name of the parent resource to create this version under. Example: apps/myapp/services/default.",
+           "required": true,
+           "location": "path"
+          },
+          "servicesId": {
+           "type": "string",
+           "description": "Part of `parent`. See documentation of `appsId`.",
+           "required": true,
+           "location": "path"
+          }
+         },
+         "parameterOrder": [
+          "appsId",
+          "servicesId"
+         ],
+         "request": {
+          "$ref": "Version"
+         },
+         "response": {
+          "$ref": "Operation"
+         },
+         "scopes": [
+          "https://www.googleapis.com/auth/cloud-platform"
+         ]
+        },
+        "patch": {
+         "id": "appengine.apps.services.versions.patch",
+         "path": "v1beta/apps/{appsId}/services/{servicesId}/versions/{versionsId}",
+         "httpMethod": "PATCH",
+         "description": "Updates the specified Version resource. You can specify the following fields depending on the App Engine environment and type of scaling that the version resource uses: serving_status (https://cloud.google.com/appengine/docs/admin-api/reference/rest/v1beta/apps.services.versions#Version.FIELDS.serving_status): For Version resources that use basic scaling, manual scaling, or run in the App Engine flexible environment. instance_class (https://cloud.google.com/appengine/docs/admin-api/reference/rest/v1beta/apps.services.versions#Version.FIELDS.instance_class): For Version resources that run in the App Engine standard environment. automatic_scaling.min_idle_instances (https://cloud.google.com/appengine/docs/admin-api/reference/rest/v1beta/apps.services.versions#Version.FIELDS.automatic_scaling): For Version resources that use automatic scaling and run in the App Engine standard environment. automatic_scaling.max_idle_instances (https://cloud.google.com/appengine/docs/admin-api/reference/rest/v1beta/apps.services.versions#Version.FIELDS.automatic_scaling): For Version resources that use automatic scaling and run in the App Engine standard environment.",
+         "parameters": {
+          "appsId": {
+           "type": "string",
+           "description": "Part of `name`. Name of the resource to update. Example: apps/myapp/services/default/versions/1.",
+           "required": true,
+           "location": "path"
+          },
+          "servicesId": {
+           "type": "string",
+           "description": "Part of `name`. See documentation of `appsId`.",
+           "required": true,
+           "location": "path"
+          },
+          "versionsId": {
+           "type": "string",
+           "description": "Part of `name`. See documentation of `appsId`.",
+           "required": true,
+           "location": "path"
+          },
+          "updateMask": {
+           "type": "string",
+           "description": "Standard field mask for the set of fields to be updated.",
+           "location": "query"
+          }
+         },
+         "parameterOrder": [
+          "appsId",
+          "servicesId",
+          "versionsId"
+         ],
+         "request": {
+          "$ref": "Version"
+         },
+         "response": {
+          "$ref": "Operation"
+         },
+         "scopes": [
+          "https://www.googleapis.com/auth/cloud-platform"
+         ]
+        },
+        "delete": {
+         "id": "appengine.apps.services.versions.delete",
+         "path": "v1beta/apps/{appsId}/services/{servicesId}/versions/{versionsId}",
+         "httpMethod": "DELETE",
+         "description": "Deletes an existing Version resource.",
+         "parameters": {
+          "appsId": {
+           "type": "string",
+           "description": "Part of `name`. Name of the resource requested. Example: apps/myapp/services/default/versions/v1.",
+           "required": true,
+           "location": "path"
+          },
+          "servicesId": {
+           "type": "string",
+           "description": "Part of `name`. See documentation of `appsId`.",
+           "required": true,
+           "location": "path"
+          },
+          "versionsId": {
+           "type": "string",
+           "description": "Part of `name`. See documentation of `appsId`.",
+           "required": true,
+           "location": "path"
+          }
+         },
+         "parameterOrder": [
+          "appsId",
+          "servicesId",
+          "versionsId"
+         ],
+         "response": {
+          "$ref": "Operation"
+         },
+         "scopes": [
+          "https://www.googleapis.com/auth/cloud-platform"
+         ]
+        }
+       },
+       "resources": {
+        "instances": {
+         "methods": {
+          "list": {
+           "id": "appengine.apps.services.versions.instances.list",
+           "path": "v1beta/apps/{appsId}/services/{servicesId}/versions/{versionsId}/instances",
+           "httpMethod": "GET",
+           "description": "Lists the instances of a version.Tip: To aggregate details about instances over time, see the Stackdriver Monitoring API (https://cloud.google.com/monitoring/api/ref_v3/rest/v3/projects.timeSeries/list).",
+           "parameters": {
+            "appsId": {
+             "type": "string",
+             "description": "Part of `parent`. Name of the parent Version resource. Example: apps/myapp/services/default/versions/v1.",
+             "required": true,
+             "location": "path"
+            },
+            "servicesId": {
+             "type": "string",
+             "description": "Part of `parent`. See documentation of `appsId`.",
+             "required": true,
+             "location": "path"
+            },
+            "versionsId": {
+             "type": "string",
+             "description": "Part of `parent`. See documentation of `appsId`.",
+             "required": true,
+             "location": "path"
+            },
+            "pageSize": {
+             "type": "integer",
+             "description": "Maximum results to return per page.",
+             "format": "int32",
+             "location": "query"
+            },
+            "pageToken": {
+             "type": "string",
+             "description": "Continuation token for fetching the next page of results.",
+             "location": "query"
+            }
+           },
+           "parameterOrder": [
+            "appsId",
+            "servicesId",
+            "versionsId"
+           ],
+           "response": {
+            "$ref": "ListInstancesResponse"
+           },
+           "scopes": [
             "https://www.googleapis.com/auth/appengine.admin",
             "https://www.googleapis.com/auth/cloud-platform",
             "https://www.googleapis.com/auth/cloud-platform.read-only"
-          ],
-          "flatPath": "v1beta/apps/{appsId}",
-          "path": "v1beta/apps/{appsId}",
-          "id": "appengine.apps.get",
-          "description": "Gets information about an application.",
-          "response": {
-            "$ref": "Application"
+           ]
           },
-          "parameterOrder": [
-            "appsId"
-          ],
-          "httpMethod": "GET"
-        },
-        "patch": {
-          "response": {
-            "$ref": "Operation"
-          },
-          "parameterOrder": [
-            "appsId"
-          ],
-          "httpMethod": "PATCH",
-          "parameters": {
+          "get": {
+           "id": "appengine.apps.services.versions.instances.get",
+           "path": "v1beta/apps/{appsId}/services/{servicesId}/versions/{versionsId}/instances/{instancesId}",
+           "httpMethod": "GET",
+           "description": "Gets instance information.",
+           "parameters": {
             "appsId": {
-              "required": true,
-              "type": "string",
-              "location": "path",
-              "description": "Part of `name`. Name of the Application resource to update. Example: apps/myapp."
+             "type": "string",
+             "description": "Part of `name`. Name of the resource requested. Example: apps/myapp/services/default/versions/v1/instances/instance-1.",
+             "required": true,
+             "location": "path"
             },
-            "updateMask": {
-              "location": "query",
-              "description": "Standard field mask for the set of fields to be updated.",
-              "format": "google-fieldmask",
-              "type": "string"
+            "servicesId": {
+             "type": "string",
+             "description": "Part of `name`. See documentation of `appsId`.",
+             "required": true,
+             "location": "path"
+            },
+            "versionsId": {
+             "type": "string",
+             "description": "Part of `name`. See documentation of `appsId`.",
+             "required": true,
+             "location": "path"
+            },
+            "instancesId": {
+             "type": "string",
+             "description": "Part of `name`. See documentation of `appsId`.",
+             "required": true,
+             "location": "path"
             }
-          },
-          "scopes": [
-            "https://www.googleapis.com/auth/cloud-platform"
-          ],
-          "flatPath": "v1beta/apps/{appsId}",
-          "path": "v1beta/apps/{appsId}",
-          "id": "appengine.apps.patch",
-          "request": {
-            "$ref": "Application"
-          },
-          "description": "Updates the specified Application resource. You can update the following fields:\nauth_domain - Google authentication domain for controlling user access to the application.\ndefault_cookie_expiration - Cookie expiration policy for the application."
-        },
-        "create": {
-          "request": {
-            "$ref": "Application"
-          },
-          "description": "Creates an App Engine application for a Google Cloud Platform project. Required fields:\nid - The ID of the target Cloud Platform project.\nlocation - The region (https://cloud.google.com/appengine/docs/locations) where you want the App Engine application located.For more information about App Engine applications, see Managing Projects, Applications, and Billing (https://cloud.google.com/appengine/docs/python/console/).",
-          "httpMethod": "POST",
-          "parameterOrder": [],
-          "response": {
-            "$ref": "Operation"
-          },
-          "parameters": {},
-          "scopes": [
-            "https://www.googleapis.com/auth/cloud-platform"
-          ],
-          "flatPath": "v1beta/apps",
-          "id": "appengine.apps.create",
-          "path": "v1beta/apps"
-        }
-      },
-      "resources": {
-        "operations": {
-          "methods": {
-            "list": {
-              "httpMethod": "GET",
-              "response": {
-                "$ref": "ListOperationsResponse"
-              },
-              "parameterOrder": [
-                "appsId"
-              ],
-              "parameters": {
-                "filter": {
-                  "location": "query",
-                  "description": "The standard list filter.",
-                  "type": "string"
-                },
-                "appsId": {
-                  "description": "Part of `name`. The name of the operation collection.",
-                  "required": true,
-                  "type": "string",
-                  "location": "path"
-                },
-                "pageToken": {
-                  "location": "query",
-                  "description": "The standard list page token.",
-                  "type": "string"
-                },
-                "pageSize": {
-                  "description": "The standard list page size.",
-                  "format": "int32",
-                  "type": "integer",
-                  "location": "query"
-                }
-              },
-              "scopes": [
-                "https://www.googleapis.com/auth/appengine.admin",
-                "https://www.googleapis.com/auth/cloud-platform",
-                "https://www.googleapis.com/auth/cloud-platform.read-only"
-              ],
-              "flatPath": "v1beta/apps/{appsId}/operations",
-              "id": "appengine.apps.operations.list",
-              "path": "v1beta/apps/{appsId}/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 below allows API services to override the binding to use different resource name schemes, such as users/*/operations."
-            },
-            "get": {
-              "response": {
-                "$ref": "Operation"
-              },
-              "parameterOrder": [
-                "appsId",
-                "operationsId"
-              ],
-              "httpMethod": "GET",
-              "parameters": {
-                "operationsId": {
-                  "location": "path",
-                  "description": "Part of `name`. See documentation of `appsId`.",
-                  "required": true,
-                  "type": "string"
-                },
-                "appsId": {
-                  "required": true,
-                  "type": "string",
-                  "location": "path",
-                  "description": "Part of `name`. The name of the operation resource."
-                }
-              },
-              "scopes": [
-                "https://www.googleapis.com/auth/appengine.admin",
-                "https://www.googleapis.com/auth/cloud-platform",
-                "https://www.googleapis.com/auth/cloud-platform.read-only"
-              ],
-              "flatPath": "v1beta/apps/{appsId}/operations/{operationsId}",
-              "path": "v1beta/apps/{appsId}/operations/{operationsId}",
-              "id": "appengine.apps.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."
-            }
-          }
-        },
-        "locations": {
-          "methods": {
-            "list": {
-              "description": "Lists information about the supported locations for this service.",
-              "parameterOrder": [
-                "appsId"
-              ],
-              "response": {
-                "$ref": "ListLocationsResponse"
-              },
-              "httpMethod": "GET",
-              "scopes": [
-                "https://www.googleapis.com/auth/appengine.admin",
-                "https://www.googleapis.com/auth/cloud-platform",
-                "https://www.googleapis.com/auth/cloud-platform.read-only"
-              ],
-              "parameters": {
-                "pageSize": {
-                  "location": "query",
-                  "description": "The standard list page size.",
-                  "format": "int32",
-                  "type": "integer"
-                },
-                "filter": {
-                  "description": "The standard list filter.",
-                  "type": "string",
-                  "location": "query"
-                },
-                "appsId": {
-                  "required": true,
-                  "type": "string",
-                  "location": "path",
-                  "description": "Part of `name`. The resource that owns the locations collection, if applicable."
-                },
-                "pageToken": {
-                  "location": "query",
-                  "description": "The standard list page token.",
-                  "type": "string"
-                }
-              },
-              "flatPath": "v1beta/apps/{appsId}/locations",
-              "path": "v1beta/apps/{appsId}/locations",
-              "id": "appengine.apps.locations.list"
-            },
-            "get": {
-              "flatPath": "v1beta/apps/{appsId}/locations/{locationsId}",
-              "id": "appengine.apps.locations.get",
-              "path": "v1beta/apps/{appsId}/locations/{locationsId}",
-              "description": "Get information about a location.",
-              "httpMethod": "GET",
-              "parameterOrder": [
-                "appsId",
-                "locationsId"
-              ],
-              "response": {
-                "$ref": "Location"
-              },
-              "parameters": {
-                "locationsId": {
-                  "location": "path",
-                  "description": "Part of `name`. See documentation of `appsId`.",
-                  "required": true,
-                  "type": "string"
-                },
-                "appsId": {
-                  "description": "Part of `name`. Resource name for the location.",
-                  "required": true,
-                  "type": "string",
-                  "location": "path"
-                }
-              },
-              "scopes": [
-                "https://www.googleapis.com/auth/appengine.admin",
-                "https://www.googleapis.com/auth/cloud-platform",
-                "https://www.googleapis.com/auth/cloud-platform.read-only"
-              ]
-            }
-          }
-        },
-        "services": {
-          "methods": {
-            "delete": {
-              "flatPath": "v1beta/apps/{appsId}/services/{servicesId}",
-              "id": "appengine.apps.services.delete",
-              "path": "v1beta/apps/{appsId}/services/{servicesId}",
-              "description": "Deletes the specified service and all enclosed versions.",
-              "httpMethod": "DELETE",
-              "response": {
-                "$ref": "Operation"
-              },
-              "parameterOrder": [
-                "appsId",
-                "servicesId"
-              ],
-              "scopes": [
-                "https://www.googleapis.com/auth/cloud-platform"
-              ],
-              "parameters": {
-                "servicesId": {
-                  "location": "path",
-                  "description": "Part of `name`. See documentation of `appsId`.",
-                  "required": true,
-                  "type": "string"
-                },
-                "appsId": {
-                  "description": "Part of `name`. Name of the resource requested. Example: apps/myapp/services/default.",
-                  "required": true,
-                  "type": "string",
-                  "location": "path"
-                }
-              }
-            },
-            "list": {
-              "path": "v1beta/apps/{appsId}/services",
-              "id": "appengine.apps.services.list",
-              "description": "Lists all the services in the application.",
-              "response": {
-                "$ref": "ListServicesResponse"
-              },
-              "httpMethod": "GET",
-              "parameterOrder": [
-                "appsId"
-              ],
-              "scopes": [
-                "https://www.googleapis.com/auth/appengine.admin",
-                "https://www.googleapis.com/auth/cloud-platform",
-                "https://www.googleapis.com/auth/cloud-platform.read-only"
-              ],
-              "parameters": {
-                "appsId": {
-                  "location": "path",
-                  "description": "Part of `parent`. Name of the parent Application resource. Example: apps/myapp.",
-                  "required": true,
-                  "type": "string"
-                },
-                "pageToken": {
-                  "description": "Continuation token for fetching the next page of results.",
-                  "type": "string",
-                  "location": "query"
-                },
-                "pageSize": {
-                  "location": "query",
-                  "description": "Maximum results to return per page.",
-                  "format": "int32",
-                  "type": "integer"
-                }
-              },
-              "flatPath": "v1beta/apps/{appsId}/services"
-            },
-            "get": {
-              "httpMethod": "GET",
-              "parameterOrder": [
-                "appsId",
-                "servicesId"
-              ],
-              "response": {
-                "$ref": "Service"
-              },
-              "scopes": [
-                "https://www.googleapis.com/auth/appengine.admin",
-                "https://www.googleapis.com/auth/cloud-platform",
-                "https://www.googleapis.com/auth/cloud-platform.read-only"
-              ],
-              "parameters": {
-                "appsId": {
-                  "location": "path",
-                  "description": "Part of `name`. Name of the resource requested. Example: apps/myapp/services/default.",
-                  "required": true,
-                  "type": "string"
-                },
-                "servicesId": {
-                  "description": "Part of `name`. See documentation of `appsId`.",
-                  "required": true,
-                  "type": "string",
-                  "location": "path"
-                }
-              },
-              "flatPath": "v1beta/apps/{appsId}/services/{servicesId}",
-              "id": "appengine.apps.services.get",
-              "path": "v1beta/apps/{appsId}/services/{servicesId}",
-              "description": "Gets the current configuration of the specified service."
-            },
-            "patch": {
-              "description": "Updates the configuration of the specified service.",
-              "request": {
-                "$ref": "Service"
-              },
-              "response": {
-                "$ref": "Operation"
-              },
-              "parameterOrder": [
-                "appsId",
-                "servicesId"
-              ],
-              "httpMethod": "PATCH",
-              "scopes": [
-                "https://www.googleapis.com/auth/cloud-platform"
-              ],
-              "parameters": {
-                "updateMask": {
-                  "location": "query",
-                  "description": "Standard field mask for the set of fields to be updated.",
-                  "format": "google-fieldmask",
-                  "type": "string"
-                },
-                "servicesId": {
-                  "location": "path",
-                  "description": "Part of `name`. See documentation of `appsId`.",
-                  "required": true,
-                  "type": "string"
-                },
-                "appsId": {
-                  "required": true,
-                  "type": "string",
-                  "location": "path",
-                  "description": "Part of `name`. Name of the resource to update. Example: apps/myapp/services/default."
-                },
-                "migrateTraffic": {
-                  "location": "query",
-                  "description": "Set to true to gradually shift traffic to one or more versions that you specify. By default, traffic is shifted immediately. For gradual traffic migration, the target versions must be located within instances that are configured for both warmup requests (https://cloud.google.com/appengine/docs/admin-api/reference/rest/v1beta/apps.services.versions#inboundservicetype) and automatic scaling (https://cloud.google.com/appengine/docs/admin-api/reference/rest/v1beta/apps.services.versions#automaticscaling). You must specify the shardBy (https://cloud.google.com/appengine/docs/admin-api/reference/rest/v1beta/apps.services#shardby) field in the Service resource. Gradual traffic migration is not supported in the App Engine flexible environment. For examples, see Migrating and Splitting Traffic (https://cloud.google.com/appengine/docs/admin-api/migrating-splitting-traffic).",
-                  "type": "boolean"
-                }
-              },
-              "flatPath": "v1beta/apps/{appsId}/services/{servicesId}",
-              "path": "v1beta/apps/{appsId}/services/{servicesId}",
-              "id": "appengine.apps.services.patch"
-            }
-          },
-          "resources": {
-            "versions": {
-              "resources": {
-                "instances": {
-                  "methods": {
-                    "delete": {
-                      "description": "Stops a running instance.",
-                      "response": {
-                        "$ref": "Operation"
-                      },
-                      "parameterOrder": [
-                        "appsId",
-                        "servicesId",
-                        "versionsId",
-                        "instancesId"
-                      ],
-                      "httpMethod": "DELETE",
-                      "scopes": [
-                        "https://www.googleapis.com/auth/cloud-platform"
-                      ],
-                      "parameters": {
-                        "servicesId": {
-                          "description": "Part of `name`. See documentation of `appsId`.",
-                          "required": true,
-                          "type": "string",
-                          "location": "path"
-                        },
-                        "appsId": {
-                          "required": true,
-                          "type": "string",
-                          "location": "path",
-                          "description": "Part of `name`. Name of the resource requested. Example: apps/myapp/services/default/versions/v1/instances/instance-1."
-                        },
-                        "instancesId": {
-                          "location": "path",
-                          "description": "Part of `name`. See documentation of `appsId`.",
-                          "required": true,
-                          "type": "string"
-                        },
-                        "versionsId": {
-                          "description": "Part of `name`. See documentation of `appsId`.",
-                          "required": true,
-                          "type": "string",
-                          "location": "path"
-                        }
-                      },
-                      "flatPath": "v1beta/apps/{appsId}/services/{servicesId}/versions/{versionsId}/instances/{instancesId}",
-                      "path": "v1beta/apps/{appsId}/services/{servicesId}/versions/{versionsId}/instances/{instancesId}",
-                      "id": "appengine.apps.services.versions.instances.delete"
-                    },
-                    "list": {
-                      "description": "Lists the instances of a version.Tip: To aggregate details about instances over time, see the Stackdriver Monitoring API (https://cloud.google.com/monitoring/api/ref_v3/rest/v3/projects.timeSeries/list).",
-                      "httpMethod": "GET",
-                      "response": {
-                        "$ref": "ListInstancesResponse"
-                      },
-                      "parameterOrder": [
-                        "appsId",
-                        "servicesId",
-                        "versionsId"
-                      ],
-                      "scopes": [
-                        "https://www.googleapis.com/auth/appengine.admin",
-                        "https://www.googleapis.com/auth/cloud-platform",
-                        "https://www.googleapis.com/auth/cloud-platform.read-only"
-                      ],
-                      "parameters": {
-                        "pageSize": {
-                          "location": "query",
-                          "description": "Maximum results to return per page.",
-                          "format": "int32",
-                          "type": "integer"
-                        },
-                        "versionsId": {
-                          "description": "Part of `parent`. See documentation of `appsId`.",
-                          "required": true,
-                          "type": "string",
-                          "location": "path"
-                        },
-                        "servicesId": {
-                          "description": "Part of `parent`. See documentation of `appsId`.",
-                          "required": true,
-                          "type": "string",
-                          "location": "path"
-                        },
-                        "appsId": {
-                          "location": "path",
-                          "description": "Part of `parent`. Name of the parent Version resource. Example: apps/myapp/services/default/versions/v1.",
-                          "required": true,
-                          "type": "string"
-                        },
-                        "pageToken": {
-                          "description": "Continuation token for fetching the next page of results.",
-                          "type": "string",
-                          "location": "query"
-                        }
-                      },
-                      "flatPath": "v1beta/apps/{appsId}/services/{servicesId}/versions/{versionsId}/instances",
-                      "id": "appengine.apps.services.versions.instances.list",
-                      "path": "v1beta/apps/{appsId}/services/{servicesId}/versions/{versionsId}/instances"
-                    },
-                    "get": {
-                      "description": "Gets instance information.",
-                      "httpMethod": "GET",
-                      "parameterOrder": [
-                        "appsId",
-                        "servicesId",
-                        "versionsId",
-                        "instancesId"
-                      ],
-                      "response": {
-                        "$ref": "Instance"
-                      },
-                      "scopes": [
-                        "https://www.googleapis.com/auth/appengine.admin",
-                        "https://www.googleapis.com/auth/cloud-platform",
-                        "https://www.googleapis.com/auth/cloud-platform.read-only"
-                      ],
-                      "parameters": {
-                        "appsId": {
-                          "location": "path",
-                          "description": "Part of `name`. Name of the resource requested. Example: apps/myapp/services/default/versions/v1/instances/instance-1.",
-                          "required": true,
-                          "type": "string"
-                        },
-                        "instancesId": {
-                          "description": "Part of `name`. See documentation of `appsId`.",
-                          "required": true,
-                          "type": "string",
-                          "location": "path"
-                        },
-                        "versionsId": {
-                          "description": "Part of `name`. See documentation of `appsId`.",
-                          "required": true,
-                          "type": "string",
-                          "location": "path"
-                        },
-                        "servicesId": {
-                          "location": "path",
-                          "description": "Part of `name`. See documentation of `appsId`.",
-                          "required": true,
-                          "type": "string"
-                        }
-                      },
-                      "flatPath": "v1beta/apps/{appsId}/services/{servicesId}/versions/{versionsId}/instances/{instancesId}",
-                      "id": "appengine.apps.services.versions.instances.get",
-                      "path": "v1beta/apps/{appsId}/services/{servicesId}/versions/{versionsId}/instances/{instancesId}"
-                    },
-                    "debug": {
-                      "response": {
-                        "$ref": "Operation"
-                      },
-                      "parameterOrder": [
-                        "appsId",
-                        "servicesId",
-                        "versionsId",
-                        "instancesId"
-                      ],
-                      "httpMethod": "POST",
-                      "scopes": [
-                        "https://www.googleapis.com/auth/cloud-platform"
-                      ],
-                      "parameters": {
-                        "servicesId": {
-                          "required": true,
-                          "type": "string",
-                          "location": "path",
-                          "description": "Part of `name`. See documentation of `appsId`."
-                        },
-                        "appsId": {
-                          "location": "path",
-                          "description": "Part of `name`. Name of the resource requested. Example: apps/myapp/services/default/versions/v1/instances/instance-1.",
-                          "required": true,
-                          "type": "string"
-                        },
-                        "instancesId": {
-                          "location": "path",
-                          "description": "Part of `name`. See documentation of `appsId`.",
-                          "required": true,
-                          "type": "string"
-                        },
-                        "versionsId": {
-                          "description": "Part of `name`. See documentation of `appsId`.",
-                          "required": true,
-                          "type": "string",
-                          "location": "path"
-                        }
-                      },
-                      "flatPath": "v1beta/apps/{appsId}/services/{servicesId}/versions/{versionsId}/instances/{instancesId}:debug",
-                      "path": "v1beta/apps/{appsId}/services/{servicesId}/versions/{versionsId}/instances/{instancesId}:debug",
-                      "id": "appengine.apps.services.versions.instances.debug",
-                      "description": "Enables debugging on a VM instance. This allows you to use the SSH command to connect to the virtual machine where the instance lives. While in \"debug mode\", the instance continues to serve live traffic. You should delete the instance when you are done debugging and then allow the system to take over and determine if another instance should be started.Only applicable for instances in App Engine flexible environment.",
-                      "request": {
-                        "$ref": "DebugInstanceRequest"
-                      }
-                    }
-                  }
-                }
-              },
-              "methods": {
-                "list": {
-                  "description": "Lists the versions of a service.",
-                  "response": {
-                    "$ref": "ListVersionsResponse"
-                  },
-                  "parameterOrder": [
-                    "appsId",
-                    "servicesId"
-                  ],
-                  "httpMethod": "GET",
-                  "scopes": [
-                    "https://www.googleapis.com/auth/appengine.admin",
-                    "https://www.googleapis.com/auth/cloud-platform",
-                    "https://www.googleapis.com/auth/cloud-platform.read-only"
-                  ],
-                  "parameters": {
-                    "servicesId": {
-                      "location": "path",
-                      "description": "Part of `parent`. See documentation of `appsId`.",
-                      "required": true,
-                      "type": "string"
-                    },
-                    "appsId": {
-                      "description": "Part of `parent`. Name of the parent Service resource. Example: apps/myapp/services/default.",
-                      "required": true,
-                      "type": "string",
-                      "location": "path"
-                    },
-                    "pageToken": {
-                      "location": "query",
-                      "description": "Continuation token for fetching the next page of results.",
-                      "type": "string"
-                    },
-                    "pageSize": {
-                      "description": "Maximum results to return per page.",
-                      "format": "int32",
-                      "type": "integer",
-                      "location": "query"
-                    },
-                    "view": {
-                      "description": "Controls the set of fields returned in the List response.",
-                      "type": "string",
-                      "location": "query",
-                      "enum": [
-                        "BASIC",
-                        "FULL"
-                      ]
-                    }
-                  },
-                  "flatPath": "v1beta/apps/{appsId}/services/{servicesId}/versions",
-                  "path": "v1beta/apps/{appsId}/services/{servicesId}/versions",
-                  "id": "appengine.apps.services.versions.list"
-                },
-                "get": {
-                  "parameters": {
-                    "appsId": {
-                      "required": true,
-                      "type": "string",
-                      "location": "path",
-                      "description": "Part of `name`. Name of the resource requested. Example: apps/myapp/services/default/versions/v1."
-                    },
-                    "versionsId": {
-                      "required": true,
-                      "type": "string",
-                      "location": "path",
-                      "description": "Part of `name`. See documentation of `appsId`."
-                    },
-                    "view": {
-                      "location": "query",
-                      "enum": [
-                        "BASIC",
-                        "FULL"
-                      ],
-                      "description": "Controls the set of fields returned in the Get response.",
-                      "type": "string"
-                    },
-                    "servicesId": {
-                      "description": "Part of `name`. See documentation of `appsId`.",
-                      "required": true,
-                      "type": "string",
-                      "location": "path"
-                    }
-                  },
-                  "scopes": [
-                    "https://www.googleapis.com/auth/appengine.admin",
-                    "https://www.googleapis.com/auth/cloud-platform",
-                    "https://www.googleapis.com/auth/cloud-platform.read-only"
-                  ],
-                  "flatPath": "v1beta/apps/{appsId}/services/{servicesId}/versions/{versionsId}",
-                  "path": "v1beta/apps/{appsId}/services/{servicesId}/versions/{versionsId}",
-                  "id": "appengine.apps.services.versions.get",
-                  "description": "Gets the specified Version resource. By default, only a BASIC_VIEW will be returned. Specify the FULL_VIEW parameter to get the full resource.",
-                  "parameterOrder": [
-                    "appsId",
-                    "servicesId",
-                    "versionsId"
-                  ],
-                  "httpMethod": "GET",
-                  "response": {
-                    "$ref": "Version"
-                  }
-                },
-                "patch": {
-                  "path": "v1beta/apps/{appsId}/services/{servicesId}/versions/{versionsId}",
-                  "id": "appengine.apps.services.versions.patch",
-                  "description": "Updates the specified Version resource. You can specify the following fields depending on the App Engine environment and type of scaling that the version resource uses:\nserving_status (https://cloud.google.com/appengine/docs/admin-api/reference/rest/v1beta/apps.services.versions#Version.FIELDS.serving_status):  For Version resources that use basic scaling, manual scaling, or run in  the App Engine flexible environment.\ninstance_class (https://cloud.google.com/appengine/docs/admin-api/reference/rest/v1beta/apps.services.versions#Version.FIELDS.instance_class):  For Version resources that run in the App Engine standard environment.\nautomatic_scaling.min_idle_instances (https://cloud.google.com/appengine/docs/admin-api/reference/rest/v1beta/apps.services.versions#Version.FIELDS.automatic_scaling):  For Version resources that use automatic scaling and run in the App  Engine standard environment.\nautomatic_scaling.max_idle_instances (https://cloud.google.com/appengine/docs/admin-api/reference/rest/v1beta/apps.services.versions#Version.FIELDS.automatic_scaling):  For Version resources that use automatic scaling and run in the App  Engine standard environment.",
-                  "request": {
-                    "$ref": "Version"
-                  },
-                  "response": {
-                    "$ref": "Operation"
-                  },
-                  "parameterOrder": [
-                    "appsId",
-                    "servicesId",
-                    "versionsId"
-                  ],
-                  "httpMethod": "PATCH",
-                  "scopes": [
-                    "https://www.googleapis.com/auth/cloud-platform"
-                  ],
-                  "parameters": {
-                    "servicesId": {
-                      "description": "Part of `name`. See documentation of `appsId`.",
-                      "required": true,
-                      "type": "string",
-                      "location": "path"
-                    },
-                    "appsId": {
-                      "description": "Part of `name`. Name of the resource to update. Example: apps/myapp/services/default/versions/1.",
-                      "required": true,
-                      "type": "string",
-                      "location": "path"
-                    },
-                    "versionsId": {
-                      "description": "Part of `name`. See documentation of `appsId`.",
-                      "required": true,
-                      "type": "string",
-                      "location": "path"
-                    },
-                    "updateMask": {
-                      "description": "Standard field mask for the set of fields to be updated.",
-                      "format": "google-fieldmask",
-                      "type": "string",
-                      "location": "query"
-                    }
-                  },
-                  "flatPath": "v1beta/apps/{appsId}/services/{servicesId}/versions/{versionsId}"
-                },
-                "create": {
-                  "request": {
-                    "$ref": "Version"
-                  },
-                  "description": "Deploys code and resource files to a new version.",
-                  "httpMethod": "POST",
-                  "parameterOrder": [
-                    "appsId",
-                    "servicesId"
-                  ],
-                  "response": {
-                    "$ref": "Operation"
-                  },
-                  "parameters": {
-                    "appsId": {
-                      "description": "Part of `parent`. Name of the parent resource to create this version under. Example: apps/myapp/services/default.",
-                      "required": true,
-                      "type": "string",
-                      "location": "path"
-                    },
-                    "servicesId": {
-                      "description": "Part of `parent`. See documentation of `appsId`.",
-                      "required": true,
-                      "type": "string",
-                      "location": "path"
-                    }
-                  },
-                  "scopes": [
-                    "https://www.googleapis.com/auth/cloud-platform"
-                  ],
-                  "flatPath": "v1beta/apps/{appsId}/services/{servicesId}/versions",
-                  "id": "appengine.apps.services.versions.create",
-                  "path": "v1beta/apps/{appsId}/services/{servicesId}/versions"
-                },
-                "delete": {
-                  "id": "appengine.apps.services.versions.delete",
-                  "path": "v1beta/apps/{appsId}/services/{servicesId}/versions/{versionsId}",
-                  "description": "Deletes an existing Version resource.",
-                  "httpMethod": "DELETE",
-                  "parameterOrder": [
-                    "appsId",
-                    "servicesId",
-                    "versionsId"
-                  ],
-                  "response": {
-                    "$ref": "Operation"
-                  },
-                  "scopes": [
-                    "https://www.googleapis.com/auth/cloud-platform"
-                  ],
-                  "parameters": {
-                    "servicesId": {
-                      "description": "Part of `name`. See documentation of `appsId`.",
-                      "required": true,
-                      "type": "string",
-                      "location": "path"
-                    },
-                    "appsId": {
-                      "description": "Part of `name`. Name of the resource requested. Example: apps/myapp/services/default/versions/v1.",
-                      "required": true,
-                      "type": "string",
-                      "location": "path"
-                    },
-                    "versionsId": {
-                      "required": true,
-                      "type": "string",
-                      "location": "path",
-                      "description": "Part of `name`. See documentation of `appsId`."
-                    }
-                  },
-                  "flatPath": "v1beta/apps/{appsId}/services/{servicesId}/versions/{versionsId}"
-                }
-              }
-            }
-          }
-        }
-      }
-    }
-  },
-  "parameters": {
-    "upload_protocol": {
-      "description": "Upload protocol for media (e.g. \"raw\", \"multipart\").",
-      "type": "string",
-      "location": "query"
-    },
-    "prettyPrint": {
-      "description": "Returns response with indentations and line breaks.",
-      "type": "boolean",
-      "default": "true",
-      "location": "query"
-    },
-    "uploadType": {
-      "location": "query",
-      "description": "Legacy upload protocol for media (e.g. \"media\", \"multipart\").",
-      "type": "string"
-    },
-    "fields": {
-      "description": "Selector specifying which fields to include in a partial response.",
-      "type": "string",
-      "location": "query"
-    },
-    "callback": {
-      "location": "query",
-      "description": "JSONP",
-      "type": "string"
-    },
-    "$.xgafv": {
-      "description": "V1 error format.",
-      "type": "string",
-      "enumDescriptions": [
-        "v1 error format",
-        "v2 error format"
-      ],
-      "location": "query",
-      "enum": [
-        "1",
-        "2"
-      ]
-    },
-    "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"
-    },
-    "access_token": {
-      "location": "query",
-      "description": "OAuth access token.",
-      "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"
-    },
-    "pp": {
-      "type": "boolean",
-      "default": "true",
-      "location": "query",
-      "description": "Pretty-print response."
-    },
-    "bearer_token": {
-      "location": "query",
-      "description": "OAuth bearer token.",
-      "type": "string"
-    },
-    "oauth_token": {
-      "description": "OAuth 2.0 token for the current user.",
-      "type": "string",
-      "location": "query"
-    }
-  },
-  "schemas": {
-    "ListLocationsResponse": {
-      "description": "The response message for Locations.ListLocations.",
-      "type": "object",
-      "properties": {
-        "nextPageToken": {
-          "description": "The standard List next-page token.",
-          "type": "string"
-        },
-        "locations": {
-          "type": "array",
-          "items": {
-            "$ref": "Location"
-          },
-          "description": "A list of locations that matches the specified filter in the request."
-        }
-      },
-      "id": "ListLocationsResponse"
-    },
-    "ContainerInfo": {
-      "description": "Docker image that is used to create a container and start a VM instance for the version that you deploy. Only applicable for instances running in the App Engine flexible environment.",
-      "type": "object",
-      "properties": {
-        "image": {
-          "description": "URI to the hosted container image in Google Container Registry. The URI must be fully qualified and include a tag or digest. Examples: \"gcr.io/my-project/image:tag\" or \"gcr.io/my-project/image@digest\"",
-          "type": "string"
-        }
-      },
-      "id": "ContainerInfo"
-    },
-    "RequestUtilization": {
-      "description": "Target scaling by request utilization. Only applicable for VM runtimes.",
-      "type": "object",
-      "properties": {
-        "targetConcurrentRequests": {
-          "description": "Target number of concurrent requests.",
-          "format": "int32",
-          "type": "integer"
-        },
-        "targetRequestCountPerSecond": {
-          "description": "Target requests per second.",
-          "format": "int32",
-          "type": "integer"
-        }
-      },
-      "id": "RequestUtilization"
-    },
-    "UrlMap": {
-      "properties": {
-        "redirectHttpResponseCode": {
-          "enumDescriptions": [
-            "Not specified. 302 is assumed.",
-            "301 Moved Permanently code.",
-            "302 Moved Temporarily code.",
-            "303 See Other code.",
-            "307 Temporary Redirect code."
-          ],
-          "enum": [
-            "REDIRECT_HTTP_RESPONSE_CODE_UNSPECIFIED",
-            "REDIRECT_HTTP_RESPONSE_CODE_301",
-            "REDIRECT_HTTP_RESPONSE_CODE_302",
-            "REDIRECT_HTTP_RESPONSE_CODE_303",
-            "REDIRECT_HTTP_RESPONSE_CODE_307"
-          ],
-          "description": "30x code to use when performing redirects for the secure field. Defaults to 302.",
-          "type": "string"
-        },
-        "securityLevel": {
-          "enum": [
-            "SECURE_UNSPECIFIED",
-            "SECURE_DEFAULT",
-            "SECURE_NEVER",
-            "SECURE_OPTIONAL",
-            "SECURE_ALWAYS"
-          ],
-          "description": "Security (HTTPS) enforcement for this URL.",
-          "type": "string",
-          "enumDescriptions": [
-            "Not specified.",
-            "Both HTTP and HTTPS requests with URLs that match the handler succeed without redirects. The application can examine the request to determine which protocol was used, and respond accordingly.",
-            "Requests for a URL that match this handler that use HTTPS are automatically redirected to the HTTP equivalent URL.",
-            "Both HTTP and HTTPS requests with URLs that match the handler succeed without redirects. The application can examine the request to determine which protocol was used and respond accordingly.",
-            "Requests for a URL that match this handler that do not use HTTPS are automatically redirected to the HTTPS URL with the same path. Query parameters are reserved for the redirect."
-          ]
-        },
-        "authFailAction": {
-          "type": "string",
-          "enumDescriptions": [
-            "Not specified. AUTH_FAIL_ACTION_REDIRECT is assumed.",
-            "Redirects user to \"accounts.google.com\". The user is redirected back to the application URL after signing in or creating an account.",
-            "Rejects request with a 401 HTTP status code and an error message."
-          ],
-          "enum": [
-            "AUTH_FAIL_ACTION_UNSPECIFIED",
-            "AUTH_FAIL_ACTION_REDIRECT",
-            "AUTH_FAIL_ACTION_UNAUTHORIZED"
-          ],
-          "description": "Action to take when users access resources that require authentication. Defaults to redirect."
-        },
-        "script": {
-          "description": "Executes a script to handle the request that matches this URL pattern.",
-          "$ref": "ScriptHandler"
-        },
-        "urlRegex": {
-          "description": "URL prefix. Uses regular expression syntax, which means regexp special characters must be escaped, but should not contain groupings. All URLs that begin with this prefix are handled by this handler, using the portion of the URL after the prefix as part of the file path.",
-          "type": "string"
-        },
-        "login": {
-          "enumDescriptions": [
-            "Not specified. LOGIN_OPTIONAL is assumed.",
-            "Does not require that the user is signed in.",
-            "If the user is not signed in, the auth_fail_action is taken. In addition, if the user is not an administrator for the application, they are given an error message regardless of auth_fail_action. If the user is an administrator, the handler proceeds.",
-            "If the user has signed in, the handler proceeds normally. Otherwise, the auth_fail_action is taken."
-          ],
-          "enum": [
-            "LOGIN_UNSPECIFIED",
-            "LOGIN_OPTIONAL",
-            "LOGIN_ADMIN",
-            "LOGIN_REQUIRED"
-          ],
-          "description": "Level of login required to access this resource.",
-          "type": "string"
-        },
-        "apiEndpoint": {
-          "$ref": "ApiEndpointHandler",
-          "description": "Uses API Endpoints to handle requests."
-        },
-        "staticFiles": {
-          "description": "Returns the contents of a file, such as an image, as the response.",
-          "$ref": "StaticFilesHandler"
-        }
-      },
-      "id": "UrlMap",
-      "description": "URL pattern and description of how the URL should be handled. App Engine can handle URLs by executing application code or by serving static files uploaded with the version, such as images, CSS, or JavaScript.",
-      "type": "object"
-    },
-    "EndpointsApiService": {
-      "description": "Cloud Endpoints (https://cloud.google.com/endpoints) configuration. The Endpoints API Service provides tooling for serving Open API and gRPC endpoints via an NGINX proxy.The fields here refer to the name and configuration id of a \"service\" resource in the Service Management API (https://cloud.google.com/service-management/overview).",
-      "type": "object",
-      "properties": {
-        "name": {
-          "description": "Endpoints service name which is the name of the \"service\" resource in the Service Management API. For example \"myapi.endpoints.myproject.cloud.goog\"",
-          "type": "string"
-        },
-        "configId": {
-          "description": "Endpoints service configuration id as specified by the Service Management API. For example \"2016-09-19r1\"",
-          "type": "string"
-        }
-      },
-      "id": "EndpointsApiService"
-    },
-    "Operation": {
-      "description": "This resource represents a long-running operation that is the result of a network API call.",
-      "type": "object",
-      "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"
-        },
-        "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"
-        },
-        "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 have the format of operations/some/unique/name.",
-          "type": "string"
-        },
-        "error": {
-          "$ref": "Status",
-          "description": "The error result of the operation in case of failure or cancellation."
-        }
-      },
-      "id": "Operation"
-    },
-    "ApiConfigHandler": {
-      "id": "ApiConfigHandler",
-      "description": "Google Cloud Endpoints (https://cloud.google.com/appengine/docs/python/endpoints/) configuration for API handlers.",
-      "type": "object",
-      "properties": {
-        "url": {
-          "type": "string",
-          "description": "URL to serve the endpoint at."
-        },
-        "securityLevel": {
-          "enumDescriptions": [
-            "Not specified.",
-            "Both HTTP and HTTPS requests with URLs that match the handler succeed without redirects. The application can examine the request to determine which protocol was used, and respond accordingly.",
-            "Requests for a URL that match this handler that use HTTPS are automatically redirected to the HTTP equivalent URL.",
-            "Both HTTP and HTTPS requests with URLs that match the handler succeed without redirects. The application can examine the request to determine which protocol was used and respond accordingly.",
-            "Requests for a URL that match this handler that do not use HTTPS are automatically redirected to the HTTPS URL with the same path. Query parameters are reserved for the redirect."
-          ],
-          "enum": [
-            "SECURE_UNSPECIFIED",
-            "SECURE_DEFAULT",
-            "SECURE_NEVER",
-            "SECURE_OPTIONAL",
-            "SECURE_ALWAYS"
-          ],
-          "description": "Security (HTTPS) enforcement for this URL.",
-          "type": "string"
-        },
-        "authFailAction": {
-          "enumDescriptions": [
-            "Not specified. AUTH_FAIL_ACTION_REDIRECT is assumed.",
-            "Redirects user to \"accounts.google.com\". The user is redirected back to the application URL after signing in or creating an account.",
-            "Rejects request with a 401 HTTP status code and an error message."
-          ],
-          "enum": [
-            "AUTH_FAIL_ACTION_UNSPECIFIED",
-            "AUTH_FAIL_ACTION_REDIRECT",
-            "AUTH_FAIL_ACTION_UNAUTHORIZED"
-          ],
-          "description": "Action to take when users access resources that require authentication. Defaults to redirect.",
-          "type": "string"
-        },
-        "script": {
-          "description": "Path to the script from the application root directory.",
-          "type": "string"
-        },
-        "login": {
-          "description": "Level of login required to access this resource. Defaults to optional.",
-          "type": "string",
-          "enumDescriptions": [
-            "Not specified. LOGIN_OPTIONAL is assumed.",
-            "Does not require that the user is signed in.",
-            "If the user is not signed in, the auth_fail_action is taken. In addition, if the user is not an administrator for the application, they are given an error message regardless of auth_fail_action. If the user is an administrator, the handler proceeds.",
-            "If the user has signed in, the handler proceeds normally. Otherwise, the auth_fail_action is taken."
-          ],
-          "enum": [
-            "LOGIN_UNSPECIFIED",
-            "LOGIN_OPTIONAL",
-            "LOGIN_ADMIN",
-            "LOGIN_REQUIRED"
-          ]
-        }
-      }
-    },
-    "StaticFilesHandler": {
-      "description": "Files served directly to the user for a given URL, such as images, CSS stylesheets, or JavaScript source files. Static file handlers describe which files in the application directory are static files, and which URLs serve them.",
-      "type": "object",
-      "properties": {
-        "uploadPathRegex": {
-          "description": "Regular expression that matches the file paths for all files that should be referenced by this handler.",
-          "type": "string"
-        },
-        "path": {
-          "description": "Path to the static files matched by the URL pattern, from the application root directory. The path can refer to text matched in groupings in the URL pattern.",
-          "type": "string"
-        },
-        "mimeType": {
-          "description": "MIME type used to serve all files served by this handler.Defaults to file-specific MIME types, which are derived from each file's filename extension.",
-          "type": "string"
-        },
-        "requireMatchingFile": {
-          "description": "Whether this handler should match the request if the file referenced by the handler does not exist.",
-          "type": "boolean"
-        },
-        "expiration": {
-          "description": "Time a static file served by this handler should be cached by web proxies and browsers.",
-          "format": "google-duration",
-          "type": "string"
-        },
-        "httpHeaders": {
-          "description": "HTTP headers to use for all responses from these URLs.",
-          "type": "object",
-          "additionalProperties": {
-            "type": "string"
-          }
-        },
-        "applicationReadable": {
-          "description": "Whether files should also be uploaded as code data. By default, files declared in static file handlers are uploaded as static data and are only served to end users; they cannot be read by the application. If enabled, uploads are charged against both your code and static data storage resource quotas.",
-          "type": "boolean"
-        }
-      },
-      "id": "StaticFilesHandler"
-    },
-    "BasicScaling": {
-      "description": "A service with basic scaling will create an instance when the application receives a request. The instance will be turned down when the app becomes idle. Basic scaling is ideal for work that is intermittent or driven by user activity.",
-      "type": "object",
-      "properties": {
-        "maxInstances": {
-          "description": "Maximum number of instances to create for this version.",
-          "format": "int32",
-          "type": "integer"
-        },
-        "idleTimeout": {
-          "description": "Duration of time after the last request that an instance must wait before the instance is shut down.",
-          "format": "google-duration",
-          "type": "string"
-        }
-      },
-      "id": "BasicScaling"
-    },
-    "DiskUtilization": {
-      "description": "Target scaling by disk usage. Only applicable for VM runtimes.",
-      "type": "object",
-      "properties": {
-        "targetWriteOpsPerSecond": {
-          "description": "Target ops written per second.",
-          "format": "int32",
-          "type": "integer"
-        },
-        "targetWriteBytesPerSecond": {
-          "description": "Target bytes written per second.",
-          "format": "int32",
-          "type": "integer"
-        },
-        "targetReadBytesPerSecond": {
-          "type": "integer",
-          "description": "Target bytes read per second.",
-          "format": "int32"
-        },
-        "targetReadOpsPerSecond": {
-          "description": "Target ops read per seconds.",
-          "format": "int32",
-          "type": "integer"
-        }
-      },
-      "id": "DiskUtilization"
-    },
-    "CpuUtilization": {
-      "description": "Target scaling by CPU usage.",
-      "type": "object",
-      "properties": {
-        "aggregationWindowLength": {
-          "description": "Period of time over which CPU utilization is calculated.",
-          "format": "google-duration",
-          "type": "string"
-        },
-        "targetUtilization": {
-          "description": "Target CPU utilization ratio to maintain when scaling. Must be between 0 and 1.",
-          "format": "double",
-          "type": "number"
-        }
-      },
-      "id": "CpuUtilization"
-    },
-    "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). The error model is designed to be:\nSimple to use and understand for most users\nFlexible enough to meet unexpected needsOverviewThe Status message contains three pieces of data: error code, error message, and error details. The error code should be an enum value of google.rpc.Code, but it may accept additional error codes if needed. The error message should be a developer-facing English message that helps developers understand and resolve the error. If a localized user-facing error message is needed, put the localized message in the error details or localize it in the client. The optional error details may contain arbitrary information about the error. There is a predefined set of error detail types in the package google.rpc which can be used for common error conditions.Language mappingThe Status message is the logical representation of the error model, but it is not necessarily the actual wire format. When the Status message is exposed in different client libraries and different wire protocols, it can be mapped differently. For example, it will likely be mapped to some exceptions in Java, but more likely mapped to some error codes in C.Other usesThe error model and the Status message can be used in a variety of environments, either with or without APIs, to provide a consistent developer experience across different environments.Example uses of this error model include:\nPartial errors. If a service needs to return partial errors to the client, it may embed the Status in the normal response to indicate the partial errors.\nWorkflow errors. A typical workflow has multiple steps. Each step may have a Status message for error reporting purpose.\nBatch operations. If a client uses batch request and batch response, the Status message should be used directly inside batch response, one for each error sub-response.\nAsynchronous operations. If an API call embeds asynchronous operation results in its response, the status of those operations should be represented directly using the Status message.\nLogging. If some API errors are stored in logs, the message Status could be used directly after any stripping needed for security/privacy reasons.",
-      "type": "object",
-      "properties": {
-        "code": {
-          "description": "The status code, which should be an enum value of google.rpc.Code.",
-          "format": "int32",
-          "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"
-        },
-        "details": {
-          "type": "array",
-          "items": {
-            "additionalProperties": {
-              "description": "Properties of the object. Contains field @type with type URL.",
-              "type": "any"
-            },
-            "type": "object"
-          },
-          "description": "A list of messages that carry the error details. There will be a common set of message types for APIs to use."
-        }
-      },
-      "id": "Status"
-    },
-    "IdentityAwareProxy": {
-      "description": "Identity-Aware Proxy",
-      "type": "object",
-      "properties": {
-        "oauth2ClientSecretSha256": {
-          "description": "Hex-encoded SHA-256 hash of the client secret.@OutputOnly",
-          "type": "string"
-        },
-        "enabled": {
-          "description": "Whether the serving infrastructure will authenticate and authorize all incoming requests.If true, the oauth2_client_id and oauth2_client_secret fields must be non-empty.",
-          "type": "boolean"
-        },
-        "oauth2ClientSecret": {
-          "description": "OAuth2 client secret to use for the authentication flow.For security reasons, this value cannot be retrieved via the API. Instead, the SHA-256 hash of the value is returned in the oauth2_client_secret_sha256 field.@InputOnly",
-          "type": "string"
-        },
-        "oauth2ClientId": {
-          "description": "OAuth2 client ID to use for the authentication flow.",
-          "type": "string"
-        }
-      },
-      "id": "IdentityAwareProxy"
-    },
-    "ManualScaling": {
-      "description": "A service with manual scaling runs continuously, allowing you to perform complex initialization and rely on the state of its memory over time.",
-      "type": "object",
-      "properties": {
-        "instances": {
-          "description": "Number of instances to assign to the service at the start. This number can later be altered by using the Modules API (https://cloud.google.com/appengine/docs/python/modules/functions) set_num_instances() function.",
-          "format": "int32",
-          "type": "integer"
-        }
-      },
-      "id": "ManualScaling"
-    },
-    "LocationMetadata": {
-      "description": "Metadata for the given google.cloud.location.Location.",
-      "type": "object",
-      "properties": {
-        "flexibleEnvironmentAvailable": {
-          "description": "App Engine Flexible Environment is available in the given location.@OutputOnly",
-          "type": "boolean"
-        },
-        "standardEnvironmentAvailable": {
-          "description": "App Engine Standard Environment is available in the given location.@OutputOnly",
-          "type": "boolean"
-        }
-      },
-      "id": "LocationMetadata"
-    },
-    "Service": {
-      "properties": {
-        "split": {
-          "description": "Mapping that defines fractional HTTP traffic diversion to different versions within the service.",
-          "$ref": "TrafficSplit"
-        },
-        "id": {
-          "description": "Relative name of the service within the application. Example: default.@OutputOnly",
-          "type": "string"
-        },
-        "name": {
-          "description": "Full path to the Service resource in the API. Example: apps/myapp/services/default.@OutputOnly",
-          "type": "string"
-        }
-      },
-      "id": "Service",
-      "description": "A Service resource is a logical component of an application that can share state and communicate in a secure fashion with other services. For example, an application that handles customer requests might include separate services to handle tasks such as backend data analysis or API requests from mobile devices. Each service has a collection of versions that define a specific set of code used to implement the functionality of that service.",
-      "type": "object"
-    },
-    "ListOperationsResponse": {
-      "description": "The response message for Operations.ListOperations.",
-      "type": "object",
-      "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.",
-          "type": "array",
-          "items": {
-            "$ref": "Operation"
-          }
-        }
-      },
-      "id": "ListOperationsResponse"
-    },
-    "OperationMetadata": {
-      "properties": {
-        "insertTime": {
-          "description": "Timestamp that this operation was created.@OutputOnly",
-          "format": "google-datetime",
-          "type": "string"
-        },
-        "user": {
-          "description": "User who requested this operation.@OutputOnly",
-          "type": "string"
-        },
-        "target": {
-          "description": "Name of the resource that this operation is acting on. Example: apps/myapp/modules/default.@OutputOnly",
-          "type": "string"
-        },
-        "method": {
-          "description": "API method that initiated this operation. Example: google.appengine.v1beta4.Version.CreateVersion.@OutputOnly",
-          "type": "string"
-        },
-        "endTime": {
-          "type": "string",
-          "description": "Timestamp that this operation completed.@OutputOnly",
-          "format": "google-datetime"
-        },
-        "operationType": {
-          "description": "Type of this operation. Deprecated, use method field instead. Example: \"create_version\".@OutputOnly",
-          "type": "string"
-        }
-      },
-      "id": "OperationMetadata",
-      "description": "Metadata for the given google.longrunning.Operation.",
-      "type": "object"
-    },
-    "ErrorHandler": {
-      "description": "Custom static error page to be served when an error occurs.",
-      "type": "object",
-      "properties": {
-        "errorCode": {
-          "enum": [
-            "ERROR_CODE_UNSPECIFIED",
-            "ERROR_CODE_DEFAULT",
-            "ERROR_CODE_OVER_QUOTA",
-            "ERROR_CODE_DOS_API_DENIAL",
-            "ERROR_CODE_TIMEOUT"
-          ],
-          "description": "Error condition this handler applies to.",
-          "type": "string",
-          "enumDescriptions": [
-            "Not specified. ERROR_CODE_DEFAULT is assumed.",
-            "All other error types.",
-            "Application has exceeded a resource quota.",
-            "Client blocked by the application's Denial of Service protection configuration.",
-            "Deadline reached before the application responds."
-          ]
-        },
-        "mimeType": {
-          "description": "MIME type of file. Defaults to text/html.",
-          "type": "string"
-        },
-        "staticFile": {
-          "description": "Static file content to be served for this error.",
-          "type": "string"
-        }
-      },
-      "id": "ErrorHandler"
-    },
-    "OperationMetadataV1": {
-      "description": "Metadata for the given google.longrunning.Operation.",
-      "type": "object",
-      "properties": {
-        "warning": {
-          "type": "array",
-          "items": {
-            "type": "string"
-          },
-          "description": "Durable messages that persist on every operation poll. @OutputOnly"
-        },
-        "insertTime": {
-          "description": "Time that this operation was created.@OutputOnly",
-          "format": "google-datetime",
-          "type": "string"
-        },
-        "target": {
-          "description": "Name of the resource that this operation is acting on. Example: apps/myapp/services/default.@OutputOnly",
-          "type": "string"
-        },
-        "user": {
-          "description": "User who requested this operation.@OutputOnly",
-          "type": "string"
-        },
-        "ephemeralMessage": {
-          "description": "Ephemeral message that may change every time the operation is polled. @OutputOnly",
-          "type": "string"
-        },
-        "method": {
-          "description": "API method that initiated this operation. Example: google.appengine.v1.Versions.CreateVersion.@OutputOnly",
-          "type": "string"
-        },
-        "endTime": {
-          "description": "Time that this operation completed.@OutputOnly",
-          "format": "google-datetime",
-          "type": "string"
-        }
-      },
-      "id": "OperationMetadataV1"
-    },
-    "Network": {
-      "description": "Extra network settings. Only applicable for VM runtimes.",
-      "type": "object",
-      "properties": {
-        "forwardedPorts": {
-          "description": "List of ports, or port pairs, to forward from the virtual machine to the application container.",
-          "type": "array",
-          "items": {
-            "type": "string"
-          }
-        },
-        "instanceTag": {
-          "description": "Tag to apply to the VM instance during creation.",
-          "type": "string"
-        },
-        "subnetworkName": {
-          "description": "Google Cloud Platform sub-network where the virtual machines are created. Specify the short name, not the resource path.If a subnetwork name is specified, a network name will also be required unless it is for the default network.\nIf the network the VM instance is being created in is a Legacy network, then the IP address is allocated from the IPv4Range.\nIf the network the VM instance is being created in is an auto Subnet Mode Network, then only network name should be specified (not the subnetwork_name) and the IP address is created from the IPCidrRange of the subnetwork that exists in that zone for that network.\nIf the network the VM instance is being created in is a custom Subnet Mode Network, then the subnetwork_name must be specified and the IP address is created from the IPCidrRange of the subnetwork.If specified, the subnetwork must exist in the same region as the Flex app.",
-          "type": "string"
-        },
-        "name": {
-          "description": "Google Cloud Platform network where the virtual machines are created. Specify the short name, not the resource path.Defaults to default.",
-          "type": "string"
-        }
-      },
-      "id": "Network"
-    },
-    "Application": {
-      "description": "An Application resource contains the top-level configuration of an App Engine application.",
-      "type": "object",
-      "properties": {
-        "iap": {
-          "$ref": "IdentityAwareProxy"
-        },
-        "authDomain": {
-          "description": "Google Apps authentication domain that controls which users can access this application.Defaults to open access for any Google Account.",
-          "type": "string"
-        },
-        "codeBucket": {
-          "description": "Google Cloud Storage bucket that can be used for storing files associated with this application. This bucket is associated with the application and can be used by the gcloud deployment commands.@OutputOnly",
-          "type": "string"
-        },
-        "defaultBucket": {
-          "description": "Google Cloud Storage bucket that can be used by this application to store content.@OutputOnly",
-          "type": "string"
-        },
-        "dispatchRules": {
-          "description": "HTTP path dispatch rules for requests to the application that do not explicitly target a service or version. Rules are order-dependent.@OutputOnly",
-          "type": "array",
-          "items": {
-            "$ref": "UrlDispatchRule"
-          }
-        },
-        "gcrDomain": {
-          "description": "The Google Container Registry domain used for storing managed build docker images for this application.",
-          "type": "string"
-        },
-        "name": {
-          "description": "Full path to the Application resource in the API. Example: apps/myapp.@OutputOnly",
-          "type": "string"
-        },
-        "defaultCookieExpiration": {
-          "description": "Cookie expiration policy for this application.",
-          "format": "google-duration",
-          "type": "string"
-        },
-        "id": {
-          "description": "Identifier of the Application resource. This identifier is equivalent to the project ID of the Google Cloud Platform project where you want to deploy your application. Example: myapp.",
-          "type": "string"
-        },
-        "locationId": {
-          "description": "Location from which this application will be run. Application instances will run out of data centers in the chosen location, which is also where all of the application's end user content is stored.Defaults to us-central.Options are:us-central - Central USeurope-west - Western Europeus-east1 - Eastern US",
-          "type": "string"
-        },
-        "servingStatus": {
-          "type": "string",
-          "enumDescriptions": [
-            "Serving status is unspecified.",
-            "Application is serving.",
-            "Application has been disabled by the user.",
-            "Application has been disabled by the system."
-          ],
-          "enum": [
-            "UNSPECIFIED",
-            "SERVING",
-            "USER_DISABLED",
-            "SYSTEM_DISABLED"
-          ],
-          "description": "Serving status of this application."
-        },
-        "defaultHostname": {
-          "description": "Hostname used to reach this application, as resolved by App Engine.@OutputOnly",
-          "type": "string"
-        }
-      },
-      "id": "Application"
-    },
-    "Instance": {
-      "id": "Instance",
-      "description": "An Instance resource is the computing unit that App Engine uses to automatically scale an application.",
-      "type": "object",
-      "properties": {
-        "vmName": {
-          "description": "Name of the virtual machine where this instance lives. Only applicable for instances in App Engine flexible environment.@OutputOnly",
-          "type": "string"
-        },
-        "vmId": {
-          "description": "Virtual machine ID of this instance. Only applicable for instances in App Engine flexible environment.@OutputOnly",
-          "type": "string"
-        },
-        "qps": {
-          "description": "Average queries per second (QPS) over the last minute.@OutputOnly",
-          "format": "float",
-          "type": "number"
-        },
-        "name": {
-          "description": "Full path to the Instance resource in the API. Example: apps/myapp/services/default/versions/v1/instances/instance-1.@OutputOnly",
-          "type": "string"
-        },
-        "vmZoneName": {
-          "description": "Zone where the virtual machine is located. Only applicable for instances in App Engine flexible environment.@OutputOnly",
-          "type": "string"
-        },
-        "averageLatency": {
-          "description": "Average latency (ms) over the last minute.@OutputOnly",
-          "format": "int32",
-          "type": "integer"
-        },
-        "vmIp": {
-          "description": "The IP address of this instance. Only applicable for instances in App Engine flexible environment.@OutputOnly",
-          "type": "string"
-        },
-        "memoryUsage": {
-          "description": "Total memory in use (bytes).@OutputOnly",
-          "format": "int64",
-          "type": "string"
-        },
-        "id": {
-          "description": "Relative name of the instance within the version. Example: instance-1.@OutputOnly",
-          "type": "string"
-        },
-        "errors": {
-          "description": "Number of errors since this instance was started.@OutputOnly",
-          "format": "int32",
-          "type": "integer"
-        },
-        "availability": {
-          "description": "Availability of the instance.@OutputOnly",
-          "type": "string",
-          "enumDescriptions": [
-            "",
-            "",
-            ""
-          ],
-          "enum": [
-            "UNSPECIFIED",
-            "RESIDENT",
-            "DYNAMIC"
-          ]
-        },
-        "vmStatus": {
-          "description": "Status of the virtual machine where this instance lives. Only applicable for instances in App Engine flexible environment.@OutputOnly",
-          "type": "string"
-        },
-        "startTime": {
-          "description": "Time that this instance was started.@OutputOnly",
-          "format": "google-datetime",
-          "type": "string"
-        },
-        "vmDebugEnabled": {
-          "type": "boolean",
-          "description": "Whether this instance is in debug mode. Only applicable for instances in App Engine flexible environment.@OutputOnly"
-        },
-        "requests": {
-          "description": "Number of requests since this instance was started.@OutputOnly",
-          "format": "int32",
-          "type": "integer"
-        },
-        "appEngineRelease": {
-          "description": "App Engine release this instance is running on.@OutputOnly",
-          "type": "string"
-        }
-      }
-    },
-    "LivenessCheck": {
-      "description": "Health checking configuration for VM instances. Unhealthy instances are killed and replaced with new instances.",
-      "type": "object",
-      "properties": {
-        "path": {
-          "type": "string",
-          "description": "The request path."
-        },
-        "host": {
-          "description": "Host header to send when performing a HTTP Liveness check. Example: \"myapp.appspot.com\"",
-          "type": "string"
-        },
-        "healthyThreshold": {
-          "description": "Number of consecutive successful checks required before considering the VM healthy.",
-          "format": "uint32",
-          "type": "integer"
-        },
-        "checkInterval": {
-          "type": "string",
-          "description": "Interval between health checks.",
-          "format": "google-duration"
-        },
-        "timeout": {
-          "type": "string",
-          "description": "Time before the check is considered failed.",
-          "format": "google-duration"
-        },
-        "initialDelay": {
-          "description": "The initial delay before starting to execute the checks.",
-          "format": "google-duration",
-          "type": "string"
-        },
-        "unhealthyThreshold": {
-          "description": "Number of consecutive failed checks required before considering the VM unhealthy.",
-          "format": "uint32",
-          "type": "integer"
-        }
-      },
-      "id": "LivenessCheck"
-    },
-    "NetworkUtilization": {
-      "description": "Target scaling by network usage. Only applicable for VM runtimes.",
-      "type": "object",
-      "properties": {
-        "targetSentBytesPerSecond": {
-          "description": "Target bytes sent per second.",
-          "format": "int32",
-          "type": "integer"
-        },
-        "targetSentPacketsPerSecond": {
-          "description": "Target packets sent per second.",
-          "format": "int32",
-          "type": "integer"
-        },
-        "targetReceivedBytesPerSecond": {
-          "description": "Target bytes received per second.",
-          "format": "int32",
-          "type": "integer"
-        },
-        "targetReceivedPacketsPerSecond": {
-          "type": "integer",
-          "description": "Target packets received per second.",
-          "format": "int32"
-        }
-      },
-      "id": "NetworkUtilization"
-    },
-    "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"
-        },
-        "locationId": {
-          "description": "The canonical id for this location. For example: \"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."
-          }
-        },
-        "labels": {
-          "additionalProperties": {
-            "type": "string"
-          },
-          "description": "Cross-service attributes for the location. For example\n{\"cloud.googleapis.com/region\": \"us-east1\"}\n",
-          "type": "object"
-        }
-      },
-      "id": "Location"
-    },
-    "HealthCheck": {
-      "description": "Health checking configuration for VM instances. Unhealthy instances are killed and replaced with new instances. Only applicable for instances in App Engine flexible environment.",
-      "type": "object",
-      "properties": {
-        "healthyThreshold": {
-          "description": "Number of consecutive successful health checks required before receiving traffic.",
-          "format": "uint32",
-          "type": "integer"
-        },
-        "restartThreshold": {
-          "description": "Number of consecutive failed health checks required before an instance is restarted.",
-          "format": "uint32",
-          "type": "integer"
-        },
-        "checkInterval": {
-          "description": "Interval between health checks.",
-          "format": "google-duration",
-          "type": "string"
-        },
-        "timeout": {
-          "description": "Time before the health check is considered failed.",
-          "format": "google-duration",
-          "type": "string"
-        },
-        "unhealthyThreshold": {
-          "description": "Number of consecutive failed health checks required before removing traffic.",
-          "format": "uint32",
-          "type": "integer"
-        },
-        "disableHealthCheck": {
-          "description": "Whether to explicitly disable health checks for this instance.",
-          "type": "boolean"
-        },
-        "host": {
-          "description": "Host header to send when performing an HTTP health check. Example: \"myapp.appspot.com\"",
-          "type": "string"
-        }
-      },
-      "id": "HealthCheck"
-    },
-    "ReadinessCheck": {
-      "properties": {
-        "timeout": {
-          "description": "Time before the check is considered failed.",
-          "format": "google-duration",
-          "type": "string"
-        },
-        "unhealthyThreshold": {
-          "description": "Number of consecutive failed checks required before removing traffic.",
-          "format": "uint32",
-          "type": "integer"
-        },
-        "path": {
-          "description": "The request path.",
-          "type": "string"
-        },
-        "host": {
-          "description": "Host header to send when performing a HTTP Readiness check. Example: \"myapp.appspot.com\"",
-          "type": "string"
-        },
-        "healthyThreshold": {
-          "description": "Number of consecutive successful checks required before receiving traffic.",
-          "format": "uint32",
-          "type": "integer"
-        },
-        "checkInterval": {
-          "description": "Interval between health checks.",
-          "format": "google-duration",
-          "type": "string"
-        }
-      },
-      "id": "ReadinessCheck",
-      "description": "Readiness checking configuration for VM instances. Unhealthy instances are removed from traffic rotation.",
-      "type": "object"
-    },
-    "DebugInstanceRequest": {
-      "properties": {
-        "sshKey": {
-          "description": "Public SSH key to add to the instance. Examples:\n[USERNAME]:ssh-rsa [KEY_VALUE] [USERNAME]\n[USERNAME]:ssh-rsa [KEY_VALUE] google-ssh {\"userName\":\"[USERNAME]\",\"expireOn\":\"[EXPIRE_TIME]\"}For more information, see Adding and Removing SSH Keys (https://cloud.google.com/compute/docs/instances/adding-removing-ssh-keys).",
-          "type": "string"
-        }
-      },
-      "id": "DebugInstanceRequest",
-      "description": "Request message for Instances.DebugInstance.",
-      "type": "object"
-    },
-    "OperationMetadataV1Beta5": {
-      "type": "object",
-      "properties": {
-        "insertTime": {
-          "description": "Timestamp that this operation was created.@OutputOnly",
-          "format": "google-datetime",
-          "type": "string"
-        },
-        "endTime": {
-          "type": "string",
-          "description": "Timestamp that this operation completed.@OutputOnly",
-          "format": "google-datetime"
-        },
-        "user": {
-          "description": "User who requested this operation.@OutputOnly",
-          "type": "string"
-        },
-        "target": {
-          "description": "Name of the resource that this operation is acting on. Example: apps/myapp/services/default.@OutputOnly",
-          "type": "string"
-        },
-        "method": {
-          "type": "string",
-          "description": "API method name that initiated this operation. Example: google.appengine.v1beta5.Version.CreateVersion.@OutputOnly"
-        }
-      },
-      "id": "OperationMetadataV1Beta5",
-      "description": "Metadata for the given google.longrunning.Operation."
-    },
-    "Version": {
-      "description": "A Version resource is a specific set of source code and configuration files that are deployed into a service.",
-      "type": "object",
-      "properties": {
-        "versionUrl": {
-          "description": "Serving URL for this version. Example: \"https://myversion-dot-myservice-dot-myapp.appspot.com\"@OutputOnly",
-          "type": "string"
-        },
-        "vm": {
-          "description": "Whether to deploy this version in a container on a virtual machine.",
-          "type": "boolean"
-        },
-        "instanceClass": {
-          "description": "Instance class that is used to run this version. Valid values are:\nAutomaticScaling: F1, F2, F4, F4_1G\nManualScaling or BasicScaling: B1, B2, B4, B8, B4_1GDefaults to F1 for AutomaticScaling and B1 for ManualScaling or BasicScaling.",
-          "type": "string"
-        },
-        "servingStatus": {
-          "enumDescriptions": [
-            "Not specified.",
-            "Currently serving. Instances are created according to the scaling settings of the version.",
-            "Disabled. No instances will be created and the scaling settings are ignored until the state of the version changes to SERVING."
-          ],
-          "enum": [
-            "SERVING_STATUS_UNSPECIFIED",
-            "SERVING",
-            "STOPPED"
-          ],
-          "description": "Current serving status of this version. Only the versions with a SERVING status create instances and can be billed.SERVING_STATUS_UNSPECIFIED is an invalid value. Defaults to SERVING.",
-          "type": "string"
-        },
-        "deployment": {
-          "description": "Code and application artifacts that make up this version.Only returned in GET requests if view=FULL is set.",
-          "$ref": "Deployment"
-        },
-        "createTime": {
-          "type": "string",
-          "description": "Time that this version was created.@OutputOnly",
-          "format": "google-datetime"
-        },
-        "resources": {
-          "$ref": "Resources",
-          "description": "Machine resources for this version. Only applicable for VM runtimes."
-        },
-        "inboundServices": {
-          "description": "Before an application can receive email or XMPP messages, the application must be configured to enable the service.",
-          "type": "array",
-          "items": {
-            "type": "string",
-            "enum": [
-              "INBOUND_SERVICE_UNSPECIFIED",
-              "INBOUND_SERVICE_MAIL",
-              "INBOUND_SERVICE_MAIL_BOUNCE",
-              "INBOUND_SERVICE_XMPP_ERROR",
-              "INBOUND_SERVICE_XMPP_MESSAGE",
-              "INBOUND_SERVICE_XMPP_SUBSCRIBE",
-              "INBOUND_SERVICE_XMPP_PRESENCE",
-              "INBOUND_SERVICE_CHANNEL_PRESENCE",
-              "INBOUND_SERVICE_WARMUP"
-            ]
-          },
-          "enumDescriptions": [
-            "Not specified.",
-            "Allows an application to receive mail.",
-            "Allows an application to receive email-bound notifications.",
-            "Allows an application to receive error stanzas.",
-            "Allows an application to receive instant messages.",
-            "Allows an application to receive user subscription POSTs.",
-            "Allows an application to receive a user's chat presence.",
-            "Registers an application for notifications when a client connects or disconnects from a channel.",
-            "Enables warmup requests."
-          ]
-        },
-        "errorHandlers": {
-          "description": "Custom static error pages. Limited to 10KB per page.Only returned in GET requests if view=FULL is set.",
-          "type": "array",
-          "items": {
-            "$ref": "ErrorHandler"
-          }
-        },
-        "defaultExpiration": {
-          "description": "Duration that static files should be cached by web proxies and browsers. Only applicable if the corresponding StaticFilesHandler (https://cloud.google.com/appengine/docs/admin-api/reference/rest/v1beta/apps.services.versions#staticfileshandler) does not specify its own expiration time.Only returned in GET requests if view=FULL is set.",
-          "format": "google-duration",
-          "type": "string"
-        },
-        "libraries": {
-          "description": "Configuration for third-party Python runtime libraries that are required by the application.Only returned in GET requests if view=FULL is set.",
-          "type": "array",
-          "items": {
-            "$ref": "Library"
-          }
-        },
-        "nobuildFilesRegex": {
-          "description": "Files that match this pattern will not be built into this version. Only applicable for Go runtimes.Only returned in GET requests if view=FULL is set.",
-          "type": "string"
-        },
-        "basicScaling": {
-          "description": "A service with basic scaling will create an instance when the application receives a request. The instance will be turned down when the app becomes idle. Basic scaling is ideal for work that is intermittent or driven by user activity.",
-          "$ref": "BasicScaling"
-        },
-        "runtime": {
-          "description": "Desired runtime. Example: python27.",
-          "type": "string"
-        },
-        "createdBy": {
-          "description": "Email address of the user who created this version.@OutputOnly",
-          "type": "string"
-        },
-        "id": {
-          "type": "string",
-          "description": "Relative name of the version within the service. Example: v1. Version names can contain only lowercase letters, numbers, or hyphens. Reserved names: \"default\", \"latest\", and any name with the prefix \"ah-\"."
-        },
-        "envVariables": {
-          "additionalProperties": {
-            "type": "string"
-          },
-          "description": "Environment variables available to the application.Only returned in GET requests if view=FULL is set.",
-          "type": "object"
-        },
-        "livenessCheck": {
-          "$ref": "LivenessCheck",
-          "description": "Configures liveness health checking for VM instances. Unhealthy instances are stopped and replaced with new instancesOnly returned in GET requests if view=FULL is set."
-        },
-        "network": {
-          "$ref": "Network",
-          "description": "Extra network settings. Only applicable for VM runtimes."
-        },
-        "betaSettings": {
-          "description": "Metadata settings that are supplied to this version to enable beta runtime features.",
-          "type": "object",
-          "additionalProperties": {
-            "type": "string"
-          }
-        },
-        "env": {
-          "description": "App Engine execution environment for this version.Defaults to standard.",
-          "type": "string"
-        },
-        "handlers": {
-          "description": "An ordered list of URL-matching patterns that should be applied to incoming requests. The first matching URL handles the request and other request handlers are not attempted.Only returned in GET requests if view=FULL is set.",
-          "type": "array",
-          "items": {
-            "$ref": "UrlMap"
-          }
-        },
-        "automaticScaling": {
-          "$ref": "AutomaticScaling",
-          "description": "Automatic scaling is based on request rate, response latencies, and other application metrics."
-        },
-        "diskUsageBytes": {
-          "description": "Total size in bytes of all the files that are included in this version and curerntly hosted on the App Engine disk.@OutputOnly",
-          "format": "int64",
-          "type": "string"
-        },
-        "healthCheck": {
-          "description": "Configures health checking for VM instances. Unhealthy instances are stopped and replaced with new instances. Only applicable for VM runtimes.Only returned in GET requests if view=FULL is set.",
-          "$ref": "HealthCheck"
-        },
-        "threadsafe": {
-          "description": "Whether multiple requests can be dispatched to this version at once.",
-          "type": "boolean"
-        },
-        "readinessCheck": {
-          "description": "Configures readiness health checking for VM instances. Unhealthy instances are not put into the backend traffic rotation.Only returned in GET requests if view=FULL is set.",
-          "$ref": "ReadinessCheck"
-        },
-        "manualScaling": {
-          "description": "A service with manual scaling runs continuously, allowing you to perform complex initialization and rely on the state of its memory over time.",
-          "$ref": "ManualScaling"
-        },
-        "name": {
-          "description": "Full path to the Version resource in the API. Example: apps/myapp/services/default/versions/v1.@OutputOnly",
-          "type": "string"
-        },
-        "apiConfig": {
-          "$ref": "ApiConfigHandler",
-          "description": "Serving configuration for Google Cloud Endpoints (https://cloud.google.com/appengine/docs/python/endpoints/).Only returned in GET requests if view=FULL is set."
-        },
-        "endpointsApiService": {
-          "$ref": "EndpointsApiService",
-          "description": "Cloud Endpoints configuration.If endpoints_api_service is set, the Cloud Endpoints Extensible Service Proxy will be provided to serve the API implemented by the app."
-        }
-      },
-      "id": "Version"
-    },
-    "RepairApplicationRequest": {
-      "description": "Request message for 'Applications.RepairApplication'.",
-      "type": "object",
-      "properties": {},
-      "id": "RepairApplicationRequest"
-    },
-    "FileInfo": {
-      "type": "object",
-      "properties": {
-        "sha1Sum": {
-          "description": "The SHA1 hash of the file, in hex.",
-          "type": "string"
-        },
-        "mimeType": {
-          "type": "string",
-          "description": "The MIME type of the file.Defaults to the value from Google Cloud Storage."
-        },
-        "sourceUrl": {
-          "description": "URL source to use to fetch this file. Must be a URL to a resource in Google Cloud Storage in the form 'http(s)://storage.googleapis.com/\u003cbucket\u003e/\u003cobject\u003e'.",
-          "type": "string"
-        }
-      },
-      "id": "FileInfo",
-      "description": "Single source file that is part of the version to be deployed. Each source file that is deployed must be specified separately."
-    },
-    "ScriptHandler": {
-      "type": "object",
-      "properties": {
-        "scriptPath": {
-          "type": "string",
-          "description": "Path to the script from the application root directory."
-        }
-      },
-      "id": "ScriptHandler",
-      "description": "Executes a script to handle the request that matches the URL pattern."
-    },
-    "OperationMetadataExperimental": {
-      "description": "Metadata for the given google.longrunning.Operation.",
-      "type": "object",
-      "properties": {
-        "user": {
-          "type": "string",
-          "description": "User who requested this operation.@OutputOnly"
-        },
-        "target": {
-          "type": "string",
-          "description": "Name of the resource that this operation is acting on. Example: apps/myapp/customDomains/example.com.@OutputOnly"
-        },
-        "method": {
-          "description": "API method that initiated this operation. Example: google.appengine.experimental.CustomDomains.CreateCustomDomain.@OutputOnly",
-          "type": "string"
-        },
-        "insertTime": {
-          "description": "Time that this operation was created.@OutputOnly",
-          "format": "google-datetime",
-          "type": "string"
-        },
-        "endTime": {
-          "description": "Time that this operation completed.@OutputOnly",
-          "format": "google-datetime",
-          "type": "string"
-        }
-      },
-      "id": "OperationMetadataExperimental"
-    },
-    "TrafficSplit": {
-      "type": "object",
-      "properties": {
-        "shardBy": {
-          "enum": [
-            "UNSPECIFIED",
-            "COOKIE",
-            "IP",
-            "RANDOM"
-          ],
-          "description": "Mechanism used to determine which version a request is sent to. The traffic selection algorithm will be stable for either type until allocations are changed.",
-          "type": "string",
-          "enumDescriptions": [
-            "Diversion method unspecified.",
-            "Diversion based on a specially named cookie, \"GOOGAPPUID.\" The cookie must be set by the application itself or no diversion will occur.",
-            "Diversion based on applying the modulus operation to a fingerprint of the IP address.",
-            "Diversion based on weighted random assignment. An incoming request is randomly routed to a version in the traffic split, with probability proportional to the version's traffic share."
-          ]
-        },
-        "allocations": {
-          "additionalProperties": {
-            "format": "double",
-            "type": "number"
-          },
-          "description": "Mapping from version IDs within the service to fractional (0.000, 1] allocations of traffic for that version. Each version can be specified only once, but some versions in the service may not have any traffic allocation. Services that have traffic allocated cannot be deleted until either the service is deleted or their traffic allocation is removed. Allocations must sum to 1. Up to two decimal place precision is supported for IP-based splits and up to three decimal places is supported for cookie-based splits.",
-          "type": "object"
-        }
-      },
-      "id": "TrafficSplit",
-      "description": "Traffic routing configuration for versions within a single service. Traffic splits define how traffic directed to the service is assigned to versions."
-    },
-    "OperationMetadataV1Beta": {
-      "description": "Metadata for the given google.longrunning.Operation.",
-      "type": "object",
-      "properties": {
-        "warning": {
-          "description": "Durable messages that persist on every operation poll. @OutputOnly",
-          "type": "array",
-          "items": {
-            "type": "string"
-          }
-        },
-        "insertTime": {
-          "description": "Time that this operation was created.@OutputOnly",
-          "format": "google-datetime",
-          "type": "string"
-        },
-        "target": {
-          "description": "Name of the resource that this operation is acting on. Example: apps/myapp/services/default.@OutputOnly",
-          "type": "string"
-        },
-        "user": {
-          "description": "User who requested this operation.@OutputOnly",
-          "type": "string"
-        },
-        "ephemeralMessage": {
-          "description": "Ephemeral message that may change every time the operation is polled. @OutputOnly",
-          "type": "string"
-        },
-        "method": {
-          "description": "API method that initiated this operation. Example: google.appengine.v1beta.Versions.CreateVersion.@OutputOnly",
-          "type": "string"
-        },
-        "endTime": {
-          "description": "Time that this operation completed.@OutputOnly",
-          "format": "google-datetime",
-          "type": "string"
-        }
-      },
-      "id": "OperationMetadataV1Beta"
-    },
-    "ListServicesResponse": {
-      "description": "Response message for Services.ListServices.",
-      "type": "object",
-      "properties": {
-        "services": {
-          "description": "The services belonging to the requested application.",
-          "type": "array",
-          "items": {
-            "$ref": "Service"
-          }
-        },
-        "nextPageToken": {
-          "description": "Continuation token for fetching the next page of results.",
-          "type": "string"
-        }
-      },
-      "id": "ListServicesResponse"
-    },
-    "Deployment": {
-      "description": "Code and application artifacts used to deploy a version to App Engine.",
-      "type": "object",
-      "properties": {
-        "zip": {
-          "$ref": "ZipInfo",
-          "description": "The zip file for this deployment, if this is a zip deployment."
-        },
-        "container": {
-          "$ref": "ContainerInfo",
-          "description": "The Docker image for the container that runs the version. Only applicable for instances running in the App Engine flexible environment."
-        },
-        "files": {
-          "description": "Manifest of the files stored in Google Cloud Storage that are included as part of this version. All files must be readable using the credentials supplied with this call.",
-          "type": "object",
-          "additionalProperties": {
-            "$ref": "FileInfo"
-          }
-        }
-      },
-      "id": "Deployment"
-    },
-    "Resources": {
-      "description": "Machine resources for a version.",
-      "type": "object",
-      "properties": {
-        "volumes": {
-          "description": "User specified volumes.",
-          "type": "array",
-          "items": {
-            "$ref": "Volume"
-          }
-        },
-        "diskGb": {
-          "description": "Disk size (GB) needed.",
-          "format": "double",
-          "type": "number"
-        },
-        "cpu": {
-          "description": "Number of CPU cores needed.",
-          "format": "double",
-          "type": "number"
-        },
-        "memoryGb": {
-          "description": "Memory (GB) needed.",
-          "format": "double",
-          "type": "number"
-        }
-      },
-      "id": "Resources"
-    },
-    "Volume": {
-      "properties": {
-        "sizeGb": {
-          "description": "Volume size in gigabytes.",
-          "format": "double",
-          "type": "number"
-        },
-        "name": {
-          "description": "Unique name for the volume.",
-          "type": "string"
-        },
-        "volumeType": {
-          "description": "Underlying volume type, e.g. 'tmpfs'.",
-          "type": "string"
-        }
-      },
-      "id": "Volume",
-      "description": "Volumes mounted within the app container. Only applicable for VM runtimes.",
-      "type": "object"
-    },
-    "ListInstancesResponse": {
-      "description": "Response message for Instances.ListInstances.",
-      "type": "object",
-      "properties": {
-        "instances": {
-          "description": "The instances belonging to the requested version.",
-          "type": "array",
-          "items": {
+           },
+           "parameterOrder": [
+            "appsId",
+            "servicesId",
+            "versionsId",
+            "instancesId"
+           ],
+           "response": {
             "$ref": "Instance"
+           },
+           "scopes": [
+            "https://www.googleapis.com/auth/appengine.admin",
+            "https://www.googleapis.com/auth/cloud-platform",
+            "https://www.googleapis.com/auth/cloud-platform.read-only"
+           ]
+          },
+          "delete": {
+           "id": "appengine.apps.services.versions.instances.delete",
+           "path": "v1beta/apps/{appsId}/services/{servicesId}/versions/{versionsId}/instances/{instancesId}",
+           "httpMethod": "DELETE",
+           "description": "Stops a running instance.",
+           "parameters": {
+            "appsId": {
+             "type": "string",
+             "description": "Part of `name`. Name of the resource requested. Example: apps/myapp/services/default/versions/v1/instances/instance-1.",
+             "required": true,
+             "location": "path"
+            },
+            "servicesId": {
+             "type": "string",
+             "description": "Part of `name`. See documentation of `appsId`.",
+             "required": true,
+             "location": "path"
+            },
+            "versionsId": {
+             "type": "string",
+             "description": "Part of `name`. See documentation of `appsId`.",
+             "required": true,
+             "location": "path"
+            },
+            "instancesId": {
+             "type": "string",
+             "description": "Part of `name`. See documentation of `appsId`.",
+             "required": true,
+             "location": "path"
+            }
+           },
+           "parameterOrder": [
+            "appsId",
+            "servicesId",
+            "versionsId",
+            "instancesId"
+           ],
+           "response": {
+            "$ref": "Operation"
+           },
+           "scopes": [
+            "https://www.googleapis.com/auth/cloud-platform"
+           ]
+          },
+          "debug": {
+           "id": "appengine.apps.services.versions.instances.debug",
+           "path": "v1beta/apps/{appsId}/services/{servicesId}/versions/{versionsId}/instances/{instancesId}:debug",
+           "httpMethod": "POST",
+           "description": "Enables debugging on a VM instance. This allows you to use the SSH command to connect to the virtual machine where the instance lives. While in \"debug mode\", the instance continues to serve live traffic. You should delete the instance when you are done debugging and then allow the system to take over and determine if another instance should be started.Only applicable for instances in App Engine flexible environment.",
+           "parameters": {
+            "appsId": {
+             "type": "string",
+             "description": "Part of `name`. Name of the resource requested. Example: apps/myapp/services/default/versions/v1/instances/instance-1.",
+             "required": true,
+             "location": "path"
+            },
+            "servicesId": {
+             "type": "string",
+             "description": "Part of `name`. See documentation of `appsId`.",
+             "required": true,
+             "location": "path"
+            },
+            "versionsId": {
+             "type": "string",
+             "description": "Part of `name`. See documentation of `appsId`.",
+             "required": true,
+             "location": "path"
+            },
+            "instancesId": {
+             "type": "string",
+             "description": "Part of `name`. See documentation of `appsId`.",
+             "required": true,
+             "location": "path"
+            }
+           },
+           "parameterOrder": [
+            "appsId",
+            "servicesId",
+            "versionsId",
+            "instancesId"
+           ],
+           "request": {
+            "$ref": "DebugInstanceRequest"
+           },
+           "response": {
+            "$ref": "Operation"
+           },
+           "scopes": [
+            "https://www.googleapis.com/auth/cloud-platform"
+           ]
           }
-        },
-        "nextPageToken": {
-          "description": "Continuation token for fetching the next page of results.",
-          "type": "string"
+         }
         }
-      },
-      "id": "ListInstancesResponse"
-    },
-    "OperationMetadataV1Alpha": {
-      "description": "Metadata for the given google.longrunning.Operation.",
-      "type": "object",
-      "properties": {
-        "user": {
-          "description": "User who requested this operation.@OutputOnly",
-          "type": "string"
-        },
-        "target": {
-          "description": "Name of the resource that this operation is acting on. Example: apps/myapp/services/default.@OutputOnly",
-          "type": "string"
-        },
-        "ephemeralMessage": {
-          "description": "Ephemeral message that may change every time the operation is polled. @OutputOnly",
-          "type": "string"
-        },
-        "method": {
-          "description": "API method that initiated this operation. Example: google.appengine.v1alpha.Versions.CreateVersion.@OutputOnly",
-          "type": "string"
-        },
-        "endTime": {
-          "description": "Time that this operation completed.@OutputOnly",
-          "format": "google-datetime",
-          "type": "string"
-        },
-        "insertTime": {
-          "description": "Time that this operation was created.@OutputOnly",
-          "format": "google-datetime",
-          "type": "string"
-        },
-        "warning": {
-          "description": "Durable messages that persist on every operation poll. @OutputOnly",
-          "type": "array",
-          "items": {
-            "type": "string"
-          }
-        }
-      },
-      "id": "OperationMetadataV1Alpha"
-    },
-    "UrlDispatchRule": {
-      "id": "UrlDispatchRule",
-      "description": "Rules to match an HTTP request and dispatch that request to a service.",
-      "type": "object",
-      "properties": {
-        "path": {
-          "description": "Pathname within the host. Must start with a \"/\". A single \"*\" can be included at the end of the path. The sum of the lengths of the domain and path may not exceed 100 characters.",
-          "type": "string"
-        },
-        "domain": {
-          "description": "Domain name to match against. The wildcard \"*\" is supported if specified before a period: \"*.\".Defaults to matching all domains: \"*\".",
-          "type": "string"
-        },
-        "service": {
-          "description": "Resource ID of a service in this application that should serve the matched request. The service must already exist. Example: default.",
-          "type": "string"
-        }
+       }
       }
+     }
     },
-    "ListVersionsResponse": {
-      "description": "Response message for Versions.ListVersions.",
-      "type": "object",
-      "properties": {
-        "versions": {
-          "description": "The versions belonging to the requested service.",
-          "type": "array",
-          "items": {
-            "$ref": "Version"
-          }
+    "authorizedDomains": {
+     "methods": {
+      "list": {
+       "id": "appengine.apps.authorizedDomains.list",
+       "path": "v1beta/apps/{appsId}/authorizedDomains",
+       "httpMethod": "GET",
+       "description": "Lists all domains the user is authorized to administer.",
+       "parameters": {
+        "appsId": {
+         "type": "string",
+         "description": "Part of `parent`. Name of the parent Application resource. Example: apps/myapp.",
+         "required": true,
+         "location": "path"
         },
-        "nextPageToken": {
-          "description": "Continuation token for fetching the next page of results.",
-          "type": "string"
+        "pageSize": {
+         "type": "integer",
+         "description": "Maximum results to return per page.",
+         "format": "int32",
+         "location": "query"
+        },
+        "pageToken": {
+         "type": "string",
+         "description": "Continuation token for fetching the next page of results.",
+         "location": "query"
         }
-      },
-      "id": "ListVersionsResponse"
-    },
-    "ApiEndpointHandler": {
-      "description": "Uses Google Cloud Endpoints to handle requests.",
-      "type": "object",
-      "properties": {
-        "scriptPath": {
-          "description": "Path to the script from the application root directory.",
-          "type": "string"
-        }
-      },
-      "id": "ApiEndpointHandler"
-    },
-    "ZipInfo": {
-      "description": "The zip file information for a zip deployment.",
-      "type": "object",
-      "properties": {
-        "filesCount": {
-          "description": "An estimate of the number of files in a zip for a zip deployment. If set, must be greater than or equal to the actual number of files. Used for optimizing performance; if not provided, deployment may be slow.",
-          "format": "int32",
-          "type": "integer"
-        },
-        "sourceUrl": {
-          "description": "URL of the zip file to deploy from. Must be a URL to a resource in Google Cloud Storage in the form 'http(s)://storage.googleapis.com/\u003cbucket\u003e/\u003cobject\u003e'.",
-          "type": "string"
-        }
-      },
-      "id": "ZipInfo"
-    },
-    "AutomaticScaling": {
-      "description": "Automatic scaling is based on request rate, response latencies, and other application metrics.",
-      "type": "object",
-      "properties": {
-        "diskUtilization": {
-          "description": "Target scaling by disk usage.",
-          "$ref": "DiskUtilization"
-        },
-        "minPendingLatency": {
-          "description": "Minimum amount of time a request should wait in the pending queue before starting a new instance to handle it.",
-          "format": "google-duration",
-          "type": "string"
-        },
-        "maxIdleInstances": {
-          "description": "Maximum number of idle instances that should be maintained for this version.",
-          "format": "int32",
-          "type": "integer"
-        },
-        "requestUtilization": {
-          "$ref": "RequestUtilization",
-          "description": "Target scaling by request utilization."
-        },
-        "minIdleInstances": {
-          "description": "Minimum number of idle instances that should be maintained for this version. Only applicable for the default version of a service.",
-          "format": "int32",
-          "type": "integer"
-        },
-        "maxTotalInstances": {
-          "description": "Maximum number of instances that should be started to handle requests.",
-          "format": "int32",
-          "type": "integer"
-        },
-        "minTotalInstances": {
-          "description": "Minimum number of instances that should be maintained for this version.",
-          "format": "int32",
-          "type": "integer"
-        },
-        "networkUtilization": {
-          "$ref": "NetworkUtilization",
-          "description": "Target scaling by network usage."
-        },
-        "coolDownPeriod": {
-          "description": "Amount of time that the Autoscaler (https://cloud.google.com/compute/docs/autoscaler/) should wait between changes to the number of virtual machines. Only applicable for VM runtimes.",
-          "format": "google-duration",
-          "type": "string"
-        },
-        "maxConcurrentRequests": {
-          "description": "Number of concurrent requests an automatic scaling instance can accept before the scheduler spawns a new instance.Defaults to a runtime-specific value.",
-          "format": "int32",
-          "type": "integer"
-        },
-        "maxPendingLatency": {
-          "description": "Maximum amount of time that a request should wait in the pending queue before starting a new instance to handle it.",
-          "format": "google-duration",
-          "type": "string"
-        },
-        "cpuUtilization": {
-          "$ref": "CpuUtilization",
-          "description": "Target scaling by CPU usage."
-        }
-      },
-      "id": "AutomaticScaling"
-    },
-    "Library": {
-      "type": "object",
-      "properties": {
-        "name": {
-          "description": "Name of the library. Example: \"django\".",
-          "type": "string"
-        },
-        "version": {
-          "description": "Version of the library to select, or \"latest\".",
-          "type": "string"
-        }
-      },
-      "id": "Library",
-      "description": "Third-party Python runtime library that is required by the application."
-    }
-  },
-  "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",
-  "version": "v1beta",
-  "baseUrl": "https://appengine.googleapis.com/",
-  "auth": {
-    "oauth2": {
-      "scopes": {
-        "https://www.googleapis.com/auth/appengine.admin": {
-          "description": "View and manage your applications deployed on Google App Engine"
-        },
-        "https://www.googleapis.com/auth/cloud-platform.read-only": {
-          "description": "View your data across Google Cloud Platform services"
-        },
-        "https://www.googleapis.com/auth/cloud-platform": {
-          "description": "View and manage your data across Google Cloud Platform services"
-        }
+       },
+       "parameterOrder": [
+        "appsId"
+       ],
+       "response": {
+        "$ref": "ListAuthorizedDomainsResponse"
+       },
+       "scopes": [
+        "https://www.googleapis.com/auth/appengine.admin",
+        "https://www.googleapis.com/auth/cloud-platform",
+        "https://www.googleapis.com/auth/cloud-platform.read-only"
+       ]
       }
+     }
+    },
+    "authorizedCertificates": {
+     "methods": {
+      "list": {
+       "id": "appengine.apps.authorizedCertificates.list",
+       "path": "v1beta/apps/{appsId}/authorizedCertificates",
+       "httpMethod": "GET",
+       "description": "Lists all SSL certificates the user is authorized to administer.",
+       "parameters": {
+        "appsId": {
+         "type": "string",
+         "description": "Part of `parent`. Name of the parent Application resource. Example: apps/myapp.",
+         "required": true,
+         "location": "path"
+        },
+        "pageSize": {
+         "type": "integer",
+         "description": "Maximum results to return per page.",
+         "format": "int32",
+         "location": "query"
+        },
+        "pageToken": {
+         "type": "string",
+         "description": "Continuation token for fetching the next page of results.",
+         "location": "query"
+        }
+       },
+       "parameterOrder": [
+        "appsId"
+       ],
+       "response": {
+        "$ref": "ListAuthorizedCertificatesResponse"
+       },
+       "scopes": [
+        "https://www.googleapis.com/auth/appengine.admin",
+        "https://www.googleapis.com/auth/cloud-platform",
+        "https://www.googleapis.com/auth/cloud-platform.read-only"
+       ]
+      },
+      "get": {
+       "id": "appengine.apps.authorizedCertificates.get",
+       "path": "v1beta/apps/{appsId}/authorizedCertificates/{authorizedCertificatesId}",
+       "httpMethod": "GET",
+       "description": "Gets the specified SSL certificate.",
+       "parameters": {
+        "appsId": {
+         "type": "string",
+         "description": "Part of `name`. Name of the resource requested. Example: apps/myapp/authorizedCertificates/12345.",
+         "required": true,
+         "location": "path"
+        },
+        "authorizedCertificatesId": {
+         "type": "string",
+         "description": "Part of `name`. See documentation of `appsId`.",
+         "required": true,
+         "location": "path"
+        },
+        "view": {
+         "type": "string",
+         "description": "Controls the set of fields returned in the GET response.",
+         "enum": [
+          "BASIC_CERTIFICATE",
+          "FULL_CERTIFICATE"
+         ],
+         "location": "query"
+        }
+       },
+       "parameterOrder": [
+        "appsId",
+        "authorizedCertificatesId"
+       ],
+       "response": {
+        "$ref": "AuthorizedCertificate"
+       },
+       "scopes": [
+        "https://www.googleapis.com/auth/appengine.admin",
+        "https://www.googleapis.com/auth/cloud-platform",
+        "https://www.googleapis.com/auth/cloud-platform.read-only"
+       ]
+      },
+      "create": {
+       "id": "appengine.apps.authorizedCertificates.create",
+       "path": "v1beta/apps/{appsId}/authorizedCertificates",
+       "httpMethod": "POST",
+       "description": "Uploads the specified SSL certificate.",
+       "parameters": {
+        "appsId": {
+         "type": "string",
+         "description": "Part of `parent`. Name of the parent Application resource. Example: apps/myapp.",
+         "required": true,
+         "location": "path"
+        }
+       },
+       "parameterOrder": [
+        "appsId"
+       ],
+       "request": {
+        "$ref": "AuthorizedCertificate"
+       },
+       "response": {
+        "$ref": "AuthorizedCertificate"
+       },
+       "scopes": [
+        "https://www.googleapis.com/auth/cloud-platform"
+       ]
+      },
+      "patch": {
+       "id": "appengine.apps.authorizedCertificates.patch",
+       "path": "v1beta/apps/{appsId}/authorizedCertificates/{authorizedCertificatesId}",
+       "httpMethod": "PATCH",
+       "description": "Updates the specified SSL certificate. To renew a certificate and maintain its existing domain mappings, update certificate_data with a new certificate. The new certificate must be applicable to the same domains as the original certificate. The certificate display_name may also be updated.",
+       "parameters": {
+        "appsId": {
+         "type": "string",
+         "description": "Part of `name`. Name of the resource to update. Example: apps/myapp/authorizedCertificates/12345.",
+         "required": true,
+         "location": "path"
+        },
+        "authorizedCertificatesId": {
+         "type": "string",
+         "description": "Part of `name`. See documentation of `appsId`.",
+         "required": true,
+         "location": "path"
+        },
+        "updateMask": {
+         "type": "string",
+         "description": "Standard field mask for the set of fields to be updated. Updates are only supported on the certificate_raw_data and display_name fields.",
+         "location": "query"
+        }
+       },
+       "parameterOrder": [
+        "appsId",
+        "authorizedCertificatesId"
+       ],
+       "request": {
+        "$ref": "AuthorizedCertificate"
+       },
+       "response": {
+        "$ref": "AuthorizedCertificate"
+       },
+       "scopes": [
+        "https://www.googleapis.com/auth/cloud-platform"
+       ]
+      },
+      "delete": {
+       "id": "appengine.apps.authorizedCertificates.delete",
+       "path": "v1beta/apps/{appsId}/authorizedCertificates/{authorizedCertificatesId}",
+       "httpMethod": "DELETE",
+       "description": "Deletes the specified SSL certificate.",
+       "parameters": {
+        "appsId": {
+         "type": "string",
+         "description": "Part of `name`. Name of the resource to delete. Example: apps/myapp/authorizedCertificates/12345.",
+         "required": true,
+         "location": "path"
+        },
+        "authorizedCertificatesId": {
+         "type": "string",
+         "description": "Part of `name`. See documentation of `appsId`.",
+         "required": true,
+         "location": "path"
+        }
+       },
+       "parameterOrder": [
+        "appsId",
+        "authorizedCertificatesId"
+       ],
+       "response": {
+        "$ref": "Empty"
+       },
+       "scopes": [
+        "https://www.googleapis.com/auth/cloud-platform"
+       ]
+      }
+     }
+    },
+    "domainMappings": {
+     "methods": {
+      "list": {
+       "id": "appengine.apps.domainMappings.list",
+       "path": "v1beta/apps/{appsId}/domainMappings",
+       "httpMethod": "GET",
+       "description": "Lists the domain mappings on an application.",
+       "parameters": {
+        "appsId": {
+         "type": "string",
+         "description": "Part of `parent`. Name of the parent Application resource. Example: apps/myapp.",
+         "required": true,
+         "location": "path"
+        },
+        "pageSize": {
+         "type": "integer",
+         "description": "Maximum results to return per page.",
+         "format": "int32",
+         "location": "query"
+        },
+        "pageToken": {
+         "type": "string",
+         "description": "Continuation token for fetching the next page of results.",
+         "location": "query"
+        }
+       },
+       "parameterOrder": [
+        "appsId"
+       ],
+       "response": {
+        "$ref": "ListDomainMappingsResponse"
+       },
+       "scopes": [
+        "https://www.googleapis.com/auth/appengine.admin",
+        "https://www.googleapis.com/auth/cloud-platform",
+        "https://www.googleapis.com/auth/cloud-platform.read-only"
+       ]
+      },
+      "get": {
+       "id": "appengine.apps.domainMappings.get",
+       "path": "v1beta/apps/{appsId}/domainMappings/{domainMappingsId}",
+       "httpMethod": "GET",
+       "description": "Gets the specified domain mapping.",
+       "parameters": {
+        "appsId": {
+         "type": "string",
+         "description": "Part of `name`. Name of the resource requested. Example: apps/myapp/domainMappings/example.com.",
+         "required": true,
+         "location": "path"
+        },
+        "domainMappingsId": {
+         "type": "string",
+         "description": "Part of `name`. See documentation of `appsId`.",
+         "required": true,
+         "location": "path"
+        }
+       },
+       "parameterOrder": [
+        "appsId",
+        "domainMappingsId"
+       ],
+       "response": {
+        "$ref": "DomainMapping"
+       },
+       "scopes": [
+        "https://www.googleapis.com/auth/appengine.admin",
+        "https://www.googleapis.com/auth/cloud-platform",
+        "https://www.googleapis.com/auth/cloud-platform.read-only"
+       ]
+      },
+      "create": {
+       "id": "appengine.apps.domainMappings.create",
+       "path": "v1beta/apps/{appsId}/domainMappings",
+       "httpMethod": "POST",
+       "description": "Maps a domain to an application. A user must be authorized to administer a domain in order to map it to an application. For a list of available authorized domains, see AuthorizedDomains.ListAuthorizedDomains.",
+       "parameters": {
+        "appsId": {
+         "type": "string",
+         "description": "Part of `parent`. Name of the parent Application resource. Example: apps/myapp.",
+         "required": true,
+         "location": "path"
+        }
+       },
+       "parameterOrder": [
+        "appsId"
+       ],
+       "request": {
+        "$ref": "DomainMapping"
+       },
+       "response": {
+        "$ref": "Operation"
+       },
+       "scopes": [
+        "https://www.googleapis.com/auth/cloud-platform"
+       ]
+      },
+      "patch": {
+       "id": "appengine.apps.domainMappings.patch",
+       "path": "v1beta/apps/{appsId}/domainMappings/{domainMappingsId}",
+       "httpMethod": "PATCH",
+       "description": "Updates the specified domain mapping. To map an SSL certificate to a domain mapping, update certificate_id to point to an AuthorizedCertificate resource. A user must be authorized to administer the associated domain in order to update a DomainMapping resource.",
+       "parameters": {
+        "appsId": {
+         "type": "string",
+         "description": "Part of `name`. Name of the resource to update. Example: apps/myapp/domainMappings/example.com.",
+         "required": true,
+         "location": "path"
+        },
+        "domainMappingsId": {
+         "type": "string",
+         "description": "Part of `name`. See documentation of `appsId`.",
+         "required": true,
+         "location": "path"
+        },
+        "updateMask": {
+         "type": "string",
+         "description": "Standard field mask for the set of fields to be updated.",
+         "location": "query"
+        }
+       },
+       "parameterOrder": [
+        "appsId",
+        "domainMappingsId"
+       ],
+       "request": {
+        "$ref": "DomainMapping"
+       },
+       "response": {
+        "$ref": "Operation"
+       },
+       "scopes": [
+        "https://www.googleapis.com/auth/cloud-platform"
+       ]
+      },
+      "delete": {
+       "id": "appengine.apps.domainMappings.delete",
+       "path": "v1beta/apps/{appsId}/domainMappings/{domainMappingsId}",
+       "httpMethod": "DELETE",
+       "description": "Deletes the specified domain mapping. A user must be authorized to administer the associated domain in order to delete a DomainMapping resource.",
+       "parameters": {
+        "appsId": {
+         "type": "string",
+         "description": "Part of `name`. Name of the resource to delete. Example: apps/myapp/domainMappings/example.com.",
+         "required": true,
+         "location": "path"
+        },
+        "domainMappingsId": {
+         "type": "string",
+         "description": "Part of `name`. See documentation of `appsId`.",
+         "required": true,
+         "location": "path"
+        }
+       },
+       "parameterOrder": [
+        "appsId",
+        "domainMappingsId"
+       ],
+       "response": {
+        "$ref": "Operation"
+       },
+       "scopes": [
+        "https://www.googleapis.com/auth/cloud-platform"
+       ]
+      }
+     }
+    },
+    "locations": {
+     "methods": {
+      "list": {
+       "id": "appengine.apps.locations.list",
+       "path": "v1beta/apps/{appsId}/locations",
+       "httpMethod": "GET",
+       "description": "Lists information about the supported locations for this service.",
+       "parameters": {
+        "appsId": {
+         "type": "string",
+         "description": "Part of `name`. The resource that owns the locations collection, if applicable.",
+         "required": true,
+         "location": "path"
+        },
+        "filter": {
+         "type": "string",
+         "description": "The standard list filter.",
+         "location": "query"
+        },
+        "pageSize": {
+         "type": "integer",
+         "description": "The standard list page size.",
+         "format": "int32",
+         "location": "query"
+        },
+        "pageToken": {
+         "type": "string",
+         "description": "The standard list page token.",
+         "location": "query"
+        }
+       },
+       "parameterOrder": [
+        "appsId"
+       ],
+       "response": {
+        "$ref": "ListLocationsResponse"
+       },
+       "scopes": [
+        "https://www.googleapis.com/auth/appengine.admin",
+        "https://www.googleapis.com/auth/cloud-platform",
+        "https://www.googleapis.com/auth/cloud-platform.read-only"
+       ]
+      },
+      "get": {
+       "id": "appengine.apps.locations.get",
+       "path": "v1beta/apps/{appsId}/locations/{locationsId}",
+       "httpMethod": "GET",
+       "description": "Get information about a location.",
+       "parameters": {
+        "appsId": {
+         "type": "string",
+         "description": "Part of `name`. Resource name for the location.",
+         "required": true,
+         "location": "path"
+        },
+        "locationsId": {
+         "type": "string",
+         "description": "Part of `name`. See documentation of `appsId`.",
+         "required": true,
+         "location": "path"
+        }
+       },
+       "parameterOrder": [
+        "appsId",
+        "locationsId"
+       ],
+       "response": {
+        "$ref": "Location"
+       },
+       "scopes": [
+        "https://www.googleapis.com/auth/appengine.admin",
+        "https://www.googleapis.com/auth/cloud-platform",
+        "https://www.googleapis.com/auth/cloud-platform.read-only"
+       ]
+      }
+     }
     }
-  },
-  "kind": "discovery#restDescription",
-  "description": "Provisions and manages App Engine applications.",
-  "servicePath": "",
-  "rootUrl": "https://appengine.googleapis.com/"
+   }
+  }
+ }
 }
diff --git a/appengine/v1beta/appengine-gen.go b/appengine/v1beta/appengine-gen.go
index 42a99c4..59425bb 100644
--- a/appengine/v1beta/appengine-gen.go
+++ b/appengine/v1beta/appengine-gen.go
@@ -67,10 +67,9 @@
 }
 
 type APIService struct {
-	client                    *http.Client
-	BasePath                  string // API endpoint base URL
-	UserAgent                 string // optional additional User-Agent fragment
-	GoogleClientHeaderElement string // client header fragment, for Google use only
+	client    *http.Client
+	BasePath  string // API endpoint base URL
+	UserAgent string // optional additional User-Agent fragment
 
 	Apps *AppsService
 }
@@ -82,12 +81,11 @@
 	return googleapi.UserAgent + " " + s.UserAgent
 }
 
-func (s *APIService) clientHeader() string {
-	return gensupport.GoogleClientHeader("20170210", s.GoogleClientHeaderElement)
-}
-
 func NewAppsService(s *APIService) *AppsService {
 	rs := &AppsService{s: s}
+	rs.AuthorizedCertificates = NewAppsAuthorizedCertificatesService(s)
+	rs.AuthorizedDomains = NewAppsAuthorizedDomainsService(s)
+	rs.DomainMappings = NewAppsDomainMappingsService(s)
 	rs.Locations = NewAppsLocationsService(s)
 	rs.Operations = NewAppsOperationsService(s)
 	rs.Services = NewAppsServicesService(s)
@@ -97,6 +95,12 @@
 type AppsService struct {
 	s *APIService
 
+	AuthorizedCertificates *AppsAuthorizedCertificatesService
+
+	AuthorizedDomains *AppsAuthorizedDomainsService
+
+	DomainMappings *AppsDomainMappingsService
+
 	Locations *AppsLocationsService
 
 	Operations *AppsOperationsService
@@ -104,6 +108,33 @@
 	Services *AppsServicesService
 }
 
+func NewAppsAuthorizedCertificatesService(s *APIService) *AppsAuthorizedCertificatesService {
+	rs := &AppsAuthorizedCertificatesService{s: s}
+	return rs
+}
+
+type AppsAuthorizedCertificatesService struct {
+	s *APIService
+}
+
+func NewAppsAuthorizedDomainsService(s *APIService) *AppsAuthorizedDomainsService {
+	rs := &AppsAuthorizedDomainsService{s: s}
+	return rs
+}
+
+type AppsAuthorizedDomainsService struct {
+	s *APIService
+}
+
+func NewAppsDomainMappingsService(s *APIService) *AppsDomainMappingsService {
+	rs := &AppsDomainMappingsService{s: s}
+	return rs
+}
+
+type AppsDomainMappingsService struct {
+	s *APIService
+}
+
 func NewAppsLocationsService(s *APIService) *AppsLocationsService {
 	rs := &AppsLocationsService{s: s}
 	return rs
@@ -163,28 +194,19 @@
 	// require authentication. Defaults to redirect.
 	//
 	// Possible values:
-	//   "AUTH_FAIL_ACTION_UNSPECIFIED" - Not specified.
-	// AUTH_FAIL_ACTION_REDIRECT is assumed.
-	//   "AUTH_FAIL_ACTION_REDIRECT" - Redirects user to
-	// "accounts.google.com". The user is redirected back to the application
-	// URL after signing in or creating an account.
-	//   "AUTH_FAIL_ACTION_UNAUTHORIZED" - Rejects request with a 401 HTTP
-	// status code and an error message.
+	//   "AUTH_FAIL_ACTION_UNSPECIFIED"
+	//   "AUTH_FAIL_ACTION_REDIRECT"
+	//   "AUTH_FAIL_ACTION_UNAUTHORIZED"
 	AuthFailAction string `json:"authFailAction,omitempty"`
 
 	// Login: Level of login required to access this resource. Defaults to
 	// optional.
 	//
 	// Possible values:
-	//   "LOGIN_UNSPECIFIED" - Not specified. LOGIN_OPTIONAL is assumed.
-	//   "LOGIN_OPTIONAL" - Does not require that the user is signed in.
-	//   "LOGIN_ADMIN" - If the user is not signed in, the auth_fail_action
-	// is taken. In addition, if the user is not an administrator for the
-	// application, they are given an error message regardless of
-	// auth_fail_action. If the user is an administrator, the handler
-	// proceeds.
-	//   "LOGIN_REQUIRED" - If the user has signed in, the handler proceeds
-	// normally. Otherwise, the auth_fail_action is taken.
+	//   "LOGIN_UNSPECIFIED"
+	//   "LOGIN_OPTIONAL"
+	//   "LOGIN_ADMIN"
+	//   "LOGIN_REQUIRED"
 	Login string `json:"login,omitempty"`
 
 	// Script: Path to the script from the application root directory.
@@ -193,20 +215,11 @@
 	// SecurityLevel: Security (HTTPS) enforcement for this URL.
 	//
 	// Possible values:
-	//   "SECURE_UNSPECIFIED" - Not specified.
-	//   "SECURE_DEFAULT" - Both HTTP and HTTPS requests with URLs that
-	// match the handler succeed without redirects. The application can
-	// examine the request to determine which protocol was used, and respond
-	// accordingly.
-	//   "SECURE_NEVER" - Requests for a URL that match this handler that
-	// use HTTPS are automatically redirected to the HTTP equivalent URL.
-	//   "SECURE_OPTIONAL" - Both HTTP and HTTPS requests with URLs that
-	// match the handler succeed without redirects. The application can
-	// examine the request to determine which protocol was used and respond
-	// accordingly.
-	//   "SECURE_ALWAYS" - Requests for a URL that match this handler that
-	// do not use HTTPS are automatically redirected to the HTTPS URL with
-	// the same path. Query parameters are reserved for the redirect.
+	//   "SECURE_UNSPECIFIED"
+	//   "SECURE_DEFAULT"
+	//   "SECURE_NEVER"
+	//   "SECURE_OPTIONAL"
+	//   "SECURE_ALWAYS"
 	SecurityLevel string `json:"securityLevel,omitempty"`
 
 	// Url: URL to serve the endpoint at.
@@ -292,7 +305,8 @@
 
 	// DispatchRules: HTTP path dispatch rules for requests to the
 	// application that do not explicitly target a service or version. Rules
-	// are order-dependent.@OutputOnly
+	// are order-dependent. Up to 20 dispatch rules can be
+	// supported.@OutputOnly
 	DispatchRules []*UrlDispatchRule `json:"dispatchRules,omitempty"`
 
 	// GcrDomain: The Google Container Registry domain used for storing
@@ -320,10 +334,10 @@
 	// ServingStatus: Serving status of this application.
 	//
 	// Possible values:
-	//   "UNSPECIFIED" - Serving status is unspecified.
-	//   "SERVING" - Application is serving.
-	//   "USER_DISABLED" - Application has been disabled by the user.
-	//   "SYSTEM_DISABLED" - Application has been disabled by the system.
+	//   "UNSPECIFIED"
+	//   "SERVING"
+	//   "USER_DISABLED"
+	//   "SYSTEM_DISABLED"
 	ServingStatus string `json:"servingStatus,omitempty"`
 
 	// ServerResponse contains the HTTP response code and headers from the
@@ -353,6 +367,120 @@
 	return gensupport.MarshalJSON(raw, s.ForceSendFields, s.NullFields)
 }
 
+// AuthorizedCertificate: An SSL certificate that a user has been
+// authorized to administer. A user is authorized to administer any
+// certificate that applies to one of their authorized domains.
+type AuthorizedCertificate struct {
+	// CertificateRawData: The SSL certificate serving the
+	// AuthorizedCertificate resource. This must be obtained independently
+	// from a certificate authority.
+	CertificateRawData *CertificateRawData `json:"certificateRawData,omitempty"`
+
+	// DisplayName: The user-specified display name of the certificate. This
+	// is not guaranteed to be unique. Example: My Certificate.
+	DisplayName string `json:"displayName,omitempty"`
+
+	// DomainMappingsCount: Aggregate count of the domain mappings with this
+	// certificate mapped. This count includes domain mappings on
+	// applications for which the user does not have VIEWER permissions.Only
+	// returned by GET requests when specifically requested by the view=FULL
+	// option.@OutputOnly
+	DomainMappingsCount int64 `json:"domainMappingsCount,omitempty"`
+
+	// DomainNames: Topmost applicable domains of this certificate. This
+	// certificate applies to these domains and their subdomains. Example:
+	// example.com.@OutputOnly
+	DomainNames []string `json:"domainNames,omitempty"`
+
+	// ExpireTime: The time when this certificate expires. To update the
+	// renewal time on this certificate, upload an SSL certificate with a
+	// different expiration time using
+	// AuthorizedCertificates.UpdateAuthorizedCertificate.@OutputOnly
+	ExpireTime string `json:"expireTime,omitempty"`
+
+	// Id: Relative name of the certificate. This is a unique value
+	// autogenerated on AuthorizedCertificate resource creation. Example:
+	// 12345.@OutputOnly
+	Id string `json:"id,omitempty"`
+
+	// Name: Full path to the AuthorizedCertificate resource in the API.
+	// Example: apps/myapp/authorizedCertificates/12345.@OutputOnly
+	Name string `json:"name,omitempty"`
+
+	// VisibleDomainMappings: The full paths to user visible Domain Mapping
+	// resources that have this certificate mapped. Example:
+	// apps/myapp/domainMappings/example.com.This may not represent the full
+	// list of mapped domain mappings if the user does not have VIEWER
+	// permissions on all of the applications that have this certificate
+	// mapped. See domain_mappings_count for a complete count.Only returned
+	// by GET requests when specifically requested by the view=FULL
+	// option.@OutputOnly
+	VisibleDomainMappings []string `json:"visibleDomainMappings,omitempty"`
+
+	// ServerResponse contains the HTTP response code and headers from the
+	// server.
+	googleapi.ServerResponse `json:"-"`
+
+	// ForceSendFields is a list of field names (e.g. "CertificateRawData")
+	// to unconditionally include in API requests. By default, fields with
+	// empty values are omitted from API requests. However, any non-pointer,
+	// non-interface field appearing in ForceSendFields will be sent to the
+	// server regardless of whether the field is empty or not. This may be
+	// used to include empty fields in Patch requests.
+	ForceSendFields []string `json:"-"`
+
+	// NullFields is a list of field names (e.g. "CertificateRawData") to
+	// include in API requests with the JSON null value. By default, fields
+	// with empty values are omitted from API requests. However, any field
+	// with an empty value appearing in NullFields will be sent to the
+	// server as null. It is an error if a field in this list has a
+	// non-empty value. This may be used to include null fields in Patch
+	// requests.
+	NullFields []string `json:"-"`
+}
+
+func (s *AuthorizedCertificate) MarshalJSON() ([]byte, error) {
+	type noMethod AuthorizedCertificate
+	raw := noMethod(*s)
+	return gensupport.MarshalJSON(raw, s.ForceSendFields, s.NullFields)
+}
+
+// AuthorizedDomain: A domain that a user has been authorized to
+// administer. To authorize use of a domain, verify ownership via
+// Webmaster Central
+// (https://www.google.com/webmasters/verification/home).
+type AuthorizedDomain struct {
+	// Id: Fully qualified domain name of the domain authorized for use.
+	// Example: example.com.
+	Id string `json:"id,omitempty"`
+
+	// Name: Full path to the AuthorizedDomain resource in the API. Example:
+	// apps/myapp/authorizedDomains/example.com.@OutputOnly
+	Name string `json:"name,omitempty"`
+
+	// ForceSendFields is a list of field names (e.g. "Id") to
+	// unconditionally include in API requests. By default, fields with
+	// empty values are omitted from API requests. However, any non-pointer,
+	// non-interface field appearing in ForceSendFields will be sent to the
+	// server regardless of whether the field is empty or not. This may be
+	// used to include empty fields in Patch requests.
+	ForceSendFields []string `json:"-"`
+
+	// NullFields is a list of field names (e.g. "Id") to include in API
+	// requests with the JSON null value. By default, fields with empty
+	// values are omitted from API requests. However, any field with an
+	// empty value appearing in NullFields will be sent to the server as
+	// null. It is an error if a field in this list has a non-empty value.
+	// This may be used to include null fields in Patch requests.
+	NullFields []string `json:"-"`
+}
+
+func (s *AuthorizedDomain) MarshalJSON() ([]byte, error) {
+	type noMethod AuthorizedDomain
+	raw := noMethod(*s)
+	return gensupport.MarshalJSON(raw, s.ForceSendFields, s.NullFields)
+}
+
 // AutomaticScaling: Automatic scaling is based on request rate,
 // response latencies, and other application metrics.
 type AutomaticScaling struct {
@@ -463,6 +591,47 @@
 	return gensupport.MarshalJSON(raw, s.ForceSendFields, s.NullFields)
 }
 
+// CertificateRawData: An SSL certificate obtained from a certificate
+// authority.
+type CertificateRawData struct {
+	// PrivateKey: Unencrypted PEM encoded RSA private key. This field is
+	// set once on certificate creation and then encrypted. The key size
+	// must be 2048 bits or fewer. Must include the header and footer.
+	// Example:
+	// -----BEGIN RSA PRIVATE KEY-----  -----END RSA PRIVATE
+	// KEY-----
+	// @InputOnly
+	PrivateKey string `json:"privateKey,omitempty"`
+
+	// PublicCertificate: PEM encoded x.509 public key certificate. This
+	// field is set once on certificate creation. Must include the header
+	// and footer. Example:
+	// -----BEGIN CERTIFICATE-----  -----END CERTIFICATE-----
+	PublicCertificate string `json:"publicCertificate,omitempty"`
+
+	// ForceSendFields is a list of field names (e.g. "PrivateKey") to
+	// unconditionally include in API requests. By default, fields with
+	// empty values are omitted from API requests. However, any non-pointer,
+	// non-interface field appearing in ForceSendFields will be sent to the
+	// server regardless of whether the field is empty or not. This may be
+	// used to include empty fields in Patch requests.
+	ForceSendFields []string `json:"-"`
+
+	// NullFields is a list of field names (e.g. "PrivateKey") to include in
+	// API requests with the JSON null value. By default, fields with empty
+	// values are omitted from API requests. However, any field with an
+	// empty value appearing in NullFields will be sent to the server as
+	// null. It is an error if a field in this list has a non-empty value.
+	// This may be used to include null fields in Patch requests.
+	NullFields []string `json:"-"`
+}
+
+func (s *CertificateRawData) MarshalJSON() ([]byte, error) {
+	type noMethod CertificateRawData
+	raw := noMethod(*s)
+	return gensupport.MarshalJSON(raw, s.ForceSendFields, s.NullFields)
+}
+
 // ContainerInfo: Docker image that is used to create a container and
 // start a VM instance for the version that you deploy. Only applicable
 // for instances running in the App Engine flexible environment.
@@ -547,10 +716,9 @@
 
 // DebugInstanceRequest: Request message for Instances.DebugInstance.
 type DebugInstanceRequest struct {
-	// SshKey: Public SSH key to add to the instance.
-	// Examples:
-	// [USERNAME]:ssh-rsa [KEY_VALUE] [USERNAME]
-	// [USERNAME]:ssh-rsa [KEY_VALUE] google-ssh
+	// SshKey: Public SSH key to add to the instance. Examples:
+	// [USERNAME]:ssh-rsa [KEY_VALUE] [USERNAME] [USERNAME]:ssh-rsa
+	// [KEY_VALUE] google-ssh
 	// {"userName":"[USERNAME]","expireOn":"[EXPIRE_TIME]"}For more
 	// information, see Adding and Removing SSH Keys
 	// (https://cloud.google.com/compute/docs/instances/adding-removing-ssh-k
@@ -659,6 +827,65 @@
 	return gensupport.MarshalJSON(raw, s.ForceSendFields, s.NullFields)
 }
 
+// DomainMapping: A domain serving an App Engine application.
+type DomainMapping struct {
+	// Id: Relative name of the domain serving the application. Example:
+	// example.com.
+	Id string `json:"id,omitempty"`
+
+	// Name: Full path to the DomainMapping resource in the API. Example:
+	// apps/myapp/domainMapping/example.com.@OutputOnly
+	Name string `json:"name,omitempty"`
+
+	// ResourceRecords: The resource records required to configure this
+	// domain mapping. These records must be added to the domain's DNS
+	// configuration in order to serve the application via this domain
+	// mapping.@OutputOnly
+	ResourceRecords []*ResourceRecord `json:"resourceRecords,omitempty"`
+
+	// SslSettings: SSL configuration for this domain. If unconfigured, this
+	// domain will not serve with SSL.
+	SslSettings *SslSettings `json:"sslSettings,omitempty"`
+
+	// ServerResponse contains the HTTP response code and headers from the
+	// server.
+	googleapi.ServerResponse `json:"-"`
+
+	// ForceSendFields is a list of field names (e.g. "Id") to
+	// unconditionally include in API requests. By default, fields with
+	// empty values are omitted from API requests. However, any non-pointer,
+	// non-interface field appearing in ForceSendFields will be sent to the
+	// server regardless of whether the field is empty or not. This may be
+	// used to include empty fields in Patch requests.
+	ForceSendFields []string `json:"-"`
+
+	// NullFields is a list of field names (e.g. "Id") to include in API
+	// requests with the JSON null value. By default, fields with empty
+	// values are omitted from API requests. However, any field with an
+	// empty value appearing in NullFields will be sent to the server as
+	// null. It is an error if a field in this list has a non-empty value.
+	// This may be used to include null fields in Patch requests.
+	NullFields []string `json:"-"`
+}
+
+func (s *DomainMapping) MarshalJSON() ([]byte, error) {
+	type noMethod DomainMapping
+	raw := noMethod(*s)
+	return gensupport.MarshalJSON(raw, s.ForceSendFields, s.NullFields)
+}
+
+// Empty: 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 Empty struct {
+	// ServerResponse contains the HTTP response code and headers from the
+	// server.
+	googleapi.ServerResponse `json:"-"`
+}
+
 // EndpointsApiService: Cloud Endpoints
 // (https://cloud.google.com/endpoints) configuration. The Endpoints API
 // Service provides tooling for serving Open API and gRPC endpoints via
@@ -704,15 +931,11 @@
 	// ErrorCode: Error condition this handler applies to.
 	//
 	// Possible values:
-	//   "ERROR_CODE_UNSPECIFIED" - Not specified. ERROR_CODE_DEFAULT is
-	// assumed.
-	//   "ERROR_CODE_DEFAULT" - All other error types.
-	//   "ERROR_CODE_OVER_QUOTA" - Application has exceeded a resource
-	// quota.
-	//   "ERROR_CODE_DOS_API_DENIAL" - Client blocked by the application's
-	// Denial of Service protection configuration.
-	//   "ERROR_CODE_TIMEOUT" - Deadline reached before the application
-	// responds.
+	//   "ERROR_CODE_UNSPECIFIED"
+	//   "ERROR_CODE_DEFAULT"
+	//   "ERROR_CODE_OVER_QUOTA"
+	//   "ERROR_CODE_DOS_API_DENIAL"
+	//   "ERROR_CODE_TIMEOUT"
 	ErrorCode string `json:"errorCode,omitempty"`
 
 	// MimeType: MIME type of file. Defaults to text/html.
@@ -757,7 +980,7 @@
 
 	// SourceUrl: URL source to use to fetch this file. Must be a URL to a
 	// resource in Google Cloud Storage in the form
-	// 'http(s)://storage.googleapis.com/<bucket>/<object>'.
+	// 'http(s)://storage.googleapis.com//'.
 	SourceUrl string `json:"sourceUrl,omitempty"`
 
 	// ForceSendFields is a list of field names (e.g. "MimeType") to
@@ -1025,6 +1248,119 @@
 	return gensupport.MarshalJSON(raw, s.ForceSendFields, s.NullFields)
 }
 
+// ListAuthorizedCertificatesResponse: Response message for
+// AuthorizedCertificates.ListAuthorizedCertificates.
+type ListAuthorizedCertificatesResponse struct {
+	// Certificates: The SSL certificates the user is authorized to
+	// administer.
+	Certificates []*AuthorizedCertificate `json:"certificates,omitempty"`
+
+	// NextPageToken: Continuation token for fetching the next page of
+	// results.
+	NextPageToken string `json:"nextPageToken,omitempty"`
+
+	// ServerResponse contains the HTTP response code and headers from the
+	// server.
+	googleapi.ServerResponse `json:"-"`
+
+	// ForceSendFields is a list of field names (e.g. "Certificates") to
+	// unconditionally include in API requests. By default, fields with
+	// empty values are omitted from API requests. However, any non-pointer,
+	// non-interface field appearing in ForceSendFields will be sent to the
+	// server regardless of whether the field is empty or not. This may be
+	// used to include empty fields in Patch requests.
+	ForceSendFields []string `json:"-"`
+
+	// NullFields is a list of field names (e.g. "Certificates") to include
+	// in API requests with the JSON null value. By default, fields with
+	// empty values are omitted from API requests. However, any field with
+	// an empty value appearing in NullFields will be sent to the server as
+	// null. It is an error if a field in this list has a non-empty value.
+	// This may be used to include null fields in Patch requests.
+	NullFields []string `json:"-"`
+}
+
+func (s *ListAuthorizedCertificatesResponse) MarshalJSON() ([]byte, error) {
+	type noMethod ListAuthorizedCertificatesResponse
+	raw := noMethod(*s)
+	return gensupport.MarshalJSON(raw, s.ForceSendFields, s.NullFields)
+}
+
+// ListAuthorizedDomainsResponse: Response message for
+// AuthorizedDomains.ListAuthorizedDomains.
+type ListAuthorizedDomainsResponse struct {
+	// Domains: The authorized domains belonging to the user.
+	Domains []*AuthorizedDomain `json:"domains,omitempty"`
+
+	// NextPageToken: Continuation token for fetching the next page of
+	// results.
+	NextPageToken string `json:"nextPageToken,omitempty"`
+
+	// ServerResponse contains the HTTP response code and headers from the
+	// server.
+	googleapi.ServerResponse `json:"-"`
+
+	// ForceSendFields is a list of field names (e.g. "Domains") to
+	// unconditionally include in API requests. By default, fields with
+	// empty values are omitted from API requests. However, any non-pointer,
+	// non-interface field appearing in ForceSendFields will be sent to the
+	// server regardless of whether the field is empty or not. This may be
+	// used to include empty fields in Patch requests.
+	ForceSendFields []string `json:"-"`
+
+	// NullFields is a list of field names (e.g. "Domains") to include in
+	// API requests with the JSON null value. By default, fields with empty
+	// values are omitted from API requests. However, any field with an
+	// empty value appearing in NullFields will be sent to the server as
+	// null. It is an error if a field in this list has a non-empty value.
+	// This may be used to include null fields in Patch requests.
+	NullFields []string `json:"-"`
+}
+
+func (s *ListAuthorizedDomainsResponse) MarshalJSON() ([]byte, error) {
+	type noMethod ListAuthorizedDomainsResponse
+	raw := noMethod(*s)
+	return gensupport.MarshalJSON(raw, s.ForceSendFields, s.NullFields)
+}
+
+// ListDomainMappingsResponse: Response message for
+// DomainMappings.ListDomainMappings.
+type ListDomainMappingsResponse struct {
+	// DomainMappings: The domain mappings for the application.
+	DomainMappings []*DomainMapping `json:"domainMappings,omitempty"`
+
+	// NextPageToken: Continuation token for fetching the next page of
+	// results.
+	NextPageToken string `json:"nextPageToken,omitempty"`
+
+	// ServerResponse contains the HTTP response code and headers from the
+	// server.
+	googleapi.ServerResponse `json:"-"`
+
+	// ForceSendFields is a list of field names (e.g. "DomainMappings") to
+	// unconditionally include in API requests. By default, fields with
+	// empty values are omitted from API requests. However, any non-pointer,
+	// non-interface field appearing in ForceSendFields will be sent to the
+	// server regardless of whether the field is empty or not. This may be
+	// used to include empty fields in Patch requests.
+	ForceSendFields []string `json:"-"`
+
+	// NullFields is a list of field names (e.g. "DomainMappings") to
+	// include in API requests with the JSON null value. By default, fields
+	// with empty values are omitted from API requests. However, any field
+	// with an empty value appearing in NullFields will be sent to the
+	// server as null. It is an error if a field in this list has a
+	// non-empty value. This may be used to include null fields in Patch
+	// requests.
+	NullFields []string `json:"-"`
+}
+
+func (s *ListDomainMappingsResponse) MarshalJSON() ([]byte, error) {
+	type noMethod ListDomainMappingsResponse
+	raw := noMethod(*s)
+	return gensupport.MarshalJSON(raw, s.ForceSendFields, s.NullFields)
+}
+
 // ListInstancesResponse: Response message for Instances.ListInstances.
 type ListInstancesResponse struct {
 	// Instances: The instances belonging to the requested version.
@@ -1213,9 +1549,9 @@
 	// CheckInterval: Interval between health checks.
 	CheckInterval string `json:"checkInterval,omitempty"`
 
-	// HealthyThreshold: Number of consecutive successful checks required
-	// before considering the VM healthy.
-	HealthyThreshold int64 `json:"healthyThreshold,omitempty"`
+	// FailureThreshold: Number of consecutive failed checks required before
+	// considering the VM unhealthy.
+	FailureThreshold int64 `json:"failureThreshold,omitempty"`
 
 	// Host: Host header to send when performing a HTTP Liveness check.
 	// Example: "myapp.appspot.com"
@@ -1228,13 +1564,13 @@
 	// Path: The request path.
 	Path string `json:"path,omitempty"`
 
+	// SuccessThreshold: Number of consecutive successful checks required
+	// before considering the VM healthy.
+	SuccessThreshold int64 `json:"successThreshold,omitempty"`
+
 	// Timeout: Time before the check is considered failed.
 	Timeout string `json:"timeout,omitempty"`
 
-	// UnhealthyThreshold: Number of consecutive failed checks required
-	// before considering the VM unhealthy.
-	UnhealthyThreshold int64 `json:"unhealthyThreshold,omitempty"`
-
 	// ForceSendFields is a list of field names (e.g. "CheckInterval") to
 	// unconditionally include in API requests. By default, fields with
 	// empty values are omitted from API requests. However, any non-pointer,
@@ -1260,10 +1596,8 @@
 
 // Location: A resource that represents Google Cloud Platform location.
 type Location struct {
-	// Labels: Cross-service attributes for the location. For
-	// example
+	// Labels: Cross-service attributes for the location. For example
 	// {"cloud.googleapis.com/region": "us-east1"}
-	//
 	Labels map[string]string `json:"labels,omitempty"`
 
 	// LocationId: The canonical id for this location. For example:
@@ -1392,18 +1726,17 @@
 	// SubnetworkName: Google Cloud Platform sub-network where the virtual
 	// machines are created. Specify the short name, not the resource
 	// path.If a subnetwork name is specified, a network name will also be
-	// required unless it is for the default network.
-	// If the network the VM instance is being created in is a Legacy
-	// network, then the IP address is allocated from the IPv4Range.
-	// If the network the VM instance is being created in is an auto Subnet
-	// Mode Network, then only network name should be specified (not the
-	// subnetwork_name) and the IP address is created from the IPCidrRange
-	// of the subnetwork that exists in that zone for that network.
-	// If the network the VM instance is being created in is a custom Subnet
-	// Mode Network, then the subnetwork_name must be specified and the IP
-	// address is created from the IPCidrRange of the subnetwork.If
-	// specified, the subnetwork must exist in the same region as the Flex
-	// app.
+	// required unless it is for the default network. If the network the VM
+	// instance is being created in is a Legacy network, then the IP address
+	// is allocated from the IPv4Range. If the network the VM instance is
+	// being created in is an auto Subnet Mode Network, then only network
+	// name should be specified (not the subnetwork_name) and the IP address
+	// is created from the IPCidrRange of the subnetwork that exists in that
+	// zone for that network. If the network the VM instance is being
+	// created in is a custom Subnet Mode Network, then the subnetwork_name
+	// must be specified and the IP address is created from the IPCidrRange
+	// of the subnetwork.If specified, the subnetwork must exist in the same
+	// region as the Flex app.
 	SubnetworkName string `json:"subnetworkName,omitempty"`
 
 	// ForceSendFields is a list of field names (e.g. "ForwardedPorts") to
@@ -1673,57 +2006,6 @@
 	return gensupport.MarshalJSON(raw, s.ForceSendFields, s.NullFields)
 }
 
-// OperationMetadataV1Alpha: Metadata for the given
-// google.longrunning.Operation.
-type OperationMetadataV1Alpha struct {
-	// EndTime: Time that this operation completed.@OutputOnly
-	EndTime string `json:"endTime,omitempty"`
-
-	// EphemeralMessage: Ephemeral message that may change every time the
-	// operation is polled. @OutputOnly
-	EphemeralMessage string `json:"ephemeralMessage,omitempty"`
-
-	// InsertTime: Time that this operation was created.@OutputOnly
-	InsertTime string `json:"insertTime,omitempty"`
-
-	// Method: API method that initiated this operation. Example:
-	// google.appengine.v1alpha.Versions.CreateVersion.@OutputOnly
-	Method string `json:"method,omitempty"`
-
-	// Target: Name of the resource that this operation is acting on.
-	// Example: apps/myapp/services/default.@OutputOnly
-	Target string `json:"target,omitempty"`
-
-	// User: User who requested this operation.@OutputOnly
-	User string `json:"user,omitempty"`
-
-	// Warning: Durable messages that persist on every operation poll.
-	// @OutputOnly
-	Warning []string `json:"warning,omitempty"`
-
-	// ForceSendFields is a list of field names (e.g. "EndTime") to
-	// unconditionally include in API requests. By default, fields with
-	// empty values are omitted from API requests. However, any non-pointer,
-	// non-interface field appearing in ForceSendFields will be sent to the
-	// server regardless of whether the field is empty or not. This may be
-	// used to include empty fields in Patch requests.
-	ForceSendFields []string `json:"-"`
-
-	// NullFields is a list of field names (e.g. "EndTime") to include in
-	// API requests with the JSON null value. By default, fields with empty
-	// values are omitted from API requests. However, any field with an
-	// empty value appearing in NullFields will be sent to the server as
-	// null. It is an error if a field in this list has a non-empty value.
-	// This may be used to include null fields in Patch requests.
-	NullFields []string `json:"-"`
-}
-
-func (s *OperationMetadataV1Alpha) MarshalJSON() ([]byte, error) {
-	type noMethod OperationMetadataV1Alpha
-	raw := noMethod(*s)
-	return gensupport.MarshalJSON(raw, s.ForceSendFields, s.NullFields)
-}
-
 // OperationMetadataV1Beta: Metadata for the given
 // google.longrunning.Operation.
 type OperationMetadataV1Beta struct {
@@ -1824,9 +2106,9 @@
 	// CheckInterval: Interval between health checks.
 	CheckInterval string `json:"checkInterval,omitempty"`
 
-	// HealthyThreshold: Number of consecutive successful checks required
-	// before receiving traffic.
-	HealthyThreshold int64 `json:"healthyThreshold,omitempty"`
+	// FailureThreshold: Number of consecutive failed checks required before
+	// removing traffic.
+	FailureThreshold int64 `json:"failureThreshold,omitempty"`
 
 	// Host: Host header to send when performing a HTTP Readiness check.
 	// Example: "myapp.appspot.com"
@@ -1835,13 +2117,13 @@
 	// Path: The request path.
 	Path string `json:"path,omitempty"`
 
+	// SuccessThreshold: Number of consecutive successful checks required
+	// before receiving traffic.
+	SuccessThreshold int64 `json:"successThreshold,omitempty"`
+
 	// Timeout: Time before the check is considered failed.
 	Timeout string `json:"timeout,omitempty"`
 
-	// UnhealthyThreshold: Number of consecutive failed checks required
-	// before removing traffic.
-	UnhealthyThreshold int64 `json:"unhealthyThreshold,omitempty"`
-
 	// ForceSendFields is a list of field names (e.g. "CheckInterval") to
 	// unconditionally include in API requests. By default, fields with
 	// empty values are omitted from API requests. However, any non-pointer,
@@ -1904,6 +2186,47 @@
 	return gensupport.MarshalJSON(raw, s.ForceSendFields, s.NullFields)
 }
 
+// ResourceRecord: A DNS resource record.
+type ResourceRecord struct {
+	// Name: Relative name of the object affected by this record. Only
+	// applicable for CNAME records. Example: 'www'.
+	Name string `json:"name,omitempty"`
+
+	// Rrdata: Data for this record. Values vary by record type, as defined
+	// in RFC 1035 (section 5) and RFC 1034 (section 3.6.1).
+	Rrdata string `json:"rrdata,omitempty"`
+
+	// Type: Resource record type. Example: AAAA.
+	//
+	// Possible values:
+	//   "A"
+	//   "AAAA"
+	//   "CNAME"
+	Type string `json:"type,omitempty"`
+
+	// ForceSendFields is a list of field names (e.g. "Name") to
+	// unconditionally include in API requests. By default, fields with
+	// empty values are omitted from API requests. However, any non-pointer,
+	// non-interface field appearing in ForceSendFields will be sent to the
+	// server regardless of whether the field is empty or not. This may be
+	// used to include empty fields in Patch requests.
+	ForceSendFields []string `json:"-"`
+
+	// NullFields is a list of field names (e.g. "Name") to include in API
+	// requests with the JSON null value. By default, fields with empty
+	// values are omitted from API requests. However, any field with an
+	// empty value appearing in NullFields will be sent to the server as
+	// null. It is an error if a field in this list has a non-empty value.
+	// This may be used to include null fields in Patch requests.
+	NullFields []string `json:"-"`
+}
+
+func (s *ResourceRecord) MarshalJSON() ([]byte, error) {
+	type noMethod ResourceRecord
+	raw := noMethod(*s)
+	return gensupport.MarshalJSON(raw, s.ForceSendFields, s.NullFields)
+}
+
 // Resources: Machine resources for a version.
 type Resources struct {
 	// Cpu: Number of CPU cores needed.
@@ -2035,6 +2358,36 @@
 	return gensupport.MarshalJSON(raw, s.ForceSendFields, s.NullFields)
 }
 
+// SslSettings: SSL configuration for a DomainMapping resource.
+type SslSettings struct {
+	// CertificateId: ID of the AuthorizedCertificate resource configuring
+	// SSL for the application. Clearing this field will remove SSL support.
+	// Example: 12345.
+	CertificateId string `json:"certificateId,omitempty"`
+
+	// ForceSendFields is a list of field names (e.g. "CertificateId") to
+	// unconditionally include in API requests. By default, fields with
+	// empty values are omitted from API requests. However, any non-pointer,
+	// non-interface field appearing in ForceSendFields will be sent to the
+	// server regardless of whether the field is empty or not. This may be
+	// used to include empty fields in Patch requests.
+	ForceSendFields []string `json:"-"`
+
+	// NullFields is a list of field names (e.g. "CertificateId") to include
+	// in API requests with the JSON null value. By default, fields with
+	// empty values are omitted from API requests. However, any field with
+	// an empty value appearing in NullFields will be sent to the server as
+	// null. It is an error if a field in this list has a non-empty value.
+	// This may be used to include null fields in Patch requests.
+	NullFields []string `json:"-"`
+}
+
+func (s *SslSettings) MarshalJSON() ([]byte, error) {
+	type noMethod SslSettings
+	raw := noMethod(*s)
+	return gensupport.MarshalJSON(raw, s.ForceSendFields, s.NullFields)
+}
+
 // StaticFilesHandler: Files served directly to the user for a given
 // URL, such as images, CSS stylesheets, or JavaScript source files.
 // Static file handlers describe which files in the application
@@ -2099,8 +2452,7 @@
 // Status: 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). The error
-// model is designed to be:
-// Simple to use and understand for most users
+// model is designed to be: Simple to use and understand for most users
 // Flexible enough to meet unexpected needsOverviewThe Status message
 // contains three pieces of data: error code, error message, and error
 // details. The error code should be an enum value of google.rpc.Code,
@@ -2120,21 +2472,18 @@
 // C.Other usesThe error model and the Status message can be used in a
 // variety of environments, either with or without APIs, to provide a
 // consistent developer experience across different environments.Example
-// uses of this error model include:
-// Partial errors. If a service needs to return partial errors to the
-// client, it may embed the Status in the normal response to indicate
-// the partial errors.
-// Workflow errors. A typical workflow has multiple steps. Each step may
-// have a Status message for error reporting purpose.
-// Batch operations. If a client uses batch request and batch response,
-// the Status message should be used directly inside batch response, one
-// for each error sub-response.
+// uses of this error model include: Partial errors. If a service needs
+// to return partial errors to the client, it may embed the Status in
+// the normal response to indicate the partial errors. Workflow errors.
+// A typical workflow has multiple steps. Each step may have a Status
+// message for error reporting purpose. Batch operations. If a client
+// uses batch request and batch response, the Status message should be
+// used directly inside batch response, one for each error sub-response.
 // Asynchronous operations. If an API call embeds asynchronous operation
 // results in its response, the status of those operations should be
-// represented directly using the Status message.
-// Logging. If some API errors are stored in logs, the message Status
-// could be used directly after any stripping needed for
-// security/privacy reasons.
+// represented directly using the Status message. Logging. If some API
+// errors are stored in logs, the message Status could be used directly
+// after any stripping needed for security/privacy reasons.
 type Status struct {
 	// Code: The status code, which should be an enum value of
 	// google.rpc.Code.
@@ -2191,15 +2540,10 @@
 	// until allocations are changed.
 	//
 	// Possible values:
-	//   "UNSPECIFIED" - Diversion method unspecified.
-	//   "COOKIE" - Diversion based on a specially named cookie,
-	// "GOOGAPPUID." The cookie must be set by the application itself or no
-	// diversion will occur.
-	//   "IP" - Diversion based on applying the modulus operation to a
-	// fingerprint of the IP address.
-	//   "RANDOM" - Diversion based on weighted random assignment. An
-	// incoming request is randomly routed to a version in the traffic
-	// split, with probability proportional to the version's traffic share.
+	//   "UNSPECIFIED"
+	//   "COOKIE"
+	//   "IP"
+	//   "RANDOM"
 	ShardBy string `json:"shardBy,omitempty"`
 
 	// ForceSendFields is a list of field names (e.g. "Allocations") to
@@ -2234,7 +2578,7 @@
 	Domain string `json:"domain,omitempty"`
 
 	// Path: Pathname within the host. Must start with a "/". A single "*"
-	// can be included at the end of the path. The sum of the lengths of the
+	// can be included at the end of the path.The sum of the lengths of the
 	// domain and path may not exceed 100 characters.
 	Path string `json:"path,omitempty"`
 
@@ -2278,39 +2622,29 @@
 	// require authentication. Defaults to redirect.
 	//
 	// Possible values:
-	//   "AUTH_FAIL_ACTION_UNSPECIFIED" - Not specified.
-	// AUTH_FAIL_ACTION_REDIRECT is assumed.
-	//   "AUTH_FAIL_ACTION_REDIRECT" - Redirects user to
-	// "accounts.google.com". The user is redirected back to the application
-	// URL after signing in or creating an account.
-	//   "AUTH_FAIL_ACTION_UNAUTHORIZED" - Rejects request with a 401 HTTP
-	// status code and an error message.
+	//   "AUTH_FAIL_ACTION_UNSPECIFIED"
+	//   "AUTH_FAIL_ACTION_REDIRECT"
+	//   "AUTH_FAIL_ACTION_UNAUTHORIZED"
 	AuthFailAction string `json:"authFailAction,omitempty"`
 
 	// Login: Level of login required to access this resource.
 	//
 	// Possible values:
-	//   "LOGIN_UNSPECIFIED" - Not specified. LOGIN_OPTIONAL is assumed.
-	//   "LOGIN_OPTIONAL" - Does not require that the user is signed in.
-	//   "LOGIN_ADMIN" - If the user is not signed in, the auth_fail_action
-	// is taken. In addition, if the user is not an administrator for the
-	// application, they are given an error message regardless of
-	// auth_fail_action. If the user is an administrator, the handler
-	// proceeds.
-	//   "LOGIN_REQUIRED" - If the user has signed in, the handler proceeds
-	// normally. Otherwise, the auth_fail_action is taken.
+	//   "LOGIN_UNSPECIFIED"
+	//   "LOGIN_OPTIONAL"
+	//   "LOGIN_ADMIN"
+	//   "LOGIN_REQUIRED"
 	Login string `json:"login,omitempty"`
 
 	// RedirectHttpResponseCode: 30x code to use when performing redirects
 	// for the secure field. Defaults to 302.
 	//
 	// Possible values:
-	//   "REDIRECT_HTTP_RESPONSE_CODE_UNSPECIFIED" - Not specified. 302 is
-	// assumed.
-	//   "REDIRECT_HTTP_RESPONSE_CODE_301" - 301 Moved Permanently code.
-	//   "REDIRECT_HTTP_RESPONSE_CODE_302" - 302 Moved Temporarily code.
-	//   "REDIRECT_HTTP_RESPONSE_CODE_303" - 303 See Other code.
-	//   "REDIRECT_HTTP_RESPONSE_CODE_307" - 307 Temporary Redirect code.
+	//   "REDIRECT_HTTP_RESPONSE_CODE_UNSPECIFIED"
+	//   "REDIRECT_HTTP_RESPONSE_CODE_301"
+	//   "REDIRECT_HTTP_RESPONSE_CODE_302"
+	//   "REDIRECT_HTTP_RESPONSE_CODE_303"
+	//   "REDIRECT_HTTP_RESPONSE_CODE_307"
 	RedirectHttpResponseCode string `json:"redirectHttpResponseCode,omitempty"`
 
 	// Script: Executes a script to handle the request that matches this URL
@@ -2320,20 +2654,11 @@
 	// SecurityLevel: Security (HTTPS) enforcement for this URL.
 	//
 	// Possible values:
-	//   "SECURE_UNSPECIFIED" - Not specified.
-	//   "SECURE_DEFAULT" - Both HTTP and HTTPS requests with URLs that
-	// match the handler succeed without redirects. The application can
-	// examine the request to determine which protocol was used, and respond
-	// accordingly.
-	//   "SECURE_NEVER" - Requests for a URL that match this handler that
-	// use HTTPS are automatically redirected to the HTTP equivalent URL.
-	//   "SECURE_OPTIONAL" - Both HTTP and HTTPS requests with URLs that
-	// match the handler succeed without redirects. The application can
-	// examine the request to determine which protocol was used and respond
-	// accordingly.
-	//   "SECURE_ALWAYS" - Requests for a URL that match this handler that
-	// do not use HTTPS are automatically redirected to the HTTPS URL with
-	// the same path. Query parameters are reserved for the redirect.
+	//   "SECURE_UNSPECIFIED"
+	//   "SECURE_DEFAULT"
+	//   "SECURE_NEVER"
+	//   "SECURE_OPTIONAL"
+	//   "SECURE_ALWAYS"
 	SecurityLevel string `json:"securityLevel,omitempty"`
 
 	// StaticFiles: Returns the contents of a file, such as an image, as the
@@ -2474,10 +2799,9 @@
 	InboundServices []string `json:"inboundServices,omitempty"`
 
 	// InstanceClass: Instance class that is used to run this version. Valid
-	// values are:
-	// AutomaticScaling: F1, F2, F4, F4_1G
-	// ManualScaling or BasicScaling: B1, B2, B4, B8, B4_1GDefaults to F1
-	// for AutomaticScaling and B1 for ManualScaling or BasicScaling.
+	// values are: AutomaticScaling: F1, F2, F4, F4_1G ManualScaling or
+	// BasicScaling: B1, B2, B4, B8, B4_1GDefaults to F1 for
+	// AutomaticScaling and B1 for ManualScaling or BasicScaling.
 	InstanceClass string `json:"instanceClass,omitempty"`
 
 	// Libraries: Configuration for third-party Python runtime libraries
@@ -2525,12 +2849,9 @@
 	// SERVING.
 	//
 	// Possible values:
-	//   "SERVING_STATUS_UNSPECIFIED" - Not specified.
-	//   "SERVING" - Currently serving. Instances are created according to
-	// the scaling settings of the version.
-	//   "STOPPED" - Disabled. No instances will be created and the scaling
-	// settings are ignored until the state of the version changes to
-	// SERVING.
+	//   "SERVING_STATUS_UNSPECIFIED"
+	//   "SERVING"
+	//   "STOPPED"
 	ServingStatus string `json:"servingStatus,omitempty"`
 
 	// Threadsafe: Whether multiple requests can be dispatched to this
@@ -2631,7 +2952,7 @@
 
 	// SourceUrl: URL of the zip file to deploy from. Must be a URL to a
 	// resource in Google Cloud Storage in the form
-	// 'http(s)://storage.googleapis.com/<bucket>/<object>'.
+	// 'http(s)://storage.googleapis.com//'.
 	SourceUrl string `json:"sourceUrl,omitempty"`
 
 	// ForceSendFields is a list of field names (e.g. "FilesCount") to
@@ -2668,9 +2989,8 @@
 }
 
 // Create: Creates an App Engine application for a Google Cloud Platform
-// project. Required fields:
-// id - The ID of the target Cloud Platform project.
-// location - The region
+// project. Required fields: id - The ID of the target Cloud Platform
+// project. location - The region
 // (https://cloud.google.com/appengine/docs/locations) where you want
 // the App Engine application located.For more information about App
 // Engine applications, see Managing Projects, Applications, and Billing
@@ -2712,7 +3032,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	var body io.Reader = nil
 	body, err := googleapi.WithoutDataWrapper.JSONReader(c.application)
 	if err != nil {
@@ -2765,12 +3084,9 @@
 	}
 	return ret, nil
 	// {
-	//   "description": "Creates an App Engine application for a Google Cloud Platform project. Required fields:\nid - The ID of the target Cloud Platform project.\nlocation - The region (https://cloud.google.com/appengine/docs/locations) where you want the App Engine application located.For more information about App Engine applications, see Managing Projects, Applications, and Billing (https://cloud.google.com/appengine/docs/python/console/).",
-	//   "flatPath": "v1beta/apps",
+	//   "description": "Creates an App Engine application for a Google Cloud Platform project. Required fields: id - The ID of the target Cloud Platform project. location - The region (https://cloud.google.com/appengine/docs/locations) where you want the App Engine application located.For more information about App Engine applications, see Managing Projects, Applications, and Billing (https://cloud.google.com/appengine/docs/python/console/).",
 	//   "httpMethod": "POST",
 	//   "id": "appengine.apps.create",
-	//   "parameterOrder": [],
-	//   "parameters": {},
 	//   "path": "v1beta/apps",
 	//   "request": {
 	//     "$ref": "Application"
@@ -2844,7 +3160,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	if c.ifNoneMatch_ != "" {
 		reqHeaders.Set("If-None-Match", c.ifNoneMatch_)
 	}
@@ -2899,7 +3214,6 @@
 	return ret, nil
 	// {
 	//   "description": "Gets information about an application.",
-	//   "flatPath": "v1beta/apps/{appsId}",
 	//   "httpMethod": "GET",
 	//   "id": "appengine.apps.get",
 	//   "parameterOrder": [
@@ -2938,11 +3252,9 @@
 }
 
 // Patch: Updates the specified Application resource. You can update the
-// following fields:
-// auth_domain - Google authentication domain for controlling user
-// access to the application.
-// default_cookie_expiration - Cookie expiration policy for the
-// application.
+// following fields: auth_domain - Google authentication domain for
+// controlling user access to the application. default_cookie_expiration
+// - Cookie expiration policy for the application.
 func (r *AppsService) Patch(appsId string, application *Application) *AppsPatchCall {
 	c := &AppsPatchCall{s: r.s, urlParams_: make(gensupport.URLParams)}
 	c.appsId = appsId
@@ -2988,7 +3300,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	var body io.Reader = nil
 	body, err := googleapi.WithoutDataWrapper.JSONReader(c.application)
 	if err != nil {
@@ -3044,8 +3355,7 @@
 	}
 	return ret, nil
 	// {
-	//   "description": "Updates the specified Application resource. You can update the following fields:\nauth_domain - Google authentication domain for controlling user access to the application.\ndefault_cookie_expiration - Cookie expiration policy for the application.",
-	//   "flatPath": "v1beta/apps/{appsId}",
+	//   "description": "Updates the specified Application resource. You can update the following fields: auth_domain - Google authentication domain for controlling user access to the application. default_cookie_expiration - Cookie expiration policy for the application.",
 	//   "httpMethod": "PATCH",
 	//   "id": "appengine.apps.patch",
 	//   "parameterOrder": [
@@ -3060,7 +3370,6 @@
 	//     },
 	//     "updateMask": {
 	//       "description": "Standard field mask for the set of fields to be updated.",
-	//       "format": "google-fieldmask",
 	//       "location": "query",
 	//       "type": "string"
 	//     }
@@ -3133,7 +3442,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	var body io.Reader = nil
 	body, err := googleapi.WithoutDataWrapper.JSONReader(c.repairapplicationrequest)
 	if err != nil {
@@ -3190,7 +3498,6 @@
 	return ret, nil
 	// {
 	//   "description": "Recreates the required App Engine features for the specified App Engine application, for example a Cloud Storage bucket or App Engine service account. Use this method if you receive an error message about a missing feature, for example, Error retrieving the App Engine service account.",
-	//   "flatPath": "v1beta/apps/{appsId}:repair",
 	//   "httpMethod": "POST",
 	//   "id": "appengine.apps.repair",
 	//   "parameterOrder": [
@@ -3218,6 +3525,1737 @@
 
 }
 
+// method id "appengine.apps.authorizedCertificates.create":
+
+type AppsAuthorizedCertificatesCreateCall struct {
+	s                     *APIService
+	appsId                string
+	authorizedcertificate *AuthorizedCertificate
+	urlParams_            gensupport.URLParams
+	ctx_                  context.Context
+	header_               http.Header
+}
+
+// Create: Uploads the specified SSL certificate.
+func (r *AppsAuthorizedCertificatesService) Create(appsId string, authorizedcertificate *AuthorizedCertificate) *AppsAuthorizedCertificatesCreateCall {
+	c := &AppsAuthorizedCertificatesCreateCall{s: r.s, urlParams_: make(gensupport.URLParams)}
+	c.appsId = appsId
+	c.authorizedcertificate = authorizedcertificate
+	return c
+}
+
+// Fields allows partial responses to be retrieved. See
+// https://developers.google.com/gdata/docs/2.0/basics#PartialResponse
+// for more information.
+func (c *AppsAuthorizedCertificatesCreateCall) Fields(s ...googleapi.Field) *AppsAuthorizedCertificatesCreateCall {
+	c.urlParams_.Set("fields", googleapi.CombineFields(s))
+	return c
+}
+
+// Context sets the context to be used in this call's Do method. Any
+// pending HTTP request will be aborted if the provided context is
+// canceled.
+func (c *AppsAuthorizedCertificatesCreateCall) Context(ctx context.Context) *AppsAuthorizedCertificatesCreateCall {
+	c.ctx_ = ctx
+	return c
+}
+
+// Header returns an http.Header that can be modified by the caller to
+// add HTTP headers to the request.
+func (c *AppsAuthorizedCertificatesCreateCall) Header() http.Header {
+	if c.header_ == nil {
+		c.header_ = make(http.Header)
+	}
+	return c.header_
+}
+
+func (c *AppsAuthorizedCertificatesCreateCall) doRequest(alt string) (*http.Response, error) {
+	reqHeaders := make(http.Header)
+	for k, v := range c.header_ {
+		reqHeaders[k] = v
+	}
+	reqHeaders.Set("User-Agent", c.s.userAgent())
+	var body io.Reader = nil
+	body, err := googleapi.WithoutDataWrapper.JSONReader(c.authorizedcertificate)
+	if err != nil {
+		return nil, err
+	}
+	reqHeaders.Set("Content-Type", "application/json")
+	c.urlParams_.Set("alt", alt)
+	urls := googleapi.ResolveRelative(c.s.BasePath, "v1beta/apps/{appsId}/authorizedCertificates")
+	urls += "?" + c.urlParams_.Encode()
+	req, _ := http.NewRequest("POST", urls, body)
+	req.Header = reqHeaders
+	googleapi.Expand(req.URL, map[string]string{
+		"appsId": c.appsId,
+	})
+	return gensupport.SendRequest(c.ctx_, c.s.client, req)
+}
+
+// Do executes the "appengine.apps.authorizedCertificates.create" call.
+// Exactly one of *AuthorizedCertificate or error will be non-nil. Any
+// non-2xx status code is an error. Response headers are in either
+// *AuthorizedCertificate.ServerResponse.Header or (if a response was
+// returned at all) in error.(*googleapi.Error).Header. Use
+// googleapi.IsNotModified to check whether the returned error was
+// because http.StatusNotModified was returned.
+func (c *AppsAuthorizedCertificatesCreateCall) Do(opts ...googleapi.CallOption) (*AuthorizedCertificate, error) {
+	gensupport.SetOptions(c.urlParams_, opts...)
+	res, err := c.doRequest("json")
+	if res != nil && res.StatusCode == http.StatusNotModified {
+		if res.Body != nil {
+			res.Body.Close()
+		}
+		return nil, &googleapi.Error{
+			Code:   res.StatusCode,
+			Header: res.Header,
+		}
+	}
+	if err != nil {
+		return nil, err
+	}
+	defer googleapi.CloseBody(res)
+	if err := googleapi.CheckResponse(res); err != nil {
+		return nil, err
+	}
+	ret := &AuthorizedCertificate{
+		ServerResponse: googleapi.ServerResponse{
+			Header:         res.Header,
+			HTTPStatusCode: res.StatusCode,
+		},
+	}
+	target := &ret
+	if err := json.NewDecoder(res.Body).Decode(target); err != nil {
+		return nil, err
+	}
+	return ret, nil
+	// {
+	//   "description": "Uploads the specified SSL certificate.",
+	//   "httpMethod": "POST",
+	//   "id": "appengine.apps.authorizedCertificates.create",
+	//   "parameterOrder": [
+	//     "appsId"
+	//   ],
+	//   "parameters": {
+	//     "appsId": {
+	//       "description": "Part of `parent`. Name of the parent Application resource. Example: apps/myapp.",
+	//       "location": "path",
+	//       "required": true,
+	//       "type": "string"
+	//     }
+	//   },
+	//   "path": "v1beta/apps/{appsId}/authorizedCertificates",
+	//   "request": {
+	//     "$ref": "AuthorizedCertificate"
+	//   },
+	//   "response": {
+	//     "$ref": "AuthorizedCertificate"
+	//   },
+	//   "scopes": [
+	//     "https://www.googleapis.com/auth/cloud-platform"
+	//   ]
+	// }
+
+}
+
+// method id "appengine.apps.authorizedCertificates.delete":
+
+type AppsAuthorizedCertificatesDeleteCall struct {
+	s                        *APIService
+	appsId                   string
+	authorizedCertificatesId string
+	urlParams_               gensupport.URLParams
+	ctx_                     context.Context
+	header_                  http.Header
+}
+
+// Delete: Deletes the specified SSL certificate.
+func (r *AppsAuthorizedCertificatesService) Delete(appsId string, authorizedCertificatesId string) *AppsAuthorizedCertificatesDeleteCall {
+	c := &AppsAuthorizedCertificatesDeleteCall{s: r.s, urlParams_: make(gensupport.URLParams)}
+	c.appsId = appsId
+	c.authorizedCertificatesId = authorizedCertificatesId
+	return c
+}
+
+// Fields allows partial responses to be retrieved. See
+// https://developers.google.com/gdata/docs/2.0/basics#PartialResponse
+// for more information.
+func (c *AppsAuthorizedCertificatesDeleteCall) Fields(s ...googleapi.Field) *AppsAuthorizedCertificatesDeleteCall {
+	c.urlParams_.Set("fields", googleapi.CombineFields(s))
+	return c
+}
+
+// Context sets the context to be used in this call's Do method. Any
+// pending HTTP request will be aborted if the provided context is
+// canceled.
+func (c *AppsAuthorizedCertificatesDeleteCall) Context(ctx context.Context) *AppsAuthorizedCertificatesDeleteCall {
+	c.ctx_ = ctx
+	return c
+}
+
+// Header returns an http.Header that can be modified by the caller to
+// add HTTP headers to the request.
+func (c *AppsAuthorizedCertificatesDeleteCall) Header() http.Header {
+	if c.header_ == nil {
+		c.header_ = make(http.Header)
+	}
+	return c.header_
+}
+
+func (c *AppsAuthorizedCertificatesDeleteCall) doRequest(alt string) (*http.Response, error) {
+	reqHeaders := make(http.Header)
+	for k, v := range c.header_ {
+		reqHeaders[k] = v
+	}
+	reqHeaders.Set("User-Agent", c.s.userAgent())
+	var body io.Reader = nil
+	c.urlParams_.Set("alt", alt)
+	urls := googleapi.ResolveRelative(c.s.BasePath, "v1beta/apps/{appsId}/authorizedCertificates/{authorizedCertificatesId}")
+	urls += "?" + c.urlParams_.Encode()
+	req, _ := http.NewRequest("DELETE", urls, body)
+	req.Header = reqHeaders
+	googleapi.Expand(req.URL, map[string]string{
+		"appsId":                   c.appsId,
+		"authorizedCertificatesId": c.authorizedCertificatesId,
+	})
+	return gensupport.SendRequest(c.ctx_, c.s.client, req)
+}
+
+// Do executes the "appengine.apps.authorizedCertificates.delete" call.
+// Exactly one of *Empty or error will be non-nil. Any non-2xx status
+// code is an error. Response headers are in either
+// *Empty.ServerResponse.Header or (if a response was returned at all)
+// in error.(*googleapi.Error).Header. Use googleapi.IsNotModified to
+// check whether the returned error was because http.StatusNotModified
+// was returned.
+func (c *AppsAuthorizedCertificatesDeleteCall) Do(opts ...googleapi.CallOption) (*Empty, error) {
+	gensupport.SetOptions(c.urlParams_, opts...)
+	res, err := c.doRequest("json")
+	if res != nil && res.StatusCode == http.StatusNotModified {
+		if res.Body != nil {
+			res.Body.Close()
+		}
+		return nil, &googleapi.Error{
+			Code:   res.StatusCode,
+			Header: res.Header,
+		}
+	}
+	if err != nil {
+		return nil, err
+	}
+	defer googleapi.CloseBody(res)
+	if err := googleapi.CheckResponse(res); err != nil {
+		return nil, err
+	}
+	ret := &Empty{
+		ServerResponse: googleapi.ServerResponse{
+			Header:         res.Header,
+			HTTPStatusCode: res.StatusCode,
+		},
+	}
+	target := &ret
+	if err := json.NewDecoder(res.Body).Decode(target); err != nil {
+		return nil, err
+	}
+	return ret, nil
+	// {
+	//   "description": "Deletes the specified SSL certificate.",
+	//   "httpMethod": "DELETE",
+	//   "id": "appengine.apps.authorizedCertificates.delete",
+	//   "parameterOrder": [
+	//     "appsId",
+	//     "authorizedCertificatesId"
+	//   ],
+	//   "parameters": {
+	//     "appsId": {
+	//       "description": "Part of `name`. Name of the resource to delete. Example: apps/myapp/authorizedCertificates/12345.",
+	//       "location": "path",
+	//       "required": true,
+	//       "type": "string"
+	//     },
+	//     "authorizedCertificatesId": {
+	//       "description": "Part of `name`. See documentation of `appsId`.",
+	//       "location": "path",
+	//       "required": true,
+	//       "type": "string"
+	//     }
+	//   },
+	//   "path": "v1beta/apps/{appsId}/authorizedCertificates/{authorizedCertificatesId}",
+	//   "response": {
+	//     "$ref": "Empty"
+	//   },
+	//   "scopes": [
+	//     "https://www.googleapis.com/auth/cloud-platform"
+	//   ]
+	// }
+
+}
+
+// method id "appengine.apps.authorizedCertificates.get":
+
+type AppsAuthorizedCertificatesGetCall struct {
+	s                        *APIService
+	appsId                   string
+	authorizedCertificatesId string
+	urlParams_               gensupport.URLParams
+	ifNoneMatch_             string
+	ctx_                     context.Context
+	header_                  http.Header
+}
+
+// Get: Gets the specified SSL certificate.
+func (r *AppsAuthorizedCertificatesService) Get(appsId string, authorizedCertificatesId string) *AppsAuthorizedCertificatesGetCall {
+	c := &AppsAuthorizedCertificatesGetCall{s: r.s, urlParams_: make(gensupport.URLParams)}
+	c.appsId = appsId
+	c.authorizedCertificatesId = authorizedCertificatesId
+	return c
+}
+
+// View sets the optional parameter "view": Controls the set of fields
+// returned in the GET response.
+//
+// Possible values:
+//   "BASIC_CERTIFICATE"
+//   "FULL_CERTIFICATE"
+func (c *AppsAuthorizedCertificatesGetCall) View(view string) *AppsAuthorizedCertificatesGetCall {
+	c.urlParams_.Set("view", view)
+	return c
+}
+
+// Fields allows partial responses to be retrieved. See
+// https://developers.google.com/gdata/docs/2.0/basics#PartialResponse
+// for more information.
+func (c *AppsAuthorizedCertificatesGetCall) Fields(s ...googleapi.Field) *AppsAuthorizedCertificatesGetCall {
+	c.urlParams_.Set("fields", googleapi.CombineFields(s))
+	return c
+}
+
+// IfNoneMatch sets the optional parameter which makes the operation
+// fail if the object's ETag matches the given value. This is useful for
+// getting updates only after the object has changed since the last
+// request. Use googleapi.IsNotModified to check whether the response
+// error from Do is the result of In-None-Match.
+func (c *AppsAuthorizedCertificatesGetCall) IfNoneMatch(entityTag string) *AppsAuthorizedCertificatesGetCall {
+	c.ifNoneMatch_ = entityTag
+	return c
+}
+
+// Context sets the context to be used in this call's Do method. Any
+// pending HTTP request will be aborted if the provided context is
+// canceled.
+func (c *AppsAuthorizedCertificatesGetCall) Context(ctx context.Context) *AppsAuthorizedCertificatesGetCall {
+	c.ctx_ = ctx
+	return c
+}
+
+// Header returns an http.Header that can be modified by the caller to
+// add HTTP headers to the request.
+func (c *AppsAuthorizedCertificatesGetCall) Header() http.Header {
+	if c.header_ == nil {
+		c.header_ = make(http.Header)
+	}
+	return c.header_
+}
+
+func (c *AppsAuthorizedCertificatesGetCall) doRequest(alt string) (*http.Response, error) {
+	reqHeaders := make(http.Header)
+	for k, v := range c.header_ {
+		reqHeaders[k] = v
+	}
+	reqHeaders.Set("User-Agent", c.s.userAgent())
+	if c.ifNoneMatch_ != "" {
+		reqHeaders.Set("If-None-Match", c.ifNoneMatch_)
+	}
+	var body io.Reader = nil
+	c.urlParams_.Set("alt", alt)
+	urls := googleapi.ResolveRelative(c.s.BasePath, "v1beta/apps/{appsId}/authorizedCertificates/{authorizedCertificatesId}")
+	urls += "?" + c.urlParams_.Encode()
+	req, _ := http.NewRequest("GET", urls, body)
+	req.Header = reqHeaders
+	googleapi.Expand(req.URL, map[string]string{
+		"appsId":                   c.appsId,
+		"authorizedCertificatesId": c.authorizedCertificatesId,
+	})
+	return gensupport.SendRequest(c.ctx_, c.s.client, req)
+}
+
+// Do executes the "appengine.apps.authorizedCertificates.get" call.
+// Exactly one of *AuthorizedCertificate or error will be non-nil. Any
+// non-2xx status code is an error. Response headers are in either
+// *AuthorizedCertificate.ServerResponse.Header or (if a response was
+// returned at all) in error.(*googleapi.Error).Header. Use
+// googleapi.IsNotModified to check whether the returned error was
+// because http.StatusNotModified was returned.
+func (c *AppsAuthorizedCertificatesGetCall) Do(opts ...googleapi.CallOption) (*AuthorizedCertificate, error) {
+	gensupport.SetOptions(c.urlParams_, opts...)
+	res, err := c.doRequest("json")
+	if res != nil && res.StatusCode == http.StatusNotModified {
+		if res.Body != nil {
+			res.Body.Close()
+		}
+		return nil, &googleapi.Error{
+			Code:   res.StatusCode,
+			Header: res.Header,
+		}
+	}
+	if err != nil {
+		return nil, err
+	}
+	defer googleapi.CloseBody(res)
+	if err := googleapi.CheckResponse(res); err != nil {
+		return nil, err
+	}
+	ret := &AuthorizedCertificate{
+		ServerResponse: googleapi.ServerResponse{
+			Header:         res.Header,
+			HTTPStatusCode: res.StatusCode,
+		},
+	}
+	target := &ret
+	if err := json.NewDecoder(res.Body).Decode(target); err != nil {
+		return nil, err
+	}
+	return ret, nil
+	// {
+	//   "description": "Gets the specified SSL certificate.",
+	//   "httpMethod": "GET",
+	//   "id": "appengine.apps.authorizedCertificates.get",
+	//   "parameterOrder": [
+	//     "appsId",
+	//     "authorizedCertificatesId"
+	//   ],
+	//   "parameters": {
+	//     "appsId": {
+	//       "description": "Part of `name`. Name of the resource requested. Example: apps/myapp/authorizedCertificates/12345.",
+	//       "location": "path",
+	//       "required": true,
+	//       "type": "string"
+	//     },
+	//     "authorizedCertificatesId": {
+	//       "description": "Part of `name`. See documentation of `appsId`.",
+	//       "location": "path",
+	//       "required": true,
+	//       "type": "string"
+	//     },
+	//     "view": {
+	//       "description": "Controls the set of fields returned in the GET response.",
+	//       "enum": [
+	//         "BASIC_CERTIFICATE",
+	//         "FULL_CERTIFICATE"
+	//       ],
+	//       "location": "query",
+	//       "type": "string"
+	//     }
+	//   },
+	//   "path": "v1beta/apps/{appsId}/authorizedCertificates/{authorizedCertificatesId}",
+	//   "response": {
+	//     "$ref": "AuthorizedCertificate"
+	//   },
+	//   "scopes": [
+	//     "https://www.googleapis.com/auth/appengine.admin",
+	//     "https://www.googleapis.com/auth/cloud-platform",
+	//     "https://www.googleapis.com/auth/cloud-platform.read-only"
+	//   ]
+	// }
+
+}
+
+// method id "appengine.apps.authorizedCertificates.list":
+
+type AppsAuthorizedCertificatesListCall struct {
+	s            *APIService
+	appsId       string
+	urlParams_   gensupport.URLParams
+	ifNoneMatch_ string
+	ctx_         context.Context
+	header_      http.Header
+}
+
+// List: Lists all SSL certificates the user is authorized to
+// administer.
+func (r *AppsAuthorizedCertificatesService) List(appsId string) *AppsAuthorizedCertificatesListCall {
+	c := &AppsAuthorizedCertificatesListCall{s: r.s, urlParams_: make(gensupport.URLParams)}
+	c.appsId = appsId
+	return c
+}
+
+// PageSize sets the optional parameter "pageSize": Maximum results to
+// return per page.
+func (c *AppsAuthorizedCertificatesListCall) PageSize(pageSize int64) *AppsAuthorizedCertificatesListCall {
+	c.urlParams_.Set("pageSize", fmt.Sprint(pageSize))
+	return c
+}
+
+// PageToken sets the optional parameter "pageToken": Continuation token
+// for fetching the next page of results.
+func (c *AppsAuthorizedCertificatesListCall) PageToken(pageToken string) *AppsAuthorizedCertificatesListCall {
+	c.urlParams_.Set("pageToken", pageToken)
+	return c
+}
+
+// Fields allows partial responses to be retrieved. See
+// https://developers.google.com/gdata/docs/2.0/basics#PartialResponse
+// for more information.
+func (c *AppsAuthorizedCertificatesListCall) Fields(s ...googleapi.Field) *AppsAuthorizedCertificatesListCall {
+	c.urlParams_.Set("fields", googleapi.CombineFields(s))
+	return c
+}
+
+// IfNoneMatch sets the optional parameter which makes the operation
+// fail if the object's ETag matches the given value. This is useful for
+// getting updates only after the object has changed since the last
+// request. Use googleapi.IsNotModified to check whether the response
+// error from Do is the result of In-None-Match.
+func (c *AppsAuthorizedCertificatesListCall) IfNoneMatch(entityTag string) *AppsAuthorizedCertificatesListCall {
+	c.ifNoneMatch_ = entityTag
+	return c
+}
+
+// Context sets the context to be used in this call's Do method. Any
+// pending HTTP request will be aborted if the provided context is
+// canceled.
+func (c *AppsAuthorizedCertificatesListCall) Context(ctx context.Context) *AppsAuthorizedCertificatesListCall {
+	c.ctx_ = ctx
+	return c
+}
+
+// Header returns an http.Header that can be modified by the caller to
+// add HTTP headers to the request.
+func (c *AppsAuthorizedCertificatesListCall) Header() http.Header {
+	if c.header_ == nil {
+		c.header_ = make(http.Header)
+	}
+	return c.header_
+}
+
+func (c *AppsAuthorizedCertificatesListCall) doRequest(alt string) (*http.Response, error) {
+	reqHeaders := make(http.Header)
+	for k, v := range c.header_ {
+		reqHeaders[k] = v
+	}
+	reqHeaders.Set("User-Agent", c.s.userAgent())
+	if c.ifNoneMatch_ != "" {
+		reqHeaders.Set("If-None-Match", c.ifNoneMatch_)
+	}
+	var body io.Reader = nil
+	c.urlParams_.Set("alt", alt)
+	urls := googleapi.ResolveRelative(c.s.BasePath, "v1beta/apps/{appsId}/authorizedCertificates")
+	urls += "?" + c.urlParams_.Encode()
+	req, _ := http.NewRequest("GET", urls, body)
+	req.Header = reqHeaders
+	googleapi.Expand(req.URL, map[string]string{
+		"appsId": c.appsId,
+	})
+	return gensupport.SendRequest(c.ctx_, c.s.client, req)
+}
+
+// Do executes the "appengine.apps.authorizedCertificates.list" call.
+// Exactly one of *ListAuthorizedCertificatesResponse or error will be
+// non-nil. Any non-2xx status code is an error. Response headers are in
+// either *ListAuthorizedCertificatesResponse.ServerResponse.Header or
+// (if a response was returned at all) in
+// error.(*googleapi.Error).Header. Use googleapi.IsNotModified to check
+// whether the returned error was because http.StatusNotModified was
+// returned.
+func (c *AppsAuthorizedCertificatesListCall) Do(opts ...googleapi.CallOption) (*ListAuthorizedCertificatesResponse, error) {
+	gensupport.SetOptions(c.urlParams_, opts...)
+	res, err := c.doRequest("json")
+	if res != nil && res.StatusCode == http.StatusNotModified {
+		if res.Body != nil {
+			res.Body.Close()
+		}
+		return nil, &googleapi.Error{
+			Code:   res.StatusCode,
+			Header: res.Header,
+		}
+	}
+	if err != nil {
+		return nil, err
+	}
+	defer googleapi.CloseBody(res)
+	if err := googleapi.CheckResponse(res); err != nil {
+		return nil, err
+	}
+	ret := &ListAuthorizedCertificatesResponse{
+		ServerResponse: googleapi.ServerResponse{
+			Header:         res.Header,
+			HTTPStatusCode: res.StatusCode,
+		},
+	}
+	target := &ret
+	if err := json.NewDecoder(res.Body).Decode(target); err != nil {
+		return nil, err
+	}
+	return ret, nil
+	// {
+	//   "description": "Lists all SSL certificates the user is authorized to administer.",
+	//   "httpMethod": "GET",
+	//   "id": "appengine.apps.authorizedCertificates.list",
+	//   "parameterOrder": [
+	//     "appsId"
+	//   ],
+	//   "parameters": {
+	//     "appsId": {
+	//       "description": "Part of `parent`. Name of the parent Application resource. Example: apps/myapp.",
+	//       "location": "path",
+	//       "required": true,
+	//       "type": "string"
+	//     },
+	//     "pageSize": {
+	//       "description": "Maximum results to return per page.",
+	//       "format": "int32",
+	//       "location": "query",
+	//       "type": "integer"
+	//     },
+	//     "pageToken": {
+	//       "description": "Continuation token for fetching the next page of results.",
+	//       "location": "query",
+	//       "type": "string"
+	//     }
+	//   },
+	//   "path": "v1beta/apps/{appsId}/authorizedCertificates",
+	//   "response": {
+	//     "$ref": "ListAuthorizedCertificatesResponse"
+	//   },
+	//   "scopes": [
+	//     "https://www.googleapis.com/auth/appengine.admin",
+	//     "https://www.googleapis.com/auth/cloud-platform",
+	//     "https://www.googleapis.com/auth/cloud-platform.read-only"
+	//   ]
+	// }
+
+}
+
+// Pages invokes f for each page of results.
+// A non-nil error returned from f will halt the iteration.
+// The provided context supersedes any context provided to the Context method.
+func (c *AppsAuthorizedCertificatesListCall) Pages(ctx context.Context, f func(*ListAuthorizedCertificatesResponse) error) error {
+	c.ctx_ = ctx
+	defer c.PageToken(c.urlParams_.Get("pageToken")) // reset paging to original point
+	for {
+		x, err := c.Do()
+		if err != nil {
+			return err
+		}
+		if err := f(x); err != nil {
+			return err
+		}
+		if x.NextPageToken == "" {
+			return nil
+		}
+		c.PageToken(x.NextPageToken)
+	}
+}
+
+// method id "appengine.apps.authorizedCertificates.patch":
+
+type AppsAuthorizedCertificatesPatchCall struct {
+	s                        *APIService
+	appsId                   string
+	authorizedCertificatesId string
+	authorizedcertificate    *AuthorizedCertificate
+	urlParams_               gensupport.URLParams
+	ctx_                     context.Context
+	header_                  http.Header
+}
+
+// Patch: Updates the specified SSL certificate. To renew a certificate
+// and maintain its existing domain mappings, update certificate_data
+// with a new certificate. The new certificate must be applicable to the
+// same domains as the original certificate. The certificate
+// display_name may also be updated.
+func (r *AppsAuthorizedCertificatesService) Patch(appsId string, authorizedCertificatesId string, authorizedcertificate *AuthorizedCertificate) *AppsAuthorizedCertificatesPatchCall {
+	c := &AppsAuthorizedCertificatesPatchCall{s: r.s, urlParams_: make(gensupport.URLParams)}
+	c.appsId = appsId
+	c.authorizedCertificatesId = authorizedCertificatesId
+	c.authorizedcertificate = authorizedcertificate
+	return c
+}
+
+// UpdateMask sets the optional parameter "updateMask": Standard field
+// mask for the set of fields to be updated. Updates are only supported
+// on the certificate_raw_data and display_name fields.
+func (c *AppsAuthorizedCertificatesPatchCall) UpdateMask(updateMask string) *AppsAuthorizedCertificatesPatchCall {
+	c.urlParams_.Set("updateMask", updateMask)
+	return c
+}
+
+// Fields allows partial responses to be retrieved. See
+// https://developers.google.com/gdata/docs/2.0/basics#PartialResponse
+// for more information.
+func (c *AppsAuthorizedCertificatesPatchCall) Fields(s ...googleapi.Field) *AppsAuthorizedCertificatesPatchCall {
+	c.urlParams_.Set("fields", googleapi.CombineFields(s))
+	return c
+}
+
+// Context sets the context to be used in this call's Do method. Any
+// pending HTTP request will be aborted if the provided context is
+// canceled.
+func (c *AppsAuthorizedCertificatesPatchCall) Context(ctx context.Context) *AppsAuthorizedCertificatesPatchCall {
+	c.ctx_ = ctx
+	return c
+}
+
+// Header returns an http.Header that can be modified by the caller to
+// add HTTP headers to the request.
+func (c *AppsAuthorizedCertificatesPatchCall) Header() http.Header {
+	if c.header_ == nil {
+		c.header_ = make(http.Header)
+	}
+	return c.header_
+}
+
+func (c *AppsAuthorizedCertificatesPatchCall) doRequest(alt string) (*http.Response, error) {
+	reqHeaders := make(http.Header)
+	for k, v := range c.header_ {
+		reqHeaders[k] = v
+	}
+	reqHeaders.Set("User-Agent", c.s.userAgent())
+	var body io.Reader = nil
+	body, err := googleapi.WithoutDataWrapper.JSONReader(c.authorizedcertificate)
+	if err != nil {
+		return nil, err
+	}
+	reqHeaders.Set("Content-Type", "application/json")
+	c.urlParams_.Set("alt", alt)
+	urls := googleapi.ResolveRelative(c.s.BasePath, "v1beta/apps/{appsId}/authorizedCertificates/{authorizedCertificatesId}")
+	urls += "?" + c.urlParams_.Encode()
+	req, _ := http.NewRequest("PATCH", urls, body)
+	req.Header = reqHeaders
+	googleapi.Expand(req.URL, map[string]string{
+		"appsId":                   c.appsId,
+		"authorizedCertificatesId": c.authorizedCertificatesId,
+	})
+	return gensupport.SendRequest(c.ctx_, c.s.client, req)
+}
+
+// Do executes the "appengine.apps.authorizedCertificates.patch" call.
+// Exactly one of *AuthorizedCertificate or error will be non-nil. Any
+// non-2xx status code is an error. Response headers are in either
+// *AuthorizedCertificate.ServerResponse.Header or (if a response was
+// returned at all) in error.(*googleapi.Error).Header. Use
+// googleapi.IsNotModified to check whether the returned error was
+// because http.StatusNotModified was returned.
+func (c *AppsAuthorizedCertificatesPatchCall) Do(opts ...googleapi.CallOption) (*AuthorizedCertificate, error) {
+	gensupport.SetOptions(c.urlParams_, opts...)
+	res, err := c.doRequest("json")
+	if res != nil && res.StatusCode == http.StatusNotModified {
+		if res.Body != nil {
+			res.Body.Close()
+		}
+		return nil, &googleapi.Error{
+			Code:   res.StatusCode,
+			Header: res.Header,
+		}
+	}
+	if err != nil {
+		return nil, err
+	}
+	defer googleapi.CloseBody(res)
+	if err := googleapi.CheckResponse(res); err != nil {
+		return nil, err
+	}
+	ret := &AuthorizedCertificate{
+		ServerResponse: googleapi.ServerResponse{
+			Header:         res.Header,
+			HTTPStatusCode: res.StatusCode,
+		},
+	}
+	target := &ret
+	if err := json.NewDecoder(res.Body).Decode(target); err != nil {
+		return nil, err
+	}
+	return ret, nil
+	// {
+	//   "description": "Updates the specified SSL certificate. To renew a certificate and maintain its existing domain mappings, update certificate_data with a new certificate. The new certificate must be applicable to the same domains as the original certificate. The certificate display_name may also be updated.",
+	//   "httpMethod": "PATCH",
+	//   "id": "appengine.apps.authorizedCertificates.patch",
+	//   "parameterOrder": [
+	//     "appsId",
+	//     "authorizedCertificatesId"
+	//   ],
+	//   "parameters": {
+	//     "appsId": {
+	//       "description": "Part of `name`. Name of the resource to update. Example: apps/myapp/authorizedCertificates/12345.",
+	//       "location": "path",
+	//       "required": true,
+	//       "type": "string"
+	//     },
+	//     "authorizedCertificatesId": {
+	//       "description": "Part of `name`. See documentation of `appsId`.",
+	//       "location": "path",
+	//       "required": true,
+	//       "type": "string"
+	//     },
+	//     "updateMask": {
+	//       "description": "Standard field mask for the set of fields to be updated. Updates are only supported on the certificate_raw_data and display_name fields.",
+	//       "location": "query",
+	//       "type": "string"
+	//     }
+	//   },
+	//   "path": "v1beta/apps/{appsId}/authorizedCertificates/{authorizedCertificatesId}",
+	//   "request": {
+	//     "$ref": "AuthorizedCertificate"
+	//   },
+	//   "response": {
+	//     "$ref": "AuthorizedCertificate"
+	//   },
+	//   "scopes": [
+	//     "https://www.googleapis.com/auth/cloud-platform"
+	//   ]
+	// }
+
+}
+
+// method id "appengine.apps.authorizedDomains.list":
+
+type AppsAuthorizedDomainsListCall struct {
+	s            *APIService
+	appsId       string
+	urlParams_   gensupport.URLParams
+	ifNoneMatch_ string
+	ctx_         context.Context
+	header_      http.Header
+}
+
+// List: Lists all domains the user is authorized to administer.
+func (r *AppsAuthorizedDomainsService) List(appsId string) *AppsAuthorizedDomainsListCall {
+	c := &AppsAuthorizedDomainsListCall{s: r.s, urlParams_: make(gensupport.URLParams)}
+	c.appsId = appsId
+	return c
+}
+
+// PageSize sets the optional parameter "pageSize": Maximum results to
+// return per page.
+func (c *AppsAuthorizedDomainsListCall) PageSize(pageSize int64) *AppsAuthorizedDomainsListCall {
+	c.urlParams_.Set("pageSize", fmt.Sprint(pageSize))
+	return c
+}
+
+// PageToken sets the optional parameter "pageToken": Continuation token
+// for fetching the next page of results.
+func (c *AppsAuthorizedDomainsListCall) PageToken(pageToken string) *AppsAuthorizedDomainsListCall {
+	c.urlParams_.Set("pageToken", pageToken)
+	return c
+}
+
+// Fields allows partial responses to be retrieved. See
+// https://developers.google.com/gdata/docs/2.0/basics#PartialResponse
+// for more information.
+func (c *AppsAuthorizedDomainsListCall) Fields(s ...googleapi.Field) *AppsAuthorizedDomainsListCall {
+	c.urlParams_.Set("fields", googleapi.CombineFields(s))
+	return c
+}
+
+// IfNoneMatch sets the optional parameter which makes the operation
+// fail if the object's ETag matches the given value. This is useful for
+// getting updates only after the object has changed since the last
+// request. Use googleapi.IsNotModified to check whether the response
+// error from Do is the result of In-None-Match.
+func (c *AppsAuthorizedDomainsListCall) IfNoneMatch(entityTag string) *AppsAuthorizedDomainsListCall {
+	c.ifNoneMatch_ = entityTag
+	return c
+}
+
+// Context sets the context to be used in this call's Do method. Any
+// pending HTTP request will be aborted if the provided context is
+// canceled.
+func (c *AppsAuthorizedDomainsListCall) Context(ctx context.Context) *AppsAuthorizedDomainsListCall {
+	c.ctx_ = ctx
+	return c
+}
+
+// Header returns an http.Header that can be modified by the caller to
+// add HTTP headers to the request.
+func (c *AppsAuthorizedDomainsListCall) Header() http.Header {
+	if c.header_ == nil {
+		c.header_ = make(http.Header)
+	}
+	return c.header_
+}
+
+func (c *AppsAuthorizedDomainsListCall) doRequest(alt string) (*http.Response, error) {
+	reqHeaders := make(http.Header)
+	for k, v := range c.header_ {
+		reqHeaders[k] = v
+	}
+	reqHeaders.Set("User-Agent", c.s.userAgent())
+	if c.ifNoneMatch_ != "" {
+		reqHeaders.Set("If-None-Match", c.ifNoneMatch_)
+	}
+	var body io.Reader = nil
+	c.urlParams_.Set("alt", alt)
+	urls := googleapi.ResolveRelative(c.s.BasePath, "v1beta/apps/{appsId}/authorizedDomains")
+	urls += "?" + c.urlParams_.Encode()
+	req, _ := http.NewRequest("GET", urls, body)
+	req.Header = reqHeaders
+	googleapi.Expand(req.URL, map[string]string{
+		"appsId": c.appsId,
+	})
+	return gensupport.SendRequest(c.ctx_, c.s.client, req)
+}
+
+// Do executes the "appengine.apps.authorizedDomains.list" call.
+// Exactly one of *ListAuthorizedDomainsResponse or error will be
+// non-nil. Any non-2xx status code is an error. Response headers are in
+// either *ListAuthorizedDomainsResponse.ServerResponse.Header or (if a
+// response was returned at all) in error.(*googleapi.Error).Header. Use
+// googleapi.IsNotModified to check whether the returned error was
+// because http.StatusNotModified was returned.
+func (c *AppsAuthorizedDomainsListCall) Do(opts ...googleapi.CallOption) (*ListAuthorizedDomainsResponse, error) {
+	gensupport.SetOptions(c.urlParams_, opts...)
+	res, err := c.doRequest("json")
+	if res != nil && res.StatusCode == http.StatusNotModified {
+		if res.Body != nil {
+			res.Body.Close()
+		}
+		return nil, &googleapi.Error{
+			Code:   res.StatusCode,
+			Header: res.Header,
+		}
+	}
+	if err != nil {
+		return nil, err
+	}
+	defer googleapi.CloseBody(res)
+	if err := googleapi.CheckResponse(res); err != nil {
+		return nil, err
+	}
+	ret := &ListAuthorizedDomainsResponse{
+		ServerResponse: googleapi.ServerResponse{
+			Header:         res.Header,
+			HTTPStatusCode: res.StatusCode,
+		},
+	}
+	target := &ret
+	if err := json.NewDecoder(res.Body).Decode(target); err != nil {
+		return nil, err
+	}
+	return ret, nil
+	// {
+	//   "description": "Lists all domains the user is authorized to administer.",
+	//   "httpMethod": "GET",
+	//   "id": "appengine.apps.authorizedDomains.list",
+	//   "parameterOrder": [
+	//     "appsId"
+	//   ],
+	//   "parameters": {
+	//     "appsId": {
+	//       "description": "Part of `parent`. Name of the parent Application resource. Example: apps/myapp.",
+	//       "location": "path",
+	//       "required": true,
+	//       "type": "string"
+	//     },
+	//     "pageSize": {
+	//       "description": "Maximum results to return per page.",
+	//       "format": "int32",
+	//       "location": "query",
+	//       "type": "integer"
+	//     },
+	//     "pageToken": {
+	//       "description": "Continuation token for fetching the next page of results.",
+	//       "location": "query",
+	//       "type": "string"
+	//     }
+	//   },
+	//   "path": "v1beta/apps/{appsId}/authorizedDomains",
+	//   "response": {
+	//     "$ref": "ListAuthorizedDomainsResponse"
+	//   },
+	//   "scopes": [
+	//     "https://www.googleapis.com/auth/appengine.admin",
+	//     "https://www.googleapis.com/auth/cloud-platform",
+	//     "https://www.googleapis.com/auth/cloud-platform.read-only"
+	//   ]
+	// }
+
+}
+
+// Pages invokes f for each page of results.
+// A non-nil error returned from f will halt the iteration.
+// The provided context supersedes any context provided to the Context method.
+func (c *AppsAuthorizedDomainsListCall) Pages(ctx context.Context, f func(*ListAuthorizedDomainsResponse) error) error {
+	c.ctx_ = ctx
+	defer c.PageToken(c.urlParams_.Get("pageToken")) // reset paging to original point
+	for {
+		x, err := c.Do()
+		if err != nil {
+			return err
+		}
+		if err := f(x); err != nil {
+			return err
+		}
+		if x.NextPageToken == "" {
+			return nil
+		}
+		c.PageToken(x.NextPageToken)
+	}
+}
+
+// method id "appengine.apps.domainMappings.create":
+
+type AppsDomainMappingsCreateCall struct {
+	s             *APIService
+	appsId        string
+	domainmapping *DomainMapping
+	urlParams_    gensupport.URLParams
+	ctx_          context.Context
+	header_       http.Header
+}
+
+// Create: Maps a domain to an application. A user must be authorized to
+// administer a domain in order to map it to an application. For a list
+// of available authorized domains, see
+// AuthorizedDomains.ListAuthorizedDomains.
+func (r *AppsDomainMappingsService) Create(appsId string, domainmapping *DomainMapping) *AppsDomainMappingsCreateCall {
+	c := &AppsDomainMappingsCreateCall{s: r.s, urlParams_: make(gensupport.URLParams)}
+	c.appsId = appsId
+	c.domainmapping = domainmapping
+	return c
+}
+
+// Fields allows partial responses to be retrieved. See
+// https://developers.google.com/gdata/docs/2.0/basics#PartialResponse
+// for more information.
+func (c *AppsDomainMappingsCreateCall) Fields(s ...googleapi.Field) *AppsDomainMappingsCreateCall {
+	c.urlParams_.Set("fields", googleapi.CombineFields(s))
+	return c
+}
+
+// Context sets the context to be used in this call's Do method. Any
+// pending HTTP request will be aborted if the provided context is
+// canceled.
+func (c *AppsDomainMappingsCreateCall) Context(ctx context.Context) *AppsDomainMappingsCreateCall {
+	c.ctx_ = ctx
+	return c
+}
+
+// Header returns an http.Header that can be modified by the caller to
+// add HTTP headers to the request.
+func (c *AppsDomainMappingsCreateCall) Header() http.Header {
+	if c.header_ == nil {
+		c.header_ = make(http.Header)
+	}
+	return c.header_
+}
+
+func (c *AppsDomainMappingsCreateCall) doRequest(alt string) (*http.Response, error) {
+	reqHeaders := make(http.Header)
+	for k, v := range c.header_ {
+		reqHeaders[k] = v
+	}
+	reqHeaders.Set("User-Agent", c.s.userAgent())
+	var body io.Reader = nil
+	body, err := googleapi.WithoutDataWrapper.JSONReader(c.domainmapping)
+	if err != nil {
+		return nil, err
+	}
+	reqHeaders.Set("Content-Type", "application/json")
+	c.urlParams_.Set("alt", alt)
+	urls := googleapi.ResolveRelative(c.s.BasePath, "v1beta/apps/{appsId}/domainMappings")
+	urls += "?" + c.urlParams_.Encode()
+	req, _ := http.NewRequest("POST", urls, body)
+	req.Header = reqHeaders
+	googleapi.Expand(req.URL, map[string]string{
+		"appsId": c.appsId,
+	})
+	return gensupport.SendRequest(c.ctx_, c.s.client, req)
+}
+
+// Do executes the "appengine.apps.domainMappings.create" call.
+// Exactly one of *Operation or error will be non-nil. Any non-2xx
+// status code is an error. Response headers are in either
+// *Operation.ServerResponse.Header or (if a response was returned at
+// all) in error.(*googleapi.Error).Header. Use googleapi.IsNotModified
+// to check whether the returned error was because
+// http.StatusNotModified was returned.
+func (c *AppsDomainMappingsCreateCall) Do(opts ...googleapi.CallOption) (*Operation, error) {
+	gensupport.SetOptions(c.urlParams_, opts...)
+	res, err := c.doRequest("json")
+	if res != nil && res.StatusCode == http.StatusNotModified {
+		if res.Body != nil {
+			res.Body.Close()
+		}
+		return nil, &googleapi.Error{
+			Code:   res.StatusCode,
+			Header: res.Header,
+		}
+	}
+	if err != nil {
+		return nil, err
+	}
+	defer googleapi.CloseBody(res)
+	if err := googleapi.CheckResponse(res); err != nil {
+		return nil, err
+	}
+	ret := &Operation{
+		ServerResponse: googleapi.ServerResponse{
+			Header:         res.Header,
+			HTTPStatusCode: res.StatusCode,
+		},
+	}
+	target := &ret
+	if err := json.NewDecoder(res.Body).Decode(target); err != nil {
+		return nil, err
+	}
+	return ret, nil
+	// {
+	//   "description": "Maps a domain to an application. A user must be authorized to administer a domain in order to map it to an application. For a list of available authorized domains, see AuthorizedDomains.ListAuthorizedDomains.",
+	//   "httpMethod": "POST",
+	//   "id": "appengine.apps.domainMappings.create",
+	//   "parameterOrder": [
+	//     "appsId"
+	//   ],
+	//   "parameters": {
+	//     "appsId": {
+	//       "description": "Part of `parent`. Name of the parent Application resource. Example: apps/myapp.",
+	//       "location": "path",
+	//       "required": true,
+	//       "type": "string"
+	//     }
+	//   },
+	//   "path": "v1beta/apps/{appsId}/domainMappings",
+	//   "request": {
+	//     "$ref": "DomainMapping"
+	//   },
+	//   "response": {
+	//     "$ref": "Operation"
+	//   },
+	//   "scopes": [
+	//     "https://www.googleapis.com/auth/cloud-platform"
+	//   ]
+	// }
+
+}
+
+// method id "appengine.apps.domainMappings.delete":
+
+type AppsDomainMappingsDeleteCall struct {
+	s                *APIService
+	appsId           string
+	domainMappingsId string
+	urlParams_       gensupport.URLParams
+	ctx_             context.Context
+	header_          http.Header
+}
+
+// Delete: Deletes the specified domain mapping. A user must be
+// authorized to administer the associated domain in order to delete a
+// DomainMapping resource.
+func (r *AppsDomainMappingsService) Delete(appsId string, domainMappingsId string) *AppsDomainMappingsDeleteCall {
+	c := &AppsDomainMappingsDeleteCall{s: r.s, urlParams_: make(gensupport.URLParams)}
+	c.appsId = appsId
+	c.domainMappingsId = domainMappingsId
+	return c
+}
+
+// Fields allows partial responses to be retrieved. See
+// https://developers.google.com/gdata/docs/2.0/basics#PartialResponse
+// for more information.
+func (c *AppsDomainMappingsDeleteCall) Fields(s ...googleapi.Field) *AppsDomainMappingsDeleteCall {
+	c.urlParams_.Set("fields", googleapi.CombineFields(s))
+	return c
+}
+
+// Context sets the context to be used in this call's Do method. Any
+// pending HTTP request will be aborted if the provided context is
+// canceled.
+func (c *AppsDomainMappingsDeleteCall) Context(ctx context.Context) *AppsDomainMappingsDeleteCall {
+	c.ctx_ = ctx
+	return c
+}
+
+// Header returns an http.Header that can be modified by the caller to
+// add HTTP headers to the request.
+func (c *AppsDomainMappingsDeleteCall) Header() http.Header {
+	if c.header_ == nil {
+		c.header_ = make(http.Header)
+	}
+	return c.header_
+}
+
+func (c *AppsDomainMappingsDeleteCall) doRequest(alt string) (*http.Response, error) {
+	reqHeaders := make(http.Header)
+	for k, v := range c.header_ {
+		reqHeaders[k] = v
+	}
+	reqHeaders.Set("User-Agent", c.s.userAgent())
+	var body io.Reader = nil
+	c.urlParams_.Set("alt", alt)
+	urls := googleapi.ResolveRelative(c.s.BasePath, "v1beta/apps/{appsId}/domainMappings/{domainMappingsId}")
+	urls += "?" + c.urlParams_.Encode()
+	req, _ := http.NewRequest("DELETE", urls, body)
+	req.Header = reqHeaders
+	googleapi.Expand(req.URL, map[string]string{
+		"appsId":           c.appsId,
+		"domainMappingsId": c.domainMappingsId,
+	})
+	return gensupport.SendRequest(c.ctx_, c.s.client, req)
+}
+
+// Do executes the "appengine.apps.domainMappings.delete" call.
+// Exactly one of *Operation or error will be non-nil. Any non-2xx
+// status code is an error. Response headers are in either
+// *Operation.ServerResponse.Header or (if a response was returned at
+// all) in error.(*googleapi.Error).Header. Use googleapi.IsNotModified
+// to check whether the returned error was because
+// http.StatusNotModified was returned.
+func (c *AppsDomainMappingsDeleteCall) Do(opts ...googleapi.CallOption) (*Operation, error) {
+	gensupport.SetOptions(c.urlParams_, opts...)
+	res, err := c.doRequest("json")
+	if res != nil && res.StatusCode == http.StatusNotModified {
+		if res.Body != nil {
+			res.Body.Close()
+		}
+		return nil, &googleapi.Error{
+			Code:   res.StatusCode,
+			Header: res.Header,
+		}
+	}
+	if err != nil {
+		return nil, err
+	}
+	defer googleapi.CloseBody(res)
+	if err := googleapi.CheckResponse(res); err != nil {
+		return nil, err
+	}
+	ret := &Operation{
+		ServerResponse: googleapi.ServerResponse{
+			Header:         res.Header,
+			HTTPStatusCode: res.StatusCode,
+		},
+	}
+	target := &ret
+	if err := json.NewDecoder(res.Body).Decode(target); err != nil {
+		return nil, err
+	}
+	return ret, nil
+	// {
+	//   "description": "Deletes the specified domain mapping. A user must be authorized to administer the associated domain in order to delete a DomainMapping resource.",
+	//   "httpMethod": "DELETE",
+	//   "id": "appengine.apps.domainMappings.delete",
+	//   "parameterOrder": [
+	//     "appsId",
+	//     "domainMappingsId"
+	//   ],
+	//   "parameters": {
+	//     "appsId": {
+	//       "description": "Part of `name`. Name of the resource to delete. Example: apps/myapp/domainMappings/example.com.",
+	//       "location": "path",
+	//       "required": true,
+	//       "type": "string"
+	//     },
+	//     "domainMappingsId": {
+	//       "description": "Part of `name`. See documentation of `appsId`.",
+	//       "location": "path",
+	//       "required": true,
+	//       "type": "string"
+	//     }
+	//   },
+	//   "path": "v1beta/apps/{appsId}/domainMappings/{domainMappingsId}",
+	//   "response": {
+	//     "$ref": "Operation"
+	//   },
+	//   "scopes": [
+	//     "https://www.googleapis.com/auth/cloud-platform"
+	//   ]
+	// }
+
+}
+
+// method id "appengine.apps.domainMappings.get":
+
+type AppsDomainMappingsGetCall struct {
+	s                *APIService
+	appsId           string
+	domainMappingsId string
+	urlParams_       gensupport.URLParams
+	ifNoneMatch_     string
+	ctx_             context.Context
+	header_          http.Header
+}
+
+// Get: Gets the specified domain mapping.
+func (r *AppsDomainMappingsService) Get(appsId string, domainMappingsId string) *AppsDomainMappingsGetCall {
+	c := &AppsDomainMappingsGetCall{s: r.s, urlParams_: make(gensupport.URLParams)}
+	c.appsId = appsId
+	c.domainMappingsId = domainMappingsId
+	return c
+}
+
+// Fields allows partial responses to be retrieved. See
+// https://developers.google.com/gdata/docs/2.0/basics#PartialResponse
+// for more information.
+func (c *AppsDomainMappingsGetCall) Fields(s ...googleapi.Field) *AppsDomainMappingsGetCall {
+	c.urlParams_.Set("fields", googleapi.CombineFields(s))
+	return c
+}
+
+// IfNoneMatch sets the optional parameter which makes the operation
+// fail if the object's ETag matches the given value. This is useful for
+// getting updates only after the object has changed since the last
+// request. Use googleapi.IsNotModified to check whether the response
+// error from Do is the result of In-None-Match.
+func (c *AppsDomainMappingsGetCall) IfNoneMatch(entityTag string) *AppsDomainMappingsGetCall {
+	c.ifNoneMatch_ = entityTag
+	return c
+}
+
+// Context sets the context to be used in this call's Do method. Any
+// pending HTTP request will be aborted if the provided context is
+// canceled.
+func (c *AppsDomainMappingsGetCall) Context(ctx context.Context) *AppsDomainMappingsGetCall {
+	c.ctx_ = ctx
+	return c
+}
+
+// Header returns an http.Header that can be modified by the caller to
+// add HTTP headers to the request.
+func (c *AppsDomainMappingsGetCall) Header() http.Header {
+	if c.header_ == nil {
+		c.header_ = make(http.Header)
+	}
+	return c.header_
+}
+
+func (c *AppsDomainMappingsGetCall) doRequest(alt string) (*http.Response, error) {
+	reqHeaders := make(http.Header)
+	for k, v := range c.header_ {
+		reqHeaders[k] = v
+	}
+	reqHeaders.Set("User-Agent", c.s.userAgent())
+	if c.ifNoneMatch_ != "" {
+		reqHeaders.Set("If-None-Match", c.ifNoneMatch_)
+	}
+	var body io.Reader = nil
+	c.urlParams_.Set("alt", alt)
+	urls := googleapi.ResolveRelative(c.s.BasePath, "v1beta/apps/{appsId}/domainMappings/{domainMappingsId}")
+	urls += "?" + c.urlParams_.Encode()
+	req, _ := http.NewRequest("GET", urls, body)
+	req.Header = reqHeaders
+	googleapi.Expand(req.URL, map[string]string{
+		"appsId":           c.appsId,
+		"domainMappingsId": c.domainMappingsId,
+	})
+	return gensupport.SendRequest(c.ctx_, c.s.client, req)
+}
+
+// Do executes the "appengine.apps.domainMappings.get" call.
+// Exactly one of *DomainMapping or error will be non-nil. Any non-2xx
+// status code is an error. Response headers are in either
+// *DomainMapping.ServerResponse.Header or (if a response was returned
+// at all) in error.(*googleapi.Error).Header. Use
+// googleapi.IsNotModified to check whether the returned error was
+// because http.StatusNotModified was returned.
+func (c *AppsDomainMappingsGetCall) Do(opts ...googleapi.CallOption) (*DomainMapping, error) {
+	gensupport.SetOptions(c.urlParams_, opts...)
+	res, err := c.doRequest("json")
+	if res != nil && res.StatusCode == http.StatusNotModified {
+		if res.Body != nil {
+			res.Body.Close()
+		}
+		return nil, &googleapi.Error{
+			Code:   res.StatusCode,
+			Header: res.Header,
+		}
+	}
+	if err != nil {
+		return nil, err
+	}
+	defer googleapi.CloseBody(res)
+	if err := googleapi.CheckResponse(res); err != nil {
+		return nil, err
+	}
+	ret := &DomainMapping{
+		ServerResponse: googleapi.ServerResponse{
+			Header:         res.Header,
+			HTTPStatusCode: res.StatusCode,
+		},
+	}
+	target := &ret
+	if err := json.NewDecoder(res.Body).Decode(target); err != nil {
+		return nil, err
+	}
+	return ret, nil
+	// {
+	//   "description": "Gets the specified domain mapping.",
+	//   "httpMethod": "GET",
+	//   "id": "appengine.apps.domainMappings.get",
+	//   "parameterOrder": [
+	//     "appsId",
+	//     "domainMappingsId"
+	//   ],
+	//   "parameters": {
+	//     "appsId": {
+	//       "description": "Part of `name`. Name of the resource requested. Example: apps/myapp/domainMappings/example.com.",
+	//       "location": "path",
+	//       "required": true,
+	//       "type": "string"
+	//     },
+	//     "domainMappingsId": {
+	//       "description": "Part of `name`. See documentation of `appsId`.",
+	//       "location": "path",
+	//       "required": true,
+	//       "type": "string"
+	//     }
+	//   },
+	//   "path": "v1beta/apps/{appsId}/domainMappings/{domainMappingsId}",
+	//   "response": {
+	//     "$ref": "DomainMapping"
+	//   },
+	//   "scopes": [
+	//     "https://www.googleapis.com/auth/appengine.admin",
+	//     "https://www.googleapis.com/auth/cloud-platform",
+	//     "https://www.googleapis.com/auth/cloud-platform.read-only"
+	//   ]
+	// }
+
+}
+
+// method id "appengine.apps.domainMappings.list":
+
+type AppsDomainMappingsListCall struct {
+	s            *APIService
+	appsId       string
+	urlParams_   gensupport.URLParams
+	ifNoneMatch_ string
+	ctx_         context.Context
+	header_      http.Header
+}
+
+// List: Lists the domain mappings on an application.
+func (r *AppsDomainMappingsService) List(appsId string) *AppsDomainMappingsListCall {
+	c := &AppsDomainMappingsListCall{s: r.s, urlParams_: make(gensupport.URLParams)}
+	c.appsId = appsId
+	return c
+}
+
+// PageSize sets the optional parameter "pageSize": Maximum results to
+// return per page.
+func (c *AppsDomainMappingsListCall) PageSize(pageSize int64) *AppsDomainMappingsListCall {
+	c.urlParams_.Set("pageSize", fmt.Sprint(pageSize))
+	return c
+}
+
+// PageToken sets the optional parameter "pageToken": Continuation token
+// for fetching the next page of results.
+func (c *AppsDomainMappingsListCall) PageToken(pageToken string) *AppsDomainMappingsListCall {
+	c.urlParams_.Set("pageToken", pageToken)
+	return c
+}
+
+// Fields allows partial responses to be retrieved. See
+// https://developers.google.com/gdata/docs/2.0/basics#PartialResponse
+// for more information.
+func (c *AppsDomainMappingsListCall) Fields(s ...googleapi.Field) *AppsDomainMappingsListCall {
+	c.urlParams_.Set("fields", googleapi.CombineFields(s))
+	return c
+}
+
+// IfNoneMatch sets the optional parameter which makes the operation
+// fail if the object's ETag matches the given value. This is useful for
+// getting updates only after the object has changed since the last
+// request. Use googleapi.IsNotModified to check whether the response
+// error from Do is the result of In-None-Match.
+func (c *AppsDomainMappingsListCall) IfNoneMatch(entityTag string) *AppsDomainMappingsListCall {
+	c.ifNoneMatch_ = entityTag
+	return c
+}
+
+// Context sets the context to be used in this call's Do method. Any
+// pending HTTP request will be aborted if the provided context is
+// canceled.
+func (c *AppsDomainMappingsListCall) Context(ctx context.Context) *AppsDomainMappingsListCall {
+	c.ctx_ = ctx
+	return c
+}
+
+// Header returns an http.Header that can be modified by the caller to
+// add HTTP headers to the request.
+func (c *AppsDomainMappingsListCall) Header() http.Header {
+	if c.header_ == nil {
+		c.header_ = make(http.Header)
+	}
+	return c.header_
+}
+
+func (c *AppsDomainMappingsListCall) doRequest(alt string) (*http.Response, error) {
+	reqHeaders := make(http.Header)
+	for k, v := range c.header_ {
+		reqHeaders[k] = v
+	}
+	reqHeaders.Set("User-Agent", c.s.userAgent())
+	if c.ifNoneMatch_ != "" {
+		reqHeaders.Set("If-None-Match", c.ifNoneMatch_)
+	}
+	var body io.Reader = nil
+	c.urlParams_.Set("alt", alt)
+	urls := googleapi.ResolveRelative(c.s.BasePath, "v1beta/apps/{appsId}/domainMappings")
+	urls += "?" + c.urlParams_.Encode()
+	req, _ := http.NewRequest("GET", urls, body)
+	req.Header = reqHeaders
+	googleapi.Expand(req.URL, map[string]string{
+		"appsId": c.appsId,
+	})
+	return gensupport.SendRequest(c.ctx_, c.s.client, req)
+}
+
+// Do executes the "appengine.apps.domainMappings.list" call.
+// Exactly one of *ListDomainMappingsResponse or error will be non-nil.
+// Any non-2xx status code is an error. Response headers are in either
+// *ListDomainMappingsResponse.ServerResponse.Header or (if a response
+// was returned at all) in error.(*googleapi.Error).Header. Use
+// googleapi.IsNotModified to check whether the returned error was
+// because http.StatusNotModified was returned.
+func (c *AppsDomainMappingsListCall) Do(opts ...googleapi.CallOption) (*ListDomainMappingsResponse, error) {
+	gensupport.SetOptions(c.urlParams_, opts...)
+	res, err := c.doRequest("json")
+	if res != nil && res.StatusCode == http.StatusNotModified {
+		if res.Body != nil {
+			res.Body.Close()
+		}
+		return nil, &googleapi.Error{
+			Code:   res.StatusCode,
+			Header: res.Header,
+		}
+	}
+	if err != nil {
+		return nil, err
+	}
+	defer googleapi.CloseBody(res)
+	if err := googleapi.CheckResponse(res); err != nil {
+		return nil, err
+	}
+	ret := &ListDomainMappingsResponse{
+		ServerResponse: googleapi.ServerResponse{
+			Header:         res.Header,
+			HTTPStatusCode: res.StatusCode,
+		},
+	}
+	target := &ret
+	if err := json.NewDecoder(res.Body).Decode(target); err != nil {
+		return nil, err
+	}
+	return ret, nil
+	// {
+	//   "description": "Lists the domain mappings on an application.",
+	//   "httpMethod": "GET",
+	//   "id": "appengine.apps.domainMappings.list",
+	//   "parameterOrder": [
+	//     "appsId"
+	//   ],
+	//   "parameters": {
+	//     "appsId": {
+	//       "description": "Part of `parent`. Name of the parent Application resource. Example: apps/myapp.",
+	//       "location": "path",
+	//       "required": true,
+	//       "type": "string"
+	//     },
+	//     "pageSize": {
+	//       "description": "Maximum results to return per page.",
+	//       "format": "int32",
+	//       "location": "query",
+	//       "type": "integer"
+	//     },
+	//     "pageToken": {
+	//       "description": "Continuation token for fetching the next page of results.",
+	//       "location": "query",
+	//       "type": "string"
+	//     }
+	//   },
+	//   "path": "v1beta/apps/{appsId}/domainMappings",
+	//   "response": {
+	//     "$ref": "ListDomainMappingsResponse"
+	//   },
+	//   "scopes": [
+	//     "https://www.googleapis.com/auth/appengine.admin",
+	//     "https://www.googleapis.com/auth/cloud-platform",
+	//     "https://www.googleapis.com/auth/cloud-platform.read-only"
+	//   ]
+	// }
+
+}
+
+// Pages invokes f for each page of results.
+// A non-nil error returned from f will halt the iteration.
+// The provided context supersedes any context provided to the Context method.
+func (c *AppsDomainMappingsListCall) Pages(ctx context.Context, f func(*ListDomainMappingsResponse) error) error {
+	c.ctx_ = ctx
+	defer c.PageToken(c.urlParams_.Get("pageToken")) // reset paging to original point
+	for {
+		x, err := c.Do()
+		if err != nil {
+			return err
+		}
+		if err := f(x); err != nil {
+			return err
+		}
+		if x.NextPageToken == "" {
+			return nil
+		}
+		c.PageToken(x.NextPageToken)
+	}
+}
+
+// method id "appengine.apps.domainMappings.patch":
+
+type AppsDomainMappingsPatchCall struct {
+	s                *APIService
+	appsId           string
+	domainMappingsId string
+	domainmapping    *DomainMapping
+	urlParams_       gensupport.URLParams
+	ctx_             context.Context
+	header_          http.Header
+}
+
+// Patch: Updates the specified domain mapping. To map an SSL
+// certificate to a domain mapping, update certificate_id to point to an
+// AuthorizedCertificate resource. A user must be authorized to
+// administer the associated domain in order to update a DomainMapping
+// resource.
+func (r *AppsDomainMappingsService) Patch(appsId string, domainMappingsId string, domainmapping *DomainMapping) *AppsDomainMappingsPatchCall {
+	c := &AppsDomainMappingsPatchCall{s: r.s, urlParams_: make(gensupport.URLParams)}
+	c.appsId = appsId
+	c.domainMappingsId = domainMappingsId
+	c.domainmapping = domainmapping
+	return c
+}
+
+// UpdateMask sets the optional parameter "updateMask": Standard field
+// mask for the set of fields to be updated.
+func (c *AppsDomainMappingsPatchCall) UpdateMask(updateMask string) *AppsDomainMappingsPatchCall {
+	c.urlParams_.Set("updateMask", updateMask)
+	return c
+}
+
+// Fields allows partial responses to be retrieved. See
+// https://developers.google.com/gdata/docs/2.0/basics#PartialResponse
+// for more information.
+func (c *AppsDomainMappingsPatchCall) Fields(s ...googleapi.Field) *AppsDomainMappingsPatchCall {
+	c.urlParams_.Set("fields", googleapi.CombineFields(s))
+	return c
+}
+
+// Context sets the context to be used in this call's Do method. Any
+// pending HTTP request will be aborted if the provided context is
+// canceled.
+func (c *AppsDomainMappingsPatchCall) Context(ctx context.Context) *AppsDomainMappingsPatchCall {
+	c.ctx_ = ctx
+	return c
+}
+
+// Header returns an http.Header that can be modified by the caller to
+// add HTTP headers to the request.
+func (c *AppsDomainMappingsPatchCall) Header() http.Header {
+	if c.header_ == nil {
+		c.header_ = make(http.Header)
+	}
+	return c.header_
+}
+
+func (c *AppsDomainMappingsPatchCall) doRequest(alt string) (*http.Response, error) {
+	reqHeaders := make(http.Header)
+	for k, v := range c.header_ {
+		reqHeaders[k] = v
+	}
+	reqHeaders.Set("User-Agent", c.s.userAgent())
+	var body io.Reader = nil
+	body, err := googleapi.WithoutDataWrapper.JSONReader(c.domainmapping)
+	if err != nil {
+		return nil, err
+	}
+	reqHeaders.Set("Content-Type", "application/json")
+	c.urlParams_.Set("alt", alt)
+	urls := googleapi.ResolveRelative(c.s.BasePath, "v1beta/apps/{appsId}/domainMappings/{domainMappingsId}")
+	urls += "?" + c.urlParams_.Encode()
+	req, _ := http.NewRequest("PATCH", urls, body)
+	req.Header = reqHeaders
+	googleapi.Expand(req.URL, map[string]string{
+		"appsId":           c.appsId,
+		"domainMappingsId": c.domainMappingsId,
+	})
+	return gensupport.SendRequest(c.ctx_, c.s.client, req)
+}
+
+// Do executes the "appengine.apps.domainMappings.patch" call.
+// Exactly one of *Operation or error will be non-nil. Any non-2xx
+// status code is an error. Response headers are in either
+// *Operation.ServerResponse.Header or (if a response was returned at
+// all) in error.(*googleapi.Error).Header. Use googleapi.IsNotModified
+// to check whether the returned error was because
+// http.StatusNotModified was returned.
+func (c *AppsDomainMappingsPatchCall) Do(opts ...googleapi.CallOption) (*Operation, error) {
+	gensupport.SetOptions(c.urlParams_, opts...)
+	res, err := c.doRequest("json")
+	if res != nil && res.StatusCode == http.StatusNotModified {
+		if res.Body != nil {
+			res.Body.Close()
+		}
+		return nil, &googleapi.Error{
+			Code:   res.StatusCode,
+			Header: res.Header,
+		}
+	}
+	if err != nil {
+		return nil, err
+	}
+	defer googleapi.CloseBody(res)
+	if err := googleapi.CheckResponse(res); err != nil {
+		return nil, err
+	}
+	ret := &Operation{
+		ServerResponse: googleapi.ServerResponse{
+			Header:         res.Header,
+			HTTPStatusCode: res.StatusCode,
+		},
+	}
+	target := &ret
+	if err := json.NewDecoder(res.Body).Decode(target); err != nil {
+		return nil, err
+	}
+	return ret, nil
+	// {
+	//   "description": "Updates the specified domain mapping. To map an SSL certificate to a domain mapping, update certificate_id to point to an AuthorizedCertificate resource. A user must be authorized to administer the associated domain in order to update a DomainMapping resource.",
+	//   "httpMethod": "PATCH",
+	//   "id": "appengine.apps.domainMappings.patch",
+	//   "parameterOrder": [
+	//     "appsId",
+	//     "domainMappingsId"
+	//   ],
+	//   "parameters": {
+	//     "appsId": {
+	//       "description": "Part of `name`. Name of the resource to update. Example: apps/myapp/domainMappings/example.com.",
+	//       "location": "path",
+	//       "required": true,
+	//       "type": "string"
+	//     },
+	//     "domainMappingsId": {
+	//       "description": "Part of `name`. See documentation of `appsId`.",
+	//       "location": "path",
+	//       "required": true,
+	//       "type": "string"
+	//     },
+	//     "updateMask": {
+	//       "description": "Standard field mask for the set of fields to be updated.",
+	//       "location": "query",
+	//       "type": "string"
+	//     }
+	//   },
+	//   "path": "v1beta/apps/{appsId}/domainMappings/{domainMappingsId}",
+	//   "request": {
+	//     "$ref": "DomainMapping"
+	//   },
+	//   "response": {
+	//     "$ref": "Operation"
+	//   },
+	//   "scopes": [
+	//     "https://www.googleapis.com/auth/cloud-platform"
+	//   ]
+	// }
+
+}
+
 // method id "appengine.apps.locations.get":
 
 type AppsLocationsGetCall struct {
@@ -3279,7 +5317,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	if c.ifNoneMatch_ != "" {
 		reqHeaders.Set("If-None-Match", c.ifNoneMatch_)
 	}
@@ -3335,7 +5372,6 @@
 	return ret, nil
 	// {
 	//   "description": "Get information about a location.",
-	//   "flatPath": "v1beta/apps/{appsId}/locations/{locationsId}",
 	//   "httpMethod": "GET",
 	//   "id": "appengine.apps.locations.get",
 	//   "parameterOrder": [
@@ -3450,7 +5486,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	if c.ifNoneMatch_ != "" {
 		reqHeaders.Set("If-None-Match", c.ifNoneMatch_)
 	}
@@ -3505,7 +5540,6 @@
 	return ret, nil
 	// {
 	//   "description": "Lists information about the supported locations for this service.",
-	//   "flatPath": "v1beta/apps/{appsId}/locations",
 	//   "httpMethod": "GET",
 	//   "id": "appengine.apps.locations.list",
 	//   "parameterOrder": [
@@ -3632,7 +5666,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	if c.ifNoneMatch_ != "" {
 		reqHeaders.Set("If-None-Match", c.ifNoneMatch_)
 	}
@@ -3688,7 +5721,6 @@
 	return ret, nil
 	// {
 	//   "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/apps/{appsId}/operations/{operationsId}",
 	//   "httpMethod": "GET",
 	//   "id": "appengine.apps.operations.get",
 	//   "parameterOrder": [
@@ -3806,7 +5838,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	if c.ifNoneMatch_ != "" {
 		reqHeaders.Set("If-None-Match", c.ifNoneMatch_)
 	}
@@ -3861,7 +5892,6 @@
 	return ret, nil
 	// {
 	//   "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 below allows API services to override the binding to use different resource name schemes, such as users/*/operations.",
-	//   "flatPath": "v1beta/apps/{appsId}/operations",
 	//   "httpMethod": "GET",
 	//   "id": "appengine.apps.operations.list",
 	//   "parameterOrder": [
@@ -3975,7 +6005,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	var body io.Reader = nil
 	c.urlParams_.Set("alt", alt)
 	urls := googleapi.ResolveRelative(c.s.BasePath, "v1beta/apps/{appsId}/services/{servicesId}")
@@ -4028,7 +6057,6 @@
 	return ret, nil
 	// {
 	//   "description": "Deletes the specified service and all enclosed versions.",
-	//   "flatPath": "v1beta/apps/{appsId}/services/{servicesId}",
 	//   "httpMethod": "DELETE",
 	//   "id": "appengine.apps.services.delete",
 	//   "parameterOrder": [
@@ -4121,7 +6149,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	if c.ifNoneMatch_ != "" {
 		reqHeaders.Set("If-None-Match", c.ifNoneMatch_)
 	}
@@ -4177,7 +6204,6 @@
 	return ret, nil
 	// {
 	//   "description": "Gets the current configuration of the specified service.",
-	//   "flatPath": "v1beta/apps/{appsId}/services/{servicesId}",
 	//   "httpMethod": "GET",
 	//   "id": "appengine.apps.services.get",
 	//   "parameterOrder": [
@@ -4284,7 +6310,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	if c.ifNoneMatch_ != "" {
 		reqHeaders.Set("If-None-Match", c.ifNoneMatch_)
 	}
@@ -4339,7 +6364,6 @@
 	return ret, nil
 	// {
 	//   "description": "Lists all the services in the application.",
-	//   "flatPath": "v1beta/apps/{appsId}/services",
 	//   "httpMethod": "GET",
 	//   "id": "appengine.apps.services.list",
 	//   "parameterOrder": [
@@ -4478,7 +6502,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	var body io.Reader = nil
 	body, err := googleapi.WithoutDataWrapper.JSONReader(c.service)
 	if err != nil {
@@ -4536,7 +6559,6 @@
 	return ret, nil
 	// {
 	//   "description": "Updates the configuration of the specified service.",
-	//   "flatPath": "v1beta/apps/{appsId}/services/{servicesId}",
 	//   "httpMethod": "PATCH",
 	//   "id": "appengine.apps.services.patch",
 	//   "parameterOrder": [
@@ -4563,7 +6585,6 @@
 	//     },
 	//     "updateMask": {
 	//       "description": "Standard field mask for the set of fields to be updated.",
-	//       "format": "google-fieldmask",
 	//       "location": "query",
 	//       "type": "string"
 	//     }
@@ -4634,7 +6655,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	var body io.Reader = nil
 	body, err := googleapi.WithoutDataWrapper.JSONReader(c.version)
 	if err != nil {
@@ -4692,7 +6712,6 @@
 	return ret, nil
 	// {
 	//   "description": "Deploys code and resource files to a new version.",
-	//   "flatPath": "v1beta/apps/{appsId}/services/{servicesId}/versions",
 	//   "httpMethod": "POST",
 	//   "id": "appengine.apps.services.versions.create",
 	//   "parameterOrder": [
@@ -4779,7 +6798,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	var body io.Reader = nil
 	c.urlParams_.Set("alt", alt)
 	urls := googleapi.ResolveRelative(c.s.BasePath, "v1beta/apps/{appsId}/services/{servicesId}/versions/{versionsId}")
@@ -4833,7 +6851,6 @@
 	return ret, nil
 	// {
 	//   "description": "Deletes an existing Version resource.",
-	//   "flatPath": "v1beta/apps/{appsId}/services/{servicesId}/versions/{versionsId}",
 	//   "httpMethod": "DELETE",
 	//   "id": "appengine.apps.services.versions.delete",
 	//   "parameterOrder": [
@@ -4948,7 +6965,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	if c.ifNoneMatch_ != "" {
 		reqHeaders.Set("If-None-Match", c.ifNoneMatch_)
 	}
@@ -5005,7 +7021,6 @@
 	return ret, nil
 	// {
 	//   "description": "Gets the specified Version resource. By default, only a BASIC_VIEW will be returned. Specify the FULL_VIEW parameter to get the full resource.",
-	//   "flatPath": "v1beta/apps/{appsId}/services/{servicesId}/versions/{versionsId}",
 	//   "httpMethod": "GET",
 	//   "id": "appengine.apps.services.versions.get",
 	//   "parameterOrder": [
@@ -5141,7 +7156,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	if c.ifNoneMatch_ != "" {
 		reqHeaders.Set("If-None-Match", c.ifNoneMatch_)
 	}
@@ -5197,7 +7211,6 @@
 	return ret, nil
 	// {
 	//   "description": "Lists the versions of a service.",
-	//   "flatPath": "v1beta/apps/{appsId}/services/{servicesId}/versions",
 	//   "httpMethod": "GET",
 	//   "id": "appengine.apps.services.versions.list",
 	//   "parameterOrder": [
@@ -5287,25 +7300,21 @@
 
 // Patch: Updates the specified Version resource. You can specify the
 // following fields depending on the App Engine environment and type of
-// scaling that the version resource uses:
-// serving_status
+// scaling that the version resource uses: serving_status
 // (https://cloud.google.com/appengine/docs/admin-api/reference/rest/v1be
-// ta/apps.services.versions#Version.FIELDS.serving_status):  For
-// Version resources that use basic scaling, manual scaling, or run in
-// the App Engine flexible environment.
-// instance_class
+// ta/apps.services.versions#Version.FIELDS.serving_status): For Version
+// resources that use basic scaling, manual scaling, or run in the App
+// Engine flexible environment. instance_class
 // (https://cloud.google.com/appengine/docs/admin-api/reference/rest/v1be
-// ta/apps.services.versions#Version.FIELDS.instance_class):  For
-// Version resources that run in the App Engine standard
-// environment.
+// ta/apps.services.versions#Version.FIELDS.instance_class): For Version
+// resources that run in the App Engine standard environment.
 // automatic_scaling.min_idle_instances
 // (https://cloud.google.com/appengine/docs/admin-api/reference/rest/v1be
-// ta/apps.services.versions#Version.FIELDS.automatic_scaling):  For
+// ta/apps.services.versions#Version.FIELDS.automatic_scaling): For
 // Version resources that use automatic scaling and run in the App
-// Engine standard environment.
-// automatic_scaling.max_idle_instances
+// Engine standard environment. automatic_scaling.max_idle_instances
 // (https://cloud.google.com/appengine/docs/admin-api/reference/rest/v1be
-// ta/apps.services.versions#Version.FIELDS.automatic_scaling):  For
+// ta/apps.services.versions#Version.FIELDS.automatic_scaling): For
 // Version resources that use automatic scaling and run in the App
 // Engine standard environment.
 func (r *AppsServicesVersionsService) Patch(appsId string, servicesId string, versionsId string, version *Version) *AppsServicesVersionsPatchCall {
@@ -5355,7 +7364,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	var body io.Reader = nil
 	body, err := googleapi.WithoutDataWrapper.JSONReader(c.version)
 	if err != nil {
@@ -5413,8 +7421,7 @@
 	}
 	return ret, nil
 	// {
-	//   "description": "Updates the specified Version resource. You can specify the following fields depending on the App Engine environment and type of scaling that the version resource uses:\nserving_status (https://cloud.google.com/appengine/docs/admin-api/reference/rest/v1beta/apps.services.versions#Version.FIELDS.serving_status):  For Version resources that use basic scaling, manual scaling, or run in  the App Engine flexible environment.\ninstance_class (https://cloud.google.com/appengine/docs/admin-api/reference/rest/v1beta/apps.services.versions#Version.FIELDS.instance_class):  For Version resources that run in the App Engine standard environment.\nautomatic_scaling.min_idle_instances (https://cloud.google.com/appengine/docs/admin-api/reference/rest/v1beta/apps.services.versions#Version.FIELDS.automatic_scaling):  For Version resources that use automatic scaling and run in the App  Engine standard environment.\nautomatic_scaling.max_idle_instances (https://cloud.google.com/appengine/docs/admin-api/reference/rest/v1beta/apps.services.versions#Version.FIELDS.automatic_scaling):  For Version resources that use automatic scaling and run in the App  Engine standard environment.",
-	//   "flatPath": "v1beta/apps/{appsId}/services/{servicesId}/versions/{versionsId}",
+	//   "description": "Updates the specified Version resource. You can specify the following fields depending on the App Engine environment and type of scaling that the version resource uses: serving_status (https://cloud.google.com/appengine/docs/admin-api/reference/rest/v1beta/apps.services.versions#Version.FIELDS.serving_status): For Version resources that use basic scaling, manual scaling, or run in the App Engine flexible environment. instance_class (https://cloud.google.com/appengine/docs/admin-api/reference/rest/v1beta/apps.services.versions#Version.FIELDS.instance_class): For Version resources that run in the App Engine standard environment. automatic_scaling.min_idle_instances (https://cloud.google.com/appengine/docs/admin-api/reference/rest/v1beta/apps.services.versions#Version.FIELDS.automatic_scaling): For Version resources that use automatic scaling and run in the App Engine standard environment. automatic_scaling.max_idle_instances (https://cloud.google.com/appengine/docs/admin-api/reference/rest/v1beta/apps.services.versions#Version.FIELDS.automatic_scaling): For Version resources that use automatic scaling and run in the App Engine standard environment.",
 	//   "httpMethod": "PATCH",
 	//   "id": "appengine.apps.services.versions.patch",
 	//   "parameterOrder": [
@@ -5437,7 +7444,6 @@
 	//     },
 	//     "updateMask": {
 	//       "description": "Standard field mask for the set of fields to be updated.",
-	//       "format": "google-fieldmask",
 	//       "location": "query",
 	//       "type": "string"
 	//     },
@@ -5524,7 +7530,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	var body io.Reader = nil
 	body, err := googleapi.WithoutDataWrapper.JSONReader(c.debuginstancerequest)
 	if err != nil {
@@ -5584,7 +7589,6 @@
 	return ret, nil
 	// {
 	//   "description": "Enables debugging on a VM instance. This allows you to use the SSH command to connect to the virtual machine where the instance lives. While in \"debug mode\", the instance continues to serve live traffic. You should delete the instance when you are done debugging and then allow the system to take over and determine if another instance should be started.Only applicable for instances in App Engine flexible environment.",
-	//   "flatPath": "v1beta/apps/{appsId}/services/{servicesId}/versions/{versionsId}/instances/{instancesId}:debug",
 	//   "httpMethod": "POST",
 	//   "id": "appengine.apps.services.versions.instances.debug",
 	//   "parameterOrder": [
@@ -5687,7 +7691,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	var body io.Reader = nil
 	c.urlParams_.Set("alt", alt)
 	urls := googleapi.ResolveRelative(c.s.BasePath, "v1beta/apps/{appsId}/services/{servicesId}/versions/{versionsId}/instances/{instancesId}")
@@ -5742,7 +7745,6 @@
 	return ret, nil
 	// {
 	//   "description": "Stops a running instance.",
-	//   "flatPath": "v1beta/apps/{appsId}/services/{servicesId}/versions/{versionsId}/instances/{instancesId}",
 	//   "httpMethod": "DELETE",
 	//   "id": "appengine.apps.services.versions.instances.delete",
 	//   "parameterOrder": [
@@ -5853,7 +7855,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	if c.ifNoneMatch_ != "" {
 		reqHeaders.Set("If-None-Match", c.ifNoneMatch_)
 	}
@@ -5911,7 +7912,6 @@
 	return ret, nil
 	// {
 	//   "description": "Gets instance information.",
-	//   "flatPath": "v1beta/apps/{appsId}/services/{servicesId}/versions/{versionsId}/instances/{instancesId}",
 	//   "httpMethod": "GET",
 	//   "id": "appengine.apps.services.versions.instances.get",
 	//   "parameterOrder": [
@@ -6039,7 +8039,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	if c.ifNoneMatch_ != "" {
 		reqHeaders.Set("If-None-Match", c.ifNoneMatch_)
 	}
@@ -6096,7 +8095,6 @@
 	return ret, nil
 	// {
 	//   "description": "Lists the instances of a version.Tip: To aggregate details about instances over time, see the Stackdriver Monitoring API (https://cloud.google.com/monitoring/api/ref_v3/rest/v3/projects.timeSeries/list).",
-	//   "flatPath": "v1beta/apps/{appsId}/services/{servicesId}/versions/{versionsId}/instances",
 	//   "httpMethod": "GET",
 	//   "id": "appengine.apps.services.versions.instances.list",
 	//   "parameterOrder": [
diff --git a/appengine/v1beta4/appengine-api.json b/appengine/v1beta4/appengine-api.json
index e9a07ad..eec6b42 100644
--- a/appengine/v1beta4/appengine-api.json
+++ b/appengine/v1beta4/appengine-api.json
@@ -1,11 +1,11 @@
 {
  "kind": "discovery#restDescription",
- "etag": "\"tbys6C40o18GZwyMen5GMkdK-3s/HPzHkwRP299Fxuuk4KBHlqH2zSw\"",
+ "etag": "\"tbys6C40o18GZwyMen5GMkdK-3s/Se7Ars-pJUGCXY_MujlPxE-KCds\"",
  "discoveryVersion": "v1",
  "id": "appengine:v1beta4",
  "name": "appengine",
  "version": "v1beta4",
- "revision": "20170223",
+ "revision": "20170324",
  "title": "Google App Engine Admin API",
  "description": "Provisions and manages App Engine applications.",
  "ownerDomain": "google.com",
@@ -1367,44 +1367,6 @@
     }
    }
   },
-  "OperationMetadataV1Alpha": {
-   "id": "OperationMetadataV1Alpha",
-   "type": "object",
-   "description": "Metadata for the given google.longrunning.Operation.",
-   "properties": {
-    "method": {
-     "type": "string",
-     "description": "API method that initiated this operation. Example: google.appengine.v1alpha.Versions.CreateVersion.@OutputOnly"
-    },
-    "insertTime": {
-     "type": "string",
-     "description": "Time that this operation was created.@OutputOnly"
-    },
-    "endTime": {
-     "type": "string",
-     "description": "Time that this operation completed.@OutputOnly"
-    },
-    "user": {
-     "type": "string",
-     "description": "User who requested this operation.@OutputOnly"
-    },
-    "target": {
-     "type": "string",
-     "description": "Name of the resource that this operation is acting on. Example: apps/myapp/services/default.@OutputOnly"
-    },
-    "ephemeralMessage": {
-     "type": "string",
-     "description": "Ephemeral message that may change every time the operation is polled. @OutputOnly"
-    },
-    "warning": {
-     "type": "array",
-     "description": "Durable messages that persist on every operation poll. @OutputOnly",
-     "items": {
-      "type": "string"
-     }
-    }
-   }
-  },
   "OperationMetadataV1Beta": {
    "id": "OperationMetadataV1Beta",
    "type": "object",
diff --git a/appengine/v1beta4/appengine-gen.go b/appengine/v1beta4/appengine-gen.go
index 6748418..a551350 100644
--- a/appengine/v1beta4/appengine-gen.go
+++ b/appengine/v1beta4/appengine-gen.go
@@ -67,10 +67,9 @@
 }
 
 type APIService struct {
-	client                    *http.Client
-	BasePath                  string // API endpoint base URL
-	UserAgent                 string // optional additional User-Agent fragment
-	GoogleClientHeaderElement string // client header fragment, for Google use only
+	client    *http.Client
+	BasePath  string // API endpoint base URL
+	UserAgent string // optional additional User-Agent fragment
 
 	Apps *AppsService
 }
@@ -82,10 +81,6 @@
 	return googleapi.UserAgent + " " + s.UserAgent
 }
 
-func (s *APIService) clientHeader() string {
-	return gensupport.GoogleClientHeader("20170210", s.GoogleClientHeaderElement)
-}
-
 func NewAppsService(s *APIService) *AppsService {
 	rs := &AppsService{s: s}
 	rs.Locations = NewAppsLocationsService(s)
@@ -1575,57 +1570,6 @@
 	return gensupport.MarshalJSON(raw, s.ForceSendFields, s.NullFields)
 }
 
-// OperationMetadataV1Alpha: Metadata for the given
-// google.longrunning.Operation.
-type OperationMetadataV1Alpha struct {
-	// EndTime: Time that this operation completed.@OutputOnly
-	EndTime string `json:"endTime,omitempty"`
-
-	// EphemeralMessage: Ephemeral message that may change every time the
-	// operation is polled. @OutputOnly
-	EphemeralMessage string `json:"ephemeralMessage,omitempty"`
-
-	// InsertTime: Time that this operation was created.@OutputOnly
-	InsertTime string `json:"insertTime,omitempty"`
-
-	// Method: API method that initiated this operation. Example:
-	// google.appengine.v1alpha.Versions.CreateVersion.@OutputOnly
-	Method string `json:"method,omitempty"`
-
-	// Target: Name of the resource that this operation is acting on.
-	// Example: apps/myapp/services/default.@OutputOnly
-	Target string `json:"target,omitempty"`
-
-	// User: User who requested this operation.@OutputOnly
-	User string `json:"user,omitempty"`
-
-	// Warning: Durable messages that persist on every operation poll.
-	// @OutputOnly
-	Warning []string `json:"warning,omitempty"`
-
-	// ForceSendFields is a list of field names (e.g. "EndTime") to
-	// unconditionally include in API requests. By default, fields with
-	// empty values are omitted from API requests. However, any non-pointer,
-	// non-interface field appearing in ForceSendFields will be sent to the
-	// server regardless of whether the field is empty or not. This may be
-	// used to include empty fields in Patch requests.
-	ForceSendFields []string `json:"-"`
-
-	// NullFields is a list of field names (e.g. "EndTime") to include in
-	// API requests with the JSON null value. By default, fields with empty
-	// values are omitted from API requests. However, any field with an
-	// empty value appearing in NullFields will be sent to the server as
-	// null. It is an error if a field in this list has a non-empty value.
-	// This may be used to include null fields in Patch requests.
-	NullFields []string `json:"-"`
-}
-
-func (s *OperationMetadataV1Alpha) MarshalJSON() ([]byte, error) {
-	type noMethod OperationMetadataV1Alpha
-	raw := noMethod(*s)
-	return gensupport.MarshalJSON(raw, s.ForceSendFields, s.NullFields)
-}
-
 // OperationMetadataV1Beta: Metadata for the given
 // google.longrunning.Operation.
 type OperationMetadataV1Beta struct {
@@ -2517,7 +2461,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	var body io.Reader = nil
 	body, err := googleapi.WithoutDataWrapper.JSONReader(c.application)
 	if err != nil {
@@ -2658,7 +2601,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	if c.ifNoneMatch_ != "" {
 		reqHeaders.Set("If-None-Match", c.ifNoneMatch_)
 	}
@@ -2804,7 +2746,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	var body io.Reader = nil
 	body, err := googleapi.WithoutDataWrapper.JSONReader(c.application)
 	if err != nil {
@@ -2954,7 +2895,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	if c.ifNoneMatch_ != "" {
 		reqHeaders.Set("If-None-Match", c.ifNoneMatch_)
 	}
@@ -3124,7 +3064,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	if c.ifNoneMatch_ != "" {
 		reqHeaders.Set("If-None-Match", c.ifNoneMatch_)
 	}
@@ -3292,7 +3231,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	var body io.Reader = nil
 	c.urlParams_.Set("alt", alt)
 	urls := googleapi.ResolveRelative(c.s.BasePath, "v1beta4/apps/{appsId}/modules/{modulesId}")
@@ -3437,7 +3375,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	if c.ifNoneMatch_ != "" {
 		reqHeaders.Set("If-None-Match", c.ifNoneMatch_)
 	}
@@ -3599,7 +3536,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	if c.ifNoneMatch_ != "" {
 		reqHeaders.Set("If-None-Match", c.ifNoneMatch_)
 	}
@@ -3792,7 +3728,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	var body io.Reader = nil
 	body, err := googleapi.WithoutDataWrapper.JSONReader(c.module)
 	if err != nil {
@@ -3946,7 +3881,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	var body io.Reader = nil
 	body, err := googleapi.WithoutDataWrapper.JSONReader(c.version)
 	if err != nil {
@@ -4090,7 +4024,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	var body io.Reader = nil
 	c.urlParams_.Set("alt", alt)
 	urls := googleapi.ResolveRelative(c.s.BasePath, "v1beta4/apps/{appsId}/modules/{modulesId}/versions/{versionsId}")
@@ -4258,7 +4191,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	if c.ifNoneMatch_ != "" {
 		reqHeaders.Set("If-None-Match", c.ifNoneMatch_)
 	}
@@ -4450,7 +4382,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	if c.ifNoneMatch_ != "" {
 		reqHeaders.Set("If-None-Match", c.ifNoneMatch_)
 	}
@@ -4659,7 +4590,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	var body io.Reader = nil
 	body, err := googleapi.WithoutDataWrapper.JSONReader(c.version)
 	if err != nil {
@@ -4826,7 +4756,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	var body io.Reader = nil
 	body, err := googleapi.WithoutDataWrapper.JSONReader(c.debuginstancerequest)
 	if err != nil {
@@ -4988,7 +4917,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	var body io.Reader = nil
 	c.urlParams_.Set("alt", alt)
 	urls := googleapi.ResolveRelative(c.s.BasePath, "v1beta4/apps/{appsId}/modules/{modulesId}/versions/{versionsId}/instances/{instancesId}")
@@ -5153,7 +5081,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	if c.ifNoneMatch_ != "" {
 		reqHeaders.Set("If-None-Match", c.ifNoneMatch_)
 	}
@@ -5338,7 +5265,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	if c.ifNoneMatch_ != "" {
 		reqHeaders.Set("If-None-Match", c.ifNoneMatch_)
 	}
@@ -5530,7 +5456,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	if c.ifNoneMatch_ != "" {
 		reqHeaders.Set("If-None-Match", c.ifNoneMatch_)
 	}
@@ -5703,7 +5628,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	if c.ifNoneMatch_ != "" {
 		reqHeaders.Set("If-None-Match", c.ifNoneMatch_)
 	}
diff --git a/appengine/v1beta5/appengine-api.json b/appengine/v1beta5/appengine-api.json
index 1e685fb..d86de57 100644
--- a/appengine/v1beta5/appengine-api.json
+++ b/appengine/v1beta5/appengine-api.json
@@ -1,11 +1,11 @@
 {
  "kind": "discovery#restDescription",
- "etag": "\"tbys6C40o18GZwyMen5GMkdK-3s/Cn83pbGPrLR1FKwFEn6_JiAENmA\"",
+ "etag": "\"tbys6C40o18GZwyMen5GMkdK-3s/AFji6hGPcc-FYE_lDpM9fS8tpbM\"",
  "discoveryVersion": "v1",
  "id": "appengine:v1beta5",
  "name": "appengine",
  "version": "v1beta5",
- "revision": "20170223",
+ "revision": "20170324",
  "title": "Google App Engine Admin API",
  "description": "Provisions and manages App Engine applications.",
  "ownerDomain": "google.com",
@@ -1357,44 +1357,6 @@
     }
    }
   },
-  "OperationMetadataV1Alpha": {
-   "id": "OperationMetadataV1Alpha",
-   "type": "object",
-   "description": "Metadata for the given google.longrunning.Operation.",
-   "properties": {
-    "method": {
-     "type": "string",
-     "description": "API method that initiated this operation. Example: google.appengine.v1alpha.Versions.CreateVersion.@OutputOnly"
-    },
-    "insertTime": {
-     "type": "string",
-     "description": "Time that this operation was created.@OutputOnly"
-    },
-    "endTime": {
-     "type": "string",
-     "description": "Time that this operation completed.@OutputOnly"
-    },
-    "user": {
-     "type": "string",
-     "description": "User who requested this operation.@OutputOnly"
-    },
-    "target": {
-     "type": "string",
-     "description": "Name of the resource that this operation is acting on. Example: apps/myapp/services/default.@OutputOnly"
-    },
-    "ephemeralMessage": {
-     "type": "string",
-     "description": "Ephemeral message that may change every time the operation is polled. @OutputOnly"
-    },
-    "warning": {
-     "type": "array",
-     "description": "Durable messages that persist on every operation poll. @OutputOnly",
-     "items": {
-      "type": "string"
-     }
-    }
-   }
-  },
   "OperationMetadataV1Beta": {
    "id": "OperationMetadataV1Beta",
    "type": "object",
diff --git a/appengine/v1beta5/appengine-gen.go b/appengine/v1beta5/appengine-gen.go
index 56fbe0d..2ca216f 100644
--- a/appengine/v1beta5/appengine-gen.go
+++ b/appengine/v1beta5/appengine-gen.go
@@ -67,10 +67,9 @@
 }
 
 type APIService struct {
-	client                    *http.Client
-	BasePath                  string // API endpoint base URL
-	UserAgent                 string // optional additional User-Agent fragment
-	GoogleClientHeaderElement string // client header fragment, for Google use only
+	client    *http.Client
+	BasePath  string // API endpoint base URL
+	UserAgent string // optional additional User-Agent fragment
 
 	Apps *AppsService
 }
@@ -82,10 +81,6 @@
 	return googleapi.UserAgent + " " + s.UserAgent
 }
 
-func (s *APIService) clientHeader() string {
-	return gensupport.GoogleClientHeader("20170210", s.GoogleClientHeaderElement)
-}
-
 func NewAppsService(s *APIService) *AppsService {
 	rs := &AppsService{s: s}
 	rs.Locations = NewAppsLocationsService(s)
@@ -1583,57 +1578,6 @@
 	return gensupport.MarshalJSON(raw, s.ForceSendFields, s.NullFields)
 }
 
-// OperationMetadataV1Alpha: Metadata for the given
-// google.longrunning.Operation.
-type OperationMetadataV1Alpha struct {
-	// EndTime: Time that this operation completed.@OutputOnly
-	EndTime string `json:"endTime,omitempty"`
-
-	// EphemeralMessage: Ephemeral message that may change every time the
-	// operation is polled. @OutputOnly
-	EphemeralMessage string `json:"ephemeralMessage,omitempty"`
-
-	// InsertTime: Time that this operation was created.@OutputOnly
-	InsertTime string `json:"insertTime,omitempty"`
-
-	// Method: API method that initiated this operation. Example:
-	// google.appengine.v1alpha.Versions.CreateVersion.@OutputOnly
-	Method string `json:"method,omitempty"`
-
-	// Target: Name of the resource that this operation is acting on.
-	// Example: apps/myapp/services/default.@OutputOnly
-	Target string `json:"target,omitempty"`
-
-	// User: User who requested this operation.@OutputOnly
-	User string `json:"user,omitempty"`
-
-	// Warning: Durable messages that persist on every operation poll.
-	// @OutputOnly
-	Warning []string `json:"warning,omitempty"`
-
-	// ForceSendFields is a list of field names (e.g. "EndTime") to
-	// unconditionally include in API requests. By default, fields with
-	// empty values are omitted from API requests. However, any non-pointer,
-	// non-interface field appearing in ForceSendFields will be sent to the
-	// server regardless of whether the field is empty or not. This may be
-	// used to include empty fields in Patch requests.
-	ForceSendFields []string `json:"-"`
-
-	// NullFields is a list of field names (e.g. "EndTime") to include in
-	// API requests with the JSON null value. By default, fields with empty
-	// values are omitted from API requests. However, any field with an
-	// empty value appearing in NullFields will be sent to the server as
-	// null. It is an error if a field in this list has a non-empty value.
-	// This may be used to include null fields in Patch requests.
-	NullFields []string `json:"-"`
-}
-
-func (s *OperationMetadataV1Alpha) MarshalJSON() ([]byte, error) {
-	type noMethod OperationMetadataV1Alpha
-	raw := noMethod(*s)
-	return gensupport.MarshalJSON(raw, s.ForceSendFields, s.NullFields)
-}
-
 // OperationMetadataV1Beta: Metadata for the given
 // google.longrunning.Operation.
 type OperationMetadataV1Beta struct {
@@ -2519,7 +2463,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	var body io.Reader = nil
 	body, err := googleapi.WithoutDataWrapper.JSONReader(c.application)
 	if err != nil {
@@ -2661,7 +2604,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	if c.ifNoneMatch_ != "" {
 		reqHeaders.Set("If-None-Match", c.ifNoneMatch_)
 	}
@@ -2807,7 +2749,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	var body io.Reader = nil
 	body, err := googleapi.WithoutDataWrapper.JSONReader(c.application)
 	if err != nil {
@@ -2957,7 +2898,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	if c.ifNoneMatch_ != "" {
 		reqHeaders.Set("If-None-Match", c.ifNoneMatch_)
 	}
@@ -3127,7 +3067,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	if c.ifNoneMatch_ != "" {
 		reqHeaders.Set("If-None-Match", c.ifNoneMatch_)
 	}
@@ -3308,7 +3247,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	if c.ifNoneMatch_ != "" {
 		reqHeaders.Set("If-None-Match", c.ifNoneMatch_)
 	}
@@ -3481,7 +3419,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	if c.ifNoneMatch_ != "" {
 		reqHeaders.Set("If-None-Match", c.ifNoneMatch_)
 	}
@@ -3649,7 +3586,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	var body io.Reader = nil
 	c.urlParams_.Set("alt", alt)
 	urls := googleapi.ResolveRelative(c.s.BasePath, "v1beta5/apps/{appsId}/services/{servicesId}")
@@ -3794,7 +3730,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	if c.ifNoneMatch_ != "" {
 		reqHeaders.Set("If-None-Match", c.ifNoneMatch_)
 	}
@@ -3956,7 +3891,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	if c.ifNoneMatch_ != "" {
 		reqHeaders.Set("If-None-Match", c.ifNoneMatch_)
 	}
@@ -4149,7 +4083,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	var body io.Reader = nil
 	body, err := googleapi.WithoutDataWrapper.JSONReader(c.service)
 	if err != nil {
@@ -4303,7 +4236,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	var body io.Reader = nil
 	body, err := googleapi.WithoutDataWrapper.JSONReader(c.version)
 	if err != nil {
@@ -4447,7 +4379,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	var body io.Reader = nil
 	c.urlParams_.Set("alt", alt)
 	urls := googleapi.ResolveRelative(c.s.BasePath, "v1beta5/apps/{appsId}/services/{servicesId}/versions/{versionsId}")
@@ -4615,7 +4546,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	if c.ifNoneMatch_ != "" {
 		reqHeaders.Set("If-None-Match", c.ifNoneMatch_)
 	}
@@ -4807,7 +4737,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	if c.ifNoneMatch_ != "" {
 		reqHeaders.Set("If-None-Match", c.ifNoneMatch_)
 	}
@@ -5016,7 +4945,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	var body io.Reader = nil
 	body, err := googleapi.WithoutDataWrapper.JSONReader(c.version)
 	if err != nil {
@@ -5183,7 +5111,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	var body io.Reader = nil
 	body, err := googleapi.WithoutDataWrapper.JSONReader(c.debuginstancerequest)
 	if err != nil {
@@ -5345,7 +5272,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	var body io.Reader = nil
 	c.urlParams_.Set("alt", alt)
 	urls := googleapi.ResolveRelative(c.s.BasePath, "v1beta5/apps/{appsId}/services/{servicesId}/versions/{versionsId}/instances/{instancesId}")
@@ -5510,7 +5436,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	if c.ifNoneMatch_ != "" {
 		reqHeaders.Set("If-None-Match", c.ifNoneMatch_)
 	}
@@ -5695,7 +5620,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	if c.ifNoneMatch_ != "" {
 		reqHeaders.Set("If-None-Match", c.ifNoneMatch_)
 	}
diff --git a/appsactivity/v1/appsactivity-gen.go b/appsactivity/v1/appsactivity-gen.go
index fe2eb3e..0ef7815 100644
--- a/appsactivity/v1/appsactivity-gen.go
+++ b/appsactivity/v1/appsactivity-gen.go
@@ -73,10 +73,9 @@
 }
 
 type Service struct {
-	client                    *http.Client
-	BasePath                  string // API endpoint base URL
-	UserAgent                 string // optional additional User-Agent fragment
-	GoogleClientHeaderElement string // client header fragment, for Google use only
+	client    *http.Client
+	BasePath  string // API endpoint base URL
+	UserAgent string // optional additional User-Agent fragment
 
 	Activities *ActivitiesService
 }
@@ -88,10 +87,6 @@
 	return googleapi.UserAgent + " " + s.UserAgent
 }
 
-func (s *Service) clientHeader() string {
-	return gensupport.GoogleClientHeader("20170210", s.GoogleClientHeaderElement)
-}
-
 func NewActivitiesService(s *Service) *ActivitiesService {
 	rs := &ActivitiesService{s: s}
 	return rs
@@ -683,7 +678,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	if c.ifNoneMatch_ != "" {
 		reqHeaders.Set("If-None-Match", c.ifNoneMatch_)
 	}
diff --git a/appstate/v1/appstate-gen.go b/appstate/v1/appstate-gen.go
index 996eb2f..d1ad1bf 100644
--- a/appstate/v1/appstate-gen.go
+++ b/appstate/v1/appstate-gen.go
@@ -61,10 +61,9 @@
 }
 
 type Service struct {
-	client                    *http.Client
-	BasePath                  string // API endpoint base URL
-	UserAgent                 string // optional additional User-Agent fragment
-	GoogleClientHeaderElement string // client header fragment, for Google use only
+	client    *http.Client
+	BasePath  string // API endpoint base URL
+	UserAgent string // optional additional User-Agent fragment
 
 	States *StatesService
 }
@@ -76,10 +75,6 @@
 	return googleapi.UserAgent + " " + s.UserAgent
 }
 
-func (s *Service) clientHeader() string {
-	return gensupport.GoogleClientHeader("20170210", s.GoogleClientHeaderElement)
-}
-
 func NewStatesService(s *Service) *StatesService {
 	rs := &StatesService{s: s}
 	return rs
@@ -305,7 +300,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	var body io.Reader = nil
 	c.urlParams_.Set("alt", alt)
 	urls := googleapi.ResolveRelative(c.s.BasePath, "states/{stateKey}/clear")
@@ -442,7 +436,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	var body io.Reader = nil
 	c.urlParams_.Set("alt", alt)
 	urls := googleapi.ResolveRelative(c.s.BasePath, "states/{stateKey}")
@@ -553,7 +546,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	if c.ifNoneMatch_ != "" {
 		reqHeaders.Set("If-None-Match", c.ifNoneMatch_)
 	}
@@ -699,7 +691,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	if c.ifNoneMatch_ != "" {
 		reqHeaders.Set("If-None-Match", c.ifNoneMatch_)
 	}
@@ -836,7 +827,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	var body io.Reader = nil
 	body, err := googleapi.WithoutDataWrapper.JSONReader(c.updaterequest)
 	if err != nil {
diff --git a/bigquery/v2/bigquery-api.json b/bigquery/v2/bigquery-api.json
index 93a4ec3..6b6cc65 100644
--- a/bigquery/v2/bigquery-api.json
+++ b/bigquery/v2/bigquery-api.json
@@ -1,11 +1,11 @@
 {
  "kind": "discovery#restDescription",
- "etag": "\"tbys6C40o18GZwyMen5GMkdK-3s/2pbHVnKgRBtlI769YwDOp1uiQ0w\"",
+ "etag": "\"tbys6C40o18GZwyMen5GMkdK-3s/Hw3ocLnACFZ8pfeMZhrBTel37_8\"",
  "discoveryVersion": "v1",
  "id": "bigquery:v2",
  "name": "bigquery",
  "version": "v2",
- "revision": "20170224",
+ "revision": "20170319",
  "title": "BigQuery API",
  "description": "A data platform for customers to create, manage, share and query data.",
  "ownerDomain": "google.com",
@@ -281,7 +281,7 @@
     },
     "labels": {
      "type": "object",
-     "description": "[Experimental] The labels associated with this dataset. You can use these to organize and group your datasets. You can set this property when inserting or updating a dataset. See Labeling Datasets for more information.",
+     "description": "The labels associated with this dataset. You can use these to organize and group your datasets. You can set this property when inserting or updating a dataset. See Labeling Datasets for more information.",
      "additionalProperties": {
       "type": "string"
      }
@@ -293,7 +293,7 @@
     },
     "location": {
      "type": "string",
-     "description": "[Experimental] The geographic location where the dataset should reside. Possible values include EU and US. The default value is US."
+     "description": "The geographic location where the dataset should reside. Possible values include EU and US. The default value is US."
     },
     "selfLink": {
      "type": "string",
@@ -330,7 +330,7 @@
        },
        "labels": {
         "type": "object",
-        "description": "[Experimental] The labels associated with this dataset. You can use these to organize and group your datasets.",
+        "description": "The labels associated with this dataset. You can use these to organize and group your datasets.",
         "additionalProperties": {
          "type": "string"
         }
@@ -498,7 +498,7 @@
    "properties": {
     "autodetect": {
      "type": "boolean",
-     "description": "[Experimental] Try to detect schema and format options automatically. Any option specified explicitly will be honored."
+     "description": "Try to detect schema and format options automatically. Any option specified explicitly will be honored."
     },
     "bigtableOptions": {
      "$ref": "BigtableOptions",
@@ -531,7 +531,7 @@
     },
     "sourceFormat": {
      "type": "string",
-     "description": "[Required] The data format. For CSV files, specify \"CSV\". For Google sheets, specify \"GOOGLE_SHEETS\". For newline-delimited JSON, specify \"NEWLINE_DELIMITED_JSON\". For Avro files, specify \"AVRO\". For Google Cloud Datastore backups, specify \"DATASTORE_BACKUP\". [Experimental] For Google Cloud Bigtable, specify \"BIGTABLE\". Please note that reading from Google Cloud Bigtable is experimental and has to be enabled for your project. Please contact Google Cloud Support to enable this for your project."
+     "description": "[Required] The data format. For CSV files, specify \"CSV\". For Google sheets, specify \"GOOGLE_SHEETS\". For newline-delimited JSON, specify \"NEWLINE_DELIMITED_JSON\". For Avro files, specify \"AVRO\". For Google Cloud Datastore backups, specify \"DATASTORE_BACKUP\". [Beta] For Google Cloud Bigtable, specify \"BIGTABLE\"."
     },
     "sourceUris": {
      "type": "array",
@@ -576,7 +576,7 @@
     },
     "numDmlAffectedRows": {
      "type": "string",
-     "description": "[Output-only, Experimental] The number of rows affected by a DML statement. Present only for DML statements INSERT, UPDATE or DELETE.",
+     "description": "[Output-only] The number of rows affected by a DML statement. Present only for DML statements INSERT, UPDATE or DELETE.",
      "format": "int64"
     },
     "pageToken": {
@@ -760,7 +760,7 @@
     },
     "autodetect": {
      "type": "boolean",
-     "description": "[Experimental] Indicates if we should automatically infer the options and schema for CSV and JSON sources."
+     "description": "Indicates if we should automatically infer the options and schema for CSV and JSON sources."
     },
     "createDisposition": {
      "type": "string",
@@ -793,7 +793,7 @@
     },
     "projectionFields": {
      "type": "array",
-     "description": "[Experimental] If sourceFormat is set to \"DATASTORE_BACKUP\", indicates which entity properties to load into BigQuery from a Cloud Datastore backup. Property names are case sensitive and must be top-level properties. If no properties are specified, BigQuery loads all properties. If any named property isn't found in the Cloud Datastore backup, an invalid error is returned in the job result.",
+     "description": "If sourceFormat is set to \"DATASTORE_BACKUP\", indicates which entity properties to load into BigQuery from a Cloud Datastore backup. Property names are case sensitive and must be top-level properties. If no properties are specified, BigQuery loads all properties. If any named property isn't found in the Cloud Datastore backup, an invalid error is returned in the job result.",
      "items": {
       "type": "string"
      }
@@ -883,7 +883,7 @@
     },
     "parameterMode": {
      "type": "string",
-     "description": "[Experimental] Standard SQL only. Set to POSITIONAL to use positional (?) query parameters or to NAMED to use named (@myparam) query parameters in this query."
+     "description": "Standard SQL only. Set to POSITIONAL to use positional (?) query parameters or to NAMED to use named (@myparam) query parameters in this query."
     },
     "preserveNulls": {
      "type": "boolean",
@@ -929,7 +929,7 @@
     },
     "userDefinedFunctionResources": {
      "type": "array",
-     "description": "[Experimental] Describes user-defined function resources used in the query.",
+     "description": "Describes user-defined function resources used in the query.",
      "items": {
       "$ref": "UserDefinedFunctionResource"
      }
@@ -1111,12 +1111,12 @@
     },
     "numDmlAffectedRows": {
      "type": "string",
-     "description": "[Output-only, Experimental] The number of rows affected by a DML statement. Present only for DML statements INSERT, UPDATE or DELETE.",
+     "description": "[Output-only] The number of rows affected by a DML statement. Present only for DML statements INSERT, UPDATE or DELETE.",
      "format": "int64"
     },
     "queryPlan": {
      "type": "array",
-     "description": "[Output-only, Experimental] Describes execution plan for the query.",
+     "description": "[Output-only] Describes execution plan for the query.",
      "items": {
       "$ref": "ExplainQueryStage"
      }
@@ -1394,7 +1394,7 @@
     },
     "parameterMode": {
      "type": "string",
-     "description": "[Experimental] Standard SQL only. Set to POSITIONAL to use positional (?) query parameters or to NAMED to use named (@myparam) query parameters in this query."
+     "description": "Standard SQL only. Set to POSITIONAL to use positional (?) query parameters or to NAMED to use named (@myparam) query parameters in this query."
     },
     "preserveNulls": {
      "type": "boolean",
@@ -1411,7 +1411,7 @@
     },
     "queryParameters": {
      "type": "array",
-     "description": "[Experimental] Query parameters for Standard SQL queries.",
+     "description": "Query parameters for Standard SQL queries.",
      "items": {
       "$ref": "QueryParameter"
      }
@@ -1463,7 +1463,7 @@
     },
     "numDmlAffectedRows": {
      "type": "string",
-     "description": "[Output-only, Experimental] The number of rows affected by a DML statement. Present only for DML statements INSERT, UPDATE or DELETE.",
+     "description": "[Output-only] The number of rows affected by a DML statement. Present only for DML statements INSERT, UPDATE or DELETE.",
      "format": "int64"
     },
     "pageToken": {
@@ -1928,7 +1928,7 @@
     },
     "userDefinedFunctionResources": {
      "type": "array",
-     "description": "[Experimental] Describes user-defined function resources used in the query.",
+     "description": "Describes user-defined function resources used in the query.",
      "items": {
       "$ref": "UserDefinedFunctionResource"
      }
@@ -2517,6 +2517,11 @@
        "required": true,
        "location": "path"
       },
+      "selectedFields": {
+       "type": "string",
+       "description": "List of fields to return (comma-separated). If unspecified, all fields are returned",
+       "location": "query"
+      },
       "startIndex": {
        "type": "string",
        "description": "Zero-based index of the starting row to read",
@@ -2601,6 +2606,11 @@
        "required": true,
        "location": "path"
       },
+      "selectedFields": {
+       "type": "string",
+       "description": "List of fields to return (comma-separated). If unspecified, all fields are returned",
+       "location": "query"
+      },
       "tableId": {
        "type": "string",
        "description": "Table ID of the requested table",
diff --git a/bigquery/v2/bigquery-gen.go b/bigquery/v2/bigquery-gen.go
index b907ac8..7522ecd 100644
--- a/bigquery/v2/bigquery-gen.go
+++ b/bigquery/v2/bigquery-gen.go
@@ -83,10 +83,9 @@
 }
 
 type Service struct {
-	client                    *http.Client
-	BasePath                  string // API endpoint base URL
-	UserAgent                 string // optional additional User-Agent fragment
-	GoogleClientHeaderElement string // client header fragment, for Google use only
+	client    *http.Client
+	BasePath  string // API endpoint base URL
+	UserAgent string // optional additional User-Agent fragment
 
 	Datasets *DatasetsService
 
@@ -106,10 +105,6 @@
 	return googleapi.UserAgent + " " + s.UserAgent
 }
 
-func (s *Service) clientHeader() string {
-	return gensupport.GoogleClientHeader("20170210", s.GoogleClientHeaderElement)
-}
-
 func NewDatasetsService(s *Service) *DatasetsService {
 	rs := &DatasetsService{s: s}
 	return rs
@@ -442,19 +437,18 @@
 	// Kind: [Output-only] The resource type.
 	Kind string `json:"kind,omitempty"`
 
-	// Labels: [Experimental] The labels associated with this dataset. You
-	// can use these to organize and group your datasets. You can set this
-	// property when inserting or updating a dataset. See Labeling Datasets
-	// for more information.
+	// Labels: The labels associated with this dataset. You can use these to
+	// organize and group your datasets. You can set this property when
+	// inserting or updating a dataset. See Labeling Datasets for more
+	// information.
 	Labels map[string]string `json:"labels,omitempty"`
 
 	// LastModifiedTime: [Output-only] The date when this dataset or any of
 	// its tables was last modified, in milliseconds since the epoch.
 	LastModifiedTime int64 `json:"lastModifiedTime,omitempty,string"`
 
-	// Location: [Experimental] The geographic location where the dataset
-	// should reside. Possible values include EU and US. The default value
-	// is US.
+	// Location: The geographic location where the dataset should reside.
+	// Possible values include EU and US. The default value is US.
 	Location string `json:"location,omitempty"`
 
 	// SelfLink: [Output-only] A URL that can be used to access the resource
@@ -606,8 +600,8 @@
 	// "bigquery#dataset".
 	Kind string `json:"kind,omitempty"`
 
-	// Labels: [Experimental] The labels associated with this dataset. You
-	// can use these to organize and group your datasets.
+	// Labels: The labels associated with this dataset. You can use these to
+	// organize and group your datasets.
 	Labels map[string]string `json:"labels,omitempty"`
 
 	// ForceSendFields is a list of field names (e.g. "DatasetReference") to
@@ -838,8 +832,8 @@
 }
 
 type ExternalDataConfiguration struct {
-	// Autodetect: [Experimental] Try to detect schema and format options
-	// automatically. Any option specified explicitly will be honored.
+	// Autodetect: Try to detect schema and format options automatically.
+	// Any option specified explicitly will be honored.
 	Autodetect bool `json:"autodetect,omitempty"`
 
 	// BigtableOptions: [Optional] Additional options if sourceFormat is set
@@ -889,10 +883,8 @@
 	// "CSV". For Google sheets, specify "GOOGLE_SHEETS". For
 	// newline-delimited JSON, specify "NEWLINE_DELIMITED_JSON". For Avro
 	// files, specify "AVRO". For Google Cloud Datastore backups, specify
-	// "DATASTORE_BACKUP". [Experimental] For Google Cloud Bigtable, specify
-	// "BIGTABLE". Please note that reading from Google Cloud Bigtable is
-	// experimental and has to be enabled for your project. Please contact
-	// Google Cloud Support to enable this for your project.
+	// "DATASTORE_BACKUP". [Beta] For Google Cloud Bigtable, specify
+	// "BIGTABLE".
 	SourceFormat string `json:"sourceFormat,omitempty"`
 
 	// SourceUris: [Required] The fully-qualified URIs that point to your
@@ -957,9 +949,9 @@
 	// Kind: The resource type of the response.
 	Kind string `json:"kind,omitempty"`
 
-	// NumDmlAffectedRows: [Output-only, Experimental] The number of rows
-	// affected by a DML statement. Present only for DML statements INSERT,
-	// UPDATE or DELETE.
+	// NumDmlAffectedRows: [Output-only] The number of rows affected by a
+	// DML statement. Present only for DML statements INSERT, UPDATE or
+	// DELETE.
 	NumDmlAffectedRows int64 `json:"numDmlAffectedRows,omitempty,string"`
 
 	// PageToken: A token used for paging results.
@@ -1265,8 +1257,8 @@
 	// value is false.
 	AllowQuotedNewlines bool `json:"allowQuotedNewlines,omitempty"`
 
-	// Autodetect: [Experimental] Indicates if we should automatically infer
-	// the options and schema for CSV and JSON sources.
+	// Autodetect: Indicates if we should automatically infer the options
+	// and schema for CSV and JSON sources.
 	Autodetect bool `json:"autodetect,omitempty"`
 
 	// CreateDisposition: [Optional] Specifies whether the job is allowed to
@@ -1323,13 +1315,12 @@
 	// columns, BigQuery interprets the empty string as an empty value.
 	NullMarker string `json:"nullMarker,omitempty"`
 
-	// ProjectionFields: [Experimental] If sourceFormat is set to
-	// "DATASTORE_BACKUP", indicates which entity properties to load into
-	// BigQuery from a Cloud Datastore backup. Property names are case
-	// sensitive and must be top-level properties. If no properties are
-	// specified, BigQuery loads all properties. If any named property isn't
-	// found in the Cloud Datastore backup, an invalid error is returned in
-	// the job result.
+	// ProjectionFields: If sourceFormat is set to "DATASTORE_BACKUP",
+	// indicates which entity properties to load into BigQuery from a Cloud
+	// Datastore backup. Property names are case sensitive and must be
+	// top-level properties. If no properties are specified, BigQuery loads
+	// all properties. If any named property isn't found in the Cloud
+	// Datastore backup, an invalid error is returned in the job result.
 	ProjectionFields []string `json:"projectionFields,omitempty"`
 
 	// Quote: [Optional] The value that is used to quote data sections in a
@@ -1467,9 +1458,9 @@
 	// your project default.
 	MaximumBytesBilled int64 `json:"maximumBytesBilled,omitempty,string"`
 
-	// ParameterMode: [Experimental] Standard SQL only. Set to POSITIONAL to
-	// use positional (?) query parameters or to NAMED to use named
-	// (@myparam) query parameters in this query.
+	// ParameterMode: Standard SQL only. Set to POSITIONAL to use positional
+	// (?) query parameters or to NAMED to use named (@myparam) query
+	// parameters in this query.
 	ParameterMode string `json:"parameterMode,omitempty"`
 
 	// PreserveNulls: [Deprecated] This property is deprecated.
@@ -1522,8 +1513,8 @@
 	// Default: true
 	UseQueryCache *bool `json:"useQueryCache,omitempty"`
 
-	// UserDefinedFunctionResources: [Experimental] Describes user-defined
-	// function resources used in the query.
+	// UserDefinedFunctionResources: Describes user-defined function
+	// resources used in the query.
 	UserDefinedFunctionResources []*UserDefinedFunctionResource `json:"userDefinedFunctionResources,omitempty"`
 
 	// WriteDisposition: [Optional] Specifies the action that occurs if the
@@ -1804,13 +1795,12 @@
 	// query cache.
 	CacheHit bool `json:"cacheHit,omitempty"`
 
-	// NumDmlAffectedRows: [Output-only, Experimental] The number of rows
-	// affected by a DML statement. Present only for DML statements INSERT,
-	// UPDATE or DELETE.
+	// NumDmlAffectedRows: [Output-only] The number of rows affected by a
+	// DML statement. Present only for DML statements INSERT, UPDATE or
+	// DELETE.
 	NumDmlAffectedRows int64 `json:"numDmlAffectedRows,omitempty,string"`
 
-	// QueryPlan: [Output-only, Experimental] Describes execution plan for
-	// the query.
+	// QueryPlan: [Output-only] Describes execution plan for the query.
 	QueryPlan []*ExplainQueryStage `json:"queryPlan,omitempty"`
 
 	// ReferencedTables: [Output-only, Experimental] Referenced tables for
@@ -2241,9 +2231,9 @@
 	// only the byte limit applies.
 	MaxResults int64 `json:"maxResults,omitempty"`
 
-	// ParameterMode: [Experimental] Standard SQL only. Set to POSITIONAL to
-	// use positional (?) query parameters or to NAMED to use named
-	// (@myparam) query parameters in this query.
+	// ParameterMode: Standard SQL only. Set to POSITIONAL to use positional
+	// (?) query parameters or to NAMED to use named (@myparam) query
+	// parameters in this query.
 	ParameterMode string `json:"parameterMode,omitempty"`
 
 	// PreserveNulls: [Deprecated] This property is deprecated.
@@ -2254,8 +2244,7 @@
 	// [myProjectId:myDatasetId.myTableId]".
 	Query string `json:"query,omitempty"`
 
-	// QueryParameters: [Experimental] Query parameters for Standard SQL
-	// queries.
+	// QueryParameters: Query parameters for Standard SQL queries.
 	QueryParameters []*QueryParameter `json:"queryParameters,omitempty"`
 
 	// TimeoutMs: [Optional] How long to wait for the query to complete, in
@@ -2334,9 +2323,9 @@
 	// Kind: The resource type.
 	Kind string `json:"kind,omitempty"`
 
-	// NumDmlAffectedRows: [Output-only, Experimental] The number of rows
-	// affected by a DML statement. Present only for DML statements INSERT,
-	// UPDATE or DELETE.
+	// NumDmlAffectedRows: [Output-only] The number of rows affected by a
+	// DML statement. Present only for DML statements INSERT, UPDATE or
+	// DELETE.
 	NumDmlAffectedRows int64 `json:"numDmlAffectedRows,omitempty,string"`
 
 	// PageToken: A token used for paging results.
@@ -3097,8 +3086,8 @@
 	// that reference this view must use the same flag value.
 	UseLegacySql bool `json:"useLegacySql,omitempty"`
 
-	// UserDefinedFunctionResources: [Experimental] Describes user-defined
-	// function resources used in the query.
+	// UserDefinedFunctionResources: Describes user-defined function
+	// resources used in the query.
 	UserDefinedFunctionResources []*UserDefinedFunctionResource `json:"userDefinedFunctionResources,omitempty"`
 
 	// ForceSendFields is a list of field names (e.g. "Query") to
@@ -3185,7 +3174,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	var body io.Reader = nil
 	c.urlParams_.Set("alt", alt)
 	urls := googleapi.ResolveRelative(c.s.BasePath, "projects/{projectId}/datasets/{datasetId}")
@@ -3308,7 +3296,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	if c.ifNoneMatch_ != "" {
 		reqHeaders.Set("If-None-Match", c.ifNoneMatch_)
 	}
@@ -3447,7 +3434,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	var body io.Reader = nil
 	body, err := googleapi.WithoutDataWrapper.JSONReader(c.dataset)
 	if err != nil {
@@ -3623,7 +3609,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	if c.ifNoneMatch_ != "" {
 		reqHeaders.Set("If-None-Match", c.ifNoneMatch_)
 	}
@@ -3801,7 +3786,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	var body io.Reader = nil
 	body, err := googleapi.WithoutDataWrapper.JSONReader(c.dataset)
 	if err != nil {
@@ -3948,7 +3932,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	var body io.Reader = nil
 	body, err := googleapi.WithoutDataWrapper.JSONReader(c.dataset)
 	if err != nil {
@@ -4094,7 +4077,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	var body io.Reader = nil
 	c.urlParams_.Set("alt", alt)
 	urls := googleapi.ResolveRelative(c.s.BasePath, "projects/{projectId}/jobs/{jobId}/cancel")
@@ -4242,7 +4224,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	if c.ifNoneMatch_ != "" {
 		reqHeaders.Set("If-None-Match", c.ifNoneMatch_)
 	}
@@ -4422,7 +4403,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	if c.ifNoneMatch_ != "" {
 		reqHeaders.Set("If-None-Match", c.ifNoneMatch_)
 	}
@@ -4659,7 +4639,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	var body io.Reader = nil
 	body, err := googleapi.WithoutDataWrapper.JSONReader(c.job)
 	if err != nil {
@@ -4918,7 +4897,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	if c.ifNoneMatch_ != "" {
 		reqHeaders.Set("If-None-Match", c.ifNoneMatch_)
 	}
@@ -5116,7 +5094,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	var body io.Reader = nil
 	body, err := googleapi.WithoutDataWrapper.JSONReader(c.queryrequest)
 	if err != nil {
@@ -5274,7 +5251,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	if c.ifNoneMatch_ != "" {
 		reqHeaders.Set("If-None-Match", c.ifNoneMatch_)
 	}
@@ -5430,7 +5406,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	var body io.Reader = nil
 	body, err := googleapi.WithoutDataWrapper.JSONReader(c.tabledatainsertallrequest)
 	if err != nil {
@@ -5569,6 +5544,14 @@
 	return c
 }
 
+// SelectedFields sets the optional parameter "selectedFields": List of
+// fields to return (comma-separated). If unspecified, all fields are
+// returned
+func (c *TabledataListCall) SelectedFields(selectedFields string) *TabledataListCall {
+	c.urlParams_.Set("selectedFields", selectedFields)
+	return c
+}
+
 // StartIndex sets the optional parameter "startIndex": Zero-based index
 // of the starting row to read
 func (c *TabledataListCall) StartIndex(startIndex uint64) *TabledataListCall {
@@ -5617,7 +5600,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	if c.ifNoneMatch_ != "" {
 		reqHeaders.Set("If-None-Match", c.ifNoneMatch_)
 	}
@@ -5705,6 +5687,11 @@
 	//       "required": true,
 	//       "type": "string"
 	//     },
+	//     "selectedFields": {
+	//       "description": "List of fields to return (comma-separated). If unspecified, all fields are returned",
+	//       "location": "query",
+	//       "type": "string"
+	//     },
 	//     "startIndex": {
 	//       "description": "Zero-based index of the starting row to read",
 	//       "format": "uint64",
@@ -5805,7 +5792,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	var body io.Reader = nil
 	c.urlParams_.Set("alt", alt)
 	urls := googleapi.ResolveRelative(c.s.BasePath, "projects/{projectId}/datasets/{datasetId}/tables/{tableId}")
@@ -5894,6 +5880,14 @@
 	return c
 }
 
+// SelectedFields sets the optional parameter "selectedFields": List of
+// fields to return (comma-separated). If unspecified, all fields are
+// returned
+func (c *TablesGetCall) SelectedFields(selectedFields string) *TablesGetCall {
+	c.urlParams_.Set("selectedFields", selectedFields)
+	return c
+}
+
 // Fields allows partial responses to be retrieved. See
 // https://developers.google.com/gdata/docs/2.0/basics#PartialResponse
 // for more information.
@@ -5935,7 +5929,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	if c.ifNoneMatch_ != "" {
 		reqHeaders.Set("If-None-Match", c.ifNoneMatch_)
 	}
@@ -6012,6 +6005,11 @@
 	//       "required": true,
 	//       "type": "string"
 	//     },
+	//     "selectedFields": {
+	//       "description": "List of fields to return (comma-separated). If unspecified, all fields are returned",
+	//       "location": "query",
+	//       "type": "string"
+	//     },
 	//     "tableId": {
 	//       "description": "Table ID of the requested table",
 	//       "location": "path",
@@ -6084,7 +6082,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	var body io.Reader = nil
 	body, err := googleapi.WithoutDataWrapper.JSONReader(c.table)
 	if err != nil {
@@ -6253,7 +6250,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	if c.ifNoneMatch_ != "" {
 		reqHeaders.Set("If-None-Match", c.ifNoneMatch_)
 	}
@@ -6431,7 +6427,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	var body io.Reader = nil
 	body, err := googleapi.WithoutDataWrapper.JSONReader(c.table)
 	if err != nil {
@@ -6588,7 +6583,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	var body io.Reader = nil
 	body, err := googleapi.WithoutDataWrapper.JSONReader(c.table)
 	if err != nil {
diff --git a/blogger/v2/blogger-gen.go b/blogger/v2/blogger-gen.go
index 00a784a..71c2c38 100644
--- a/blogger/v2/blogger-gen.go
+++ b/blogger/v2/blogger-gen.go
@@ -65,10 +65,9 @@
 }
 
 type Service struct {
-	client                    *http.Client
-	BasePath                  string // API endpoint base URL
-	UserAgent                 string // optional additional User-Agent fragment
-	GoogleClientHeaderElement string // client header fragment, for Google use only
+	client    *http.Client
+	BasePath  string // API endpoint base URL
+	UserAgent string // optional additional User-Agent fragment
 
 	Blogs *BlogsService
 
@@ -88,10 +87,6 @@
 	return googleapi.UserAgent + " " + s.UserAgent
 }
 
-func (s *Service) clientHeader() string {
-	return gensupport.GoogleClientHeader("20170210", s.GoogleClientHeaderElement)
-}
-
 func NewBlogsService(s *Service) *BlogsService {
 	rs := &BlogsService{s: s}
 	return rs
@@ -1184,7 +1179,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	if c.ifNoneMatch_ != "" {
 		reqHeaders.Set("If-None-Match", c.ifNoneMatch_)
 	}
@@ -1326,7 +1320,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	if c.ifNoneMatch_ != "" {
 		reqHeaders.Set("If-None-Match", c.ifNoneMatch_)
 	}
@@ -1510,7 +1503,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	if c.ifNoneMatch_ != "" {
 		reqHeaders.Set("If-None-Match", c.ifNoneMatch_)
 	}
@@ -1701,7 +1693,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	if c.ifNoneMatch_ != "" {
 		reqHeaders.Set("If-None-Match", c.ifNoneMatch_)
 	}
@@ -1854,7 +1845,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	if c.ifNoneMatch_ != "" {
 		reqHeaders.Set("If-None-Match", c.ifNoneMatch_)
 	}
@@ -1999,7 +1989,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	if c.ifNoneMatch_ != "" {
 		reqHeaders.Set("If-None-Match", c.ifNoneMatch_)
 	}
@@ -2173,7 +2162,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	if c.ifNoneMatch_ != "" {
 		reqHeaders.Set("If-None-Match", c.ifNoneMatch_)
 	}
@@ -2354,7 +2342,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	if c.ifNoneMatch_ != "" {
 		reqHeaders.Set("If-None-Match", c.ifNoneMatch_)
 	}
@@ -2492,7 +2479,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	if c.ifNoneMatch_ != "" {
 		reqHeaders.Set("If-None-Match", c.ifNoneMatch_)
 	}
diff --git a/blogger/v3/blogger-gen.go b/blogger/v3/blogger-gen.go
index 37d49a7..8a509db 100644
--- a/blogger/v3/blogger-gen.go
+++ b/blogger/v3/blogger-gen.go
@@ -71,10 +71,9 @@
 }
 
 type Service struct {
-	client                    *http.Client
-	BasePath                  string // API endpoint base URL
-	UserAgent                 string // optional additional User-Agent fragment
-	GoogleClientHeaderElement string // client header fragment, for Google use only
+	client    *http.Client
+	BasePath  string // API endpoint base URL
+	UserAgent string // optional additional User-Agent fragment
 
 	BlogUserInfos *BlogUserInfosService
 
@@ -100,10 +99,6 @@
 	return googleapi.UserAgent + " " + s.UserAgent
 }
 
-func (s *Service) clientHeader() string {
-	return gensupport.GoogleClientHeader("20170210", s.GoogleClientHeaderElement)
-}
-
 func NewBlogUserInfosService(s *Service) *BlogUserInfosService {
 	rs := &BlogUserInfosService{s: s}
 	return rs
@@ -1620,7 +1615,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	if c.ifNoneMatch_ != "" {
 		reqHeaders.Set("If-None-Match", c.ifNoneMatch_)
 	}
@@ -1792,7 +1786,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	if c.ifNoneMatch_ != "" {
 		reqHeaders.Set("If-None-Match", c.ifNoneMatch_)
 	}
@@ -1963,7 +1956,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	if c.ifNoneMatch_ != "" {
 		reqHeaders.Set("If-None-Match", c.ifNoneMatch_)
 	}
@@ -2162,7 +2154,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	if c.ifNoneMatch_ != "" {
 		reqHeaders.Set("If-None-Match", c.ifNoneMatch_)
 	}
@@ -2345,7 +2336,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	var body io.Reader = nil
 	c.urlParams_.Set("alt", alt)
 	urls := googleapi.ResolveRelative(c.s.BasePath, "blogs/{blogId}/posts/{postId}/comments/{commentId}/approve")
@@ -2489,7 +2479,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	var body io.Reader = nil
 	c.urlParams_.Set("alt", alt)
 	urls := googleapi.ResolveRelative(c.s.BasePath, "blogs/{blogId}/posts/{postId}/comments/{commentId}")
@@ -2631,7 +2620,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	if c.ifNoneMatch_ != "" {
 		reqHeaders.Set("If-None-Match", c.ifNoneMatch_)
 	}
@@ -2863,7 +2851,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	if c.ifNoneMatch_ != "" {
 		reqHeaders.Set("If-None-Match", c.ifNoneMatch_)
 	}
@@ -3139,7 +3126,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	if c.ifNoneMatch_ != "" {
 		reqHeaders.Set("If-None-Match", c.ifNoneMatch_)
 	}
@@ -3337,7 +3323,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	var body io.Reader = nil
 	c.urlParams_.Set("alt", alt)
 	urls := googleapi.ResolveRelative(c.s.BasePath, "blogs/{blogId}/posts/{postId}/comments/{commentId}/spam")
@@ -3481,7 +3466,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	var body io.Reader = nil
 	c.urlParams_.Set("alt", alt)
 	urls := googleapi.ResolveRelative(c.s.BasePath, "blogs/{blogId}/posts/{postId}/comments/{commentId}/removecontent")
@@ -3643,7 +3627,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	if c.ifNoneMatch_ != "" {
 		reqHeaders.Set("If-None-Match", c.ifNoneMatch_)
 	}
@@ -3787,7 +3770,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	var body io.Reader = nil
 	c.urlParams_.Set("alt", alt)
 	urls := googleapi.ResolveRelative(c.s.BasePath, "blogs/{blogId}/pages/{pageId}")
@@ -3915,7 +3897,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	if c.ifNoneMatch_ != "" {
 		reqHeaders.Set("If-None-Match", c.ifNoneMatch_)
 	}
@@ -4074,7 +4055,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	var body io.Reader = nil
 	body, err := googleapi.WithoutDataWrapper.JSONReader(c.page)
 	if err != nil {
@@ -4267,7 +4247,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	if c.ifNoneMatch_ != "" {
 		reqHeaders.Set("If-None-Match", c.ifNoneMatch_)
 	}
@@ -4478,7 +4457,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	var body io.Reader = nil
 	body, err := googleapi.WithoutDataWrapper.JSONReader(c.page)
 	if err != nil {
@@ -4630,7 +4608,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	var body io.Reader = nil
 	c.urlParams_.Set("alt", alt)
 	urls := googleapi.ResolveRelative(c.s.BasePath, "blogs/{blogId}/pages/{pageId}/publish")
@@ -4764,7 +4741,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	var body io.Reader = nil
 	c.urlParams_.Set("alt", alt)
 	urls := googleapi.ResolveRelative(c.s.BasePath, "blogs/{blogId}/pages/{pageId}/revert")
@@ -4914,7 +4890,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	var body io.Reader = nil
 	body, err := googleapi.WithoutDataWrapper.JSONReader(c.page)
 	if err != nil {
@@ -5088,7 +5063,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	if c.ifNoneMatch_ != "" {
 		reqHeaders.Set("If-None-Match", c.ifNoneMatch_)
 	}
@@ -5330,7 +5304,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	if c.ifNoneMatch_ != "" {
 		reqHeaders.Set("If-None-Match", c.ifNoneMatch_)
 	}
@@ -5567,7 +5540,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	var body io.Reader = nil
 	c.urlParams_.Set("alt", alt)
 	urls := googleapi.ResolveRelative(c.s.BasePath, "blogs/{blogId}/posts/{postId}")
@@ -5720,7 +5692,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	if c.ifNoneMatch_ != "" {
 		reqHeaders.Set("If-None-Match", c.ifNoneMatch_)
 	}
@@ -5920,7 +5891,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	if c.ifNoneMatch_ != "" {
 		reqHeaders.Set("If-None-Match", c.ifNoneMatch_)
 	}
@@ -6100,7 +6070,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	var body io.Reader = nil
 	body, err := googleapi.WithoutDataWrapper.JSONReader(c.post)
 	if err != nil {
@@ -6345,7 +6314,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	if c.ifNoneMatch_ != "" {
 		reqHeaders.Set("If-None-Match", c.ifNoneMatch_)
 	}
@@ -6618,7 +6586,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	var body io.Reader = nil
 	body, err := googleapi.WithoutDataWrapper.JSONReader(c.post)
 	if err != nil {
@@ -6798,7 +6765,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	var body io.Reader = nil
 	c.urlParams_.Set("alt", alt)
 	urls := googleapi.ResolveRelative(c.s.BasePath, "blogs/{blogId}/posts/{postId}/publish")
@@ -6938,7 +6904,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	var body io.Reader = nil
 	c.urlParams_.Set("alt", alt)
 	urls := googleapi.ResolveRelative(c.s.BasePath, "blogs/{blogId}/posts/{postId}/revert")
@@ -7101,7 +7066,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	if c.ifNoneMatch_ != "" {
 		reqHeaders.Set("If-None-Match", c.ifNoneMatch_)
 	}
@@ -7296,7 +7260,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	var body io.Reader = nil
 	body, err := googleapi.WithoutDataWrapper.JSONReader(c.post)
 	if err != nil {
@@ -7474,7 +7437,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	if c.ifNoneMatch_ != "" {
 		reqHeaders.Set("If-None-Match", c.ifNoneMatch_)
 	}
diff --git a/books/v1/books-gen.go b/books/v1/books-gen.go
index e55a3c9..beaf67f 100644
--- a/books/v1/books-gen.go
+++ b/books/v1/books-gen.go
@@ -72,10 +72,9 @@
 }
 
 type Service struct {
-	client                    *http.Client
-	BasePath                  string // API endpoint base URL
-	UserAgent                 string // optional additional User-Agent fragment
-	GoogleClientHeaderElement string // client header fragment, for Google use only
+	client    *http.Client
+	BasePath  string // API endpoint base URL
+	UserAgent string // optional additional User-Agent fragment
 
 	Bookshelves *BookshelvesService
 
@@ -109,10 +108,6 @@
 	return googleapi.UserAgent + " " + s.UserAgent
 }
 
-func (s *Service) clientHeader() string {
-	return gensupport.GoogleClientHeader("20170210", s.GoogleClientHeaderElement)
-}
-
 func NewBookshelvesService(s *Service) *BookshelvesService {
 	rs := &BookshelvesService{s: s}
 	rs.Volumes = NewBookshelvesVolumesService(s)
@@ -4535,7 +4530,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	if c.ifNoneMatch_ != "" {
 		reqHeaders.Set("If-None-Match", c.ifNoneMatch_)
 	}
@@ -4693,7 +4687,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	if c.ifNoneMatch_ != "" {
 		reqHeaders.Set("If-None-Match", c.ifNoneMatch_)
 	}
@@ -4867,7 +4860,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	if c.ifNoneMatch_ != "" {
 		reqHeaders.Set("If-None-Match", c.ifNoneMatch_)
 	}
@@ -5051,7 +5043,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	var body io.Reader = nil
 	c.urlParams_.Set("alt", alt)
 	urls := googleapi.ResolveRelative(c.s.BasePath, "cloudloading/addBook")
@@ -5181,7 +5172,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	var body io.Reader = nil
 	c.urlParams_.Set("alt", alt)
 	urls := googleapi.ResolveRelative(c.s.BasePath, "cloudloading/deleteBook")
@@ -5274,7 +5264,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	var body io.Reader = nil
 	body, err := googleapi.WithoutDataWrapper.JSONReader(c.bookscloudloadingresource)
 	if err != nil {
@@ -5403,7 +5392,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	if c.ifNoneMatch_ != "" {
 		reqHeaders.Set("If-None-Match", c.ifNoneMatch_)
 	}
@@ -5554,7 +5542,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	if c.ifNoneMatch_ != "" {
 		reqHeaders.Set("If-None-Match", c.ifNoneMatch_)
 	}
@@ -5738,7 +5725,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	if c.ifNoneMatch_ != "" {
 		reqHeaders.Set("If-None-Match", c.ifNoneMatch_)
 	}
@@ -5948,7 +5934,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	if c.ifNoneMatch_ != "" {
 		reqHeaders.Set("If-None-Match", c.ifNoneMatch_)
 	}
@@ -6220,7 +6205,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	if c.ifNoneMatch_ != "" {
 		reqHeaders.Set("If-None-Match", c.ifNoneMatch_)
 	}
@@ -6471,7 +6455,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	if c.ifNoneMatch_ != "" {
 		reqHeaders.Set("If-None-Match", c.ifNoneMatch_)
 	}
@@ -6727,7 +6710,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	if c.ifNoneMatch_ != "" {
 		reqHeaders.Set("If-None-Match", c.ifNoneMatch_)
 	}
@@ -6962,7 +6944,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	if c.ifNoneMatch_ != "" {
 		reqHeaders.Set("If-None-Match", c.ifNoneMatch_)
 	}
@@ -7089,7 +7070,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	var body io.Reader = nil
 	c.urlParams_.Set("alt", alt)
 	urls := googleapi.ResolveRelative(c.s.BasePath, "myconfig/releaseDownloadAccess")
@@ -7249,7 +7229,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	var body io.Reader = nil
 	c.urlParams_.Set("alt", alt)
 	urls := googleapi.ResolveRelative(c.s.BasePath, "myconfig/requestAccess")
@@ -7452,7 +7431,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	var body io.Reader = nil
 	c.urlParams_.Set("alt", alt)
 	urls := googleapi.ResolveRelative(c.s.BasePath, "myconfig/syncVolumeLicenses")
@@ -7622,7 +7600,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	var body io.Reader = nil
 	body, err := googleapi.WithoutDataWrapper.JSONReader(c.usersettings)
 	if err != nil {
@@ -7747,7 +7724,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	var body io.Reader = nil
 	c.urlParams_.Set("alt", alt)
 	urls := googleapi.ResolveRelative(c.s.BasePath, "mylibrary/annotations/{annotationId}")
@@ -7870,7 +7846,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	var body io.Reader = nil
 	body, err := googleapi.WithoutDataWrapper.JSONReader(c.annotation)
 	if err != nil {
@@ -8087,7 +8062,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	if c.ifNoneMatch_ != "" {
 		reqHeaders.Set("If-None-Match", c.ifNoneMatch_)
 	}
@@ -8277,7 +8251,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	var body io.Reader = nil
 	c.urlParams_.Set("alt", alt)
 	urls := googleapi.ResolveRelative(c.s.BasePath, "mylibrary/annotations/summary")
@@ -8415,7 +8388,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	var body io.Reader = nil
 	body, err := googleapi.WithoutDataWrapper.JSONReader(c.annotation)
 	if err != nil {
@@ -8572,7 +8544,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	var body io.Reader = nil
 	c.urlParams_.Set("alt", alt)
 	urls := googleapi.ResolveRelative(c.s.BasePath, "mylibrary/bookshelves/{shelf}/addVolume")
@@ -8702,7 +8673,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	var body io.Reader = nil
 	c.urlParams_.Set("alt", alt)
 	urls := googleapi.ResolveRelative(c.s.BasePath, "mylibrary/bookshelves/{shelf}/clearVolumes")
@@ -8822,7 +8792,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	if c.ifNoneMatch_ != "" {
 		reqHeaders.Set("If-None-Match", c.ifNoneMatch_)
 	}
@@ -8971,7 +8940,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	if c.ifNoneMatch_ != "" {
 		reqHeaders.Set("If-None-Match", c.ifNoneMatch_)
 	}
@@ -9100,7 +9068,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	var body io.Reader = nil
 	c.urlParams_.Set("alt", alt)
 	urls := googleapi.ResolveRelative(c.s.BasePath, "mylibrary/bookshelves/{shelf}/moveVolume")
@@ -9234,7 +9201,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	var body io.Reader = nil
 	c.urlParams_.Set("alt", alt)
 	urls := googleapi.ResolveRelative(c.s.BasePath, "mylibrary/bookshelves/{shelf}/removeVolume")
@@ -9417,7 +9383,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	if c.ifNoneMatch_ != "" {
 		reqHeaders.Set("If-None-Match", c.ifNoneMatch_)
 	}
@@ -9616,7 +9581,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	if c.ifNoneMatch_ != "" {
 		reqHeaders.Set("If-None-Match", c.ifNoneMatch_)
 	}
@@ -9791,7 +9755,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	var body io.Reader = nil
 	c.urlParams_.Set("alt", alt)
 	urls := googleapi.ResolveRelative(c.s.BasePath, "mylibrary/readingpositions/{volumeId}/setPosition")
@@ -9962,7 +9925,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	if c.ifNoneMatch_ != "" {
 		reqHeaders.Set("If-None-Match", c.ifNoneMatch_)
 	}
@@ -10112,7 +10074,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	if c.ifNoneMatch_ != "" {
 		reqHeaders.Set("If-None-Match", c.ifNoneMatch_)
 	}
@@ -10283,7 +10244,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	if c.ifNoneMatch_ != "" {
 		reqHeaders.Set("If-None-Match", c.ifNoneMatch_)
 	}
@@ -10491,7 +10451,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	if c.ifNoneMatch_ != "" {
 		reqHeaders.Set("If-None-Match", c.ifNoneMatch_)
 	}
@@ -10677,7 +10636,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	var body io.Reader = nil
 	c.urlParams_.Set("alt", alt)
 	urls := googleapi.ResolveRelative(c.s.BasePath, "promooffer/accept")
@@ -10841,7 +10799,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	var body io.Reader = nil
 	c.urlParams_.Set("alt", alt)
 	urls := googleapi.ResolveRelative(c.s.BasePath, "promooffer/dismiss")
@@ -11006,7 +10963,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	if c.ifNoneMatch_ != "" {
 		reqHeaders.Set("If-None-Match", c.ifNoneMatch_)
 	}
@@ -11161,7 +11117,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	if c.ifNoneMatch_ != "" {
 		reqHeaders.Set("If-None-Match", c.ifNoneMatch_)
 	}
@@ -11310,7 +11265,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	if c.ifNoneMatch_ != "" {
 		reqHeaders.Set("If-None-Match", c.ifNoneMatch_)
 	}
@@ -11503,7 +11457,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	if c.ifNoneMatch_ != "" {
 		reqHeaders.Set("If-None-Match", c.ifNoneMatch_)
 	}
@@ -11799,7 +11752,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	if c.ifNoneMatch_ != "" {
 		reqHeaders.Set("If-None-Match", c.ifNoneMatch_)
 	}
@@ -12106,7 +12058,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	if c.ifNoneMatch_ != "" {
 		reqHeaders.Set("If-None-Match", c.ifNoneMatch_)
 	}
@@ -12346,7 +12297,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	if c.ifNoneMatch_ != "" {
 		reqHeaders.Set("If-None-Match", c.ifNoneMatch_)
 	}
@@ -12570,7 +12520,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	if c.ifNoneMatch_ != "" {
 		reqHeaders.Set("If-None-Match", c.ifNoneMatch_)
 	}
@@ -12723,7 +12672,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	var body io.Reader = nil
 	c.urlParams_.Set("alt", alt)
 	urls := googleapi.ResolveRelative(c.s.BasePath, "volumes/recommended/rate")
@@ -12928,7 +12876,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	if c.ifNoneMatch_ != "" {
 		reqHeaders.Set("If-None-Match", c.ifNoneMatch_)
 	}
diff --git a/calendar/v3/calendar-api.json b/calendar/v3/calendar-api.json
index 2bc2216..1b2dd59 100644
--- a/calendar/v3/calendar-api.json
+++ b/calendar/v3/calendar-api.json
@@ -1,11 +1,11 @@
 {
  "kind": "discovery#restDescription",
- "etag": "\"tbys6C40o18GZwyMen5GMkdK-3s/yPodRz8hynPgVqC3iI-kd-YqLsk\"",
+ "etag": "\"tbys6C40o18GZwyMen5GMkdK-3s/vYgKdX3g1VPmww06h2PorJos8j4\"",
  "discoveryVersion": "v1",
  "id": "calendar:v3",
  "name": "calendar",
  "version": "v3",
- "revision": "20170219",
+ "revision": "20170319",
  "title": "Calendar API",
  "description": "Manipulates events and other calendar data.",
  "ownerDomain": "google.com",
@@ -455,6 +455,42 @@
     }
    }
   },
+  "DeepLinkData": {
+   "id": "DeepLinkData",
+   "type": "object",
+   "properties": {
+    "links": {
+     "type": "array",
+     "items": {
+      "$ref": "Link"
+     }
+    },
+    "url": {
+     "type": "string"
+    }
+   }
+  },
+  "DisplayInfo": {
+   "id": "DisplayInfo",
+   "type": "object",
+   "properties": {
+    "appIconUrl": {
+     "type": "string"
+    },
+    "appShortTitle": {
+     "type": "string"
+    },
+    "appTitle": {
+     "type": "string"
+    },
+    "linkShortTitle": {
+     "type": "string"
+    },
+    "linkTitle": {
+     "type": "string"
+    }
+   }
+  },
   "Error": {
    "id": "Error",
    "type": "object",
@@ -895,6 +931,20 @@
     }
    }
   },
+  "EventHabitInstance": {
+   "id": "EventHabitInstance",
+   "type": "object",
+   "properties": {
+    "data": {
+     "$ref": "HabitInstanceData",
+     "description": "Metadata specific to this instance."
+    },
+    "parentId": {
+     "type": "string",
+     "description": "Id of the habit this instance belongs to."
+    }
+   }
+  },
   "EventReminder": {
    "id": "EventReminder",
    "type": "object",
@@ -1111,6 +1161,60 @@
     }
    }
   },
+  "HabitInstanceData": {
+   "id": "HabitInstanceData",
+   "type": "object",
+   "properties": {
+    "status": {
+     "type": "string"
+    },
+    "statusInferred": {
+     "type": "boolean"
+    },
+    "type": {
+     "type": "string"
+    }
+   }
+  },
+  "LaunchInfo": {
+   "id": "LaunchInfo",
+   "type": "object",
+   "properties": {
+    "appId": {
+     "type": "string"
+    },
+    "installUrl": {
+     "type": "string"
+    },
+    "intentAction": {
+     "type": "string"
+    },
+    "uri": {
+     "type": "string"
+    }
+   }
+  },
+  "Link": {
+   "id": "Link",
+   "type": "object",
+   "properties": {
+    "applinkingSource": {
+     "type": "string"
+    },
+    "displayInfo": {
+     "$ref": "DisplayInfo"
+    },
+    "launchInfo": {
+     "$ref": "LaunchInfo"
+    },
+    "platform": {
+     "type": "string"
+    },
+    "url": {
+     "type": "string"
+    }
+   }
+  },
   "Setting": {
    "id": "Setting",
    "type": "object",
diff --git a/calendar/v3/calendar-gen.go b/calendar/v3/calendar-gen.go
index 7ffc058..e4557f6 100644
--- a/calendar/v3/calendar-gen.go
+++ b/calendar/v3/calendar-gen.go
@@ -71,10 +71,9 @@
 }
 
 type Service struct {
-	client                    *http.Client
-	BasePath                  string // API endpoint base URL
-	UserAgent                 string // optional additional User-Agent fragment
-	GoogleClientHeaderElement string // client header fragment, for Google use only
+	client    *http.Client
+	BasePath  string // API endpoint base URL
+	UserAgent string // optional additional User-Agent fragment
 
 	Acl *AclService
 
@@ -100,10 +99,6 @@
 	return googleapi.UserAgent + " " + s.UserAgent
 }
 
-func (s *Service) clientHeader() string {
-	return gensupport.GoogleClientHeader("20170210", s.GoogleClientHeaderElement)
-}
-
 func NewAclService(s *Service) *AclService {
 	rs := &AclService{s: s}
 	return rs
@@ -745,6 +740,68 @@
 	return gensupport.MarshalJSON(raw, s.ForceSendFields, s.NullFields)
 }
 
+type DeepLinkData struct {
+	Links []*Link `json:"links,omitempty"`
+
+	Url string `json:"url,omitempty"`
+
+	// ForceSendFields is a list of field names (e.g. "Links") to
+	// unconditionally include in API requests. By default, fields with
+	// empty values are omitted from API requests. However, any non-pointer,
+	// non-interface field appearing in ForceSendFields will be sent to the
+	// server regardless of whether the field is empty or not. This may be
+	// used to include empty fields in Patch requests.
+	ForceSendFields []string `json:"-"`
+
+	// NullFields is a list of field names (e.g. "Links") to include in API
+	// requests with the JSON null value. By default, fields with empty
+	// values are omitted from API requests. However, any field with an
+	// empty value appearing in NullFields will be sent to the server as
+	// null. It is an error if a field in this list has a non-empty value.
+	// This may be used to include null fields in Patch requests.
+	NullFields []string `json:"-"`
+}
+
+func (s *DeepLinkData) MarshalJSON() ([]byte, error) {
+	type noMethod DeepLinkData
+	raw := noMethod(*s)
+	return gensupport.MarshalJSON(raw, s.ForceSendFields, s.NullFields)
+}
+
+type DisplayInfo struct {
+	AppIconUrl string `json:"appIconUrl,omitempty"`
+
+	AppShortTitle string `json:"appShortTitle,omitempty"`
+
+	AppTitle string `json:"appTitle,omitempty"`
+
+	LinkShortTitle string `json:"linkShortTitle,omitempty"`
+
+	LinkTitle string `json:"linkTitle,omitempty"`
+
+	// ForceSendFields is a list of field names (e.g. "AppIconUrl") to
+	// unconditionally include in API requests. By default, fields with
+	// empty values are omitted from API requests. However, any non-pointer,
+	// non-interface field appearing in ForceSendFields will be sent to the
+	// server regardless of whether the field is empty or not. This may be
+	// used to include empty fields in Patch requests.
+	ForceSendFields []string `json:"-"`
+
+	// NullFields is a list of field names (e.g. "AppIconUrl") to include in
+	// API requests with the JSON null value. By default, fields with empty
+	// values are omitted from API requests. However, any field with an
+	// empty value appearing in NullFields will be sent to the server as
+	// null. It is an error if a field in this list has a non-empty value.
+	// This may be used to include null fields in Patch requests.
+	NullFields []string `json:"-"`
+}
+
+func (s *DisplayInfo) MarshalJSON() ([]byte, error) {
+	type noMethod DisplayInfo
+	raw := noMethod(*s)
+	return gensupport.MarshalJSON(raw, s.ForceSendFields, s.NullFields)
+}
+
 type Error struct {
 	// Domain: Domain, or broad category, of the error.
 	Domain string `json:"domain,omitempty"`
@@ -1408,6 +1465,36 @@
 	return gensupport.MarshalJSON(raw, s.ForceSendFields, s.NullFields)
 }
 
+type EventHabitInstance struct {
+	// Data: Metadata specific to this instance.
+	Data *HabitInstanceData `json:"data,omitempty"`
+
+	// ParentId: Id of the habit this instance belongs to.
+	ParentId string `json:"parentId,omitempty"`
+
+	// ForceSendFields is a list of field names (e.g. "Data") to
+	// unconditionally include in API requests. By default, fields with
+	// empty values are omitted from API requests. However, any non-pointer,
+	// non-interface field appearing in ForceSendFields will be sent to the
+	// server regardless of whether the field is empty or not. This may be
+	// used to include empty fields in Patch requests.
+	ForceSendFields []string `json:"-"`
+
+	// NullFields is a list of field names (e.g. "Data") to include in API
+	// requests with the JSON null value. By default, fields with empty
+	// values are omitted from API requests. However, any field with an
+	// empty value appearing in NullFields will be sent to the server as
+	// null. It is an error if a field in this list has a non-empty value.
+	// This may be used to include null fields in Patch requests.
+	NullFields []string `json:"-"`
+}
+
+func (s *EventHabitInstance) MarshalJSON() ([]byte, error) {
+	type noMethod EventHabitInstance
+	raw := noMethod(*s)
+	return gensupport.MarshalJSON(raw, s.ForceSendFields, s.NullFields)
+}
+
 type EventReminder struct {
 	// Method: The method used by this reminder. Possible values are:
 	// - "email" - Reminders are sent via email.
@@ -1707,6 +1794,103 @@
 	return gensupport.MarshalJSON(raw, s.ForceSendFields, s.NullFields)
 }
 
+type HabitInstanceData struct {
+	Status string `json:"status,omitempty"`
+
+	StatusInferred bool `json:"statusInferred,omitempty"`
+
+	Type string `json:"type,omitempty"`
+
+	// ForceSendFields is a list of field names (e.g. "Status") to
+	// unconditionally include in API requests. By default, fields with
+	// empty values are omitted from API requests. However, any non-pointer,
+	// non-interface field appearing in ForceSendFields will be sent to the
+	// server regardless of whether the field is empty or not. This may be
+	// used to include empty fields in Patch requests.
+	ForceSendFields []string `json:"-"`
+
+	// NullFields is a list of field names (e.g. "Status") to include in API
+	// requests with the JSON null value. By default, fields with empty
+	// values are omitted from API requests. However, any field with an
+	// empty value appearing in NullFields will be sent to the server as
+	// null. It is an error if a field in this list has a non-empty value.
+	// This may be used to include null fields in Patch requests.
+	NullFields []string `json:"-"`
+}
+
+func (s *HabitInstanceData) MarshalJSON() ([]byte, error) {
+	type noMethod HabitInstanceData
+	raw := noMethod(*s)
+	return gensupport.MarshalJSON(raw, s.ForceSendFields, s.NullFields)
+}
+
+type LaunchInfo struct {
+	AppId string `json:"appId,omitempty"`
+
+	InstallUrl string `json:"installUrl,omitempty"`
+
+	IntentAction string `json:"intentAction,omitempty"`
+
+	Uri string `json:"uri,omitempty"`
+
+	// ForceSendFields is a list of field names (e.g. "AppId") to
+	// unconditionally include in API requests. By default, fields with
+	// empty values are omitted from API requests. However, any non-pointer,
+	// non-interface field appearing in ForceSendFields will be sent to the
+	// server regardless of whether the field is empty or not. This may be
+	// used to include empty fields in Patch requests.
+	ForceSendFields []string `json:"-"`
+
+	// NullFields is a list of field names (e.g. "AppId") to include in API
+	// requests with the JSON null value. By default, fields with empty
+	// values are omitted from API requests. However, any field with an
+	// empty value appearing in NullFields will be sent to the server as
+	// null. It is an error if a field in this list has a non-empty value.
+	// This may be used to include null fields in Patch requests.
+	NullFields []string `json:"-"`
+}
+
+func (s *LaunchInfo) MarshalJSON() ([]byte, error) {
+	type noMethod LaunchInfo
+	raw := noMethod(*s)
+	return gensupport.MarshalJSON(raw, s.ForceSendFields, s.NullFields)
+}
+
+type Link struct {
+	ApplinkingSource string `json:"applinkingSource,omitempty"`
+
+	DisplayInfo *DisplayInfo `json:"displayInfo,omitempty"`
+
+	LaunchInfo *LaunchInfo `json:"launchInfo,omitempty"`
+
+	Platform string `json:"platform,omitempty"`
+
+	Url string `json:"url,omitempty"`
+
+	// ForceSendFields is a list of field names (e.g. "ApplinkingSource") to
+	// unconditionally include in API requests. By default, fields with
+	// empty values are omitted from API requests. However, any non-pointer,
+	// non-interface field appearing in ForceSendFields will be sent to the
+	// server regardless of whether the field is empty or not. This may be
+	// used to include empty fields in Patch requests.
+	ForceSendFields []string `json:"-"`
+
+	// NullFields is a list of field names (e.g. "ApplinkingSource") to
+	// include in API requests with the JSON null value. By default, fields
+	// with empty values are omitted from API requests. However, any field
+	// with an empty value appearing in NullFields will be sent to the
+	// server as null. It is an error if a field in this list has a
+	// non-empty value. This may be used to include null fields in Patch
+	// requests.
+	NullFields []string `json:"-"`
+}
+
+func (s *Link) MarshalJSON() ([]byte, error) {
+	type noMethod Link
+	raw := noMethod(*s)
+	return gensupport.MarshalJSON(raw, s.ForceSendFields, s.NullFields)
+}
+
 type Setting struct {
 	// Etag: ETag of the resource.
 	Etag string `json:"etag,omitempty"`
@@ -1877,7 +2061,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	var body io.Reader = nil
 	c.urlParams_.Set("alt", alt)
 	urls := googleapi.ResolveRelative(c.s.BasePath, "calendars/{calendarId}/acl/{ruleId}")
@@ -1994,7 +2177,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	if c.ifNoneMatch_ != "" {
 		reqHeaders.Set("If-None-Match", c.ifNoneMatch_)
 	}
@@ -2132,7 +2314,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	var body io.Reader = nil
 	body, err := googleapi.WithoutDataWrapper.JSONReader(c.aclrule)
 	if err != nil {
@@ -2315,7 +2496,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	if c.ifNoneMatch_ != "" {
 		reqHeaders.Set("If-None-Match", c.ifNoneMatch_)
 	}
@@ -2491,7 +2671,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	var body io.Reader = nil
 	body, err := googleapi.WithoutDataWrapper.JSONReader(c.aclrule)
 	if err != nil {
@@ -2635,7 +2814,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	var body io.Reader = nil
 	body, err := googleapi.WithoutDataWrapper.JSONReader(c.aclrule)
 	if err != nil {
@@ -2817,7 +2995,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	var body io.Reader = nil
 	body, err := googleapi.WithoutDataWrapper.JSONReader(c.channel)
 	if err != nil {
@@ -2973,7 +3150,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	var body io.Reader = nil
 	c.urlParams_.Set("alt", alt)
 	urls := googleapi.ResolveRelative(c.s.BasePath, "users/me/calendarList/{calendarId}")
@@ -3080,7 +3256,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	if c.ifNoneMatch_ != "" {
 		reqHeaders.Set("If-None-Match", c.ifNoneMatch_)
 	}
@@ -3218,7 +3393,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	var body io.Reader = nil
 	body, err := googleapi.WithoutDataWrapper.JSONReader(c.calendarlistentry)
 	if err != nil {
@@ -3417,7 +3591,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	if c.ifNoneMatch_ != "" {
 		reqHeaders.Set("If-None-Match", c.ifNoneMatch_)
 	}
@@ -3612,7 +3785,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	var body io.Reader = nil
 	body, err := googleapi.WithoutDataWrapper.JSONReader(c.calendarlistentry)
 	if err != nil {
@@ -3761,7 +3933,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	var body io.Reader = nil
 	body, err := googleapi.WithoutDataWrapper.JSONReader(c.calendarlistentry)
 	if err != nil {
@@ -3963,7 +4134,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	var body io.Reader = nil
 	body, err := googleapi.WithoutDataWrapper.JSONReader(c.channel)
 	if err != nil {
@@ -4131,7 +4301,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	var body io.Reader = nil
 	c.urlParams_.Set("alt", alt)
 	urls := googleapi.ResolveRelative(c.s.BasePath, "calendars/{calendarId}/clear")
@@ -4228,7 +4397,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	var body io.Reader = nil
 	c.urlParams_.Set("alt", alt)
 	urls := googleapi.ResolveRelative(c.s.BasePath, "calendars/{calendarId}")
@@ -4335,7 +4503,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	if c.ifNoneMatch_ != "" {
 		reqHeaders.Set("If-None-Match", c.ifNoneMatch_)
 	}
@@ -4463,7 +4630,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	var body io.Reader = nil
 	body, err := googleapi.WithoutDataWrapper.JSONReader(c.calendar)
 	if err != nil {
@@ -4584,7 +4750,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	var body io.Reader = nil
 	body, err := googleapi.WithoutDataWrapper.JSONReader(c.calendar)
 	if err != nil {
@@ -4718,7 +4883,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	var body io.Reader = nil
 	body, err := googleapi.WithoutDataWrapper.JSONReader(c.calendar)
 	if err != nil {
@@ -4850,7 +5014,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	var body io.Reader = nil
 	body, err := googleapi.WithoutDataWrapper.JSONReader(c.channel)
 	if err != nil {
@@ -4951,7 +5114,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	if c.ifNoneMatch_ != "" {
 		reqHeaders.Set("If-None-Match", c.ifNoneMatch_)
 	}
@@ -5075,7 +5237,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	var body io.Reader = nil
 	c.urlParams_.Set("alt", alt)
 	urls := googleapi.ResolveRelative(c.s.BasePath, "calendars/{calendarId}/events/{eventId}")
@@ -5225,7 +5386,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	if c.ifNoneMatch_ != "" {
 		reqHeaders.Set("If-None-Match", c.ifNoneMatch_)
 	}
@@ -5389,7 +5549,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	var body io.Reader = nil
 	body, err := googleapi.WithoutDataWrapper.JSONReader(c.event)
 	if err != nil {
@@ -5553,7 +5712,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	var body io.Reader = nil
 	body, err := googleapi.WithoutDataWrapper.JSONReader(c.event)
 	if err != nil {
@@ -5792,7 +5950,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	if c.ifNoneMatch_ != "" {
 		reqHeaders.Set("If-None-Match", c.ifNoneMatch_)
 	}
@@ -6192,7 +6349,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	if c.ifNoneMatch_ != "" {
 		reqHeaders.Set("If-None-Match", c.ifNoneMatch_)
 	}
@@ -6457,7 +6613,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	var body io.Reader = nil
 	c.urlParams_.Set("alt", alt)
 	urls := googleapi.ResolveRelative(c.s.BasePath, "calendars/{calendarId}/events/{eventId}/move")
@@ -6642,7 +6797,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	var body io.Reader = nil
 	body, err := googleapi.WithoutDataWrapper.JSONReader(c.event)
 	if err != nil {
@@ -6813,7 +6967,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	var body io.Reader = nil
 	c.urlParams_.Set("alt", alt)
 	urls := googleapi.ResolveRelative(c.s.BasePath, "calendars/{calendarId}/events/quickAdd")
@@ -6990,7 +7143,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	var body io.Reader = nil
 	body, err := googleapi.WithoutDataWrapper.JSONReader(c.event)
 	if err != nil {
@@ -7334,7 +7486,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	var body io.Reader = nil
 	body, err := googleapi.WithoutDataWrapper.JSONReader(c.channel)
 	if err != nil {
@@ -7572,7 +7723,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	var body io.Reader = nil
 	body, err := googleapi.WithoutDataWrapper.JSONReader(c.freebusyrequest)
 	if err != nil {
@@ -7702,7 +7852,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	if c.ifNoneMatch_ != "" {
 		reqHeaders.Set("If-None-Match", c.ifNoneMatch_)
 	}
@@ -7868,7 +8017,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	if c.ifNoneMatch_ != "" {
 		reqHeaders.Set("If-None-Match", c.ifNoneMatch_)
 	}
@@ -8052,7 +8200,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	var body io.Reader = nil
 	body, err := googleapi.WithoutDataWrapper.JSONReader(c.channel)
 	if err != nil {
diff --git a/civicinfo/v2/civicinfo-gen.go b/civicinfo/v2/civicinfo-gen.go
index 0a36fba..3c2a869 100644
--- a/civicinfo/v2/civicinfo-gen.go
+++ b/civicinfo/v2/civicinfo-gen.go
@@ -57,10 +57,9 @@
 }
 
 type Service struct {
-	client                    *http.Client
-	BasePath                  string // API endpoint base URL
-	UserAgent                 string // optional additional User-Agent fragment
-	GoogleClientHeaderElement string // client header fragment, for Google use only
+	client    *http.Client
+	BasePath  string // API endpoint base URL
+	UserAgent string // optional additional User-Agent fragment
 
 	Divisions *DivisionsService
 
@@ -76,10 +75,6 @@
 	return googleapi.UserAgent + " " + s.UserAgent
 }
 
-func (s *Service) clientHeader() string {
-	return gensupport.GoogleClientHeader("20170210", s.GoogleClientHeaderElement)
-}
-
 func NewDivisionsService(s *Service) *DivisionsService {
 	rs := &DivisionsService{s: s}
 	return rs
@@ -1500,7 +1495,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	if c.ifNoneMatch_ != "" {
 		reqHeaders.Set("If-None-Match", c.ifNoneMatch_)
 	}
@@ -1631,7 +1625,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	if c.ifNoneMatch_ != "" {
 		reqHeaders.Set("If-None-Match", c.ifNoneMatch_)
 	}
@@ -1782,7 +1775,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	if c.ifNoneMatch_ != "" {
 		reqHeaders.Set("If-None-Match", c.ifNoneMatch_)
 	}
@@ -1994,7 +1986,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	if c.ifNoneMatch_ != "" {
 		reqHeaders.Set("If-None-Match", c.ifNoneMatch_)
 	}
@@ -2246,7 +2237,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	if c.ifNoneMatch_ != "" {
 		reqHeaders.Set("If-None-Match", c.ifNoneMatch_)
 	}
diff --git a/classroom/v1/classroom-gen.go b/classroom/v1/classroom-gen.go
index 8565013..4bbc292 100644
--- a/classroom/v1/classroom-gen.go
+++ b/classroom/v1/classroom-gen.go
@@ -100,10 +100,9 @@
 }
 
 type Service struct {
-	client                    *http.Client
-	BasePath                  string // API endpoint base URL
-	UserAgent                 string // optional additional User-Agent fragment
-	GoogleClientHeaderElement string // client header fragment, for Google use only
+	client    *http.Client
+	BasePath  string // API endpoint base URL
+	UserAgent string // optional additional User-Agent fragment
 
 	Courses *CoursesService
 
@@ -119,10 +118,6 @@
 	return googleapi.UserAgent + " " + s.UserAgent
 }
 
-func (s *Service) clientHeader() string {
-	return gensupport.GoogleClientHeader("20170210", s.GoogleClientHeaderElement)
-}
-
 func NewCoursesService(s *Service) *CoursesService {
 	rs := &CoursesService{s: s}
 	rs.Aliases = NewCoursesAliasesService(s)
@@ -2372,7 +2367,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	var body io.Reader = nil
 	body, err := googleapi.WithoutDataWrapper.JSONReader(c.course)
 	if err != nil {
@@ -2500,7 +2494,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	var body io.Reader = nil
 	c.urlParams_.Set("alt", alt)
 	urls := googleapi.ResolveRelative(c.s.BasePath, "v1/courses/{id}")
@@ -2643,7 +2636,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	if c.ifNoneMatch_ != "" {
 		reqHeaders.Set("If-None-Match", c.ifNoneMatch_)
 	}
@@ -2854,7 +2846,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	if c.ifNoneMatch_ != "" {
 		reqHeaders.Set("If-None-Match", c.ifNoneMatch_)
 	}
@@ -3064,7 +3055,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	var body io.Reader = nil
 	body, err := googleapi.WithoutDataWrapper.JSONReader(c.course)
 	if err != nil {
@@ -3214,7 +3204,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	var body io.Reader = nil
 	body, err := googleapi.WithoutDataWrapper.JSONReader(c.course)
 	if err != nil {
@@ -3361,7 +3350,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	var body io.Reader = nil
 	body, err := googleapi.WithoutDataWrapper.JSONReader(c.coursealias)
 	if err != nil {
@@ -3507,7 +3495,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	var body io.Reader = nil
 	c.urlParams_.Set("alt", alt)
 	urls := googleapi.ResolveRelative(c.s.BasePath, "v1/courses/{courseId}/aliases/{alias}")
@@ -3682,7 +3669,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	if c.ifNoneMatch_ != "" {
 		reqHeaders.Set("If-None-Match", c.ifNoneMatch_)
 	}
@@ -3868,7 +3854,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	var body io.Reader = nil
 	body, err := googleapi.WithoutDataWrapper.JSONReader(c.coursework)
 	if err != nil {
@@ -4021,7 +4006,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	var body io.Reader = nil
 	c.urlParams_.Set("alt", alt)
 	urls := googleapi.ResolveRelative(c.s.BasePath, "v1/courses/{courseId}/courseWork/{id}")
@@ -4175,7 +4159,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	if c.ifNoneMatch_ != "" {
 		reqHeaders.Set("If-None-Match", c.ifNoneMatch_)
 	}
@@ -4392,7 +4375,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	if c.ifNoneMatch_ != "" {
 		reqHeaders.Set("If-None-Match", c.ifNoneMatch_)
 	}
@@ -4628,7 +4610,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	var body io.Reader = nil
 	body, err := googleapi.WithoutDataWrapper.JSONReader(c.coursework)
 	if err != nil {
@@ -4799,7 +4780,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	if c.ifNoneMatch_ != "" {
 		reqHeaders.Set("If-None-Match", c.ifNoneMatch_)
 	}
@@ -5045,7 +5025,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	if c.ifNoneMatch_ != "" {
 		reqHeaders.Set("If-None-Match", c.ifNoneMatch_)
 	}
@@ -5277,7 +5256,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	var body io.Reader = nil
 	body, err := googleapi.WithoutDataWrapper.JSONReader(c.modifyattachmentsrequest)
 	if err != nil {
@@ -5469,7 +5447,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	var body io.Reader = nil
 	body, err := googleapi.WithoutDataWrapper.JSONReader(c.studentsubmission)
 	if err != nil {
@@ -5661,7 +5638,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	var body io.Reader = nil
 	body, err := googleapi.WithoutDataWrapper.JSONReader(c.reclaimstudentsubmissionrequest)
 	if err != nil {
@@ -5845,7 +5821,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	var body io.Reader = nil
 	body, err := googleapi.WithoutDataWrapper.JSONReader(c.returnstudentsubmissionrequest)
 	if err != nil {
@@ -6026,7 +6001,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	var body io.Reader = nil
 	body, err := googleapi.WithoutDataWrapper.JSONReader(c.turninstudentsubmissionrequest)
 	if err != nil {
@@ -6204,7 +6178,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	var body io.Reader = nil
 	body, err := googleapi.WithoutDataWrapper.JSONReader(c.student)
 	if err != nil {
@@ -6355,7 +6328,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	var body io.Reader = nil
 	c.urlParams_.Set("alt", alt)
 	urls := googleapi.ResolveRelative(c.s.BasePath, "v1/courses/{courseId}/students/{userId}")
@@ -6510,7 +6482,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	if c.ifNoneMatch_ != "" {
 		reqHeaders.Set("If-None-Match", c.ifNoneMatch_)
 	}
@@ -6688,7 +6659,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	if c.ifNoneMatch_ != "" {
 		reqHeaders.Set("If-None-Match", c.ifNoneMatch_)
 	}
@@ -6870,7 +6840,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	var body io.Reader = nil
 	body, err := googleapi.WithoutDataWrapper.JSONReader(c.teacher)
 	if err != nil {
@@ -7019,7 +6988,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	var body io.Reader = nil
 	c.urlParams_.Set("alt", alt)
 	urls := googleapi.ResolveRelative(c.s.BasePath, "v1/courses/{courseId}/teachers/{userId}")
@@ -7174,7 +7142,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	if c.ifNoneMatch_ != "" {
 		reqHeaders.Set("If-None-Match", c.ifNoneMatch_)
 	}
@@ -7352,7 +7319,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	if c.ifNoneMatch_ != "" {
 		reqHeaders.Set("If-None-Match", c.ifNoneMatch_)
 	}
@@ -7531,7 +7497,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	var body io.Reader = nil
 	c.urlParams_.Set("alt", alt)
 	urls := googleapi.ResolveRelative(c.s.BasePath, "v1/invitations/{id}:accept")
@@ -7671,7 +7636,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	var body io.Reader = nil
 	body, err := googleapi.WithoutDataWrapper.JSONReader(c.invitation)
 	if err != nil {
@@ -7799,7 +7763,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	var body io.Reader = nil
 	c.urlParams_.Set("alt", alt)
 	urls := googleapi.ResolveRelative(c.s.BasePath, "v1/invitations/{id}")
@@ -7942,7 +7905,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	if c.ifNoneMatch_ != "" {
 		reqHeaders.Set("If-None-Match", c.ifNoneMatch_)
 	}
@@ -8132,7 +8094,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	if c.ifNoneMatch_ != "" {
 		reqHeaders.Set("If-None-Match", c.ifNoneMatch_)
 	}
@@ -8311,7 +8272,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	if c.ifNoneMatch_ != "" {
 		reqHeaders.Set("If-None-Match", c.ifNoneMatch_)
 	}
@@ -8489,7 +8449,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	var body io.Reader = nil
 	body, err := googleapi.WithoutDataWrapper.JSONReader(c.guardianinvitation)
 	if err != nil {
@@ -8651,7 +8610,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	if c.ifNoneMatch_ != "" {
 		reqHeaders.Set("If-None-Match", c.ifNoneMatch_)
 	}
@@ -8865,7 +8823,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	if c.ifNoneMatch_ != "" {
 		reqHeaders.Set("If-None-Match", c.ifNoneMatch_)
 	}
@@ -9084,7 +9041,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	var body io.Reader = nil
 	body, err := googleapi.WithoutDataWrapper.JSONReader(c.guardianinvitation)
 	if err != nil {
@@ -9254,7 +9210,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	var body io.Reader = nil
 	c.urlParams_.Set("alt", alt)
 	urls := googleapi.ResolveRelative(c.s.BasePath, "v1/userProfiles/{studentId}/guardians/{guardianId}")
@@ -9418,7 +9373,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	if c.ifNoneMatch_ != "" {
 		reqHeaders.Set("If-None-Match", c.ifNoneMatch_)
 	}
@@ -9626,7 +9580,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	if c.ifNoneMatch_ != "" {
 		reqHeaders.Set("If-None-Match", c.ifNoneMatch_)
 	}
diff --git a/cloudbilling/v1/cloudbilling-gen.go b/cloudbilling/v1/cloudbilling-gen.go
index 505e693..24ad441 100644
--- a/cloudbilling/v1/cloudbilling-gen.go
+++ b/cloudbilling/v1/cloudbilling-gen.go
@@ -62,10 +62,9 @@
 }
 
 type Service struct {
-	client                    *http.Client
-	BasePath                  string // API endpoint base URL
-	UserAgent                 string // optional additional User-Agent fragment
-	GoogleClientHeaderElement string // client header fragment, for Google use only
+	client    *http.Client
+	BasePath  string // API endpoint base URL
+	UserAgent string // optional additional User-Agent fragment
 
 	BillingAccounts *BillingAccountsService
 
@@ -79,10 +78,6 @@
 	return googleapi.UserAgent + " " + s.UserAgent
 }
 
-func (s *Service) clientHeader() string {
-	return gensupport.GoogleClientHeader("20170210", s.GoogleClientHeaderElement)
-}
-
 func NewBillingAccountsService(s *Service) *BillingAccountsService {
 	rs := &BillingAccountsService{s: s}
 	rs.Projects = NewBillingAccountsProjectsService(s)
@@ -379,7 +374,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	if c.ifNoneMatch_ != "" {
 		reqHeaders.Set("If-None-Match", c.ifNoneMatch_)
 	}
@@ -538,7 +532,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	if c.ifNoneMatch_ != "" {
 		reqHeaders.Set("If-None-Match", c.ifNoneMatch_)
 	}
@@ -721,7 +714,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	if c.ifNoneMatch_ != "" {
 		reqHeaders.Set("If-None-Match", c.ifNoneMatch_)
 	}
@@ -899,7 +891,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	if c.ifNoneMatch_ != "" {
 		reqHeaders.Set("If-None-Match", c.ifNoneMatch_)
 	}
@@ -1085,7 +1076,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	var body io.Reader = nil
 	body, err := googleapi.WithoutDataWrapper.JSONReader(c.projectbillinginfo)
 	if err != nil {
diff --git a/cloudbuild/v1/cloudbuild-api.json b/cloudbuild/v1/cloudbuild-api.json
index f22c4b7..cad1c39 100644
--- a/cloudbuild/v1/cloudbuild-api.json
+++ b/cloudbuild/v1/cloudbuild-api.json
@@ -1,741 +1,24 @@
 {
-  "title": "Google Cloud Container Builder API",
-  "ownerName": "Google",
-  "resources": {
-    "operations": {
-      "methods": {
-        "cancel": {
-          "response": {
-            "$ref": "Empty"
-          },
-          "parameterOrder": [
-            "name"
-          ],
-          "httpMethod": "POST",
-          "parameters": {
-            "name": {
-              "pattern": "^operations/.+$",
-              "location": "path",
-              "description": "The name of the operation resource to be cancelled.",
-              "required": true,
-              "type": "string"
-            }
-          },
-          "scopes": [
-            "https://www.googleapis.com/auth/cloud-platform"
-          ],
-          "flatPath": "v1/operations/{operationsId}:cancel",
-          "path": "v1/{+name}:cancel",
-          "id": "cloudbuild.operations.cancel",
-          "request": {
-            "$ref": "CancelOperationRequest"
-          },
-          "description": "Starts asynchronous cancellation on a long-running operation.  The server\nmakes a best effort to cancel the operation, but success is not\nguaranteed.  If the server doesn't support this method, it returns\n`google.rpc.Code.UNIMPLEMENTED`.  Clients can use\nOperations.GetOperation or\nother methods to check whether the cancellation succeeded or whether the\noperation completed despite cancellation. On successful cancellation,\nthe operation is not deleted; instead, it becomes an operation with\nan Operation.error value with a google.rpc.Status.code of 1,\ncorresponding to `Code.CANCELLED`."
-        },
-        "list": {
-          "description": "Lists operations that match the specified filter in the request. If the\nserver doesn't support this method, it returns `UNIMPLEMENTED`.\n\nNOTE: the `name` binding below allows API services to override the binding\nto use different resource name schemes, such as `users/*/operations`.",
-          "response": {
-            "$ref": "ListOperationsResponse"
-          },
-          "parameterOrder": [
-            "name"
-          ],
-          "httpMethod": "GET",
-          "parameters": {
-            "name": {
-              "pattern": "^operations$",
-              "location": "path",
-              "description": "The name of the operation collection.",
-              "required": true,
-              "type": "string"
-            },
-            "pageToken": {
-              "description": "The standard list page token.",
-              "type": "string",
-              "location": "query"
-            },
-            "pageSize": {
-              "description": "The standard list page size.",
-              "format": "int32",
-              "type": "integer",
-              "location": "query"
-            },
-            "filter": {
-              "description": "The standard list filter.",
-              "type": "string",
-              "location": "query"
-            }
-          },
-          "scopes": [
-            "https://www.googleapis.com/auth/cloud-platform"
-          ],
-          "flatPath": "v1/operations",
-          "path": "v1/{+name}",
-          "id": "cloudbuild.operations.list"
-        },
-        "get": {
-          "description": "Gets the latest state of a long-running operation.  Clients can use this\nmethod to poll the operation result at intervals as recommended by the API\nservice.",
-          "httpMethod": "GET",
-          "response": {
-            "$ref": "Operation"
-          },
-          "parameterOrder": [
-            "name"
-          ],
-          "parameters": {
-            "name": {
-              "description": "The name of the operation resource.",
-              "required": true,
-              "type": "string",
-              "pattern": "^operations/.+$",
-              "location": "path"
-            }
-          },
-          "scopes": [
-            "https://www.googleapis.com/auth/cloud-platform"
-          ],
-          "flatPath": "v1/operations/{operationsId}",
-          "id": "cloudbuild.operations.get",
-          "path": "v1/{+name}"
-        }
-      }
-    },
-    "projects": {
-      "resources": {
-        "triggers": {
-          "methods": {
-            "delete": {
-              "parameterOrder": [
-                "projectId",
-                "triggerId"
-              ],
-              "httpMethod": "DELETE",
-              "response": {
-                "$ref": "Empty"
-              },
-              "scopes": [
-                "https://www.googleapis.com/auth/cloud-platform"
-              ],
-              "parameters": {
-                "triggerId": {
-                  "description": "ID of the BuildTrigger to delete.",
-                  "required": true,
-                  "type": "string",
-                  "location": "path"
-                },
-                "projectId": {
-                  "description": "ID of the project that owns the trigger.",
-                  "required": true,
-                  "type": "string",
-                  "location": "path"
-                }
-              },
-              "flatPath": "v1/projects/{projectId}/triggers/{triggerId}",
-              "path": "v1/projects/{projectId}/triggers/{triggerId}",
-              "id": "cloudbuild.projects.triggers.delete",
-              "description": "Deletes an BuildTrigger by its project ID and trigger ID.\n\nThis API is experimental."
-            },
-            "get": {
-              "httpMethod": "GET",
-              "parameterOrder": [
-                "projectId",
-                "triggerId"
-              ],
-              "response": {
-                "$ref": "BuildTrigger"
-              },
-              "scopes": [
-                "https://www.googleapis.com/auth/cloud-platform"
-              ],
-              "parameters": {
-                "triggerId": {
-                  "location": "path",
-                  "description": "ID of the BuildTrigger to get.",
-                  "required": true,
-                  "type": "string"
-                },
-                "projectId": {
-                  "location": "path",
-                  "description": "ID of the project that owns the trigger.",
-                  "required": true,
-                  "type": "string"
-                }
-              },
-              "flatPath": "v1/projects/{projectId}/triggers/{triggerId}",
-              "id": "cloudbuild.projects.triggers.get",
-              "path": "v1/projects/{projectId}/triggers/{triggerId}",
-              "description": "Gets information about a BuildTrigger.\n\nThis API is experimental."
-            },
-            "list": {
-              "path": "v1/projects/{projectId}/triggers",
-              "id": "cloudbuild.projects.triggers.list",
-              "description": "Lists existing BuildTrigger.\n\nThis API is experimental.",
-              "parameterOrder": [
-                "projectId"
-              ],
-              "httpMethod": "GET",
-              "response": {
-                "$ref": "ListBuildTriggersResponse"
-              },
-              "scopes": [
-                "https://www.googleapis.com/auth/cloud-platform"
-              ],
-              "parameters": {
-                "projectId": {
-                  "description": "ID of the project for which to list BuildTriggers.",
-                  "required": true,
-                  "type": "string",
-                  "location": "path"
-                }
-              },
-              "flatPath": "v1/projects/{projectId}/triggers"
-            },
-            "patch": {
-              "response": {
-                "$ref": "BuildTrigger"
-              },
-              "parameterOrder": [
-                "projectId",
-                "triggerId"
-              ],
-              "httpMethod": "PATCH",
-              "parameters": {
-                "triggerId": {
-                  "location": "path",
-                  "description": "ID of the BuildTrigger to update.",
-                  "required": true,
-                  "type": "string"
-                },
-                "projectId": {
-                  "description": "ID of the project that owns the trigger.",
-                  "required": true,
-                  "type": "string",
-                  "location": "path"
-                }
-              },
-              "scopes": [
-                "https://www.googleapis.com/auth/cloud-platform"
-              ],
-              "flatPath": "v1/projects/{projectId}/triggers/{triggerId}",
-              "path": "v1/projects/{projectId}/triggers/{triggerId}",
-              "id": "cloudbuild.projects.triggers.patch",
-              "request": {
-                "$ref": "BuildTrigger"
-              },
-              "description": "Updates an BuildTrigger by its project ID and trigger ID.\n\nThis API is experimental."
-            },
-            "create": {
-              "response": {
-                "$ref": "BuildTrigger"
-              },
-              "parameterOrder": [
-                "projectId"
-              ],
-              "httpMethod": "POST",
-              "parameters": {
-                "projectId": {
-                  "description": "ID of the project for which to configure automatic builds.",
-                  "required": true,
-                  "type": "string",
-                  "location": "path"
-                }
-              },
-              "scopes": [
-                "https://www.googleapis.com/auth/cloud-platform"
-              ],
-              "flatPath": "v1/projects/{projectId}/triggers",
-              "path": "v1/projects/{projectId}/triggers",
-              "id": "cloudbuild.projects.triggers.create",
-              "request": {
-                "$ref": "BuildTrigger"
-              },
-              "description": "Creates a new BuildTrigger.\n\nThis API is experimental."
-            }
-          }
-        },
-        "builds": {
-          "methods": {
-            "cancel": {
-              "description": "Cancels a requested build in progress.",
-              "request": {
-                "$ref": "CancelBuildRequest"
-              },
-              "httpMethod": "POST",
-              "parameterOrder": [
-                "projectId",
-                "id"
-              ],
-              "response": {
-                "$ref": "Build"
-              },
-              "scopes": [
-                "https://www.googleapis.com/auth/cloud-platform"
-              ],
-              "parameters": {
-                "projectId": {
-                  "location": "path",
-                  "description": "ID of the project.",
-                  "required": true,
-                  "type": "string"
-                },
-                "id": {
-                  "location": "path",
-                  "description": "ID of the build.",
-                  "required": true,
-                  "type": "string"
-                }
-              },
-              "flatPath": "v1/projects/{projectId}/builds/{id}:cancel",
-              "id": "cloudbuild.projects.builds.cancel",
-              "path": "v1/projects/{projectId}/builds/{id}:cancel"
-            },
-            "get": {
-              "httpMethod": "GET",
-              "response": {
-                "$ref": "Build"
-              },
-              "parameterOrder": [
-                "projectId",
-                "id"
-              ],
-              "parameters": {
-                "id": {
-                  "description": "ID of the build.",
-                  "required": true,
-                  "type": "string",
-                  "location": "path"
-                },
-                "projectId": {
-                  "description": "ID of the project.",
-                  "required": true,
-                  "type": "string",
-                  "location": "path"
-                }
-              },
-              "scopes": [
-                "https://www.googleapis.com/auth/cloud-platform"
-              ],
-              "flatPath": "v1/projects/{projectId}/builds/{id}",
-              "id": "cloudbuild.projects.builds.get",
-              "path": "v1/projects/{projectId}/builds/{id}",
-              "description": "Returns information about a previously requested build.\n\nThe Build that is returned includes its status (e.g., success or failure,\nor in-progress), and timing information."
-            },
-            "list": {
-              "httpMethod": "GET",
-              "response": {
-                "$ref": "ListBuildsResponse"
-              },
-              "parameterOrder": [
-                "projectId"
-              ],
-              "parameters": {
-                "pageToken": {
-                  "location": "query",
-                  "description": "Token to provide to skip to a particular spot in the list.",
-                  "type": "string"
-                },
-                "pageSize": {
-                  "location": "query",
-                  "description": "Number of results to return in the list.",
-                  "format": "int32",
-                  "type": "integer"
-                },
-                "projectId": {
-                  "location": "path",
-                  "description": "ID of the project.",
-                  "required": true,
-                  "type": "string"
-                },
-                "filter": {
-                  "description": "The raw filter text to constrain the results.",
-                  "type": "string",
-                  "location": "query"
-                }
-              },
-              "scopes": [
-                "https://www.googleapis.com/auth/cloud-platform"
-              ],
-              "flatPath": "v1/projects/{projectId}/builds",
-              "id": "cloudbuild.projects.builds.list",
-              "path": "v1/projects/{projectId}/builds",
-              "description": "Lists previously requested builds.\n\nPreviously requested builds may still be in-progress, or may have finished\nsuccessfully or unsuccessfully."
-            },
-            "create": {
-              "httpMethod": "POST",
-              "parameterOrder": [
-                "projectId"
-              ],
-              "response": {
-                "$ref": "Operation"
-              },
-              "parameters": {
-                "projectId": {
-                  "description": "ID of the project.",
-                  "required": true,
-                  "type": "string",
-                  "location": "path"
-                }
-              },
-              "scopes": [
-                "https://www.googleapis.com/auth/cloud-platform"
-              ],
-              "flatPath": "v1/projects/{projectId}/builds",
-              "id": "cloudbuild.projects.builds.create",
-              "path": "v1/projects/{projectId}/builds",
-              "request": {
-                "$ref": "Build"
-              },
-              "description": "Starts a build with the specified configuration.\n\nThe long-running Operation returned by this method will include the ID of\nthe build, which can be passed to GetBuild to determine its status (e.g.,\nsuccess or failure)."
-            }
-          }
-        }
-      }
-    }
-  },
-  "parameters": {
-    "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"
-    },
-    "access_token": {
-      "location": "query",
-      "description": "OAuth access token.",
-      "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"
-    },
-    "pp": {
-      "location": "query",
-      "description": "Pretty-print response.",
-      "type": "boolean",
-      "default": "true"
-    },
-    "oauth_token": {
-      "description": "OAuth 2.0 token for the current user.",
-      "type": "string",
-      "location": "query"
-    },
-    "bearer_token": {
-      "location": "query",
-      "description": "OAuth bearer token.",
-      "type": "string"
-    },
-    "upload_protocol": {
-      "location": "query",
-      "description": "Upload protocol for media (e.g. \"raw\", \"multipart\").",
-      "type": "string"
-    },
-    "prettyPrint": {
-      "location": "query",
-      "description": "Returns response with indentations and line breaks.",
-      "type": "boolean",
-      "default": "true"
-    },
-    "fields": {
-      "location": "query",
-      "description": "Selector specifying which fields to include in a partial response.",
-      "type": "string"
-    },
-    "uploadType": {
-      "location": "query",
-      "description": "Legacy upload protocol for media (e.g. \"media\", \"multipart\").",
-      "type": "string"
-    },
-    "$.xgafv": {
-      "enumDescriptions": [
-        "v1 error format",
-        "v2 error format"
-      ],
-      "location": "query",
-      "enum": [
-        "1",
-        "2"
-      ],
-      "description": "V1 error format.",
-      "type": "string"
-    },
-    "callback": {
-      "location": "query",
-      "description": "JSONP",
-      "type": "string"
-    },
-    "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"
-    }
-  },
-  "version": "v1",
-  "baseUrl": "https://cloudbuild.googleapis.com/",
-  "description": "Builds container images in the cloud.",
-  "kind": "discovery#restDescription",
-  "servicePath": "",
-  "basePath": "",
-  "revision": "20170306",
   "documentationLink": "https://cloud.google.com/container-builder/docs/",
   "id": "cloudbuild:v1",
+  "revision": "20170323",
   "discoveryVersion": "v1",
   "version_module": "True",
   "schemas": {
-    "Status": {
-      "description": "The `Status` type defines a logical error model that is suitable for different\nprogramming environments, including REST APIs and RPC APIs. It is used by\n[gRPC](https://github.com/grpc). The error model is designed to be:\n\n- Simple to use and understand for most users\n- Flexible enough to meet unexpected needs\n\n# Overview\n\nThe `Status` message contains three pieces of data: error code, error message,\nand error details. The error code should be an enum value of\ngoogle.rpc.Code, but it may accept additional error codes if needed.  The\nerror message should be a developer-facing English message that helps\ndevelopers *understand* and *resolve* the error. If a localized user-facing\nerror message is needed, put the localized message in the error details or\nlocalize it in the client. The optional error details may contain arbitrary\ninformation about the error. There is a predefined set of error detail types\nin the package `google.rpc` which can be used for common error conditions.\n\n# Language mapping\n\nThe `Status` message is the logical representation of the error model, but it\nis not necessarily the actual wire format. When the `Status` message is\nexposed in different client libraries and different wire protocols, it can be\nmapped differently. For example, it will likely be mapped to some exceptions\nin Java, but more likely mapped to some error codes in C.\n\n# Other uses\n\nThe error model and the `Status` message can be used in a variety of\nenvironments, either with or without APIs, to provide a\nconsistent developer experience across different environments.\n\nExample uses of this error model include:\n\n- Partial errors. If a service needs to return partial errors to the client,\n    it may embed the `Status` in the normal response to indicate the partial\n    errors.\n\n- Workflow errors. A typical workflow has multiple steps. Each step may\n    have a `Status` message for error reporting purpose.\n\n- Batch operations. If a client uses batch request and batch response, the\n    `Status` message should be used directly inside batch response, one for\n    each error sub-response.\n\n- Asynchronous operations. If an API call embeds asynchronous operation\n    results in its response, the status of those operations should be\n    represented directly using the `Status` message.\n\n- Logging. If some API errors are stored in logs, the message `Status` could\n    be used directly after any stripping needed for security/privacy reasons.",
-      "type": "object",
-      "properties": {
-        "details": {
-          "description": "A list of messages that carry the error details.  There will be a\ncommon 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"
-            },
-            "type": "object"
-          }
-        },
-        "code": {
-          "description": "The status code, which should be an enum value of google.rpc.Code.",
-          "format": "int32",
-          "type": "integer"
-        },
-        "message": {
-          "description": "A developer-facing error message, which should be in English. Any\nuser-facing error message should be localized and sent in the\ngoogle.rpc.Status.details field, or localized by the client.",
-          "type": "string"
-        }
-      },
-      "id": "Status"
-    },
-    "Empty": {
-      "description": "A generic empty message that you can re-use to avoid defining duplicated\nempty messages in your APIs. A typical example is to use it as the request\nor the response type of an API method. For instance:\n\n    service Foo {\n      rpc Bar(google.protobuf.Empty) returns (google.protobuf.Empty);\n    }\n\nThe JSON representation for `Empty` is empty JSON object `{}`.",
-      "type": "object",
-      "properties": {},
-      "id": "Empty"
-    },
-    "BuildTrigger": {
-      "description": "Configuration for an automated build in response to source repository\nchanges.",
-      "type": "object",
-      "properties": {
-        "disabled": {
-          "description": "If true, the trigger will never result in a build.",
-          "type": "boolean"
-        },
-        "createTime": {
-          "description": "Time when the trigger was created.\n\n@OutputOnly",
-          "format": "google-datetime",
-          "type": "string"
-        },
-        "triggerTemplate": {
-          "$ref": "RepoSource",
-          "description": "Template describing the types of source changes to trigger a build.\n\nBranch and tag names in trigger templates are interpreted as regular\nexpressions. Any branch or tag change that matches that regular expression\nwill trigger a build."
-        },
-        "filename": {
-          "description": "Path, from the source root, to a file whose contents is used for the\ntemplate.",
-          "type": "string"
-        },
-        "id": {
-          "description": "Unique identifier of the trigger.\n\n@OutputOnly",
-          "type": "string"
-        },
-        "build": {
-          "description": "Contents of the build template.",
-          "$ref": "Build"
-        },
-        "substitutions": {
-          "additionalProperties": {
-            "type": "string"
-          },
-          "description": "Substitutions data for Build resource.",
-          "type": "object"
-        },
-        "description": {
-          "description": "Human-readable description of this trigger.",
-          "type": "string"
-        }
-      },
-      "id": "BuildTrigger"
-    },
-    "Build": {
-      "properties": {
-        "images": {
-          "description": "A list of images to be pushed upon the successful completion of all build\nsteps.\n\nThe images will be pushed using the builder service account's credentials.\n\nThe digests of the pushed images will be stored in the Build resource's\nresults field.\n\nIf any of the images fail to be pushed, the build is marked FAILURE.",
-          "type": "array",
-          "items": {
-            "type": "string"
-          }
-        },
-        "projectId": {
-          "description": "ID of the project.\n@OutputOnly.",
-          "type": "string"
-        },
-        "finishTime": {
-          "description": "Time at which execution of the build was finished.\n\nThe difference between finish_time and start_time is the duration of the\nbuild's execution.\n@OutputOnly",
-          "format": "google-datetime",
-          "type": "string"
-        },
-        "logUrl": {
-          "description": "URL to logs for this build in Google Cloud Logging.\n@OutputOnly",
-          "type": "string"
-        },
-        "options": {
-          "description": "Special options for this build.",
-          "$ref": "BuildOptions"
-        },
-        "source": {
-          "$ref": "Source",
-          "description": "Describes where to find the source files to build."
-        },
-        "timeout": {
-          "description": "Amount of time that this build should be allowed to run, to second\ngranularity. If this amount of time elapses, work on the build will cease\nand the build status will be TIMEOUT.\n\nDefault time is ten minutes.",
-          "format": "google-duration",
-          "type": "string"
-        },
-        "status": {
-          "enum": [
-            "STATUS_UNKNOWN",
-            "QUEUED",
-            "WORKING",
-            "SUCCESS",
-            "FAILURE",
-            "INTERNAL_ERROR",
-            "TIMEOUT",
-            "CANCELLED"
-          ],
-          "description": "Status of the build.\n@OutputOnly",
-          "type": "string",
-          "enumDescriptions": [
-            "Status of the build is unknown.",
-            "Build is queued; work has not yet begun.",
-            "Build is being executed.",
-            "Build finished successfully.",
-            "Build failed to complete successfully.",
-            "Build failed due to an internal cause.",
-            "Build took longer than was allowed.",
-            "Build was canceled by a user."
-          ]
-        },
-        "statusDetail": {
-          "description": "Customer-readable message about the current status.\n@OutputOnly",
-          "type": "string"
-        },
-        "results": {
-          "$ref": "Results",
-          "description": "Results of the build.\n@OutputOnly"
-        },
-        "logsBucket": {
-          "description": "Google Cloud Storage bucket where logs should be written (see\n[Bucket Name\nRequirements](https://cloud.google.com/storage/docs/bucket-naming#requirements)).\nLogs file names will be of the format `${logs_bucket}/log-${build_id}.txt`.",
-          "type": "string"
-        },
-        "steps": {
-          "description": "Describes the operations to be performed on the workspace.",
-          "type": "array",
-          "items": {
-            "$ref": "BuildStep"
-          }
-        },
-        "buildTriggerId": {
-          "description": "The ID of the BuildTrigger that triggered this build, if it was\ntriggered automatically.\n@OutputOnly",
-          "type": "string"
-        },
-        "id": {
-          "description": "Unique identifier of the build.\n@OutputOnly",
-          "type": "string"
-        },
-        "substitutions": {
-          "additionalProperties": {
-            "type": "string"
-          },
-          "description": "Substitutions data for Build resource.",
-          "type": "object"
-        },
-        "startTime": {
-          "description": "Time at which execution of the build was started.\n@OutputOnly",
-          "format": "google-datetime",
-          "type": "string"
-        },
-        "createTime": {
-          "description": "Time at which the request to create the build was received.\n@OutputOnly",
-          "format": "google-datetime",
-          "type": "string"
-        },
-        "sourceProvenance": {
-          "description": "A permanent fixed identifier for source.\n@OutputOnly",
-          "$ref": "SourceProvenance"
-        }
-      },
-      "id": "Build",
-      "description": "A build resource in the Container Builder API.\n\nAt a high level, a Build describes where to find source code, how to build\nit (for example, the builder image to run on the source), and what tag to\napply to the built image when it is pushed to Google Container Registry.\n\nFields can include the following variables which will be expanded when the\nbuild is created:\n\n- $PROJECT_ID: the project ID of the build.\n- $BUILD_ID: the autogenerated ID of the build.\n- $REPO_NAME: the source repository name specified by RepoSource.\n- $BRANCH_NAME: the branch name specified by RepoSource.\n- $TAG_NAME: the tag name specified by RepoSource.\n- $REVISION_ID or $COMMIT_SHA: the commit SHA specified by RepoSource or\n  resolved from the specified branch or tag.",
-      "type": "object"
-    },
-    "CancelBuildRequest": {
-      "description": "Request to cancel an ongoing build.",
-      "type": "object",
-      "properties": {},
-      "id": "CancelBuildRequest"
-    },
-    "ListBuildsResponse": {
-      "description": "Response including listed builds.",
-      "type": "object",
-      "properties": {
-        "nextPageToken": {
-          "description": "Token to receive the next page of results.",
-          "type": "string"
-        },
-        "builds": {
-          "description": "Builds will be sorted by create_time, descending.",
-          "type": "array",
-          "items": {
-            "$ref": "Build"
-          }
-        }
-      },
-      "id": "ListBuildsResponse"
-    },
-    "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.",
-          "type": "array",
-          "items": {
-            "$ref": "Operation"
-          }
-        }
-      },
-      "id": "ListOperationsResponse",
-      "description": "The response message for Operations.ListOperations.",
-      "type": "object"
-    },
     "Source": {
+      "description": "Source describes the location of the source in a supported storage\nservice.",
+      "type": "object",
       "properties": {
         "storageSource": {
-          "description": "If provided, get the source from this location in in Google Cloud\nStorage.",
-          "$ref": "StorageSource"
+          "$ref": "StorageSource",
+          "description": "If provided, get the source from this location in in Google Cloud\nStorage."
         },
         "repoSource": {
-          "$ref": "RepoSource",
-          "description": "If provided, get source from this location in a Cloud Repo."
+          "description": "If provided, get source from this location in a Cloud Repo.",
+          "$ref": "RepoSource"
         }
       },
-      "id": "Source",
-      "description": "Source describes the location of the source in a supported storage\nservice.",
-      "type": "object"
+      "id": "Source"
     },
     "BuildOptions": {
       "description": "Optional arguments to enable specific features of builds.",
@@ -757,29 +40,25 @@
           ]
         },
         "requestedVerifyOption": {
-          "enum": [
-            "NOT_VERIFIED",
-            "VERIFIED"
-          ],
           "description": "Requested verifiability options.",
           "type": "string",
           "enumDescriptions": [
             "Not a verifiable build. (default)",
             "Verified build."
+          ],
+          "enum": [
+            "NOT_VERIFIED",
+            "VERIFIED"
           ]
         }
       },
       "id": "BuildOptions"
     },
     "StorageSource": {
+      "id": "StorageSource",
       "description": "StorageSource describes the location of the source in an archive file in\nGoogle Cloud Storage.",
       "type": "object",
       "properties": {
-        "generation": {
-          "description": "Google Cloud Storage generation for the object. If the generation is\nomitted, the latest generation will be used.",
-          "format": "int64",
-          "type": "string"
-        },
         "bucket": {
           "description": "Google Cloud Storage bucket containing source (see\n[Bucket Name\nRequirements](https://cloud.google.com/storage/docs/bucket-naming#requirements)).",
           "type": "string"
@@ -787,63 +66,67 @@
         "object": {
           "description": "Google Cloud Storage object containing source.\n\nThis object must be a gzipped archive file (.tar.gz) containing source to\nbuild.",
           "type": "string"
+        },
+        "generation": {
+          "description": "Google Cloud Storage generation for the object. If the generation is\nomitted, the latest generation will be used.",
+          "format": "int64",
+          "type": "string"
         }
-      },
-      "id": "StorageSource"
+      }
     },
     "Results": {
+      "description": "Results describes the artifacts created by the build pipeline.",
+      "type": "object",
       "properties": {
-        "images": {
-          "description": "Images that were built as a part of the build.",
-          "type": "array",
-          "items": {
-            "$ref": "BuiltImage"
-          }
-        },
         "buildStepImages": {
           "description": "List of build step digests, in order corresponding to build step indices.",
           "type": "array",
           "items": {
             "type": "string"
           }
+        },
+        "images": {
+          "description": "Images that were built as a part of the build.",
+          "type": "array",
+          "items": {
+            "$ref": "BuiltImage"
+          }
         }
       },
-      "id": "Results",
-      "description": "Results describes the artifacts created by the build pipeline.",
-      "type": "object"
+      "id": "Results"
     },
     "BuildOperationMetadata": {
-      "description": "Metadata for build operations.",
       "type": "object",
       "properties": {
         "build": {
-          "$ref": "Build",
-          "description": "The build that the operation is tracking."
+          "description": "The build that the operation is tracking.",
+          "$ref": "Build"
         }
       },
-      "id": "BuildOperationMetadata"
+      "id": "BuildOperationMetadata",
+      "description": "Metadata for build operations."
     },
     "SourceProvenance": {
+      "id": "SourceProvenance",
+      "description": "Provenance of the source. Ways to find the original source, or verify that\nsome source was used for this build.",
+      "type": "object",
       "properties": {
+        "resolvedRepoSource": {
+          "description": "A copy of the build's source.repo_source, if exists, with any\nrevisions resolved.",
+          "$ref": "RepoSource"
+        },
+        "resolvedStorageSource": {
+          "$ref": "StorageSource",
+          "description": "A copy of the build's source.storage_source, if exists, with any\ngenerations resolved."
+        },
         "fileHashes": {
           "additionalProperties": {
             "$ref": "FileHashes"
           },
           "description": "Hash(es) of the build source, which can be used to verify that the original\nsource integrity was maintained in the build. Note that FileHashes will\nonly be populated if BuildOptions has requested a SourceProvenanceHash.\n\nThe keys to this map are file paths used as build source and the values\ncontain the hash values for those files.\n\nIf the build source came in a single package such as a gzipped tarfile\n(.tar.gz), the FileHash will be for the single path to that file.\n@OutputOnly",
           "type": "object"
-        },
-        "resolvedRepoSource": {
-          "description": "A copy of the build's source.repo_source, if exists, with any\nrevisions resolved.",
-          "$ref": "RepoSource"
-        },
-        "resolvedStorageSource": {
-          "description": "A copy of the build's source.storage_source, if exists, with any\ngenerations resolved.",
-          "$ref": "StorageSource"
         }
-      },
-      "id": "SourceProvenance",
-      "description": "Provenance of the source. Ways to find the original source, or verify that\nsome source was used for this build.",
-      "type": "object"
+      }
     },
     "CancelOperationRequest": {
       "description": "The request message for Operations.CancelOperation.",
@@ -852,6 +135,9 @@
       "id": "CancelOperationRequest"
     },
     "Operation": {
+      "id": "Operation",
+      "description": "This resource represents a long-running operation that is the result of a\nnetwork API call.",
+      "type": "object",
       "properties": {
         "done": {
           "description": "If the value is `false`, it means the operation is still in progress.\nIf true, the operation is completed, and either `error` or `response` is\navailable.",
@@ -866,12 +152,12 @@
           "type": "object"
         },
         "name": {
-          "description": "The server-assigned name, which is only unique within the same service that\noriginally returns it. If you use the default HTTP mapping, the\n`name` should have the format of `operations/some/unique/name`.",
-          "type": "string"
+          "type": "string",
+          "description": "The server-assigned name, which is only unique within the same service that\noriginally returns it. If you use the default HTTP mapping, the\n`name` should have the format of `operations/some/unique/name`."
         },
         "error": {
-          "$ref": "Status",
-          "description": "The error result of the operation in case of failure or cancellation."
+          "description": "The error result of the operation in case of failure or cancellation.",
+          "$ref": "Status"
         },
         "metadata": {
           "additionalProperties": {
@@ -881,12 +167,10 @@
           "description": "Service-specific metadata associated with the operation.  It typically\ncontains progress information and common metadata such as create time.\nSome services might not provide such metadata.  Any method that returns a\nlong-running operation should document the metadata type, if any.",
           "type": "object"
         }
-      },
-      "id": "Operation",
-      "description": "This resource represents a long-running operation that is the result of a\nnetwork API call.",
-      "type": "object"
+      }
     },
     "ListBuildTriggersResponse": {
+      "type": "object",
       "properties": {
         "triggers": {
           "description": "BuildTriggers for the project, sorted by create_time descending.",
@@ -897,8 +181,7 @@
         }
       },
       "id": "ListBuildTriggersResponse",
-      "description": "Response containing existing BuildTriggers.",
-      "type": "object"
+      "description": "Response containing existing BuildTriggers."
     },
     "BuiltImage": {
       "description": "BuiltImage describes an image built by the pipeline.",
@@ -915,86 +198,23 @@
       },
       "id": "BuiltImage"
     },
-    "RepoSource": {
-      "properties": {
-        "tagName": {
-          "description": "Name of the tag to build.",
-          "type": "string"
-        },
-        "commitSha": {
-          "description": "Explicit commit SHA to build.",
-          "type": "string"
-        },
-        "projectId": {
-          "description": "ID of the project that owns the repo. If omitted, the project ID requesting\nthe build is assumed.",
-          "type": "string"
-        },
-        "repoName": {
-          "description": "Name of the repo. If omitted, the name \"default\" is assumed.",
-          "type": "string"
-        },
-        "branchName": {
-          "description": "Name of the branch to build.",
-          "type": "string"
-        }
-      },
-      "id": "RepoSource",
-      "description": "RepoSource describes the location of the source in a Google Cloud Source\nRepository.",
-      "type": "object"
-    },
-    "Hash": {
-      "description": "Container message for hash values.",
-      "type": "object",
-      "properties": {
-        "value": {
-          "description": "The hash value.",
-          "format": "byte",
-          "type": "string"
-        },
-        "type": {
-          "enum": [
-            "NONE",
-            "SHA256"
-          ],
-          "description": "The type of hash that was performed.",
-          "type": "string",
-          "enumDescriptions": [
-            "No hash requested.",
-            "Use a sha256 hash."
-          ]
-        }
-      },
-      "id": "Hash"
-    },
     "BuildStep": {
       "description": "BuildStep describes a step to perform in the build pipeline.",
       "type": "object",
       "properties": {
-        "name": {
-          "description": "The name of the container image that will run this particular build step.\n\nIf the image is already available in the host's Docker daemon's cache, it\nwill be run directly. If not, the host will attempt to pull the image\nfirst, using the builder service account's credentials if necessary.\n\nThe Docker daemon's cache will already have the latest versions of all of\nthe officially supported build steps\n(https://github.com/GoogleCloudPlatform/cloud-builders). The Docker daemon\nwill also have cached many of the layers for some popular images, like\n\"ubuntu\", \"debian\", but they will be refreshed at the time you attempt to\nuse them.\n\nIf you built an image in a previous build step, it will be stored in the\nhost's Docker daemon's cache and is available to use as the name for a\nlater build step.",
-          "type": "string"
-        },
-        "entrypoint": {
-          "description": "Optional entrypoint to be used instead of the build step image's default\nIf unset, the image's default will be used.",
-          "type": "string"
-        },
-        "id": {
-          "description": "Optional unique identifier for this build step, used in wait_for to\nreference this build step as a dependency.",
-          "type": "string"
-        },
         "dir": {
           "description": "Working directory (relative to project source root) to use when running\nthis operation's container.",
           "type": "string"
         },
-        "waitFor": {
-          "description": "The ID(s) of the step(s) that this build step depends on.\nThis build step will not start until all the build steps in wait_for\nhave completed successfully. If wait_for is empty, this build step will\nstart when all previous build steps in the Build.Steps list have completed\nsuccessfully.",
+        "env": {
           "type": "array",
           "items": {
             "type": "string"
-          }
+          },
+          "description": "A list of environment variable definitions to be used when running a step.\n\nThe elements are of the form \"KEY=VALUE\" for the environment variable \"KEY\"\nbeing given the value \"VALUE\"."
         },
-        "env": {
-          "description": "A list of environment variable definitions to be used when running a step.\n\nThe elements are of the form \"KEY=VALUE\" for the environment variable \"KEY\"\nbeing given the value \"VALUE\".",
+        "waitFor": {
+          "description": "The ID(s) of the step(s) that this build step depends on.\nThis build step will not start until all the build steps in wait_for\nhave completed successfully. If wait_for is empty, this build step will\nstart when all previous build steps in the Build.Steps list have completed\nsuccessfully.",
           "type": "array",
           "items": {
             "type": "string"
@@ -1006,11 +226,75 @@
           "items": {
             "type": "string"
           }
+        },
+        "name": {
+          "description": "The name of the container image that will run this particular build step.\n\nIf the image is already available in the host's Docker daemon's cache, it\nwill be run directly. If not, the host will attempt to pull the image\nfirst, using the builder service account's credentials if necessary.\n\nThe Docker daemon's cache will already have the latest versions of all of\nthe officially supported build steps\n([https://github.com/GoogleCloudPlatform/cloud-builders](https://github.com/GoogleCloudPlatform/cloud-builders)).\nThe Docker daemon will also have cached many of the layers for some popular\nimages, like \"ubuntu\", \"debian\", but they will be refreshed at the time you\nattempt to use them.\n\nIf you built an image in a previous build step, it will be stored in the\nhost's Docker daemon's cache and is available to use as the name for a\nlater build step.",
+          "type": "string"
+        },
+        "entrypoint": {
+          "description": "Optional entrypoint to be used instead of the build step image's default\nIf unset, the image's default will be used.",
+          "type": "string"
+        },
+        "id": {
+          "description": "Optional unique identifier for this build step, used in wait_for to\nreference this build step as a dependency.",
+          "type": "string"
         }
       },
       "id": "BuildStep"
     },
+    "RepoSource": {
+      "description": "RepoSource describes the location of the source in a Google Cloud Source\nRepository.",
+      "type": "object",
+      "properties": {
+        "projectId": {
+          "description": "ID of the project that owns the repo. If omitted, the project ID requesting\nthe build is assumed.",
+          "type": "string"
+        },
+        "repoName": {
+          "description": "Name of the repo. If omitted, the name \"default\" is assumed.",
+          "type": "string"
+        },
+        "branchName": {
+          "description": "Name of the branch to build.",
+          "type": "string"
+        },
+        "tagName": {
+          "description": "Name of the tag to build.",
+          "type": "string"
+        },
+        "commitSha": {
+          "type": "string",
+          "description": "Explicit commit SHA to build."
+        }
+      },
+      "id": "RepoSource"
+    },
+    "Hash": {
+      "description": "Container message for hash values.",
+      "type": "object",
+      "properties": {
+        "type": {
+          "enumDescriptions": [
+            "No hash requested.",
+            "Use a sha256 hash."
+          ],
+          "enum": [
+            "NONE",
+            "SHA256"
+          ],
+          "description": "The type of hash that was performed.",
+          "type": "string"
+        },
+        "value": {
+          "description": "The hash value.",
+          "format": "byte",
+          "type": "string"
+        }
+      },
+      "id": "Hash"
+    },
     "FileHashes": {
+      "type": "object",
       "properties": {
         "fileHash": {
           "description": "Collection of file hashes.",
@@ -1021,8 +305,237 @@
         }
       },
       "id": "FileHashes",
-      "description": "Container message for hashes of byte content of files, used in\nSourceProvenance messages to verify integrity of source input to the build.",
+      "description": "Container message for hashes of byte content of files, used in\nSourceProvenance messages to verify integrity of source input to the build."
+    },
+    "Status": {
+      "description": "The `Status` type defines a logical error model that is suitable for different\nprogramming environments, including REST APIs and RPC APIs. It is used by\n[gRPC](https://github.com/grpc). The error model is designed to be:\n\n- Simple to use and understand for most users\n- Flexible enough to meet unexpected needs\n\n# Overview\n\nThe `Status` message contains three pieces of data: error code, error message,\nand error details. The error code should be an enum value of\ngoogle.rpc.Code, but it may accept additional error codes if needed.  The\nerror message should be a developer-facing English message that helps\ndevelopers *understand* and *resolve* the error. If a localized user-facing\nerror message is needed, put the localized message in the error details or\nlocalize it in the client. The optional error details may contain arbitrary\ninformation about the error. There is a predefined set of error detail types\nin the package `google.rpc` which can be used for common error conditions.\n\n# Language mapping\n\nThe `Status` message is the logical representation of the error model, but it\nis not necessarily the actual wire format. When the `Status` message is\nexposed in different client libraries and different wire protocols, it can be\nmapped differently. For example, it will likely be mapped to some exceptions\nin Java, but more likely mapped to some error codes in C.\n\n# Other uses\n\nThe error model and the `Status` message can be used in a variety of\nenvironments, either with or without APIs, to provide a\nconsistent developer experience across different environments.\n\nExample uses of this error model include:\n\n- Partial errors. If a service needs to return partial errors to the client,\n    it may embed the `Status` in the normal response to indicate the partial\n    errors.\n\n- Workflow errors. A typical workflow has multiple steps. Each step may\n    have a `Status` message for error reporting purpose.\n\n- Batch operations. If a client uses batch request and batch response, the\n    `Status` message should be used directly inside batch response, one for\n    each error sub-response.\n\n- Asynchronous operations. If an API call embeds asynchronous operation\n    results in its response, the status of those operations should be\n    represented directly using the `Status` message.\n\n- Logging. If some API errors are stored in logs, the message `Status` could\n    be used directly after any stripping needed for security/privacy reasons.",
+      "type": "object",
+      "properties": {
+        "code": {
+          "description": "The status code, which should be an enum value of google.rpc.Code.",
+          "format": "int32",
+          "type": "integer"
+        },
+        "message": {
+          "description": "A developer-facing error message, which should be in English. Any\nuser-facing error message should be localized and sent in the\ngoogle.rpc.Status.details field, or localized by the client.",
+          "type": "string"
+        },
+        "details": {
+          "description": "A list of messages that carry the error details.  There will be a\ncommon 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"
+            }
+          }
+        }
+      },
+      "id": "Status"
+    },
+    "Empty": {
+      "description": "A generic empty message that you can re-use to avoid defining duplicated\nempty messages in your APIs. A typical example is to use it as the request\nor the response type of an API method. For instance:\n\n    service Foo {\n      rpc Bar(google.protobuf.Empty) returns (google.protobuf.Empty);\n    }\n\nThe JSON representation for `Empty` is empty JSON object `{}`.",
+      "type": "object",
+      "properties": {},
+      "id": "Empty"
+    },
+    "BuildTrigger": {
+      "description": "Configuration for an automated build in response to source repository\nchanges.",
+      "type": "object",
+      "properties": {
+        "id": {
+          "description": "Unique identifier of the trigger.\n\n@OutputOnly",
+          "type": "string"
+        },
+        "build": {
+          "description": "Contents of the build template.",
+          "$ref": "Build"
+        },
+        "substitutions": {
+          "description": "Substitutions data for Build resource.",
+          "type": "object",
+          "additionalProperties": {
+            "type": "string"
+          }
+        },
+        "description": {
+          "description": "Human-readable description of this trigger.",
+          "type": "string"
+        },
+        "disabled": {
+          "description": "If true, the trigger will never result in a build.",
+          "type": "boolean"
+        },
+        "createTime": {
+          "description": "Time when the trigger was created.\n\n@OutputOnly",
+          "format": "google-datetime",
+          "type": "string"
+        },
+        "triggerTemplate": {
+          "$ref": "RepoSource",
+          "description": "Template describing the types of source changes to trigger a build.\n\nBranch and tag names in trigger templates are interpreted as regular\nexpressions. Any branch or tag change that matches that regular expression\nwill trigger a build."
+        },
+        "filename": {
+          "description": "Path, from the source root, to a file whose contents is used for the\ntemplate.",
+          "type": "string"
+        }
+      },
+      "id": "BuildTrigger"
+    },
+    "Build": {
+      "description": "A build resource in the Container Builder API.\n\nAt a high level, a Build describes where to find source code, how to build\nit (for example, the builder image to run on the source), and what tag to\napply to the built image when it is pushed to Google Container Registry.\n\nFields can include the following variables which will be expanded when the\nbuild is created:\n\n- $PROJECT_ID: the project ID of the build.\n- $BUILD_ID: the autogenerated ID of the build.\n- $REPO_NAME: the source repository name specified by RepoSource.\n- $BRANCH_NAME: the branch name specified by RepoSource.\n- $TAG_NAME: the tag name specified by RepoSource.\n- $REVISION_ID or $COMMIT_SHA: the commit SHA specified by RepoSource or\n  resolved from the specified branch or tag.",
+      "type": "object",
+      "properties": {
+        "options": {
+          "description": "Special options for this build.",
+          "$ref": "BuildOptions"
+        },
+        "source": {
+          "$ref": "Source",
+          "description": "Describes where to find the source files to build."
+        },
+        "timeout": {
+          "description": "Amount of time that this build should be allowed to run, to second\ngranularity. If this amount of time elapses, work on the build will cease\nand the build status will be TIMEOUT.\n\nDefault time is ten minutes.",
+          "format": "google-duration",
+          "type": "string"
+        },
+        "status": {
+          "enumDescriptions": [
+            "Status of the build is unknown.",
+            "Build is queued; work has not yet begun.",
+            "Build is being executed.",
+            "Build finished successfully.",
+            "Build failed to complete successfully.",
+            "Build failed due to an internal cause.",
+            "Build took longer than was allowed.",
+            "Build was canceled by a user."
+          ],
+          "enum": [
+            "STATUS_UNKNOWN",
+            "QUEUED",
+            "WORKING",
+            "SUCCESS",
+            "FAILURE",
+            "INTERNAL_ERROR",
+            "TIMEOUT",
+            "CANCELLED"
+          ],
+          "description": "Status of the build.\n@OutputOnly",
+          "type": "string"
+        },
+        "statusDetail": {
+          "description": "Customer-readable message about the current status.\n@OutputOnly",
+          "type": "string"
+        },
+        "results": {
+          "description": "Results of the build.\n@OutputOnly",
+          "$ref": "Results"
+        },
+        "logsBucket": {
+          "description": "Google Cloud Storage bucket where logs should be written (see\n[Bucket Name\nRequirements](https://cloud.google.com/storage/docs/bucket-naming#requirements)).\nLogs file names will be of the format `${logs_bucket}/log-${build_id}.txt`.",
+          "type": "string"
+        },
+        "steps": {
+          "type": "array",
+          "items": {
+            "$ref": "BuildStep"
+          },
+          "description": "Describes the operations to be performed on the workspace."
+        },
+        "buildTriggerId": {
+          "description": "The ID of the BuildTrigger that triggered this build, if it was\ntriggered automatically.\n@OutputOnly",
+          "type": "string"
+        },
+        "id": {
+          "description": "Unique identifier of the build.\n@OutputOnly",
+          "type": "string"
+        },
+        "startTime": {
+          "description": "Time at which execution of the build was started.\n@OutputOnly",
+          "format": "google-datetime",
+          "type": "string"
+        },
+        "substitutions": {
+          "description": "Substitutions data for Build resource.",
+          "type": "object",
+          "additionalProperties": {
+            "type": "string"
+          }
+        },
+        "createTime": {
+          "description": "Time at which the request to create the build was received.\n@OutputOnly",
+          "format": "google-datetime",
+          "type": "string"
+        },
+        "sourceProvenance": {
+          "$ref": "SourceProvenance",
+          "description": "A permanent fixed identifier for source.\n@OutputOnly"
+        },
+        "images": {
+          "description": "A list of images to be pushed upon the successful completion of all build\nsteps.\n\nThe images will be pushed using the builder service account's credentials.\n\nThe digests of the pushed images will be stored in the Build resource's\nresults field.\n\nIf any of the images fail to be pushed, the build is marked FAILURE.",
+          "type": "array",
+          "items": {
+            "type": "string"
+          }
+        },
+        "projectId": {
+          "description": "ID of the project.\n@OutputOnly.",
+          "type": "string"
+        },
+        "logUrl": {
+          "description": "URL to logs for this build in Google Cloud Logging.\n@OutputOnly",
+          "type": "string"
+        },
+        "finishTime": {
+          "description": "Time at which execution of the build was finished.\n\nThe difference between finish_time and start_time is the duration of the\nbuild's execution.\n@OutputOnly",
+          "format": "google-datetime",
+          "type": "string"
+        }
+      },
+      "id": "Build"
+    },
+    "CancelBuildRequest": {
+      "id": "CancelBuildRequest",
+      "description": "Request to cancel an ongoing build.",
+      "type": "object",
+      "properties": {}
+    },
+    "ListBuildsResponse": {
+      "properties": {
+        "nextPageToken": {
+          "description": "Token to receive the next page of results.",
+          "type": "string"
+        },
+        "builds": {
+          "description": "Builds will be sorted by create_time, descending.",
+          "type": "array",
+          "items": {
+            "$ref": "Build"
+          }
+        }
+      },
+      "id": "ListBuildsResponse",
+      "description": "Response including listed builds.",
       "type": "object"
+    },
+    "ListOperationsResponse": {
+      "description": "The response message for Operations.ListOperations.",
+      "type": "object",
+      "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"
     }
   },
   "protocol": "rest",
@@ -1043,5 +556,492 @@
   "rootUrl": "https://cloudbuild.googleapis.com/",
   "ownerDomain": "google.com",
   "name": "cloudbuild",
-  "batchPath": "batch"
+  "batchPath": "batch",
+  "title": "Google Cloud Container Builder API",
+  "ownerName": "Google",
+  "resources": {
+    "operations": {
+      "methods": {
+        "cancel": {
+          "response": {
+            "$ref": "Empty"
+          },
+          "parameterOrder": [
+            "name"
+          ],
+          "httpMethod": "POST",
+          "parameters": {
+            "name": {
+              "description": "The name of the operation resource to be cancelled.",
+              "required": true,
+              "type": "string",
+              "pattern": "^operations/.+$",
+              "location": "path"
+            }
+          },
+          "scopes": [
+            "https://www.googleapis.com/auth/cloud-platform"
+          ],
+          "flatPath": "v1/operations/{operationsId}:cancel",
+          "path": "v1/{+name}:cancel",
+          "id": "cloudbuild.operations.cancel",
+          "request": {
+            "$ref": "CancelOperationRequest"
+          },
+          "description": "Starts asynchronous cancellation on a long-running operation.  The server\nmakes a best effort to cancel the operation, but success is not\nguaranteed.  If the server doesn't support this method, it returns\n`google.rpc.Code.UNIMPLEMENTED`.  Clients can use\nOperations.GetOperation or\nother methods to check whether the cancellation succeeded or whether the\noperation completed despite cancellation. On successful cancellation,\nthe operation is not deleted; instead, it becomes an operation with\nan Operation.error value with a google.rpc.Status.code of 1,\ncorresponding to `Code.CANCELLED`."
+        },
+        "list": {
+          "description": "Lists operations that match the specified filter in the request. If the\nserver doesn't support this method, it returns `UNIMPLEMENTED`.\n\nNOTE: the `name` binding below allows API services to override the binding\nto use different resource name schemes, such as `users/*/operations`.",
+          "httpMethod": "GET",
+          "parameterOrder": [
+            "name"
+          ],
+          "response": {
+            "$ref": "ListOperationsResponse"
+          },
+          "scopes": [
+            "https://www.googleapis.com/auth/cloud-platform"
+          ],
+          "parameters": {
+            "filter": {
+              "description": "The standard list filter.",
+              "type": "string",
+              "location": "query"
+            },
+            "name": {
+              "pattern": "^operations$",
+              "location": "path",
+              "description": "The name of the operation collection.",
+              "required": true,
+              "type": "string"
+            },
+            "pageToken": {
+              "location": "query",
+              "description": "The standard list page token.",
+              "type": "string"
+            },
+            "pageSize": {
+              "type": "integer",
+              "location": "query",
+              "description": "The standard list page size.",
+              "format": "int32"
+            }
+          },
+          "flatPath": "v1/operations",
+          "id": "cloudbuild.operations.list",
+          "path": "v1/{+name}"
+        },
+        "get": {
+          "id": "cloudbuild.operations.get",
+          "path": "v1/{+name}",
+          "description": "Gets the latest state of a long-running operation.  Clients can use this\nmethod to poll the operation result at intervals as recommended by the API\nservice.",
+          "httpMethod": "GET",
+          "parameterOrder": [
+            "name"
+          ],
+          "response": {
+            "$ref": "Operation"
+          },
+          "parameters": {
+            "name": {
+              "location": "path",
+              "description": "The name of the operation resource.",
+              "required": true,
+              "type": "string",
+              "pattern": "^operations/.+$"
+            }
+          },
+          "scopes": [
+            "https://www.googleapis.com/auth/cloud-platform"
+          ],
+          "flatPath": "v1/operations/{operationsId}"
+        }
+      }
+    },
+    "projects": {
+      "resources": {
+        "triggers": {
+          "methods": {
+            "get": {
+              "description": "Gets information about a BuildTrigger.\n\nThis API is experimental.",
+              "response": {
+                "$ref": "BuildTrigger"
+              },
+              "parameterOrder": [
+                "projectId",
+                "triggerId"
+              ],
+              "httpMethod": "GET",
+              "scopes": [
+                "https://www.googleapis.com/auth/cloud-platform"
+              ],
+              "parameters": {
+                "triggerId": {
+                  "description": "ID of the BuildTrigger to get.",
+                  "required": true,
+                  "type": "string",
+                  "location": "path"
+                },
+                "projectId": {
+                  "description": "ID of the project that owns the trigger.",
+                  "required": true,
+                  "type": "string",
+                  "location": "path"
+                }
+              },
+              "flatPath": "v1/projects/{projectId}/triggers/{triggerId}",
+              "path": "v1/projects/{projectId}/triggers/{triggerId}",
+              "id": "cloudbuild.projects.triggers.get"
+            },
+            "list": {
+              "description": "Lists existing BuildTrigger.\n\nThis API is experimental.",
+              "response": {
+                "$ref": "ListBuildTriggersResponse"
+              },
+              "parameterOrder": [
+                "projectId"
+              ],
+              "httpMethod": "GET",
+              "parameters": {
+                "projectId": {
+                  "location": "path",
+                  "description": "ID of the project for which to list BuildTriggers.",
+                  "required": true,
+                  "type": "string"
+                }
+              },
+              "scopes": [
+                "https://www.googleapis.com/auth/cloud-platform"
+              ],
+              "flatPath": "v1/projects/{projectId}/triggers",
+              "path": "v1/projects/{projectId}/triggers",
+              "id": "cloudbuild.projects.triggers.list"
+            },
+            "patch": {
+              "id": "cloudbuild.projects.triggers.patch",
+              "path": "v1/projects/{projectId}/triggers/{triggerId}",
+              "request": {
+                "$ref": "BuildTrigger"
+              },
+              "description": "Updates an BuildTrigger by its project ID and trigger ID.\n\nThis API is experimental.",
+              "httpMethod": "PATCH",
+              "parameterOrder": [
+                "projectId",
+                "triggerId"
+              ],
+              "response": {
+                "$ref": "BuildTrigger"
+              },
+              "parameters": {
+                "triggerId": {
+                  "description": "ID of the BuildTrigger to update.",
+                  "required": true,
+                  "type": "string",
+                  "location": "path"
+                },
+                "projectId": {
+                  "description": "ID of the project that owns the trigger.",
+                  "required": true,
+                  "type": "string",
+                  "location": "path"
+                }
+              },
+              "scopes": [
+                "https://www.googleapis.com/auth/cloud-platform"
+              ],
+              "flatPath": "v1/projects/{projectId}/triggers/{triggerId}"
+            },
+            "create": {
+              "description": "Creates a new BuildTrigger.\n\nThis API is experimental.",
+              "request": {
+                "$ref": "BuildTrigger"
+              },
+              "httpMethod": "POST",
+              "parameterOrder": [
+                "projectId"
+              ],
+              "response": {
+                "$ref": "BuildTrigger"
+              },
+              "scopes": [
+                "https://www.googleapis.com/auth/cloud-platform"
+              ],
+              "parameters": {
+                "projectId": {
+                  "location": "path",
+                  "description": "ID of the project for which to configure automatic builds.",
+                  "required": true,
+                  "type": "string"
+                }
+              },
+              "flatPath": "v1/projects/{projectId}/triggers",
+              "id": "cloudbuild.projects.triggers.create",
+              "path": "v1/projects/{projectId}/triggers"
+            },
+            "delete": {
+              "path": "v1/projects/{projectId}/triggers/{triggerId}",
+              "id": "cloudbuild.projects.triggers.delete",
+              "description": "Deletes an BuildTrigger by its project ID and trigger ID.\n\nThis API is experimental.",
+              "response": {
+                "$ref": "Empty"
+              },
+              "parameterOrder": [
+                "projectId",
+                "triggerId"
+              ],
+              "httpMethod": "DELETE",
+              "scopes": [
+                "https://www.googleapis.com/auth/cloud-platform"
+              ],
+              "parameters": {
+                "triggerId": {
+                  "description": "ID of the BuildTrigger to delete.",
+                  "required": true,
+                  "type": "string",
+                  "location": "path"
+                },
+                "projectId": {
+                  "location": "path",
+                  "description": "ID of the project that owns the trigger.",
+                  "required": true,
+                  "type": "string"
+                }
+              },
+              "flatPath": "v1/projects/{projectId}/triggers/{triggerId}"
+            }
+          }
+        },
+        "builds": {
+          "methods": {
+            "cancel": {
+              "httpMethod": "POST",
+              "parameterOrder": [
+                "projectId",
+                "id"
+              ],
+              "response": {
+                "$ref": "Build"
+              },
+              "parameters": {
+                "projectId": {
+                  "description": "ID of the project.",
+                  "required": true,
+                  "type": "string",
+                  "location": "path"
+                },
+                "id": {
+                  "location": "path",
+                  "description": "ID of the build.",
+                  "required": true,
+                  "type": "string"
+                }
+              },
+              "scopes": [
+                "https://www.googleapis.com/auth/cloud-platform"
+              ],
+              "flatPath": "v1/projects/{projectId}/builds/{id}:cancel",
+              "id": "cloudbuild.projects.builds.cancel",
+              "path": "v1/projects/{projectId}/builds/{id}:cancel",
+              "request": {
+                "$ref": "CancelBuildRequest"
+              },
+              "description": "Cancels a requested build in progress."
+            },
+            "get": {
+              "description": "Returns information about a previously requested build.\n\nThe Build that is returned includes its status (e.g., success or failure,\nor in-progress), and timing information.",
+              "response": {
+                "$ref": "Build"
+              },
+              "parameterOrder": [
+                "projectId",
+                "id"
+              ],
+              "httpMethod": "GET",
+              "scopes": [
+                "https://www.googleapis.com/auth/cloud-platform"
+              ],
+              "parameters": {
+                "projectId": {
+                  "location": "path",
+                  "description": "ID of the project.",
+                  "required": true,
+                  "type": "string"
+                },
+                "id": {
+                  "location": "path",
+                  "description": "ID of the build.",
+                  "required": true,
+                  "type": "string"
+                }
+              },
+              "flatPath": "v1/projects/{projectId}/builds/{id}",
+              "path": "v1/projects/{projectId}/builds/{id}",
+              "id": "cloudbuild.projects.builds.get"
+            },
+            "list": {
+              "httpMethod": "GET",
+              "parameterOrder": [
+                "projectId"
+              ],
+              "response": {
+                "$ref": "ListBuildsResponse"
+              },
+              "scopes": [
+                "https://www.googleapis.com/auth/cloud-platform"
+              ],
+              "parameters": {
+                "filter": {
+                  "description": "The raw filter text to constrain the results.",
+                  "type": "string",
+                  "location": "query"
+                },
+                "pageToken": {
+                  "location": "query",
+                  "description": "Token to provide to skip to a particular spot in the list.",
+                  "type": "string"
+                },
+                "pageSize": {
+                  "location": "query",
+                  "description": "Number of results to return in the list.",
+                  "format": "int32",
+                  "type": "integer"
+                },
+                "projectId": {
+                  "location": "path",
+                  "description": "ID of the project.",
+                  "required": true,
+                  "type": "string"
+                }
+              },
+              "flatPath": "v1/projects/{projectId}/builds",
+              "id": "cloudbuild.projects.builds.list",
+              "path": "v1/projects/{projectId}/builds",
+              "description": "Lists previously requested builds.\n\nPreviously requested builds may still be in-progress, or may have finished\nsuccessfully or unsuccessfully."
+            },
+            "create": {
+              "flatPath": "v1/projects/{projectId}/builds",
+              "path": "v1/projects/{projectId}/builds",
+              "id": "cloudbuild.projects.builds.create",
+              "request": {
+                "$ref": "Build"
+              },
+              "description": "Starts a build with the specified configuration.\n\nThe long-running Operation returned by this method will include the ID of\nthe build, which can be passed to GetBuild to determine its status (e.g.,\nsuccess or failure).",
+              "response": {
+                "$ref": "Operation"
+              },
+              "parameterOrder": [
+                "projectId"
+              ],
+              "httpMethod": "POST",
+              "parameters": {
+                "projectId": {
+                  "description": "ID of the project.",
+                  "required": true,
+                  "type": "string",
+                  "location": "path"
+                }
+              },
+              "scopes": [
+                "https://www.googleapis.com/auth/cloud-platform"
+              ]
+            }
+          }
+        }
+      }
+    }
+  },
+  "parameters": {
+    "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"
+    },
+    "access_token": {
+      "location": "query",
+      "description": "OAuth access token.",
+      "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."
+    },
+    "pp": {
+      "type": "boolean",
+      "default": "true",
+      "location": "query",
+      "description": "Pretty-print response."
+    },
+    "oauth_token": {
+      "description": "OAuth 2.0 token for the current user.",
+      "type": "string",
+      "location": "query"
+    },
+    "bearer_token": {
+      "type": "string",
+      "location": "query",
+      "description": "OAuth bearer token."
+    },
+    "upload_protocol": {
+      "location": "query",
+      "description": "Upload protocol for media (e.g. \"raw\", \"multipart\").",
+      "type": "string"
+    },
+    "prettyPrint": {
+      "location": "query",
+      "description": "Returns response with indentations and line breaks.",
+      "type": "boolean",
+      "default": "true"
+    },
+    "uploadType": {
+      "type": "string",
+      "location": "query",
+      "description": "Legacy upload protocol for media (e.g. \"media\", \"multipart\")."
+    },
+    "fields": {
+      "location": "query",
+      "description": "Selector specifying which fields to include in a partial response.",
+      "type": "string"
+    },
+    "$.xgafv": {
+      "enumDescriptions": [
+        "v1 error format",
+        "v2 error format"
+      ],
+      "location": "query",
+      "enum": [
+        "1",
+        "2"
+      ],
+      "description": "V1 error format.",
+      "type": "string"
+    },
+    "callback": {
+      "description": "JSONP",
+      "type": "string",
+      "location": "query"
+    },
+    "alt": {
+      "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",
+      "description": "Data format for response.",
+      "default": "json",
+      "enum": [
+        "json",
+        "media",
+        "proto"
+      ]
+    }
+  },
+  "version": "v1",
+  "baseUrl": "https://cloudbuild.googleapis.com/",
+  "kind": "discovery#restDescription",
+  "description": "Builds container images in the cloud.",
+  "servicePath": "",
+  "basePath": ""
 }
diff --git a/cloudbuild/v1/cloudbuild-gen.go b/cloudbuild/v1/cloudbuild-gen.go
index 32541a0..c2657cf 100644
--- a/cloudbuild/v1/cloudbuild-gen.go
+++ b/cloudbuild/v1/cloudbuild-gen.go
@@ -62,10 +62,9 @@
 }
 
 type Service struct {
-	client                    *http.Client
-	BasePath                  string // API endpoint base URL
-	UserAgent                 string // optional additional User-Agent fragment
-	GoogleClientHeaderElement string // client header fragment, for Google use only
+	client    *http.Client
+	BasePath  string // API endpoint base URL
+	UserAgent string // optional additional User-Agent fragment
 
 	Operations *OperationsService
 
@@ -79,10 +78,6 @@
 	return googleapi.UserAgent + " " + s.UserAgent
 }
 
-func (s *Service) clientHeader() string {
-	return gensupport.GoogleClientHeader("20170210", s.GoogleClientHeaderElement)
-}
-
 func NewOperationsService(s *Service) *OperationsService {
 	rs := &OperationsService{s: s}
 	return rs
@@ -407,13 +402,13 @@
 	// all of
 	// the officially supported build
 	// steps
-	// (https://github.com/GoogleCloudPlatform/cloud-builders). The Docker
-	// daemon
-	// will also have cached many of the layers for some popular images,
-	// like
-	// "ubuntu", "debian", but they will be refreshed at the time you
-	// attempt to
-	// use them.
+	// ([https://github.com/GoogleCloudPlatform/cloud-builders](https:/
+	// /github.com/GoogleCloudPlatform/cloud-builders)).
+	// The Docker daemon will also have cached many of the layers for some
+	// popular
+	// images, like "ubuntu", "debian", but they will be refreshed at the
+	// time you
+	// attempt to use them.
 	//
 	// If you built an image in a previous build step, it will be stored in
 	// the
@@ -1233,7 +1228,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	var body io.Reader = nil
 	body, err := googleapi.WithoutDataWrapper.JSONReader(c.canceloperationrequest)
 	if err != nil {
@@ -1382,7 +1376,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	if c.ifNoneMatch_ != "" {
 		reqHeaders.Set("If-None-Match", c.ifNoneMatch_)
 	}
@@ -1550,7 +1543,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	if c.ifNoneMatch_ != "" {
 		reqHeaders.Set("If-None-Match", c.ifNoneMatch_)
 	}
@@ -1720,7 +1712,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	var body io.Reader = nil
 	body, err := googleapi.WithoutDataWrapper.JSONReader(c.cancelbuildrequest)
 	if err != nil {
@@ -1869,7 +1860,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	var body io.Reader = nil
 	body, err := googleapi.WithoutDataWrapper.JSONReader(c.build)
 	if err != nil {
@@ -2019,7 +2009,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	if c.ifNoneMatch_ != "" {
 		reqHeaders.Set("If-None-Match", c.ifNoneMatch_)
 	}
@@ -2191,7 +2180,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	if c.ifNoneMatch_ != "" {
 		reqHeaders.Set("If-None-Match", c.ifNoneMatch_)
 	}
@@ -2360,7 +2348,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	var body io.Reader = nil
 	body, err := googleapi.WithoutDataWrapper.JSONReader(c.buildtrigger)
 	if err != nil {
@@ -2498,7 +2485,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	var body io.Reader = nil
 	c.urlParams_.Set("alt", alt)
 	urls := googleapi.ResolveRelative(c.s.BasePath, "v1/projects/{projectId}/triggers/{triggerId}")
@@ -2646,7 +2632,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	if c.ifNoneMatch_ != "" {
 		reqHeaders.Set("If-None-Match", c.ifNoneMatch_)
 	}
@@ -2795,7 +2780,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	if c.ifNoneMatch_ != "" {
 		reqHeaders.Set("If-None-Match", c.ifNoneMatch_)
 	}
@@ -2930,7 +2914,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	var body io.Reader = nil
 	body, err := googleapi.WithoutDataWrapper.JSONReader(c.buildtrigger)
 	if err != nil {
diff --git a/clouddebugger/v2/clouddebugger-api.json b/clouddebugger/v2/clouddebugger-api.json
index f0cf9a2..49f9001 100644
--- a/clouddebugger/v2/clouddebugger-api.json
+++ b/clouddebugger/v2/clouddebugger-api.json
@@ -1,281 +1,15 @@
 {
-  "revision": "20170214",
-  "documentationLink": "http://cloud.google.com/debugger",
-  "id": "clouddebugger:v2",
-  "discoveryVersion": "v1",
   "version_module": "True",
   "schemas": {
-    "CloudRepoSourceContext": {
-      "description": "A CloudRepoSourceContext denotes a particular revision in a cloud\nrepo (a repo hosted by the Google Cloud Platform).",
-      "type": "object",
-      "properties": {
-        "aliasContext": {
-          "description": "An alias, which may be a branch or tag.",
-          "$ref": "AliasContext"
-        },
-        "revisionId": {
-          "description": "A revision ID.",
-          "type": "string"
-        },
-        "aliasName": {
-          "description": "The name of an alias (branch, tag, etc.).",
-          "type": "string"
-        },
-        "repoId": {
-          "description": "The ID of the repo.",
-          "$ref": "RepoId"
-        }
-      },
-      "id": "CloudRepoSourceContext"
-    },
-    "RegisterDebuggeeResponse": {
-      "properties": {
-        "debuggee": {
-          "$ref": "Debuggee",
-          "description": "Debuggee resource.\nThe field `id` is guranteed to be set (in addition to the echoed fields)."
-        }
-      },
-      "id": "RegisterDebuggeeResponse",
-      "description": "Response for registering a debuggee.",
-      "type": "object"
-    },
-    "RegisterDebuggeeRequest": {
-      "description": "Request to register a debuggee.",
-      "type": "object",
-      "properties": {
-        "debuggee": {
-          "description": "Debuggee information to register.\nThe fields `project`, `uniquifier`, `description` and `agent_version`\nof the debuggee must be set.",
-          "$ref": "Debuggee"
-        }
-      },
-      "id": "RegisterDebuggeeRequest"
-    },
-    "GetBreakpointResponse": {
-      "properties": {
-        "breakpoint": {
-          "description": "Complete breakpoint state.\nThe fields `id` and `location` are guaranteed to be set.",
-          "$ref": "Breakpoint"
-        }
-      },
-      "id": "GetBreakpointResponse",
-      "description": "Response for getting breakpoint information.",
-      "type": "object"
-    },
-    "StatusMessage": {
-      "properties": {
-        "isError": {
-          "description": "Distinguishes errors from informational messages.",
-          "type": "boolean"
-        },
-        "description": {
-          "description": "Status message text.",
-          "$ref": "FormatMessage"
-        },
-        "refersTo": {
-          "enumDescriptions": [
-            "Status doesn't refer to any particular input.",
-            "Status applies to the breakpoint and is related to its location.",
-            "Status applies to the breakpoint and is related to its condition.",
-            "Status applies to the breakpoint and is related to its expressions.",
-            "Status applies to the breakpoint and is related to its age.",
-            "Status applies to the entire variable.",
-            "Status applies to variable value (variable name is valid)."
-          ],
-          "enum": [
-            "UNSPECIFIED",
-            "BREAKPOINT_SOURCE_LOCATION",
-            "BREAKPOINT_CONDITION",
-            "BREAKPOINT_EXPRESSION",
-            "BREAKPOINT_AGE",
-            "VARIABLE_NAME",
-            "VARIABLE_VALUE"
-          ],
-          "description": "Reference to which the message applies.",
-          "type": "string"
-        }
-      },
-      "id": "StatusMessage",
-      "description": "Represents a contextual status message.\nThe message can indicate an error or informational status, and refer to\nspecific parts of the containing object.\nFor example, the `Breakpoint.status` field can indicate an error referring\nto the `BREAKPOINT_SOURCE_LOCATION` with the message `Location not found`.",
-      "type": "object"
-    },
-    "GitSourceContext": {
-      "description": "A GitSourceContext denotes a particular revision in a third party Git\nrepository (e.g. GitHub).",
-      "type": "object",
-      "properties": {
-        "revisionId": {
-          "description": "Git commit hash.\nrequired.",
-          "type": "string"
-        },
-        "url": {
-          "description": "Git repository URL.",
-          "type": "string"
-        }
-      },
-      "id": "GitSourceContext"
-    },
-    "Variable": {
-      "description": "Represents a variable or an argument possibly of a compound object type.\nNote how the following variables are represented:\n\n1) A simple variable:\n\n    int x = 5\n\n    { name: \"x\", value: \"5\", type: \"int\" }  // Captured variable\n\n2) A compound object:\n\n    struct T {\n        int m1;\n        int m2;\n    };\n    T x = { 3, 7 };\n\n    {  // Captured variable\n        name: \"x\",\n        type: \"T\",\n        members { name: \"m1\", value: \"3\", type: \"int\" },\n        members { name: \"m2\", value: \"7\", type: \"int\" }\n    }\n\n3) A pointer where the pointee was captured:\n\n    T x = { 3, 7 };\n    T* p = &x;\n\n    {   // Captured variable\n        name: \"p\",\n        type: \"T*\",\n        value: \"0x00500500\",\n        members { name: \"m1\", value: \"3\", type: \"int\" },\n        members { name: \"m2\", value: \"7\", type: \"int\" }\n    }\n\n4) A pointer where the pointee was not captured:\n\n    T* p = new T;\n\n    {   // Captured variable\n        name: \"p\",\n        type: \"T*\",\n        value: \"0x00400400\"\n        status { is_error: true, description { format: \"unavailable\" } }\n    }\n\nThe status should describe the reason for the missing value,\nsuch as `\u003coptimized out\u003e`, `\u003cinaccessible\u003e`, `\u003cpointers limit reached\u003e`.\n\nNote that a null pointer should not have members.\n\n5) An unnamed value:\n\n    int* p = new int(7);\n\n    {   // Captured variable\n        name: \"p\",\n        value: \"0x00500500\",\n        type: \"int*\",\n        members { value: \"7\", type: \"int\" } }\n\n6) An unnamed pointer where the pointee was not captured:\n\n    int* p = new int(7);\n    int** pp = &p;\n\n    {  // Captured variable\n        name: \"pp\",\n        value: \"0x00500500\",\n        type: \"int**\",\n        members {\n            value: \"0x00400400\",\n            type: \"int*\"\n            status {\n                is_error: true,\n                description: { format: \"unavailable\" } }\n            }\n        }\n    }\n\nTo optimize computation, memory and network traffic, variables that\nrepeat in the output multiple times can be stored once in a shared\nvariable table and be referenced using the `var_table_index` field.  The\nvariables stored in the shared table are nameless and are essentially\na partition of the complete variable. To reconstruct the complete\nvariable, merge the referencing variable with the referenced variable.\n\nWhen using the shared variable table, the following variables:\n\n    T x = { 3, 7 };\n    T* p = &x;\n    T& r = x;\n\n    { name: \"x\", var_table_index: 3, type: \"T\" }  // Captured variables\n    { name: \"p\", value \"0x00500500\", type=\"T*\", var_table_index: 3 }\n    { name: \"r\", type=\"T&\", var_table_index: 3 }\n\n    {  // Shared variable table entry #3:\n        members { name: \"m1\", value: \"3\", type: \"int\" },\n        members { name: \"m2\", value: \"7\", type: \"int\" }\n    }\n\nNote that the pointer address is stored with the referencing variable\nand not with the referenced variable. This allows the referenced variable\nto be shared between pointers and references.\n\nThe type field is optional. The debugger agent may or may not support it.",
-      "type": "object",
-      "properties": {
-        "members": {
-          "description": "Members contained or pointed to by the variable.",
-          "type": "array",
-          "items": {
-            "$ref": "Variable"
-          }
-        },
-        "status": {
-          "$ref": "StatusMessage",
-          "description": "Status associated with the variable. This field will usually stay\nunset. A status of a single variable only applies to that variable or\nexpression. The rest of breakpoint data still remains valid. Variables\nmight be reported in error state even when breakpoint is not in final\nstate.\n\nThe message may refer to variable name with `refers_to` set to\n`VARIABLE_NAME`. Alternatively `refers_to` will be set to `VARIABLE_VALUE`.\nIn either case variable value and members will be unset.\n\nExample of error message applied to name: `Invalid expression syntax`.\n\nExample of information message applied to value: `Not captured`.\n\nExamples of error message applied to value:\n\n*   `Malformed string`,\n*   `Field f not found in class C`\n*   `Null pointer dereference`"
-        },
-        "name": {
-          "description": "Name of the variable, if any.",
-          "type": "string"
-        },
-        "type": {
-          "description": "Variable type (e.g. `MyClass`). If the variable is split with\n`var_table_index`, `type` goes next to `value`. The interpretation of\na type is agent specific. It is recommended to include the dynamic type\nrather than a static type of an object.",
-          "type": "string"
-        },
-        "varTableIndex": {
-          "description": "Reference to a variable in the shared variable table. More than\none variable can reference the same variable in the table. The\n`var_table_index` field is an index into `variable_table` in Breakpoint.",
-          "format": "int32",
-          "type": "integer"
-        },
-        "value": {
-          "description": "Simple value of the variable.",
-          "type": "string"
-        }
-      },
-      "id": "Variable"
-    },
-    "StackFrame": {
-      "properties": {
-        "function": {
-          "description": "Demangled function name at the call site.",
-          "type": "string"
-        },
-        "arguments": {
-          "description": "Set of arguments passed to this function.\nNote that this might not be populated for all stack frames.",
-          "type": "array",
-          "items": {
-            "$ref": "Variable"
-          }
-        },
-        "locals": {
-          "description": "Set of local variables at the stack frame location.\nNote that this might not be populated for all stack frames.",
-          "type": "array",
-          "items": {
-            "$ref": "Variable"
-          }
-        },
-        "location": {
-          "description": "Source location of the call site.",
-          "$ref": "SourceLocation"
-        }
-      },
-      "id": "StackFrame",
-      "description": "Represents a stack frame context.",
-      "type": "object"
-    },
-    "RepoId": {
-      "properties": {
-        "uid": {
-          "description": "A server-assigned, globally unique identifier.",
-          "type": "string"
-        },
-        "projectRepoId": {
-          "description": "A combination of a project ID and a repo name.",
-          "$ref": "ProjectRepoId"
-        }
-      },
-      "id": "RepoId",
-      "description": "A unique identifier for a cloud repo.",
-      "type": "object"
-    },
-    "FormatMessage": {
-      "description": "Represents a message with parameters.",
-      "type": "object",
-      "properties": {
-        "parameters": {
-          "description": "Optional parameters to be embedded into the message.",
-          "type": "array",
-          "items": {
-            "type": "string"
-          }
-        },
-        "format": {
-          "description": "Format template for the message. The `format` uses placeholders `$0`,\n`$1`, etc. to reference parameters. `$$` can be used to denote the `$`\ncharacter.\n\nExamples:\n\n*   `Failed to load '$0' which helps debug $1 the first time it\n    is loaded.  Again, $0 is very important.`\n*   `Please pay $$10 to use $0 instead of $1.`",
-          "type": "string"
-        }
-      },
-      "id": "FormatMessage"
-    },
-    "ExtendedSourceContext": {
-      "properties": {
-        "context": {
-          "$ref": "SourceContext",
-          "description": "Any source context."
-        },
-        "labels": {
-          "additionalProperties": {
-            "type": "string"
-          },
-          "description": "Labels with user defined metadata.",
-          "type": "object"
-        }
-      },
-      "id": "ExtendedSourceContext",
-      "description": "An ExtendedSourceContext is a SourceContext combined with additional\ndetails describing the context.",
-      "type": "object"
-    },
-    "AliasContext": {
-      "description": "An alias to a repo revision.",
-      "type": "object",
-      "properties": {
-        "name": {
-          "description": "The alias name.",
-          "type": "string"
-        },
-        "kind": {
-          "enumDescriptions": [
-            "Do not use.",
-            "Git tag",
-            "Git branch",
-            "OTHER is used to specify non-standard aliases, those not of the kinds\nabove. For example, if a Git repo has a ref named \"refs/foo/bar\", it\nis considered to be of kind OTHER."
-          ],
-          "enum": [
-            "ANY",
-            "FIXED",
-            "MOVABLE",
-            "OTHER"
-          ],
-          "description": "The alias kind.",
-          "type": "string"
-        }
-      },
-      "id": "AliasContext"
-    },
-    "ListDebuggeesResponse": {
-      "properties": {
-        "debuggees": {
-          "description": "List of debuggees accessible to the calling user.\nNote that the `description` field is the only human readable field\nthat should be displayed to the user.\nThe fields `debuggee.id` and  `description` fields are guaranteed to be\nset on each debuggee.",
-          "type": "array",
-          "items": {
-            "$ref": "Debuggee"
-          }
-        }
-      },
-      "id": "ListDebuggeesResponse",
-      "description": "Response for listing debuggees.",
-      "type": "object"
-    },
     "Empty": {
-      "properties": {},
-      "id": "Empty",
       "description": "A generic empty message that you can re-use to avoid defining duplicated\nempty messages in your APIs. A typical example is to use it as the request\nor the response type of an API method. For instance:\n\n    service Foo {\n      rpc Bar(google.protobuf.Empty) returns (google.protobuf.Empty);\n    }\n\nThe JSON representation for `Empty` is empty JSON object `{}`.",
-      "type": "object"
+      "type": "object",
+      "properties": {},
+      "id": "Empty"
     },
     "SourceLocation": {
+      "description": "Represents a location in the source code.",
+      "type": "object",
       "properties": {
         "path": {
           "description": "Path to the source file within the source context of the target binary.",
@@ -287,28 +21,12 @@
           "type": "integer"
         }
       },
-      "id": "SourceLocation",
-      "description": "Represents a location in the source code.",
-      "type": "object"
+      "id": "SourceLocation"
     },
     "Debuggee": {
+      "description": "Represents the application to debug. The application may include one or more\nreplicated processes executing the same code. Each of these processes is\nattached with a debugger agent, carrying out the debugging commands.\nThe agents attached to the same debuggee are identified by using exactly the\nsame field values when registering.",
+      "type": "object",
       "properties": {
-        "project": {
-          "description": "Project the debuggee is associated with.\nUse the project number when registering a Google Cloud Platform project.",
-          "type": "string"
-        },
-        "id": {
-          "description": "Unique identifier for the debuggee generated by the controller service.",
-          "type": "string"
-        },
-        "agentVersion": {
-          "description": "Version ID of the agent release. The version ID is structured as\nfollowing: `domain/type/vmajor.minor` (for example\n`google.com/gcp-java/v1.1`).",
-          "type": "string"
-        },
-        "isDisabled": {
-          "description": "If set to `true`, indicates that the agent should disable itself and\ndetach from the debuggee.",
-          "type": "boolean"
-        },
         "description": {
           "description": "Human readable description of the debuggee.\nIncluding a human-readable project name, environment name and version\ninformation is recommended.",
           "type": "string"
@@ -332,11 +50,11 @@
           }
         },
         "labels": {
+          "description": "A set of custom debuggee properties, populated by the agent, to be\ndisplayed to the user.",
+          "type": "object",
           "additionalProperties": {
             "type": "string"
-          },
-          "description": "A set of custom debuggee properties, populated by the agent, to be\ndisplayed to the user.",
-          "type": "object"
+          }
         },
         "status": {
           "description": "Human readable message to be displayed to the user about this debuggee.\nAbsence of this field indicates no status. The message can be either\ninformational or an error status.",
@@ -345,11 +63,47 @@
         "isInactive": {
           "description": "If set to `true`, indicates that the debuggee is considered as inactive by\nthe Controller service.",
           "type": "boolean"
+        },
+        "project": {
+          "description": "Project the debuggee is associated with.\nUse the project number when registering a Google Cloud Platform project.",
+          "type": "string"
+        },
+        "id": {
+          "description": "Unique identifier for the debuggee generated by the controller service.",
+          "type": "string"
+        },
+        "agentVersion": {
+          "description": "Version ID of the agent release. The version ID is structured as\nfollowing: `domain/type/vmajor.minor` (for example\n`google.com/gcp-java/v1.1`).",
+          "type": "string"
+        },
+        "isDisabled": {
+          "description": "If set to `true`, indicates that the agent should disable itself and\ndetach from the debuggee.",
+          "type": "boolean"
         }
       },
-      "id": "Debuggee",
-      "description": "Represents the application to debug. The application may include one or more\nreplicated processes executing the same code. Each of these processes is\nattached with a debugger agent, carrying out the debugging commands.\nThe agents attached to the same debuggee are identified by using exactly the\nsame field values when registering.",
-      "type": "object"
+      "id": "Debuggee"
+    },
+    "ListActiveBreakpointsResponse": {
+      "description": "Response for listing active breakpoints.",
+      "type": "object",
+      "properties": {
+        "waitExpired": {
+          "description": "The `wait_expired` field is set to true by the server when the\nrequest times out and the field `success_on_timeout` is set to true.",
+          "type": "boolean"
+        },
+        "nextWaitToken": {
+          "description": "A wait token that can be used in the next method call to block until\nthe list of breakpoints changes.",
+          "type": "string"
+        },
+        "breakpoints": {
+          "description": "List of all active breakpoints.\nThe fields `id` and `location` are guaranteed to be set on each breakpoint.",
+          "type": "array",
+          "items": {
+            "$ref": "Breakpoint"
+          }
+        }
+      },
+      "id": "ListActiveBreakpointsResponse"
     },
     "ProjectRepoId": {
       "description": "Selects a repo using a Google Cloud Platform project ID\n(e.g. winged-cargo-31) and a repo name within that project.",
@@ -366,28 +120,6 @@
       },
       "id": "ProjectRepoId"
     },
-    "ListActiveBreakpointsResponse": {
-      "description": "Response for listing active breakpoints.",
-      "type": "object",
-      "properties": {
-        "nextWaitToken": {
-          "description": "A wait token that can be used in the next method call to block until\nthe list of breakpoints changes.",
-          "type": "string"
-        },
-        "breakpoints": {
-          "description": "List of all active breakpoints.\nThe fields `id` and `location` are guaranteed to be set on each breakpoint.",
-          "type": "array",
-          "items": {
-            "$ref": "Breakpoint"
-          }
-        },
-        "waitExpired": {
-          "description": "The `wait_expired` field is set to true by the server when the\nrequest times out and the field `success_on_timeout` is set to true.",
-          "type": "boolean"
-        }
-      },
-      "id": "ListActiveBreakpointsResponse"
-    },
     "CloudWorkspaceSourceContext": {
       "description": "A CloudWorkspaceSourceContext denotes a workspace at a particular snapshot.",
       "type": "object",
@@ -397,13 +129,15 @@
           "type": "string"
         },
         "workspaceId": {
-          "description": "The ID of the workspace.",
-          "$ref": "CloudWorkspaceId"
+          "$ref": "CloudWorkspaceId",
+          "description": "The ID of the workspace."
         }
       },
       "id": "CloudWorkspaceSourceContext"
     },
     "GerritSourceContext": {
+      "description": "A SourceContext referring to a Gerrit project.",
+      "type": "object",
       "properties": {
         "hostUri": {
           "description": "The URI of a running Gerrit instance.",
@@ -426,50 +160,50 @@
           "$ref": "AliasContext"
         }
       },
-      "id": "GerritSourceContext",
-      "description": "A SourceContext referring to a Gerrit project.",
-      "type": "object"
+      "id": "GerritSourceContext"
     },
     "UpdateActiveBreakpointResponse": {
-      "properties": {},
-      "id": "UpdateActiveBreakpointResponse",
       "description": "Response for updating an active breakpoint.\nThe message is defined to allow future extensions.",
-      "type": "object"
+      "type": "object",
+      "properties": {},
+      "id": "UpdateActiveBreakpointResponse"
     },
     "CloudWorkspaceId": {
+      "description": "A CloudWorkspaceId is a unique identifier for a cloud workspace.\nA cloud workspace is a place associated with a repo where modified files\ncan be stored before they are committed.",
+      "type": "object",
       "properties": {
         "repoId": {
-          "$ref": "RepoId",
-          "description": "The ID of the repo containing the workspace."
+          "description": "The ID of the repo containing the workspace.",
+          "$ref": "RepoId"
         },
         "name": {
           "description": "The unique name of the workspace within the repo.  This is the name\nchosen by the client in the Source API's CreateWorkspace method.",
           "type": "string"
         }
       },
-      "id": "CloudWorkspaceId",
-      "description": "A CloudWorkspaceId is a unique identifier for a cloud workspace.\nA cloud workspace is a place associated with a repo where modified files\ncan be stored before they are committed.",
-      "type": "object"
+      "id": "CloudWorkspaceId"
     },
     "ListBreakpointsResponse": {
+      "description": "Response for listing breakpoints.",
+      "type": "object",
       "properties": {
+        "nextWaitToken": {
+          "description": "A wait token that can be used in the next call to `list` (REST) or\n`ListBreakpoints` (RPC) to block until the list of breakpoints has changes.",
+          "type": "string"
+        },
         "breakpoints": {
           "description": "List of breakpoints matching the request.\nThe fields `id` and `location` are guaranteed to be set on each breakpoint.\nThe fields: `stack_frames`, `evaluated_expressions` and `variable_table`\nare cleared on each breakpoint regardless of it's status.",
           "type": "array",
           "items": {
             "$ref": "Breakpoint"
           }
-        },
-        "nextWaitToken": {
-          "description": "A wait token that can be used in the next call to `list` (REST) or\n`ListBreakpoints` (RPC) to block until the list of breakpoints has changes.",
-          "type": "string"
         }
       },
-      "id": "ListBreakpointsResponse",
-      "description": "Response for listing breakpoints.",
-      "type": "object"
+      "id": "ListBreakpointsResponse"
     },
     "Breakpoint": {
+      "description": "Represents the breakpoint specification, status and results.",
+      "type": "object",
       "properties": {
         "finalTime": {
           "description": "Time this breakpoint was finalized as seen by the server in seconds\nresolution.",
@@ -483,6 +217,15 @@
             "$ref": "Variable"
           }
         },
+        "createTime": {
+          "description": "Time this breakpoint was created by the server in seconds resolution.",
+          "format": "google-datetime",
+          "type": "string"
+        },
+        "logMessageFormat": {
+          "description": "Only relevant when action is `LOG`. Defines the message to log when\nthe breakpoint hits. The message may include parameter placeholders `$0`,\n`$1`, etc. These placeholders are replaced with the evaluated value\nof the appropriate expression. Expressions not referenced in\n`log_message_format` are not logged.\n\nExample: `Message received, id = $0, count = $1` with\n`expressions` = `[ message.id, message.count ]`.",
+          "type": "string"
+        },
         "labels": {
           "additionalProperties": {
             "type": "string"
@@ -490,15 +233,6 @@
           "description": "A set of custom breakpoint properties, populated by the agent, to be\ndisplayed to the user.",
           "type": "object"
         },
-        "logMessageFormat": {
-          "description": "Only relevant when action is `LOG`. Defines the message to log when\nthe breakpoint hits. The message may include parameter placeholders `$0`,\n`$1`, etc. These placeholders are replaced with the evaluated value\nof the appropriate expression. Expressions not referenced in\n`log_message_format` are not logged.\n\nExample: `Message received, id = $0, count = $1` with\n`expressions` = `[ message.id, message.count ]`.",
-          "type": "string"
-        },
-        "createTime": {
-          "description": "Time this breakpoint was created by the server in seconds resolution.",
-          "format": "google-datetime",
-          "type": "string"
-        },
         "expressions": {
           "description": "List of read-only expressions to evaluate at the breakpoint location.\nThe expressions are composed using expressions in the programming language\nat the source location. If the breakpoint action is `LOG`, the evaluated\nexpressions are included in log statements.",
           "type": "array",
@@ -549,6 +283,8 @@
           "type": "string"
         },
         "logLevel": {
+          "description": "Indicates the severity of the log. Only relevant when action is `LOG`.",
+          "type": "string",
           "enumDescriptions": [
             "Information log message.",
             "Warning log message.",
@@ -558,47 +294,49 @@
             "INFO",
             "WARNING",
             "ERROR"
-          ],
-          "description": "Indicates the severity of the log. Only relevant when action is `LOG`.",
-          "type": "string"
+          ]
         },
         "id": {
           "description": "Breakpoint identifier, unique in the scope of the debuggee.",
           "type": "string"
         },
         "location": {
-          "description": "Breakpoint source location.",
-          "$ref": "SourceLocation"
+          "$ref": "SourceLocation",
+          "description": "Breakpoint source location."
         }
       },
-      "id": "Breakpoint",
-      "description": "Represents the breakpoint specification, status and results.",
-      "type": "object"
+      "id": "Breakpoint"
+    },
+    "SetBreakpointResponse": {
+      "description": "Response for setting a breakpoint.",
+      "type": "object",
+      "properties": {
+        "breakpoint": {
+          "description": "Breakpoint resource.\nThe field `id` is guaranteed to be set (in addition to the echoed fileds).",
+          "$ref": "Breakpoint"
+        }
+      },
+      "id": "SetBreakpointResponse"
     },
     "UpdateActiveBreakpointRequest": {
       "description": "Request to update an active breakpoint.",
       "type": "object",
       "properties": {
         "breakpoint": {
-          "description": "Updated breakpoint information.\nThe field 'id' must be set.",
-          "$ref": "Breakpoint"
+          "$ref": "Breakpoint",
+          "description": "Updated breakpoint information.\nThe field 'id' must be set."
         }
       },
       "id": "UpdateActiveBreakpointRequest"
     },
-    "SetBreakpointResponse": {
-      "properties": {
-        "breakpoint": {
-          "$ref": "Breakpoint",
-          "description": "Breakpoint resource.\nThe field `id` is guaranteed to be set (in addition to the echoed fileds)."
-        }
-      },
-      "id": "SetBreakpointResponse",
-      "description": "Response for setting a breakpoint.",
-      "type": "object"
-    },
     "SourceContext": {
+      "description": "A SourceContext is a reference to a tree of files. A SourceContext together\nwith a path point to a unique revision of a single file or directory.",
+      "type": "object",
       "properties": {
+        "git": {
+          "description": "A SourceContext referring to any third party Git repo (e.g. GitHub).",
+          "$ref": "GitSourceContext"
+        },
         "gerrit": {
           "description": "A SourceContext referring to a Gerrit project.",
           "$ref": "GerritSourceContext"
@@ -608,33 +346,291 @@
           "$ref": "CloudRepoSourceContext"
         },
         "cloudWorkspace": {
-          "description": "A SourceContext referring to a snapshot in a cloud workspace.",
-          "$ref": "CloudWorkspaceSourceContext"
-        },
-        "git": {
-          "description": "A SourceContext referring to any third party Git repo (e.g. GitHub).",
-          "$ref": "GitSourceContext"
+          "$ref": "CloudWorkspaceSourceContext",
+          "description": "A SourceContext referring to a snapshot in a cloud workspace."
         }
       },
-      "id": "SourceContext",
-      "description": "A SourceContext is a reference to a tree of files. A SourceContext together\nwith a path point to a unique revision of a single file or directory.",
-      "type": "object"
+      "id": "SourceContext"
+    },
+    "CloudRepoSourceContext": {
+      "description": "A CloudRepoSourceContext denotes a particular revision in a cloud\nrepo (a repo hosted by the Google Cloud Platform).",
+      "type": "object",
+      "properties": {
+        "revisionId": {
+          "description": "A revision ID.",
+          "type": "string"
+        },
+        "aliasName": {
+          "description": "The name of an alias (branch, tag, etc.).",
+          "type": "string"
+        },
+        "repoId": {
+          "$ref": "RepoId",
+          "description": "The ID of the repo."
+        },
+        "aliasContext": {
+          "$ref": "AliasContext",
+          "description": "An alias, which may be a branch or tag."
+        }
+      },
+      "id": "CloudRepoSourceContext"
+    },
+    "RegisterDebuggeeResponse": {
+      "description": "Response for registering a debuggee.",
+      "type": "object",
+      "properties": {
+        "debuggee": {
+          "description": "Debuggee resource.\nThe field `id` is guranteed to be set (in addition to the echoed fields).",
+          "$ref": "Debuggee"
+        }
+      },
+      "id": "RegisterDebuggeeResponse"
+    },
+    "RegisterDebuggeeRequest": {
+      "description": "Request to register a debuggee.",
+      "type": "object",
+      "properties": {
+        "debuggee": {
+          "$ref": "Debuggee",
+          "description": "Debuggee information to register.\nThe fields `project`, `uniquifier`, `description` and `agent_version`\nof the debuggee must be set."
+        }
+      },
+      "id": "RegisterDebuggeeRequest"
+    },
+    "GetBreakpointResponse": {
+      "description": "Response for getting breakpoint information.",
+      "type": "object",
+      "properties": {
+        "breakpoint": {
+          "description": "Complete breakpoint state.\nThe fields `id` and `location` are guaranteed to be set.",
+          "$ref": "Breakpoint"
+        }
+      },
+      "id": "GetBreakpointResponse"
+    },
+    "StatusMessage": {
+      "description": "Represents a contextual status message.\nThe message can indicate an error or informational status, and refer to\nspecific parts of the containing object.\nFor example, the `Breakpoint.status` field can indicate an error referring\nto the `BREAKPOINT_SOURCE_LOCATION` with the message `Location not found`.",
+      "type": "object",
+      "properties": {
+        "isError": {
+          "description": "Distinguishes errors from informational messages.",
+          "type": "boolean"
+        },
+        "description": {
+          "description": "Status message text.",
+          "$ref": "FormatMessage"
+        },
+        "refersTo": {
+          "description": "Reference to which the message applies.",
+          "type": "string",
+          "enumDescriptions": [
+            "Status doesn't refer to any particular input.",
+            "Status applies to the breakpoint and is related to its location.",
+            "Status applies to the breakpoint and is related to its condition.",
+            "Status applies to the breakpoint and is related to its expressions.",
+            "Status applies to the breakpoint and is related to its age.",
+            "Status applies to the entire variable.",
+            "Status applies to variable value (variable name is valid)."
+          ],
+          "enum": [
+            "UNSPECIFIED",
+            "BREAKPOINT_SOURCE_LOCATION",
+            "BREAKPOINT_CONDITION",
+            "BREAKPOINT_EXPRESSION",
+            "BREAKPOINT_AGE",
+            "VARIABLE_NAME",
+            "VARIABLE_VALUE"
+          ]
+        }
+      },
+      "id": "StatusMessage"
+    },
+    "GitSourceContext": {
+      "description": "A GitSourceContext denotes a particular revision in a third party Git\nrepository (e.g. GitHub).",
+      "type": "object",
+      "properties": {
+        "revisionId": {
+          "description": "Git commit hash.\nrequired.",
+          "type": "string"
+        },
+        "url": {
+          "description": "Git repository URL.",
+          "type": "string"
+        }
+      },
+      "id": "GitSourceContext"
+    },
+    "Variable": {
+      "description": "Represents a variable or an argument possibly of a compound object type.\nNote how the following variables are represented:\n\n1) A simple variable:\n\n    int x = 5\n\n    { name: \"x\", value: \"5\", type: \"int\" }  // Captured variable\n\n2) A compound object:\n\n    struct T {\n        int m1;\n        int m2;\n    };\n    T x = { 3, 7 };\n\n    {  // Captured variable\n        name: \"x\",\n        type: \"T\",\n        members { name: \"m1\", value: \"3\", type: \"int\" },\n        members { name: \"m2\", value: \"7\", type: \"int\" }\n    }\n\n3) A pointer where the pointee was captured:\n\n    T x = { 3, 7 };\n    T* p = &x;\n\n    {   // Captured variable\n        name: \"p\",\n        type: \"T*\",\n        value: \"0x00500500\",\n        members { name: \"m1\", value: \"3\", type: \"int\" },\n        members { name: \"m2\", value: \"7\", type: \"int\" }\n    }\n\n4) A pointer where the pointee was not captured:\n\n    T* p = new T;\n\n    {   // Captured variable\n        name: \"p\",\n        type: \"T*\",\n        value: \"0x00400400\"\n        status { is_error: true, description { format: \"unavailable\" } }\n    }\n\nThe status should describe the reason for the missing value,\nsuch as `\u003coptimized out\u003e`, `\u003cinaccessible\u003e`, `\u003cpointers limit reached\u003e`.\n\nNote that a null pointer should not have members.\n\n5) An unnamed value:\n\n    int* p = new int(7);\n\n    {   // Captured variable\n        name: \"p\",\n        value: \"0x00500500\",\n        type: \"int*\",\n        members { value: \"7\", type: \"int\" } }\n\n6) An unnamed pointer where the pointee was not captured:\n\n    int* p = new int(7);\n    int** pp = &p;\n\n    {  // Captured variable\n        name: \"pp\",\n        value: \"0x00500500\",\n        type: \"int**\",\n        members {\n            value: \"0x00400400\",\n            type: \"int*\"\n            status {\n                is_error: true,\n                description: { format: \"unavailable\" } }\n            }\n        }\n    }\n\nTo optimize computation, memory and network traffic, variables that\nrepeat in the output multiple times can be stored once in a shared\nvariable table and be referenced using the `var_table_index` field.  The\nvariables stored in the shared table are nameless and are essentially\na partition of the complete variable. To reconstruct the complete\nvariable, merge the referencing variable with the referenced variable.\n\nWhen using the shared variable table, the following variables:\n\n    T x = { 3, 7 };\n    T* p = &x;\n    T& r = x;\n\n    { name: \"x\", var_table_index: 3, type: \"T\" }  // Captured variables\n    { name: \"p\", value \"0x00500500\", type=\"T*\", var_table_index: 3 }\n    { name: \"r\", type=\"T&\", var_table_index: 3 }\n\n    {  // Shared variable table entry #3:\n        members { name: \"m1\", value: \"3\", type: \"int\" },\n        members { name: \"m2\", value: \"7\", type: \"int\" }\n    }\n\nNote that the pointer address is stored with the referencing variable\nand not with the referenced variable. This allows the referenced variable\nto be shared between pointers and references.\n\nThe type field is optional. The debugger agent may or may not support it.",
+      "type": "object",
+      "properties": {
+        "members": {
+          "description": "Members contained or pointed to by the variable.",
+          "type": "array",
+          "items": {
+            "$ref": "Variable"
+          }
+        },
+        "status": {
+          "description": "Status associated with the variable. This field will usually stay\nunset. A status of a single variable only applies to that variable or\nexpression. The rest of breakpoint data still remains valid. Variables\nmight be reported in error state even when breakpoint is not in final\nstate.\n\nThe message may refer to variable name with `refers_to` set to\n`VARIABLE_NAME`. Alternatively `refers_to` will be set to `VARIABLE_VALUE`.\nIn either case variable value and members will be unset.\n\nExample of error message applied to name: `Invalid expression syntax`.\n\nExample of information message applied to value: `Not captured`.\n\nExamples of error message applied to value:\n\n*   `Malformed string`,\n*   `Field f not found in class C`\n*   `Null pointer dereference`",
+          "$ref": "StatusMessage"
+        },
+        "name": {
+          "description": "Name of the variable, if any.",
+          "type": "string"
+        },
+        "type": {
+          "description": "Variable type (e.g. `MyClass`). If the variable is split with\n`var_table_index`, `type` goes next to `value`. The interpretation of\na type is agent specific. It is recommended to include the dynamic type\nrather than a static type of an object.",
+          "type": "string"
+        },
+        "value": {
+          "description": "Simple value of the variable.",
+          "type": "string"
+        },
+        "varTableIndex": {
+          "description": "Reference to a variable in the shared variable table. More than\none variable can reference the same variable in the table. The\n`var_table_index` field is an index into `variable_table` in Breakpoint.",
+          "format": "int32",
+          "type": "integer"
+        }
+      },
+      "id": "Variable"
+    },
+    "StackFrame": {
+      "description": "Represents a stack frame context.",
+      "type": "object",
+      "properties": {
+        "locals": {
+          "description": "Set of local variables at the stack frame location.\nNote that this might not be populated for all stack frames.",
+          "type": "array",
+          "items": {
+            "$ref": "Variable"
+          }
+        },
+        "location": {
+          "description": "Source location of the call site.",
+          "$ref": "SourceLocation"
+        },
+        "function": {
+          "description": "Demangled function name at the call site.",
+          "type": "string"
+        },
+        "arguments": {
+          "description": "Set of arguments passed to this function.\nNote that this might not be populated for all stack frames.",
+          "type": "array",
+          "items": {
+            "$ref": "Variable"
+          }
+        }
+      },
+      "id": "StackFrame"
+    },
+    "RepoId": {
+      "description": "A unique identifier for a cloud repo.",
+      "type": "object",
+      "properties": {
+        "projectRepoId": {
+          "$ref": "ProjectRepoId",
+          "description": "A combination of a project ID and a repo name."
+        },
+        "uid": {
+          "description": "A server-assigned, globally unique identifier.",
+          "type": "string"
+        }
+      },
+      "id": "RepoId"
+    },
+    "FormatMessage": {
+      "description": "Represents a message with parameters.",
+      "type": "object",
+      "properties": {
+        "format": {
+          "description": "Format template for the message. The `format` uses placeholders `$0`,\n`$1`, etc. to reference parameters. `$$` can be used to denote the `$`\ncharacter.\n\nExamples:\n\n*   `Failed to load '$0' which helps debug $1 the first time it\n    is loaded.  Again, $0 is very important.`\n*   `Please pay $$10 to use $0 instead of $1.`",
+          "type": "string"
+        },
+        "parameters": {
+          "description": "Optional parameters to be embedded into the message.",
+          "type": "array",
+          "items": {
+            "type": "string"
+          }
+        }
+      },
+      "id": "FormatMessage"
+    },
+    "ExtendedSourceContext": {
+      "description": "An ExtendedSourceContext is a SourceContext combined with additional\ndetails describing the context.",
+      "type": "object",
+      "properties": {
+        "context": {
+          "description": "Any source context.",
+          "$ref": "SourceContext"
+        },
+        "labels": {
+          "additionalProperties": {
+            "type": "string"
+          },
+          "description": "Labels with user defined metadata.",
+          "type": "object"
+        }
+      },
+      "id": "ExtendedSourceContext"
+    },
+    "ListDebuggeesResponse": {
+      "description": "Response for listing debuggees.",
+      "type": "object",
+      "properties": {
+        "debuggees": {
+          "description": "List of debuggees accessible to the calling user.\nNote that the `description` field is the only human readable field\nthat should be displayed to the user.\nThe fields `debuggee.id` and  `description` fields are guaranteed to be\nset on each debuggee.",
+          "type": "array",
+          "items": {
+            "$ref": "Debuggee"
+          }
+        }
+      },
+      "id": "ListDebuggeesResponse"
+    },
+    "AliasContext": {
+      "description": "An alias to a repo revision.",
+      "type": "object",
+      "properties": {
+        "kind": {
+          "description": "The alias kind.",
+          "type": "string",
+          "enumDescriptions": [
+            "Do not use.",
+            "Git tag",
+            "Git branch",
+            "OTHER is used to specify non-standard aliases, those not of the kinds\nabove. For example, if a Git repo has a ref named \"refs/foo/bar\", it\nis considered to be of kind OTHER."
+          ],
+          "enum": [
+            "ANY",
+            "FIXED",
+            "MOVABLE",
+            "OTHER"
+          ]
+        },
+        "name": {
+          "description": "The alias name.",
+          "type": "string"
+        }
+      },
+      "id": "AliasContext"
     }
   },
   "icons": {
-    "x16": "http://www.google.com/images/icons/product/search-16.gif",
-    "x32": "http://www.google.com/images/icons/product/search-32.gif"
+    "x32": "http://www.google.com/images/icons/product/search-32.gif",
+    "x16": "http://www.google.com/images/icons/product/search-16.gif"
   },
   "protocol": "rest",
   "canonicalName": "Cloud Debugger",
   "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_debugger": {
           "description": "Manage cloud debugger"
+        },
+        "https://www.googleapis.com/auth/cloud-platform": {
+          "description": "View and manage your data across Google Cloud Platform services"
         }
       }
     }
@@ -651,12 +647,21 @@
         "debuggees": {
           "methods": {
             "list": {
-              "parameterOrder": [],
+              "flatPath": "v2/debugger/debuggees",
+              "id": "clouddebugger.debugger.debuggees.list",
+              "path": "v2/debugger/debuggees",
+              "description": "Lists all the debuggees that the user can set breakpoints to.",
               "httpMethod": "GET",
+              "parameterOrder": [],
               "response": {
                 "$ref": "ListDebuggeesResponse"
               },
               "parameters": {
+                "project": {
+                  "location": "query",
+                  "description": "Project number of a Google Cloud project whose debuggees to list.",
+                  "type": "string"
+                },
                 "clientVersion": {
                   "location": "query",
                   "description": "The client version making the call.\nFollowing: `domain/type/version` (e.g., `google.com/intellij/v1`).",
@@ -666,161 +671,69 @@
                   "description": "When set to `true`, the result includes all debuggees. Otherwise, the\nresult includes only debuggees that are active.",
                   "type": "boolean",
                   "location": "query"
-                },
-                "project": {
-                  "location": "query",
-                  "description": "Project number of a Google Cloud project whose debuggees to list.",
-                  "type": "string"
                 }
               },
               "scopes": [
                 "https://www.googleapis.com/auth/cloud-platform",
                 "https://www.googleapis.com/auth/cloud_debugger"
-              ],
-              "flatPath": "v2/debugger/debuggees",
-              "path": "v2/debugger/debuggees",
-              "id": "clouddebugger.debugger.debuggees.list",
-              "description": "Lists all the debuggees that the user can set breakpoints to."
+              ]
             }
           },
           "resources": {
             "breakpoints": {
               "methods": {
-                "set": {
-                  "description": "Sets the breakpoint to the debuggee.",
-                  "request": {
-                    "$ref": "Breakpoint"
-                  },
-                  "response": {
-                    "$ref": "SetBreakpointResponse"
-                  },
-                  "parameterOrder": [
-                    "debuggeeId"
-                  ],
-                  "httpMethod": "POST",
-                  "scopes": [
-                    "https://www.googleapis.com/auth/cloud-platform",
-                    "https://www.googleapis.com/auth/cloud_debugger"
-                  ],
-                  "parameters": {
-                    "clientVersion": {
-                      "location": "query",
-                      "description": "The client version making the call.\nFollowing: `domain/type/version` (e.g., `google.com/intellij/v1`).",
-                      "type": "string"
-                    },
-                    "debuggeeId": {
-                      "location": "path",
-                      "description": "ID of the debuggee where the breakpoint is to be set.",
-                      "required": true,
-                      "type": "string"
-                    }
-                  },
-                  "flatPath": "v2/debugger/debuggees/{debuggeeId}/breakpoints/set",
-                  "path": "v2/debugger/debuggees/{debuggeeId}/breakpoints/set",
-                  "id": "clouddebugger.debugger.debuggees.breakpoints.set"
-                },
-                "delete": {
-                  "path": "v2/debugger/debuggees/{debuggeeId}/breakpoints/{breakpointId}",
-                  "id": "clouddebugger.debugger.debuggees.breakpoints.delete",
-                  "description": "Deletes the breakpoint from the debuggee.",
-                  "response": {
-                    "$ref": "Empty"
-                  },
-                  "parameterOrder": [
-                    "debuggeeId",
-                    "breakpointId"
-                  ],
-                  "httpMethod": "DELETE",
-                  "scopes": [
-                    "https://www.googleapis.com/auth/cloud-platform",
-                    "https://www.googleapis.com/auth/cloud_debugger"
-                  ],
-                  "parameters": {
-                    "breakpointId": {
-                      "location": "path",
-                      "description": "ID of the breakpoint to delete.",
-                      "required": true,
-                      "type": "string"
-                    },
-                    "debuggeeId": {
-                      "location": "path",
-                      "description": "ID of the debuggee whose breakpoint to delete.",
-                      "required": true,
-                      "type": "string"
-                    },
-                    "clientVersion": {
-                      "location": "query",
-                      "description": "The client version making the call.\nFollowing: `domain/type/version` (e.g., `google.com/intellij/v1`).",
-                      "type": "string"
-                    }
-                  },
-                  "flatPath": "v2/debugger/debuggees/{debuggeeId}/breakpoints/{breakpointId}"
-                },
                 "get": {
+                  "flatPath": "v2/debugger/debuggees/{debuggeeId}/breakpoints/{breakpointId}",
                   "path": "v2/debugger/debuggees/{debuggeeId}/breakpoints/{breakpointId}",
                   "id": "clouddebugger.debugger.debuggees.breakpoints.get",
                   "description": "Gets breakpoint information.",
+                  "response": {
+                    "$ref": "GetBreakpointResponse"
+                  },
                   "parameterOrder": [
                     "debuggeeId",
                     "breakpointId"
                   ],
                   "httpMethod": "GET",
-                  "response": {
-                    "$ref": "GetBreakpointResponse"
-                  },
                   "parameters": {
-                    "breakpointId": {
-                      "description": "ID of the breakpoint to get.",
-                      "required": true,
-                      "type": "string",
-                      "location": "path"
-                    },
                     "debuggeeId": {
+                      "location": "path",
                       "description": "ID of the debuggee whose breakpoint to get.",
                       "required": true,
-                      "type": "string",
-                      "location": "path"
+                      "type": "string"
                     },
                     "clientVersion": {
-                      "location": "query",
                       "description": "The client version making the call.\nFollowing: `domain/type/version` (e.g., `google.com/intellij/v1`).",
+                      "type": "string",
+                      "location": "query"
+                    },
+                    "breakpointId": {
+                      "location": "path",
+                      "description": "ID of the breakpoint to get.",
+                      "required": true,
                       "type": "string"
                     }
                   },
                   "scopes": [
                     "https://www.googleapis.com/auth/cloud-platform",
                     "https://www.googleapis.com/auth/cloud_debugger"
-                  ],
-                  "flatPath": "v2/debugger/debuggees/{debuggeeId}/breakpoints/{breakpointId}"
+                  ]
                 },
                 "list": {
-                  "response": {
-                    "$ref": "ListBreakpointsResponse"
-                  },
+                  "description": "Lists all breakpoints for the debuggee.",
+                  "httpMethod": "GET",
                   "parameterOrder": [
                     "debuggeeId"
                   ],
-                  "httpMethod": "GET",
-                  "scopes": [
-                    "https://www.googleapis.com/auth/cloud-platform",
-                    "https://www.googleapis.com/auth/cloud_debugger"
-                  ],
+                  "response": {
+                    "$ref": "ListBreakpointsResponse"
+                  },
                   "parameters": {
-                    "includeAllUsers": {
-                      "description": "When set to `true`, the response includes the list of breakpoints set by\nany user. Otherwise, it includes only breakpoints set by the caller.",
+                    "stripResults": {
+                      "description": "This field is deprecated. The following fields are always stripped out of\nthe result: `stack_frames`, `evaluated_expressions` and `variable_table`.",
                       "type": "boolean",
                       "location": "query"
                     },
-                    "includeInactive": {
-                      "location": "query",
-                      "description": "When set to `true`, the response includes active and inactive\nbreakpoints. Otherwise, it includes only active breakpoints.",
-                      "type": "boolean"
-                    },
-                    "stripResults": {
-                      "location": "query",
-                      "description": "This field is deprecated. The following fields are always stripped out of\nthe result: `stack_frames`, `evaluated_expressions` and `variable_table`.",
-                      "type": "boolean"
-                    },
                     "debuggeeId": {
                       "location": "path",
                       "description": "ID of the debuggee whose breakpoints to list.",
@@ -832,25 +745,108 @@
                       "description": "A wait token that, if specified, blocks the call until the breakpoints\nlist has changed, or a server selected timeout has expired.  The value\nshould be set from the last response. The error code\n`google.rpc.Code.ABORTED` (RPC) is returned on wait timeout, which\nshould be called again with the same `wait_token`.",
                       "type": "string"
                     },
+                    "action.value": {
+                      "description": "Only breakpoints with the specified action will pass the filter.",
+                      "type": "string",
+                      "location": "query",
+                      "enum": [
+                        "CAPTURE",
+                        "LOG"
+                      ]
+                    },
                     "clientVersion": {
                       "description": "The client version making the call.\nFollowing: `domain/type/version` (e.g., `google.com/intellij/v1`).",
                       "type": "string",
                       "location": "query"
                     },
-                    "action.value": {
+                    "includeInactive": {
+                      "description": "When set to `true`, the response includes active and inactive\nbreakpoints. Otherwise, it includes only active breakpoints.",
+                      "type": "boolean",
+                      "location": "query"
+                    },
+                    "includeAllUsers": {
                       "location": "query",
-                      "enum": [
-                        "CAPTURE",
-                        "LOG"
-                      ],
-                      "description": "Only breakpoints with the specified action will pass the filter.",
-                      "type": "string"
+                      "description": "When set to `true`, the response includes the list of breakpoints set by\nany user. Otherwise, it includes only breakpoints set by the caller.",
+                      "type": "boolean"
                     }
                   },
+                  "scopes": [
+                    "https://www.googleapis.com/auth/cloud-platform",
+                    "https://www.googleapis.com/auth/cloud_debugger"
+                  ],
                   "flatPath": "v2/debugger/debuggees/{debuggeeId}/breakpoints",
-                  "path": "v2/debugger/debuggees/{debuggeeId}/breakpoints",
                   "id": "clouddebugger.debugger.debuggees.breakpoints.list",
-                  "description": "Lists all breakpoints for the debuggee."
+                  "path": "v2/debugger/debuggees/{debuggeeId}/breakpoints"
+                },
+                "set": {
+                  "description": "Sets the breakpoint to the debuggee.",
+                  "request": {
+                    "$ref": "Breakpoint"
+                  },
+                  "httpMethod": "POST",
+                  "parameterOrder": [
+                    "debuggeeId"
+                  ],
+                  "response": {
+                    "$ref": "SetBreakpointResponse"
+                  },
+                  "scopes": [
+                    "https://www.googleapis.com/auth/cloud-platform",
+                    "https://www.googleapis.com/auth/cloud_debugger"
+                  ],
+                  "parameters": {
+                    "clientVersion": {
+                      "description": "The client version making the call.\nFollowing: `domain/type/version` (e.g., `google.com/intellij/v1`).",
+                      "type": "string",
+                      "location": "query"
+                    },
+                    "debuggeeId": {
+                      "description": "ID of the debuggee where the breakpoint is to be set.",
+                      "required": true,
+                      "type": "string",
+                      "location": "path"
+                    }
+                  },
+                  "flatPath": "v2/debugger/debuggees/{debuggeeId}/breakpoints/set",
+                  "id": "clouddebugger.debugger.debuggees.breakpoints.set",
+                  "path": "v2/debugger/debuggees/{debuggeeId}/breakpoints/set"
+                },
+                "delete": {
+                  "description": "Deletes the breakpoint from the debuggee.",
+                  "httpMethod": "DELETE",
+                  "response": {
+                    "$ref": "Empty"
+                  },
+                  "parameterOrder": [
+                    "debuggeeId",
+                    "breakpointId"
+                  ],
+                  "scopes": [
+                    "https://www.googleapis.com/auth/cloud-platform",
+                    "https://www.googleapis.com/auth/cloud_debugger"
+                  ],
+                  "parameters": {
+                    "clientVersion": {
+                      "location": "query",
+                      "description": "The client version making the call.\nFollowing: `domain/type/version` (e.g., `google.com/intellij/v1`).",
+                      "type": "string"
+                    },
+                    "breakpointId": {
+                      "description": "ID of the breakpoint to delete.",
+                      "required": true,
+                      "type": "string",
+                      "location": "path"
+                    },
+                    "debuggeeId": {
+                      "description": "ID of the debuggee whose breakpoint to delete.",
+                      "required": true,
+                      "type": "string",
+                      "location": "path"
+                    }
+                  },
+                  "flatPath": "v2/debugger/debuggees/{debuggeeId}/breakpoints/{breakpointId}",
+                  "id": "clouddebugger.debugger.debuggees.breakpoints.delete",
+                  "path": "v2/debugger/debuggees/{debuggeeId}/breakpoints/{breakpointId}"
                 }
               }
             }
@@ -863,80 +859,42 @@
         "debuggees": {
           "methods": {
             "register": {
+              "flatPath": "v2/controller/debuggees/register",
+              "id": "clouddebugger.controller.debuggees.register",
+              "path": "v2/controller/debuggees/register",
+              "request": {
+                "$ref": "RegisterDebuggeeRequest"
+              },
+              "description": "Registers the debuggee with the controller service.\n\nAll agents attached to the same application should call this method with\nthe same request content to get back the same stable `debuggee_id`. Agents\nshould call this method again whenever `google.rpc.Code.NOT_FOUND` is\nreturned from any controller method.\n\nThis allows the controller service to disable the agent or recover from any\ndata loss. If the debuggee is disabled by the server, the response will\nhave `is_disabled` set to `true`.",
               "httpMethod": "POST",
               "parameterOrder": [],
               "response": {
                 "$ref": "RegisterDebuggeeResponse"
               },
+              "parameters": {},
               "scopes": [
                 "https://www.googleapis.com/auth/cloud-platform",
                 "https://www.googleapis.com/auth/cloud_debugger"
-              ],
-              "parameters": {},
-              "flatPath": "v2/controller/debuggees/register",
-              "id": "clouddebugger.controller.debuggees.register",
-              "path": "v2/controller/debuggees/register",
-              "description": "Registers the debuggee with the controller service.\n\nAll agents attached to the same application should call this method with\nthe same request content to get back the same stable `debuggee_id`. Agents\nshould call this method again whenever `google.rpc.Code.NOT_FOUND` is\nreturned from any controller method.\n\nThis allows the controller service to disable the agent or recover from any\ndata loss. If the debuggee is disabled by the server, the response will\nhave `is_disabled` set to `true`.",
-              "request": {
-                "$ref": "RegisterDebuggeeRequest"
-              }
+              ]
             }
           },
           "resources": {
             "breakpoints": {
               "methods": {
-                "update": {
-                  "request": {
-                    "$ref": "UpdateActiveBreakpointRequest"
-                  },
-                  "description": "Updates the breakpoint state or mutable fields.\nThe entire Breakpoint message must be sent back to the controller\nservice.\n\nUpdates to active breakpoint fields are only allowed if the new value\ndoes not change the breakpoint specification. Updates to the `location`,\n`condition` and `expression` fields should not alter the breakpoint\nsemantics. These may only make changes such as canonicalizing a value\nor snapping the location to the correct line of code.",
-                  "response": {
-                    "$ref": "UpdateActiveBreakpointResponse"
-                  },
-                  "parameterOrder": [
-                    "debuggeeId",
-                    "id"
-                  ],
-                  "httpMethod": "PUT",
-                  "parameters": {
-                    "debuggeeId": {
-                      "description": "Identifies the debuggee being debugged.",
-                      "required": true,
-                      "type": "string",
-                      "location": "path"
-                    },
-                    "id": {
-                      "description": "Breakpoint identifier, unique in the scope of the debuggee.",
-                      "required": true,
-                      "type": "string",
-                      "location": "path"
-                    }
-                  },
-                  "scopes": [
-                    "https://www.googleapis.com/auth/cloud-platform",
-                    "https://www.googleapis.com/auth/cloud_debugger"
-                  ],
-                  "flatPath": "v2/controller/debuggees/{debuggeeId}/breakpoints/{id}",
-                  "path": "v2/controller/debuggees/{debuggeeId}/breakpoints/{id}",
-                  "id": "clouddebugger.controller.debuggees.breakpoints.update"
-                },
                 "list": {
-                  "path": "v2/controller/debuggees/{debuggeeId}/breakpoints",
-                  "id": "clouddebugger.controller.debuggees.breakpoints.list",
-                  "description": "Returns the list of all active breakpoints for the debuggee.\n\nThe breakpoint specification (location, condition, and expression\nfields) is semantically immutable, although the field values may\nchange. For example, an agent may update the location line number\nto reflect the actual line where the breakpoint was set, but this\ndoesn't change the breakpoint semantics.\n\nThis means that an agent does not need to check if a breakpoint has changed\nwhen it encounters the same breakpoint on a successive call.\nMoreover, an agent should remember the breakpoints that are completed\nuntil the controller removes them from the active list to avoid\nsetting those breakpoints again.",
+                  "httpMethod": "GET",
                   "response": {
                     "$ref": "ListActiveBreakpointsResponse"
                   },
                   "parameterOrder": [
                     "debuggeeId"
                   ],
-                  "httpMethod": "GET",
                   "parameters": {
                     "debuggeeId": {
+                      "location": "path",
                       "description": "Identifies the debuggee.",
                       "required": true,
-                      "type": "string",
-                      "location": "path"
+                      "type": "string"
                     },
                     "successOnTimeout": {
                       "location": "query",
@@ -953,7 +911,45 @@
                     "https://www.googleapis.com/auth/cloud-platform",
                     "https://www.googleapis.com/auth/cloud_debugger"
                   ],
-                  "flatPath": "v2/controller/debuggees/{debuggeeId}/breakpoints"
+                  "flatPath": "v2/controller/debuggees/{debuggeeId}/breakpoints",
+                  "id": "clouddebugger.controller.debuggees.breakpoints.list",
+                  "path": "v2/controller/debuggees/{debuggeeId}/breakpoints",
+                  "description": "Returns the list of all active breakpoints for the debuggee.\n\nThe breakpoint specification (location, condition, and expression\nfields) is semantically immutable, although the field values may\nchange. For example, an agent may update the location line number\nto reflect the actual line where the breakpoint was set, but this\ndoesn't change the breakpoint semantics.\n\nThis means that an agent does not need to check if a breakpoint has changed\nwhen it encounters the same breakpoint on a successive call.\nMoreover, an agent should remember the breakpoints that are completed\nuntil the controller removes them from the active list to avoid\nsetting those breakpoints again."
+                },
+                "update": {
+                  "flatPath": "v2/controller/debuggees/{debuggeeId}/breakpoints/{id}",
+                  "path": "v2/controller/debuggees/{debuggeeId}/breakpoints/{id}",
+                  "id": "clouddebugger.controller.debuggees.breakpoints.update",
+                  "description": "Updates the breakpoint state or mutable fields.\nThe entire Breakpoint message must be sent back to the controller\nservice.\n\nUpdates to active breakpoint fields are only allowed if the new value\ndoes not change the breakpoint specification. Updates to the `location`,\n`condition` and `expression` fields should not alter the breakpoint\nsemantics. These may only make changes such as canonicalizing a value\nor snapping the location to the correct line of code.",
+                  "request": {
+                    "$ref": "UpdateActiveBreakpointRequest"
+                  },
+                  "response": {
+                    "$ref": "UpdateActiveBreakpointResponse"
+                  },
+                  "parameterOrder": [
+                    "debuggeeId",
+                    "id"
+                  ],
+                  "httpMethod": "PUT",
+                  "scopes": [
+                    "https://www.googleapis.com/auth/cloud-platform",
+                    "https://www.googleapis.com/auth/cloud_debugger"
+                  ],
+                  "parameters": {
+                    "debuggeeId": {
+                      "description": "Identifies the debuggee being debugged.",
+                      "required": true,
+                      "type": "string",
+                      "location": "path"
+                    },
+                    "id": {
+                      "location": "path",
+                      "description": "Breakpoint identifier, unique in the scope of the debuggee.",
+                      "required": true,
+                      "type": "string"
+                    }
+                  }
                 }
               }
             }
@@ -963,52 +959,35 @@
     }
   },
   "parameters": {
-    "upload_protocol": {
+    "uploadType": {
       "location": "query",
-      "description": "Upload protocol for media (e.g. \"raw\", \"multipart\").",
+      "description": "Legacy upload protocol for media (e.g. \"media\", \"multipart\").",
       "type": "string"
     },
-    "prettyPrint": {
-      "location": "query",
-      "description": "Returns response with indentations and line breaks.",
-      "type": "boolean",
-      "default": "true"
-    },
     "fields": {
       "description": "Selector specifying which fields to include in a partial response.",
       "type": "string",
       "location": "query"
     },
-    "uploadType": {
-      "location": "query",
-      "description": "Legacy upload protocol for media (e.g. \"media\", \"multipart\").",
-      "type": "string"
+    "callback": {
+      "description": "JSONP",
+      "type": "string",
+      "location": "query"
     },
     "$.xgafv": {
+      "enumDescriptions": [
+        "v1 error format",
+        "v2 error format"
+      ],
+      "location": "query",
       "enum": [
         "1",
         "2"
       ],
       "description": "V1 error format.",
-      "type": "string",
-      "enumDescriptions": [
-        "v1 error format",
-        "v2 error format"
-      ],
-      "location": "query"
-    },
-    "callback": {
-      "location": "query",
-      "description": "JSONP",
       "type": "string"
     },
     "alt": {
-      "enum": [
-        "json",
-        "media",
-        "proto"
-      ],
-      "type": "string",
       "enumDescriptions": [
         "Responses with Content-Type of application/json",
         "Media download with context-dependent Content-Type",
@@ -1016,38 +995,55 @@
       ],
       "location": "query",
       "description": "Data format for response.",
-      "default": "json"
+      "default": "json",
+      "enum": [
+        "json",
+        "media",
+        "proto"
+      ],
+      "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"
     },
     "access_token": {
       "location": "query",
       "description": "OAuth access token.",
       "type": "string"
     },
-    "key": {
+    "quotaUser": {
       "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.",
+      "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"
     },
-    "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"
-    },
     "pp": {
-      "location": "query",
       "description": "Pretty-print response.",
       "type": "boolean",
-      "default": "true"
-    },
-    "oauth_token": {
-      "description": "OAuth 2.0 token for the current user.",
-      "type": "string",
+      "default": "true",
       "location": "query"
     },
     "bearer_token": {
       "location": "query",
       "description": "OAuth bearer token.",
       "type": "string"
+    },
+    "oauth_token": {
+      "description": "OAuth 2.0 token for the current user.",
+      "type": "string",
+      "location": "query"
+    },
+    "upload_protocol": {
+      "description": "Upload protocol for media (e.g. \"raw\", \"multipart\").",
+      "type": "string",
+      "location": "query"
+    },
+    "prettyPrint": {
+      "location": "query",
+      "description": "Returns response with indentations and line breaks.",
+      "type": "boolean",
+      "default": "true"
     }
   },
   "version": "v2",
@@ -1055,5 +1051,9 @@
   "kind": "discovery#restDescription",
   "description": "Examines the call stack and variables of a running application without stopping or slowing it down.\n",
   "servicePath": "",
-  "basePath": ""
+  "basePath": "",
+  "id": "clouddebugger:v2",
+  "documentationLink": "http://cloud.google.com/debugger",
+  "revision": "20170322",
+  "discoveryVersion": "v1"
 }
diff --git a/clouddebugger/v2/clouddebugger-gen.go b/clouddebugger/v2/clouddebugger-gen.go
index 08f2d9c..98f3871 100644
--- a/clouddebugger/v2/clouddebugger-gen.go
+++ b/clouddebugger/v2/clouddebugger-gen.go
@@ -65,10 +65,9 @@
 }
 
 type Service struct {
-	client                    *http.Client
-	BasePath                  string // API endpoint base URL
-	UserAgent                 string // optional additional User-Agent fragment
-	GoogleClientHeaderElement string // client header fragment, for Google use only
+	client    *http.Client
+	BasePath  string // API endpoint base URL
+	UserAgent string // optional additional User-Agent fragment
 
 	Controller *ControllerService
 
@@ -82,10 +81,6 @@
 	return googleapi.UserAgent + " " + s.UserAgent
 }
 
-func (s *Service) clientHeader() string {
-	return gensupport.GoogleClientHeader("20170210", s.GoogleClientHeaderElement)
-}
-
 func NewControllerService(s *Service) *ControllerService {
 	rs := &ControllerService{s: s}
 	rs.Debuggees = NewControllerDebuggeesService(s)
@@ -1528,7 +1523,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	var body io.Reader = nil
 	body, err := googleapi.WithoutDataWrapper.JSONReader(c.registerdebuggeerequest)
 	if err != nil {
@@ -1706,7 +1700,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	if c.ifNoneMatch_ != "" {
 		reqHeaders.Set("If-None-Match", c.ifNoneMatch_)
 	}
@@ -1862,7 +1855,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	var body io.Reader = nil
 	body, err := googleapi.WithoutDataWrapper.JSONReader(c.updateactivebreakpointrequest)
 	if err != nil {
@@ -2037,7 +2029,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	if c.ifNoneMatch_ != "" {
 		reqHeaders.Set("If-None-Match", c.ifNoneMatch_)
 	}
@@ -2180,7 +2171,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	var body io.Reader = nil
 	c.urlParams_.Set("alt", alt)
 	urls := googleapi.ResolveRelative(c.s.BasePath, "v2/debugger/debuggees/{debuggeeId}/breakpoints/{breakpointId}")
@@ -2340,7 +2330,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	if c.ifNoneMatch_ != "" {
 		reqHeaders.Set("If-None-Match", c.ifNoneMatch_)
 	}
@@ -2552,7 +2541,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	if c.ifNoneMatch_ != "" {
 		reqHeaders.Set("If-None-Match", c.ifNoneMatch_)
 	}
@@ -2725,7 +2713,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	var body io.Reader = nil
 	body, err := googleapi.WithoutDataWrapper.JSONReader(c.breakpoint)
 	if err != nil {
diff --git a/clouderrorreporting/v1beta1/clouderrorreporting-api.json b/clouderrorreporting/v1beta1/clouderrorreporting-api.json
index 1777b53..81ebb74 100644
--- a/clouderrorreporting/v1beta1/clouderrorreporting-api.json
+++ b/clouderrorreporting/v1beta1/clouderrorreporting-api.json
@@ -1,15 +1,102 @@
 {
-  "baseUrl": "https://clouderrorreporting.googleapis.com/",
-  "servicePath": "",
-  "description": "Stackdriver Error Reporting groups and counts similar errors from cloud services. The Stackdriver Error Reporting API provides a way to report new errors and read access to error groups and their associated errors.\n",
-  "kind": "discovery#restDescription",
   "basePath": "",
   "id": "clouderrorreporting:v1beta1",
+  "revision": "20170314",
   "documentationLink": "https://cloud.google.com/error-reporting/",
-  "revision": "20170220",
   "discoveryVersion": "v1",
   "version_module": "True",
   "schemas": {
+    "ReportErrorEventResponse": {
+      "description": "Response for reporting an individual error event.\nData may be added to this message in the future.",
+      "type": "object",
+      "properties": {},
+      "id": "ReportErrorEventResponse"
+    },
+    "HttpRequestContext": {
+      "properties": {
+        "url": {
+          "description": "The URL of the request.",
+          "type": "string"
+        },
+        "responseStatusCode": {
+          "description": "The HTTP response status code for the request.",
+          "format": "int32",
+          "type": "integer"
+        },
+        "method": {
+          "description": "The type of HTTP request, such as `GET`, `POST`, etc.",
+          "type": "string"
+        },
+        "remoteIp": {
+          "description": "The IP address from which the request originated.\nThis can be IPv4, IPv6, or a token which is derived from the\nIP address, depending on the data that has been provided\nin the error report.",
+          "type": "string"
+        },
+        "referrer": {
+          "description": "The referrer information that is provided with the request.",
+          "type": "string"
+        },
+        "userAgent": {
+          "description": "The user agent information that is provided with the request.",
+          "type": "string"
+        }
+      },
+      "id": "HttpRequestContext",
+      "description": "HTTP request data that is related to a reported error.\nThis data should be provided by the application when reporting an error,\nunless the\nerror report has been generated automatically from Google App Engine logs.",
+      "type": "object"
+    },
+    "ListGroupStatsResponse": {
+      "description": "Contains a set of requested error group stats.",
+      "type": "object",
+      "properties": {
+        "nextPageToken": {
+          "description": "If non-empty, more results are available.\nPass this token, along with the same query parameters as the first\nrequest, to view the next page of results.",
+          "type": "string"
+        },
+        "timeRangeBegin": {
+          "description": "The timestamp specifies the start time to which the request was restricted.\nThe start time is set based on the requested time range. It may be adjusted\nto a later time if a project has exceeded the storage quota and older data\nhas been deleted.",
+          "format": "google-datetime",
+          "type": "string"
+        },
+        "errorGroupStats": {
+          "description": "The error group stats which match the given request.",
+          "type": "array",
+          "items": {
+            "$ref": "ErrorGroupStats"
+          }
+        }
+      },
+      "id": "ListGroupStatsResponse"
+    },
+    "DeleteEventsResponse": {
+      "properties": {},
+      "id": "DeleteEventsResponse",
+      "description": "Response message for deleting error events.",
+      "type": "object"
+    },
+    "ErrorEvent": {
+      "properties": {
+        "serviceContext": {
+          "description": "The `ServiceContext` for which this error was reported.",
+          "$ref": "ServiceContext"
+        },
+        "eventTime": {
+          "description": "Time when the event occurred as provided in the error report.\nIf the report did not contain a timestamp, the time the error was received\nby the Error Reporting system is used.",
+          "format": "google-datetime",
+          "type": "string"
+        },
+        "context": {
+          "description": "Data about the context in which the error occurred.",
+          "$ref": "ErrorContext"
+        },
+        "message": {
+          "description": "The stack trace that was reported or logged by the service.",
+          "type": "string"
+        }
+      },
+      "id": "ErrorEvent",
+      "description": "An error event which is returned by the Error Reporting system.",
+      "type": "object"
+    },
     "ReportedErrorEvent": {
       "description": "An error event which is reported to the Error Reporting system.",
       "type": "object",
@@ -24,8 +111,8 @@
           "type": "string"
         },
         "context": {
-          "description": "[Optional] A description of the context in which the error occurred.",
-          "$ref": "ErrorContext"
+          "$ref": "ErrorContext",
+          "description": "[Optional] A description of the context in which the error occurred."
         },
         "message": {
           "description": "[Required] The error message.\nIf no `context.reportLocation` is provided, the message must contain a\nheader (typically consisting of the exception type name and an error\nmessage) and an exception stack trace in one of the supported programming\nlanguages and formats.\nSupported languages are Java, Python, JavaScript, Ruby, C#, PHP, and Go.\nSupported stack trace formats are:\n\n* **Java**: Must be the return value of [`Throwable.printStackTrace()`](https://docs.oracle.com/javase/7/docs/api/java/lang/Throwable.html#printStackTrace%28%29).\n* **Python**: Must be the return value of [`traceback.format_exc()`](https://docs.python.org/2/library/traceback.html#traceback.format_exc).\n* **JavaScript**: Must be the value of [`error.stack`](https://github.com/v8/v8/wiki/Stack-Trace-API)\nas returned by V8.\n* **Ruby**: Must contain frames returned by [`Exception.backtrace`](https://ruby-doc.org/core-2.2.0/Exception.html#method-i-backtrace).\n* **C#**: Must be the return value of [`Exception.ToString()`](https://msdn.microsoft.com/en-us/library/system.exception.tostring.aspx).\n* **PHP**: Must start with `PHP (Notice|Parse error|Fatal error|Warning)`\nand contain the result of [`(string)$exception`](http://php.net/manual/en/exception.tostring.php).\n* **Go**: Must be the return value of [`runtime.Stack()`](https://golang.org/pkg/runtime/debug/#Stack).",
@@ -38,41 +125,36 @@
       "description": "A description of the context in which an error occurred.\nThis data should be provided by the application when reporting an error,\nunless the\nerror report has been generated automatically from Google App Engine logs.",
       "type": "object",
       "properties": {
+        "user": {
+          "description": "The user who caused or was affected by the crash.\nThis can be a user ID, an email address, or an arbitrary token that\nuniquely identifies the user.\nWhen sending an error report, leave this field empty if the user was not\nlogged in. In this case the\nError Reporting system will use other data, such as remote IP address, to\ndistinguish affected users. See `affected_users_count` in\n`ErrorGroupStats`.",
+          "type": "string"
+        },
         "reportLocation": {
           "description": "The location in the source code where the decision was made to\nreport the error, usually the place where it was logged.\nFor a logged exception this would be the source line where the\nexception is logged, usually close to the place where it was\ncaught. This value is in contrast to `Exception.cause_location`,\nwhich describes the source line where the exception was thrown.",
           "$ref": "SourceLocation"
         },
         "httpRequest": {
-          "$ref": "HttpRequestContext",
-          "description": "The HTTP request which was processed when the error was\ntriggered."
-        },
-        "user": {
-          "description": "The user who caused or was affected by the crash.\nThis can be a user ID, an email address, or an arbitrary token that\nuniquely identifies the user.\nWhen sending an error report, leave this field empty if the user was not\nlogged in. In this case the\nError Reporting system will use other data, such as remote IP address, to\ndistinguish affected users. See `affected_users_count` in\n`ErrorGroupStats`.",
-          "type": "string"
+          "description": "The HTTP request which was processed when the error was\ntriggered.",
+          "$ref": "HttpRequestContext"
         }
       },
       "id": "ErrorContext"
     },
     "TrackingIssue": {
-      "description": "Information related to tracking the progress on resolving the error.",
-      "type": "object",
       "properties": {
         "url": {
           "description": "A URL pointing to a related entry in an issue tracking system.\nExample: https://github.com/user/project/issues/4",
           "type": "string"
         }
       },
-      "id": "TrackingIssue"
+      "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,\nsuch as a given time period and/or service filter.",
       "type": "object",
       "properties": {
-        "firstSeenTime": {
-          "description": "Approximate first occurrence that was ever seen for this group\nand which matches the given filter criteria, ignoring the\ntime_range that was specified in the request.",
-          "format": "google-datetime",
-          "type": "string"
-        },
         "count": {
           "description": "Approximate total number of events in the given group that match\nthe filter criteria.",
           "format": "int64",
@@ -101,8 +183,8 @@
           }
         },
         "representative": {
-          "$ref": "ErrorEvent",
-          "description": "An arbitrary event that is chosen as representative for the whole group.\nThe representative event is intended to be used as a quick preview for\nthe whole group. Events in the group are usually sufficiently similar\nto each other such that showing an arbitrary representative provides\ninsight into the characteristics of the group as a whole."
+          "description": "An arbitrary event that is chosen as representative for the whole group.\nThe representative event is intended to be used as a quick preview for\nthe whole group. Events in the group are usually sufficiently similar\nto each other such that showing an arbitrary representative provides\ninsight into the characteristics of the group as a whole.",
+          "$ref": "ErrorEvent"
         },
         "timedCounts": {
           "description": "Approximate number of occurrences over time.\nTimed counts returned by ListGroups are guaranteed to be:\n\n- Inside the requested time interval\n- Non-overlapping, and\n- Ordered by ascending time.",
@@ -114,13 +196,16 @@
         "group": {
           "description": "Group data that is independent of the filter criteria.",
           "$ref": "ErrorGroup"
+        },
+        "firstSeenTime": {
+          "description": "Approximate first occurrence that was ever seen for this group\nand which matches the given filter criteria, ignoring the\ntime_range that was specified in the request.",
+          "format": "google-datetime",
+          "type": "string"
         }
       },
       "id": "ErrorGroupStats"
     },
     "ListEventsResponse": {
-      "description": "Contains a set of requested error events.",
-      "type": "object",
       "properties": {
         "timeRangeBegin": {
           "description": "The timestamp specifies the start time to which the request was restricted.",
@@ -139,11 +224,11 @@
           "type": "string"
         }
       },
-      "id": "ListEventsResponse"
+      "id": "ListEventsResponse",
+      "description": "Contains a set of requested error events.",
+      "type": "object"
     },
     "TimedCount": {
-      "description": "The number of errors in a given time period.\nAll numbers are approximate since the error events are sampled\nbefore counting them.",
-      "type": "object",
       "properties": {
         "endTime": {
           "description": "End of the time period to which `count` refers (excluded).",
@@ -161,7 +246,9 @@
           "type": "string"
         }
       },
-      "id": "TimedCount"
+      "id": "TimedCount",
+      "description": "The number of errors in a given time period.\nAll numbers are approximate since the error events are sampled\nbefore counting them.",
+      "type": "object"
     },
     "ErrorGroup": {
       "description": "Description of a group of similar error events.",
@@ -185,15 +272,29 @@
       },
       "id": "ErrorGroup"
     },
+    "ServiceContext": {
+      "properties": {
+        "version": {
+          "description": "Represents the source code version that the developer provided,\nwhich could represent a version label or a Git SHA-1 hash, for example.\nFor App Engine standard environment, the version is set to the version of\nthe app.",
+          "type": "string"
+        },
+        "service": {
+          "description": "An identifier of the service, such as the name of the\nexecutable, job, or Google App Engine service name. This field is expected\nto have a low number of values that are relatively stable over time, as\nopposed to `version`, which can be changed whenever new code is deployed.\n\nContains the service name for error reports extracted from Google\nApp Engine logs or `default` if the App Engine default service is used.",
+          "type": "string"
+        },
+        "resourceType": {
+          "description": "Type of the MonitoredResource. List of possible values:\nhttps://cloud.google.com/monitoring/api/resources\n\nValue is set automatically for incoming errors and must not be set when\nreporting errors.",
+          "type": "string"
+        }
+      },
+      "id": "ServiceContext",
+      "description": "Describes a running service that sends errors.\nIts version changes over time and multiple versions can run in parallel.",
+      "type": "object"
+    },
     "SourceLocation": {
-      "description": "Indicates a location in the source code of the service for which\nerrors are reported.\nThis data should be provided by the application when reporting an error,\nunless the error report has been generated automatically from Google App\nEngine logs. All fields are optional.",
+      "description": "Indicates a location in the source code of the service for which errors are\nreported. `functionName` must be provided by the application when reporting\nan error, unless the error report contains a `message` with a supported\nexception stack trace. All fields are optional for the later case.",
       "type": "object",
       "properties": {
-        "lineNumber": {
-          "description": "1-based. 0 indicates that the line number is unknown.",
-          "format": "int32",
-          "type": "integer"
-        },
         "functionName": {
           "description": "Human-readable name of a function or method.\nThe value can include optional context like the class or package name.\nFor example, `my.package.MyClass.method` in case of Java.",
           "type": "string"
@@ -201,126 +302,21 @@
         "filePath": {
           "description": "The source code filename, which can include a truncated relative\npath, or a full path from a production machine.",
           "type": "string"
+        },
+        "lineNumber": {
+          "description": "1-based. 0 indicates that the line number is unknown.",
+          "format": "int32",
+          "type": "integer"
         }
       },
       "id": "SourceLocation"
-    },
-    "ServiceContext": {
-      "description": "Describes a running service that sends errors.\nIts version changes over time and multiple versions can run in parallel.",
-      "type": "object",
-      "properties": {
-        "resourceType": {
-          "description": "Type of the MonitoredResource. List of possible values:\nhttps://cloud.google.com/monitoring/api/resources\n\nValue is set automatically for incoming errors and must not be set when\nreporting errors.",
-          "type": "string"
-        },
-        "version": {
-          "description": "Represents the source code version that the developer provided,\nwhich could represent a version label or a Git SHA-1 hash, for example.",
-          "type": "string"
-        },
-        "service": {
-          "description": "An identifier of the service, such as the name of the\nexecutable, job, or Google App Engine service name. This field is expected\nto have a low number of values that are relatively stable over time, as\nopposed to `version`, which can be changed whenever new code is deployed.\n\nContains the service name for error reports extracted from Google\nApp Engine logs or `default` if the App Engine default service is used.",
-          "type": "string"
-        }
-      },
-      "id": "ServiceContext"
-    },
-    "ReportErrorEventResponse": {
-      "description": "Response for reporting an individual error event.\nData may be added to this message in the future.",
-      "type": "object",
-      "properties": {},
-      "id": "ReportErrorEventResponse"
-    },
-    "HttpRequestContext": {
-      "description": "HTTP request data that is related to a reported error.\nThis data should be provided by the application when reporting an error,\nunless the\nerror report has been generated automatically from Google App Engine logs.",
-      "type": "object",
-      "properties": {
-        "referrer": {
-          "description": "The referrer information that is provided with the request.",
-          "type": "string"
-        },
-        "userAgent": {
-          "description": "The user agent information that is provided with the request.",
-          "type": "string"
-        },
-        "url": {
-          "description": "The URL of the request.",
-          "type": "string"
-        },
-        "responseStatusCode": {
-          "description": "The HTTP response status code for the request.",
-          "format": "int32",
-          "type": "integer"
-        },
-        "method": {
-          "description": "The type of HTTP request, such as `GET`, `POST`, etc.",
-          "type": "string"
-        },
-        "remoteIp": {
-          "description": "The IP address from which the request originated.\nThis can be IPv4, IPv6, or a token which is derived from the\nIP address, depending on the data that has been provided\nin the error report.",
-          "type": "string"
-        }
-      },
-      "id": "HttpRequestContext"
-    },
-    "ListGroupStatsResponse": {
-      "description": "Contains a set of requested error group stats.",
-      "type": "object",
-      "properties": {
-        "nextPageToken": {
-          "description": "If non-empty, more results are available.\nPass this token, along with the same query parameters as the first\nrequest, to view the next page of results.",
-          "type": "string"
-        },
-        "timeRangeBegin": {
-          "description": "The timestamp specifies the start time to which the request was restricted.\nThe start time is set based on the requested time range. It may be adjusted\nto a later time if a project has exceeded the storage quota and older data\nhas been deleted.",
-          "format": "google-datetime",
-          "type": "string"
-        },
-        "errorGroupStats": {
-          "description": "The error group stats which match the given request.",
-          "type": "array",
-          "items": {
-            "$ref": "ErrorGroupStats"
-          }
-        }
-      },
-      "id": "ListGroupStatsResponse"
-    },
-    "DeleteEventsResponse": {
-      "description": "Response message for deleting error events.",
-      "type": "object",
-      "properties": {},
-      "id": "DeleteEventsResponse"
-    },
-    "ErrorEvent": {
-      "description": "An error event which is returned by the Error Reporting system.",
-      "type": "object",
-      "properties": {
-        "eventTime": {
-          "description": "Time when the event occurred as provided in the error report.\nIf the report did not contain a timestamp, the time the error was received\nby the Error Reporting system is used.",
-          "format": "google-datetime",
-          "type": "string"
-        },
-        "context": {
-          "$ref": "ErrorContext",
-          "description": "Data about the context in which the error occurred."
-        },
-        "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."
-        }
-      },
-      "id": "ErrorEvent"
     }
   },
-  "protocol": "rest",
   "icons": {
-    "x16": "http://www.google.com/images/icons/product/search-16.gif",
-    "x32": "http://www.google.com/images/icons/product/search-32.gif"
+    "x32": "http://www.google.com/images/icons/product/search-32.gif",
+    "x16": "http://www.google.com/images/icons/product/search-16.gif"
   },
+  "protocol": "rest",
   "canonicalName": "Clouderrorreporting",
   "auth": {
     "oauth2": {
@@ -339,174 +335,48 @@
   "ownerName": "Google",
   "resources": {
     "projects": {
-      "methods": {
-        "deleteEvents": {
-          "description": "Deletes all error events of a given project.",
-          "httpMethod": "DELETE",
-          "parameterOrder": [
-            "projectName"
-          ],
-          "response": {
-            "$ref": "DeleteEventsResponse"
-          },
-          "scopes": [
-            "https://www.googleapis.com/auth/cloud-platform"
-          ],
-          "parameters": {
-            "projectName": {
-              "description": "[Required] The resource name of the Google Cloud Platform project. Written\nas `projects/` plus the\n[Google Cloud Platform project\nID](https://support.google.com/cloud/answer/6158840).\nExample: `projects/my-project-123`.",
-              "required": true,
-              "type": "string",
-              "pattern": "^projects/[^/]+$",
-              "location": "path"
-            }
-          },
-          "flatPath": "v1beta1/projects/{projectsId}/events",
-          "id": "clouderrorreporting.projects.deleteEvents",
-          "path": "v1beta1/{+projectName}/events"
-        }
-      },
       "resources": {
-        "events": {
-          "methods": {
-            "report": {
-              "flatPath": "v1beta1/projects/{projectsId}/events:report",
-              "path": "v1beta1/{+projectName}/events:report",
-              "id": "clouderrorreporting.projects.events.report",
-              "request": {
-                "$ref": "ReportedErrorEvent"
-              },
-              "description": "Report an individual error event.\n\nThis endpoint accepts \u003cstrong\u003eeither\u003c/strong\u003e an OAuth token,\n\u003cstrong\u003eor\u003c/strong\u003e an\n\u003ca href=\"https://support.google.com/cloud/answer/6158862\"\u003eAPI key\u003c/a\u003e\nfor authentication. To use an API key, append it to the URL as the value of\na `key` parameter. For example:\n\u003cpre\u003ePOST https://clouderrorreporting.googleapis.com/v1beta1/projects/example-project/events:report?key=123ABC456\u003c/pre\u003e",
-              "response": {
-                "$ref": "ReportErrorEventResponse"
-              },
-              "parameterOrder": [
-                "projectName"
-              ],
-              "httpMethod": "POST",
-              "parameters": {
-                "projectName": {
-                  "description": "[Required] The resource name of the Google Cloud Platform project. Written\nas `projects/` plus the\n[Google Cloud Platform project ID](https://support.google.com/cloud/answer/6158840).\nExample: `projects/my-project-123`.",
-                  "required": true,
-                  "type": "string",
-                  "pattern": "^projects/[^/]+$",
-                  "location": "path"
-                }
-              },
-              "scopes": [
-                "https://www.googleapis.com/auth/cloud-platform"
-              ]
-            },
-            "list": {
-              "description": "Lists the specified events.",
-              "response": {
-                "$ref": "ListEventsResponse"
-              },
-              "parameterOrder": [
-                "projectName"
-              ],
-              "httpMethod": "GET",
-              "parameters": {
-                "serviceFilter.resourceType": {
-                  "description": "[Optional] The exact value to match against\n[`ServiceContext.resource_type`](/error-reporting/reference/rest/v1beta1/ServiceContext#FIELDS.resource_type).",
-                  "type": "string",
-                  "location": "query"
-                },
-                "timeRange.period": {
-                  "description": "Restricts the query to the specified time range.",
-                  "type": "string",
-                  "location": "query",
-                  "enum": [
-                    "PERIOD_UNSPECIFIED",
-                    "PERIOD_1_HOUR",
-                    "PERIOD_6_HOURS",
-                    "PERIOD_1_DAY",
-                    "PERIOD_1_WEEK",
-                    "PERIOD_30_DAYS"
-                  ]
-                },
-                "projectName": {
-                  "location": "path",
-                  "description": "[Required] The resource name of the Google Cloud Platform project. Written\nas `projects/` plus the\n[Google Cloud Platform project\nID](https://support.google.com/cloud/answer/6158840).\nExample: `projects/my-project-123`.",
-                  "required": true,
-                  "type": "string",
-                  "pattern": "^projects/[^/]+$"
-                },
-                "groupId": {
-                  "location": "query",
-                  "description": "[Required] The group for which events shall be returned.",
-                  "type": "string"
-                },
-                "serviceFilter.service": {
-                  "location": "query",
-                  "description": "[Optional] The exact value to match against\n[`ServiceContext.service`](/error-reporting/reference/rest/v1beta1/ServiceContext#FIELDS.service).",
-                  "type": "string"
-                },
-                "pageToken": {
-                  "description": "[Optional] A `next_page_token` provided by a previous response.",
-                  "type": "string",
-                  "location": "query"
-                },
-                "pageSize": {
-                  "description": "[Optional] The maximum number of results to return per response.",
-                  "format": "int32",
-                  "type": "integer",
-                  "location": "query"
-                },
-                "serviceFilter.version": {
-                  "location": "query",
-                  "description": "[Optional] The exact value to match against\n[`ServiceContext.version`](/error-reporting/reference/rest/v1beta1/ServiceContext#FIELDS.version).",
-                  "type": "string"
-                }
-              },
-              "scopes": [
-                "https://www.googleapis.com/auth/cloud-platform"
-              ],
-              "flatPath": "v1beta1/projects/{projectsId}/events",
-              "path": "v1beta1/{+projectName}/events",
-              "id": "clouderrorreporting.projects.events.list"
-            }
-          }
-        },
         "groups": {
           "methods": {
             "get": {
-              "description": "Get the specified group.",
-              "httpMethod": "GET",
-              "parameterOrder": [
-                "groupName"
-              ],
               "response": {
                 "$ref": "ErrorGroup"
               },
-              "parameters": {
-                "groupName": {
-                  "location": "path",
-                  "description": "[Required] The group resource name. Written as\n\u003ccode\u003eprojects/\u003cvar\u003eprojectID\u003c/var\u003e/groups/\u003cvar\u003egroup_name\u003c/var\u003e\u003c/code\u003e.\nCall\n\u003ca href=\"/error-reporting/reference/rest/v1beta1/projects.groupStats/list\"\u003e\n\u003ccode\u003egroupStats.list\u003c/code\u003e\u003c/a\u003e to return a list of groups belonging to\nthis project.\n\nExample: \u003ccode\u003eprojects/my-project-123/groups/my-group\u003c/code\u003e",
-                  "required": true,
-                  "type": "string",
-                  "pattern": "^projects/[^/]+/groups/[^/]+$"
-                }
-              },
+              "parameterOrder": [
+                "groupName"
+              ],
+              "httpMethod": "GET",
               "scopes": [
                 "https://www.googleapis.com/auth/cloud-platform"
               ],
+              "parameters": {
+                "groupName": {
+                  "description": "[Required] The group resource name. Written as\n\u003ccode\u003eprojects/\u003cvar\u003eprojectID\u003c/var\u003e/groups/\u003cvar\u003egroup_name\u003c/var\u003e\u003c/code\u003e.\nCall\n\u003ca href=\"/error-reporting/reference/rest/v1beta1/projects.groupStats/list\"\u003e\n\u003ccode\u003egroupStats.list\u003c/code\u003e\u003c/a\u003e to return a list of groups belonging to\nthis project.\n\nExample: \u003ccode\u003eprojects/my-project-123/groups/my-group\u003c/code\u003e",
+                  "required": true,
+                  "type": "string",
+                  "pattern": "^projects/[^/]+/groups/[^/]+$",
+                  "location": "path"
+                }
+              },
               "flatPath": "v1beta1/projects/{projectsId}/groups/{groupsId}",
+              "path": "v1beta1/{+groupName}",
               "id": "clouderrorreporting.projects.groups.get",
-              "path": "v1beta1/{+groupName}"
+              "description": "Get the specified group."
             },
             "update": {
+              "path": "v1beta1/{+name}",
+              "id": "clouderrorreporting.projects.groups.update",
               "description": "Replace the data for the specified group.\nFails if the group does not exist.",
               "request": {
                 "$ref": "ErrorGroup"
               },
-              "httpMethod": "PUT",
-              "parameterOrder": [
-                "name"
-              ],
               "response": {
                 "$ref": "ErrorGroup"
               },
+              "parameterOrder": [
+                "name"
+              ],
+              "httpMethod": "PUT",
               "scopes": [
                 "https://www.googleapis.com/auth/cloud-platform"
               ],
@@ -519,32 +389,63 @@
                   "location": "path"
                 }
               },
-              "flatPath": "v1beta1/projects/{projectsId}/groups/{groupsId}",
-              "id": "clouderrorreporting.projects.groups.update",
-              "path": "v1beta1/{+name}"
+              "flatPath": "v1beta1/projects/{projectsId}/groups/{groupsId}"
             }
           }
         },
         "groupStats": {
           "methods": {
             "list": {
-              "description": "Lists the specified groups.",
+              "httpMethod": "GET",
               "response": {
                 "$ref": "ListGroupStatsResponse"
               },
               "parameterOrder": [
                 "projectName"
               ],
-              "httpMethod": "GET",
               "scopes": [
                 "https://www.googleapis.com/auth/cloud-platform"
               ],
               "parameters": {
+                "timeRange.period": {
+                  "enum": [
+                    "PERIOD_UNSPECIFIED",
+                    "PERIOD_1_HOUR",
+                    "PERIOD_6_HOURS",
+                    "PERIOD_1_DAY",
+                    "PERIOD_1_WEEK",
+                    "PERIOD_30_DAYS"
+                  ],
+                  "description": "Restricts the query to the specified time range.",
+                  "type": "string",
+                  "location": "query"
+                },
+                "alignment": {
+                  "enum": [
+                    "ERROR_COUNT_ALIGNMENT_UNSPECIFIED",
+                    "ALIGNMENT_EQUAL_ROUNDED",
+                    "ALIGNMENT_EQUAL_AT_END"
+                  ],
+                  "description": "[Optional] The alignment of the timed counts to be returned.\nDefault is `ALIGNMENT_EQUAL_AT_END`.",
+                  "type": "string",
+                  "location": "query"
+                },
+                "groupId": {
+                  "description": "[Optional] List all \u003ccode\u003eErrorGroupStats\u003c/code\u003e with these IDs.",
+                  "type": "string",
+                  "repeated": true,
+                  "location": "query"
+                },
+                "serviceFilter.service": {
+                  "location": "query",
+                  "description": "[Optional] The exact value to match against\n[`ServiceContext.service`](/error-reporting/reference/rest/v1beta1/ServiceContext#FIELDS.service).",
+                  "type": "string"
+                },
                 "pageSize": {
+                  "location": "query",
                   "description": "[Optional] The maximum number of results to return per response.\nDefault is 20.",
                   "format": "int32",
-                  "type": "integer",
-                  "location": "query"
+                  "type": "integer"
                 },
                 "order": {
                   "location": "query",
@@ -563,17 +464,17 @@
                   "description": "[Optional] The exact value to match against\n[`ServiceContext.version`](/error-reporting/reference/rest/v1beta1/ServiceContext#FIELDS.version).",
                   "type": "string"
                 },
+                "serviceFilter.resourceType": {
+                  "location": "query",
+                  "description": "[Optional] The exact value to match against\n[`ServiceContext.resource_type`](/error-reporting/reference/rest/v1beta1/ServiceContext#FIELDS.resource_type).",
+                  "type": "string"
+                },
                 "alignmentTime": {
                   "location": "query",
                   "description": "[Optional] Time where the timed counts shall be aligned if rounded\nalignment is chosen. Default is 00:00 UTC.",
                   "format": "google-datetime",
                   "type": "string"
                 },
-                "serviceFilter.resourceType": {
-                  "location": "query",
-                  "description": "[Optional] The exact value to match against\n[`ServiceContext.resource_type`](/error-reporting/reference/rest/v1beta1/ServiceContext#FIELDS.resource_type).",
-                  "type": "string"
-                },
                 "projectName": {
                   "description": "[Required] The resource name of the Google Cloud Platform project. Written\nas \u003ccode\u003eprojects/\u003c/code\u003e plus the\n\u003ca href=\"https://support.google.com/cloud/answer/6158840\"\u003eGoogle Cloud\nPlatform project ID\u003c/a\u003e.\n\nExample: \u003ccode\u003eprojects/my-project-123\u003c/code\u003e.",
                   "required": true,
@@ -591,9 +492,81 @@
                   "description": "[Optional] A `next_page_token` provided by a previous response. To view\nadditional results, pass this token along with the identical query\nparameters as the first request.",
                   "type": "string",
                   "location": "query"
+                }
+              },
+              "flatPath": "v1beta1/projects/{projectsId}/groupStats",
+              "id": "clouderrorreporting.projects.groupStats.list",
+              "path": "v1beta1/{+projectName}/groupStats",
+              "description": "Lists the specified groups."
+            }
+          }
+        },
+        "events": {
+          "methods": {
+            "report": {
+              "description": "Report an individual error event.\n\nThis endpoint accepts \u003cstrong\u003eeither\u003c/strong\u003e an OAuth token,\n\u003cstrong\u003eor\u003c/strong\u003e an\n\u003ca href=\"https://support.google.com/cloud/answer/6158862\"\u003eAPI key\u003c/a\u003e\nfor authentication. To use an API key, append it to the URL as the value of\na `key` parameter. For example:\n\u003cpre\u003ePOST https://clouderrorreporting.googleapis.com/v1beta1/projects/example-project/events:report?key=123ABC456\u003c/pre\u003e",
+              "request": {
+                "$ref": "ReportedErrorEvent"
+              },
+              "response": {
+                "$ref": "ReportErrorEventResponse"
+              },
+              "parameterOrder": [
+                "projectName"
+              ],
+              "httpMethod": "POST",
+              "scopes": [
+                "https://www.googleapis.com/auth/cloud-platform"
+              ],
+              "parameters": {
+                "projectName": {
+                  "description": "[Required] The resource name of the Google Cloud Platform project. Written\nas `projects/` plus the\n[Google Cloud Platform project ID](https://support.google.com/cloud/answer/6158840).\nExample: `projects/my-project-123`.",
+                  "required": true,
+                  "type": "string",
+                  "pattern": "^projects/[^/]+$",
+                  "location": "path"
+                }
+              },
+              "flatPath": "v1beta1/projects/{projectsId}/events:report",
+              "path": "v1beta1/{+projectName}/events:report",
+              "id": "clouderrorreporting.projects.events.report"
+            },
+            "list": {
+              "response": {
+                "$ref": "ListEventsResponse"
+              },
+              "parameterOrder": [
+                "projectName"
+              ],
+              "httpMethod": "GET",
+              "parameters": {
+                "serviceFilter.service": {
+                  "location": "query",
+                  "description": "[Optional] The exact value to match against\n[`ServiceContext.service`](/error-reporting/reference/rest/v1beta1/ServiceContext#FIELDS.service).",
+                  "type": "string"
+                },
+                "pageToken": {
+                  "location": "query",
+                  "description": "[Optional] A `next_page_token` provided by a previous response.",
+                  "type": "string"
+                },
+                "pageSize": {
+                  "description": "[Optional] The maximum number of results to return per response.",
+                  "format": "int32",
+                  "type": "integer",
+                  "location": "query"
+                },
+                "serviceFilter.version": {
+                  "location": "query",
+                  "description": "[Optional] The exact value to match against\n[`ServiceContext.version`](/error-reporting/reference/rest/v1beta1/ServiceContext#FIELDS.version).",
+                  "type": "string"
+                },
+                "serviceFilter.resourceType": {
+                  "location": "query",
+                  "description": "[Optional] The exact value to match against\n[`ServiceContext.resource_type`](/error-reporting/reference/rest/v1beta1/ServiceContext#FIELDS.resource_type).",
+                  "type": "string"
                 },
                 "timeRange.period": {
-                  "location": "query",
                   "enum": [
                     "PERIOD_UNSPECIFIED",
                     "PERIOD_1_HOUR",
@@ -603,109 +576,67 @@
                     "PERIOD_30_DAYS"
                   ],
                   "description": "Restricts the query to the specified time range.",
-                  "type": "string"
+                  "type": "string",
+                  "location": "query"
                 },
-                "alignment": {
-                  "location": "query",
-                  "enum": [
-                    "ERROR_COUNT_ALIGNMENT_UNSPECIFIED",
-                    "ALIGNMENT_EQUAL_ROUNDED",
-                    "ALIGNMENT_EQUAL_AT_END"
-                  ],
-                  "description": "[Optional] The alignment of the timed counts to be returned.\nDefault is `ALIGNMENT_EQUAL_AT_END`.",
-                  "type": "string"
+                "projectName": {
+                  "description": "[Required] The resource name of the Google Cloud Platform project. Written\nas `projects/` plus the\n[Google Cloud Platform project\nID](https://support.google.com/cloud/answer/6158840).\nExample: `projects/my-project-123`.",
+                  "required": true,
+                  "type": "string",
+                  "pattern": "^projects/[^/]+$",
+                  "location": "path"
                 },
                 "groupId": {
-                  "location": "query",
-                  "description": "[Optional] List all \u003ccode\u003eErrorGroupStats\u003c/code\u003e with these IDs.",
-                  "type": "string",
-                  "repeated": true
-                },
-                "serviceFilter.service": {
-                  "description": "[Optional] The exact value to match against\n[`ServiceContext.service`](/error-reporting/reference/rest/v1beta1/ServiceContext#FIELDS.service).",
+                  "description": "[Required] The group for which events shall be returned.",
                   "type": "string",
                   "location": "query"
                 }
               },
-              "flatPath": "v1beta1/projects/{projectsId}/groupStats",
-              "path": "v1beta1/{+projectName}/groupStats",
-              "id": "clouderrorreporting.projects.groupStats.list"
+              "scopes": [
+                "https://www.googleapis.com/auth/cloud-platform"
+              ],
+              "flatPath": "v1beta1/projects/{projectsId}/events",
+              "path": "v1beta1/{+projectName}/events",
+              "id": "clouderrorreporting.projects.events.list",
+              "description": "Lists the specified events."
             }
           }
         }
+      },
+      "methods": {
+        "deleteEvents": {
+          "id": "clouderrorreporting.projects.deleteEvents",
+          "path": "v1beta1/{+projectName}/events",
+          "description": "Deletes all error events of a given project.",
+          "httpMethod": "DELETE",
+          "response": {
+            "$ref": "DeleteEventsResponse"
+          },
+          "parameterOrder": [
+            "projectName"
+          ],
+          "parameters": {
+            "projectName": {
+              "description": "[Required] The resource name of the Google Cloud Platform project. Written\nas `projects/` plus the\n[Google Cloud Platform project\nID](https://support.google.com/cloud/answer/6158840).\nExample: `projects/my-project-123`.",
+              "required": true,
+              "type": "string",
+              "pattern": "^projects/[^/]+$",
+              "location": "path"
+            }
+          },
+          "scopes": [
+            "https://www.googleapis.com/auth/cloud-platform"
+          ],
+          "flatPath": "v1beta1/projects/{projectsId}/events"
+        }
       }
     }
   },
   "parameters": {
-    "upload_protocol": {
-      "description": "Upload protocol for media (e.g. \"raw\", \"multipart\").",
-      "type": "string",
-      "location": "query"
-    },
-    "prettyPrint": {
-      "description": "Returns response with indentations and line breaks.",
-      "type": "boolean",
-      "default": "true",
-      "location": "query"
-    },
-    "fields": {
-      "description": "Selector specifying which fields to include in a partial response.",
-      "type": "string",
-      "location": "query"
-    },
-    "uploadType": {
-      "location": "query",
-      "description": "Legacy upload protocol for media (e.g. \"media\", \"multipart\").",
-      "type": "string"
-    },
-    "$.xgafv": {
-      "enumDescriptions": [
-        "v1 error format",
-        "v2 error format"
-      ],
-      "location": "query",
-      "enum": [
-        "1",
-        "2"
-      ],
-      "description": "V1 error format.",
-      "type": "string"
-    },
-    "callback": {
-      "description": "JSONP",
-      "type": "string",
-      "location": "query"
-    },
-    "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": {
-      "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"
-    },
-    "access_token": {
-      "description": "OAuth access token.",
-      "type": "string",
-      "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"
+      "type": "string",
+      "location": "query"
     },
     "pp": {
       "location": "query",
@@ -722,7 +653,76 @@
       "location": "query",
       "description": "OAuth bearer token.",
       "type": "string"
+    },
+    "upload_protocol": {
+      "description": "Upload protocol for media (e.g. \"raw\", \"multipart\").",
+      "type": "string",
+      "location": "query"
+    },
+    "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"
+    },
+    "fields": {
+      "description": "Selector specifying which fields to include in a partial response.",
+      "type": "string",
+      "location": "query"
+    },
+    "$.xgafv": {
+      "enum": [
+        "1",
+        "2"
+      ],
+      "description": "V1 error format.",
+      "type": "string",
+      "enumDescriptions": [
+        "v1 error format",
+        "v2 error format"
+      ],
+      "location": "query"
+    },
+    "callback": {
+      "description": "JSONP",
+      "type": "string",
+      "location": "query"
+    },
+    "alt": {
+      "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",
+      "description": "Data format for response.",
+      "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"
+    },
+    "access_token": {
+      "location": "query",
+      "description": "OAuth access token.",
+      "type": "string"
     }
   },
-  "version": "v1beta1"
+  "version": "v1beta1",
+  "baseUrl": "https://clouderrorreporting.googleapis.com/",
+  "servicePath": "",
+  "description": "Stackdriver Error Reporting groups and counts similar errors from cloud services. The Stackdriver Error Reporting API provides a way to report new errors and read access to error groups and their associated errors.\n",
+  "kind": "discovery#restDescription"
 }
diff --git a/clouderrorreporting/v1beta1/clouderrorreporting-gen.go b/clouderrorreporting/v1beta1/clouderrorreporting-gen.go
index 0e62c15..dd95a8e 100644
--- a/clouderrorreporting/v1beta1/clouderrorreporting-gen.go
+++ b/clouderrorreporting/v1beta1/clouderrorreporting-gen.go
@@ -61,10 +61,9 @@
 }
 
 type Service struct {
-	client                    *http.Client
-	BasePath                  string // API endpoint base URL
-	UserAgent                 string // optional additional User-Agent fragment
-	GoogleClientHeaderElement string // client header fragment, for Google use only
+	client    *http.Client
+	BasePath  string // API endpoint base URL
+	UserAgent string // optional additional User-Agent fragment
 
 	Projects *ProjectsService
 }
@@ -76,10 +75,6 @@
 	return googleapi.UserAgent + " " + s.UserAgent
 }
 
-func (s *Service) clientHeader() string {
-	return gensupport.GoogleClientHeader("20170210", s.GoogleClientHeaderElement)
-}
-
 func NewProjectsService(s *Service) *ProjectsService {
 	rs := &ProjectsService{s: s}
 	rs.Events = NewProjectsEventsService(s)
@@ -634,6 +629,9 @@
 	// 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.
 	Version string `json:"version,omitempty"`
 
 	// ForceSendFields is a list of field names (e.g. "ResourceType") to
@@ -660,13 +658,12 @@
 }
 
 // SourceLocation: Indicates a location in the source code of the
-// service for which
-// errors are reported.
-// 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. All fields are optional.
+// 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.
 type SourceLocation struct {
 	// FilePath: The source code filename, which can include a truncated
 	// relative
@@ -821,7 +818,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	var body io.Reader = nil
 	c.urlParams_.Set("alt", alt)
 	urls := googleapi.ResolveRelative(c.s.BasePath, "v1beta1/{+projectName}/events")
@@ -1024,7 +1020,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	if c.ifNoneMatch_ != "" {
 		reqHeaders.Set("If-None-Match", c.ifNoneMatch_)
 	}
@@ -1231,7 +1226,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	var body io.Reader = nil
 	body, err := googleapi.WithoutDataWrapper.JSONReader(c.reportederrorevent)
 	if err != nil {
@@ -1491,7 +1485,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	if c.ifNoneMatch_ != "" {
 		reqHeaders.Set("If-None-Match", c.ifNoneMatch_)
 	}
@@ -1731,7 +1724,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	if c.ifNoneMatch_ != "" {
 		reqHeaders.Set("If-None-Match", c.ifNoneMatch_)
 	}
@@ -1863,7 +1855,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	var body io.Reader = nil
 	body, err := googleapi.WithoutDataWrapper.JSONReader(c.errorgroup)
 	if err != nil {
diff --git a/cloudfunctions/v1/cloudfunctions-api.json b/cloudfunctions/v1/cloudfunctions-api.json
index 39e0fd1..d875e7e 100644
--- a/cloudfunctions/v1/cloudfunctions-api.json
+++ b/cloudfunctions/v1/cloudfunctions-api.json
@@ -7,28 +7,28 @@
           "methods": {
             "get": {
               "description": "Get information about a location.",
-              "response": {
-                "$ref": "Location"
-              },
               "httpMethod": "GET",
               "parameterOrder": [
                 "name"
               ],
+              "response": {
+                "$ref": "Location"
+              },
               "parameters": {
                 "name": {
+                  "pattern": "^projects/[^/]+/locations/[^/]+$",
+                  "location": "path",
                   "description": "Resource name for the location.",
                   "required": true,
-                  "type": "string",
-                  "pattern": "^projects/[^/]+/locations/[^/]+$",
-                  "location": "path"
+                  "type": "string"
                 }
               },
               "scopes": [
                 "https://www.googleapis.com/auth/cloud-platform"
               ],
               "flatPath": "v1/projects/{projectsId}/locations/{locationsId}",
-              "path": "v1/{+name}",
-              "id": "cloudfunctions.projects.locations.get"
+              "id": "cloudfunctions.projects.locations.get",
+              "path": "v1/{+name}"
             }
           }
         }
@@ -36,26 +36,80 @@
     }
   },
   "parameters": {
-    "quotaUser": {
+    "uploadType": {
+      "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.",
+      "description": "Legacy upload protocol for media (e.g. \"media\", \"multipart\")."
+    },
+    "fields": {
+      "location": "query",
+      "description": "Selector specifying which fields to include in a partial response.",
       "type": "string"
     },
-    "pp": {
+    "$.xgafv": {
+      "enumDescriptions": [
+        "v1 error format",
+        "v2 error format"
+      ],
       "location": "query",
+      "enum": [
+        "1",
+        "2"
+      ],
+      "description": "V1 error format.",
+      "type": "string"
+    },
+    "callback": {
+      "type": "string",
+      "location": "query",
+      "description": "JSONP"
+    },
+    "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",
+      "description": "Data format for response.",
+      "default": "json",
+      "enum": [
+        "json",
+        "media",
+        "proto"
+      ],
+      "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"
+    },
+    "access_token": {
+      "location": "query",
+      "description": "OAuth access token.",
+      "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."
+    },
+    "pp": {
       "description": "Pretty-print response.",
       "type": "boolean",
-      "default": "true"
-    },
-    "bearer_token": {
-      "description": "OAuth bearer token.",
-      "type": "string",
+      "default": "true",
       "location": "query"
     },
     "oauth_token": {
+      "location": "query",
       "description": "OAuth 2.0 token for the current user.",
+      "type": "string"
+    },
+    "bearer_token": {
       "type": "string",
-      "location": "query"
+      "location": "query",
+      "description": "OAuth bearer token."
     },
     "upload_protocol": {
       "description": "Upload protocol for media (e.g. \"raw\", \"multipart\").",
@@ -67,74 +121,50 @@
       "type": "boolean",
       "default": "true",
       "location": "query"
-    },
-    "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"
-    },
-    "callback": {
-      "location": "query",
-      "description": "JSONP",
-      "type": "string"
-    },
-    "$.xgafv": {
-      "type": "string",
-      "enumDescriptions": [
-        "v1 error format",
-        "v2 error format"
-      ],
-      "location": "query",
-      "enum": [
-        "1",
-        "2"
-      ],
-      "description": "V1 error format."
-    },
-    "alt": {
-      "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",
-      "description": "Data format for response.",
-      "default": "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"
-    },
-    "access_token": {
-      "location": "query",
-      "description": "OAuth access token.",
-      "type": "string"
     }
   },
   "version": "v1",
   "baseUrl": "https://cloudfunctions.googleapis.com/",
-  "kind": "discovery#restDescription",
-  "description": "API for managing lightweight user-provided functions executed in response to events.",
   "servicePath": "",
+  "description": "API for managing lightweight user-provided functions executed in response to events.",
+  "kind": "discovery#restDescription",
   "basePath": "",
   "id": "cloudfunctions:v1",
+  "revision": "20170324",
   "documentationLink": "https://cloud.google.com/functions",
-  "revision": "20170314",
   "discoveryVersion": "v1",
   "version_module": "True",
   "schemas": {
+    "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.\nFor example: `\"projects/example-project/locations/us-east1\"`",
+          "type": "string"
+        },
+        "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\nlocation.",
+          "type": "object"
+        },
+        "labels": {
+          "additionalProperties": {
+            "type": "string"
+          },
+          "description": "Cross-service attributes for the location. For example\n\n    {\"cloud.googleapis.com/region\": \"us-east1\"}",
+          "type": "object"
+        }
+      },
+      "id": "Location"
+    },
     "OperationMetadataV1Beta2": {
       "description": "Metadata describing an Operation",
       "type": "object",
@@ -152,6 +182,12 @@
           }
         },
         "type": {
+          "enum": [
+            "OPERATION_UNSPECIFIED",
+            "CREATE_FUNCTION",
+            "UPDATE_FUNCTION",
+            "DELETE_FUNCTION"
+          ],
           "description": "Type of operation.",
           "type": "string",
           "enumDescriptions": [
@@ -159,53 +195,17 @@
             "Triggered by CreateFunction call",
             "Triggered by UpdateFunction call",
             "Triggered by DeleteFunction call."
-          ],
-          "enum": [
-            "OPERATION_UNSPECIFIED",
-            "CREATE_FUNCTION",
-            "UPDATE_FUNCTION",
-            "DELETE_FUNCTION"
           ]
         }
       },
       "id": "OperationMetadataV1Beta2"
-    },
-    "Location": {
-      "description": "A resource that represents Google Cloud Platform location.",
-      "type": "object",
-      "properties": {
-        "labels": {
-          "description": "Cross-service attributes for the location. For example\n\n    {\"cloud.googleapis.com/region\": \"us-east1\"}",
-          "type": "object",
-          "additionalProperties": {
-            "type": "string"
-          }
-        },
-        "name": {
-          "description": "Resource name for the location, which may vary between implementations.\nFor example: `\"projects/example-project/locations/us-east1\"`",
-          "type": "string"
-        },
-        "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\nlocation.",
-          "type": "object"
-        }
-      },
-      "id": "Location"
     }
   },
-  "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"
+    "x16": "http://www.google.com/images/icons/product/search-16.gif",
+    "x32": "http://www.google.com/images/icons/product/search-32.gif"
   },
+  "protocol": "rest",
   "canonicalName": "Cloud Functions",
   "auth": {
     "oauth2": {
diff --git a/cloudfunctions/v1/cloudfunctions-gen.go b/cloudfunctions/v1/cloudfunctions-gen.go
index a729efb..516edd4 100644
--- a/cloudfunctions/v1/cloudfunctions-gen.go
+++ b/cloudfunctions/v1/cloudfunctions-gen.go
@@ -61,10 +61,9 @@
 }
 
 type Service struct {
-	client                    *http.Client
-	BasePath                  string // API endpoint base URL
-	UserAgent                 string // optional additional User-Agent fragment
-	GoogleClientHeaderElement string // client header fragment, for Google use only
+	client    *http.Client
+	BasePath  string // API endpoint base URL
+	UserAgent string // optional additional User-Agent fragment
 
 	Projects *ProjectsService
 }
@@ -76,10 +75,6 @@
 	return googleapi.UserAgent + " " + s.UserAgent
 }
 
-func (s *Service) clientHeader() string {
-	return gensupport.GoogleClientHeader("20170210", s.GoogleClientHeaderElement)
-}
-
 func NewProjectsService(s *Service) *ProjectsService {
 	rs := &ProjectsService{s: s}
 	rs.Locations = NewProjectsLocationsService(s)
@@ -250,7 +245,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	if c.ifNoneMatch_ != "" {
 		reqHeaders.Set("If-None-Match", c.ifNoneMatch_)
 	}
diff --git a/cloudfunctions/v1beta2/cloudfunctions-api.json b/cloudfunctions/v1beta2/cloudfunctions-api.json
index 3087d1e..5590656 100644
--- a/cloudfunctions/v1beta2/cloudfunctions-api.json
+++ b/cloudfunctions/v1beta2/cloudfunctions-api.json
@@ -1,419 +1,29 @@
 {
-  "rootUrl": "https://cloudfunctions.googleapis.com/",
-  "ownerDomain": "google.com",
-  "name": "cloudfunctions",
-  "batchPath": "batch",
-  "title": "Google Cloud Functions API",
-  "ownerName": "Google",
-  "resources": {
-    "projects": {
-      "resources": {
-        "locations": {
-          "methods": {
-            "list": {
-              "httpMethod": "GET",
-              "response": {
-                "$ref": "ListLocationsResponse"
-              },
-              "parameterOrder": [
-                "name"
-              ],
-              "parameters": {
-                "filter": {
-                  "type": "string",
-                  "location": "query",
-                  "description": "The standard list filter."
-                },
-                "name": {
-                  "location": "path",
-                  "description": "The resource that owns the locations collection, if applicable.",
-                  "required": true,
-                  "type": "string",
-                  "pattern": "^projects/[^/]+$"
-                },
-                "pageToken": {
-                  "location": "query",
-                  "description": "The standard list page token.",
-                  "type": "string"
-                },
-                "pageSize": {
-                  "location": "query",
-                  "description": "The standard list page size.",
-                  "format": "int32",
-                  "type": "integer"
-                }
-              },
-              "scopes": [
-                "https://www.googleapis.com/auth/cloud-platform"
-              ],
-              "flatPath": "v1beta2/projects/{projectsId}/locations",
-              "id": "cloudfunctions.projects.locations.list",
-              "path": "v1beta2/{+name}/locations",
-              "description": "Lists information about the supported locations for this service."
-            }
-          },
-          "resources": {
-            "functions": {
-              "methods": {
-                "get": {
-                  "flatPath": "v1beta2/projects/{projectsId}/locations/{locationsId}/functions/{functionsId}",
-                  "id": "cloudfunctions.projects.locations.functions.get",
-                  "path": "v1beta2/{+name}",
-                  "description": "Returns a function with the given name from the requested project.",
-                  "httpMethod": "GET",
-                  "response": {
-                    "$ref": "CloudFunction"
-                  },
-                  "parameterOrder": [
-                    "name"
-                  ],
-                  "parameters": {
-                    "name": {
-                      "description": "The name of the function which details should be obtained.",
-                      "required": true,
-                      "type": "string",
-                      "pattern": "^projects/[^/]+/locations/[^/]+/functions/[^/]+$",
-                      "location": "path"
-                    }
-                  },
-                  "scopes": [
-                    "https://www.googleapis.com/auth/cloud-platform"
-                  ]
-                },
-                "update": {
-                  "flatPath": "v1beta2/projects/{projectsId}/locations/{locationsId}/functions/{functionsId}",
-                  "path": "v1beta2/{+name}",
-                  "id": "cloudfunctions.projects.locations.functions.update",
-                  "description": "Updates existing function.",
-                  "request": {
-                    "$ref": "CloudFunction"
-                  },
-                  "response": {
-                    "$ref": "Operation"
-                  },
-                  "parameterOrder": [
-                    "name"
-                  ],
-                  "httpMethod": "PUT",
-                  "scopes": [
-                    "https://www.googleapis.com/auth/cloud-platform"
-                  ],
-                  "parameters": {
-                    "name": {
-                      "description": "The name of the function to be updated.",
-                      "required": true,
-                      "type": "string",
-                      "pattern": "^projects/[^/]+/locations/[^/]+/functions/[^/]+$",
-                      "location": "path"
-                    }
-                  }
-                },
-                "delete": {
-                  "flatPath": "v1beta2/projects/{projectsId}/locations/{locationsId}/functions/{functionsId}",
-                  "path": "v1beta2/{+name}",
-                  "id": "cloudfunctions.projects.locations.functions.delete",
-                  "description": "Deletes a function with the given name from the specified project. If the\ngiven function is used by some trigger, the trigger will be updated to\nremove this function.",
-                  "response": {
-                    "$ref": "Operation"
-                  },
-                  "parameterOrder": [
-                    "name"
-                  ],
-                  "httpMethod": "DELETE",
-                  "parameters": {
-                    "name": {
-                      "description": "The name of the function which should be deleted.",
-                      "required": true,
-                      "type": "string",
-                      "pattern": "^projects/[^/]+/locations/[^/]+/functions/[^/]+$",
-                      "location": "path"
-                    }
-                  },
-                  "scopes": [
-                    "https://www.googleapis.com/auth/cloud-platform"
-                  ]
-                },
-                "list": {
-                  "httpMethod": "GET",
-                  "response": {
-                    "$ref": "ListFunctionsResponse"
-                  },
-                  "parameterOrder": [
-                    "location"
-                  ],
-                  "parameters": {
-                    "location": {
-                      "location": "path",
-                      "description": "The project and location from which the function should be listed,\nspecified in the format `projects/*/locations/*`\nIf you want to list functions in all locations, use \"-\" in place of a\nlocation.",
-                      "required": true,
-                      "type": "string",
-                      "pattern": "^projects/[^/]+/locations/[^/]+$"
-                    },
-                    "pageToken": {
-                      "description": "The value returned by the last\n`ListFunctionsResponse`; indicates that\nthis is a continuation of a prior `ListFunctions` call, and that the\nsystem should return the next page of data.",
-                      "type": "string",
-                      "location": "query"
-                    },
-                    "pageSize": {
-                      "description": "Maximum number of functions to return per call.",
-                      "format": "int32",
-                      "type": "integer",
-                      "location": "query"
-                    }
-                  },
-                  "scopes": [
-                    "https://www.googleapis.com/auth/cloud-platform"
-                  ],
-                  "flatPath": "v1beta2/projects/{projectsId}/locations/{locationsId}/functions",
-                  "id": "cloudfunctions.projects.locations.functions.list",
-                  "path": "v1beta2/{+location}/functions",
-                  "description": "Returns a list of functions that belong to the requested project."
-                },
-                "create": {
-                  "flatPath": "v1beta2/projects/{projectsId}/locations/{locationsId}/functions",
-                  "id": "cloudfunctions.projects.locations.functions.create",
-                  "path": "v1beta2/{+location}/functions",
-                  "request": {
-                    "$ref": "CloudFunction"
-                  },
-                  "description": "Creates a new function. If a function with the given name already exists in\nthe specified project, the long running operation will return\n`ALREADY_EXISTS` error.",
-                  "httpMethod": "POST",
-                  "parameterOrder": [
-                    "location"
-                  ],
-                  "response": {
-                    "$ref": "Operation"
-                  },
-                  "parameters": {
-                    "location": {
-                      "required": true,
-                      "type": "string",
-                      "pattern": "^projects/[^/]+/locations/[^/]+$",
-                      "location": "path",
-                      "description": "The project and location in which the function should be created, specified\nin the format `projects/*/locations/*`"
-                    }
-                  },
-                  "scopes": [
-                    "https://www.googleapis.com/auth/cloud-platform"
-                  ]
-                },
-                "call": {
-                  "flatPath": "v1beta2/projects/{projectsId}/locations/{locationsId}/functions/{functionsId}:call",
-                  "id": "cloudfunctions.projects.locations.functions.call",
-                  "path": "v1beta2/{+name}:call",
-                  "request": {
-                    "$ref": "CallFunctionRequest"
-                  },
-                  "description": "Invokes synchronously deployed function. To be used for testing, very\nlimited traffic allowed.",
-                  "httpMethod": "POST",
-                  "parameterOrder": [
-                    "name"
-                  ],
-                  "response": {
-                    "$ref": "CallFunctionResponse"
-                  },
-                  "parameters": {
-                    "name": {
-                      "location": "path",
-                      "description": "The name of the function to be called.",
-                      "required": true,
-                      "type": "string",
-                      "pattern": "^projects/[^/]+/locations/[^/]+/functions/[^/]+$"
-                    }
-                  },
-                  "scopes": [
-                    "https://www.googleapis.com/auth/cloud-platform"
-                  ]
-                }
-              }
-            }
-          }
-        }
-      }
-    },
-    "operations": {
-      "methods": {
-        "list": {
-          "path": "v1beta2/operations",
-          "id": "cloudfunctions.operations.list",
-          "description": "Lists operations that match the specified filter in the request. If the\nserver doesn't support this method, it returns `UNIMPLEMENTED`.\n\nNOTE: the `name` binding below allows API services to override the binding\nto use different resource name schemes, such as `users/*/operations`.",
-          "parameterOrder": [],
-          "response": {
-            "$ref": "ListOperationsResponse"
-          },
-          "httpMethod": "GET",
-          "parameters": {
-            "pageSize": {
-              "location": "query",
-              "description": "The standard list page size.",
-              "format": "int32",
-              "type": "integer"
-            },
-            "filter": {
-              "location": "query",
-              "description": "The standard list filter.",
-              "type": "string"
-            },
-            "name": {
-              "type": "string",
-              "location": "query",
-              "description": "The name of the operation collection."
-            },
-            "pageToken": {
-              "description": "The standard list page token.",
-              "type": "string",
-              "location": "query"
-            }
-          },
-          "scopes": [
-            "https://www.googleapis.com/auth/cloud-platform"
-          ],
-          "flatPath": "v1beta2/operations"
-        },
-        "get": {
-          "httpMethod": "GET",
-          "response": {
-            "$ref": "Operation"
-          },
-          "parameterOrder": [
-            "name"
-          ],
-          "parameters": {
-            "name": {
-              "description": "The name of the operation resource.",
-              "required": true,
-              "type": "string",
-              "pattern": "^operations/[^/]+$",
-              "location": "path"
-            }
-          },
-          "scopes": [
-            "https://www.googleapis.com/auth/cloud-platform"
-          ],
-          "flatPath": "v1beta2/operations/{operationsId}",
-          "id": "cloudfunctions.operations.get",
-          "path": "v1beta2/{+name}",
-          "description": "Gets the latest state of a long-running operation.  Clients can use this\nmethod to poll the operation result at intervals as recommended by the API\nservice."
-        }
-      }
-    }
-  },
-  "parameters": {
-    "fields": {
-      "description": "Selector specifying which fields to include in a partial response.",
-      "type": "string",
-      "location": "query"
-    },
-    "uploadType": {
-      "location": "query",
-      "description": "Legacy upload protocol for media (e.g. \"media\", \"multipart\").",
-      "type": "string"
-    },
-    "callback": {
-      "location": "query",
-      "description": "JSONP",
-      "type": "string"
-    },
-    "$.xgafv": {
-      "enumDescriptions": [
-        "v1 error format",
-        "v2 error format"
-      ],
-      "location": "query",
-      "enum": [
-        "1",
-        "2"
-      ],
-      "description": "V1 error format.",
-      "type": "string"
-    },
-    "alt": {
-      "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",
-      "description": "Data format for response.",
-      "default": "json",
-      "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.",
-      "type": "string",
-      "location": "query"
-    },
-    "access_token": {
-      "description": "OAuth access token.",
-      "type": "string",
-      "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.",
-      "type": "string",
-      "location": "query"
-    },
-    "pp": {
-      "description": "Pretty-print response.",
-      "type": "boolean",
-      "default": "true",
-      "location": "query"
-    },
-    "bearer_token": {
-      "description": "OAuth bearer token.",
-      "type": "string",
-      "location": "query"
-    },
-    "oauth_token": {
-      "location": "query",
-      "description": "OAuth 2.0 token for the current user.",
-      "type": "string"
-    },
-    "upload_protocol": {
-      "description": "Upload protocol for media (e.g. \"raw\", \"multipart\").",
-      "type": "string",
-      "location": "query"
-    },
-    "prettyPrint": {
-      "description": "Returns response with indentations and line breaks.",
-      "type": "boolean",
-      "default": "true",
-      "location": "query"
-    }
-  },
-  "version": "v1beta2",
-  "baseUrl": "https://cloudfunctions.googleapis.com/",
-  "servicePath": "",
-  "description": "API for managing lightweight user-provided functions executed in response to events.",
-  "kind": "discovery#restDescription",
-  "basePath": "",
-  "id": "cloudfunctions:v1beta2",
+  "revision": "20170324",
   "documentationLink": "https://cloud.google.com/functions",
-  "revision": "20170309",
+  "id": "cloudfunctions:v1beta2",
   "discoveryVersion": "v1",
   "version_module": "True",
   "schemas": {
     "OperationMetadataV1Beta2": {
+      "description": "Metadata describing an Operation",
       "type": "object",
       "properties": {
-        "target": {
-          "description": "Target of the operation - for example\nprojects/project-1/locations/region-1/functions/function-1",
-          "type": "string"
-        },
         "request": {
-          "description": "The original request that started the operation.",
-          "type": "object",
           "additionalProperties": {
-            "type": "any",
-            "description": "Properties of the object. Contains field @type with type URL."
-          }
+            "description": "Properties of the object. Contains field @type with type URL.",
+            "type": "any"
+          },
+          "description": "The original request that started the operation.",
+          "type": "object"
         },
         "type": {
+          "enumDescriptions": [
+            "Unknown operation type.",
+            "Triggered by CreateFunction call",
+            "Triggered by UpdateFunction call",
+            "Triggered by DeleteFunction call."
+          ],
           "enum": [
             "OPERATION_UNSPECIFIED",
             "CREATE_FUNCTION",
@@ -421,17 +31,14 @@
             "DELETE_FUNCTION"
           ],
           "description": "Type of operation.",
-          "type": "string",
-          "enumDescriptions": [
-            "Unknown operation type.",
-            "Triggered by CreateFunction call",
-            "Triggered by UpdateFunction call",
-            "Triggered by DeleteFunction call."
-          ]
+          "type": "string"
+        },
+        "target": {
+          "description": "Target of the operation - for example\nprojects/project-1/locations/region-1/functions/function-1",
+          "type": "string"
         }
       },
-      "id": "OperationMetadataV1Beta2",
-      "description": "Metadata describing an Operation"
+      "id": "OperationMetadataV1Beta2"
     },
     "Status": {
       "description": "The `Status` type defines a logical error model that is suitable for different\nprogramming environments, including REST APIs and RPC APIs. It is used by\n[gRPC](https://github.com/grpc). The error model is designed to be:\n\n- Simple to use and understand for most users\n- Flexible enough to meet unexpected needs\n\n# Overview\n\nThe `Status` message contains three pieces of data: error code, error message,\nand error details. The error code should be an enum value of\ngoogle.rpc.Code, but it may accept additional error codes if needed.  The\nerror message should be a developer-facing English message that helps\ndevelopers *understand* and *resolve* the error. If a localized user-facing\nerror message is needed, put the localized message in the error details or\nlocalize it in the client. The optional error details may contain arbitrary\ninformation about the error. There is a predefined set of error detail types\nin the package `google.rpc` which can be used for common error conditions.\n\n# Language mapping\n\nThe `Status` message is the logical representation of the error model, but it\nis not necessarily the actual wire format. When the `Status` message is\nexposed in different client libraries and different wire protocols, it can be\nmapped differently. For example, it will likely be mapped to some exceptions\nin Java, but more likely mapped to some error codes in C.\n\n# Other uses\n\nThe error model and the `Status` message can be used in a variety of\nenvironments, either with or without APIs, to provide a\nconsistent developer experience across different environments.\n\nExample uses of this error model include:\n\n- Partial errors. If a service needs to return partial errors to the client,\n    it may embed the `Status` in the normal response to indicate the partial\n    errors.\n\n- Workflow errors. A typical workflow has multiple steps. Each step may\n    have a `Status` message for error reporting purpose.\n\n- Batch operations. If a client uses batch request and batch response, the\n    `Status` message should be used directly inside batch response, one for\n    each error sub-response.\n\n- Asynchronous operations. If an API call embeds asynchronous operation\n    results in its response, the status of those operations should be\n    represented directly using the `Status` message.\n\n- Logging. If some API errors are stored in logs, the message `Status` could\n    be used directly after any stripping needed for security/privacy reasons.",
@@ -443,18 +50,18 @@
           "type": "integer"
         },
         "message": {
-          "type": "string",
-          "description": "A developer-facing error message, which should be in English. Any\nuser-facing error message should be localized and sent in the\ngoogle.rpc.Status.details field, or localized by the client."
+          "description": "A developer-facing error message, which should be in English. Any\nuser-facing error message should be localized and sent in the\ngoogle.rpc.Status.details field, or localized by the client.",
+          "type": "string"
         },
         "details": {
           "description": "A list of messages that carry the error details.  There will be a\ncommon 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"
-            },
-            "type": "object"
+            }
           }
         }
       },
@@ -472,7 +79,20 @@
       "id": "CallFunctionRequest"
     },
     "SourceRepository": {
+      "type": "object",
       "properties": {
+        "branch": {
+          "description": "The name of the branch from which the function should be fetched.",
+          "type": "string"
+        },
+        "sourcePath": {
+          "description": "The path within the repository where the function is defined. The path\nshould point to the directory where Cloud Functions files are located. Use\n\"/\" if the function is defined directly in the root directory of a\nrepository.",
+          "type": "string"
+        },
+        "deployedRevision": {
+          "description": "Output only. The id of the revision that was resolved at the moment of\nfunction creation or update. For example when a user deployed from a\nbranch, it will be the revision id of the latest change on this branch at\nthat time. If user deployed from revision then this value will be always\nequal to the revision specified by the user.",
+          "type": "string"
+        },
         "revision": {
           "description": "The id of the revision that captures the state of the repository from\nwhich the function should be fetched.",
           "type": "string"
@@ -484,43 +104,27 @@
         "tag": {
           "description": "The name of the tag that captures the state of the repository from\nwhich the function should be fetched.",
           "type": "string"
-        },
-        "branch": {
-          "description": "The name of the branch from which the function should be fetched.",
-          "type": "string"
-        },
-        "deployedRevision": {
-          "description": "Output only. The id of the revision that was resolved at the moment of\nfunction creation or update. For example when a user deployed from a\nbranch, it will be the revision id of the latest change on this branch at\nthat time. If user deployed from revision then this value will be always\nequal to the revision specified by the user.",
-          "type": "string"
-        },
-        "sourcePath": {
-          "description": "The path within the repository where the function is defined. The path\nshould point to the directory where Cloud Functions files are located. Use\n\"/\" if the function is defined directly in the root directory of a\nrepository.",
-          "type": "string"
         }
       },
       "id": "SourceRepository",
-      "description": "Describes the location of the function source in a remote repository.",
-      "type": "object"
+      "description": "Describes the location of the function source in a remote repository."
     },
     "CloudFunction": {
+      "description": "Describes a Cloud Function that contains user computation executed in\nresponse to an event. It encapsulate function and triggers configurations.",
       "type": "object",
       "properties": {
-        "updateTime": {
-          "description": "Output only. The last update timestamp of a Cloud Function.",
-          "format": "google-datetime",
-          "type": "string"
-        },
-        "latestOperation": {
-          "description": "Output only. Name of the most recent operation modifying the function. If\nthe function status is `DEPLOYING` or `DELETING`, then it points to the\nactive operation.",
-          "type": "string"
-        },
         "httpsTrigger": {
           "description": "An HTTPS endpoint type of source that can be triggered via URL.",
           "$ref": "HTTPSTrigger"
         },
         "eventTrigger": {
-          "description": "A source that fires events in response to a condition in another service.",
-          "$ref": "EventTrigger"
+          "$ref": "EventTrigger",
+          "description": "A source that fires events in response to a condition in another service."
+        },
+        "timeout": {
+          "description": "The function execution timeout. Execution is considered failed and\ncan be terminated if the function is not completed at the end of the\ntimeout period. Defaults to 60 seconds.",
+          "format": "google-duration",
+          "type": "string"
         },
         "status": {
           "enumDescriptions": [
@@ -540,39 +144,42 @@
           "description": "Output only. Status of the function deployment.",
           "type": "string"
         },
-        "timeout": {
-          "description": "The function execution timeout. Execution is considered failed and\ncan be terminated if the function is not completed at the end of the\ntimeout period. Defaults to 60 seconds.",
-          "format": "google-duration",
-          "type": "string"
-        },
         "availableMemoryMb": {
           "description": "The amount of memory in MB available for a function.\nDefaults to 256MB.",
           "format": "int32",
           "type": "integer"
         },
         "name": {
-          "type": "string",
-          "description": "A user-defined name of the function. Function names must be unique\nglobally and match pattern `projects/*/locations/*/functions/*`"
+          "description": "A user-defined name of the function. Function names must be unique\nglobally and match pattern `projects/*/locations/*/functions/*`",
+          "type": "string"
         },
         "serviceAccount": {
           "description": "Output only. The service account of the function.",
           "type": "string"
         },
         "sourceArchiveUrl": {
-          "type": "string",
-          "description": "The URL, starting with gs://, pointing to the zip archive which contains\nthe function."
+          "description": "The URL, starting with gs://, pointing to the zip archive which contains\nthe function.",
+          "type": "string"
         },
         "sourceRepository": {
-          "$ref": "SourceRepository",
-          "description": "The hosted repository where the function is defined."
+          "description": "The hosted repository where the function is defined.",
+          "$ref": "SourceRepository"
         },
         "entryPoint": {
           "description": "The name of the function (as defined in source code) that will be\nexecuted. Defaults to the resource name suffix, if not specified. For\nbackward compatibility, if function with given name is not found, then the\nsystem will try to use function named \"function\".\nFor Node.js this is name of a function exported by the module specified\nin `source_location`.",
           "type": "string"
+        },
+        "updateTime": {
+          "type": "string",
+          "description": "Output only. The last update timestamp of a Cloud Function.",
+          "format": "google-datetime"
+        },
+        "latestOperation": {
+          "description": "Output only. Name of the most recent operation modifying the function. If\nthe function status is `DEPLOYING` or `DELETING`, then it points to the\nactive operation.",
+          "type": "string"
         }
       },
-      "id": "CloudFunction",
-      "description": "Describes a Cloud Function that contains user computation executed in\nresponse to an event. It encapsulate function and triggers configurations."
+      "id": "CloudFunction"
     },
     "Location": {
       "description": "A resource that represents Google Cloud Platform location.",
@@ -595,11 +202,11 @@
           "type": "object"
         },
         "labels": {
-          "description": "Cross-service attributes for the location. For example\n\n    {\"cloud.googleapis.com/region\": \"us-east1\"}",
-          "type": "object",
           "additionalProperties": {
             "type": "string"
-          }
+          },
+          "description": "Cross-service attributes for the location. For example\n\n    {\"cloud.googleapis.com/region\": \"us-east1\"}",
+          "type": "object"
         }
       },
       "id": "Location"
@@ -623,40 +230,22 @@
       "type": "object"
     },
     "ListFunctionsResponse": {
-      "id": "ListFunctionsResponse",
-      "description": "Response for the `ListFunctions` method.",
       "type": "object",
       "properties": {
+        "nextPageToken": {
+          "description": "If not empty, indicates that there may be more functions that match\nthe request; this value should be passed in a new\ngoogle.cloud.functions.v1beta2.ListFunctionsRequest\nto get more functions.",
+          "type": "string"
+        },
         "functions": {
           "description": "The functions that match the request.",
           "type": "array",
           "items": {
             "$ref": "CloudFunction"
           }
-        },
-        "nextPageToken": {
-          "description": "If not empty, indicates that there may be more functions that match\nthe request; this value should be passed in a new\ngoogle.cloud.functions.v1beta2.ListFunctionsRequest\nto get more functions.",
-          "type": "string"
-        }
-      }
-    },
-    "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": {
-          "description": "The standard List next-page token.",
-          "type": "string"
         }
       },
-      "id": "ListLocationsResponse"
+      "id": "ListFunctionsResponse",
+      "description": "Response for the `ListFunctions` method."
     },
     "CallFunctionResponse": {
       "properties": {
@@ -677,23 +266,40 @@
       "description": "Response of `CallFunction` method.",
       "type": "object"
     },
-    "EventTrigger": {
+    "ListLocationsResponse": {
+      "description": "The response message for Locations.ListLocations.",
+      "type": "object",
       "properties": {
-        "resource": {
-          "description": "Which instance of the source's service should send events. E.g. for Pub/Sub\nthis would be a Pub/Sub topic at `projects/*/topics/*`. For Google Cloud\nStorage this would be a bucket at `projects/*/buckets/*`. For any source\nthat only supports one instance per-project, this should be the name of the\nproject (`projects/*`)",
-          "type": "string"
+        "locations": {
+          "description": "A list of locations that matches the specified filter in the request.",
+          "type": "array",
+          "items": {
+            "$ref": "Location"
+          }
         },
-        "eventType": {
-          "description": "`event_type` names contain the service that is sending an event and the\nkind of event that was fired. Must be of the form\n`providers/*/eventTypes/*` e.g. Directly handle a Message published to\nGoogle Cloud Pub/Sub `providers/cloud.pubsub/eventTypes/topic.publish`\n\n     Handle an object changing in Google Cloud Storage\n     `providers/cloud.storage/eventTypes/object.change`\n\n     Handle a write to the Firebase Realtime Database\n     `providers/firebase.database/eventTypes/data.write`",
+        "nextPageToken": {
+          "description": "The standard List next-page token.",
           "type": "string"
         }
       },
-      "id": "EventTrigger",
+      "id": "ListLocationsResponse"
+    },
+    "EventTrigger": {
       "description": "Describes EventTrigger, used to request events be sent from another\nservice.",
-      "type": "object"
+      "type": "object",
+      "properties": {
+        "eventType": {
+          "description": "`event_type` names contain the service that is sending an event and the\nkind of event that was fired. Must be of the form\n`providers/*/eventTypes/*` e.g. Directly handle a Message published to\nGoogle Cloud Pub/Sub `providers/cloud.pubsub/eventTypes/topic.publish`\n\n     Handle an object changing in Google Cloud Storage\n     `providers/cloud.storage/eventTypes/object.change`\n\n     Handle a write to the Firebase Realtime Database\n     `providers/firebase.database/eventTypes/data.write`",
+          "type": "string"
+        },
+        "resource": {
+          "description": "Which instance of the source's service should send events. E.g. for Pub/Sub\nthis would be a Pub/Sub topic at `projects/*/topics/*`. For Google Cloud\nStorage this would be a bucket at `projects/*/buckets/*`. For any source\nthat only supports one instance per-project, this should be the name of the\nproject (`projects/*`)",
+          "type": "string"
+        }
+      },
+      "id": "EventTrigger"
     },
     "HTTPSTrigger": {
-      "id": "HTTPSTrigger",
       "description": "Describes HTTPSTrigger, could be used to connect web hooks to function.",
       "type": "object",
       "properties": {
@@ -701,29 +307,16 @@
           "description": "Output only. The deployed url for the function.",
           "type": "string"
         }
-      }
+      },
+      "id": "HTTPSTrigger"
     },
     "Operation": {
+      "description": "This resource represents a long-running operation that is the result of a\nnetwork API call.",
+      "type": "object",
       "properties": {
-        "done": {
-          "description": "If the value is `false`, it means the operation is still in progress.\nIf true, the operation is completed, and either `error` or `response` is\navailable.",
-          "type": "boolean"
-        },
-        "response": {
-          "description": "The normal response of the operation in case of success.  If the original\nmethod returns no data on success, such as `Delete`, the response is\n`google.protobuf.Empty`.  If the original method is standard\n`Get`/`Create`/`Update`, the response should be the resource.  For other\nmethods, the response should have the type `XxxResponse`, where `Xxx`\nis the original method name.  For example, if the original method name\nis `TakeSnapshot()`, the inferred response type is\n`TakeSnapshotResponse`.",
-          "type": "object",
-          "additionalProperties": {
-            "description": "Properties of the object. Contains field @type with type URL.",
-            "type": "any"
-          }
-        },
-        "name": {
-          "description": "The server-assigned name, which is only unique within the same service that\noriginally returns it. If you use the default HTTP mapping, the\n`name` should have the format of `operations/some/unique/name`.",
-          "type": "string"
-        },
         "error": {
-          "description": "The error result of the operation in case of failure or cancellation.",
-          "$ref": "Status"
+          "$ref": "Status",
+          "description": "The error result of the operation in case of failure or cancellation."
         },
         "metadata": {
           "additionalProperties": {
@@ -732,11 +325,25 @@
           },
           "description": "Service-specific metadata associated with the operation.  It typically\ncontains progress information and common metadata such as create time.\nSome services might not provide such metadata.  Any method that returns a\nlong-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.\nIf true, the operation is completed, and either `error` or `response` is\navailable.",
+          "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\nmethod returns no data on success, such as `Delete`, the response is\n`google.protobuf.Empty`.  If the original method is standard\n`Get`/`Create`/`Update`, the response should be the resource.  For other\nmethods, the response should have the type `XxxResponse`, where `Xxx`\nis the original method name.  For example, if the original method name\nis `TakeSnapshot()`, the inferred response type is\n`TakeSnapshotResponse`.",
+          "type": "object"
+        },
+        "name": {
+          "description": "The server-assigned name, which is only unique within the same service that\noriginally returns it. If you use the default HTTP mapping, the\n`name` should have the format of `operations/some/unique/name`.",
+          "type": "string"
         }
       },
-      "id": "Operation",
-      "description": "This resource represents a long-running operation that is the result of a\nnetwork API call.",
-      "type": "object"
+      "id": "Operation"
     }
   },
   "icons": {
@@ -753,5 +360,398 @@
         }
       }
     }
-  }
+  },
+  "rootUrl": "https://cloudfunctions.googleapis.com/",
+  "ownerDomain": "google.com",
+  "name": "cloudfunctions",
+  "batchPath": "batch",
+  "title": "Google Cloud Functions API",
+  "ownerName": "Google",
+  "resources": {
+    "projects": {
+      "resources": {
+        "locations": {
+          "methods": {
+            "list": {
+              "description": "Lists information about the supported locations for this service.",
+              "parameterOrder": [
+                "name"
+              ],
+              "httpMethod": "GET",
+              "response": {
+                "$ref": "ListLocationsResponse"
+              },
+              "scopes": [
+                "https://www.googleapis.com/auth/cloud-platform"
+              ],
+              "parameters": {
+                "pageSize": {
+                  "location": "query",
+                  "description": "The standard list page size.",
+                  "format": "int32",
+                  "type": "integer"
+                },
+                "filter": {
+                  "description": "The standard list filter.",
+                  "type": "string",
+                  "location": "query"
+                },
+                "name": {
+                  "pattern": "^projects/[^/]+$",
+                  "location": "path",
+                  "description": "The resource that owns the locations collection, if applicable.",
+                  "required": true,
+                  "type": "string"
+                },
+                "pageToken": {
+                  "location": "query",
+                  "description": "The standard list page token.",
+                  "type": "string"
+                }
+              },
+              "flatPath": "v1beta2/projects/{projectsId}/locations",
+              "path": "v1beta2/{+name}/locations",
+              "id": "cloudfunctions.projects.locations.list"
+            }
+          },
+          "resources": {
+            "functions": {
+              "methods": {
+                "get": {
+                  "flatPath": "v1beta2/projects/{projectsId}/locations/{locationsId}/functions/{functionsId}",
+                  "path": "v1beta2/{+name}",
+                  "id": "cloudfunctions.projects.locations.functions.get",
+                  "description": "Returns a function with the given name from the requested project.",
+                  "response": {
+                    "$ref": "CloudFunction"
+                  },
+                  "parameterOrder": [
+                    "name"
+                  ],
+                  "httpMethod": "GET",
+                  "parameters": {
+                    "name": {
+                      "pattern": "^projects/[^/]+/locations/[^/]+/functions/[^/]+$",
+                      "location": "path",
+                      "description": "The name of the function which details should be obtained.",
+                      "required": true,
+                      "type": "string"
+                    }
+                  },
+                  "scopes": [
+                    "https://www.googleapis.com/auth/cloud-platform"
+                  ]
+                },
+                "update": {
+                  "flatPath": "v1beta2/projects/{projectsId}/locations/{locationsId}/functions/{functionsId}",
+                  "id": "cloudfunctions.projects.locations.functions.update",
+                  "path": "v1beta2/{+name}",
+                  "description": "Updates existing function.",
+                  "request": {
+                    "$ref": "CloudFunction"
+                  },
+                  "httpMethod": "PUT",
+                  "parameterOrder": [
+                    "name"
+                  ],
+                  "response": {
+                    "$ref": "Operation"
+                  },
+                  "scopes": [
+                    "https://www.googleapis.com/auth/cloud-platform"
+                  ],
+                  "parameters": {
+                    "name": {
+                      "description": "The name of the function to be updated.",
+                      "required": true,
+                      "type": "string",
+                      "pattern": "^projects/[^/]+/locations/[^/]+/functions/[^/]+$",
+                      "location": "path"
+                    }
+                  }
+                },
+                "delete": {
+                  "path": "v1beta2/{+name}",
+                  "id": "cloudfunctions.projects.locations.functions.delete",
+                  "description": "Deletes a function with the given name from the specified project. If the\ngiven function is used by some trigger, the trigger will be updated to\nremove this function.",
+                  "response": {
+                    "$ref": "Operation"
+                  },
+                  "parameterOrder": [
+                    "name"
+                  ],
+                  "httpMethod": "DELETE",
+                  "scopes": [
+                    "https://www.googleapis.com/auth/cloud-platform"
+                  ],
+                  "parameters": {
+                    "name": {
+                      "location": "path",
+                      "description": "The name of the function which should be deleted.",
+                      "required": true,
+                      "type": "string",
+                      "pattern": "^projects/[^/]+/locations/[^/]+/functions/[^/]+$"
+                    }
+                  },
+                  "flatPath": "v1beta2/projects/{projectsId}/locations/{locationsId}/functions/{functionsId}"
+                },
+                "list": {
+                  "httpMethod": "GET",
+                  "parameterOrder": [
+                    "location"
+                  ],
+                  "response": {
+                    "$ref": "ListFunctionsResponse"
+                  },
+                  "scopes": [
+                    "https://www.googleapis.com/auth/cloud-platform"
+                  ],
+                  "parameters": {
+                    "location": {
+                      "description": "The project and location from which the function should be listed,\nspecified in the format `projects/*/locations/*`\nIf you want to list functions in all locations, use \"-\" in place of a\nlocation.",
+                      "required": true,
+                      "type": "string",
+                      "pattern": "^projects/[^/]+/locations/[^/]+$",
+                      "location": "path"
+                    },
+                    "pageToken": {
+                      "location": "query",
+                      "description": "The value returned by the last\n`ListFunctionsResponse`; indicates that\nthis is a continuation of a prior `ListFunctions` call, and that the\nsystem should return the next page of data.",
+                      "type": "string"
+                    },
+                    "pageSize": {
+                      "type": "integer",
+                      "location": "query",
+                      "description": "Maximum number of functions to return per call.",
+                      "format": "int32"
+                    }
+                  },
+                  "flatPath": "v1beta2/projects/{projectsId}/locations/{locationsId}/functions",
+                  "id": "cloudfunctions.projects.locations.functions.list",
+                  "path": "v1beta2/{+location}/functions",
+                  "description": "Returns a list of functions that belong to the requested project."
+                },
+                "call": {
+                  "id": "cloudfunctions.projects.locations.functions.call",
+                  "path": "v1beta2/{+name}:call",
+                  "request": {
+                    "$ref": "CallFunctionRequest"
+                  },
+                  "description": "Invokes synchronously deployed function. To be used for testing, very\nlimited traffic allowed.",
+                  "httpMethod": "POST",
+                  "parameterOrder": [
+                    "name"
+                  ],
+                  "response": {
+                    "$ref": "CallFunctionResponse"
+                  },
+                  "parameters": {
+                    "name": {
+                      "pattern": "^projects/[^/]+/locations/[^/]+/functions/[^/]+$",
+                      "location": "path",
+                      "description": "The name of the function to be called.",
+                      "required": true,
+                      "type": "string"
+                    }
+                  },
+                  "scopes": [
+                    "https://www.googleapis.com/auth/cloud-platform"
+                  ],
+                  "flatPath": "v1beta2/projects/{projectsId}/locations/{locationsId}/functions/{functionsId}:call"
+                },
+                "create": {
+                  "path": "v1beta2/{+location}/functions",
+                  "id": "cloudfunctions.projects.locations.functions.create",
+                  "request": {
+                    "$ref": "CloudFunction"
+                  },
+                  "description": "Creates a new function. If a function with the given name already exists in\nthe specified project, the long running operation will return\n`ALREADY_EXISTS` error.",
+                  "response": {
+                    "$ref": "Operation"
+                  },
+                  "parameterOrder": [
+                    "location"
+                  ],
+                  "httpMethod": "POST",
+                  "parameters": {
+                    "location": {
+                      "description": "The project and location in which the function should be created, specified\nin the format `projects/*/locations/*`",
+                      "required": true,
+                      "type": "string",
+                      "pattern": "^projects/[^/]+/locations/[^/]+$",
+                      "location": "path"
+                    }
+                  },
+                  "scopes": [
+                    "https://www.googleapis.com/auth/cloud-platform"
+                  ],
+                  "flatPath": "v1beta2/projects/{projectsId}/locations/{locationsId}/functions"
+                }
+              }
+            }
+          }
+        }
+      }
+    },
+    "operations": {
+      "methods": {
+        "list": {
+          "httpMethod": "GET",
+          "parameterOrder": [],
+          "response": {
+            "$ref": "ListOperationsResponse"
+          },
+          "parameters": {
+            "name": {
+              "location": "query",
+              "description": "The name of the operation collection.",
+              "type": "string"
+            },
+            "pageToken": {
+              "location": "query",
+              "description": "The standard list page token.",
+              "type": "string"
+            },
+            "pageSize": {
+              "description": "The standard list page size.",
+              "format": "int32",
+              "type": "integer",
+              "location": "query"
+            },
+            "filter": {
+              "location": "query",
+              "description": "The standard list filter.",
+              "type": "string"
+            }
+          },
+          "scopes": [
+            "https://www.googleapis.com/auth/cloud-platform"
+          ],
+          "flatPath": "v1beta2/operations",
+          "id": "cloudfunctions.operations.list",
+          "path": "v1beta2/operations",
+          "description": "Lists operations that match the specified filter in the request. If the\nserver doesn't support this method, it returns `UNIMPLEMENTED`.\n\nNOTE: the `name` binding below allows API services to override the binding\nto use different resource name schemes, such as `users/*/operations`."
+        },
+        "get": {
+          "id": "cloudfunctions.operations.get",
+          "path": "v1beta2/{+name}",
+          "description": "Gets the latest state of a long-running operation.  Clients can use this\nmethod to poll the operation result at intervals as recommended by the API\nservice.",
+          "httpMethod": "GET",
+          "parameterOrder": [
+            "name"
+          ],
+          "response": {
+            "$ref": "Operation"
+          },
+          "scopes": [
+            "https://www.googleapis.com/auth/cloud-platform"
+          ],
+          "parameters": {
+            "name": {
+              "location": "path",
+              "description": "The name of the operation resource.",
+              "required": true,
+              "type": "string",
+              "pattern": "^operations/[^/]+$"
+            }
+          },
+          "flatPath": "v1beta2/operations/{operationsId}"
+        }
+      }
+    }
+  },
+  "parameters": {
+    "fields": {
+      "location": "query",
+      "description": "Selector specifying which fields to include in a partial response.",
+      "type": "string"
+    },
+    "uploadType": {
+      "type": "string",
+      "location": "query",
+      "description": "Legacy upload protocol for media (e.g. \"media\", \"multipart\")."
+    },
+    "callback": {
+      "description": "JSONP",
+      "type": "string",
+      "location": "query"
+    },
+    "$.xgafv": {
+      "description": "V1 error format.",
+      "type": "string",
+      "enumDescriptions": [
+        "v1 error format",
+        "v2 error format"
+      ],
+      "location": "query",
+      "enum": [
+        "1",
+        "2"
+      ]
+    },
+    "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"
+    },
+    "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"
+    },
+    "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"
+    },
+    "pp": {
+      "location": "query",
+      "description": "Pretty-print response.",
+      "type": "boolean",
+      "default": "true"
+    },
+    "bearer_token": {
+      "location": "query",
+      "description": "OAuth bearer token.",
+      "type": "string"
+    },
+    "oauth_token": {
+      "description": "OAuth 2.0 token for the current user.",
+      "type": "string",
+      "location": "query"
+    },
+    "upload_protocol": {
+      "location": "query",
+      "description": "Upload protocol for media (e.g. \"raw\", \"multipart\").",
+      "type": "string"
+    },
+    "prettyPrint": {
+      "location": "query",
+      "description": "Returns response with indentations and line breaks.",
+      "type": "boolean",
+      "default": "true"
+    }
+  },
+  "version": "v1beta2",
+  "baseUrl": "https://cloudfunctions.googleapis.com/",
+  "description": "API for managing lightweight user-provided functions executed in response to events.",
+  "kind": "discovery#restDescription",
+  "servicePath": "",
+  "basePath": ""
 }
diff --git a/cloudfunctions/v1beta2/cloudfunctions-gen.go b/cloudfunctions/v1beta2/cloudfunctions-gen.go
index 32b3fe5..65dae1f 100644
--- a/cloudfunctions/v1beta2/cloudfunctions-gen.go
+++ b/cloudfunctions/v1beta2/cloudfunctions-gen.go
@@ -62,10 +62,9 @@
 }
 
 type Service struct {
-	client                    *http.Client
-	BasePath                  string // API endpoint base URL
-	UserAgent                 string // optional additional User-Agent fragment
-	GoogleClientHeaderElement string // client header fragment, for Google use only
+	client    *http.Client
+	BasePath  string // API endpoint base URL
+	UserAgent string // optional additional User-Agent fragment
 
 	Operations *OperationsService
 
@@ -79,10 +78,6 @@
 	return googleapi.UserAgent + " " + s.UserAgent
 }
 
-func (s *Service) clientHeader() string {
-	return gensupport.GoogleClientHeader("20170210", s.GoogleClientHeaderElement)
-}
-
 func NewOperationsService(s *Service) *OperationsService {
 	rs := &OperationsService{s: s}
 	return rs
@@ -908,7 +903,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	if c.ifNoneMatch_ != "" {
 		reqHeaders.Set("If-None-Match", c.ifNoneMatch_)
 	}
@@ -1081,7 +1075,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	if c.ifNoneMatch_ != "" {
 		reqHeaders.Set("If-None-Match", c.ifNoneMatch_)
 	}
@@ -1273,7 +1266,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	if c.ifNoneMatch_ != "" {
 		reqHeaders.Set("If-None-Match", c.ifNoneMatch_)
 	}
@@ -1443,7 +1435,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	var body io.Reader = nil
 	body, err := googleapi.WithoutDataWrapper.JSONReader(c.callfunctionrequest)
 	if err != nil {
@@ -1583,7 +1574,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	var body io.Reader = nil
 	body, err := googleapi.WithoutDataWrapper.JSONReader(c.cloudfunction)
 	if err != nil {
@@ -1721,7 +1711,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	var body io.Reader = nil
 	c.urlParams_.Set("alt", alt)
 	urls := googleapi.ResolveRelative(c.s.BasePath, "v1beta2/{+name}")
@@ -1859,7 +1848,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	if c.ifNoneMatch_ != "" {
 		reqHeaders.Set("If-None-Match", c.ifNoneMatch_)
 	}
@@ -2018,7 +2006,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	if c.ifNoneMatch_ != "" {
 		reqHeaders.Set("If-None-Match", c.ifNoneMatch_)
 	}
@@ -2181,7 +2168,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	var body io.Reader = nil
 	body, err := googleapi.WithoutDataWrapper.JSONReader(c.cloudfunction)
 	if err != nil {
diff --git a/cloudkms/v1/cloudkms-api.json b/cloudkms/v1/cloudkms-api.json
index 45b2989..17737c8 100644
--- a/cloudkms/v1/cloudkms-api.json
+++ b/cloudkms/v1/cloudkms-api.json
@@ -1,4 +1,19 @@
 {
+  "canonicalName": "Cloud KMS",
+  "auth": {
+    "oauth2": {
+      "scopes": {
+        "https://www.googleapis.com/auth/cloud-platform": {
+          "description": "View and manage your data across Google Cloud Platform services"
+        }
+      }
+    }
+  },
+  "rootUrl": "https://cloudkms.googleapis.com/",
+  "ownerDomain": "google.com",
+  "name": "cloudkms",
+  "batchPath": "batch",
+  "title": "Google Cloud Key Management Service (KMS) API",
   "ownerName": "Google",
   "resources": {
     "projects": {
@@ -6,38 +21,406 @@
         "locations": {
           "resources": {
             "keyRings": {
+              "methods": {
+                "testIamPermissions": {
+                  "request": {
+                    "$ref": "TestIamPermissionsRequest"
+                  },
+                  "description": "Returns permissions that a caller has on the specified resource.\nIf the resource does not exist, this will return an empty set of\npermissions, not a NOT_FOUND error.\n\nNote: This operation is designed to be used for building permission-aware\nUIs and command-line tools, not for authorization checking. This operation\nmay \"fail open\" without warning.",
+                  "httpMethod": "POST",
+                  "parameterOrder": [
+                    "resource"
+                  ],
+                  "response": {
+                    "$ref": "TestIamPermissionsResponse"
+                  },
+                  "parameters": {
+                    "resource": {
+                      "pattern": "^projects/[^/]+/locations/[^/]+/keyRings/[^/]+$",
+                      "location": "path",
+                      "description": "REQUIRED: The resource for which the policy detail is being requested.\nSee the operation documentation for the appropriate value for this field.",
+                      "required": true,
+                      "type": "string"
+                    }
+                  },
+                  "scopes": [
+                    "https://www.googleapis.com/auth/cloud-platform"
+                  ],
+                  "flatPath": "v1/projects/{projectsId}/locations/{locationsId}/keyRings/{keyRingsId}:testIamPermissions",
+                  "id": "cloudkms.projects.locations.keyRings.testIamPermissions",
+                  "path": "v1/{+resource}:testIamPermissions"
+                },
+                "list": {
+                  "response": {
+                    "$ref": "ListKeyRingsResponse"
+                  },
+                  "parameterOrder": [
+                    "parent"
+                  ],
+                  "httpMethod": "GET",
+                  "scopes": [
+                    "https://www.googleapis.com/auth/cloud-platform"
+                  ],
+                  "parameters": {
+                    "parent": {
+                      "pattern": "^projects/[^/]+/locations/[^/]+$",
+                      "location": "path",
+                      "description": "Required. The resource name of the location associated with the\nKeyRings, in the format `projects/*/locations/*`.",
+                      "required": true,
+                      "type": "string"
+                    },
+                    "pageToken": {
+                      "location": "query",
+                      "description": "Optional pagination token, returned earlier via\nListKeyRingsResponse.next_page_token.",
+                      "type": "string"
+                    },
+                    "pageSize": {
+                      "description": "Optional limit on the number of KeyRings to include in the\nresponse.  Further KeyRings can subsequently be obtained by\nincluding the ListKeyRingsResponse.next_page_token in a subsequent\nrequest.  If unspecified, the server will pick an appropriate default.",
+                      "format": "int32",
+                      "type": "integer",
+                      "location": "query"
+                    }
+                  },
+                  "flatPath": "v1/projects/{projectsId}/locations/{locationsId}/keyRings",
+                  "path": "v1/{+parent}/keyRings",
+                  "id": "cloudkms.projects.locations.keyRings.list",
+                  "description": "Lists KeyRings."
+                },
+                "setIamPolicy": {
+                  "request": {
+                    "$ref": "SetIamPolicyRequest"
+                  },
+                  "description": "Sets the access control policy on the specified resource. Replaces any\nexisting policy.",
+                  "httpMethod": "POST",
+                  "parameterOrder": [
+                    "resource"
+                  ],
+                  "response": {
+                    "$ref": "Policy"
+                  },
+                  "parameters": {
+                    "resource": {
+                      "description": "REQUIRED: The resource for which the policy is being specified.\nSee the operation documentation for the appropriate value for this field.",
+                      "required": true,
+                      "type": "string",
+                      "pattern": "^projects/[^/]+/locations/[^/]+/keyRings/[^/]+$",
+                      "location": "path"
+                    }
+                  },
+                  "scopes": [
+                    "https://www.googleapis.com/auth/cloud-platform"
+                  ],
+                  "flatPath": "v1/projects/{projectsId}/locations/{locationsId}/keyRings/{keyRingsId}:setIamPolicy",
+                  "id": "cloudkms.projects.locations.keyRings.setIamPolicy",
+                  "path": "v1/{+resource}:setIamPolicy"
+                },
+                "create": {
+                  "httpMethod": "POST",
+                  "parameterOrder": [
+                    "parent"
+                  ],
+                  "response": {
+                    "$ref": "KeyRing"
+                  },
+                  "parameters": {
+                    "parent": {
+                      "pattern": "^projects/[^/]+/locations/[^/]+$",
+                      "location": "path",
+                      "description": "Required. The resource name of the location associated with the\nKeyRings, in the format `projects/*/locations/*`.",
+                      "required": true,
+                      "type": "string"
+                    },
+                    "keyRingId": {
+                      "description": "Required. It must be unique within a location and match the regular\nexpression `[a-zA-Z0-9_-]{1,63}`",
+                      "type": "string",
+                      "location": "query"
+                    }
+                  },
+                  "scopes": [
+                    "https://www.googleapis.com/auth/cloud-platform"
+                  ],
+                  "flatPath": "v1/projects/{projectsId}/locations/{locationsId}/keyRings",
+                  "id": "cloudkms.projects.locations.keyRings.create",
+                  "path": "v1/{+parent}/keyRings",
+                  "request": {
+                    "$ref": "KeyRing"
+                  },
+                  "description": "Create a new KeyRing in a given Project and Location."
+                },
+                "getIamPolicy": {
+                  "path": "v1/{+resource}:getIamPolicy",
+                  "id": "cloudkms.projects.locations.keyRings.getIamPolicy",
+                  "description": "Gets the access control policy for a resource.\nReturns an empty policy if the resource exists and does not have a policy\nset.",
+                  "response": {
+                    "$ref": "Policy"
+                  },
+                  "parameterOrder": [
+                    "resource"
+                  ],
+                  "httpMethod": "GET",
+                  "scopes": [
+                    "https://www.googleapis.com/auth/cloud-platform"
+                  ],
+                  "parameters": {
+                    "resource": {
+                      "description": "REQUIRED: The resource for which the policy is being requested.\nSee the operation documentation for the appropriate value for this field.",
+                      "required": true,
+                      "type": "string",
+                      "pattern": "^projects/[^/]+/locations/[^/]+/keyRings/[^/]+$",
+                      "location": "path"
+                    }
+                  },
+                  "flatPath": "v1/projects/{projectsId}/locations/{locationsId}/keyRings/{keyRingsId}:getIamPolicy"
+                },
+                "get": {
+                  "httpMethod": "GET",
+                  "response": {
+                    "$ref": "KeyRing"
+                  },
+                  "parameterOrder": [
+                    "name"
+                  ],
+                  "scopes": [
+                    "https://www.googleapis.com/auth/cloud-platform"
+                  ],
+                  "parameters": {
+                    "name": {
+                      "pattern": "^projects/[^/]+/locations/[^/]+/keyRings/[^/]+$",
+                      "location": "path",
+                      "description": "The name of the KeyRing to get.",
+                      "required": true,
+                      "type": "string"
+                    }
+                  },
+                  "flatPath": "v1/projects/{projectsId}/locations/{locationsId}/keyRings/{keyRingsId}",
+                  "id": "cloudkms.projects.locations.keyRings.get",
+                  "path": "v1/{+name}",
+                  "description": "Returns metadata for a given KeyRing."
+                }
+              },
               "resources": {
                 "cryptoKeys": {
+                  "resources": {
+                    "cryptoKeyVersions": {
+                      "methods": {
+                        "create": {
+                          "path": "v1/{+parent}/cryptoKeyVersions",
+                          "id": "cloudkms.projects.locations.keyRings.cryptoKeys.cryptoKeyVersions.create",
+                          "description": "Create a new CryptoKeyVersion in a CryptoKey.\n\nThe server will assign the next sequential id. If unset,\nstate will be set to\nENABLED.",
+                          "request": {
+                            "$ref": "CryptoKeyVersion"
+                          },
+                          "response": {
+                            "$ref": "CryptoKeyVersion"
+                          },
+                          "parameterOrder": [
+                            "parent"
+                          ],
+                          "httpMethod": "POST",
+                          "scopes": [
+                            "https://www.googleapis.com/auth/cloud-platform"
+                          ],
+                          "parameters": {
+                            "parent": {
+                              "pattern": "^projects/[^/]+/locations/[^/]+/keyRings/[^/]+/cryptoKeys/[^/]+$",
+                              "location": "path",
+                              "description": "Required. The name of the CryptoKey associated with\nthe CryptoKeyVersions.",
+                              "required": true,
+                              "type": "string"
+                            }
+                          },
+                          "flatPath": "v1/projects/{projectsId}/locations/{locationsId}/keyRings/{keyRingsId}/cryptoKeys/{cryptoKeysId}/cryptoKeyVersions"
+                        },
+                        "destroy": {
+                          "id": "cloudkms.projects.locations.keyRings.cryptoKeys.cryptoKeyVersions.destroy",
+                          "path": "v1/{+name}:destroy",
+                          "request": {
+                            "$ref": "DestroyCryptoKeyVersionRequest"
+                          },
+                          "description": "Schedule a CryptoKeyVersion for destruction.\n\nUpon calling this method, CryptoKeyVersion.state will be set to\nDESTROY_SCHEDULED\nand destroy_time will be set to a time 24\nhours in the future, at which point the state\nwill be changed to\nDESTROYED, and the key\nmaterial will be irrevocably destroyed.\n\nBefore the destroy_time is reached,\nRestoreCryptoKeyVersion may be called to reverse the process.",
+                          "httpMethod": "POST",
+                          "parameterOrder": [
+                            "name"
+                          ],
+                          "response": {
+                            "$ref": "CryptoKeyVersion"
+                          },
+                          "parameters": {
+                            "name": {
+                              "pattern": "^projects/[^/]+/locations/[^/]+/keyRings/[^/]+/cryptoKeys/[^/]+/cryptoKeyVersions/[^/]+$",
+                              "location": "path",
+                              "description": "The resource name of the CryptoKeyVersion to destroy.",
+                              "required": true,
+                              "type": "string"
+                            }
+                          },
+                          "scopes": [
+                            "https://www.googleapis.com/auth/cloud-platform"
+                          ],
+                          "flatPath": "v1/projects/{projectsId}/locations/{locationsId}/keyRings/{keyRingsId}/cryptoKeys/{cryptoKeysId}/cryptoKeyVersions/{cryptoKeyVersionsId}:destroy"
+                        },
+                        "restore": {
+                          "httpMethod": "POST",
+                          "parameterOrder": [
+                            "name"
+                          ],
+                          "response": {
+                            "$ref": "CryptoKeyVersion"
+                          },
+                          "scopes": [
+                            "https://www.googleapis.com/auth/cloud-platform"
+                          ],
+                          "parameters": {
+                            "name": {
+                              "description": "The resource name of the CryptoKeyVersion to restore.",
+                              "required": true,
+                              "type": "string",
+                              "pattern": "^projects/[^/]+/locations/[^/]+/keyRings/[^/]+/cryptoKeys/[^/]+/cryptoKeyVersions/[^/]+$",
+                              "location": "path"
+                            }
+                          },
+                          "flatPath": "v1/projects/{projectsId}/locations/{locationsId}/keyRings/{keyRingsId}/cryptoKeys/{cryptoKeysId}/cryptoKeyVersions/{cryptoKeyVersionsId}:restore",
+                          "id": "cloudkms.projects.locations.keyRings.cryptoKeys.cryptoKeyVersions.restore",
+                          "path": "v1/{+name}:restore",
+                          "description": "Restore a CryptoKeyVersion in the\nDESTROY_SCHEDULED,\nstate.\n\nUpon restoration of the CryptoKeyVersion, state\nwill be set to DISABLED,\nand destroy_time will be cleared.",
+                          "request": {
+                            "$ref": "RestoreCryptoKeyVersionRequest"
+                          }
+                        },
+                        "get": {
+                          "path": "v1/{+name}",
+                          "id": "cloudkms.projects.locations.keyRings.cryptoKeys.cryptoKeyVersions.get",
+                          "description": "Returns metadata for a given CryptoKeyVersion.",
+                          "response": {
+                            "$ref": "CryptoKeyVersion"
+                          },
+                          "parameterOrder": [
+                            "name"
+                          ],
+                          "httpMethod": "GET",
+                          "scopes": [
+                            "https://www.googleapis.com/auth/cloud-platform"
+                          ],
+                          "parameters": {
+                            "name": {
+                              "description": "The name of the CryptoKeyVersion to get.",
+                              "required": true,
+                              "type": "string",
+                              "pattern": "^projects/[^/]+/locations/[^/]+/keyRings/[^/]+/cryptoKeys/[^/]+/cryptoKeyVersions/[^/]+$",
+                              "location": "path"
+                            }
+                          },
+                          "flatPath": "v1/projects/{projectsId}/locations/{locationsId}/keyRings/{keyRingsId}/cryptoKeys/{cryptoKeysId}/cryptoKeyVersions/{cryptoKeyVersionsId}"
+                        },
+                        "patch": {
+                          "id": "cloudkms.projects.locations.keyRings.cryptoKeys.cryptoKeyVersions.patch",
+                          "path": "v1/{+name}",
+                          "request": {
+                            "$ref": "CryptoKeyVersion"
+                          },
+                          "description": "Update a CryptoKeyVersion's metadata.\n\nstate may be changed between\nENABLED and\nDISABLED using this\nmethod. See DestroyCryptoKeyVersion and RestoreCryptoKeyVersion to\nmove between other states.",
+                          "httpMethod": "PATCH",
+                          "parameterOrder": [
+                            "name"
+                          ],
+                          "response": {
+                            "$ref": "CryptoKeyVersion"
+                          },
+                          "parameters": {
+                            "updateMask": {
+                              "location": "query",
+                              "description": "Required list of fields to be updated in this request.",
+                              "format": "google-fieldmask",
+                              "type": "string"
+                            },
+                            "name": {
+                              "pattern": "^projects/[^/]+/locations/[^/]+/keyRings/[^/]+/cryptoKeys/[^/]+/cryptoKeyVersions/[^/]+$",
+                              "location": "path",
+                              "description": "Output only. The resource name for this CryptoKeyVersion in the format\n`projects/*/locations/*/keyRings/*/cryptoKeys/*/cryptoKeyVersions/*`.",
+                              "required": true,
+                              "type": "string"
+                            }
+                          },
+                          "scopes": [
+                            "https://www.googleapis.com/auth/cloud-platform"
+                          ],
+                          "flatPath": "v1/projects/{projectsId}/locations/{locationsId}/keyRings/{keyRingsId}/cryptoKeys/{cryptoKeysId}/cryptoKeyVersions/{cryptoKeyVersionsId}"
+                        },
+                        "list": {
+                          "response": {
+                            "$ref": "ListCryptoKeyVersionsResponse"
+                          },
+                          "parameterOrder": [
+                            "parent"
+                          ],
+                          "httpMethod": "GET",
+                          "scopes": [
+                            "https://www.googleapis.com/auth/cloud-platform"
+                          ],
+                          "parameters": {
+                            "pageToken": {
+                              "location": "query",
+                              "description": "Optional pagination token, returned earlier via\nListCryptoKeyVersionsResponse.next_page_token.",
+                              "type": "string"
+                            },
+                            "pageSize": {
+                              "description": "Optional limit on the number of CryptoKeyVersions to\ninclude in the response. Further CryptoKeyVersions can\nsubsequently be obtained by including the\nListCryptoKeyVersionsResponse.next_page_token in a subsequent request.\nIf unspecified, the server will pick an appropriate default.",
+                              "format": "int32",
+                              "type": "integer",
+                              "location": "query"
+                            },
+                            "parent": {
+                              "description": "Required. The resource name of the CryptoKey to list, in the format\n`projects/*/locations/*/keyRings/*/cryptoKeys/*`.",
+                              "required": true,
+                              "type": "string",
+                              "pattern": "^projects/[^/]+/locations/[^/]+/keyRings/[^/]+/cryptoKeys/[^/]+$",
+                              "location": "path"
+                            }
+                          },
+                          "flatPath": "v1/projects/{projectsId}/locations/{locationsId}/keyRings/{keyRingsId}/cryptoKeys/{cryptoKeysId}/cryptoKeyVersions",
+                          "path": "v1/{+parent}/cryptoKeyVersions",
+                          "id": "cloudkms.projects.locations.keyRings.cryptoKeys.cryptoKeyVersions.list",
+                          "description": "Lists CryptoKeyVersions."
+                        }
+                      }
+                    }
+                  },
                   "methods": {
                     "testIamPermissions": {
-                      "path": "v1/{+resource}:testIamPermissions",
-                      "id": "cloudkms.projects.locations.keyRings.cryptoKeys.testIamPermissions",
-                      "description": "Returns permissions that a caller has on the specified resource.\nIf the resource does not exist, this will return an empty set of\npermissions, not a NOT_FOUND error.\n\nNote: This operation is designed to be used for building permission-aware\nUIs and command-line tools, not for authorization checking. This operation\nmay \"fail open\" without warning.",
                       "request": {
                         "$ref": "TestIamPermissionsRequest"
                       },
-                      "response": {
-                        "$ref": "TestIamPermissionsResponse"
-                      },
+                      "description": "Returns permissions that a caller has on the specified resource.\nIf the resource does not exist, this will return an empty set of\npermissions, not a NOT_FOUND error.\n\nNote: This operation is designed to be used for building permission-aware\nUIs and command-line tools, not for authorization checking. This operation\nmay \"fail open\" without warning.",
+                      "httpMethod": "POST",
                       "parameterOrder": [
                         "resource"
                       ],
-                      "httpMethod": "POST",
+                      "response": {
+                        "$ref": "TestIamPermissionsResponse"
+                      },
+                      "parameters": {
+                        "resource": {
+                          "pattern": "^projects/[^/]+/locations/[^/]+/keyRings/[^/]+/cryptoKeys/[^/]+$",
+                          "location": "path",
+                          "description": "REQUIRED: The resource for which the policy detail is being requested.\nSee the operation documentation for the appropriate value for this field.",
+                          "required": true,
+                          "type": "string"
+                        }
+                      },
                       "scopes": [
                         "https://www.googleapis.com/auth/cloud-platform"
                       ],
-                      "parameters": {
-                        "resource": {
-                          "description": "REQUIRED: The resource for which the policy detail is being requested.\nSee the operation documentation for the appropriate value for this field.",
-                          "required": true,
-                          "type": "string",
-                          "pattern": "^projects/[^/]+/locations/[^/]+/keyRings/[^/]+/cryptoKeys/[^/]+$",
-                          "location": "path"
-                        }
-                      },
-                      "flatPath": "v1/projects/{projectsId}/locations/{locationsId}/keyRings/{keyRingsId}/cryptoKeys/{cryptoKeysId}:testIamPermissions"
+                      "flatPath": "v1/projects/{projectsId}/locations/{locationsId}/keyRings/{keyRingsId}/cryptoKeys/{cryptoKeysId}:testIamPermissions",
+                      "id": "cloudkms.projects.locations.keyRings.cryptoKeys.testIamPermissions",
+                      "path": "v1/{+resource}:testIamPermissions"
                     },
                     "decrypt": {
+                      "path": "v1/{+name}:decrypt",
+                      "id": "cloudkms.projects.locations.keyRings.cryptoKeys.decrypt",
+                      "description": "Decrypt data that was protected by Encrypt.",
+                      "request": {
+                        "$ref": "DecryptRequest"
+                      },
                       "response": {
                         "$ref": "DecryptResponse"
                       },
@@ -50,23 +433,16 @@
                       ],
                       "parameters": {
                         "name": {
+                          "pattern": "^projects/[^/]+/locations/[^/]+/keyRings/[^/]+/cryptoKeys/[^/]+$",
+                          "location": "path",
                           "description": "Required. The resource name of the CryptoKey to use for decryption.\nThe server will choose the appropriate version.",
                           "required": true,
-                          "type": "string",
-                          "pattern": "^projects/[^/]+/locations/[^/]+/keyRings/[^/]+/cryptoKeys/[^/]+$",
-                          "location": "path"
+                          "type": "string"
                         }
                       },
-                      "flatPath": "v1/projects/{projectsId}/locations/{locationsId}/keyRings/{keyRingsId}/cryptoKeys/{cryptoKeysId}:decrypt",
-                      "path": "v1/{+name}:decrypt",
-                      "id": "cloudkms.projects.locations.keyRings.cryptoKeys.decrypt",
-                      "description": "Decrypt data that was protected by Encrypt.",
-                      "request": {
-                        "$ref": "DecryptRequest"
-                      }
+                      "flatPath": "v1/projects/{projectsId}/locations/{locationsId}/keyRings/{keyRingsId}/cryptoKeys/{cryptoKeysId}:decrypt"
                     },
                     "list": {
-                      "description": "Lists CryptoKeys.",
                       "response": {
                         "$ref": "ListCryptoKeysResponse"
                       },
@@ -74,41 +450,46 @@
                         "parent"
                       ],
                       "httpMethod": "GET",
+                      "scopes": [
+                        "https://www.googleapis.com/auth/cloud-platform"
+                      ],
                       "parameters": {
-                        "parent": {
-                          "description": "Required. The resource name of the KeyRing to list, in the format\n`projects/*/locations/*/keyRings/*`.",
-                          "required": true,
-                          "type": "string",
-                          "pattern": "^projects/[^/]+/locations/[^/]+/keyRings/[^/]+$",
-                          "location": "path"
-                        },
                         "pageToken": {
                           "location": "query",
                           "description": "Optional pagination token, returned earlier via\nListCryptoKeysResponse.next_page_token.",
                           "type": "string"
                         },
                         "pageSize": {
+                          "location": "query",
                           "description": "Optional limit on the number of CryptoKeys to include in the\nresponse.  Further CryptoKeys can subsequently be obtained by\nincluding the ListCryptoKeysResponse.next_page_token in a subsequent\nrequest.  If unspecified, the server will pick an appropriate default.",
                           "format": "int32",
-                          "type": "integer",
-                          "location": "query"
+                          "type": "integer"
+                        },
+                        "parent": {
+                          "pattern": "^projects/[^/]+/locations/[^/]+/keyRings/[^/]+$",
+                          "location": "path",
+                          "description": "Required. The resource name of the KeyRing to list, in the format\n`projects/*/locations/*/keyRings/*`.",
+                          "required": true,
+                          "type": "string"
                         }
                       },
-                      "scopes": [
-                        "https://www.googleapis.com/auth/cloud-platform"
-                      ],
                       "flatPath": "v1/projects/{projectsId}/locations/{locationsId}/keyRings/{keyRingsId}/cryptoKeys",
                       "path": "v1/{+parent}/cryptoKeys",
-                      "id": "cloudkms.projects.locations.keyRings.cryptoKeys.list"
+                      "id": "cloudkms.projects.locations.keyRings.cryptoKeys.list",
+                      "description": "Lists CryptoKeys."
                     },
                     "encrypt": {
-                      "httpMethod": "POST",
-                      "parameterOrder": [
-                        "name"
-                      ],
+                      "description": "Encrypt data, so that it can only be recovered by a call to Decrypt.",
+                      "request": {
+                        "$ref": "EncryptRequest"
+                      },
                       "response": {
                         "$ref": "EncryptResponse"
                       },
+                      "parameterOrder": [
+                        "name"
+                      ],
+                      "httpMethod": "POST",
                       "scopes": [
                         "https://www.googleapis.com/auth/cloud-platform"
                       ],
@@ -122,21 +503,21 @@
                         }
                       },
                       "flatPath": "v1/projects/{projectsId}/locations/{locationsId}/keyRings/{keyRingsId}/cryptoKeys/{cryptoKeysId}:encrypt",
-                      "id": "cloudkms.projects.locations.keyRings.cryptoKeys.encrypt",
                       "path": "v1/{+name}:encrypt",
-                      "description": "Encrypt data, so that it can only be recovered by a call to Decrypt.",
-                      "request": {
-                        "$ref": "EncryptRequest"
-                      }
+                      "id": "cloudkms.projects.locations.keyRings.cryptoKeys.encrypt"
                     },
                     "create": {
-                      "response": {
+                      "description": "Create a new CryptoKey within a KeyRing.\n\nCryptoKey.purpose is required.",
+                      "request": {
                         "$ref": "CryptoKey"
                       },
+                      "httpMethod": "POST",
                       "parameterOrder": [
                         "parent"
                       ],
-                      "httpMethod": "POST",
+                      "response": {
+                        "$ref": "CryptoKey"
+                      },
                       "scopes": [
                         "https://www.googleapis.com/auth/cloud-platform"
                       ],
@@ -147,35 +528,25 @@
                           "type": "string"
                         },
                         "parent": {
-                          "pattern": "^projects/[^/]+/locations/[^/]+/keyRings/[^/]+$",
-                          "location": "path",
                           "description": "Required. The name of the KeyRing associated with the\nCryptoKeys.",
                           "required": true,
-                          "type": "string"
+                          "type": "string",
+                          "pattern": "^projects/[^/]+/locations/[^/]+/keyRings/[^/]+$",
+                          "location": "path"
                         }
                       },
                       "flatPath": "v1/projects/{projectsId}/locations/{locationsId}/keyRings/{keyRingsId}/cryptoKeys",
-                      "path": "v1/{+parent}/cryptoKeys",
                       "id": "cloudkms.projects.locations.keyRings.cryptoKeys.create",
-                      "description": "Create a new CryptoKey within a KeyRing.\n\nCryptoKey.purpose is required.",
-                      "request": {
-                        "$ref": "CryptoKey"
-                      }
+                      "path": "v1/{+parent}/cryptoKeys"
                     },
                     "setIamPolicy": {
-                      "path": "v1/{+resource}:setIamPolicy",
-                      "id": "cloudkms.projects.locations.keyRings.cryptoKeys.setIamPolicy",
-                      "description": "Sets the access control policy on the specified resource. Replaces any\nexisting policy.",
-                      "request": {
-                        "$ref": "SetIamPolicyRequest"
-                      },
-                      "response": {
-                        "$ref": "Policy"
-                      },
+                      "httpMethod": "POST",
                       "parameterOrder": [
                         "resource"
                       ],
-                      "httpMethod": "POST",
+                      "response": {
+                        "$ref": "Policy"
+                      },
                       "scopes": [
                         "https://www.googleapis.com/auth/cloud-platform"
                       ],
@@ -188,7 +559,13 @@
                           "location": "path"
                         }
                       },
-                      "flatPath": "v1/projects/{projectsId}/locations/{locationsId}/keyRings/{keyRingsId}/cryptoKeys/{cryptoKeysId}:setIamPolicy"
+                      "flatPath": "v1/projects/{projectsId}/locations/{locationsId}/keyRings/{keyRingsId}/cryptoKeys/{cryptoKeysId}:setIamPolicy",
+                      "id": "cloudkms.projects.locations.keyRings.cryptoKeys.setIamPolicy",
+                      "path": "v1/{+resource}:setIamPolicy",
+                      "description": "Sets the access control policy on the specified resource. Replaces any\nexisting policy.",
+                      "request": {
+                        "$ref": "SetIamPolicyRequest"
+                      }
                     },
                     "updatePrimaryVersion": {
                       "response": {
@@ -244,441 +621,78 @@
                       "flatPath": "v1/projects/{projectsId}/locations/{locationsId}/keyRings/{keyRingsId}/cryptoKeys/{cryptoKeysId}:getIamPolicy"
                     },
                     "get": {
+                      "path": "v1/{+name}",
+                      "id": "cloudkms.projects.locations.keyRings.cryptoKeys.get",
+                      "description": "Returns metadata for a given CryptoKey, as well as its\nprimary CryptoKeyVersion.",
+                      "parameterOrder": [
+                        "name"
+                      ],
                       "httpMethod": "GET",
                       "response": {
                         "$ref": "CryptoKey"
                       },
-                      "parameterOrder": [
-                        "name"
-                      ],
                       "parameters": {
                         "name": {
-                          "pattern": "^projects/[^/]+/locations/[^/]+/keyRings/[^/]+/cryptoKeys/[^/]+$",
-                          "location": "path",
                           "description": "The name of the CryptoKey to get.",
                           "required": true,
-                          "type": "string"
+                          "type": "string",
+                          "pattern": "^projects/[^/]+/locations/[^/]+/keyRings/[^/]+/cryptoKeys/[^/]+$",
+                          "location": "path"
                         }
                       },
                       "scopes": [
                         "https://www.googleapis.com/auth/cloud-platform"
                       ],
-                      "flatPath": "v1/projects/{projectsId}/locations/{locationsId}/keyRings/{keyRingsId}/cryptoKeys/{cryptoKeysId}",
-                      "id": "cloudkms.projects.locations.keyRings.cryptoKeys.get",
-                      "path": "v1/{+name}",
-                      "description": "Returns metadata for a given CryptoKey, as well as its\nprimary CryptoKeyVersion."
+                      "flatPath": "v1/projects/{projectsId}/locations/{locationsId}/keyRings/{keyRingsId}/cryptoKeys/{cryptoKeysId}"
                     },
                     "patch": {
-                      "id": "cloudkms.projects.locations.keyRings.cryptoKeys.patch",
                       "path": "v1/{+name}",
+                      "id": "cloudkms.projects.locations.keyRings.cryptoKeys.patch",
                       "description": "Update a CryptoKey.",
                       "request": {
                         "$ref": "CryptoKey"
                       },
-                      "httpMethod": "PATCH",
-                      "parameterOrder": [
-                        "name"
-                      ],
                       "response": {
                         "$ref": "CryptoKey"
                       },
+                      "parameterOrder": [
+                        "name"
+                      ],
+                      "httpMethod": "PATCH",
                       "scopes": [
                         "https://www.googleapis.com/auth/cloud-platform"
                       ],
                       "parameters": {
+                        "updateMask": {
+                          "description": "Required list of fields to be updated in this request.",
+                          "format": "google-fieldmask",
+                          "type": "string",
+                          "location": "query"
+                        },
                         "name": {
                           "pattern": "^projects/[^/]+/locations/[^/]+/keyRings/[^/]+/cryptoKeys/[^/]+$",
                           "location": "path",
                           "description": "Output only. The resource name for this CryptoKey in the format\n`projects/*/locations/*/keyRings/*/cryptoKeys/*`.",
                           "required": true,
                           "type": "string"
-                        },
-                        "updateMask": {
-                          "description": "Required list of fields to be updated in this request.",
-                          "format": "google-fieldmask",
-                          "type": "string",
-                          "location": "query"
                         }
                       },
                       "flatPath": "v1/projects/{projectsId}/locations/{locationsId}/keyRings/{keyRingsId}/cryptoKeys/{cryptoKeysId}"
                     }
-                  },
-                  "resources": {
-                    "cryptoKeyVersions": {
-                      "methods": {
-                        "restore": {
-                          "response": {
-                            "$ref": "CryptoKeyVersion"
-                          },
-                          "parameterOrder": [
-                            "name"
-                          ],
-                          "httpMethod": "POST",
-                          "scopes": [
-                            "https://www.googleapis.com/auth/cloud-platform"
-                          ],
-                          "parameters": {
-                            "name": {
-                              "description": "The resource name of the CryptoKeyVersion to restore.",
-                              "required": true,
-                              "type": "string",
-                              "pattern": "^projects/[^/]+/locations/[^/]+/keyRings/[^/]+/cryptoKeys/[^/]+/cryptoKeyVersions/[^/]+$",
-                              "location": "path"
-                            }
-                          },
-                          "flatPath": "v1/projects/{projectsId}/locations/{locationsId}/keyRings/{keyRingsId}/cryptoKeys/{cryptoKeysId}/cryptoKeyVersions/{cryptoKeyVersionsId}:restore",
-                          "path": "v1/{+name}:restore",
-                          "id": "cloudkms.projects.locations.keyRings.cryptoKeys.cryptoKeyVersions.restore",
-                          "description": "Restore a CryptoKeyVersion in the\nDESTROY_SCHEDULED,\nstate.\n\nUpon restoration of the CryptoKeyVersion, state\nwill be set to DISABLED,\nand destroy_time will be cleared.",
-                          "request": {
-                            "$ref": "RestoreCryptoKeyVersionRequest"
-                          }
-                        },
-                        "patch": {
-                          "response": {
-                            "$ref": "CryptoKeyVersion"
-                          },
-                          "parameterOrder": [
-                            "name"
-                          ],
-                          "httpMethod": "PATCH",
-                          "parameters": {
-                            "updateMask": {
-                              "location": "query",
-                              "description": "Required list of fields to be updated in this request.",
-                              "format": "google-fieldmask",
-                              "type": "string"
-                            },
-                            "name": {
-                              "pattern": "^projects/[^/]+/locations/[^/]+/keyRings/[^/]+/cryptoKeys/[^/]+/cryptoKeyVersions/[^/]+$",
-                              "location": "path",
-                              "description": "Output only. The resource name for this CryptoKeyVersion in the format\n`projects/*/locations/*/keyRings/*/cryptoKeys/*/cryptoKeyVersions/*`.",
-                              "required": true,
-                              "type": "string"
-                            }
-                          },
-                          "scopes": [
-                            "https://www.googleapis.com/auth/cloud-platform"
-                          ],
-                          "flatPath": "v1/projects/{projectsId}/locations/{locationsId}/keyRings/{keyRingsId}/cryptoKeys/{cryptoKeysId}/cryptoKeyVersions/{cryptoKeyVersionsId}",
-                          "path": "v1/{+name}",
-                          "id": "cloudkms.projects.locations.keyRings.cryptoKeys.cryptoKeyVersions.patch",
-                          "request": {
-                            "$ref": "CryptoKeyVersion"
-                          },
-                          "description": "Update a CryptoKeyVersion's metadata.\n\nstate may be changed between\nENABLED and\nDISABLED using this\nmethod. See DestroyCryptoKeyVersion and RestoreCryptoKeyVersion to\nmove between other states."
-                        },
-                        "get": {
-                          "response": {
-                            "$ref": "CryptoKeyVersion"
-                          },
-                          "parameterOrder": [
-                            "name"
-                          ],
-                          "httpMethod": "GET",
-                          "scopes": [
-                            "https://www.googleapis.com/auth/cloud-platform"
-                          ],
-                          "parameters": {
-                            "name": {
-                              "description": "The name of the CryptoKeyVersion to get.",
-                              "required": true,
-                              "type": "string",
-                              "pattern": "^projects/[^/]+/locations/[^/]+/keyRings/[^/]+/cryptoKeys/[^/]+/cryptoKeyVersions/[^/]+$",
-                              "location": "path"
-                            }
-                          },
-                          "flatPath": "v1/projects/{projectsId}/locations/{locationsId}/keyRings/{keyRingsId}/cryptoKeys/{cryptoKeysId}/cryptoKeyVersions/{cryptoKeyVersionsId}",
-                          "path": "v1/{+name}",
-                          "id": "cloudkms.projects.locations.keyRings.cryptoKeys.cryptoKeyVersions.get",
-                          "description": "Returns metadata for a given CryptoKeyVersion."
-                        },
-                        "list": {
-                          "id": "cloudkms.projects.locations.keyRings.cryptoKeys.cryptoKeyVersions.list",
-                          "path": "v1/{+parent}/cryptoKeyVersions",
-                          "description": "Lists CryptoKeyVersions.",
-                          "httpMethod": "GET",
-                          "response": {
-                            "$ref": "ListCryptoKeyVersionsResponse"
-                          },
-                          "parameterOrder": [
-                            "parent"
-                          ],
-                          "scopes": [
-                            "https://www.googleapis.com/auth/cloud-platform"
-                          ],
-                          "parameters": {
-                            "pageToken": {
-                              "description": "Optional pagination token, returned earlier via\nListCryptoKeyVersionsResponse.next_page_token.",
-                              "type": "string",
-                              "location": "query"
-                            },
-                            "pageSize": {
-                              "description": "Optional limit on the number of CryptoKeyVersions to\ninclude in the response. Further CryptoKeyVersions can\nsubsequently be obtained by including the\nListCryptoKeyVersionsResponse.next_page_token in a subsequent request.\nIf unspecified, the server will pick an appropriate default.",
-                              "format": "int32",
-                              "type": "integer",
-                              "location": "query"
-                            },
-                            "parent": {
-                              "pattern": "^projects/[^/]+/locations/[^/]+/keyRings/[^/]+/cryptoKeys/[^/]+$",
-                              "location": "path",
-                              "description": "Required. The resource name of the CryptoKey to list, in the format\n`projects/*/locations/*/keyRings/*/cryptoKeys/*`.",
-                              "required": true,
-                              "type": "string"
-                            }
-                          },
-                          "flatPath": "v1/projects/{projectsId}/locations/{locationsId}/keyRings/{keyRingsId}/cryptoKeys/{cryptoKeysId}/cryptoKeyVersions"
-                        },
-                        "create": {
-                          "response": {
-                            "$ref": "CryptoKeyVersion"
-                          },
-                          "parameterOrder": [
-                            "parent"
-                          ],
-                          "httpMethod": "POST",
-                          "parameters": {
-                            "parent": {
-                              "pattern": "^projects/[^/]+/locations/[^/]+/keyRings/[^/]+/cryptoKeys/[^/]+$",
-                              "location": "path",
-                              "description": "Required. The name of the CryptoKey associated with\nthe CryptoKeyVersions.",
-                              "required": true,
-                              "type": "string"
-                            }
-                          },
-                          "scopes": [
-                            "https://www.googleapis.com/auth/cloud-platform"
-                          ],
-                          "flatPath": "v1/projects/{projectsId}/locations/{locationsId}/keyRings/{keyRingsId}/cryptoKeys/{cryptoKeysId}/cryptoKeyVersions",
-                          "path": "v1/{+parent}/cryptoKeyVersions",
-                          "id": "cloudkms.projects.locations.keyRings.cryptoKeys.cryptoKeyVersions.create",
-                          "request": {
-                            "$ref": "CryptoKeyVersion"
-                          },
-                          "description": "Create a new CryptoKeyVersion in a CryptoKey.\n\nThe server will assign the next sequential id. If unset,\nstate will be set to\nENABLED."
-                        },
-                        "destroy": {
-                          "httpMethod": "POST",
-                          "parameterOrder": [
-                            "name"
-                          ],
-                          "response": {
-                            "$ref": "CryptoKeyVersion"
-                          },
-                          "scopes": [
-                            "https://www.googleapis.com/auth/cloud-platform"
-                          ],
-                          "parameters": {
-                            "name": {
-                              "description": "The resource name of the CryptoKeyVersion to destroy.",
-                              "required": true,
-                              "type": "string",
-                              "pattern": "^projects/[^/]+/locations/[^/]+/keyRings/[^/]+/cryptoKeys/[^/]+/cryptoKeyVersions/[^/]+$",
-                              "location": "path"
-                            }
-                          },
-                          "flatPath": "v1/projects/{projectsId}/locations/{locationsId}/keyRings/{keyRingsId}/cryptoKeys/{cryptoKeysId}/cryptoKeyVersions/{cryptoKeyVersionsId}:destroy",
-                          "id": "cloudkms.projects.locations.keyRings.cryptoKeys.cryptoKeyVersions.destroy",
-                          "path": "v1/{+name}:destroy",
-                          "description": "Schedule a CryptoKeyVersion for destruction.\n\nUpon calling this method, CryptoKeyVersion.state will be set to\nDESTROY_SCHEDULED\nand destroy_time will be set to a time 24\nhours in the future, at which point the state\nwill be changed to\nDESTROYED, and the key\nmaterial will be irrevocably destroyed.\n\nBefore the destroy_time is reached,\nRestoreCryptoKeyVersion may be called to reverse the process.",
-                          "request": {
-                            "$ref": "DestroyCryptoKeyVersionRequest"
-                          }
-                        }
-                      }
-                    }
                   }
                 }
-              },
-              "methods": {
-                "list": {
-                  "description": "Lists KeyRings.",
-                  "httpMethod": "GET",
-                  "response": {
-                    "$ref": "ListKeyRingsResponse"
-                  },
-                  "parameterOrder": [
-                    "parent"
-                  ],
-                  "scopes": [
-                    "https://www.googleapis.com/auth/cloud-platform"
-                  ],
-                  "parameters": {
-                    "pageToken": {
-                      "location": "query",
-                      "description": "Optional pagination token, returned earlier via\nListKeyRingsResponse.next_page_token.",
-                      "type": "string"
-                    },
-                    "pageSize": {
-                      "location": "query",
-                      "description": "Optional limit on the number of KeyRings to include in the\nresponse.  Further KeyRings can subsequently be obtained by\nincluding the ListKeyRingsResponse.next_page_token in a subsequent\nrequest.  If unspecified, the server will pick an appropriate default.",
-                      "format": "int32",
-                      "type": "integer"
-                    },
-                    "parent": {
-                      "description": "Required. The resource name of the location associated with the\nKeyRings, in the format `projects/*/locations/*`.",
-                      "required": true,
-                      "type": "string",
-                      "pattern": "^projects/[^/]+/locations/[^/]+$",
-                      "location": "path"
-                    }
-                  },
-                  "flatPath": "v1/projects/{projectsId}/locations/{locationsId}/keyRings",
-                  "id": "cloudkms.projects.locations.keyRings.list",
-                  "path": "v1/{+parent}/keyRings"
-                },
-                "create": {
-                  "id": "cloudkms.projects.locations.keyRings.create",
-                  "path": "v1/{+parent}/keyRings",
-                  "description": "Create a new KeyRing in a given Project and Location.",
-                  "request": {
-                    "$ref": "KeyRing"
-                  },
-                  "httpMethod": "POST",
-                  "parameterOrder": [
-                    "parent"
-                  ],
-                  "response": {
-                    "$ref": "KeyRing"
-                  },
-                  "scopes": [
-                    "https://www.googleapis.com/auth/cloud-platform"
-                  ],
-                  "parameters": {
-                    "parent": {
-                      "pattern": "^projects/[^/]+/locations/[^/]+$",
-                      "location": "path",
-                      "description": "Required. The resource name of the location associated with the\nKeyRings, in the format `projects/*/locations/*`.",
-                      "required": true,
-                      "type": "string"
-                    },
-                    "keyRingId": {
-                      "location": "query",
-                      "description": "Required. It must be unique within a location and match the regular\nexpression `[a-zA-Z0-9_-]{1,63}`",
-                      "type": "string"
-                    }
-                  },
-                  "flatPath": "v1/projects/{projectsId}/locations/{locationsId}/keyRings"
-                },
-                "setIamPolicy": {
-                  "httpMethod": "POST",
-                  "parameterOrder": [
-                    "resource"
-                  ],
-                  "response": {
-                    "$ref": "Policy"
-                  },
-                  "scopes": [
-                    "https://www.googleapis.com/auth/cloud-platform"
-                  ],
-                  "parameters": {
-                    "resource": {
-                      "pattern": "^projects/[^/]+/locations/[^/]+/keyRings/[^/]+$",
-                      "location": "path",
-                      "description": "REQUIRED: The resource for which the policy is being specified.\nSee the operation documentation for the appropriate value for this field.",
-                      "required": true,
-                      "type": "string"
-                    }
-                  },
-                  "flatPath": "v1/projects/{projectsId}/locations/{locationsId}/keyRings/{keyRingsId}:setIamPolicy",
-                  "id": "cloudkms.projects.locations.keyRings.setIamPolicy",
-                  "path": "v1/{+resource}:setIamPolicy",
-                  "description": "Sets the access control policy on the specified resource. Replaces any\nexisting policy.",
-                  "request": {
-                    "$ref": "SetIamPolicyRequest"
-                  }
-                },
-                "getIamPolicy": {
-                  "httpMethod": "GET",
-                  "response": {
-                    "$ref": "Policy"
-                  },
-                  "parameterOrder": [
-                    "resource"
-                  ],
-                  "parameters": {
-                    "resource": {
-                      "pattern": "^projects/[^/]+/locations/[^/]+/keyRings/[^/]+$",
-                      "location": "path",
-                      "description": "REQUIRED: The resource for which the policy is being requested.\nSee the operation documentation for the appropriate value for this field.",
-                      "required": true,
-                      "type": "string"
-                    }
-                  },
-                  "scopes": [
-                    "https://www.googleapis.com/auth/cloud-platform"
-                  ],
-                  "flatPath": "v1/projects/{projectsId}/locations/{locationsId}/keyRings/{keyRingsId}:getIamPolicy",
-                  "id": "cloudkms.projects.locations.keyRings.getIamPolicy",
-                  "path": "v1/{+resource}:getIamPolicy",
-                  "description": "Gets the access control policy for a resource.\nReturns an empty policy if the resource exists and does not have a policy\nset."
-                },
-                "get": {
-                  "description": "Returns metadata for a given KeyRing.",
-                  "response": {
-                    "$ref": "KeyRing"
-                  },
-                  "parameterOrder": [
-                    "name"
-                  ],
-                  "httpMethod": "GET",
-                  "scopes": [
-                    "https://www.googleapis.com/auth/cloud-platform"
-                  ],
-                  "parameters": {
-                    "name": {
-                      "pattern": "^projects/[^/]+/locations/[^/]+/keyRings/[^/]+$",
-                      "location": "path",
-                      "description": "The name of the KeyRing to get.",
-                      "required": true,
-                      "type": "string"
-                    }
-                  },
-                  "flatPath": "v1/projects/{projectsId}/locations/{locationsId}/keyRings/{keyRingsId}",
-                  "path": "v1/{+name}",
-                  "id": "cloudkms.projects.locations.keyRings.get"
-                },
-                "testIamPermissions": {
-                  "description": "Returns permissions that a caller has on the specified resource.\nIf the resource does not exist, this will return an empty set of\npermissions, not a NOT_FOUND error.\n\nNote: This operation is designed to be used for building permission-aware\nUIs and command-line tools, not for authorization checking. This operation\nmay \"fail open\" without warning.",
-                  "request": {
-                    "$ref": "TestIamPermissionsRequest"
-                  },
-                  "response": {
-                    "$ref": "TestIamPermissionsResponse"
-                  },
-                  "parameterOrder": [
-                    "resource"
-                  ],
-                  "httpMethod": "POST",
-                  "scopes": [
-                    "https://www.googleapis.com/auth/cloud-platform"
-                  ],
-                  "parameters": {
-                    "resource": {
-                      "pattern": "^projects/[^/]+/locations/[^/]+/keyRings/[^/]+$",
-                      "location": "path",
-                      "description": "REQUIRED: The resource for which the policy detail is being requested.\nSee the operation documentation for the appropriate value for this field.",
-                      "required": true,
-                      "type": "string"
-                    }
-                  },
-                  "flatPath": "v1/projects/{projectsId}/locations/{locationsId}/keyRings/{keyRingsId}:testIamPermissions",
-                  "path": "v1/{+resource}:testIamPermissions",
-                  "id": "cloudkms.projects.locations.keyRings.testIamPermissions"
-                }
               }
             }
           },
           "methods": {
             "list": {
-              "description": "Lists information about the supported locations for this service.",
+              "httpMethod": "GET",
               "response": {
                 "$ref": "ListLocationsResponse"
               },
               "parameterOrder": [
                 "name"
               ],
-              "httpMethod": "GET",
               "scopes": [
                 "https://www.googleapis.com/auth/cloud-platform"
               ],
@@ -691,27 +705,29 @@
                   "type": "string"
                 },
                 "pageToken": {
-                  "location": "query",
                   "description": "The standard list page token.",
-                  "type": "string"
+                  "type": "string",
+                  "location": "query"
                 },
                 "pageSize": {
-                  "location": "query",
                   "description": "The standard list page size.",
                   "format": "int32",
-                  "type": "integer"
+                  "type": "integer",
+                  "location": "query"
                 },
                 "filter": {
-                  "location": "query",
                   "description": "The standard list filter.",
-                  "type": "string"
+                  "type": "string",
+                  "location": "query"
                 }
               },
               "flatPath": "v1/projects/{projectsId}/locations",
+              "id": "cloudkms.projects.locations.list",
               "path": "v1/{+name}/locations",
-              "id": "cloudkms.projects.locations.list"
+              "description": "Lists information about the supported locations for this service."
             },
             "get": {
+              "description": "Get information about a location.",
               "response": {
                 "$ref": "Location"
               },
@@ -719,6 +735,9 @@
                 "name"
               ],
               "httpMethod": "GET",
+              "scopes": [
+                "https://www.googleapis.com/auth/cloud-platform"
+              ],
               "parameters": {
                 "name": {
                   "description": "Resource name for the location.",
@@ -728,13 +747,9 @@
                   "location": "path"
                 }
               },
-              "scopes": [
-                "https://www.googleapis.com/auth/cloud-platform"
-              ],
               "flatPath": "v1/projects/{projectsId}/locations/{locationsId}",
               "path": "v1/{+name}",
-              "id": "cloudkms.projects.locations.get",
-              "description": "Get information about a location."
+              "id": "cloudkms.projects.locations.get"
             }
           }
         }
@@ -742,44 +757,33 @@
     }
   },
   "parameters": {
-    "upload_protocol": {
-      "location": "query",
-      "description": "Upload protocol for media (e.g. \"raw\", \"multipart\").",
-      "type": "string"
-    },
-    "prettyPrint": {
-      "location": "query",
-      "description": "Returns response with indentations and line breaks.",
-      "type": "boolean",
-      "default": "true"
-    },
     "fields": {
-      "location": "query",
       "description": "Selector specifying which fields to include in a partial response.",
-      "type": "string"
+      "type": "string",
+      "location": "query"
     },
     "uploadType": {
       "location": "query",
       "description": "Legacy upload protocol for media (e.g. \"media\", \"multipart\").",
       "type": "string"
     },
+    "callback": {
+      "description": "JSONP",
+      "type": "string",
+      "location": "query"
+    },
     "$.xgafv": {
+      "enumDescriptions": [
+        "v1 error format",
+        "v2 error format"
+      ],
+      "location": "query",
       "enum": [
         "1",
         "2"
       ],
       "description": "V1 error format.",
-      "type": "string",
-      "enumDescriptions": [
-        "v1 error format",
-        "v2 error format"
-      ],
-      "location": "query"
-    },
-    "callback": {
-      "description": "JSONP",
-      "type": "string",
-      "location": "query"
+      "type": "string"
     },
     "alt": {
       "enum": [
@@ -797,20 +801,20 @@
       "description": "Data format for response.",
       "default": "json"
     },
-    "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"
     },
+    "access_token": {
+      "location": "query",
+      "description": "OAuth access token.",
+      "type": "string"
+    },
     "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",
-      "location": "query"
+      "type": "string"
     },
     "pp": {
       "description": "Pretty-print response.",
@@ -818,492 +822,40 @@
       "default": "true",
       "location": "query"
     },
-    "oauth_token": {
-      "location": "query",
-      "description": "OAuth 2.0 token for the current user.",
-      "type": "string"
-    },
     "bearer_token": {
       "description": "OAuth bearer token.",
       "type": "string",
       "location": "query"
+    },
+    "oauth_token": {
+      "description": "OAuth 2.0 token for the current user.",
+      "type": "string",
+      "location": "query"
+    },
+    "upload_protocol": {
+      "location": "query",
+      "description": "Upload protocol for media (e.g. \"raw\", \"multipart\").",
+      "type": "string"
+    },
+    "prettyPrint": {
+      "location": "query",
+      "description": "Returns response with indentations and line breaks.",
+      "type": "boolean",
+      "default": "true"
     }
   },
   "version": "v1",
   "baseUrl": "https://cloudkms.googleapis.com/",
-  "servicePath": "",
-  "description": "Manages encryption for your cloud services the same way you do on-premise. You can generate, use, rotate, and destroy AES256 encryption keys.",
   "kind": "discovery#restDescription",
+  "description": "Manages encryption for your cloud services the same way you do on-premise. You can generate, use, rotate, and destroy AES256 encryption keys.",
+  "servicePath": "",
   "basePath": "",
-  "id": "cloudkms:v1",
+  "revision": "20170320",
   "documentationLink": "https://cloud.google.com/kms/",
-  "revision": "20170301",
+  "id": "cloudkms:v1",
   "discoveryVersion": "v1",
   "version_module": "True",
   "schemas": {
-    "TestIamPermissionsRequest": {
-      "description": "Request message for `TestIamPermissions` method.",
-      "type": "object",
-      "properties": {
-        "permissions": {
-          "description": "The set of permissions to check for the `resource`. Permissions with\nwildcards (such as '*' or 'storage.*') are not allowed. For more\ninformation see\n[IAM Overview](https://cloud.google.com/iam/docs/overview#permissions).",
-          "type": "array",
-          "items": {
-            "type": "string"
-          }
-        }
-      },
-      "id": "TestIamPermissionsRequest"
-    },
-    "Policy": {
-      "properties": {
-        "version": {
-          "description": "Version of the `Policy`. The default version is 0.",
-          "format": "int32",
-          "type": "integer"
-        },
-        "auditConfigs": {
-          "description": "Specifies cloud audit logging configuration for this policy.",
-          "type": "array",
-          "items": {
-            "$ref": "AuditConfig"
-          }
-        },
-        "bindings": {
-          "description": "Associates a list of `members` to a `role`.\nMultiple `bindings` must not be specified for the same `role`.\n`bindings` with no members will result in an error.",
-          "type": "array",
-          "items": {
-            "$ref": "Binding"
-          }
-        },
-        "etag": {
-          "description": "`etag` is used for optimistic concurrency control as a way to help\nprevent simultaneous updates of a policy from overwriting each other.\nIt is strongly suggested that systems make use of the `etag` in the\nread-modify-write cycle to perform policy updates in order to avoid race\nconditions: An `etag` is returned in the response to `getIamPolicy`, and\nsystems are expected to put that etag in the request to `setIamPolicy` to\nensure that their change will be applied to the same version of the policy.\n\nIf no `etag` is provided in the call to `setIamPolicy`, then the existing\npolicy is overwritten blindly.",
-          "format": "byte",
-          "type": "string"
-        },
-        "iamOwned": {
-          "type": "boolean"
-        },
-        "rules": {
-          "description": "If more than one rule is specified, the rules are applied in the following\nmanner:\n- All matching LOG rules are always applied.\n- If any DENY/DENY_WITH_LOG rule matches, permission is denied.\n  Logging will be applied if one or more matching rule requires logging.\n- Otherwise, if any ALLOW/ALLOW_WITH_LOG rule matches, permission is\n  granted.\n  Logging will be applied if one or more matching rule requires logging.\n- Otherwise, if no rule applies, permission is denied.",
-          "type": "array",
-          "items": {
-            "$ref": "Rule"
-          }
-        }
-      },
-      "id": "Policy",
-      "description": "Defines an Identity and Access Management (IAM) policy. It is used to\nspecify access control policies for Cloud Platform resources.\n\n\nA `Policy` consists of a list of `bindings`. A `Binding` binds a list of\n`members` to a `role`, where the members can be user accounts, Google groups,\nGoogle domains, and service accounts. A `role` is a named list of permissions\ndefined by IAM.\n\n**Example**\n\n    {\n      \"bindings\": [\n        {\n          \"role\": \"roles/owner\",\n          \"members\": [\n            \"user:mike@example.com\",\n            \"group:admins@example.com\",\n            \"domain:google.com\",\n            \"serviceAccount:my-other-app@appspot.gserviceaccount.com\",\n          ]\n        },\n        {\n          \"role\": \"roles/viewer\",\n          \"members\": [\"user:sean@example.com\"]\n        }\n      ]\n    }\n\nFor a description of IAM and its features, see the\n[IAM developer's guide](https://cloud.google.com/iam).",
-      "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": {
-          "description": "The standard List next-page token.",
-          "type": "string"
-        }
-      },
-      "id": "ListLocationsResponse"
-    },
-    "KeyRing": {
-      "properties": {
-        "createTime": {
-          "description": "Output only. The time at which this KeyRing was created.",
-          "format": "google-datetime",
-          "type": "string"
-        },
-        "name": {
-          "description": "Output only. The resource name for the KeyRing in the format\n`projects/*/locations/*/keyRings/*`.",
-          "type": "string"
-        }
-      },
-      "id": "KeyRing",
-      "description": "A KeyRing is a toplevel logical grouping of CryptoKeys.",
-      "type": "object"
-    },
-    "EncryptResponse": {
-      "properties": {
-        "ciphertext": {
-          "description": "The encrypted data.",
-          "format": "byte",
-          "type": "string"
-        },
-        "name": {
-          "description": "The resource name of the CryptoKeyVersion used in encryption.",
-          "type": "string"
-        }
-      },
-      "id": "EncryptResponse",
-      "description": "Response message for KeyManagementService.Encrypt.",
-      "type": "object"
-    },
-    "UpdateCryptoKeyPrimaryVersionRequest": {
-      "properties": {
-        "cryptoKeyVersionId": {
-          "description": "The id of the child CryptoKeyVersion to use as primary.",
-          "type": "string"
-        }
-      },
-      "id": "UpdateCryptoKeyPrimaryVersionRequest",
-      "description": "Request message for KeyManagementService.UpdateCryptoKeyPrimaryVersion.",
-      "type": "object"
-    },
-    "RestoreCryptoKeyVersionRequest": {
-      "properties": {},
-      "id": "RestoreCryptoKeyVersionRequest",
-      "description": "Request message for KeyManagementService.RestoreCryptoKeyVersion.",
-      "type": "object"
-    },
-    "DataAccessOptions": {
-      "description": "Write a Data Access (Gin) log",
-      "type": "object",
-      "properties": {},
-      "id": "DataAccessOptions"
-    },
-    "ListKeyRingsResponse": {
-      "properties": {
-        "nextPageToken": {
-          "description": "A token to retrieve next page of results. Pass this value in\nListKeyRingsRequest.page_token to retrieve the next page of results.",
-          "type": "string"
-        },
-        "totalSize": {
-          "description": "The total number of KeyRings that matched the query.",
-          "format": "int32",
-          "type": "integer"
-        },
-        "keyRings": {
-          "description": "The list of KeyRings.",
-          "type": "array",
-          "items": {
-            "$ref": "KeyRing"
-          }
-        }
-      },
-      "id": "ListKeyRingsResponse",
-      "description": "Response message for KeyManagementService.ListKeyRings.",
-      "type": "object"
-    },
-    "AuditConfig": {
-      "description": "Specifies the audit configuration for a service.\nIt consists of which permission types are logged, and what identities, if\nany, are exempted from logging.\nAn AuditConifg must have one or more AuditLogConfigs.\n\nIf there are AuditConfigs for both `allServices` and a specific service,\nthe union of the two AuditConfigs is used for that service: the log_types\nspecified in each AuditConfig are enabled, and the exempted_members in each\nAuditConfig are exempted.\nExample Policy with multiple AuditConfigs:\n{\n  \"audit_configs\": [\n    {\n      \"service\": \"allServices\"\n      \"audit_log_configs\": [\n        {\n          \"log_type\": \"DATA_READ\",\n          \"exempted_members\": [\n            \"user:foo@gmail.com\"\n          ]\n        },\n        {\n          \"log_type\": \"DATA_WRITE\",\n        },\n        {\n          \"log_type\": \"ADMIN_READ\",\n        }\n      ]\n    },\n    {\n      \"service\": \"fooservice@googleapis.com\"\n      \"audit_log_configs\": [\n        {\n          \"log_type\": \"DATA_READ\",\n        },\n        {\n          \"log_type\": \"DATA_WRITE\",\n          \"exempted_members\": [\n            \"user:bar@gmail.com\"\n          ]\n        }\n      ]\n    }\n  ]\n}\nFor fooservice, this policy enables DATA_READ, DATA_WRITE and ADMIN_READ\nlogging. It also exempts foo@gmail.com from DATA_READ logging, and\nbar@gmail.com from DATA_WRITE logging.",
-      "type": "object",
-      "properties": {
-        "exemptedMembers": {
-          "type": "array",
-          "items": {
-            "type": "string"
-          }
-        },
-        "service": {
-          "description": "Specifies a service that will be enabled for audit logging.\nFor example, `resourcemanager`, `storage`, `compute`.\n`allServices` is a special value that covers all services.",
-          "type": "string"
-        },
-        "auditLogConfigs": {
-          "description": "The configuration for logging of each type of permission.\nNext ID: 4",
-          "type": "array",
-          "items": {
-            "$ref": "AuditLogConfig"
-          }
-        }
-      },
-      "id": "AuditConfig"
-    },
-    "CryptoKeyVersion": {
-      "description": "A CryptoKeyVersion represents an individual cryptographic key, and the\nassociated key material.\n\nIt can be used for cryptographic operations either directly, or via its\nparent CryptoKey, in which case the server will choose the appropriate\nversion for the operation.",
-      "type": "object",
-      "properties": {
-        "state": {
-          "enum": [
-            "CRYPTO_KEY_VERSION_STATE_UNSPECIFIED",
-            "ENABLED",
-            "DISABLED",
-            "DESTROYED",
-            "DESTROY_SCHEDULED"
-          ],
-          "description": "The current state of the CryptoKeyVersion.",
-          "type": "string",
-          "enumDescriptions": [
-            "Not specified.",
-            "This version may be used in Encrypt and\nDecrypt requests.",
-            "This version may not be used, but the key material is still available,\nand the version can be placed back into the ENABLED state.",
-            "This version is destroyed, and the key material is no longer stored.\nA version may not leave this state once entered.",
-            "This version is scheduled for destruction, and will be destroyed soon.\nCall\nRestoreCryptoKeyVersion\nto put it back into the DISABLED state."
-          ]
-        },
-        "name": {
-          "description": "Output only. The resource name for this CryptoKeyVersion in the format\n`projects/*/locations/*/keyRings/*/cryptoKeys/*/cryptoKeyVersions/*`.",
-          "type": "string"
-        },
-        "destroyEventTime": {
-          "description": "Output only. The time this CryptoKeyVersion's key material was\ndestroyed. Only present if state is\nDESTROYED.",
-          "format": "google-datetime",
-          "type": "string"
-        },
-        "destroyTime": {
-          "description": "Output only. The time this CryptoKeyVersion's key material is scheduled\nfor destruction. Only present if state is\nDESTROY_SCHEDULED.",
-          "format": "google-datetime",
-          "type": "string"
-        },
-        "createTime": {
-          "description": "Output only. The time at which this CryptoKeyVersion was created.",
-          "format": "google-datetime",
-          "type": "string"
-        }
-      },
-      "id": "CryptoKeyVersion"
-    },
-    "CloudAuditOptions": {
-      "properties": {},
-      "id": "CloudAuditOptions",
-      "description": "Write a Cloud Audit log",
-      "type": "object"
-    },
-    "Binding": {
-      "description": "Associates `members` with a `role`.",
-      "type": "object",
-      "properties": {
-        "members": {
-          "description": "Specifies the identities requesting access for a Cloud Platform resource.\n`members` can have the following values:\n\n* `allUsers`: A special identifier that represents anyone who is\n   on the internet; with or without a Google account.\n\n* `allAuthenticatedUsers`: A special identifier that represents anyone\n   who is authenticated with a Google account or a service account.\n\n* `user:{emailid}`: An email address that represents a specific Google\n   account. For example, `alice@gmail.com` or `joe@example.com`.\n\n\n* `serviceAccount:{emailid}`: An email address that represents a service\n   account. For example, `my-other-app@appspot.gserviceaccount.com`.\n\n* `group:{emailid}`: An email address that represents a Google group.\n   For example, `admins@example.com`.\n\n* `domain:{domain}`: A Google Apps domain name that represents all the\n   users of that domain. For example, `google.com` or `example.com`.\n\n",
-          "type": "array",
-          "items": {
-            "type": "string"
-          }
-        },
-        "role": {
-          "description": "Role that is assigned to `members`.\nFor example, `roles/viewer`, `roles/editor`, or `roles/owner`.\nRequired",
-          "type": "string"
-        }
-      },
-      "id": "Binding"
-    },
-    "EncryptRequest": {
-      "description": "Request message for KeyManagementService.Encrypt.",
-      "type": "object",
-      "properties": {
-        "plaintext": {
-          "description": "Required. The data to encrypt. Must be no larger than 64KiB.",
-          "format": "byte",
-          "type": "string"
-        },
-        "additionalAuthenticatedData": {
-          "description": "Optional data that, if specified, must also be provided during decryption\nthrough DecryptRequest.additional_authenticated_data.  Must be no\nlarger than 64KiB.",
-          "format": "byte",
-          "type": "string"
-        }
-      },
-      "id": "EncryptRequest"
-    },
-    "ListCryptoKeyVersionsResponse": {
-      "properties": {
-        "nextPageToken": {
-          "description": "A token to retrieve next page of results. Pass this value in\nListCryptoKeyVersionsRequest.page_token to retrieve the next page of\nresults.",
-          "type": "string"
-        },
-        "totalSize": {
-          "description": "The total number of CryptoKeyVersions that matched the\nquery.",
-          "format": "int32",
-          "type": "integer"
-        },
-        "cryptoKeyVersions": {
-          "description": "The list of CryptoKeyVersions.",
-          "type": "array",
-          "items": {
-            "$ref": "CryptoKeyVersion"
-          }
-        }
-      },
-      "id": "ListCryptoKeyVersionsResponse",
-      "description": "Response message for KeyManagementService.ListCryptoKeyVersions.",
-      "type": "object"
-    },
-    "TestIamPermissionsResponse": {
-      "properties": {
-        "permissions": {
-          "description": "A subset of `TestPermissionsRequest.permissions` that the caller is\nallowed.",
-          "type": "array",
-          "items": {
-            "type": "string"
-          }
-        }
-      },
-      "id": "TestIamPermissionsResponse",
-      "description": "Response message for `TestIamPermissions` method.",
-      "type": "object"
-    },
-    "DestroyCryptoKeyVersionRequest": {
-      "properties": {},
-      "id": "DestroyCryptoKeyVersionRequest",
-      "description": "Request message for KeyManagementService.DestroyCryptoKeyVersion.",
-      "type": "object"
-    },
-    "Rule": {
-      "description": "A rule to be applied in a Policy.",
-      "type": "object",
-      "properties": {
-        "description": {
-          "description": "Human-readable description of the rule.",
-          "type": "string"
-        },
-        "conditions": {
-          "description": "Additional restrictions that must be met",
-          "type": "array",
-          "items": {
-            "$ref": "Condition"
-          }
-        },
-        "logConfig": {
-          "description": "The config returned to callers of tech.iam.IAM.CheckPolicy for any entries\nthat match the LOG action.",
-          "type": "array",
-          "items": {
-            "$ref": "LogConfig"
-          }
-        },
-        "in": {
-          "description": "If one or more 'in' clauses are specified, the rule matches if\nthe PRINCIPAL/AUTHORITY_SELECTOR is in at least one of these entries.",
-          "type": "array",
-          "items": {
-            "type": "string"
-          }
-        },
-        "permissions": {
-          "description": "A permission is a string of form '\u003cservice\u003e.\u003cresource type\u003e.\u003cverb\u003e'\n(e.g., 'storage.buckets.list'). A value of '*' matches all permissions,\nand a verb part of '*' (e.g., 'storage.buckets.*') matches all verbs.",
-          "type": "array",
-          "items": {
-            "type": "string"
-          }
-        },
-        "action": {
-          "enum": [
-            "NO_ACTION",
-            "ALLOW",
-            "ALLOW_WITH_LOG",
-            "DENY",
-            "DENY_WITH_LOG",
-            "LOG"
-          ],
-          "description": "Required",
-          "type": "string",
-          "enumDescriptions": [
-            "Default no action.",
-            "Matching 'Entries' grant access.",
-            "Matching 'Entries' grant access and the caller promises to log\nthe request per the returned log_configs.",
-            "Matching 'Entries' deny access.",
-            "Matching 'Entries' deny access and the caller promises to log\nthe request per the returned log_configs.",
-            "Matching 'Entries' tell IAM.Check callers to generate logs."
-          ]
-        },
-        "notIn": {
-          "description": "If one or more 'not_in' clauses are specified, the rule matches\nif the PRINCIPAL/AUTHORITY_SELECTOR is in none of the entries.\nThe format for in and not_in entries is the same as for members in a\nBinding (see google/iam/v1/policy.proto).",
-          "type": "array",
-          "items": {
-            "type": "string"
-          }
-        }
-      },
-      "id": "Rule"
-    },
-    "CryptoKey": {
-      "description": "A CryptoKey represents a logical key that can be used for cryptographic\noperations.\n\nA CryptoKey is made up of one or more versions, which\nrepresent the actual key material used in cryptographic operations.",
-      "type": "object",
-      "properties": {
-        "purpose": {
-          "enumDescriptions": [
-            "Not specified.",
-            "CryptoKeys with this purpose may be used with\nEncrypt and\nDecrypt."
-          ],
-          "enum": [
-            "CRYPTO_KEY_PURPOSE_UNSPECIFIED",
-            "ENCRYPT_DECRYPT"
-          ],
-          "description": "The immutable purpose of this CryptoKey. Currently, the only acceptable\npurpose is ENCRYPT_DECRYPT.",
-          "type": "string"
-        },
-        "nextRotationTime": {
-          "description": "At next_rotation_time, the Key Management Service will automatically:\n\n1. Create a new version of this CryptoKey.\n2. Mark the new version as primary.\n\nKey rotations performed manually via\nCreateCryptoKeyVersion and\nUpdateCryptoKeyPrimaryVersion\ndo not affect next_rotation_time.",
-          "format": "google-datetime",
-          "type": "string"
-        },
-        "createTime": {
-          "description": "Output only. The time at which this CryptoKey was created.",
-          "format": "google-datetime",
-          "type": "string"
-        },
-        "rotationPeriod": {
-          "description": "next_rotation_time will be advanced by this period when the service\nautomatically rotates a key. Must be at least one day.\n\nIf rotation_period is set, next_rotation_time must also be set.",
-          "format": "google-duration",
-          "type": "string"
-        },
-        "primary": {
-          "$ref": "CryptoKeyVersion",
-          "description": "Output only. A copy of the \"primary\" CryptoKeyVersion that will be used\nby Encrypt when this CryptoKey is given\nin EncryptRequest.name.\n\nThe CryptoKey's primary version can be updated via\nUpdateCryptoKeyPrimaryVersion."
-        },
-        "name": {
-          "description": "Output only. The resource name for this CryptoKey in the format\n`projects/*/locations/*/keyRings/*/cryptoKeys/*`.",
-          "type": "string"
-        }
-      },
-      "id": "CryptoKey"
-    },
-    "LogConfig": {
-      "properties": {
-        "counter": {
-          "$ref": "CounterOptions",
-          "description": "Counter options."
-        },
-        "dataAccess": {
-          "description": "Data access options.",
-          "$ref": "DataAccessOptions"
-        },
-        "cloudAudit": {
-          "description": "Cloud audit options.",
-          "$ref": "CloudAuditOptions"
-        }
-      },
-      "id": "LogConfig",
-      "description": "Specifies what kind of log the caller must write\nIncrement a streamz counter with the specified metric and field names.\n\nMetric names should start with a '/', generally be lowercase-only,\nand end in \"_count\". Field names should not contain an initial slash.\nThe actual exported metric names will have \"/iam/policy\" prepended.\n\nField names correspond to IAM request parameters and field values are\ntheir respective values.\n\nAt present the only supported field names are\n   - \"iam_principal\", corresponding to IAMContext.principal;\n   - \"\" (empty string), resulting in one aggretated counter with no field.\n\nExamples:\n  counter { metric: \"/debug_access_count\"  field: \"iam_principal\" }\n  ==\u003e increment counter /iam/policy/backend_debug_access_count\n                        {iam_principal=[value of IAMContext.principal]}\n\nAt this time we do not support:\n* multiple field names (though this may be supported in the future)\n* decrementing the counter\n* incrementing it by anything other than 1",
-      "type": "object"
-    },
-    "SetIamPolicyRequest": {
-      "description": "Request message for `SetIamPolicy` method.",
-      "type": "object",
-      "properties": {
-        "policy": {
-          "$ref": "Policy",
-          "description": "REQUIRED: The complete policy to be applied to the `resource`. The size of\nthe policy is limited to a few 10s of KB. An empty policy is a\nvalid policy but certain Cloud Platform services (such as Projects)\nmight reject them."
-        },
-        "updateMask": {
-          "description": "OPTIONAL: A FieldMask specifying which fields of the policy to modify. Only\nthe fields in the mask will be modified. If no mask is provided, a default\nmask is used:\npaths: \"bindings, etag\"\nThis field is only used by Cloud IAM.",
-          "format": "google-fieldmask",
-          "type": "string"
-        }
-      },
-      "id": "SetIamPolicyRequest"
-    },
-    "DecryptRequest": {
-      "properties": {
-        "ciphertext": {
-          "description": "Required. The encrypted data originally returned in\nEncryptResponse.ciphertext.",
-          "format": "byte",
-          "type": "string"
-        },
-        "additionalAuthenticatedData": {
-          "description": "Optional data that must match the data originally supplied in\nEncryptRequest.additional_authenticated_data.",
-          "format": "byte",
-          "type": "string"
-        }
-      },
-      "id": "DecryptRequest",
-      "description": "Request message for KeyManagementService.Decrypt.",
-      "type": "object"
-    },
     "Location": {
       "description": "A resource that represents Google Cloud Platform location.",
       "type": "object",
@@ -1361,13 +913,6 @@
       "description": "A condition to be met.",
       "type": "object",
       "properties": {
-        "values": {
-          "description": "The objects of the condition. This is mutually exclusive with 'value'.",
-          "type": "array",
-          "items": {
-            "type": "string"
-          }
-        },
         "iam": {
           "enum": [
             "NO_ATTR",
@@ -1386,6 +931,13 @@
             "What types of justifications have been supplied with this request.\nString values should match enum names from tech.iam.JustificationType,\ne.g. \"MANUAL_STRING\". It is not permitted to grant access based on\nthe *absence* of a justification, so justification conditions can only\nbe used in a \"positive\" context (e.g., ALLOW/IN or DENY/NOT_IN).\n\nMultiple justifications, e.g., a Buganizer ID and a manually-entered\nreason, are normal and supported."
           ]
         },
+        "values": {
+          "description": "The objects of the condition. This is mutually exclusive with 'value'.",
+          "type": "array",
+          "items": {
+            "type": "string"
+          }
+        },
         "op": {
           "enumDescriptions": [
             "Default no-op.",
@@ -1415,6 +967,13 @@
           "type": "string"
         },
         "sys": {
+          "enumDescriptions": [
+            "Default non-attribute type",
+            "Region of the resource",
+            "Service name",
+            "Resource name",
+            "IP address of the caller"
+          ],
           "enum": [
             "NO_ATTR",
             "REGION",
@@ -1423,19 +982,14 @@
             "IP"
           ],
           "description": "Trusted attributes supplied by any service that owns resources and uses\nthe IAM system for access control.",
-          "type": "string",
-          "enumDescriptions": [
-            "Default non-attribute type",
-            "Region of the resource",
-            "Service name",
-            "Resource name",
-            "IP address of the caller"
-          ]
+          "type": "string"
         }
       },
       "id": "Condition"
     },
     "CounterOptions": {
+      "description": "Options for counters",
+      "type": "object",
       "properties": {
         "metric": {
           "description": "The metric to update.",
@@ -1446,13 +1000,9 @@
           "type": "string"
         }
       },
-      "id": "CounterOptions",
-      "description": "Options for counters",
-      "type": "object"
+      "id": "CounterOptions"
     },
     "AuditLogConfig": {
-      "description": "Provides the configuration for logging a type of permissions.\nExample:\n\n    {\n      \"audit_log_configs\": [\n        {\n          \"log_type\": \"DATA_READ\",\n          \"exempted_members\": [\n            \"user:foo@gmail.com\"\n          ]\n        },\n        {\n          \"log_type\": \"DATA_WRITE\",\n        }\n      ]\n    }\n\nThis enables 'DATA_READ' and 'DATA_WRITE' logging, while exempting\nfoo@gmail.com from DATA_READ logging.",
-      "type": "object",
       "properties": {
         "exemptedMembers": {
           "description": "Specifies the identities that do not cause logging for this type of\npermission.\nFollows the same format of Binding.members.",
@@ -1462,6 +1012,12 @@
           }
         },
         "logType": {
+          "enumDescriptions": [
+            "Default case. Should never be this.",
+            "Admin reads. Example: CloudIAM getIamPolicy",
+            "Data writes. Example: CloudSQL Users create",
+            "Data reads. Example: CloudSQL Users list"
+          ],
           "enum": [
             "LOG_TYPE_UNSPECIFIED",
             "ADMIN_READ",
@@ -1469,16 +1025,12 @@
             "DATA_READ"
           ],
           "description": "The log type that this config enables.",
-          "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"
-          ]
+          "type": "string"
         }
       },
-      "id": "AuditLogConfig"
+      "id": "AuditLogConfig",
+      "description": "Provides the configuration for logging a type of permissions.\nExample:\n\n    {\n      \"audit_log_configs\": [\n        {\n          \"log_type\": \"DATA_READ\",\n          \"exempted_members\": [\n            \"user:foo@gmail.com\"\n          ]\n        },\n        {\n          \"log_type\": \"DATA_WRITE\",\n        }\n      ]\n    }\n\nThis enables 'DATA_READ' and 'DATA_WRITE' logging, while exempting\nfoo@gmail.com from DATA_READ logging.",
+      "type": "object"
     },
     "DecryptResponse": {
       "properties": {
@@ -1491,26 +1043,474 @@
       "id": "DecryptResponse",
       "description": "Response message for KeyManagementService.Decrypt.",
       "type": "object"
+    },
+    "TestIamPermissionsRequest": {
+      "description": "Request message for `TestIamPermissions` method.",
+      "type": "object",
+      "properties": {
+        "permissions": {
+          "description": "The set of permissions to check for the `resource`. Permissions with\nwildcards (such as '*' or 'storage.*') are not allowed. For more\ninformation see\n[IAM Overview](https://cloud.google.com/iam/docs/overview#permissions).",
+          "type": "array",
+          "items": {
+            "type": "string"
+          }
+        }
+      },
+      "id": "TestIamPermissionsRequest"
+    },
+    "KeyRing": {
+      "description": "A KeyRing is a toplevel logical grouping of CryptoKeys.",
+      "type": "object",
+      "properties": {
+        "name": {
+          "description": "Output only. The resource name for the KeyRing in the format\n`projects/*/locations/*/keyRings/*`.",
+          "type": "string"
+        },
+        "createTime": {
+          "description": "Output only. The time at which this KeyRing was created.",
+          "format": "google-datetime",
+          "type": "string"
+        }
+      },
+      "id": "KeyRing"
+    },
+    "EncryptResponse": {
+      "properties": {
+        "name": {
+          "description": "The resource name of the CryptoKeyVersion used in encryption.",
+          "type": "string"
+        },
+        "ciphertext": {
+          "description": "The encrypted data.",
+          "format": "byte",
+          "type": "string"
+        }
+      },
+      "id": "EncryptResponse",
+      "description": "Response message for KeyManagementService.Encrypt.",
+      "type": "object"
+    },
+    "ListLocationsResponse": {
+      "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.",
+          "type": "array",
+          "items": {
+            "$ref": "Location"
+          }
+        }
+      },
+      "id": "ListLocationsResponse",
+      "description": "The response message for Locations.ListLocations.",
+      "type": "object"
+    },
+    "Policy": {
+      "properties": {
+        "iamOwned": {
+          "type": "boolean"
+        },
+        "rules": {
+          "description": "If more than one rule is specified, the rules are applied in the following\nmanner:\n- All matching LOG rules are always applied.\n- If any DENY/DENY_WITH_LOG rule matches, permission is denied.\n  Logging will be applied if one or more matching rule requires logging.\n- Otherwise, if any ALLOW/ALLOW_WITH_LOG rule matches, permission is\n  granted.\n  Logging will be applied if one or more matching rule requires logging.\n- Otherwise, if no rule applies, permission is denied.",
+          "type": "array",
+          "items": {
+            "$ref": "Rule"
+          }
+        },
+        "version": {
+          "description": "Version of the `Policy`. The default version is 0.",
+          "format": "int32",
+          "type": "integer"
+        },
+        "auditConfigs": {
+          "description": "Specifies cloud audit logging configuration for this policy.",
+          "type": "array",
+          "items": {
+            "$ref": "AuditConfig"
+          }
+        },
+        "bindings": {
+          "description": "Associates a list of `members` to a `role`.\nMultiple `bindings` must not be specified for the same `role`.\n`bindings` with no members will result in an error.",
+          "type": "array",
+          "items": {
+            "$ref": "Binding"
+          }
+        },
+        "etag": {
+          "description": "`etag` is used for optimistic concurrency control as a way to help\nprevent simultaneous updates of a policy from overwriting each other.\nIt is strongly suggested that systems make use of the `etag` in the\nread-modify-write cycle to perform policy updates in order to avoid race\nconditions: An `etag` is returned in the response to `getIamPolicy`, and\nsystems are expected to put that etag in the request to `setIamPolicy` to\nensure that their change will be applied to the same version of the policy.\n\nIf no `etag` is provided in the call to `setIamPolicy`, then the existing\npolicy is overwritten blindly.",
+          "format": "byte",
+          "type": "string"
+        }
+      },
+      "id": "Policy",
+      "description": "Defines an Identity and Access Management (IAM) policy. It is used to\nspecify access control policies for Cloud Platform resources.\n\n\nA `Policy` consists of a list of `bindings`. A `Binding` binds a list of\n`members` to a `role`, where the members can be user accounts, Google groups,\nGoogle domains, and service accounts. A `role` is a named list of permissions\ndefined by IAM.\n\n**Example**\n\n    {\n      \"bindings\": [\n        {\n          \"role\": \"roles/owner\",\n          \"members\": [\n            \"user:mike@example.com\",\n            \"group:admins@example.com\",\n            \"domain:google.com\",\n            \"serviceAccount:my-other-app@appspot.gserviceaccount.com\",\n          ]\n        },\n        {\n          \"role\": \"roles/viewer\",\n          \"members\": [\"user:sean@example.com\"]\n        }\n      ]\n    }\n\nFor a description of IAM and its features, see the\n[IAM developer's guide](https://cloud.google.com/iam).",
+      "type": "object"
+    },
+    "UpdateCryptoKeyPrimaryVersionRequest": {
+      "description": "Request message for KeyManagementService.UpdateCryptoKeyPrimaryVersion.",
+      "type": "object",
+      "properties": {
+        "cryptoKeyVersionId": {
+          "description": "The id of the child CryptoKeyVersion to use as primary.",
+          "type": "string"
+        }
+      },
+      "id": "UpdateCryptoKeyPrimaryVersionRequest"
+    },
+    "RestoreCryptoKeyVersionRequest": {
+      "description": "Request message for KeyManagementService.RestoreCryptoKeyVersion.",
+      "type": "object",
+      "properties": {},
+      "id": "RestoreCryptoKeyVersionRequest"
+    },
+    "DataAccessOptions": {
+      "description": "Write a Data Access (Gin) log",
+      "type": "object",
+      "properties": {},
+      "id": "DataAccessOptions"
+    },
+    "ListKeyRingsResponse": {
+      "properties": {
+        "nextPageToken": {
+          "description": "A token to retrieve next page of results. Pass this value in\nListKeyRingsRequest.page_token to retrieve the next page of results.",
+          "type": "string"
+        },
+        "totalSize": {
+          "description": "The total number of KeyRings that matched the query.",
+          "format": "int32",
+          "type": "integer"
+        },
+        "keyRings": {
+          "description": "The list of KeyRings.",
+          "type": "array",
+          "items": {
+            "$ref": "KeyRing"
+          }
+        }
+      },
+      "id": "ListKeyRingsResponse",
+      "description": "Response message for KeyManagementService.ListKeyRings.",
+      "type": "object"
+    },
+    "AuditConfig": {
+      "description": "Specifies the audit configuration for a service.\nThe configuration determines which permission types are logged, and what\nidentities, if any, are exempted from logging.\nAn AuditConifg must have one or more AuditLogConfigs.\n\nIf there are AuditConfigs for both `allServices` and a specific service,\nthe union of the two AuditConfigs is used for that service: the log_types\nspecified in each AuditConfig are enabled, and the exempted_members in each\nAuditConfig are exempted.\nExample Policy with multiple AuditConfigs:\n{\n  \"audit_configs\": [\n    {\n      \"service\": \"allServices\"\n      \"audit_log_configs\": [\n        {\n          \"log_type\": \"DATA_READ\",\n          \"exempted_members\": [\n            \"user:foo@gmail.com\"\n          ]\n        },\n        {\n          \"log_type\": \"DATA_WRITE\",\n        },\n        {\n          \"log_type\": \"ADMIN_READ\",\n        }\n      ]\n    },\n    {\n      \"service\": \"fooservice@googleapis.com\"\n      \"audit_log_configs\": [\n        {\n          \"log_type\": \"DATA_READ\",\n        },\n        {\n          \"log_type\": \"DATA_WRITE\",\n          \"exempted_members\": [\n            \"user:bar@gmail.com\"\n          ]\n        }\n      ]\n    }\n  ]\n}\nFor fooservice, this policy enables DATA_READ, DATA_WRITE and ADMIN_READ\nlogging. It also exempts foo@gmail.com from DATA_READ logging, and\nbar@gmail.com from DATA_WRITE logging.",
+      "type": "object",
+      "properties": {
+        "service": {
+          "description": "Specifies a service that will be enabled for audit logging.\nFor example, `storage.googleapis.com`, `cloudsql.googleapis.com`.\n`allServices` is a special value that covers all services.",
+          "type": "string"
+        },
+        "auditLogConfigs": {
+          "description": "The configuration for logging of each type of permission.\nNext ID: 4",
+          "type": "array",
+          "items": {
+            "$ref": "AuditLogConfig"
+          }
+        },
+        "exemptedMembers": {
+          "type": "array",
+          "items": {
+            "type": "string"
+          }
+        }
+      },
+      "id": "AuditConfig"
+    },
+    "CryptoKeyVersion": {
+      "properties": {
+        "destroyTime": {
+          "description": "Output only. The time this CryptoKeyVersion's key material is scheduled\nfor destruction. Only present if state is\nDESTROY_SCHEDULED.",
+          "format": "google-datetime",
+          "type": "string"
+        },
+        "createTime": {
+          "description": "Output only. The time at which this CryptoKeyVersion was created.",
+          "format": "google-datetime",
+          "type": "string"
+        },
+        "state": {
+          "enumDescriptions": [
+            "Not specified.",
+            "This version may be used in Encrypt and\nDecrypt requests.",
+            "This version may not be used, but the key material is still available,\nand the version can be placed back into the ENABLED state.",
+            "This version is destroyed, and the key material is no longer stored.\nA version may not leave this state once entered.",
+            "This version is scheduled for destruction, and will be destroyed soon.\nCall\nRestoreCryptoKeyVersion\nto put it back into the DISABLED state."
+          ],
+          "enum": [
+            "CRYPTO_KEY_VERSION_STATE_UNSPECIFIED",
+            "ENABLED",
+            "DISABLED",
+            "DESTROYED",
+            "DESTROY_SCHEDULED"
+          ],
+          "description": "The current state of the CryptoKeyVersion.",
+          "type": "string"
+        },
+        "name": {
+          "description": "Output only. The resource name for this CryptoKeyVersion in the format\n`projects/*/locations/*/keyRings/*/cryptoKeys/*/cryptoKeyVersions/*`.",
+          "type": "string"
+        },
+        "destroyEventTime": {
+          "description": "Output only. The time this CryptoKeyVersion's key material was\ndestroyed. Only present if state is\nDESTROYED.",
+          "format": "google-datetime",
+          "type": "string"
+        }
+      },
+      "id": "CryptoKeyVersion",
+      "description": "A CryptoKeyVersion represents an individual cryptographic key, and the\nassociated key material.\n\nIt can be used for cryptographic operations either directly, or via its\nparent CryptoKey, in which case the server will choose the appropriate\nversion for the operation.",
+      "type": "object"
+    },
+    "CloudAuditOptions": {
+      "description": "Write a Cloud Audit log",
+      "type": "object",
+      "properties": {},
+      "id": "CloudAuditOptions"
+    },
+    "Binding": {
+      "description": "Associates `members` with a `role`.",
+      "type": "object",
+      "properties": {
+        "members": {
+          "description": "Specifies the identities requesting access for a Cloud Platform resource.\n`members` can have the following values:\n\n* `allUsers`: A special identifier that represents anyone who is\n   on the internet; with or without a Google account.\n\n* `allAuthenticatedUsers`: A special identifier that represents anyone\n   who is authenticated with a Google account or a service account.\n\n* `user:{emailid}`: An email address that represents a specific Google\n   account. For example, `alice@gmail.com` or `joe@example.com`.\n\n\n* `serviceAccount:{emailid}`: An email address that represents a service\n   account. For example, `my-other-app@appspot.gserviceaccount.com`.\n\n* `group:{emailid}`: An email address that represents a Google group.\n   For example, `admins@example.com`.\n\n* `domain:{domain}`: A Google Apps domain name that represents all the\n   users of that domain. For example, `google.com` or `example.com`.\n\n",
+          "type": "array",
+          "items": {
+            "type": "string"
+          }
+        },
+        "role": {
+          "description": "Role that is assigned to `members`.\nFor example, `roles/viewer`, `roles/editor`, or `roles/owner`.\nRequired",
+          "type": "string"
+        }
+      },
+      "id": "Binding"
+    },
+    "EncryptRequest": {
+      "properties": {
+        "additionalAuthenticatedData": {
+          "description": "Optional data that, if specified, must also be provided during decryption\nthrough DecryptRequest.additional_authenticated_data.  Must be no\nlarger than 64KiB.",
+          "format": "byte",
+          "type": "string"
+        },
+        "plaintext": {
+          "description": "Required. The data to encrypt. Must be no larger than 64KiB.",
+          "format": "byte",
+          "type": "string"
+        }
+      },
+      "id": "EncryptRequest",
+      "description": "Request message for KeyManagementService.Encrypt.",
+      "type": "object"
+    },
+    "ListCryptoKeyVersionsResponse": {
+      "properties": {
+        "cryptoKeyVersions": {
+          "description": "The list of CryptoKeyVersions.",
+          "type": "array",
+          "items": {
+            "$ref": "CryptoKeyVersion"
+          }
+        },
+        "nextPageToken": {
+          "description": "A token to retrieve next page of results. Pass this value in\nListCryptoKeyVersionsRequest.page_token to retrieve the next page of\nresults.",
+          "type": "string"
+        },
+        "totalSize": {
+          "description": "The total number of CryptoKeyVersions that matched the\nquery.",
+          "format": "int32",
+          "type": "integer"
+        }
+      },
+      "id": "ListCryptoKeyVersionsResponse",
+      "description": "Response message for KeyManagementService.ListCryptoKeyVersions.",
+      "type": "object"
+    },
+    "TestIamPermissionsResponse": {
+      "properties": {
+        "permissions": {
+          "description": "A subset of `TestPermissionsRequest.permissions` that the caller is\nallowed.",
+          "type": "array",
+          "items": {
+            "type": "string"
+          }
+        }
+      },
+      "id": "TestIamPermissionsResponse",
+      "description": "Response message for `TestIamPermissions` method.",
+      "type": "object"
+    },
+    "DestroyCryptoKeyVersionRequest": {
+      "properties": {},
+      "id": "DestroyCryptoKeyVersionRequest",
+      "description": "Request message for KeyManagementService.DestroyCryptoKeyVersion.",
+      "type": "object"
+    },
+    "Rule": {
+      "properties": {
+        "permissions": {
+          "description": "A permission is a string of form '\u003cservice\u003e.\u003cresource type\u003e.\u003cverb\u003e'\n(e.g., 'storage.buckets.list'). A value of '*' matches all permissions,\nand a verb part of '*' (e.g., 'storage.buckets.*') matches all verbs.",
+          "type": "array",
+          "items": {
+            "type": "string"
+          }
+        },
+        "action": {
+          "enumDescriptions": [
+            "Default no action.",
+            "Matching 'Entries' grant access.",
+            "Matching 'Entries' grant access and the caller promises to log\nthe request per the returned log_configs.",
+            "Matching 'Entries' deny access.",
+            "Matching 'Entries' deny access and the caller promises to log\nthe request per the returned log_configs.",
+            "Matching 'Entries' tell IAM.Check callers to generate logs."
+          ],
+          "enum": [
+            "NO_ACTION",
+            "ALLOW",
+            "ALLOW_WITH_LOG",
+            "DENY",
+            "DENY_WITH_LOG",
+            "LOG"
+          ],
+          "description": "Required",
+          "type": "string"
+        },
+        "notIn": {
+          "description": "If one or more 'not_in' clauses are specified, the rule matches\nif the PRINCIPAL/AUTHORITY_SELECTOR is in none of the entries.\nThe format for in and not_in entries is the same as for members in a\nBinding (see google/iam/v1/policy.proto).",
+          "type": "array",
+          "items": {
+            "type": "string"
+          }
+        },
+        "description": {
+          "description": "Human-readable description of the rule.",
+          "type": "string"
+        },
+        "conditions": {
+          "description": "Additional restrictions that must be met",
+          "type": "array",
+          "items": {
+            "$ref": "Condition"
+          }
+        },
+        "logConfig": {
+          "description": "The config returned to callers of tech.iam.IAM.CheckPolicy for any entries\nthat match the LOG action.",
+          "type": "array",
+          "items": {
+            "$ref": "LogConfig"
+          }
+        },
+        "in": {
+          "description": "If one or more 'in' clauses are specified, the rule matches if\nthe PRINCIPAL/AUTHORITY_SELECTOR is in at least one of these entries.",
+          "type": "array",
+          "items": {
+            "type": "string"
+          }
+        }
+      },
+      "id": "Rule",
+      "description": "A rule to be applied in a Policy.",
+      "type": "object"
+    },
+    "CryptoKey": {
+      "description": "A CryptoKey represents a logical key that can be used for cryptographic\noperations.\n\nA CryptoKey is made up of one or more versions, which\nrepresent the actual key material used in cryptographic operations.",
+      "type": "object",
+      "properties": {
+        "primary": {
+          "description": "Output only. A copy of the \"primary\" CryptoKeyVersion that will be used\nby Encrypt when this CryptoKey is given\nin EncryptRequest.name.\n\nThe CryptoKey's primary version can be updated via\nUpdateCryptoKeyPrimaryVersion.",
+          "$ref": "CryptoKeyVersion"
+        },
+        "name": {
+          "description": "Output only. The resource name for this CryptoKey in the format\n`projects/*/locations/*/keyRings/*/cryptoKeys/*`.",
+          "type": "string"
+        },
+        "purpose": {
+          "enum": [
+            "CRYPTO_KEY_PURPOSE_UNSPECIFIED",
+            "ENCRYPT_DECRYPT"
+          ],
+          "description": "The immutable purpose of this CryptoKey. Currently, the only acceptable\npurpose is ENCRYPT_DECRYPT.",
+          "type": "string",
+          "enumDescriptions": [
+            "Not specified.",
+            "CryptoKeys with this purpose may be used with\nEncrypt and\nDecrypt."
+          ]
+        },
+        "nextRotationTime": {
+          "description": "At next_rotation_time, the Key Management Service will automatically:\n\n1. Create a new version of this CryptoKey.\n2. Mark the new version as primary.\n\nKey rotations performed manually via\nCreateCryptoKeyVersion and\nUpdateCryptoKeyPrimaryVersion\ndo not affect next_rotation_time.",
+          "format": "google-datetime",
+          "type": "string"
+        },
+        "createTime": {
+          "description": "Output only. The time at which this CryptoKey was created.",
+          "format": "google-datetime",
+          "type": "string"
+        },
+        "rotationPeriod": {
+          "description": "next_rotation_time will be advanced by this period when the service\nautomatically rotates a key. Must be at least one day.\n\nIf rotation_period is set, next_rotation_time must also be set.",
+          "format": "google-duration",
+          "type": "string"
+        }
+      },
+      "id": "CryptoKey"
+    },
+    "LogConfig": {
+      "description": "Specifies what kind of log the caller must write",
+      "type": "object",
+      "properties": {
+        "counter": {
+          "description": "Counter options.",
+          "$ref": "CounterOptions"
+        },
+        "dataAccess": {
+          "$ref": "DataAccessOptions",
+          "description": "Data access options."
+        },
+        "cloudAudit": {
+          "description": "Cloud audit options.",
+          "$ref": "CloudAuditOptions"
+        }
+      },
+      "id": "LogConfig"
+    },
+    "SetIamPolicyRequest": {
+      "description": "Request message for `SetIamPolicy` method.",
+      "type": "object",
+      "properties": {
+        "updateMask": {
+          "description": "OPTIONAL: A FieldMask specifying which fields of the policy to modify. Only\nthe fields in the mask will be modified. If no mask is provided, the\nfollowing default mask is used:\npaths: \"bindings, etag\"\nThis field is only used by Cloud IAM.",
+          "format": "google-fieldmask",
+          "type": "string"
+        },
+        "policy": {
+          "$ref": "Policy",
+          "description": "REQUIRED: The complete policy to be applied to the `resource`. The size of\nthe policy is limited to a few 10s of KB. An empty policy is a\nvalid policy but certain Cloud Platform services (such as Projects)\nmight reject them."
+        }
+      },
+      "id": "SetIamPolicyRequest"
+    },
+    "DecryptRequest": {
+      "properties": {
+        "ciphertext": {
+          "description": "Required. The encrypted data originally returned in\nEncryptResponse.ciphertext.",
+          "format": "byte",
+          "type": "string"
+        },
+        "additionalAuthenticatedData": {
+          "description": "Optional data that must match the data originally supplied in\nEncryptRequest.additional_authenticated_data.",
+          "format": "byte",
+          "type": "string"
+        }
+      },
+      "id": "DecryptRequest",
+      "description": "Request message for KeyManagementService.Decrypt.",
+      "type": "object"
     }
   },
   "icons": {
-    "x32": "http://www.google.com/images/icons/product/search-32.gif",
-    "x16": "http://www.google.com/images/icons/product/search-16.gif"
+    "x16": "http://www.google.com/images/icons/product/search-16.gif",
+    "x32": "http://www.google.com/images/icons/product/search-32.gif"
   },
-  "protocol": "rest",
-  "canonicalName": "Cloud KMS",
-  "auth": {
-    "oauth2": {
-      "scopes": {
-        "https://www.googleapis.com/auth/cloud-platform": {
-          "description": "View and manage your data across Google Cloud Platform services"
-        }
-      }
-    }
-  },
-  "rootUrl": "https://cloudkms.googleapis.com/",
-  "ownerDomain": "google.com",
-  "name": "cloudkms",
-  "batchPath": "batch",
-  "title": "Google Cloud Key Management Service (KMS) API"
+  "protocol": "rest"
 }
diff --git a/cloudkms/v1/cloudkms-gen.go b/cloudkms/v1/cloudkms-gen.go
index 376e1fe..3ced5cd 100644
--- a/cloudkms/v1/cloudkms-gen.go
+++ b/cloudkms/v1/cloudkms-gen.go
@@ -61,10 +61,9 @@
 }
 
 type Service struct {
-	client                    *http.Client
-	BasePath                  string // API endpoint base URL
-	UserAgent                 string // optional additional User-Agent fragment
-	GoogleClientHeaderElement string // client header fragment, for Google use only
+	client    *http.Client
+	BasePath  string // API endpoint base URL
+	UserAgent string // optional additional User-Agent fragment
 
 	Projects *ProjectsService
 }
@@ -76,10 +75,6 @@
 	return googleapi.UserAgent + " " + s.UserAgent
 }
 
-func (s *Service) clientHeader() string {
-	return gensupport.GoogleClientHeader("20170210", s.GoogleClientHeaderElement)
-}
-
 func NewProjectsService(s *Service) *ProjectsService {
 	rs := &ProjectsService{s: s}
 	rs.Locations = NewProjectsLocationsService(s)
@@ -138,9 +133,9 @@
 }
 
 // AuditConfig: Specifies the audit configuration for a service.
-// It consists of which permission types are logged, and what
-// identities, if
-// any, are exempted from logging.
+// The configuration determines which permission types are logged, and
+// what
+// identities, if any, are exempted from logging.
 // An AuditConifg must have one or more AuditLogConfigs.
 //
 // If there are AuditConfigs for both `allServices` and a specific
@@ -201,7 +196,8 @@
 
 	// Service: Specifies a service that will be enabled for audit
 	// logging.
-	// For example, `resourcemanager`, `storage`, `compute`.
+	// For example, `storage.googleapis.com`,
+	// `cloudsql.googleapis.com`.
 	// `allServices` is a special value that covers all services.
 	Service string `json:"service,omitempty"`
 
@@ -1054,35 +1050,6 @@
 }
 
 // LogConfig: Specifies what kind of log the caller must write
-// Increment a streamz counter with the specified metric and field
-// names.
-//
-// Metric names should start with a '/', generally be
-// lowercase-only,
-// and end in "_count". Field names should not contain an initial
-// slash.
-// The actual exported metric names will have "/iam/policy"
-// prepended.
-//
-// Field names correspond to IAM request parameters and field values
-// are
-// their respective values.
-//
-// At present the only supported field names are
-//    - "iam_principal", corresponding to IAMContext.principal;
-//    - "" (empty string), resulting in one aggretated counter with no
-// field.
-//
-// Examples:
-//   counter { metric: "/debug_access_count"  field: "iam_principal" }
-//   ==> increment counter /iam/policy/backend_debug_access_count
-//                         {iam_principal=[value of
-// IAMContext.principal]}
-//
-// At this time we do not support:
-// * multiple field names (though this may be supported in the future)
-// * decrementing the counter
-// * incrementing it by anything other than 1
 type LogConfig struct {
 	// CloudAudit: Cloud audit options.
 	CloudAudit *CloudAuditOptions `json:"cloudAudit,omitempty"`
@@ -1317,9 +1284,9 @@
 
 	// UpdateMask: 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, a
-	// default
-	// mask is used:
+	// the fields in the mask will be modified. If no mask is provided,
+	// the
+	// following default mask is used:
 	// paths: "bindings, etag"
 	// This field is only used by Cloud IAM.
 	UpdateMask string `json:"updateMask,omitempty"`
@@ -1507,7 +1474,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	if c.ifNoneMatch_ != "" {
 		reqHeaders.Set("If-None-Match", c.ifNoneMatch_)
 	}
@@ -1669,7 +1635,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	if c.ifNoneMatch_ != "" {
 		reqHeaders.Set("If-None-Match", c.ifNoneMatch_)
 	}
@@ -1845,7 +1810,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	var body io.Reader = nil
 	body, err := googleapi.WithoutDataWrapper.JSONReader(c.keyring)
 	if err != nil {
@@ -1995,7 +1959,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	if c.ifNoneMatch_ != "" {
 		reqHeaders.Set("If-None-Match", c.ifNoneMatch_)
 	}
@@ -2138,7 +2101,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	if c.ifNoneMatch_ != "" {
 		reqHeaders.Set("If-None-Match", c.ifNoneMatch_)
 	}
@@ -2299,7 +2261,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	if c.ifNoneMatch_ != "" {
 		reqHeaders.Set("If-None-Match", c.ifNoneMatch_)
 	}
@@ -2464,7 +2425,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	var body io.Reader = nil
 	body, err := googleapi.WithoutDataWrapper.JSONReader(c.setiampolicyrequest)
 	if err != nil {
@@ -2610,7 +2570,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	var body io.Reader = nil
 	body, err := googleapi.WithoutDataWrapper.JSONReader(c.testiampermissionsrequest)
 	if err != nil {
@@ -2756,7 +2715,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	var body io.Reader = nil
 	body, err := googleapi.WithoutDataWrapper.JSONReader(c.cryptokey)
 	if err != nil {
@@ -2897,7 +2855,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	var body io.Reader = nil
 	body, err := googleapi.WithoutDataWrapper.JSONReader(c.decryptrequest)
 	if err != nil {
@@ -3034,7 +2991,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	var body io.Reader = nil
 	body, err := googleapi.WithoutDataWrapper.JSONReader(c.encryptrequest)
 	if err != nil {
@@ -3180,7 +3136,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	if c.ifNoneMatch_ != "" {
 		reqHeaders.Set("If-None-Match", c.ifNoneMatch_)
 	}
@@ -3323,7 +3278,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	if c.ifNoneMatch_ != "" {
 		reqHeaders.Set("If-None-Match", c.ifNoneMatch_)
 	}
@@ -3485,7 +3439,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	if c.ifNoneMatch_ != "" {
 		reqHeaders.Set("If-None-Match", c.ifNoneMatch_)
 	}
@@ -3655,7 +3608,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	var body io.Reader = nil
 	body, err := googleapi.WithoutDataWrapper.JSONReader(c.cryptokey)
 	if err != nil {
@@ -3799,7 +3751,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	var body io.Reader = nil
 	body, err := googleapi.WithoutDataWrapper.JSONReader(c.setiampolicyrequest)
 	if err != nil {
@@ -3945,7 +3896,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	var body io.Reader = nil
 	body, err := googleapi.WithoutDataWrapper.JSONReader(c.testiampermissionsrequest)
 	if err != nil {
@@ -4082,7 +4032,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	var body io.Reader = nil
 	body, err := googleapi.WithoutDataWrapper.JSONReader(c.updatecryptokeyprimaryversionrequest)
 	if err != nil {
@@ -4222,7 +4171,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	var body io.Reader = nil
 	body, err := googleapi.WithoutDataWrapper.JSONReader(c.cryptokeyversion)
 	if err != nil {
@@ -4370,7 +4318,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	var body io.Reader = nil
 	body, err := googleapi.WithoutDataWrapper.JSONReader(c.destroycryptokeyversionrequest)
 	if err != nil {
@@ -4515,7 +4462,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	if c.ifNoneMatch_ != "" {
 		reqHeaders.Set("If-None-Match", c.ifNoneMatch_)
 	}
@@ -4677,7 +4623,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	if c.ifNoneMatch_ != "" {
 		reqHeaders.Set("If-None-Match", c.ifNoneMatch_)
 	}
@@ -4854,7 +4799,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	var body io.Reader = nil
 	body, err := googleapi.WithoutDataWrapper.JSONReader(c.cryptokeyversion)
 	if err != nil {
@@ -5003,7 +4947,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	var body io.Reader = nil
 	body, err := googleapi.WithoutDataWrapper.JSONReader(c.restorecryptokeyversionrequest)
 	if err != nil {
diff --git a/cloudmonitoring/v2beta2/cloudmonitoring-gen.go b/cloudmonitoring/v2beta2/cloudmonitoring-gen.go
index 0298195..57208fc 100644
--- a/cloudmonitoring/v2beta2/cloudmonitoring-gen.go
+++ b/cloudmonitoring/v2beta2/cloudmonitoring-gen.go
@@ -67,10 +67,9 @@
 }
 
 type Service struct {
-	client                    *http.Client
-	BasePath                  string // API endpoint base URL
-	UserAgent                 string // optional additional User-Agent fragment
-	GoogleClientHeaderElement string // client header fragment, for Google use only
+	client    *http.Client
+	BasePath  string // API endpoint base URL
+	UserAgent string // optional additional User-Agent fragment
 
 	MetricDescriptors *MetricDescriptorsService
 
@@ -86,10 +85,6 @@
 	return googleapi.UserAgent + " " + s.UserAgent
 }
 
-func (s *Service) clientHeader() string {
-	return gensupport.GoogleClientHeader("20170210", s.GoogleClientHeaderElement)
-}
-
 func NewMetricDescriptorsService(s *Service) *MetricDescriptorsService {
 	rs := &MetricDescriptorsService{s: s}
 	return rs
@@ -1019,7 +1014,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	var body io.Reader = nil
 	body, err := googleapi.WithoutDataWrapper.JSONReader(c.metricdescriptor)
 	if err != nil {
@@ -1154,7 +1148,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	var body io.Reader = nil
 	c.urlParams_.Set("alt", alt)
 	urls := googleapi.ResolveRelative(c.s.BasePath, "{project}/metricDescriptors/{metric}")
@@ -1332,7 +1325,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	if c.ifNoneMatch_ != "" {
 		reqHeaders.Set("If-None-Match", c.ifNoneMatch_)
 	}
@@ -1610,7 +1602,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	if c.ifNoneMatch_ != "" {
 		reqHeaders.Set("If-None-Match", c.ifNoneMatch_)
 	}
@@ -1841,7 +1832,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	var body io.Reader = nil
 	body, err := googleapi.WithoutDataWrapper.JSONReader(c.writetimeseriesrequest)
 	if err != nil {
@@ -2082,7 +2072,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	if c.ifNoneMatch_ != "" {
 		reqHeaders.Set("If-None-Match", c.ifNoneMatch_)
 	}
diff --git a/cloudresourcemanager/v1/cloudresourcemanager-api.json b/cloudresourcemanager/v1/cloudresourcemanager-api.json
index 0827eac..3289d2d 100644
--- a/cloudresourcemanager/v1/cloudresourcemanager-api.json
+++ b/cloudresourcemanager/v1/cloudresourcemanager-api.json
@@ -1,4 +1,854 @@
 {
+  "schemas": {
+    "GetEffectiveOrgPolicyRequest": {
+      "description": "The request sent to the GetEffectiveOrgPolicy method.",
+      "type": "object",
+      "properties": {
+        "constraint": {
+          "description": "The name of the `Constraint` to compute the effective `Policy`.",
+          "type": "string"
+        }
+      },
+      "id": "GetEffectiveOrgPolicyRequest"
+    },
+    "ListOrgPoliciesRequest": {
+      "description": "The request sent to the ListOrgPolicies method.",
+      "type": "object",
+      "properties": {
+        "pageSize": {
+          "description": "Size of the pages to be returned. This is currently unsupported and will\nbe ignored. The server may at any point start using this field to limit\npage size.",
+          "format": "int32",
+          "type": "integer"
+        },
+        "pageToken": {
+          "description": "Page token used to retrieve the next page. This is currently unsupported\nand will be ignored. The server may at any point start using this field.",
+          "type": "string"
+        }
+      },
+      "id": "ListOrgPoliciesRequest"
+    },
+    "Operation": {
+      "description": "This resource represents a long-running operation that is the result of a\nnetwork API call.",
+      "type": "object",
+      "properties": {
+        "error": {
+          "$ref": "Status",
+          "description": "The error result of the operation in case of failure or cancellation."
+        },
+        "metadata": {
+          "description": "Service-specific metadata associated with the operation.  It typically\ncontains progress information and common metadata such as create time.\nSome services might not provide such metadata.  Any method that returns a\nlong-running operation should document the metadata type, if any.",
+          "type": "object",
+          "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.\nIf true, the operation is completed, and either `error` or `response` is\navailable.",
+          "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\nmethod returns no data on success, such as `Delete`, the response is\n`google.protobuf.Empty`.  If the original method is standard\n`Get`/`Create`/`Update`, the response should be the resource.  For other\nmethods, the response should have the type `XxxResponse`, where `Xxx`\nis the original method name.  For example, if the original method name\nis `TakeSnapshot()`, the inferred response type is\n`TakeSnapshotResponse`.",
+          "type": "object"
+        },
+        "name": {
+          "description": "The server-assigned name, which is only unique within the same service that\noriginally returns it. If you use the default HTTP mapping, the\n`name` should have the format of `operations/some/unique/name`.",
+          "type": "string"
+        }
+      },
+      "id": "Operation"
+    },
+    "AuditConfig": {
+      "description": "Specifies the audit configuration for a service.\nThe configuration determines which permission types are logged, and what\nidentities, if any, are exempted from logging.\nAn AuditConifg must have one or more AuditLogConfigs.\n\nIf there are AuditConfigs for both `allServices` and a specific service,\nthe union of the two AuditConfigs is used for that service: the log_types\nspecified in each AuditConfig are enabled, and the exempted_members in each\nAuditConfig are exempted.\nExample Policy with multiple AuditConfigs:\n{\n  \"audit_configs\": [\n    {\n      \"service\": \"allServices\"\n      \"audit_log_configs\": [\n        {\n          \"log_type\": \"DATA_READ\",\n          \"exempted_members\": [\n            \"user:foo@gmail.com\"\n          ]\n        },\n        {\n          \"log_type\": \"DATA_WRITE\",\n        },\n        {\n          \"log_type\": \"ADMIN_READ\",\n        }\n      ]\n    },\n    {\n      \"service\": \"fooservice@googleapis.com\"\n      \"audit_log_configs\": [\n        {\n          \"log_type\": \"DATA_READ\",\n        },\n        {\n          \"log_type\": \"DATA_WRITE\",\n          \"exempted_members\": [\n            \"user:bar@gmail.com\"\n          ]\n        }\n      ]\n    }\n  ]\n}\nFor fooservice, this policy enables DATA_READ, DATA_WRITE and ADMIN_READ\nlogging. It also exempts foo@gmail.com from DATA_READ logging, and\nbar@gmail.com from DATA_WRITE logging.",
+      "type": "object",
+      "properties": {
+        "service": {
+          "description": "Specifies a service that will be enabled for audit logging.\nFor example, `storage.googleapis.com`, `cloudsql.googleapis.com`.\n`allServices` is a special value that covers all services.",
+          "type": "string"
+        },
+        "auditLogConfigs": {
+          "description": "The configuration for logging of each type of permission.\nNext ID: 4",
+          "type": "array",
+          "items": {
+            "$ref": "AuditLogConfig"
+          }
+        }
+      },
+      "id": "AuditConfig"
+    },
+    "Constraint": {
+      "description": "A `Constraint` describes a way in which a resource's configuration can be\nrestricted. For example, it controls which cloud services can be activated\nacross an organization, or whether a Compute Engine instance can have\nserial port connections established. `Constraints` can be configured by the\norganization's policy adminstrator to fit the needs of the organzation by\nsetting Policies for `Constraints` at different locations in the\norganization's resource hierarchy. Policies are inherited down the resource\nhierarchy from higher levels, but can also be overridden. For details about\nthe inheritance rules please read about\nPolicies.\n\n`Constraints` have a default behavior determined by the `constraint_default`\nfield, which is the enforcement behavior that is used in the absence of a\n`Policy` being defined or inherited for the resource in question.",
+      "type": "object",
+      "properties": {
+        "description": {
+          "description": "Detailed description of what this `Constraint` controls as well as how and\nwhere it is enforced.\n\nMutable.",
+          "type": "string"
+        },
+        "displayName": {
+          "description": "The human readable name.\n\nMutable.",
+          "type": "string"
+        },
+        "booleanConstraint": {
+          "description": "Defines this constraint as being a BooleanConstraint.",
+          "$ref": "BooleanConstraint"
+        },
+        "constraintDefault": {
+          "enumDescriptions": [
+            "This is only used for distinguishing unset values and should never be\nused.",
+            "Indicate that all values are allowed for list constraints.\nIndicate that enforcement is off for boolean constraints.",
+            "Indicate that all values are denied for list constraints.\nIndicate that enforcement is on for boolean constraints."
+          ],
+          "enum": [
+            "CONSTRAINT_DEFAULT_UNSPECIFIED",
+            "ALLOW",
+            "DENY"
+          ],
+          "description": "The evaluation behavior of this constraint in the absense of 'Policy'.",
+          "type": "string"
+        },
+        "name": {
+          "description": "Immutable value, required to globally be unique. For example,\n`constraints/serviceuser.services`",
+          "type": "string"
+        },
+        "listConstraint": {
+          "$ref": "ListConstraint",
+          "description": "Defines this constraint as being a ListConstraint."
+        },
+        "version": {
+          "description": "Version of the `Constraint`. Default version is 0;",
+          "format": "int32",
+          "type": "integer"
+        }
+      },
+      "id": "Constraint"
+    },
+    "ListLiensResponse": {
+      "description": "The response message for Liens.ListLiens.",
+      "type": "object",
+      "properties": {
+        "liens": {
+          "description": "A list of Liens.",
+          "type": "array",
+          "items": {
+            "$ref": "Lien"
+          }
+        },
+        "nextPageToken": {
+          "description": "Token to retrieve the next page of results, or empty if there are no more\nresults in the list.",
+          "type": "string"
+        }
+      },
+      "id": "ListLiensResponse"
+    },
+    "Status": {
+      "description": "The `Status` type defines a logical error model that is suitable for different\nprogramming environments, including REST APIs and RPC APIs. It is used by\n[gRPC](https://github.com/grpc). The error model is designed to be:\n\n- Simple to use and understand for most users\n- Flexible enough to meet unexpected needs\n\n# Overview\n\nThe `Status` message contains three pieces of data: error code, error message,\nand error details. The error code should be an enum value of\ngoogle.rpc.Code, but it may accept additional error codes if needed.  The\nerror message should be a developer-facing English message that helps\ndevelopers *understand* and *resolve* the error. If a localized user-facing\nerror message is needed, put the localized message in the error details or\nlocalize it in the client. The optional error details may contain arbitrary\ninformation about the error. There is a predefined set of error detail types\nin the package `google.rpc` which can be used for common error conditions.\n\n# Language mapping\n\nThe `Status` message is the logical representation of the error model, but it\nis not necessarily the actual wire format. When the `Status` message is\nexposed in different client libraries and different wire protocols, it can be\nmapped differently. For example, it will likely be mapped to some exceptions\nin Java, but more likely mapped to some error codes in C.\n\n# Other uses\n\nThe error model and the `Status` message can be used in a variety of\nenvironments, either with or without APIs, to provide a\nconsistent developer experience across different environments.\n\nExample uses of this error model include:\n\n- Partial errors. If a service needs to return partial errors to the client,\n    it may embed the `Status` in the normal response to indicate the partial\n    errors.\n\n- Workflow errors. A typical workflow has multiple steps. Each step may\n    have a `Status` message for error reporting purpose.\n\n- Batch operations. If a client uses batch request and batch response, the\n    `Status` message should be used directly inside batch response, one for\n    each error sub-response.\n\n- Asynchronous operations. If an API call embeds asynchronous operation\n    results in its response, the status of those operations should be\n    represented directly using the `Status` message.\n\n- Logging. If some API errors are stored in logs, the message `Status` could\n    be used directly after any stripping needed for security/privacy reasons.",
+      "type": "object",
+      "properties": {
+        "code": {
+          "description": "The status code, which should be an enum value of google.rpc.Code.",
+          "format": "int32",
+          "type": "integer"
+        },
+        "message": {
+          "description": "A developer-facing error message, which should be in English. Any\nuser-facing error message should be localized and sent in the\ngoogle.rpc.Status.details field, or localized by the client.",
+          "type": "string"
+        },
+        "details": {
+          "description": "A list of messages that carry the error details.  There will be a\ncommon 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"
+            },
+            "type": "object"
+          }
+        }
+      },
+      "id": "Status"
+    },
+    "Binding": {
+      "description": "Associates `members` with a `role`.",
+      "type": "object",
+      "properties": {
+        "members": {
+          "description": "Specifies the identities requesting access for a Cloud Platform resource.\n`members` can have the following values:\n\n* `allUsers`: A special identifier that represents anyone who is\n   on the internet; with or without a Google account.\n\n* `allAuthenticatedUsers`: A special identifier that represents anyone\n   who is authenticated with a Google account or a service account.\n\n* `user:{emailid}`: An email address that represents a specific Google\n   account. For example, `alice@gmail.com` or `joe@example.com`.\n\n\n* `serviceAccount:{emailid}`: An email address that represents a service\n   account. For example, `my-other-app@appspot.gserviceaccount.com`.\n\n* `group:{emailid}`: An email address that represents a Google group.\n   For example, `admins@example.com`.\n\n* `domain:{domain}`: A Google Apps domain name that represents all the\n   users of that domain. For example, `google.com` or `example.com`.\n\n",
+          "type": "array",
+          "items": {
+            "type": "string"
+          }
+        },
+        "role": {
+          "description": "Role that is assigned to `members`.\nFor example, `roles/viewer`, `roles/editor`, or `roles/owner`.\nRequired",
+          "type": "string"
+        }
+      },
+      "id": "Binding"
+    },
+    "GetOrgPolicyRequest": {
+      "description": "The request sent to the GetOrgPolicy method.",
+      "type": "object",
+      "properties": {
+        "constraint": {
+          "description": "Name of the `Constraint` to get the `Policy`.",
+          "type": "string"
+        }
+      },
+      "id": "GetOrgPolicyRequest"
+    },
+    "RestoreDefault": {
+      "description": "Ignores policies set above this resource and restores the\n`constraint_default` enforcement behavior of the specific `Constraint` at\nthis resource.\n\nSuppose that `constraint_default` is set to `ALLOW` for the\n`Constraint` `constraints/serviceuser.services`. Suppose that organization\nfoo.com sets a `Policy` at their Organization resource node that restricts\nthe allowed service activations to deny all service activations. They\ncould then set a `Policy` with the `policy_type` `restore_default` on\nseveral experimental projects, restoring the `constraint_default`\nenforcement of the `Constraint` for only those projects, allowing those\nprojects to have all services activated.",
+      "type": "object",
+      "properties": {},
+      "id": "RestoreDefault"
+    },
+    "UndeleteProjectRequest": {
+      "description": "The request sent to the UndeleteProject\nmethod.",
+      "type": "object",
+      "properties": {},
+      "id": "UndeleteProjectRequest"
+    },
+    "ClearOrgPolicyRequest": {
+      "description": "The request sent to the ClearOrgPolicy method.",
+      "type": "object",
+      "properties": {
+        "constraint": {
+          "description": "Name of the `Constraint` of the `Policy` to clear.",
+          "type": "string"
+        },
+        "etag": {
+          "description": "The current version, for concurrency control. Not sending an `etag`\nwill cause the `Policy` to be cleared blindly.",
+          "format": "byte",
+          "type": "string"
+        }
+      },
+      "id": "ClearOrgPolicyRequest"
+    },
+    "ProjectCreationStatus": {
+      "description": "A status object which is used as the `metadata` field for the Operation\nreturned by CreateProject. It provides insight for when significant phases of\nProject creation have completed.",
+      "type": "object",
+      "properties": {
+        "createTime": {
+          "description": "Creation time of the project creation workflow.",
+          "format": "google-datetime",
+          "type": "string"
+        },
+        "gettable": {
+          "description": "True if the project can be retrieved using GetProject. No other operations\non the project are guaranteed to work until the project creation is\ncomplete.",
+          "type": "boolean"
+        },
+        "ready": {
+          "description": "True if the project creation process is complete.",
+          "type": "boolean"
+        }
+      },
+      "id": "ProjectCreationStatus"
+    },
+    "BooleanConstraint": {
+      "description": "A `Constraint` that is either enforced or not.\n\nFor example a constraint `constraints/compute.disableSerialPortAccess`.\nIf it is enforced on a VM instance, serial port connections will not be\nopened to that instance.",
+      "type": "object",
+      "properties": {},
+      "id": "BooleanConstraint"
+    },
+    "GetIamPolicyRequest": {
+      "description": "Request message for `GetIamPolicy` method.",
+      "type": "object",
+      "properties": {},
+      "id": "GetIamPolicyRequest"
+    },
+    "TestIamPermissionsResponse": {
+      "description": "Response message for `TestIamPermissions` method.",
+      "type": "object",
+      "properties": {
+        "permissions": {
+          "description": "A subset of `TestPermissionsRequest.permissions` that the caller is\nallowed.",
+          "type": "array",
+          "items": {
+            "type": "string"
+          }
+        }
+      },
+      "id": "TestIamPermissionsResponse"
+    },
+    "OrganizationOwner": {
+      "description": "The entity that owns an Organization. The lifetime of the Organization and\nall of its descendants are bound to the `OrganizationOwner`. If the\n`OrganizationOwner` is deleted, the Organization and all its descendants will\nbe deleted.",
+      "type": "object",
+      "properties": {
+        "directoryCustomerId": {
+          "description": "The Google for Work customer id used in the Directory API.",
+          "type": "string"
+        }
+      },
+      "id": "OrganizationOwner"
+    },
+    "ListProjectsResponse": {
+      "description": "A page of the response received from the\nListProjects\nmethod.\n\nA paginated response where more pages are available has\n`next_page_token` set. This token can be used in a subsequent request to\nretrieve the next request page.",
+      "type": "object",
+      "properties": {
+        "projects": {
+          "description": "The list of Projects that matched the list filter. This list can\nbe paginated.",
+          "type": "array",
+          "items": {
+            "$ref": "Project"
+          }
+        },
+        "nextPageToken": {
+          "description": "Pagination token.\n\nIf the result set is too large to fit in a single response, this token\nis returned. It encodes the position of the current result cursor.\nFeeding this value into a new list request with the `page_token` parameter\ngives the next page of the results.\n\nWhen `next_page_token` is not filled in, there is no next page and\nthe list returned is the last page in the result set.\n\nPagination tokens have a limited lifetime.",
+          "type": "string"
+        }
+      },
+      "id": "ListProjectsResponse"
+    },
+    "Project": {
+      "description": "A Project is a high-level Google Cloud Platform entity.  It is a\ncontainer for ACLs, APIs, App Engine Apps, VMs, and other\nGoogle Cloud Platform resources.",
+      "type": "object",
+      "properties": {
+        "labels": {
+          "description": "The labels associated with this Project.\n\nLabel keys must be between 1 and 63 characters long and must conform\nto the following regular expression: \\[a-z\\](\\[-a-z0-9\\]*\\[a-z0-9\\])?.\n\nLabel values must be between 0 and 63 characters long and must conform\nto the regular expression (\\[a-z\\](\\[-a-z0-9\\]*\\[a-z0-9\\])?)?.\n\nNo more than 256 labels can be associated with a given resource.\n\nClients should store labels in a representation such as JSON that does not\ndepend on specific characters being disallowed.\n\nExample: \u003ccode\u003e\"environment\" : \"dev\"\u003c/code\u003e\nRead-write.",
+          "type": "object",
+          "additionalProperties": {
+            "type": "string"
+          }
+        },
+        "createTime": {
+          "description": "Creation time.\n\nRead-only.",
+          "format": "google-datetime",
+          "type": "string"
+        },
+        "name": {
+          "description": "The user-assigned display name of the Project.\nIt must be 4 to 30 characters.\nAllowed characters are: lowercase and uppercase letters, numbers,\nhyphen, single-quote, double-quote, space, and exclamation point.\n\nExample: \u003ccode\u003eMy Project\u003c/code\u003e\nRead-write.",
+          "type": "string"
+        },
+        "projectId": {
+          "description": "The unique, user-assigned ID of the Project.\nIt must be 6 to 30 lowercase letters, digits, or hyphens.\nIt must start with a letter.\nTrailing hyphens are prohibited.\n\nExample: \u003ccode\u003etokyo-rain-123\u003c/code\u003e\nRead-only after creation.",
+          "type": "string"
+        },
+        "lifecycleState": {
+          "description": "The Project lifecycle state.\n\nRead-only.",
+          "type": "string",
+          "enumDescriptions": [
+            "Unspecified state.  This is only used/useful for distinguishing\nunset values.",
+            "The normal and active state.",
+            "The project has been marked for deletion by the user\n(by invoking\nDeleteProject)\nor by the system (Google Cloud Platform).\nThis can generally be reversed by invoking UndeleteProject.",
+            "This lifecycle state is no longer used and not returned by the API."
+          ],
+          "enum": [
+            "LIFECYCLE_STATE_UNSPECIFIED",
+            "ACTIVE",
+            "DELETE_REQUESTED",
+            "DELETE_IN_PROGRESS"
+          ]
+        },
+        "projectNumber": {
+          "description": "The number uniquely identifying the project.\n\nExample: \u003ccode\u003e415104041262\u003c/code\u003e\nRead-only.",
+          "format": "int64",
+          "type": "string"
+        },
+        "parent": {
+          "$ref": "ResourceId",
+          "description": "An optional reference to a parent Resource.\n\nThe only supported parent type is \"organization\". Once set, the parent\ncannot be modified. The `parent` can be set on creation or using the\n`UpdateProject` method; the end user must have the\n`resourcemanager.projects.create` permission on the parent.\n\nRead-write."
+        }
+      },
+      "id": "Project"
+    },
+    "ListOrgPoliciesResponse": {
+      "description": "The response returned from the ListOrgPolicies method. It will be empty\nif no `Policies` are set on the resource.",
+      "type": "object",
+      "properties": {
+        "policies": {
+          "description": "The `Policies` that are set on the resource. It will be empty if no\n`Policies` are set.",
+          "type": "array",
+          "items": {
+            "$ref": "OrgPolicy"
+          }
+        },
+        "nextPageToken": {
+          "description": "Page token used to retrieve the next page. This is currently not used, but\nthe server may at any point start supplying a valid token.",
+          "type": "string"
+        }
+      },
+      "id": "ListOrgPoliciesResponse"
+    },
+    "SearchOrganizationsResponse": {
+      "description": "The response returned from the `SearchOrganizations` method.",
+      "type": "object",
+      "properties": {
+        "nextPageToken": {
+          "description": "A pagination token to be used to retrieve the next page of results. If the\nresult is too large to fit within the page size specified in the request,\nthis field will be set with a token that can be used to fetch the next page\nof results. If this field is empty, it indicates that this response\ncontains the last page of results.",
+          "type": "string"
+        },
+        "organizations": {
+          "description": "The list of Organizations that matched the search query, possibly\npaginated.",
+          "type": "array",
+          "items": {
+            "$ref": "Organization"
+          }
+        }
+      },
+      "id": "SearchOrganizationsResponse"
+    },
+    "FolderOperationError": {
+      "description": "A classification of the Folder Operation error.",
+      "type": "object",
+      "properties": {
+        "errorMessageId": {
+          "description": "The type of operation error experienced.",
+          "type": "string",
+          "enumDescriptions": [
+            "The error type was unrecognized or unspecified.",
+            "The attempted action would violate the max folder depth constraint.",
+            "The attempted action would violate the max child folders constraint.",
+            "The attempted action would violate the locally-unique folder\ndisplay_name constraint.",
+            "The resource being moved has been deleted.",
+            "The resource a folder was being added to has been deleted.",
+            "The attempted action would introduce cycle in resource path.",
+            "The attempted action would move a folder that is already being moved.",
+            "The folder the caller is trying to delete contains active resources."
+          ],
+          "enum": [
+            "ERROR_TYPE_UNSPECIFIED",
+            "FOLDER_HEIGHT_VIOLATION",
+            "MAX_CHILD_FOLDERS_VIOLATION",
+            "FOLDER_NAME_UNIQUENESS_VIOLATION",
+            "RESOURCE_DELETED",
+            "PARENT_DELETED",
+            "CYCLE_INTRODUCED_ERROR",
+            "FOLDER_BEING_MOVED",
+            "FOLDER_TO_DELETE_NON_EMPTY"
+          ]
+        }
+      },
+      "id": "FolderOperationError"
+    },
+    "BooleanPolicy": {
+      "description": "Used in `policy_type` to specify how `boolean_policy` will behave at this\nresource.",
+      "type": "object",
+      "properties": {
+        "enforced": {
+          "description": "If `true`, then the `Policy` is enforced. If `false`, then any\nconfiguration is acceptable.\n\nSuppose you have a `Constraint` `constraints/compute.disableSerialPortAccess`\nwith `constraint_default` set to `ALLOW`. A `Policy` for that\n`Constraint` exhibits the following behavior:\n  - If the `Policy` at this resource has enforced set to `false`, serial\n    port connection attempts will be allowed.\n  - If the `Policy` at this resource has enforced set to `true`, serial\n    port connection attempts will be refused.\n  - If the `Policy` at this resource is `RestoreDefault`, serial port\n    connection attempts will be allowed.\n  - If no `Policy` is set at this resource or anywhere higher in the\n    resource hierarchy, serial port connection attempts will be allowed.\n  - If no `Policy` is set at this resource, but one exists higher in the\n    resource hierarchy, the behavior is as if the`Policy` were set at\n    this resource.\n\nThe following examples demonstrate the different possible layerings:\n\nExample 1 (nearest `Constraint` wins):\n  `organizations/foo` has a `Policy` with:\n    {enforced: false}\n  `projects/bar` has no `Policy` set.\nThe constraint at `projects/bar` and `organizations/foo` will not be\nenforced.\n\nExample 2 (enforcement gets replaced):\n  `organizations/foo` has a `Policy` with:\n    {enforced: false}\n  `projects/bar` has a `Policy` with:\n    {enforced: true}\nThe constraint at `organizations/foo` is not enforced.\nThe constraint at `projects/bar` is enforced.\n\nExample 3 (RestoreDefault):\n  `organizations/foo` has a `Policy` with:\n    {enforced: true}\n  `projects/bar` has a `Policy` with:\n    {RestoreDefault: {}}\nThe constraint at `organizations/foo` is enforced.\nThe constraint at `projects/bar` is not enforced, because\n`constraint_default` for the `Constraint` is `ALLOW`.",
+          "type": "boolean"
+        }
+      },
+      "id": "BooleanPolicy"
+    },
+    "OrgPolicy": {
+      "description": "Defines a Cloud Organization `Policy` which is used to specify `Constraints`\nfor configurations of Cloud Platform resources.",
+      "type": "object",
+      "properties": {
+        "version": {
+          "description": "Version of the `Policy`. Default version is 0;",
+          "format": "int32",
+          "type": "integer"
+        },
+        "restoreDefault": {
+          "description": "Restores the default behavior of the constraint; independent of\n`Constraint` type.",
+          "$ref": "RestoreDefault"
+        },
+        "listPolicy": {
+          "description": "List of values either allowed or disallowed.",
+          "$ref": "ListPolicy"
+        },
+        "etag": {
+          "description": "An opaque tag indicating the current version of the `Policy`, used for\nconcurrency control.\n\nWhen the `Policy` is returned from either a `GetPolicy` or a\n`ListOrgPolicy` request, this `etag` indicates the version of the current\n`Policy` to use when executing a read-modify-write loop.\n\nWhen the `Policy` is returned from a `GetEffectivePolicy` request, the\n`etag` will be unset.\n\nWhen the `Policy` is used in a `SetOrgPolicy` method, use the `etag` value\nthat was returned from a `GetOrgPolicy` request as part of a\nread-modify-write loop for concurrency control. Not setting the `etag`in a\n`SetOrgPolicy` request will result in an unconditional write of the\n`Policy`.",
+          "format": "byte",
+          "type": "string"
+        },
+        "booleanPolicy": {
+          "description": "For boolean `Constraints`, whether to enforce the `Constraint` or not.",
+          "$ref": "BooleanPolicy"
+        },
+        "constraint": {
+          "description": "The name of the `Constraint` the `Policy` is configuring, for example,\n`constraints/serviceuser.services`.\n\nImmutable after creation.",
+          "type": "string"
+        },
+        "updateTime": {
+          "description": "The time stamp the `Policy` was previously updated. This is set by the\nserver, not specified by the caller, and represents the last time a call to\n`SetOrgPolicy` was made for that `Policy`. Any value set by the client will\nbe ignored.",
+          "format": "google-datetime",
+          "type": "string"
+        }
+      },
+      "id": "OrgPolicy"
+    },
+    "Lien": {
+      "description": "A Lien represents an encumbrance on the actions that can be performed on a\nresource.",
+      "type": "object",
+      "properties": {
+        "createTime": {
+          "description": "The creation time of this Lien.",
+          "format": "google-datetime",
+          "type": "string"
+        },
+        "origin": {
+          "description": "A stable, user-visible/meaningful string identifying the origin of the\nLien, intended to be inspected programmatically. Maximum length of 200\ncharacters.\n\nExample: 'compute.googleapis.com'",
+          "type": "string"
+        },
+        "name": {
+          "description": "A system-generated unique identifier for this Lien.\n\nExample: `liens/1234abcd`",
+          "type": "string"
+        },
+        "reason": {
+          "description": "Concise user-visible strings indicating why an action cannot be performed\non a resource. Maximum lenth of 200 characters.\n\nExample: 'Holds production API key'",
+          "type": "string"
+        },
+        "restrictions": {
+          "description": "The types of operations which should be blocked as a result of this Lien.\nEach value should correspond to an IAM permission. The server will\nvalidate the permissions against those for which Liens are supported.\n\nAn empty list is meaningless and will be rejected.\n\nExample: ['resourcemanager.projects.delete']",
+          "type": "array",
+          "items": {
+            "type": "string"
+          }
+        },
+        "parent": {
+          "description": "A reference to the resource this Lien is attached to. The server will\nvalidate the parent against those for which Liens are supported.\n\nExample: `projects/1234`",
+          "type": "string"
+        }
+      },
+      "id": "Lien"
+    },
+    "Ancestor": {
+      "description": "Identifying information for a single ancestor of a project.",
+      "type": "object",
+      "properties": {
+        "resourceId": {
+          "description": "Resource id of the ancestor.",
+          "$ref": "ResourceId"
+        }
+      },
+      "id": "Ancestor"
+    },
+    "ListConstraint": {
+      "description": "A `Constraint` that allows or disallows a list of string values, which are\nconfigured by an Organization's policy administrator with a `Policy`.",
+      "type": "object",
+      "properties": {
+        "suggestedValue": {
+          "description": "Optional. The Google Cloud Console will try to default to a configuration\nthat matches the value specified in this `Constraint`.",
+          "type": "string"
+        }
+      },
+      "id": "ListConstraint"
+    },
+    "SetOrgPolicyRequest": {
+      "description": "The request sent to the SetOrgPolicyRequest method.",
+      "type": "object",
+      "properties": {
+        "policy": {
+          "$ref": "OrgPolicy",
+          "description": "`Policy` to set on the resource."
+        }
+      },
+      "id": "SetOrgPolicyRequest"
+    },
+    "SetIamPolicyRequest": {
+      "description": "Request message for `SetIamPolicy` method.",
+      "type": "object",
+      "properties": {
+        "policy": {
+          "$ref": "Policy",
+          "description": "REQUIRED: The complete policy to be applied to the `resource`. The size of\nthe policy is limited to a few 10s of KB. An empty policy is a\nvalid policy but certain Cloud Platform services (such as Projects)\nmight reject them."
+        },
+        "updateMask": {
+          "description": "OPTIONAL: A FieldMask specifying which fields of the policy to modify. Only\nthe fields in the mask will be modified. If no mask is provided, the\nfollowing default mask is used:\npaths: \"bindings, etag\"\nThis field is only used by Cloud IAM.",
+          "format": "google-fieldmask",
+          "type": "string"
+        }
+      },
+      "id": "SetIamPolicyRequest"
+    },
+    "Empty": {
+      "description": "A generic empty message that you can re-use to avoid defining duplicated\nempty messages in your APIs. A typical example is to use it as the request\nor the response type of an API method. For instance:\n\n    service Foo {\n      rpc Bar(google.protobuf.Empty) returns (google.protobuf.Empty);\n    }\n\nThe JSON representation for `Empty` is empty JSON object `{}`.",
+      "type": "object",
+      "properties": {},
+      "id": "Empty"
+    },
+    "Organization": {
+      "description": "The root node in the resource hierarchy to which a particular entity's\n(e.g., company) resources belong.",
+      "type": "object",
+      "properties": {
+        "owner": {
+          "$ref": "OrganizationOwner",
+          "description": "The owner of this Organization. The owner should be specified on\ncreation. Once set, it cannot be changed.\nThis field is required."
+        },
+        "lifecycleState": {
+          "description": "The organization's current lifecycle state. Assigned by the server.\n@OutputOnly",
+          "type": "string",
+          "enumDescriptions": [
+            "Unspecified state.  This is only useful for distinguishing unset values.",
+            "The normal and active state.",
+            "The organization has been marked for deletion by the user."
+          ],
+          "enum": [
+            "LIFECYCLE_STATE_UNSPECIFIED",
+            "ACTIVE",
+            "DELETE_REQUESTED"
+          ]
+        },
+        "name": {
+          "description": "Output Only. The resource name of the organization. This is the\norganization's relative path in the API. Its format is\n\"organizations/[organization_id]\". For example, \"organizations/1234\".",
+          "type": "string"
+        },
+        "displayName": {
+          "description": "A friendly string to be used to refer to the Organization in the UI.\nAssigned by the server, set to the primary domain of the G Suite\ncustomer that owns the organization.\n@OutputOnly",
+          "type": "string"
+        },
+        "creationTime": {
+          "description": "Timestamp when the Organization was created. Assigned by the server.\n@OutputOnly",
+          "format": "google-datetime",
+          "type": "string"
+        }
+      },
+      "id": "Organization"
+    },
+    "ListAvailableOrgPolicyConstraintsResponse": {
+      "description": "The response returned from the ListAvailableOrgPolicyConstraints method.\nReturns all `Constraints` that could be set at this level of the hierarchy\n(contrast with the response from `ListPolicies`, which returns all policies\nwhich are set).",
+      "type": "object",
+      "properties": {
+        "nextPageToken": {
+          "description": "Page token used to retrieve the next page. This is currently not used.",
+          "type": "string"
+        },
+        "constraints": {
+          "description": "The collection of constraints that are settable on the request resource.",
+          "type": "array",
+          "items": {
+            "$ref": "Constraint"
+          }
+        }
+      },
+      "id": "ListAvailableOrgPolicyConstraintsResponse"
+    },
+    "ListPolicy": {
+      "description": "Used in `policy_type` to specify how `list_policy` behaves at this\nresource.\n\nA `ListPolicy` can define specific values that are allowed or denied by\nsetting either the `allowed_values` or `denied_values` fields. It can also\nbe used to allow or deny all values, by setting the `all_values` field. If\n`all_values` is `ALL_VALUES_UNSPECIFIED`, exactly one of `allowed_values`\nor `denied_values` must be set (attempting to set both or neither will\nresult in a failed request). If `all_values` is set to either `ALLOW` or\n`DENY`, `allowed_values` and `denied_values` must be unset.",
+      "type": "object",
+      "properties": {
+        "allowedValues": {
+          "description": "List of values allowed  at this resource. an only be set if no values are\nset for `denied_values` and `all_values` is set to\n`ALL_VALUES_UNSPECIFIED`.",
+          "type": "array",
+          "items": {
+            "type": "string"
+          }
+        },
+        "suggestedValue": {
+          "description": "Optional. The Google Cloud Console will try to default to a configuration\nthat matches the value specified in this `Policy`. If `suggested_value`\nis not set, it will inherit the value specified higher in the hierarchy,\nunless `inherit_from_parent` is `false`.",
+          "type": "string"
+        },
+        "inheritFromParent": {
+          "description": "Determines the inheritance behavior for this `Policy`.\n\nBy default, a `ListPolicy` set at a resource supercedes any `Policy` set\nanywhere up the resource hierarchy. However, if `inherit_from_parent` is\nset to `true`, then the values from the effective `Policy` of the parent\nresource are inherited, meaning the values set in this `Policy` are\nadded to the values inherited up the hierarchy.\n\nSetting `Policy` hierarchies that inherit both allowed values and denied\nvalues isn't recommended in most circumstances to keep the configuration\nsimple and understandable. However, it is possible to set a `Policy` with\n`allowed_values` set that inherits a `Policy` with `denied_values` set.\nIn this case, the values that are allowed must be in `allowed_values` and\nnot present in `denied_values`.\n\nFor example, suppose you have a `Constraint`\n`constraints/serviceuser.services`, which has a `constraint_type` of\n`list_constraint`, and with `constraint_default` set to `ALLOW`.\nSuppose that at the Organization level, a `Policy` is applied that\nrestricts the allowed API activations to {`E1`, `E2`}. Then, if a\n`Policy` is applied to a project below the Organization that has\n`inherit_from_parent` set to `false` and field all_values set to DENY,\nthen an attempt to activate any API will be denied.\n\nThe following examples demonstrate different possible layerings:\n\nExample 1 (no inherited values):\n  `organizations/foo` has a `Policy` with values:\n    {allowed_values: “E1” allowed_values:”E2”}\n  ``projects/bar`` has `inherit_from_parent` `false` and values:\n    {allowed_values: \"E3\" allowed_values: \"E4\"}\nThe accepted values at `organizations/foo` are `E1`, `E2`.\nThe accepted values at `projects/bar` are `E3`, and `E4`.\n\nExample 2 (inherited values):\n  `organizations/foo` has a `Policy` with values:\n    {allowed_values: “E1” allowed_values:”E2”}\n  `projects/bar` has a `Policy` with values:\n    {value: “E3” value: ”E4” inherit_from_parent: true}\nThe accepted values at `organizations/foo` are `E1`, `E2`.\nThe accepted values at `projects/bar` are `E1`, `E2`, `E3`, and `E4`.\n\nExample 3 (inheriting both allowed and denied values):\n  `organizations/foo` has a `Policy` with values:\n    {allowed_values: \"E1\" allowed_values: \"E2\"}\n  `projects/bar` has a `Policy` with:\n    {denied_values: \"E1\"}\nThe accepted values at `organizations/foo` are `E1`, `E2`.\nThe value accepted at `projects/bar` is `E2`.\n\nExample 4 (RestoreDefault):\n  `organizations/foo` has a `Policy` with values:\n    {allowed_values: “E1” allowed_values:”E2”}\n  `projects/bar` has a `Policy` with values:\n    {RestoreDefault: {}}\nThe accepted values at `organizations/foo` are `E1`, `E2`.\nThe accepted values at `projects/bar` are either all or none depending on\nthe value of `constraint_default` (if `ALLOW`, all; if\n`DENY`, none).\n\nExample 5 (no policy inherits parent policy):\n  `organizations/foo` has no `Policy` set.\n  `projects/bar` has no `Policy` set.\nThe accepted values at both levels are either all or none depending on\nthe value of `constraint_default` (if `ALLOW`, all; if\n`DENY`, none).\n\nExample 6 (ListConstraint allowing all):\n  `organizations/foo` has a `Policy` with values:\n    {allowed_values: “E1” allowed_values: ”E2”}\n  `projects/bar` has a `Policy` with:\n    {all: ALLOW}\nThe accepted values at `organizations/foo` are `E1`, E2`.\nAny value is accepted at `projects/bar`.\n\nExample 7 (ListConstraint allowing none):\n  `organizations/foo` has a `Policy` with values:\n    {allowed_values: “E1” allowed_values: ”E2”}\n  `projects/bar` has a `Policy` with:\n    {all: DENY}\nThe accepted values at `organizations/foo` are `E1`, E2`.\nNo value is accepted at `projects/bar`.",
+          "type": "boolean"
+        },
+        "deniedValues": {
+          "description": "List of values denied at this resource. Can only be set if no values are\nset for `allowed_values` and `all_values` is set to\n`ALL_VALUES_UNSPECIFIED`.",
+          "type": "array",
+          "items": {
+            "type": "string"
+          }
+        },
+        "allValues": {
+          "description": "The policy all_values state.",
+          "type": "string",
+          "enumDescriptions": [
+            "Indicates that either allowed_values or denied_values must be set.",
+            "A policy with this set allows all values.",
+            "A policy with this set denies all values."
+          ],
+          "enum": [
+            "ALL_VALUES_UNSPECIFIED",
+            "ALLOW",
+            "DENY"
+          ]
+        }
+      },
+      "id": "ListPolicy"
+    },
+    "GetAncestryResponse": {
+      "description": "Response from the GetAncestry method.",
+      "type": "object",
+      "properties": {
+        "ancestor": {
+          "description": "Ancestors are ordered from bottom to top of the resource hierarchy. The\nfirst ancestor is the project itself, followed by the project's parent,\netc.",
+          "type": "array",
+          "items": {
+            "$ref": "Ancestor"
+          }
+        }
+      },
+      "id": "GetAncestryResponse"
+    },
+    "AuditLogConfig": {
+      "description": "Provides the configuration for logging a type of permissions.\nExample:\n\n    {\n      \"audit_log_configs\": [\n        {\n          \"log_type\": \"DATA_READ\",\n          \"exempted_members\": [\n            \"user:foo@gmail.com\"\n          ]\n        },\n        {\n          \"log_type\": \"DATA_WRITE\",\n        }\n      ]\n    }\n\nThis enables 'DATA_READ' and 'DATA_WRITE' logging, while exempting\nfoo@gmail.com from DATA_READ logging.",
+      "type": "object",
+      "properties": {
+        "exemptedMembers": {
+          "description": "Specifies the identities that do not cause logging for this type of\npermission.\nFollows the same format of Binding.members.",
+          "type": "array",
+          "items": {
+            "type": "string"
+          }
+        },
+        "logType": {
+          "description": "The log type that this config enables.",
+          "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"
+          ],
+          "enum": [
+            "LOG_TYPE_UNSPECIFIED",
+            "ADMIN_READ",
+            "DATA_WRITE",
+            "DATA_READ"
+          ]
+        }
+      },
+      "id": "AuditLogConfig"
+    },
+    "SearchOrganizationsRequest": {
+      "description": "The request sent to the `SearchOrganizations` method.",
+      "type": "object",
+      "properties": {
+        "pageSize": {
+          "description": "The maximum number of Organizations to return in the response.\nThis field is optional.",
+          "format": "int32",
+          "type": "integer"
+        },
+        "filter": {
+          "description": "An optional query string used to filter the Organizations to return in\nthe response. Filter rules are case-insensitive.\n\n\nOrganizations may be filtered by `owner.directoryCustomerId` or by\n`domain`, where the domain is a Google for Work domain, for example:\n\n|Filter|Description|\n|------|-----------|\n|owner.directorycustomerid:123456789|Organizations with\n`owner.directory_customer_id` equal to `123456789`.|\n|domain:google.com|Organizations corresponding to the domain `google.com`.|\n\nThis field is optional.",
+          "type": "string"
+        },
+        "pageToken": {
+          "description": "A pagination token returned from a previous call to `SearchOrganizations`\nthat indicates from where listing should continue.\nThis field is optional.",
+          "type": "string"
+        }
+      },
+      "id": "SearchOrganizationsRequest"
+    },
+    "GetAncestryRequest": {
+      "description": "The request sent to the\nGetAncestry\nmethod.",
+      "type": "object",
+      "properties": {},
+      "id": "GetAncestryRequest"
+    },
+    "TestIamPermissionsRequest": {
+      "description": "Request message for `TestIamPermissions` method.",
+      "type": "object",
+      "properties": {
+        "permissions": {
+          "description": "The set of permissions to check for the `resource`. Permissions with\nwildcards (such as '*' or 'storage.*') are not allowed. For more\ninformation see\n[IAM Overview](https://cloud.google.com/iam/docs/overview#permissions).",
+          "type": "array",
+          "items": {
+            "type": "string"
+          }
+        }
+      },
+      "id": "TestIamPermissionsRequest"
+    },
+    "FolderOperation": {
+      "description": "Metadata describing a long running folder operation",
+      "type": "object",
+      "properties": {
+        "operationType": {
+          "description": "The type of this operation.",
+          "type": "string",
+          "enumDescriptions": [
+            "Operation type not specified.",
+            "A create folder operation.",
+            "A move folder operation."
+          ],
+          "enum": [
+            "OPERATION_TYPE_UNSPECIFIED",
+            "CREATE",
+            "MOVE"
+          ]
+        },
+        "displayName": {
+          "description": "The display name of the folder.",
+          "type": "string"
+        },
+        "sourceParent": {
+          "description": "The resource name of the folder's parent.\nOnly applicable when the operation_type is MOVE.",
+          "type": "string"
+        },
+        "destinationParent": {
+          "description": "The resource name of the folder or organization we are either creating\nthe folder under or moving the folder to.",
+          "type": "string"
+        }
+      },
+      "id": "FolderOperation"
+    },
+    "Policy": {
+      "description": "Defines an Identity and Access Management (IAM) policy. It is used to\nspecify access control policies for Cloud Platform resources.\n\n\nA `Policy` consists of a list of `bindings`. A `Binding` binds a list of\n`members` to a `role`, where the members can be user accounts, Google groups,\nGoogle domains, and service accounts. A `role` is a named list of permissions\ndefined by IAM.\n\n**Example**\n\n    {\n      \"bindings\": [\n        {\n          \"role\": \"roles/owner\",\n          \"members\": [\n            \"user:mike@example.com\",\n            \"group:admins@example.com\",\n            \"domain:google.com\",\n            \"serviceAccount:my-other-app@appspot.gserviceaccount.com\",\n          ]\n        },\n        {\n          \"role\": \"roles/viewer\",\n          \"members\": [\"user:sean@example.com\"]\n        }\n      ]\n    }\n\nFor a description of IAM and its features, see the\n[IAM developer's guide](https://cloud.google.com/iam).",
+      "type": "object",
+      "properties": {
+        "auditConfigs": {
+          "description": "Specifies cloud audit logging configuration for this policy.",
+          "type": "array",
+          "items": {
+            "$ref": "AuditConfig"
+          }
+        },
+        "bindings": {
+          "description": "Associates a list of `members` to a `role`.\nMultiple `bindings` must not be specified for the same `role`.\n`bindings` with no members will result in an error.",
+          "type": "array",
+          "items": {
+            "$ref": "Binding"
+          }
+        },
+        "etag": {
+          "description": "`etag` is used for optimistic concurrency control as a way to help\nprevent simultaneous updates of a policy from overwriting each other.\nIt is strongly suggested that systems make use of the `etag` in the\nread-modify-write cycle to perform policy updates in order to avoid race\nconditions: An `etag` is returned in the response to `getIamPolicy`, and\nsystems are expected to put that etag in the request to `setIamPolicy` to\nensure that their change will be applied to the same version of the policy.\n\nIf no `etag` is provided in the call to `setIamPolicy`, then the existing\npolicy is overwritten blindly.",
+          "format": "byte",
+          "type": "string"
+        },
+        "version": {
+          "description": "Version of the `Policy`. The default version is 0.",
+          "format": "int32",
+          "type": "integer"
+        }
+      },
+      "id": "Policy"
+    },
+    "ListAvailableOrgPolicyConstraintsRequest": {
+      "description": "The request sent to the [ListAvailableOrgPolicyConstraints]\ngoogle.cloud.OrgPolicy.v1.ListAvailableOrgPolicyConstraints] method.",
+      "type": "object",
+      "properties": {
+        "pageToken": {
+          "description": "Page token used to retrieve the next page. This is currently unsupported\nand will be ignored. The server may at any point start using this field.",
+          "type": "string"
+        },
+        "pageSize": {
+          "description": "Size of the pages to be returned. This is currently unsupported and will\nbe ignored. The server may at any point start using this field to limit\npage size.",
+          "format": "int32",
+          "type": "integer"
+        }
+      },
+      "id": "ListAvailableOrgPolicyConstraintsRequest"
+    },
+    "ResourceId": {
+      "description": "A container to reference an id for any resource type. A `resource` in Google\nCloud Platform is a generic term for something you (a developer) may want to\ninteract with through one of our API's. Some examples are an App Engine app,\na Compute Engine instance, a Cloud SQL database, and so on.",
+      "type": "object",
+      "properties": {
+        "type": {
+          "description": "Required field representing the resource type this id is for.\nAt present, the valid types are: \"organization\"",
+          "type": "string"
+        },
+        "id": {
+          "description": "Required field for the type-specific id. This should correspond to the id\nused in the type-specific API's.",
+          "type": "string"
+        }
+      },
+      "id": "ResourceId"
+    }
+  },
+  "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"
+  },
+  "version": "v1",
+  "baseUrl": "https://cloudresourcemanager.googleapis.com/",
   "canonicalName": "Cloud Resource Manager",
   "auth": {
     "oauth2": {
@@ -20,24 +870,53 @@
   "ownerDomain": "google.com",
   "name": "cloudresourcemanager",
   "batchPath": "batch",
-  "revision": "20170301",
+  "revision": "20170324",
   "documentationLink": "https://cloud.google.com/resource-manager",
   "id": "cloudresourcemanager:v1",
   "title": "Google Cloud Resource Manager API",
-  "ownerName": "Google",
   "discoveryVersion": "v1",
+  "ownerName": "Google",
   "resources": {
-    "projects": {
+    "organizations": {
       "methods": {
-        "getIamPolicy": {
-          "path": "v1/projects/{resource}:getIamPolicy",
-          "id": "cloudresourcemanager.projects.getIamPolicy",
+        "setOrgPolicy": {
+          "flatPath": "v1/organizations/{organizationsId}:setOrgPolicy",
+          "path": "v1/{+resource}:setOrgPolicy",
+          "id": "cloudresourcemanager.organizations.setOrgPolicy",
           "request": {
-            "$ref": "GetIamPolicyRequest"
+            "$ref": "SetOrgPolicyRequest"
           },
-          "description": "Returns the IAM access control policy for the specified Project.\nPermission is denied if the policy or the resource does not exist.",
+          "description": "Updates the specified `Policy` on the resource. Creates a new `Policy` for\nthat `Constraint` on the resource if one does not exist.\n\nNot supplying an `etag` on the request `Policy` results in an unconditional\nwrite of the `Policy`.",
           "response": {
-            "$ref": "Policy"
+            "$ref": "OrgPolicy"
+          },
+          "parameterOrder": [
+            "resource"
+          ],
+          "httpMethod": "POST",
+          "parameters": {
+            "resource": {
+              "description": "Resource name of the resource to attach the `Policy`.",
+              "required": true,
+              "type": "string",
+              "pattern": "^organizations/[^/]+$",
+              "location": "path"
+            }
+          },
+          "scopes": [
+            "https://www.googleapis.com/auth/cloud-platform"
+          ]
+        },
+        "clearOrgPolicyV1": {
+          "flatPath": "v1/organizations/{organizationsId}:clearOrgPolicyV1",
+          "path": "v1/{+resource}:clearOrgPolicyV1",
+          "id": "cloudresourcemanager.organizations.clearOrgPolicyV1",
+          "request": {
+            "$ref": "ClearOrgPolicyRequest"
+          },
+          "description": "Clears a `Policy` from a resource.",
+          "response": {
+            "$ref": "Empty"
           },
           "parameterOrder": [
             "resource"
@@ -46,242 +925,189 @@
           "parameters": {
             "resource": {
               "location": "path",
-              "description": "REQUIRED: The resource for which the policy is being requested.\nSee the operation documentation for the appropriate value for this field.",
+              "description": "Name of the resource for the `Policy` to clear.",
               "required": true,
-              "type": "string"
-            }
-          },
-          "scopes": [
-            "https://www.googleapis.com/auth/cloud-platform",
-            "https://www.googleapis.com/auth/cloud-platform.read-only"
-          ],
-          "flatPath": "v1/projects/{resource}:getIamPolicy"
-        },
-        "undelete": {
-          "path": "v1/projects/{projectId}:undelete",
-          "id": "cloudresourcemanager.projects.undelete",
-          "request": {
-            "$ref": "UndeleteProjectRequest"
-          },
-          "description": "Restores the Project identified by the specified\n`project_id` (for example, `my-project-123`).\nYou can only use this method for a Project that has a lifecycle state of\nDELETE_REQUESTED.\nAfter deletion starts, the Project cannot be restored.\n\nThe caller must have modify permissions for this Project.",
-          "response": {
-            "$ref": "Empty"
-          },
-          "parameterOrder": [
-            "projectId"
-          ],
-          "httpMethod": "POST",
-          "parameters": {
-            "projectId": {
-              "location": "path",
-              "description": "The project ID (for example, `foo-bar-123`).\n\nRequired.",
-              "required": true,
-              "type": "string"
+              "type": "string",
+              "pattern": "^organizations/[^/]+$"
             }
           },
           "scopes": [
             "https://www.googleapis.com/auth/cloud-platform"
-          ],
-          "flatPath": "v1/projects/{projectId}:undelete"
+          ]
         },
-        "get": {
-          "id": "cloudresourcemanager.projects.get",
-          "path": "v1/projects/{projectId}",
-          "description": "Retrieves the Project identified by the specified\n`project_id` (for example, `my-project-123`).\n\nThe caller must have read permissions for this Project.",
-          "httpMethod": "GET",
-          "response": {
-            "$ref": "Project"
-          },
-          "parameterOrder": [
-            "projectId"
-          ],
-          "scopes": [
-            "https://www.googleapis.com/auth/cloud-platform",
-            "https://www.googleapis.com/auth/cloud-platform.read-only"
-          ],
-          "parameters": {
-            "projectId": {
-              "description": "The Project ID (for example, `my-project-123`).\n\nRequired.",
-              "required": true,
-              "type": "string",
-              "location": "path"
-            }
-          },
-          "flatPath": "v1/projects/{projectId}"
-        },
-        "getAncestry": {
-          "httpMethod": "POST",
-          "parameterOrder": [
-            "projectId"
-          ],
-          "response": {
-            "$ref": "GetAncestryResponse"
-          },
-          "scopes": [
-            "https://www.googleapis.com/auth/cloud-platform",
-            "https://www.googleapis.com/auth/cloud-platform.read-only"
-          ],
-          "parameters": {
-            "projectId": {
-              "description": "The Project ID (for example, `my-project-123`).\n\nRequired.",
-              "required": true,
-              "type": "string",
-              "location": "path"
-            }
-          },
-          "flatPath": "v1/projects/{projectId}:getAncestry",
-          "id": "cloudresourcemanager.projects.getAncestry",
-          "path": "v1/projects/{projectId}:getAncestry",
-          "description": "Gets a list of ancestors in the resource hierarchy for the Project\nidentified by the specified `project_id` (for example, `my-project-123`).\n\nThe caller must have read permissions for this Project.",
+        "listOrgPolicies": {
+          "flatPath": "v1/organizations/{organizationsId}:listOrgPolicies",
+          "path": "v1/{+resource}:listOrgPolicies",
+          "id": "cloudresourcemanager.organizations.listOrgPolicies",
           "request": {
-            "$ref": "GetAncestryRequest"
-          }
-        },
-        "update": {
-          "request": {
-            "$ref": "Project"
+            "$ref": "ListOrgPoliciesRequest"
           },
-          "description": "Updates the attributes of the Project identified by the specified\n`project_id` (for example, `my-project-123`).\n\nThe caller must have modify permissions for this Project.",
+          "description": "Lists all the `Policies` set for a particular resource.",
           "response": {
-            "$ref": "Project"
+            "$ref": "ListOrgPoliciesResponse"
           },
           "parameterOrder": [
-            "projectId"
-          ],
-          "httpMethod": "PUT",
-          "parameters": {
-            "projectId": {
-              "location": "path",
-              "description": "The project ID (for example, `my-project-123`).\n\nRequired.",
-              "required": true,
-              "type": "string"
-            }
-          },
-          "scopes": [
-            "https://www.googleapis.com/auth/cloud-platform"
-          ],
-          "flatPath": "v1/projects/{projectId}",
-          "path": "v1/projects/{projectId}",
-          "id": "cloudresourcemanager.projects.update"
-        },
-        "testIamPermissions": {
-          "httpMethod": "POST",
-          "parameterOrder": [
             "resource"
           ],
+          "httpMethod": "POST",
+          "parameters": {
+            "resource": {
+              "location": "path",
+              "description": "Name of the resource to list Policies for.",
+              "required": true,
+              "type": "string",
+              "pattern": "^organizations/[^/]+$"
+            }
+          },
+          "scopes": [
+            "https://www.googleapis.com/auth/cloud-platform",
+            "https://www.googleapis.com/auth/cloud-platform.read-only"
+          ]
+        },
+        "search": {
+          "flatPath": "v1/organizations:search",
+          "path": "v1/organizations:search",
+          "id": "cloudresourcemanager.organizations.search",
+          "description": "Searches Organization resources that are visible to the user and satisfy\nthe specified filter. This method returns Organizations in an unspecified\norder. New Organizations do not necessarily appear at the end of the\nresults.",
+          "request": {
+            "$ref": "SearchOrganizationsRequest"
+          },
+          "response": {
+            "$ref": "SearchOrganizationsResponse"
+          },
+          "parameterOrder": [],
+          "httpMethod": "POST",
+          "scopes": [
+            "https://www.googleapis.com/auth/cloud-platform",
+            "https://www.googleapis.com/auth/cloud-platform.read-only"
+          ],
+          "parameters": {}
+        },
+        "get": {
+          "description": "Fetches an Organization resource identified by the specified resource name.",
+          "response": {
+            "$ref": "Organization"
+          },
+          "parameterOrder": [
+            "name"
+          ],
+          "httpMethod": "GET",
+          "parameters": {
+            "name": {
+              "description": "The resource name of the Organization to fetch, e.g. \"organizations/1234\".",
+              "required": true,
+              "type": "string",
+              "pattern": "^organizations/[^/]+$",
+              "location": "path"
+            }
+          },
+          "scopes": [
+            "https://www.googleapis.com/auth/cloud-platform",
+            "https://www.googleapis.com/auth/cloud-platform.read-only"
+          ],
+          "flatPath": "v1/organizations/{organizationsId}",
+          "path": "v1/{+name}",
+          "id": "cloudresourcemanager.organizations.get"
+        },
+        "testIamPermissions": {
+          "flatPath": "v1/organizations/{organizationsId}:testIamPermissions",
+          "path": "v1/{+resource}:testIamPermissions",
+          "id": "cloudresourcemanager.organizations.testIamPermissions",
+          "description": "Returns permissions that a caller has on the specified Organization.\nThe `resource` field should be the organization's resource name,\ne.g. \"organizations/123\".",
+          "request": {
+            "$ref": "TestIamPermissionsRequest"
+          },
           "response": {
             "$ref": "TestIamPermissionsResponse"
           },
+          "parameterOrder": [
+            "resource"
+          ],
+          "httpMethod": "POST",
+          "scopes": [
+            "https://www.googleapis.com/auth/cloud-platform",
+            "https://www.googleapis.com/auth/cloud-platform.read-only"
+          ],
           "parameters": {
             "resource": {
               "location": "path",
               "description": "REQUIRED: The resource for which the policy detail is being requested.\nSee the operation documentation for the appropriate value for this field.",
               "required": true,
-              "type": "string"
-            }
-          },
-          "scopes": [
-            "https://www.googleapis.com/auth/cloud-platform",
-            "https://www.googleapis.com/auth/cloud-platform.read-only"
-          ],
-          "flatPath": "v1/projects/{resource}:testIamPermissions",
-          "id": "cloudresourcemanager.projects.testIamPermissions",
-          "path": "v1/projects/{resource}:testIamPermissions",
-          "request": {
-            "$ref": "TestIamPermissionsRequest"
-          },
-          "description": "Returns permissions that a caller has on the specified Project."
-        },
-        "delete": {
-          "description": "Marks the Project identified by the specified\n`project_id` (for example, `my-project-123`) for deletion.\nThis method will only affect the Project if the following criteria are met:\n\n+ The Project does not have a billing account associated with it.\n+ The Project has a lifecycle state of\nACTIVE.\n\nThis method changes the Project's lifecycle state from\nACTIVE\nto DELETE_REQUESTED.\nThe deletion starts at an unspecified time,\nat which point the Project is no longer accessible.\n\nUntil the deletion completes, you can check the lifecycle state\nchecked by retrieving the Project with GetProject,\nand the Project remains visible to ListProjects.\nHowever, you cannot update the project.\n\nAfter the deletion completes, the Project is not retrievable by\nthe  GetProject and\nListProjects methods.\n\nThe caller must have modify permissions for this Project.",
-          "response": {
-            "$ref": "Empty"
-          },
-          "parameterOrder": [
-            "projectId"
-          ],
-          "httpMethod": "DELETE",
-          "scopes": [
-            "https://www.googleapis.com/auth/cloud-platform"
-          ],
-          "parameters": {
-            "projectId": {
-              "location": "path",
-              "description": "The Project ID (for example, `foo-bar-123`).\n\nRequired.",
-              "required": true,
-              "type": "string"
-            }
-          },
-          "flatPath": "v1/projects/{projectId}",
-          "path": "v1/projects/{projectId}",
-          "id": "cloudresourcemanager.projects.delete"
-        },
-        "list": {
-          "path": "v1/projects",
-          "id": "cloudresourcemanager.projects.list",
-          "description": "Lists Projects that are visible to the user and satisfy the\nspecified filter. This method returns Projects in an unspecified order.\nNew Projects do not necessarily appear at the end of the list.",
-          "response": {
-            "$ref": "ListProjectsResponse"
-          },
-          "parameterOrder": [],
-          "httpMethod": "GET",
-          "scopes": [
-            "https://www.googleapis.com/auth/cloud-platform",
-            "https://www.googleapis.com/auth/cloud-platform.read-only"
-          ],
-          "parameters": {
-            "pageToken": {
-              "location": "query",
-              "description": "A pagination token returned from a previous call to ListProjects\nthat indicates from where listing should continue.\n\nOptional.",
-              "type": "string"
-            },
-            "pageSize": {
-              "location": "query",
-              "description": "The maximum number of Projects to return in the response.\nThe server can return fewer Projects than requested.\nIf unspecified, server picks an appropriate default.\n\nOptional.",
-              "format": "int32",
-              "type": "integer"
-            },
-            "filter": {
-              "description": "An expression for filtering the results of the request.  Filter rules are\ncase insensitive. The fields eligible for filtering are:\n\n+ `name`\n+ `id`\n+ \u003ccode\u003elabels.\u003cem\u003ekey\u003c/em\u003e\u003c/code\u003e where *key* is the name of a label\n\nSome examples of using labels as filters:\n\n|Filter|Description|\n|------|-----------|\n|name:*|The project has a name.|\n|name:Howl|The project's name is `Howl` or `howl`.|\n|name:HOWL|Equivalent to above.|\n|NAME:howl|Equivalent to above.|\n|labels.color:*|The project has the label `color`.|\n|labels.color:red|The project's label `color` has the value `red`.|\n|labels.color:red&nbsp;label.size:big|The project's label `color` has the\nvalue `red` and its label `size` has the value `big`.\n\nOptional.",
               "type": "string",
-              "location": "query"
+              "pattern": "^organizations/[^/]+$"
             }
-          },
-          "flatPath": "v1/projects"
-        },
-        "create": {
-          "httpMethod": "POST",
-          "parameterOrder": [],
-          "response": {
-            "$ref": "Operation"
-          },
-          "scopes": [
-            "https://www.googleapis.com/auth/cloud-platform"
-          ],
-          "parameters": {},
-          "flatPath": "v1/projects",
-          "id": "cloudresourcemanager.projects.create",
-          "path": "v1/projects",
-          "description": "Request that a new Project be created. The result is an Operation which\ncan be used to track the creation process. It is automatically deleted\nafter a few hours, so there is no need to call DeleteOperation.\n\nOur SLO permits Project creation to take up to 30 seconds at the 90th\npercentile. As of 2016-08-29, we are observing 6 seconds 50th percentile\nlatency. 95th percentile latency is around 11 seconds. We recommend\npolling at the 5th second with an exponential backoff.",
-          "request": {
-            "$ref": "Project"
           }
         },
-        "setIamPolicy": {
-          "path": "v1/projects/{resource}:setIamPolicy",
-          "id": "cloudresourcemanager.projects.setIamPolicy",
-          "description": "Sets the IAM access control policy for the specified Project. Replaces\nany existing policy.\n\nThe following constraints apply when using `setIamPolicy()`:\n\n+ Project does not support `allUsers` and `allAuthenticatedUsers` as\n`members` in a `Binding` of a `Policy`.\n\n+ The owner role can be granted only to `user` and `serviceAccount`.\n\n+ Service accounts can be made owners of a project directly\nwithout any restrictions. However, to be added as an owner, a user must be\ninvited via Cloud Platform console and must accept the invitation.\n\n+ A user cannot be granted the owner role using `setIamPolicy()`. The user\nmust be granted the owner role using the Cloud Platform Console and must\nexplicitly accept the invitation.\n\n+ Invitations to grant the owner role cannot be sent using\n`setIamPolicy()`;\nthey must be sent only using the Cloud Platform Console.\n\n+ Membership changes that leave the project without any owners that have\naccepted the Terms of Service (ToS) will be rejected.\n\n+ There must be at least one owner who has accepted the Terms of\nService (ToS) agreement in the policy. Calling `setIamPolicy()` to\nto remove the last ToS-accepted owner from the policy will fail. This\nrestriction also applies to legacy projects that no longer have owners\nwho have accepted the ToS. Edits to IAM policies will be rejected until\nthe lack of a ToS-accepting owner is rectified.\n\n+ Calling this method requires enabling the App Engine Admin API.\n\nNote: Removing service accounts from policies or changing their roles\ncan render services completely inoperable. It is important to understand\nhow the service account is being used before removing or updating its\nroles.",
+        "getEffectiveOrgPolicyV1": {
+          "description": "Gets the effective `Policy` on a resource. This is the result of merging\n`Policies` in the resource hierarchy. The returned `Policy` will not have\nan `etag`set because it is a computed `Policy` across multiple resources.",
           "request": {
-            "$ref": "SetIamPolicyRequest"
+            "$ref": "GetEffectiveOrgPolicyRequest"
           },
           "response": {
-            "$ref": "Policy"
+            "$ref": "OrgPolicy"
           },
           "parameterOrder": [
             "resource"
           ],
           "httpMethod": "POST",
           "scopes": [
+            "https://www.googleapis.com/auth/cloud-platform",
+            "https://www.googleapis.com/auth/cloud-platform.read-only"
+          ],
+          "parameters": {
+            "resource": {
+              "location": "path",
+              "description": "The name of the resource to start computing the effective `Policy`.",
+              "required": true,
+              "type": "string",
+              "pattern": "^organizations/[^/]+$"
+            }
+          },
+          "flatPath": "v1/organizations/{organizationsId}:getEffectiveOrgPolicyV1",
+          "path": "v1/{+resource}:getEffectiveOrgPolicyV1",
+          "id": "cloudresourcemanager.organizations.getEffectiveOrgPolicyV1"
+        },
+        "clearOrgPolicy": {
+          "httpMethod": "POST",
+          "parameterOrder": [
+            "resource"
+          ],
+          "response": {
+            "$ref": "Empty"
+          },
+          "parameters": {
+            "resource": {
+              "description": "Name of the resource for the `Policy` to clear.",
+              "required": true,
+              "type": "string",
+              "pattern": "^organizations/[^/]+$",
+              "location": "path"
+            }
+          },
+          "scopes": [
+            "https://www.googleapis.com/auth/cloud-platform"
+          ],
+          "flatPath": "v1/organizations/{organizationsId}:clearOrgPolicy",
+          "id": "cloudresourcemanager.organizations.clearOrgPolicy",
+          "path": "v1/{+resource}:clearOrgPolicy",
+          "request": {
+            "$ref": "ClearOrgPolicyRequest"
+          },
+          "description": "Clears a `Policy` from a resource."
+        },
+        "setIamPolicy": {
+          "description": "Sets the access control policy on an Organization resource. Replaces any\nexisting policy. The `resource` field should be the organization's resource\nname, e.g. \"organizations/123\".",
+          "request": {
+            "$ref": "SetIamPolicyRequest"
+          },
+          "httpMethod": "POST",
+          "parameterOrder": [
+            "resource"
+          ],
+          "response": {
+            "$ref": "Policy"
+          },
+          "scopes": [
             "https://www.googleapis.com/auth/cloud-platform"
           ],
           "parameters": {
@@ -289,16 +1115,45 @@
               "location": "path",
               "description": "REQUIRED: The resource for which the policy is being specified.\nSee the operation documentation for the appropriate value for this field.",
               "required": true,
-              "type": "string"
+              "type": "string",
+              "pattern": "^organizations/[^/]+$"
             }
           },
-          "flatPath": "v1/projects/{resource}:setIamPolicy"
-        }
-      }
-    },
-    "organizations": {
-      "methods": {
+          "flatPath": "v1/organizations/{organizationsId}:setIamPolicy",
+          "id": "cloudresourcemanager.organizations.setIamPolicy",
+          "path": "v1/{+resource}:setIamPolicy"
+        },
+        "listAvailableOrgPolicyConstraints": {
+          "description": "Lists `Constraints` that could be applied on the specified resource.",
+          "request": {
+            "$ref": "ListAvailableOrgPolicyConstraintsRequest"
+          },
+          "response": {
+            "$ref": "ListAvailableOrgPolicyConstraintsResponse"
+          },
+          "parameterOrder": [
+            "resource"
+          ],
+          "httpMethod": "POST",
+          "scopes": [
+            "https://www.googleapis.com/auth/cloud-platform",
+            "https://www.googleapis.com/auth/cloud-platform.read-only"
+          ],
+          "parameters": {
+            "resource": {
+              "location": "path",
+              "description": "Name of the resource to list `Constraints` for.",
+              "required": true,
+              "type": "string",
+              "pattern": "^organizations/[^/]+$"
+            }
+          },
+          "flatPath": "v1/organizations/{organizationsId}:listAvailableOrgPolicyConstraints",
+          "path": "v1/{+resource}:listAvailableOrgPolicyConstraints",
+          "id": "cloudresourcemanager.organizations.listAvailableOrgPolicyConstraints"
+        },
         "getIamPolicy": {
+          "flatPath": "v1/organizations/{organizationsId}:getIamPolicy",
           "id": "cloudresourcemanager.organizations.getIamPolicy",
           "path": "v1/{+resource}:getIamPolicy",
           "request": {
@@ -314,73 +1169,112 @@
           },
           "parameters": {
             "resource": {
+              "location": "path",
               "description": "REQUIRED: The resource for which the policy is being requested.\nSee the operation documentation for the appropriate value for this field.",
               "required": true,
               "type": "string",
+              "pattern": "^organizations/[^/]+$"
+            }
+          },
+          "scopes": [
+            "https://www.googleapis.com/auth/cloud-platform",
+            "https://www.googleapis.com/auth/cloud-platform.read-only"
+          ]
+        },
+        "getOrgPolicy": {
+          "description": "Gets a `Policy` on a resource.\n\nIf no `Policy` is set on the resource, a `Policy` is returned with default\nvalues including `POLICY_TYPE_NOT_SET` for the `policy_type oneof`. The\n`etag` value can be used with `SetOrgPolicy()` to create or update a\n`Policy` during read-modify-write.",
+          "request": {
+            "$ref": "GetOrgPolicyRequest"
+          },
+          "response": {
+            "$ref": "OrgPolicy"
+          },
+          "parameterOrder": [
+            "resource"
+          ],
+          "httpMethod": "POST",
+          "scopes": [
+            "https://www.googleapis.com/auth/cloud-platform",
+            "https://www.googleapis.com/auth/cloud-platform.read-only"
+          ],
+          "parameters": {
+            "resource": {
+              "description": "Name of the resource the `Policy` is set on.",
+              "required": true,
+              "type": "string",
               "pattern": "^organizations/[^/]+$",
               "location": "path"
             }
           },
-          "scopes": [
-            "https://www.googleapis.com/auth/cloud-platform",
-            "https://www.googleapis.com/auth/cloud-platform.read-only"
-          ],
-          "flatPath": "v1/organizations/{organizationsId}:getIamPolicy"
+          "flatPath": "v1/organizations/{organizationsId}:getOrgPolicy",
+          "path": "v1/{+resource}:getOrgPolicy",
+          "id": "cloudresourcemanager.organizations.getOrgPolicy"
         },
-        "search": {
-          "httpMethod": "POST",
-          "parameterOrder": [],
-          "response": {
-            "$ref": "SearchOrganizationsResponse"
-          },
-          "parameters": {},
-          "scopes": [
-            "https://www.googleapis.com/auth/cloud-platform",
-            "https://www.googleapis.com/auth/cloud-platform.read-only"
-          ],
-          "flatPath": "v1/organizations:search",
-          "id": "cloudresourcemanager.organizations.search",
-          "path": "v1/organizations:search",
+        "getEffectiveOrgPolicy": {
+          "flatPath": "v1/organizations/{organizationsId}:getEffectiveOrgPolicy",
+          "id": "cloudresourcemanager.organizations.getEffectiveOrgPolicy",
+          "path": "v1/{+resource}:getEffectiveOrgPolicy",
+          "description": "Gets the effective `Policy` on a resource. This is the result of merging\n`Policies` in the resource hierarchy. The returned `Policy` will not have\nan `etag`set because it is a computed `Policy` across multiple resources.",
           "request": {
-            "$ref": "SearchOrganizationsRequest"
+            "$ref": "GetEffectiveOrgPolicyRequest"
           },
-          "description": "Searches Organization resources that are visible to the user and satisfy\nthe specified filter. This method returns Organizations in an unspecified\norder. New Organizations do not necessarily appear at the end of the\nresults."
-        },
-        "get": {
-          "path": "v1/{+name}",
-          "id": "cloudresourcemanager.organizations.get",
-          "description": "Fetches an Organization resource identified by the specified resource name.",
-          "response": {
-            "$ref": "Organization"
-          },
+          "httpMethod": "POST",
           "parameterOrder": [
-            "name"
+            "resource"
           ],
-          "httpMethod": "GET",
+          "response": {
+            "$ref": "OrgPolicy"
+          },
+          "scopes": [
+            "https://www.googleapis.com/auth/cloud-platform",
+            "https://www.googleapis.com/auth/cloud-platform.read-only"
+          ],
           "parameters": {
-            "name": {
-              "pattern": "^organizations/[^/]+$",
+            "resource": {
               "location": "path",
-              "description": "The resource name of the Organization to fetch, e.g. \"organizations/1234\".",
+              "description": "The name of the resource to start computing the effective `Policy`.",
               "required": true,
-              "type": "string"
+              "type": "string",
+              "pattern": "^organizations/[^/]+$"
+            }
+          }
+        },
+        "getOrgPolicyV1": {
+          "description": "Gets a `Policy` on a resource.\n\nIf no `Policy` is set on the resource, a `Policy` is returned with default\nvalues including `POLICY_TYPE_NOT_SET` for the `policy_type oneof`. The\n`etag` value can be used with `SetOrgPolicy()` to create or update a\n`Policy` during read-modify-write.",
+          "request": {
+            "$ref": "GetOrgPolicyRequest"
+          },
+          "httpMethod": "POST",
+          "parameterOrder": [
+            "resource"
+          ],
+          "response": {
+            "$ref": "OrgPolicy"
+          },
+          "scopes": [
+            "https://www.googleapis.com/auth/cloud-platform",
+            "https://www.googleapis.com/auth/cloud-platform.read-only"
+          ],
+          "parameters": {
+            "resource": {
+              "location": "path",
+              "description": "Name of the resource the `Policy` is set on.",
+              "required": true,
+              "type": "string",
+              "pattern": "^organizations/[^/]+$"
             }
           },
-          "scopes": [
-            "https://www.googleapis.com/auth/cloud-platform",
-            "https://www.googleapis.com/auth/cloud-platform.read-only"
-          ],
-          "flatPath": "v1/organizations/{organizationsId}"
+          "flatPath": "v1/organizations/{organizationsId}:getOrgPolicyV1",
+          "id": "cloudresourcemanager.organizations.getOrgPolicyV1",
+          "path": "v1/{+resource}:getOrgPolicyV1"
         },
-        "setIamPolicy": {
-          "path": "v1/{+resource}:setIamPolicy",
-          "id": "cloudresourcemanager.organizations.setIamPolicy",
-          "description": "Sets the access control policy on an Organization resource. Replaces any\nexisting policy. The `resource` field should be the organization's resource\nname, e.g. \"organizations/123\".",
+        "setOrgPolicyV1": {
+          "description": "Updates the specified `Policy` on the resource. Creates a new `Policy` for\nthat `Constraint` on the resource if one does not exist.\n\nNot supplying an `etag` on the request `Policy` results in an unconditional\nwrite of the `Policy`.",
           "request": {
-            "$ref": "SetIamPolicyRequest"
+            "$ref": "SetOrgPolicyRequest"
           },
           "response": {
-            "$ref": "Policy"
+            "$ref": "OrgPolicy"
           },
           "parameterOrder": [
             "resource"
@@ -391,19 +1285,815 @@
           ],
           "parameters": {
             "resource": {
+              "description": "Resource name of the resource to attach the `Policy`.",
+              "required": true,
+              "type": "string",
               "pattern": "^organizations/[^/]+$",
+              "location": "path"
+            }
+          },
+          "flatPath": "v1/organizations/{organizationsId}:setOrgPolicyV1",
+          "path": "v1/{+resource}:setOrgPolicyV1",
+          "id": "cloudresourcemanager.organizations.setOrgPolicyV1"
+        }
+      }
+    },
+    "liens": {
+      "methods": {
+        "list": {
+          "description": "List all Liens applied to the `parent` resource.\n\nCallers of this method will require permission on the `parent` resource.\nFor example, a Lien with a `parent` of `projects/1234` requires permission\n`resourcemanager.projects.get`.",
+          "response": {
+            "$ref": "ListLiensResponse"
+          },
+          "parameterOrder": [],
+          "httpMethod": "GET",
+          "scopes": [
+            "https://www.googleapis.com/auth/cloud-platform",
+            "https://www.googleapis.com/auth/cloud-platform.read-only"
+          ],
+          "parameters": {
+            "pageToken": {
+              "location": "query",
+              "description": "The `next_page_token` value returned from a previous List request, if any.",
+              "type": "string"
+            },
+            "pageSize": {
+              "description": "The maximum number of items to return. This is a suggestion for the server.",
+              "format": "int32",
+              "type": "integer",
+              "location": "query"
+            },
+            "parent": {
+              "description": "The name of the resource to list all attached Liens.\nFor example, `projects/1234`.",
+              "type": "string",
+              "location": "query"
+            }
+          },
+          "flatPath": "v1/liens",
+          "path": "v1/liens",
+          "id": "cloudresourcemanager.liens.list"
+        },
+        "create": {
+          "description": "Create a Lien which applies to the resource denoted by the `parent` field.\n\nCallers of this method will require permission on the `parent` resource.\nFor example, applying to `projects/1234` requires permission\n`resourcemanager.projects.updateLiens`.\n\nNOTE: Some resources may limit the number of Liens which may be applied.",
+          "request": {
+            "$ref": "Lien"
+          },
+          "response": {
+            "$ref": "Lien"
+          },
+          "parameterOrder": [],
+          "httpMethod": "POST",
+          "scopes": [
+            "https://www.googleapis.com/auth/cloud-platform",
+            "https://www.googleapis.com/auth/cloud-platform.read-only"
+          ],
+          "parameters": {},
+          "flatPath": "v1/liens",
+          "path": "v1/liens",
+          "id": "cloudresourcemanager.liens.create"
+        },
+        "delete": {
+          "httpMethod": "DELETE",
+          "parameterOrder": [
+            "name"
+          ],
+          "response": {
+            "$ref": "Empty"
+          },
+          "scopes": [
+            "https://www.googleapis.com/auth/cloud-platform",
+            "https://www.googleapis.com/auth/cloud-platform.read-only"
+          ],
+          "parameters": {
+            "name": {
               "location": "path",
-              "description": "REQUIRED: The resource for which the policy is being specified.\nSee the operation documentation for the appropriate value for this field.",
+              "description": "The name/identifier of the Lien to delete.",
+              "required": true,
+              "type": "string",
+              "pattern": "^liens/.+$"
+            }
+          },
+          "flatPath": "v1/liens/{liensId}",
+          "id": "cloudresourcemanager.liens.delete",
+          "path": "v1/{+name}",
+          "description": "Delete a Lien by `name`.\n\nCallers of this method will require permission on the `parent` resource.\nFor example, a Lien with a `parent` of `projects/1234` requires permission\n`resourcemanager.projects.updateLiens`."
+        }
+      }
+    },
+    "operations": {
+      "methods": {
+        "get": {
+          "httpMethod": "GET",
+          "parameterOrder": [
+            "name"
+          ],
+          "response": {
+            "$ref": "Operation"
+          },
+          "parameters": {
+            "name": {
+              "location": "path",
+              "description": "The name of the operation resource.",
+              "required": true,
+              "type": "string",
+              "pattern": "^operations/.+$"
+            }
+          },
+          "scopes": [
+            "https://www.googleapis.com/auth/cloud-platform",
+            "https://www.googleapis.com/auth/cloud-platform.read-only"
+          ],
+          "flatPath": "v1/operations/{operationsId}",
+          "id": "cloudresourcemanager.operations.get",
+          "path": "v1/{+name}",
+          "description": "Gets the latest state of a long-running operation.  Clients can use this\nmethod to poll the operation result at intervals as recommended by the API\nservice."
+        }
+      }
+    },
+    "folders": {
+      "methods": {
+        "listAvailableOrgPolicyConstraints": {
+          "description": "Lists `Constraints` that could be applied on the specified resource.",
+          "request": {
+            "$ref": "ListAvailableOrgPolicyConstraintsRequest"
+          },
+          "response": {
+            "$ref": "ListAvailableOrgPolicyConstraintsResponse"
+          },
+          "parameterOrder": [
+            "resource"
+          ],
+          "httpMethod": "POST",
+          "scopes": [
+            "https://www.googleapis.com/auth/cloud-platform",
+            "https://www.googleapis.com/auth/cloud-platform.read-only"
+          ],
+          "parameters": {
+            "resource": {
+              "location": "path",
+              "description": "Name of the resource to list `Constraints` for.",
+              "required": true,
+              "type": "string",
+              "pattern": "^folders/[^/]+$"
+            }
+          },
+          "flatPath": "v1/folders/{foldersId}:listAvailableOrgPolicyConstraints",
+          "path": "v1/{+resource}:listAvailableOrgPolicyConstraints",
+          "id": "cloudresourcemanager.folders.listAvailableOrgPolicyConstraints"
+        },
+        "listOrgPolicies": {
+          "description": "Lists all the `Policies` set for a particular resource.",
+          "request": {
+            "$ref": "ListOrgPoliciesRequest"
+          },
+          "response": {
+            "$ref": "ListOrgPoliciesResponse"
+          },
+          "parameterOrder": [
+            "resource"
+          ],
+          "httpMethod": "POST",
+          "scopes": [
+            "https://www.googleapis.com/auth/cloud-platform",
+            "https://www.googleapis.com/auth/cloud-platform.read-only"
+          ],
+          "parameters": {
+            "resource": {
+              "location": "path",
+              "description": "Name of the resource to list Policies for.",
+              "required": true,
+              "type": "string",
+              "pattern": "^folders/[^/]+$"
+            }
+          },
+          "flatPath": "v1/folders/{foldersId}:listOrgPolicies",
+          "path": "v1/{+resource}:listOrgPolicies",
+          "id": "cloudresourcemanager.folders.listOrgPolicies"
+        },
+        "getOrgPolicy": {
+          "request": {
+            "$ref": "GetOrgPolicyRequest"
+          },
+          "description": "Gets a `Policy` on a resource.\n\nIf no `Policy` is set on the resource, a `Policy` is returned with default\nvalues including `POLICY_TYPE_NOT_SET` for the `policy_type oneof`. The\n`etag` value can be used with `SetOrgPolicy()` to create or update a\n`Policy` during read-modify-write.",
+          "httpMethod": "POST",
+          "parameterOrder": [
+            "resource"
+          ],
+          "response": {
+            "$ref": "OrgPolicy"
+          },
+          "parameters": {
+            "resource": {
+              "description": "Name of the resource the `Policy` is set on.",
+              "required": true,
+              "type": "string",
+              "pattern": "^folders/[^/]+$",
+              "location": "path"
+            }
+          },
+          "scopes": [
+            "https://www.googleapis.com/auth/cloud-platform",
+            "https://www.googleapis.com/auth/cloud-platform.read-only"
+          ],
+          "flatPath": "v1/folders/{foldersId}:getOrgPolicy",
+          "id": "cloudresourcemanager.folders.getOrgPolicy",
+          "path": "v1/{+resource}:getOrgPolicy"
+        },
+        "getEffectiveOrgPolicy": {
+          "description": "Gets the effective `Policy` on a resource. This is the result of merging\n`Policies` in the resource hierarchy. The returned `Policy` will not have\nan `etag`set because it is a computed `Policy` across multiple resources.",
+          "request": {
+            "$ref": "GetEffectiveOrgPolicyRequest"
+          },
+          "response": {
+            "$ref": "OrgPolicy"
+          },
+          "parameterOrder": [
+            "resource"
+          ],
+          "httpMethod": "POST",
+          "scopes": [
+            "https://www.googleapis.com/auth/cloud-platform",
+            "https://www.googleapis.com/auth/cloud-platform.read-only"
+          ],
+          "parameters": {
+            "resource": {
+              "location": "path",
+              "description": "The name of the resource to start computing the effective `Policy`.",
+              "required": true,
+              "type": "string",
+              "pattern": "^folders/[^/]+$"
+            }
+          },
+          "flatPath": "v1/folders/{foldersId}:getEffectiveOrgPolicy",
+          "path": "v1/{+resource}:getEffectiveOrgPolicy",
+          "id": "cloudresourcemanager.folders.getEffectiveOrgPolicy"
+        },
+        "getOrgPolicyV1": {
+          "flatPath": "v1/folders/{foldersId}:getOrgPolicyV1",
+          "path": "v1/{+resource}:getOrgPolicyV1",
+          "id": "cloudresourcemanager.folders.getOrgPolicyV1",
+          "request": {
+            "$ref": "GetOrgPolicyRequest"
+          },
+          "description": "Gets a `Policy` on a resource.\n\nIf no `Policy` is set on the resource, a `Policy` is returned with default\nvalues including `POLICY_TYPE_NOT_SET` for the `policy_type oneof`. The\n`etag` value can be used with `SetOrgPolicy()` to create or update a\n`Policy` during read-modify-write.",
+          "response": {
+            "$ref": "OrgPolicy"
+          },
+          "parameterOrder": [
+            "resource"
+          ],
+          "httpMethod": "POST",
+          "parameters": {
+            "resource": {
+              "description": "Name of the resource the `Policy` is set on.",
+              "required": true,
+              "type": "string",
+              "pattern": "^folders/[^/]+$",
+              "location": "path"
+            }
+          },
+          "scopes": [
+            "https://www.googleapis.com/auth/cloud-platform",
+            "https://www.googleapis.com/auth/cloud-platform.read-only"
+          ]
+        },
+        "getEffectiveOrgPolicyV1": {
+          "description": "Gets the effective `Policy` on a resource. This is the result of merging\n`Policies` in the resource hierarchy. The returned `Policy` will not have\nan `etag`set because it is a computed `Policy` across multiple resources.",
+          "request": {
+            "$ref": "GetEffectiveOrgPolicyRequest"
+          },
+          "httpMethod": "POST",
+          "parameterOrder": [
+            "resource"
+          ],
+          "response": {
+            "$ref": "OrgPolicy"
+          },
+          "scopes": [
+            "https://www.googleapis.com/auth/cloud-platform",
+            "https://www.googleapis.com/auth/cloud-platform.read-only"
+          ],
+          "parameters": {
+            "resource": {
+              "description": "The name of the resource to start computing the effective `Policy`.",
+              "required": true,
+              "type": "string",
+              "pattern": "^folders/[^/]+$",
+              "location": "path"
+            }
+          },
+          "flatPath": "v1/folders/{foldersId}:getEffectiveOrgPolicyV1",
+          "id": "cloudresourcemanager.folders.getEffectiveOrgPolicyV1",
+          "path": "v1/{+resource}:getEffectiveOrgPolicyV1"
+        },
+        "setOrgPolicyV1": {
+          "description": "Updates the specified `Policy` on the resource. Creates a new `Policy` for\nthat `Constraint` on the resource if one does not exist.\n\nNot supplying an `etag` on the request `Policy` results in an unconditional\nwrite of the `Policy`.",
+          "request": {
+            "$ref": "SetOrgPolicyRequest"
+          },
+          "response": {
+            "$ref": "OrgPolicy"
+          },
+          "parameterOrder": [
+            "resource"
+          ],
+          "httpMethod": "POST",
+          "scopes": [
+            "https://www.googleapis.com/auth/cloud-platform"
+          ],
+          "parameters": {
+            "resource": {
+              "description": "Resource name of the resource to attach the `Policy`.",
+              "required": true,
+              "type": "string",
+              "pattern": "^folders/[^/]+$",
+              "location": "path"
+            }
+          },
+          "flatPath": "v1/folders/{foldersId}:setOrgPolicyV1",
+          "path": "v1/{+resource}:setOrgPolicyV1",
+          "id": "cloudresourcemanager.folders.setOrgPolicyV1"
+        },
+        "clearOrgPolicy": {
+          "flatPath": "v1/folders/{foldersId}:clearOrgPolicy",
+          "path": "v1/{+resource}:clearOrgPolicy",
+          "id": "cloudresourcemanager.folders.clearOrgPolicy",
+          "request": {
+            "$ref": "ClearOrgPolicyRequest"
+          },
+          "description": "Clears a `Policy` from a resource.",
+          "response": {
+            "$ref": "Empty"
+          },
+          "parameterOrder": [
+            "resource"
+          ],
+          "httpMethod": "POST",
+          "parameters": {
+            "resource": {
+              "location": "path",
+              "description": "Name of the resource for the `Policy` to clear.",
+              "required": true,
+              "type": "string",
+              "pattern": "^folders/[^/]+$"
+            }
+          },
+          "scopes": [
+            "https://www.googleapis.com/auth/cloud-platform"
+          ]
+        },
+        "setOrgPolicy": {
+          "flatPath": "v1/folders/{foldersId}:setOrgPolicy",
+          "path": "v1/{+resource}:setOrgPolicy",
+          "id": "cloudresourcemanager.folders.setOrgPolicy",
+          "request": {
+            "$ref": "SetOrgPolicyRequest"
+          },
+          "description": "Updates the specified `Policy` on the resource. Creates a new `Policy` for\nthat `Constraint` on the resource if one does not exist.\n\nNot supplying an `etag` on the request `Policy` results in an unconditional\nwrite of the `Policy`.",
+          "response": {
+            "$ref": "OrgPolicy"
+          },
+          "parameterOrder": [
+            "resource"
+          ],
+          "httpMethod": "POST",
+          "parameters": {
+            "resource": {
+              "location": "path",
+              "description": "Resource name of the resource to attach the `Policy`.",
+              "required": true,
+              "type": "string",
+              "pattern": "^folders/[^/]+$"
+            }
+          },
+          "scopes": [
+            "https://www.googleapis.com/auth/cloud-platform"
+          ]
+        },
+        "clearOrgPolicyV1": {
+          "flatPath": "v1/folders/{foldersId}:clearOrgPolicyV1",
+          "path": "v1/{+resource}:clearOrgPolicyV1",
+          "id": "cloudresourcemanager.folders.clearOrgPolicyV1",
+          "description": "Clears a `Policy` from a resource.",
+          "request": {
+            "$ref": "ClearOrgPolicyRequest"
+          },
+          "response": {
+            "$ref": "Empty"
+          },
+          "parameterOrder": [
+            "resource"
+          ],
+          "httpMethod": "POST",
+          "scopes": [
+            "https://www.googleapis.com/auth/cloud-platform"
+          ],
+          "parameters": {
+            "resource": {
+              "description": "Name of the resource for the `Policy` to clear.",
+              "required": true,
+              "type": "string",
+              "pattern": "^folders/[^/]+$",
+              "location": "path"
+            }
+          }
+        }
+      }
+    },
+    "projects": {
+      "methods": {
+        "getOrgPolicy": {
+          "flatPath": "v1/projects/{projectsId}:getOrgPolicy",
+          "path": "v1/{+resource}:getOrgPolicy",
+          "id": "cloudresourcemanager.projects.getOrgPolicy",
+          "request": {
+            "$ref": "GetOrgPolicyRequest"
+          },
+          "description": "Gets a `Policy` on a resource.\n\nIf no `Policy` is set on the resource, a `Policy` is returned with default\nvalues including `POLICY_TYPE_NOT_SET` for the `policy_type oneof`. The\n`etag` value can be used with `SetOrgPolicy()` to create or update a\n`Policy` during read-modify-write.",
+          "response": {
+            "$ref": "OrgPolicy"
+          },
+          "parameterOrder": [
+            "resource"
+          ],
+          "httpMethod": "POST",
+          "parameters": {
+            "resource": {
+              "location": "path",
+              "description": "Name of the resource the `Policy` is set on.",
+              "required": true,
+              "type": "string",
+              "pattern": "^projects/[^/]+$"
+            }
+          },
+          "scopes": [
+            "https://www.googleapis.com/auth/cloud-platform",
+            "https://www.googleapis.com/auth/cloud-platform.read-only"
+          ]
+        },
+        "undelete": {
+          "response": {
+            "$ref": "Empty"
+          },
+          "parameterOrder": [
+            "projectId"
+          ],
+          "httpMethod": "POST",
+          "scopes": [
+            "https://www.googleapis.com/auth/cloud-platform"
+          ],
+          "parameters": {
+            "projectId": {
+              "description": "The project ID (for example, `foo-bar-123`).\n\nRequired.",
+              "required": true,
+              "type": "string",
+              "location": "path"
+            }
+          },
+          "flatPath": "v1/projects/{projectId}:undelete",
+          "path": "v1/projects/{projectId}:undelete",
+          "id": "cloudresourcemanager.projects.undelete",
+          "description": "Restores the Project identified by the specified\n`project_id` (for example, `my-project-123`).\nYou can only use this method for a Project that has a lifecycle state of\nDELETE_REQUESTED.\nAfter deletion starts, the Project cannot be restored.\n\nThe caller must have modify permissions for this Project.",
+          "request": {
+            "$ref": "UndeleteProjectRequest"
+          }
+        },
+        "getEffectiveOrgPolicy": {
+          "request": {
+            "$ref": "GetEffectiveOrgPolicyRequest"
+          },
+          "description": "Gets the effective `Policy` on a resource. This is the result of merging\n`Policies` in the resource hierarchy. The returned `Policy` will not have\nan `etag`set because it is a computed `Policy` across multiple resources.",
+          "response": {
+            "$ref": "OrgPolicy"
+          },
+          "parameterOrder": [
+            "resource"
+          ],
+          "httpMethod": "POST",
+          "parameters": {
+            "resource": {
+              "location": "path",
+              "description": "The name of the resource to start computing the effective `Policy`.",
+              "required": true,
+              "type": "string",
+              "pattern": "^projects/[^/]+$"
+            }
+          },
+          "scopes": [
+            "https://www.googleapis.com/auth/cloud-platform",
+            "https://www.googleapis.com/auth/cloud-platform.read-only"
+          ],
+          "flatPath": "v1/projects/{projectsId}:getEffectiveOrgPolicy",
+          "path": "v1/{+resource}:getEffectiveOrgPolicy",
+          "id": "cloudresourcemanager.projects.getEffectiveOrgPolicy"
+        },
+        "getOrgPolicyV1": {
+          "flatPath": "v1/projects/{projectsId}:getOrgPolicyV1",
+          "id": "cloudresourcemanager.projects.getOrgPolicyV1",
+          "path": "v1/{+resource}:getOrgPolicyV1",
+          "description": "Gets a `Policy` on a resource.\n\nIf no `Policy` is set on the resource, a `Policy` is returned with default\nvalues including `POLICY_TYPE_NOT_SET` for the `policy_type oneof`. The\n`etag` value can be used with `SetOrgPolicy()` to create or update a\n`Policy` during read-modify-write.",
+          "request": {
+            "$ref": "GetOrgPolicyRequest"
+          },
+          "httpMethod": "POST",
+          "parameterOrder": [
+            "resource"
+          ],
+          "response": {
+            "$ref": "OrgPolicy"
+          },
+          "scopes": [
+            "https://www.googleapis.com/auth/cloud-platform",
+            "https://www.googleapis.com/auth/cloud-platform.read-only"
+          ],
+          "parameters": {
+            "resource": {
+              "location": "path",
+              "description": "Name of the resource the `Policy` is set on.",
+              "required": true,
+              "type": "string",
+              "pattern": "^projects/[^/]+$"
+            }
+          }
+        },
+        "update": {
+          "flatPath": "v1/projects/{projectId}",
+          "id": "cloudresourcemanager.projects.update",
+          "path": "v1/projects/{projectId}",
+          "description": "Updates the attributes of the Project identified by the specified\n`project_id` (for example, `my-project-123`).\n\nThe caller must have modify permissions for this Project.",
+          "request": {
+            "$ref": "Project"
+          },
+          "httpMethod": "PUT",
+          "parameterOrder": [
+            "projectId"
+          ],
+          "response": {
+            "$ref": "Project"
+          },
+          "scopes": [
+            "https://www.googleapis.com/auth/cloud-platform"
+          ],
+          "parameters": {
+            "projectId": {
+              "location": "path",
+              "description": "The project ID (for example, `my-project-123`).\n\nRequired.",
+              "required": true,
+              "type": "string"
+            }
+          }
+        },
+        "setOrgPolicyV1": {
+          "request": {
+            "$ref": "SetOrgPolicyRequest"
+          },
+          "description": "Updates the specified `Policy` on the resource. Creates a new `Policy` for\nthat `Constraint` on the resource if one does not exist.\n\nNot supplying an `etag` on the request `Policy` results in an unconditional\nwrite of the `Policy`.",
+          "httpMethod": "POST",
+          "parameterOrder": [
+            "resource"
+          ],
+          "response": {
+            "$ref": "OrgPolicy"
+          },
+          "parameters": {
+            "resource": {
+              "location": "path",
+              "description": "Resource name of the resource to attach the `Policy`.",
+              "required": true,
+              "type": "string",
+              "pattern": "^projects/[^/]+$"
+            }
+          },
+          "scopes": [
+            "https://www.googleapis.com/auth/cloud-platform"
+          ],
+          "flatPath": "v1/projects/{projectsId}:setOrgPolicyV1",
+          "id": "cloudresourcemanager.projects.setOrgPolicyV1",
+          "path": "v1/{+resource}:setOrgPolicyV1"
+        },
+        "list": {
+          "response": {
+            "$ref": "ListProjectsResponse"
+          },
+          "parameterOrder": [],
+          "httpMethod": "GET",
+          "parameters": {
+            "pageSize": {
+              "description": "The maximum number of Projects to return in the response.\nThe server can return fewer Projects than requested.\nIf unspecified, server picks an appropriate default.\n\nOptional.",
+              "format": "int32",
+              "type": "integer",
+              "location": "query"
+            },
+            "filter": {
+              "location": "query",
+              "description": "An expression for filtering the results of the request.  Filter rules are\ncase insensitive. The fields eligible for filtering are:\n\n+ `name`\n+ `id`\n+ \u003ccode\u003elabels.\u003cem\u003ekey\u003c/em\u003e\u003c/code\u003e where *key* is the name of a label\n\nSome examples of using labels as filters:\n\n|Filter|Description|\n|------|-----------|\n|name:*|The project has a name.|\n|name:Howl|The project's name is `Howl` or `howl`.|\n|name:HOWL|Equivalent to above.|\n|NAME:howl|Equivalent to above.|\n|labels.color:*|The project has the label `color`.|\n|labels.color:red|The project's label `color` has the value `red`.|\n|labels.color:red&nbsp;labels.size:big|The project's label `color` has the\nvalue `red` and its label `size` has the value `big`.\n\nOptional.",
+              "type": "string"
+            },
+            "pageToken": {
+              "location": "query",
+              "description": "A pagination token returned from a previous call to ListProjects\nthat indicates from where listing should continue.\n\nOptional.",
+              "type": "string"
+            }
+          },
+          "scopes": [
+            "https://www.googleapis.com/auth/cloud-platform",
+            "https://www.googleapis.com/auth/cloud-platform.read-only"
+          ],
+          "flatPath": "v1/projects",
+          "path": "v1/projects",
+          "id": "cloudresourcemanager.projects.list",
+          "description": "Lists Projects that are visible to the user and satisfy the\nspecified filter. This method returns Projects in an unspecified order.\nNew Projects do not necessarily appear at the end of the list."
+        },
+        "setOrgPolicy": {
+          "response": {
+            "$ref": "OrgPolicy"
+          },
+          "parameterOrder": [
+            "resource"
+          ],
+          "httpMethod": "POST",
+          "parameters": {
+            "resource": {
+              "description": "Resource name of the resource to attach the `Policy`.",
+              "required": true,
+              "type": "string",
+              "pattern": "^projects/[^/]+$",
+              "location": "path"
+            }
+          },
+          "scopes": [
+            "https://www.googleapis.com/auth/cloud-platform"
+          ],
+          "flatPath": "v1/projects/{projectsId}:setOrgPolicy",
+          "path": "v1/{+resource}:setOrgPolicy",
+          "id": "cloudresourcemanager.projects.setOrgPolicy",
+          "request": {
+            "$ref": "SetOrgPolicyRequest"
+          },
+          "description": "Updates the specified `Policy` on the resource. Creates a new `Policy` for\nthat `Constraint` on the resource if one does not exist.\n\nNot supplying an `etag` on the request `Policy` results in an unconditional\nwrite of the `Policy`."
+        },
+        "clearOrgPolicyV1": {
+          "httpMethod": "POST",
+          "parameterOrder": [
+            "resource"
+          ],
+          "response": {
+            "$ref": "Empty"
+          },
+          "parameters": {
+            "resource": {
+              "location": "path",
+              "description": "Name of the resource for the `Policy` to clear.",
+              "required": true,
+              "type": "string",
+              "pattern": "^projects/[^/]+$"
+            }
+          },
+          "scopes": [
+            "https://www.googleapis.com/auth/cloud-platform"
+          ],
+          "flatPath": "v1/projects/{projectsId}:clearOrgPolicyV1",
+          "id": "cloudresourcemanager.projects.clearOrgPolicyV1",
+          "path": "v1/{+resource}:clearOrgPolicyV1",
+          "request": {
+            "$ref": "ClearOrgPolicyRequest"
+          },
+          "description": "Clears a `Policy` from a resource."
+        },
+        "create": {
+          "description": "Request that a new Project be created. The result is an Operation which\ncan be used to track the creation process. It is automatically deleted\nafter a few hours, so there is no need to call DeleteOperation.\n\nOur SLO permits Project creation to take up to 30 seconds at the 90th\npercentile. As of 2016-08-29, we are observing 6 seconds 50th percentile\nlatency. 95th percentile latency is around 11 seconds. We recommend\npolling at the 5th second with an exponential backoff.",
+          "request": {
+            "$ref": "Project"
+          },
+          "response": {
+            "$ref": "Operation"
+          },
+          "parameterOrder": [],
+          "httpMethod": "POST",
+          "scopes": [
+            "https://www.googleapis.com/auth/cloud-platform"
+          ],
+          "parameters": {},
+          "flatPath": "v1/projects",
+          "path": "v1/projects",
+          "id": "cloudresourcemanager.projects.create"
+        },
+        "listOrgPolicies": {
+          "description": "Lists all the `Policies` set for a particular resource.",
+          "request": {
+            "$ref": "ListOrgPoliciesRequest"
+          },
+          "response": {
+            "$ref": "ListOrgPoliciesResponse"
+          },
+          "parameterOrder": [
+            "resource"
+          ],
+          "httpMethod": "POST",
+          "scopes": [
+            "https://www.googleapis.com/auth/cloud-platform",
+            "https://www.googleapis.com/auth/cloud-platform.read-only"
+          ],
+          "parameters": {
+            "resource": {
+              "location": "path",
+              "description": "Name of the resource to list Policies for.",
+              "required": true,
+              "type": "string",
+              "pattern": "^projects/[^/]+$"
+            }
+          },
+          "flatPath": "v1/projects/{projectsId}:listOrgPolicies",
+          "path": "v1/{+resource}:listOrgPolicies",
+          "id": "cloudresourcemanager.projects.listOrgPolicies"
+        },
+        "get": {
+          "description": "Retrieves the Project identified by the specified\n`project_id` (for example, `my-project-123`).\n\nThe caller must have read permissions for this Project.",
+          "response": {
+            "$ref": "Project"
+          },
+          "parameterOrder": [
+            "projectId"
+          ],
+          "httpMethod": "GET",
+          "scopes": [
+            "https://www.googleapis.com/auth/cloud-platform",
+            "https://www.googleapis.com/auth/cloud-platform.read-only"
+          ],
+          "parameters": {
+            "projectId": {
+              "description": "The Project ID (for example, `my-project-123`).\n\nRequired.",
+              "required": true,
+              "type": "string",
+              "location": "path"
+            }
+          },
+          "flatPath": "v1/projects/{projectId}",
+          "path": "v1/projects/{projectId}",
+          "id": "cloudresourcemanager.projects.get"
+        },
+        "getAncestry": {
+          "description": "Gets a list of ancestors in the resource hierarchy for the Project\nidentified by the specified `project_id` (for example, `my-project-123`).\n\nThe caller must have read permissions for this Project.",
+          "request": {
+            "$ref": "GetAncestryRequest"
+          },
+          "httpMethod": "POST",
+          "parameterOrder": [
+            "projectId"
+          ],
+          "response": {
+            "$ref": "GetAncestryResponse"
+          },
+          "scopes": [
+            "https://www.googleapis.com/auth/cloud-platform",
+            "https://www.googleapis.com/auth/cloud-platform.read-only"
+          ],
+          "parameters": {
+            "projectId": {
+              "location": "path",
+              "description": "The Project ID (for example, `my-project-123`).\n\nRequired.",
               "required": true,
               "type": "string"
             }
           },
-          "flatPath": "v1/organizations/{organizationsId}:setIamPolicy"
+          "flatPath": "v1/projects/{projectId}:getAncestry",
+          "id": "cloudresourcemanager.projects.getAncestry",
+          "path": "v1/projects/{projectId}:getAncestry"
+        },
+        "getEffectiveOrgPolicyV1": {
+          "request": {
+            "$ref": "GetEffectiveOrgPolicyRequest"
+          },
+          "description": "Gets the effective `Policy` on a resource. This is the result of merging\n`Policies` in the resource hierarchy. The returned `Policy` will not have\nan `etag`set because it is a computed `Policy` across multiple resources.",
+          "response": {
+            "$ref": "OrgPolicy"
+          },
+          "parameterOrder": [
+            "resource"
+          ],
+          "httpMethod": "POST",
+          "parameters": {
+            "resource": {
+              "description": "The name of the resource to start computing the effective `Policy`.",
+              "required": true,
+              "type": "string",
+              "pattern": "^projects/[^/]+$",
+              "location": "path"
+            }
+          },
+          "scopes": [
+            "https://www.googleapis.com/auth/cloud-platform",
+            "https://www.googleapis.com/auth/cloud-platform.read-only"
+          ],
+          "flatPath": "v1/projects/{projectsId}:getEffectiveOrgPolicyV1",
+          "path": "v1/{+resource}:getEffectiveOrgPolicyV1",
+          "id": "cloudresourcemanager.projects.getEffectiveOrgPolicyV1"
         },
         "testIamPermissions": {
-          "id": "cloudresourcemanager.organizations.testIamPermissions",
-          "path": "v1/{+resource}:testIamPermissions",
-          "description": "Returns permissions that a caller has on the specified Organization.\nThe `resource` field should be the organization's resource name,\ne.g. \"organizations/123\".",
+          "flatPath": "v1/projects/{resource}:testIamPermissions",
+          "id": "cloudresourcemanager.projects.testIamPermissions",
+          "path": "v1/projects/{resource}:testIamPermissions",
+          "description": "Returns permissions that a caller has on the specified Project.",
           "request": {
             "$ref": "TestIamPermissionsRequest"
           },
@@ -420,33 +2110,138 @@
           ],
           "parameters": {
             "resource": {
+              "location": "path",
               "description": "REQUIRED: The resource for which the policy detail is being requested.\nSee the operation documentation for the appropriate value for this field.",
               "required": true,
-              "type": "string",
-              "pattern": "^organizations/[^/]+$",
-              "location": "path"
+              "type": "string"
             }
-          },
-          "flatPath": "v1/organizations/{organizationsId}:testIamPermissions"
-        }
-      }
-    },
-    "liens": {
-      "methods": {
+          }
+        },
         "delete": {
+          "description": "Marks the Project identified by the specified\n`project_id` (for example, `my-project-123`) for deletion.\nThis method will only affect the Project if the following criteria are met:\n\n+ The Project does not have a billing account associated with it.\n+ The Project has a lifecycle state of\nACTIVE.\n\nThis method changes the Project's lifecycle state from\nACTIVE\nto DELETE_REQUESTED.\nThe deletion starts at an unspecified time,\nat which point the Project is no longer accessible.\n\nUntil the deletion completes, you can check the lifecycle state\nchecked by retrieving the Project with GetProject,\nand the Project remains visible to ListProjects.\nHowever, you cannot update the project.\n\nAfter the deletion completes, the Project is not retrievable by\nthe  GetProject and\nListProjects methods.\n\nThe caller must have modify permissions for this Project.",
           "response": {
             "$ref": "Empty"
           },
           "parameterOrder": [
-            "name"
+            "projectId"
           ],
           "httpMethod": "DELETE",
           "parameters": {
-            "name": {
-              "description": "The name/identifier of the Lien to delete.",
+            "projectId": {
+              "location": "path",
+              "description": "The Project ID (for example, `foo-bar-123`).\n\nRequired.",
+              "required": true,
+              "type": "string"
+            }
+          },
+          "scopes": [
+            "https://www.googleapis.com/auth/cloud-platform"
+          ],
+          "flatPath": "v1/projects/{projectId}",
+          "path": "v1/projects/{projectId}",
+          "id": "cloudresourcemanager.projects.delete"
+        },
+        "clearOrgPolicy": {
+          "response": {
+            "$ref": "Empty"
+          },
+          "parameterOrder": [
+            "resource"
+          ],
+          "httpMethod": "POST",
+          "parameters": {
+            "resource": {
+              "description": "Name of the resource for the `Policy` to clear.",
               "required": true,
               "type": "string",
-              "pattern": "^liens/.+$",
+              "pattern": "^projects/[^/]+$",
+              "location": "path"
+            }
+          },
+          "scopes": [
+            "https://www.googleapis.com/auth/cloud-platform"
+          ],
+          "flatPath": "v1/projects/{projectsId}:clearOrgPolicy",
+          "path": "v1/{+resource}:clearOrgPolicy",
+          "id": "cloudresourcemanager.projects.clearOrgPolicy",
+          "request": {
+            "$ref": "ClearOrgPolicyRequest"
+          },
+          "description": "Clears a `Policy` from a resource."
+        },
+        "setIamPolicy": {
+          "request": {
+            "$ref": "SetIamPolicyRequest"
+          },
+          "description": "Sets the IAM access control policy for the specified Project. Replaces\nany existing policy.\n\nThe following constraints apply when using `setIamPolicy()`:\n\n+ Project does not support `allUsers` and `allAuthenticatedUsers` as\n`members` in a `Binding` of a `Policy`.\n\n+ The owner role can be granted only to `user` and `serviceAccount`.\n\n+ Service accounts can be made owners of a project directly\nwithout any restrictions. However, to be added as an owner, a user must be\ninvited via Cloud Platform console and must accept the invitation.\n\n+ A user cannot be granted the owner role using `setIamPolicy()`. The user\nmust be granted the owner role using the Cloud Platform Console and must\nexplicitly accept the invitation.\n\n+ Invitations to grant the owner role cannot be sent using\n`setIamPolicy()`;\nthey must be sent only using the Cloud Platform Console.\n\n+ Membership changes that leave the project without any owners that have\naccepted the Terms of Service (ToS) will be rejected.\n\n+ There must be at least one owner who has accepted the Terms of\nService (ToS) agreement in the policy. Calling `setIamPolicy()` to\nremove the last ToS-accepted owner from the policy will fail. This\nrestriction also applies to legacy projects that no longer have owners\nwho have accepted the ToS. Edits to IAM policies will be rejected until\nthe lack of a ToS-accepting owner is rectified.\n\n+ Calling this method requires enabling the App Engine Admin API.\n\nNote: Removing service accounts from policies or changing their roles\ncan render services completely inoperable. It is important to understand\nhow the service account is being used before removing or updating its\nroles.",
+          "response": {
+            "$ref": "Policy"
+          },
+          "parameterOrder": [
+            "resource"
+          ],
+          "httpMethod": "POST",
+          "parameters": {
+            "resource": {
+              "description": "REQUIRED: The resource for which the policy is being specified.\nSee the operation documentation for the appropriate value for this field.",
+              "required": true,
+              "type": "string",
+              "location": "path"
+            }
+          },
+          "scopes": [
+            "https://www.googleapis.com/auth/cloud-platform"
+          ],
+          "flatPath": "v1/projects/{resource}:setIamPolicy",
+          "path": "v1/projects/{resource}:setIamPolicy",
+          "id": "cloudresourcemanager.projects.setIamPolicy"
+        },
+        "listAvailableOrgPolicyConstraints": {
+          "description": "Lists `Constraints` that could be applied on the specified resource.",
+          "request": {
+            "$ref": "ListAvailableOrgPolicyConstraintsRequest"
+          },
+          "httpMethod": "POST",
+          "parameterOrder": [
+            "resource"
+          ],
+          "response": {
+            "$ref": "ListAvailableOrgPolicyConstraintsResponse"
+          },
+          "scopes": [
+            "https://www.googleapis.com/auth/cloud-platform",
+            "https://www.googleapis.com/auth/cloud-platform.read-only"
+          ],
+          "parameters": {
+            "resource": {
+              "description": "Name of the resource to list `Constraints` for.",
+              "required": true,
+              "type": "string",
+              "pattern": "^projects/[^/]+$",
+              "location": "path"
+            }
+          },
+          "flatPath": "v1/projects/{projectsId}:listAvailableOrgPolicyConstraints",
+          "id": "cloudresourcemanager.projects.listAvailableOrgPolicyConstraints",
+          "path": "v1/{+resource}:listAvailableOrgPolicyConstraints"
+        },
+        "getIamPolicy": {
+          "request": {
+            "$ref": "GetIamPolicyRequest"
+          },
+          "description": "Returns the IAM access control policy for the specified Project.\nPermission is denied if the policy or the resource does not exist.",
+          "httpMethod": "POST",
+          "parameterOrder": [
+            "resource"
+          ],
+          "response": {
+            "$ref": "Policy"
+          },
+          "parameters": {
+            "resource": {
+              "description": "REQUIRED: The resource for which the policy is being requested.\nSee the operation documentation for the appropriate value for this field.",
+              "required": true,
+              "type": "string",
               "location": "path"
             }
           },
@@ -454,111 +2249,28 @@
             "https://www.googleapis.com/auth/cloud-platform",
             "https://www.googleapis.com/auth/cloud-platform.read-only"
           ],
-          "flatPath": "v1/liens/{liensId}",
-          "path": "v1/{+name}",
-          "id": "cloudresourcemanager.liens.delete",
-          "description": "Delete a Lien by `name`.\n\nCallers of this method will require permission on the `parent` resource.\nFor example, a Lien with a `parent` of `projects/1234` requires permission\n`resourcemanager.projects.updateLiens`."
-        },
-        "list": {
-          "description": "List all Liens applied to the `parent` resource.\n\nCallers of this method will require permission on the `parent` resource.\nFor example, a Lien with a `parent` of `projects/1234` requires permission\n`resourcemanager.projects.get`.",
-          "httpMethod": "GET",
-          "parameterOrder": [],
-          "response": {
-            "$ref": "ListLiensResponse"
-          },
-          "parameters": {
-            "pageToken": {
-              "description": "The `next_page_token` value returned from a previous List request, if any.",
-              "type": "string",
-              "location": "query"
-            },
-            "pageSize": {
-              "description": "The maximum number of items to return. This is a suggestion for the server.",
-              "format": "int32",
-              "type": "integer",
-              "location": "query"
-            },
-            "parent": {
-              "description": "The name of the resource to list all attached Liens.\nFor example, `projects/1234`.",
-              "type": "string",
-              "location": "query"
-            }
-          },
-          "scopes": [
-            "https://www.googleapis.com/auth/cloud-platform",
-            "https://www.googleapis.com/auth/cloud-platform.read-only"
-          ],
-          "flatPath": "v1/liens",
-          "id": "cloudresourcemanager.liens.list",
-          "path": "v1/liens"
-        },
-        "create": {
-          "response": {
-            "$ref": "Lien"
-          },
-          "parameterOrder": [],
-          "httpMethod": "POST",
-          "parameters": {},
-          "scopes": [
-            "https://www.googleapis.com/auth/cloud-platform",
-            "https://www.googleapis.com/auth/cloud-platform.read-only"
-          ],
-          "flatPath": "v1/liens",
-          "path": "v1/liens",
-          "id": "cloudresourcemanager.liens.create",
-          "request": {
-            "$ref": "Lien"
-          },
-          "description": "Create a Lien which applies to the resource denoted by the `parent` field.\n\nCallers of this method will require permission on the `parent` resource.\nFor example, applying to `projects/1234` requires permission\n`resourcemanager.projects.updateLiens`.\n\nNOTE: Some resources may limit the number of Liens which may be applied."
-        }
-      }
-    },
-    "operations": {
-      "methods": {
-        "get": {
-          "description": "Gets the latest state of a long-running operation.  Clients can use this\nmethod to poll the operation result at intervals as recommended by the API\nservice.",
-          "response": {
-            "$ref": "Operation"
-          },
-          "parameterOrder": [
-            "name"
-          ],
-          "httpMethod": "GET",
-          "scopes": [
-            "https://www.googleapis.com/auth/cloud-platform",
-            "https://www.googleapis.com/auth/cloud-platform.read-only"
-          ],
-          "parameters": {
-            "name": {
-              "pattern": "^operations/.+$",
-              "location": "path",
-              "description": "The name of the operation resource.",
-              "required": true,
-              "type": "string"
-            }
-          },
-          "flatPath": "v1/operations/{operationsId}",
-          "path": "v1/{+name}",
-          "id": "cloudresourcemanager.operations.get"
+          "flatPath": "v1/projects/{resource}:getIamPolicy",
+          "id": "cloudresourcemanager.projects.getIamPolicy",
+          "path": "v1/projects/{resource}:getIamPolicy"
         }
       }
     }
   },
   "parameters": {
+    "bearer_token": {
+      "description": "OAuth bearer token.",
+      "type": "string",
+      "location": "query"
+    },
     "oauth_token": {
       "location": "query",
       "description": "OAuth 2.0 token for the current user.",
       "type": "string"
     },
-    "bearer_token": {
-      "location": "query",
-      "description": "OAuth bearer token.",
-      "type": "string"
-    },
     "upload_protocol": {
+      "location": "query",
       "description": "Upload protocol for media (e.g. \"raw\", \"multipart\").",
-      "type": "string",
-      "location": "query"
+      "type": "string"
     },
     "prettyPrint": {
       "description": "Returns response with indentations and line breaks.",
@@ -566,27 +2278,14 @@
       "default": "true",
       "location": "query"
     },
-    "uploadType": {
-      "description": "Legacy upload protocol for media (e.g. \"media\", \"multipart\").",
-      "type": "string",
-      "location": "query"
-    },
     "fields": {
       "location": "query",
       "description": "Selector specifying which fields to include in a partial response.",
       "type": "string"
     },
-    "$.xgafv": {
-      "enum": [
-        "1",
-        "2"
-      ],
-      "description": "V1 error format.",
+    "uploadType": {
+      "description": "Legacy upload protocol for media (e.g. \"media\", \"multipart\").",
       "type": "string",
-      "enumDescriptions": [
-        "v1 error format",
-        "v2 error format"
-      ],
       "location": "query"
     },
     "callback": {
@@ -594,13 +2293,20 @@
       "description": "JSONP",
       "type": "string"
     },
-    "alt": {
+    "$.xgafv": {
+      "description": "V1 error format.",
+      "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"
+        "v1 error format",
+        "v2 error format"
       ],
       "location": "query",
+      "enum": [
+        "1",
+        "2"
+      ]
+    },
+    "alt": {
       "description": "Data format for response.",
       "default": "json",
       "enum": [
@@ -608,600 +2314,34 @@
         "media",
         "proto"
       ],
-      "type": "string"
+      "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": {
-      "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"
-    },
-    "access_token": {
       "location": "query",
-      "description": "OAuth access token.",
+      "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"
     },
-    "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.",
+    "access_token": {
+      "description": "OAuth access token.",
       "type": "string",
       "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"
+    },
     "pp": {
+      "location": "query",
       "description": "Pretty-print response.",
       "type": "boolean",
-      "default": "true",
-      "location": "query"
+      "default": "true"
     }
-  },
-  "schemas": {
-    "Organization": {
-      "description": "The root node in the resource hierarchy to which a particular entity's\n(e.g., company) resources belong.",
-      "type": "object",
-      "properties": {
-        "owner": {
-          "description": "The owner of this Organization. The owner should be specified on\ncreation. Once set, it cannot be changed.\nThis field is required.",
-          "$ref": "OrganizationOwner"
-        },
-        "lifecycleState": {
-          "enum": [
-            "LIFECYCLE_STATE_UNSPECIFIED",
-            "ACTIVE",
-            "DELETE_REQUESTED"
-          ],
-          "description": "The organization's current lifecycle state. Assigned by the server.\n@OutputOnly",
-          "type": "string",
-          "enumDescriptions": [
-            "Unspecified state.  This is only useful for distinguishing unset values.",
-            "The normal and active state.",
-            "The organization has been marked for deletion by the user."
-          ]
-        },
-        "name": {
-          "description": "Output Only. The resource name of the organization. This is the\norganization's relative path in the API. Its format is\n\"organizations/[organization_id]\". For example, \"organizations/1234\".",
-          "type": "string"
-        },
-        "displayName": {
-          "description": "A friendly string to be used to refer to the Organization in the UI.\nAssigned by the server, set to the primary domain of the G Suite\ncustomer that owns the organization.\n@OutputOnly",
-          "type": "string"
-        },
-        "creationTime": {
-          "description": "Timestamp when the Organization was created. Assigned by the server.\n@OutputOnly",
-          "format": "google-datetime",
-          "type": "string"
-        }
-      },
-      "id": "Organization"
-    },
-    "GetAncestryResponse": {
-      "description": "Response from the GetAncestry method.",
-      "type": "object",
-      "properties": {
-        "ancestor": {
-          "description": "Ancestors are ordered from bottom to top of the resource hierarchy. The\nfirst ancestor is the project itself, followed by the project's parent,\netc.",
-          "type": "array",
-          "items": {
-            "$ref": "Ancestor"
-          }
-        }
-      },
-      "id": "GetAncestryResponse"
-    },
-    "AuditLogConfig": {
-      "properties": {
-        "exemptedMembers": {
-          "description": "Specifies the identities that do not cause logging for this type of\npermission.\nFollows the same format of Binding.members.",
-          "type": "array",
-          "items": {
-            "type": "string"
-          }
-        },
-        "logType": {
-          "enumDescriptions": [
-            "Default case. Should never be this.",
-            "Admin reads. Example: CloudIAM getIamPolicy",
-            "Data writes. Example: CloudSQL Users create",
-            "Data reads. Example: CloudSQL Users list"
-          ],
-          "enum": [
-            "LOG_TYPE_UNSPECIFIED",
-            "ADMIN_READ",
-            "DATA_WRITE",
-            "DATA_READ"
-          ],
-          "description": "The log type that this config enables.",
-          "type": "string"
-        }
-      },
-      "id": "AuditLogConfig",
-      "description": "Provides the configuration for logging a type of permissions.\nExample:\n\n    {\n      \"audit_log_configs\": [\n        {\n          \"log_type\": \"DATA_READ\",\n          \"exempted_members\": [\n            \"user:foo@gmail.com\"\n          ]\n        },\n        {\n          \"log_type\": \"DATA_WRITE\",\n        }\n      ]\n    }\n\nThis enables 'DATA_READ' and 'DATA_WRITE' logging, while exempting\nfoo@gmail.com from DATA_READ logging.",
-      "type": "object"
-    },
-    "SearchOrganizationsRequest": {
-      "properties": {
-        "filter": {
-          "description": "An optional query string used to filter the Organizations to return in\nthe response. Filter rules are case-insensitive.\n\n\nOrganizations may be filtered by `owner.directoryCustomerId` or by\n`domain`, where the domain is a Google for Work domain, for example:\n\n|Filter|Description|\n|------|-----------|\n|owner.directorycustomerid:123456789|Organizations with\n`owner.directory_customer_id` equal to `123456789`.|\n|domain:google.com|Organizations corresponding to the domain `google.com`.|\n\nThis field is optional.",
-          "type": "string"
-        },
-        "pageToken": {
-          "description": "A pagination token returned from a previous call to `SearchOrganizations`\nthat indicates from where listing should continue.\nThis field is optional.",
-          "type": "string"
-        },
-        "pageSize": {
-          "description": "The maximum number of Organizations to return in the response.\nThis field is optional.",
-          "format": "int32",
-          "type": "integer"
-        }
-      },
-      "id": "SearchOrganizationsRequest",
-      "description": "The request sent to the `SearchOrganizations` method.",
-      "type": "object"
-    },
-    "GetAncestryRequest": {
-      "properties": {},
-      "id": "GetAncestryRequest",
-      "description": "The request sent to the\nGetAncestry\nmethod.",
-      "type": "object"
-    },
-    "TestIamPermissionsRequest": {
-      "description": "Request message for `TestIamPermissions` method.",
-      "type": "object",
-      "properties": {
-        "permissions": {
-          "description": "The set of permissions to check for the `resource`. Permissions with\nwildcards (such as '*' or 'storage.*') are not allowed. For more\ninformation see\n[IAM Overview](https://cloud.google.com/iam/docs/overview#permissions).",
-          "type": "array",
-          "items": {
-            "type": "string"
-          }
-        }
-      },
-      "id": "TestIamPermissionsRequest"
-    },
-    "Policy": {
-      "properties": {
-        "etag": {
-          "description": "`etag` is used for optimistic concurrency control as a way to help\nprevent simultaneous updates of a policy from overwriting each other.\nIt is strongly suggested that systems make use of the `etag` in the\nread-modify-write cycle to perform policy updates in order to avoid race\nconditions: An `etag` is returned in the response to `getIamPolicy`, and\nsystems are expected to put that etag in the request to `setIamPolicy` to\nensure that their change will be applied to the same version of the policy.\n\nIf no `etag` is provided in the call to `setIamPolicy`, then the existing\npolicy is overwritten blindly.",
-          "format": "byte",
-          "type": "string"
-        },
-        "version": {
-          "description": "Version of the `Policy`. The default version is 0.",
-          "format": "int32",
-          "type": "integer"
-        },
-        "auditConfigs": {
-          "description": "Specifies cloud audit logging configuration for this policy.",
-          "type": "array",
-          "items": {
-            "$ref": "AuditConfig"
-          }
-        },
-        "bindings": {
-          "description": "Associates a list of `members` to a `role`.\nMultiple `bindings` must not be specified for the same `role`.\n`bindings` with no members will result in an error.",
-          "type": "array",
-          "items": {
-            "$ref": "Binding"
-          }
-        }
-      },
-      "id": "Policy",
-      "description": "Defines an Identity and Access Management (IAM) policy. It is used to\nspecify access control policies for Cloud Platform resources.\n\n\nA `Policy` consists of a list of `bindings`. A `Binding` binds a list of\n`members` to a `role`, where the members can be user accounts, Google groups,\nGoogle domains, and service accounts. A `role` is a named list of permissions\ndefined by IAM.\n\n**Example**\n\n    {\n      \"bindings\": [\n        {\n          \"role\": \"roles/owner\",\n          \"members\": [\n            \"user:mike@example.com\",\n            \"group:admins@example.com\",\n            \"domain:google.com\",\n            \"serviceAccount:my-other-app@appspot.gserviceaccount.com\",\n          ]\n        },\n        {\n          \"role\": \"roles/viewer\",\n          \"members\": [\"user:sean@example.com\"]\n        }\n      ]\n    }\n\nFor a description of IAM and its features, see the\n[IAM developer's guide](https://cloud.google.com/iam).",
-      "type": "object"
-    },
-    "FolderOperation": {
-      "properties": {
-        "operationType": {
-          "enumDescriptions": [
-            "Operation type not specified.",
-            "A create folder operation.",
-            "A move folder operation."
-          ],
-          "enum": [
-            "OPERATION_TYPE_UNSPECIFIED",
-            "CREATE",
-            "MOVE"
-          ],
-          "description": "The type of this operation.",
-          "type": "string"
-        },
-        "displayName": {
-          "description": "The display name of the folder.",
-          "type": "string"
-        },
-        "sourceParent": {
-          "description": "The resource name of the folder's parent.\nOnly applicable when the operation_type is MOVE.",
-          "type": "string"
-        },
-        "destinationParent": {
-          "description": "The resource name of the folder or organization we are either creating\nthe folder under or moving the folder to.",
-          "type": "string"
-        }
-      },
-      "id": "FolderOperation",
-      "description": "Metadata describing a long running folder operation",
-      "type": "object"
-    },
-    "ResourceId": {
-      "description": "A container to reference an id for any resource type. A `resource` in Google\nCloud Platform is a generic term for something you (a developer) may want to\ninteract with through one of our API's. Some examples are an App Engine app,\na Compute Engine instance, a Cloud SQL database, and so on.",
-      "type": "object",
-      "properties": {
-        "type": {
-          "description": "Required field representing the resource type this id is for.\nAt present, the valid types are: \"organization\"",
-          "type": "string"
-        },
-        "id": {
-          "description": "Required field for the type-specific id. This should correspond to the id\nused in the type-specific API's.",
-          "type": "string"
-        }
-      },
-      "id": "ResourceId"
-    },
-    "AuditConfig": {
-      "description": "Specifies the audit configuration for a service.\nIt consists of which permission types are logged, and what identities, if\nany, are exempted from logging.\nAn AuditConifg must have one or more AuditLogConfigs.\n\nIf there are AuditConfigs for both `allServices` and a specific service,\nthe union of the two AuditConfigs is used for that service: the log_types\nspecified in each AuditConfig are enabled, and the exempted_members in each\nAuditConfig are exempted.\nExample Policy with multiple AuditConfigs:\n{\n  \"audit_configs\": [\n    {\n      \"service\": \"allServices\"\n      \"audit_log_configs\": [\n        {\n          \"log_type\": \"DATA_READ\",\n          \"exempted_members\": [\n            \"user:foo@gmail.com\"\n          ]\n        },\n        {\n          \"log_type\": \"DATA_WRITE\",\n        },\n        {\n          \"log_type\": \"ADMIN_READ\",\n        }\n      ]\n    },\n    {\n      \"service\": \"fooservice@googleapis.com\"\n      \"audit_log_configs\": [\n        {\n          \"log_type\": \"DATA_READ\",\n        },\n        {\n          \"log_type\": \"DATA_WRITE\",\n          \"exempted_members\": [\n            \"user:bar@gmail.com\"\n          ]\n        }\n      ]\n    }\n  ]\n}\nFor fooservice, this policy enables DATA_READ, DATA_WRITE and ADMIN_READ\nlogging. It also exempts foo@gmail.com from DATA_READ logging, and\nbar@gmail.com from DATA_WRITE logging.",
-      "type": "object",
-      "properties": {
-        "service": {
-          "description": "Specifies a service that will be enabled for audit logging.\nFor example, `resourcemanager`, `storage`, `compute`.\n`allServices` is a special value that covers all services.",
-          "type": "string"
-        },
-        "auditLogConfigs": {
-          "description": "The configuration for logging of each type of permission.\nNext ID: 4",
-          "type": "array",
-          "items": {
-            "$ref": "AuditLogConfig"
-          }
-        }
-      },
-      "id": "AuditConfig"
-    },
-    "Operation": {
-      "properties": {
-        "done": {
-          "description": "If the value is `false`, it means the operation is still in progress.\nIf true, the operation is completed, and either `error` or `response` is\navailable.",
-          "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\nmethod returns no data on success, such as `Delete`, the response is\n`google.protobuf.Empty`.  If the original method is standard\n`Get`/`Create`/`Update`, the response should be the resource.  For other\nmethods, the response should have the type `XxxResponse`, where `Xxx`\nis the original method name.  For example, if the original method name\nis `TakeSnapshot()`, the inferred response type is\n`TakeSnapshotResponse`.",
-          "type": "object"
-        },
-        "name": {
-          "description": "The server-assigned name, which is only unique within the same service that\noriginally returns it. If you use the default HTTP mapping, the\n`name` should have the format of `operations/some/unique/name`.",
-          "type": "string"
-        },
-        "error": {
-          "description": "The error result of the operation in case of failure or cancellation.",
-          "$ref": "Status"
-        },
-        "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\ncontains progress information and common metadata such as create time.\nSome services might not provide such metadata.  Any method that returns a\nlong-running operation should document the metadata type, if any.",
-          "type": "object"
-        }
-      },
-      "id": "Operation",
-      "description": "This resource represents a long-running operation that is the result of a\nnetwork API call.",
-      "type": "object"
-    },
-    "ListLiensResponse": {
-      "description": "The response message for Liens.ListLiens.",
-      "type": "object",
-      "properties": {
-        "nextPageToken": {
-          "description": "Token to retrieve the next page of results, or empty if there are no more\nresults in the list.",
-          "type": "string"
-        },
-        "liens": {
-          "description": "A list of Liens.",
-          "type": "array",
-          "items": {
-            "$ref": "Lien"
-          }
-        }
-      },
-      "id": "ListLiensResponse"
-    },
-    "Status": {
-      "properties": {
-        "message": {
-          "description": "A developer-facing error message, which should be in English. Any\nuser-facing error message should be localized and sent in the\ngoogle.rpc.Status.details field, or localized by the client.",
-          "type": "string"
-        },
-        "details": {
-          "description": "A list of messages that carry the error details.  There will be a\ncommon 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"
-            },
-            "type": "object"
-          }
-        },
-        "code": {
-          "description": "The status code, which should be an enum value of google.rpc.Code.",
-          "format": "int32",
-          "type": "integer"
-        }
-      },
-      "id": "Status",
-      "description": "The `Status` type defines a logical error model that is suitable for different\nprogramming environments, including REST APIs and RPC APIs. It is used by\n[gRPC](https://github.com/grpc). The error model is designed to be:\n\n- Simple to use and understand for most users\n- Flexible enough to meet unexpected needs\n\n# Overview\n\nThe `Status` message contains three pieces of data: error code, error message,\nand error details. The error code should be an enum value of\ngoogle.rpc.Code, but it may accept additional error codes if needed.  The\nerror message should be a developer-facing English message that helps\ndevelopers *understand* and *resolve* the error. If a localized user-facing\nerror message is needed, put the localized message in the error details or\nlocalize it in the client. The optional error details may contain arbitrary\ninformation about the error. There is a predefined set of error detail types\nin the package `google.rpc` which can be used for common error conditions.\n\n# Language mapping\n\nThe `Status` message is the logical representation of the error model, but it\nis not necessarily the actual wire format. When the `Status` message is\nexposed in different client libraries and different wire protocols, it can be\nmapped differently. For example, it will likely be mapped to some exceptions\nin Java, but more likely mapped to some error codes in C.\n\n# Other uses\n\nThe error model and the `Status` message can be used in a variety of\nenvironments, either with or without APIs, to provide a\nconsistent developer experience across different environments.\n\nExample uses of this error model include:\n\n- Partial errors. If a service needs to return partial errors to the client,\n    it may embed the `Status` in the normal response to indicate the partial\n    errors.\n\n- Workflow errors. A typical workflow has multiple steps. Each step may\n    have a `Status` message for error reporting purpose.\n\n- Batch operations. If a client uses batch request and batch response, the\n    `Status` message should be used directly inside batch response, one for\n    each error sub-response.\n\n- Asynchronous operations. If an API call embeds asynchronous operation\n    results in its response, the status of those operations should be\n    represented directly using the `Status` message.\n\n- Logging. If some API errors are stored in logs, the message `Status` could\n    be used directly after any stripping needed for security/privacy reasons.",
-      "type": "object"
-    },
-    "Binding": {
-      "properties": {
-        "members": {
-          "description": "Specifies the identities requesting access for a Cloud Platform resource.\n`members` can have the following values:\n\n* `allUsers`: A special identifier that represents anyone who is\n   on the internet; with or without a Google account.\n\n* `allAuthenticatedUsers`: A special identifier that represents anyone\n   who is authenticated with a Google account or a service account.\n\n* `user:{emailid}`: An email address that represents a specific Google\n   account. For example, `alice@gmail.com` or `joe@example.com`.\n\n\n* `serviceAccount:{emailid}`: An email address that represents a service\n   account. For example, `my-other-app@appspot.gserviceaccount.com`.\n\n* `group:{emailid}`: An email address that represents a Google group.\n   For example, `admins@example.com`.\n\n* `domain:{domain}`: A Google Apps domain name that represents all the\n   users of that domain. For example, `google.com` or `example.com`.\n\n",
-          "type": "array",
-          "items": {
-            "type": "string"
-          }
-        },
-        "role": {
-          "description": "Role that is assigned to `members`.\nFor example, `roles/viewer`, `roles/editor`, or `roles/owner`.\nRequired",
-          "type": "string"
-        }
-      },
-      "id": "Binding",
-      "description": "Associates `members` with a `role`.",
-      "type": "object"
-    },
-    "UndeleteProjectRequest": {
-      "description": "The request sent to the UndeleteProject\nmethod.",
-      "type": "object",
-      "properties": {},
-      "id": "UndeleteProjectRequest"
-    },
-    "ProjectCreationStatus": {
-      "description": "A status object which is used as the `metadata` field for the Operation\nreturned by CreateProject. It provides insight for when significant phases of\nProject creation have completed.",
-      "type": "object",
-      "properties": {
-        "ready": {
-          "description": "True if the project creation process is complete.",
-          "type": "boolean"
-        },
-        "createTime": {
-          "description": "Creation time of the project creation workflow.",
-          "format": "google-datetime",
-          "type": "string"
-        },
-        "gettable": {
-          "description": "True if the project can be retrieved using GetProject. No other operations\non the project are guaranteed to work until the project creation is\ncomplete.",
-          "type": "boolean"
-        }
-      },
-      "id": "ProjectCreationStatus"
-    },
-    "TestIamPermissionsResponse": {
-      "properties": {
-        "permissions": {
-          "description": "A subset of `TestPermissionsRequest.permissions` that the caller is\nallowed.",
-          "type": "array",
-          "items": {
-            "type": "string"
-          }
-        }
-      },
-      "id": "TestIamPermissionsResponse",
-      "description": "Response message for `TestIamPermissions` method.",
-      "type": "object"
-    },
-    "GetIamPolicyRequest": {
-      "properties": {},
-      "id": "GetIamPolicyRequest",
-      "description": "Request message for `GetIamPolicy` method.",
-      "type": "object"
-    },
-    "OrganizationOwner": {
-      "description": "The entity that owns an Organization. The lifetime of the Organization and\nall of its descendants are bound to the `OrganizationOwner`. If the\n`OrganizationOwner` is deleted, the Organization and all its descendants will\nbe deleted.",
-      "type": "object",
-      "properties": {
-        "directoryCustomerId": {
-          "description": "The Google for Work customer id used in the Directory API.",
-          "type": "string"
-        }
-      },
-      "id": "OrganizationOwner"
-    },
-    "ListProjectsResponse": {
-      "description": "A page of the response received from the\nListProjects\nmethod.\n\nA paginated response where more pages are available has\n`next_page_token` set. This token can be used in a subsequent request to\nretrieve the next request page.",
-      "type": "object",
-      "properties": {
-        "nextPageToken": {
-          "description": "Pagination token.\n\nIf the result set is too large to fit in a single response, this token\nis returned. It encodes the position of the current result cursor.\nFeeding this value into a new list request with the `page_token` parameter\ngives the next page of the results.\n\nWhen `next_page_token` is not filled in, there is no next page and\nthe list returned is the last page in the result set.\n\nPagination tokens have a limited lifetime.",
-          "type": "string"
-        },
-        "projects": {
-          "description": "The list of Projects that matched the list filter. This list can\nbe paginated.",
-          "type": "array",
-          "items": {
-            "$ref": "Project"
-          }
-        }
-      },
-      "id": "ListProjectsResponse"
-    },
-    "Project": {
-      "properties": {
-        "projectNumber": {
-          "description": "The number uniquely identifying the project.\n\nExample: \u003ccode\u003e415104041262\u003c/code\u003e\nRead-only.",
-          "format": "int64",
-          "type": "string"
-        },
-        "parent": {
-          "$ref": "ResourceId",
-          "description": "An optional reference to a parent Resource.\n\nThe only supported parent type is \"organization\". Once set, the parent\ncannot be modified. The `parent` can be set on creation or using the\n`UpdateProject` method; the end user must have the\n`resourcemanager.projects.create` permission on the parent.\n\nRead-write."
-        },
-        "createTime": {
-          "description": "Creation time.\n\nRead-only.",
-          "format": "google-datetime",
-          "type": "string"
-        },
-        "labels": {
-          "additionalProperties": {
-            "type": "string"
-          },
-          "description": "The labels associated with this Project.\n\nLabel keys must be between 1 and 63 characters long and must conform\nto the following regular expression: \\[a-z\\](\\[-a-z0-9\\]*\\[a-z0-9\\])?.\n\nLabel values must be between 0 and 63 characters long and must conform\nto the regular expression (\\[a-z\\](\\[-a-z0-9\\]*\\[a-z0-9\\])?)?.\n\nNo more than 256 labels can be associated with a given resource.\n\nClients should store labels in a representation such as JSON that does not\ndepend on specific characters being disallowed.\n\nExample: \u003ccode\u003e\"environment\" : \"dev\"\u003c/code\u003e\nRead-write.",
-          "type": "object"
-        },
-        "name": {
-          "description": "The user-assigned display name of the Project.\nIt must be 4 to 30 characters.\nAllowed characters are: lowercase and uppercase letters, numbers,\nhyphen, single-quote, double-quote, space, and exclamation point.\n\nExample: \u003ccode\u003eMy Project\u003c/code\u003e\nRead-write.",
-          "type": "string"
-        },
-        "projectId": {
-          "description": "The unique, user-assigned ID of the Project.\nIt must be 6 to 30 lowercase letters, digits, or hyphens.\nIt must start with a letter.\nTrailing hyphens are prohibited.\n\nExample: \u003ccode\u003etokyo-rain-123\u003c/code\u003e\nRead-only after creation.",
-          "type": "string"
-        },
-        "lifecycleState": {
-          "enumDescriptions": [
-            "Unspecified state.  This is only used/useful for distinguishing\nunset values.",
-            "The normal and active state.",
-            "The project has been marked for deletion by the user\n(by invoking\nDeleteProject)\nor by the system (Google Cloud Platform).\nThis can generally be reversed by invoking UndeleteProject.",
-            "This lifecycle state is no longer used and not returned by the API."
-          ],
-          "enum": [
-            "LIFECYCLE_STATE_UNSPECIFIED",
-            "ACTIVE",
-            "DELETE_REQUESTED",
-            "DELETE_IN_PROGRESS"
-          ],
-          "description": "The Project lifecycle state.\n\nRead-only.",
-          "type": "string"
-        }
-      },
-      "id": "Project",
-      "description": "A Project is a high-level Google Cloud Platform entity.  It is a\ncontainer for ACLs, APIs, App Engine Apps, VMs, and other\nGoogle Cloud Platform resources.",
-      "type": "object"
-    },
-    "SearchOrganizationsResponse": {
-      "properties": {
-        "nextPageToken": {
-          "description": "A pagination token to be used to retrieve the next page of results. If the\nresult is too large to fit within the page size specified in the request,\nthis field will be set with a token that can be used to fetch the next page\nof results. If this field is empty, it indicates that this response\ncontains the last page of results.",
-          "type": "string"
-        },
-        "organizations": {
-          "description": "The list of Organizations that matched the search query, possibly\npaginated.",
-          "type": "array",
-          "items": {
-            "$ref": "Organization"
-          }
-        }
-      },
-      "id": "SearchOrganizationsResponse",
-      "description": "The response returned from the `SearchOrganizations` method.",
-      "type": "object"
-    },
-    "FolderOperationError": {
-      "description": "A classification of the Folder Operation error.",
-      "type": "object",
-      "properties": {
-        "errorMessageId": {
-          "enumDescriptions": [
-            "The error type was unrecognized or unspecified.",
-            "The attempted action would violate the max folder depth constraint.",
-            "The attempted action would violate the max child folders constraint.",
-            "The attempted action would violate the locally-unique folder\ndisplay_name constraint.",
-            "The resource being moved has been deleted.",
-            "The resource a folder was being added to has been deleted.",
-            "The attempted action would introduce cycle in resource path.",
-            "The attempted action would move a folder that is already being moved.",
-            "The folder the caller is trying to delete contains active resources."
-          ],
-          "enum": [
-            "ERROR_TYPE_UNSPECIFIED",
-            "FOLDER_HEIGHT_VIOLATION",
-            "MAX_CHILD_FOLDERS_VIOLATION",
-            "FOLDER_NAME_UNIQUENESS_VIOLATION",
-            "RESOURCE_DELETED",
-            "PARENT_DELETED",
-            "CYCLE_INTRODUCED_ERROR",
-            "FOLDER_ALREADY_BEING_MOVED",
-            "FOLDER_TO_DELETE_NON_EMPTY"
-          ],
-          "description": "The type of operation error experienced.",
-          "type": "string"
-        }
-      },
-      "id": "FolderOperationError"
-    },
-    "Lien": {
-      "description": "A Lien represents an encumbrance on the actions that can be performed on a\nresource.",
-      "type": "object",
-      "properties": {
-        "parent": {
-          "description": "A reference to the resource this Lien is attached to. The server will\nvalidate the parent against those for which Liens are supported.\n\nExample: `projects/1234`",
-          "type": "string"
-        },
-        "createTime": {
-          "description": "The creation time of this Lien.",
-          "format": "google-datetime",
-          "type": "string"
-        },
-        "name": {
-          "description": "A system-generated unique identifier for this Lien.\n\nExample: `liens/1234abcd`",
-          "type": "string"
-        },
-        "reason": {
-          "description": "Concise user-visible strings indicating why an action cannot be performed\non a resource. Maximum lenth of 200 characters.\n\nExample: 'Holds production API key'",
-          "type": "string"
-        },
-        "origin": {
-          "description": "A stable, user-visible/meaningful string identifying the origin of the\nLien, intended to be inspected programmatically. Maximum length of 200\ncharacters.\n\nExample: 'compute.googleapis.com'",
-          "type": "string"
-        },
-        "restrictions": {
-          "description": "The types of operations which should be blocked as a result of this Lien.\nEach value should correspond to an IAM permission. The server will\nvalidate the permissions against those for which Liens are supported.\n\nAn empty list is meaningless and will be rejected.\n\nExample: ['resourcemanager.projects.delete']",
-          "type": "array",
-          "items": {
-            "type": "string"
-          }
-        }
-      },
-      "id": "Lien"
-    },
-    "Ancestor": {
-      "description": "Identifying information for a single ancestor of a project.",
-      "type": "object",
-      "properties": {
-        "resourceId": {
-          "description": "Resource id of the ancestor.",
-          "$ref": "ResourceId"
-        }
-      },
-      "id": "Ancestor"
-    },
-    "SetIamPolicyRequest": {
-      "properties": {
-        "updateMask": {
-          "description": "OPTIONAL: A FieldMask specifying which fields of the policy to modify. Only\nthe fields in the mask will be modified. If no mask is provided, a default\nmask is used:\npaths: \"bindings, etag\"\nThis field is only used by Cloud IAM.",
-          "format": "google-fieldmask",
-          "type": "string"
-        },
-        "policy": {
-          "$ref": "Policy",
-          "description": "REQUIRED: The complete policy to be applied to the `resource`. The size of\nthe policy is limited to a few 10s of KB. An empty policy is a\nvalid policy but certain Cloud Platform services (such as Projects)\nmight reject them."
-        }
-      },
-      "id": "SetIamPolicyRequest",
-      "description": "Request message for `SetIamPolicy` method.",
-      "type": "object"
-    },
-    "Empty": {
-      "description": "A generic empty message that you can re-use to avoid defining duplicated\nempty messages in your APIs. A typical example is to use it as the request\nor the response type of an API method. For instance:\n\n    service Foo {\n      rpc Bar(google.protobuf.Empty) returns (google.protobuf.Empty);\n    }\n\nThe JSON representation for `Empty` is empty JSON object `{}`.",
-      "type": "object",
-      "properties": {},
-      "id": "Empty"
-    }
-  },
-  "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",
-  "version": "v1",
-  "baseUrl": "https://cloudresourcemanager.googleapis.com/"
+  }
 }
diff --git a/cloudresourcemanager/v1/cloudresourcemanager-gen.go b/cloudresourcemanager/v1/cloudresourcemanager-gen.go
index 17c6544..db71818 100644
--- a/cloudresourcemanager/v1/cloudresourcemanager-gen.go
+++ b/cloudresourcemanager/v1/cloudresourcemanager-gen.go
@@ -59,6 +59,7 @@
 		return nil, errors.New("client is nil")
 	}
 	s := &Service{client: client, BasePath: basePath}
+	s.Folders = NewFoldersService(s)
 	s.Liens = NewLiensService(s)
 	s.Operations = NewOperationsService(s)
 	s.Organizations = NewOrganizationsService(s)
@@ -71,6 +72,8 @@
 	BasePath  string // API endpoint base URL
 	UserAgent string // optional additional User-Agent fragment
 
+	Folders *FoldersService
+
 	Liens *LiensService
 
 	Operations *OperationsService
@@ -87,6 +90,15 @@
 	return googleapi.UserAgent + " " + s.UserAgent
 }
 
+func NewFoldersService(s *Service) *FoldersService {
+	rs := &FoldersService{s: s}
+	return rs
+}
+
+type FoldersService struct {
+	s *Service
+}
+
 func NewLiensService(s *Service) *LiensService {
 	rs := &LiensService{s: s}
 	return rs
@@ -152,9 +164,9 @@
 }
 
 // AuditConfig: Specifies the audit configuration for a service.
-// It consists of which permission types are logged, and what
-// identities, if
-// any, are exempted from logging.
+// The configuration determines which permission types are logged, and
+// what
+// identities, if any, are exempted from logging.
 // An AuditConifg must have one or more AuditLogConfigs.
 //
 // If there are AuditConfigs for both `allServices` and a specific
@@ -213,7 +225,8 @@
 
 	// Service: Specifies a service that will be enabled for audit
 	// logging.
-	// For example, `resourcemanager`, `storage`, `compute`.
+	// For example, `storage.googleapis.com`,
+	// `cloudsql.googleapis.com`.
 	// `allServices` is a special value that covers all services.
 	Service string `json:"service,omitempty"`
 
@@ -367,6 +380,225 @@
 	return gensupport.MarshalJSON(raw, s.ForceSendFields, s.NullFields)
 }
 
+// BooleanConstraint: A `Constraint` that is either enforced or
+// not.
+//
+// For example a constraint
+// `constraints/compute.disableSerialPortAccess`.
+// If it is enforced on a VM instance, serial port connections will not
+// be
+// opened to that instance.
+type BooleanConstraint struct {
+}
+
+// BooleanPolicy: Used in `policy_type` to specify how `boolean_policy`
+// will behave at this
+// resource.
+type BooleanPolicy struct {
+	// Enforced: 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`.
+	Enforced bool `json:"enforced,omitempty"`
+
+	// ForceSendFields is a list of field names (e.g. "Enforced") to
+	// unconditionally include in API requests. By default, fields with
+	// empty values are omitted from API requests. However, any non-pointer,
+	// non-interface field appearing in ForceSendFields will be sent to the
+	// server regardless of whether the field is empty or not. This may be
+	// used to include empty fields in Patch requests.
+	ForceSendFields []string `json:"-"`
+
+	// NullFields is a list of field names (e.g. "Enforced") to include in
+	// API requests with the JSON null value. By default, fields with empty
+	// values are omitted from API requests. However, any field with an
+	// empty value appearing in NullFields will be sent to the server as
+	// null. It is an error if a field in this list has a non-empty value.
+	// This may be used to include null fields in Patch requests.
+	NullFields []string `json:"-"`
+}
+
+func (s *BooleanPolicy) MarshalJSON() ([]byte, error) {
+	type noMethod BooleanPolicy
+	raw := noMethod(*s)
+	return gensupport.MarshalJSON(raw, s.ForceSendFields, s.NullFields)
+}
+
+// ClearOrgPolicyRequest: The request sent to the ClearOrgPolicy method.
+type ClearOrgPolicyRequest struct {
+	// Constraint: Name of the `Constraint` of the `Policy` to clear.
+	Constraint string `json:"constraint,omitempty"`
+
+	// Etag: The current version, for concurrency control. Not sending an
+	// `etag`
+	// will cause the `Policy` to be cleared blindly.
+	Etag string `json:"etag,omitempty"`
+
+	// ForceSendFields is a list of field names (e.g. "Constraint") to
+	// unconditionally include in API requests. By default, fields with
+	// empty values are omitted from API requests. However, any non-pointer,
+	// non-interface field appearing in ForceSendFields will be sent to the
+	// server regardless of whether the field is empty or not. This may be
+	// used to include empty fields in Patch requests.
+	ForceSendFields []string `json:"-"`
+
+	// NullFields is a list of field names (e.g. "Constraint") to include in
+	// API requests with the JSON null value. By default, fields with empty
+	// values are omitted from API requests. However, any field with an
+	// empty value appearing in NullFields will be sent to the server as
+	// null. It is an error if a field in this list has a non-empty value.
+	// This may be used to include null fields in Patch requests.
+	NullFields []string `json:"-"`
+}
+
+func (s *ClearOrgPolicyRequest) MarshalJSON() ([]byte, error) {
+	type noMethod ClearOrgPolicyRequest
+	raw := noMethod(*s)
+	return gensupport.MarshalJSON(raw, s.ForceSendFields, s.NullFields)
+}
+
+// Constraint: A `Constraint` describes a way in which a resource's
+// configuration can be
+// restricted. For example, it controls which cloud services can be
+// activated
+// across an organization, or whether a Compute Engine instance can
+// have
+// serial port connections established. `Constraints` can be configured
+// by the
+// organization's policy adminstrator to fit the needs of the
+// organzation by
+// setting Policies for `Constraints` at different locations in
+// the
+// organization's resource hierarchy. Policies are inherited down the
+// resource
+// hierarchy from higher levels, but can also be overridden. For details
+// about
+// the inheritance rules please read about
+// Policies.
+//
+// `Constraints` have a default behavior determined by the
+// `constraint_default`
+// field, which is the enforcement behavior that is used in the absence
+// of a
+// `Policy` being defined or inherited for the resource in question.
+type Constraint struct {
+	// BooleanConstraint: Defines this constraint as being a
+	// BooleanConstraint.
+	BooleanConstraint *BooleanConstraint `json:"booleanConstraint,omitempty"`
+
+	// ConstraintDefault: The evaluation behavior of this constraint in the
+	// absense of 'Policy'.
+	//
+	// Possible values:
+	//   "CONSTRAINT_DEFAULT_UNSPECIFIED" - This is only used for
+	// distinguishing unset values and should never be
+	// used.
+	//   "ALLOW" - Indicate that all values are allowed for list
+	// constraints.
+	// Indicate that enforcement is off for boolean constraints.
+	//   "DENY" - Indicate that all values are denied for list
+	// constraints.
+	// Indicate that enforcement is on for boolean constraints.
+	ConstraintDefault string `json:"constraintDefault,omitempty"`
+
+	// Description: Detailed description of what this `Constraint` controls
+	// as well as how and
+	// where it is enforced.
+	//
+	// Mutable.
+	Description string `json:"description,omitempty"`
+
+	// DisplayName: The human readable name.
+	//
+	// Mutable.
+	DisplayName string `json:"displayName,omitempty"`
+
+	// ListConstraint: Defines this constraint as being a ListConstraint.
+	ListConstraint *ListConstraint `json:"listConstraint,omitempty"`
+
+	// Name: Immutable value, required to globally be unique. For
+	// example,
+	// `constraints/serviceuser.services`
+	Name string `json:"name,omitempty"`
+
+	// Version: Version of the `Constraint`. Default version is 0;
+	Version int64 `json:"version,omitempty"`
+
+	// ForceSendFields is a list of field names (e.g. "BooleanConstraint")
+	// to unconditionally include in API requests. By default, fields with
+	// empty values are omitted from API requests. However, any non-pointer,
+	// non-interface field appearing in ForceSendFields will be sent to the
+	// server regardless of whether the field is empty or not. This may be
+	// used to include empty fields in Patch requests.
+	ForceSendFields []string `json:"-"`
+
+	// NullFields is a list of field names (e.g. "BooleanConstraint") to
+	// include in API requests with the JSON null value. By default, fields
+	// with empty values are omitted from API requests. However, any field
+	// with an empty value appearing in NullFields will be sent to the
+	// server as null. It is an error if a field in this list has a
+	// non-empty value. This may be used to include null fields in Patch
+	// requests.
+	NullFields []string `json:"-"`
+}
+
+func (s *Constraint) MarshalJSON() ([]byte, error) {
+	type noMethod Constraint
+	raw := noMethod(*s)
+	return gensupport.MarshalJSON(raw, s.ForceSendFields, s.NullFields)
+}
+
 // Empty: 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
@@ -450,8 +682,8 @@
 	// been deleted.
 	//   "CYCLE_INTRODUCED_ERROR" - The attempted action would introduce
 	// cycle in resource path.
-	//   "FOLDER_ALREADY_BEING_MOVED" - The attempted action would move a
-	// folder that is already being moved.
+	//   "FOLDER_BEING_MOVED" - The attempted action would move a folder
+	// that is already being moved.
 	//   "FOLDER_TO_DELETE_NON_EMPTY" - The folder the caller is trying to
 	// delete contains active resources.
 	ErrorMessageId string `json:"errorMessageId,omitempty"`
@@ -522,10 +754,68 @@
 	return gensupport.MarshalJSON(raw, s.ForceSendFields, s.NullFields)
 }
 
+// GetEffectiveOrgPolicyRequest: The request sent to the
+// GetEffectiveOrgPolicy method.
+type GetEffectiveOrgPolicyRequest struct {
+	// Constraint: The name of the `Constraint` to compute the effective
+	// `Policy`.
+	Constraint string `json:"constraint,omitempty"`
+
+	// ForceSendFields is a list of field names (e.g. "Constraint") to
+	// unconditionally include in API requests. By default, fields with
+	// empty values are omitted from API requests. However, any non-pointer,
+	// non-interface field appearing in ForceSendFields will be sent to the
+	// server regardless of whether the field is empty or not. This may be
+	// used to include empty fields in Patch requests.
+	ForceSendFields []string `json:"-"`
+
+	// NullFields is a list of field names (e.g. "Constraint") to include in
+	// API requests with the JSON null value. By default, fields with empty
+	// values are omitted from API requests. However, any field with an
+	// empty value appearing in NullFields will be sent to the server as
+	// null. It is an error if a field in this list has a non-empty value.
+	// This may be used to include null fields in Patch requests.
+	NullFields []string `json:"-"`
+}
+
+func (s *GetEffectiveOrgPolicyRequest) MarshalJSON() ([]byte, error) {
+	type noMethod GetEffectiveOrgPolicyRequest
+	raw := noMethod(*s)
+	return gensupport.MarshalJSON(raw, s.ForceSendFields, s.NullFields)
+}
+
 // GetIamPolicyRequest: Request message for `GetIamPolicy` method.
 type GetIamPolicyRequest struct {
 }
 
+// GetOrgPolicyRequest: The request sent to the GetOrgPolicy method.
+type GetOrgPolicyRequest struct {
+	// Constraint: Name of the `Constraint` to get the `Policy`.
+	Constraint string `json:"constraint,omitempty"`
+
+	// ForceSendFields is a list of field names (e.g. "Constraint") to
+	// unconditionally include in API requests. By default, fields with
+	// empty values are omitted from API requests. However, any non-pointer,
+	// non-interface field appearing in ForceSendFields will be sent to the
+	// server regardless of whether the field is empty or not. This may be
+	// used to include empty fields in Patch requests.
+	ForceSendFields []string `json:"-"`
+
+	// NullFields is a list of field names (e.g. "Constraint") to include in
+	// API requests with the JSON null value. By default, fields with empty
+	// values are omitted from API requests. However, any field with an
+	// empty value appearing in NullFields will be sent to the server as
+	// null. It is an error if a field in this list has a non-empty value.
+	// This may be used to include null fields in Patch requests.
+	NullFields []string `json:"-"`
+}
+
+func (s *GetOrgPolicyRequest) MarshalJSON() ([]byte, error) {
+	type noMethod GetOrgPolicyRequest
+	raw := noMethod(*s)
+	return gensupport.MarshalJSON(raw, s.ForceSendFields, s.NullFields)
+}
+
 // Lien: A Lien represents an encumbrance on the actions that can be
 // performed on a
 // resource.
@@ -601,6 +891,123 @@
 	return gensupport.MarshalJSON(raw, s.ForceSendFields, s.NullFields)
 }
 
+// ListAvailableOrgPolicyConstraintsRequest: The request sent to the
+// [ListAvailableOrgPolicyConstraints]
+// google.cloud.OrgPolicy.v1.ListAvai
+// lableOrgPolicyConstraints] method.
+type ListAvailableOrgPolicyConstraintsRequest struct {
+	// PageSize: Size of the pages to be returned. This is currently
+	// unsupported and will
+	// be ignored. The server may at any point start using this field to
+	// limit
+	// page size.
+	PageSize int64 `json:"pageSize,omitempty"`
+
+	// PageToken: Page token used to retrieve the next page. This is
+	// currently unsupported
+	// and will be ignored. The server may at any point start using this
+	// field.
+	PageToken string `json:"pageToken,omitempty"`
+
+	// ForceSendFields is a list of field names (e.g. "PageSize") to
+	// unconditionally include in API requests. By default, fields with
+	// empty values are omitted from API requests. However, any non-pointer,
+	// non-interface field appearing in ForceSendFields will be sent to the
+	// server regardless of whether the field is empty or not. This may be
+	// used to include empty fields in Patch requests.
+	ForceSendFields []string `json:"-"`
+
+	// NullFields is a list of field names (e.g. "PageSize") to include in
+	// API requests with the JSON null value. By default, fields with empty
+	// values are omitted from API requests. However, any field with an
+	// empty value appearing in NullFields will be sent to the server as
+	// null. It is an error if a field in this list has a non-empty value.
+	// This may be used to include null fields in Patch requests.
+	NullFields []string `json:"-"`
+}
+
+func (s *ListAvailableOrgPolicyConstraintsRequest) MarshalJSON() ([]byte, error) {
+	type noMethod ListAvailableOrgPolicyConstraintsRequest
+	raw := noMethod(*s)
+	return gensupport.MarshalJSON(raw, s.ForceSendFields, s.NullFields)
+}
+
+// ListAvailableOrgPolicyConstraintsResponse: The response returned from
+// the ListAvailableOrgPolicyConstraints method.
+// Returns all `Constraints` that could be set at this level of the
+// hierarchy
+// (contrast with the response from `ListPolicies`, which returns all
+// policies
+// which are set).
+type ListAvailableOrgPolicyConstraintsResponse struct {
+	// Constraints: The collection of constraints that are settable on the
+	// request resource.
+	Constraints []*Constraint `json:"constraints,omitempty"`
+
+	// NextPageToken: Page token used to retrieve the next page. This is
+	// currently not used.
+	NextPageToken string `json:"nextPageToken,omitempty"`
+
+	// ServerResponse contains the HTTP response code and headers from the
+	// server.
+	googleapi.ServerResponse `json:"-"`
+
+	// ForceSendFields is a list of field names (e.g. "Constraints") to
+	// unconditionally include in API requests. By default, fields with
+	// empty values are omitted from API requests. However, any non-pointer,
+	// non-interface field appearing in ForceSendFields will be sent to the
+	// server regardless of whether the field is empty or not. This may be
+	// used to include empty fields in Patch requests.
+	ForceSendFields []string `json:"-"`
+
+	// NullFields is a list of field names (e.g. "Constraints") to include
+	// in API requests with the JSON null value. By default, fields with
+	// empty values are omitted from API requests. However, any field with
+	// an empty value appearing in NullFields will be sent to the server as
+	// null. It is an error if a field in this list has a non-empty value.
+	// This may be used to include null fields in Patch requests.
+	NullFields []string `json:"-"`
+}
+
+func (s *ListAvailableOrgPolicyConstraintsResponse) MarshalJSON() ([]byte, error) {
+	type noMethod ListAvailableOrgPolicyConstraintsResponse
+	raw := noMethod(*s)
+	return gensupport.MarshalJSON(raw, s.ForceSendFields, s.NullFields)
+}
+
+// ListConstraint: A `Constraint` that allows or disallows a list of
+// string values, which are
+// configured by an Organization's policy administrator with a `Policy`.
+type ListConstraint struct {
+	// SuggestedValue: Optional. The Google Cloud Console will try to
+	// default to a configuration
+	// that matches the value specified in this `Constraint`.
+	SuggestedValue string `json:"suggestedValue,omitempty"`
+
+	// ForceSendFields is a list of field names (e.g. "SuggestedValue") to
+	// unconditionally include in API requests. By default, fields with
+	// empty values are omitted from API requests. However, any non-pointer,
+	// non-interface field appearing in ForceSendFields will be sent to the
+	// server regardless of whether the field is empty or not. This may be
+	// used to include empty fields in Patch requests.
+	ForceSendFields []string `json:"-"`
+
+	// NullFields is a list of field names (e.g. "SuggestedValue") to
+	// include in API requests with the JSON null value. By default, fields
+	// with empty values are omitted from API requests. However, any field
+	// with an empty value appearing in NullFields will be sent to the
+	// server as null. It is an error if a field in this list has a
+	// non-empty value. This may be used to include null fields in Patch
+	// requests.
+	NullFields []string `json:"-"`
+}
+
+func (s *ListConstraint) MarshalJSON() ([]byte, error) {
+	type noMethod ListConstraint
+	raw := noMethod(*s)
+	return gensupport.MarshalJSON(raw, s.ForceSendFields, s.NullFields)
+}
+
 // ListLiensResponse: The response message for Liens.ListLiens.
 type ListLiensResponse struct {
 	// Liens: A list of Liens.
@@ -638,6 +1045,264 @@
 	return gensupport.MarshalJSON(raw, s.ForceSendFields, s.NullFields)
 }
 
+// ListOrgPoliciesRequest: The request sent to the ListOrgPolicies
+// method.
+type ListOrgPoliciesRequest struct {
+	// PageSize: Size of the pages to be returned. This is currently
+	// unsupported and will
+	// be ignored. The server may at any point start using this field to
+	// limit
+	// page size.
+	PageSize int64 `json:"pageSize,omitempty"`
+
+	// PageToken: Page token used to retrieve the next page. This is
+	// currently unsupported
+	// and will be ignored. The server may at any point start using this
+	// field.
+	PageToken string `json:"pageToken,omitempty"`
+
+	// ForceSendFields is a list of field names (e.g. "PageSize") to
+	// unconditionally include in API requests. By default, fields with
+	// empty values are omitted from API requests. However, any non-pointer,
+	// non-interface field appearing in ForceSendFields will be sent to the
+	// server regardless of whether the field is empty or not. This may be
+	// used to include empty fields in Patch requests.
+	ForceSendFields []string `json:"-"`
+
+	// NullFields is a list of field names (e.g. "PageSize") to include in
+	// API requests with the JSON null value. By default, fields with empty
+	// values are omitted from API requests. However, any field with an
+	// empty value appearing in NullFields will be sent to the server as
+	// null. It is an error if a field in this list has a non-empty value.
+	// This may be used to include null fields in Patch requests.
+	NullFields []string `json:"-"`
+}
+
+func (s *ListOrgPoliciesRequest) MarshalJSON() ([]byte, error) {
+	type noMethod ListOrgPoliciesRequest
+	raw := noMethod(*s)
+	return gensupport.MarshalJSON(raw, s.ForceSendFields, s.NullFields)
+}
+
+// ListOrgPoliciesResponse: The response returned from the
+// ListOrgPolicies method. It will be empty
+// if no `Policies` are set on the resource.
+type ListOrgPoliciesResponse struct {
+	// NextPageToken: Page token used to retrieve the next page. This is
+	// currently not used, but
+	// the server may at any point start supplying a valid token.
+	NextPageToken string `json:"nextPageToken,omitempty"`
+
+	// Policies: The `Policies` that are set on the resource. It will be
+	// empty if no
+	// `Policies` are set.
+	Policies []*OrgPolicy `json:"policies,omitempty"`
+
+	// ServerResponse contains the HTTP response code and headers from the
+	// server.
+	googleapi.ServerResponse `json:"-"`
+
+	// ForceSendFields is a list of field names (e.g. "NextPageToken") to
+	// unconditionally include in API requests. By default, fields with
+	// empty values are omitted from API requests. However, any non-pointer,
+	// non-interface field appearing in ForceSendFields will be sent to the
+	// server regardless of whether the field is empty or not. This may be
+	// used to include empty fields in Patch requests.
+	ForceSendFields []string `json:"-"`
+
+	// NullFields is a list of field names (e.g. "NextPageToken") to include
+	// in API requests with the JSON null value. By default, fields with
+	// empty values are omitted from API requests. However, any field with
+	// an empty value appearing in NullFields will be sent to the server as
+	// null. It is an error if a field in this list has a non-empty value.
+	// This may be used to include null fields in Patch requests.
+	NullFields []string `json:"-"`
+}
+
+func (s *ListOrgPoliciesResponse) MarshalJSON() ([]byte, error) {
+	type noMethod ListOrgPoliciesResponse
+	raw := noMethod(*s)
+	return gensupport.MarshalJSON(raw, s.ForceSendFields, s.NullFields)
+}
+
+// ListPolicy: Used in `policy_type` to specify how `list_policy`
+// behaves at this
+// resource.
+//
+// A `ListPolicy` can define specific values that are allowed or denied
+// by
+// setting either the `allowed_values` or `denied_values` fields. It can
+// also
+// be used to allow or deny all values, by setting the `all_values`
+// field. If
+// `all_values` is `ALL_VALUES_UNSPECIFIED`, exactly one of
+// `allowed_values`
+// or `denied_values` must be set (attempting to set both or neither
+// will
+// result in a failed request). If `all_values` is set to either `ALLOW`
+// or
+// `DENY`, `allowed_values` and `denied_values` must be unset.
+type ListPolicy struct {
+	// AllValues: The policy all_values state.
+	//
+	// Possible values:
+	//   "ALL_VALUES_UNSPECIFIED" - Indicates that either allowed_values or
+	// denied_values must be set.
+	//   "ALLOW" - A policy with this set allows all values.
+	//   "DENY" - A policy with this set denies all values.
+	AllValues string `json:"allValues,omitempty"`
+
+	// AllowedValues: List of values allowed  at this resource. an only be
+	// set if no values are
+	// set for `denied_values` and `all_values` is set
+	// to
+	// `ALL_VALUES_UNSPECIFIED`.
+	AllowedValues []string `json:"allowedValues,omitempty"`
+
+	// DeniedValues: List of values denied at this resource. Can only be set
+	// if no values are
+	// set for `allowed_values` and `all_values` is set
+	// to
+	// `ALL_VALUES_UNSPECIFIED`.
+	DeniedValues []string `json:"deniedValues,omitempty"`
+
+	// InheritFromParent: Determines the inheritance behavior for this
+	// `Policy`.
+	//
+	// By default, a `ListPolicy` set at a resource supercedes 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:
+	//
+	// 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`.
+	InheritFromParent bool `json:"inheritFromParent,omitempty"`
+
+	// SuggestedValue: 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`.
+	SuggestedValue string `json:"suggestedValue,omitempty"`
+
+	// ForceSendFields is a list of field names (e.g. "AllValues") to
+	// unconditionally include in API requests. By default, fields with
+	// empty values are omitted from API requests. However, any non-pointer,
+	// non-interface field appearing in ForceSendFields will be sent to the
+	// server regardless of whether the field is empty or not. This may be
+	// used to include empty fields in Patch requests.
+	ForceSendFields []string `json:"-"`
+
+	// NullFields is a list of field names (e.g. "AllValues") to include in
+	// API requests with the JSON null value. By default, fields with empty
+	// values are omitted from API requests. However, any field with an
+	// empty value appearing in NullFields will be sent to the server as
+	// null. It is an error if a field in this list has a non-empty value.
+	// This may be used to include null fields in Patch requests.
+	NullFields []string `json:"-"`
+}
+
+func (s *ListPolicy) MarshalJSON() ([]byte, error) {
+	type noMethod ListPolicy
+	raw := noMethod(*s)
+	return gensupport.MarshalJSON(raw, s.ForceSendFields, s.NullFields)
+}
+
 // ListProjectsResponse: A page of the response received from
 // the
 // ListProjects
@@ -773,6 +1438,93 @@
 	return gensupport.MarshalJSON(raw, s.ForceSendFields, s.NullFields)
 }
 
+// OrgPolicy: Defines a Cloud Organization `Policy` which is used to
+// specify `Constraints`
+// for configurations of Cloud Platform resources.
+type OrgPolicy struct {
+	// BooleanPolicy: For boolean `Constraints`, whether to enforce the
+	// `Constraint` or not.
+	BooleanPolicy *BooleanPolicy `json:"booleanPolicy,omitempty"`
+
+	// Constraint: The name of the `Constraint` the `Policy` is configuring,
+	// for example,
+	// `constraints/serviceuser.services`.
+	//
+	// Immutable after creation.
+	Constraint string `json:"constraint,omitempty"`
+
+	// Etag: 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`.
+	Etag string `json:"etag,omitempty"`
+
+	// ListPolicy: List of values either allowed or disallowed.
+	ListPolicy *ListPolicy `json:"listPolicy,omitempty"`
+
+	// RestoreDefault: Restores the default behavior of the constraint;
+	// independent of
+	// `Constraint` type.
+	RestoreDefault *RestoreDefault `json:"restoreDefault,omitempty"`
+
+	// UpdateTime: 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.
+	UpdateTime string `json:"updateTime,omitempty"`
+
+	// Version: Version of the `Policy`. Default version is 0;
+	Version int64 `json:"version,omitempty"`
+
+	// ServerResponse contains the HTTP response code and headers from the
+	// server.
+	googleapi.ServerResponse `json:"-"`
+
+	// ForceSendFields is a list of field names (e.g. "BooleanPolicy") to
+	// unconditionally include in API requests. By default, fields with
+	// empty values are omitted from API requests. However, any non-pointer,
+	// non-interface field appearing in ForceSendFields will be sent to the
+	// server regardless of whether the field is empty or not. This may be
+	// used to include empty fields in Patch requests.
+	ForceSendFields []string `json:"-"`
+
+	// NullFields is a list of field names (e.g. "BooleanPolicy") to include
+	// in API requests with the JSON null value. By default, fields with
+	// empty values are omitted from API requests. However, any field with
+	// an empty value appearing in NullFields will be sent to the server as
+	// null. It is an error if a field in this list has a non-empty value.
+	// This may be used to include null fields in Patch requests.
+	NullFields []string `json:"-"`
+}
+
+func (s *OrgPolicy) MarshalJSON() ([]byte, error) {
+	type noMethod OrgPolicy
+	raw := noMethod(*s)
+	return gensupport.MarshalJSON(raw, s.ForceSendFields, s.NullFields)
+}
+
 // Organization: The root node in the resource hierarchy to which a
 // particular entity's
 // (e.g., company) resources belong.
@@ -1176,6 +1928,30 @@
 	return gensupport.MarshalJSON(raw, s.ForceSendFields, s.NullFields)
 }
 
+// RestoreDefault: 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.
+type RestoreDefault struct {
+}
+
 // SearchOrganizationsRequest: The request sent to the
 // `SearchOrganizations` method.
 type SearchOrganizationsRequest struct {
@@ -1293,9 +2069,9 @@
 
 	// UpdateMask: 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, a
-	// default
-	// mask is used:
+	// the fields in the mask will be modified. If no mask is provided,
+	// the
+	// following default mask is used:
 	// paths: "bindings, etag"
 	// This field is only used by Cloud IAM.
 	UpdateMask string `json:"updateMask,omitempty"`
@@ -1323,6 +2099,35 @@
 	return gensupport.MarshalJSON(raw, s.ForceSendFields, s.NullFields)
 }
 
+// SetOrgPolicyRequest: The request sent to the SetOrgPolicyRequest
+// method.
+type SetOrgPolicyRequest struct {
+	// Policy: `Policy` to set on the resource.
+	Policy *OrgPolicy `json:"policy,omitempty"`
+
+	// ForceSendFields is a list of field names (e.g. "Policy") to
+	// unconditionally include in API requests. By default, fields with
+	// empty values are omitted from API requests. However, any non-pointer,
+	// non-interface field appearing in ForceSendFields will be sent to the
+	// server regardless of whether the field is empty or not. This may be
+	// used to include empty fields in Patch requests.
+	ForceSendFields []string `json:"-"`
+
+	// NullFields is a list of field names (e.g. "Policy") to include in API
+	// requests with the JSON null value. By default, fields with empty
+	// values are omitted from API requests. However, any field with an
+	// empty value appearing in NullFields will be sent to the server as
+	// null. It is an error if a field in this list has a non-empty value.
+	// This may be used to include null fields in Patch requests.
+	NullFields []string `json:"-"`
+}
+
+func (s *SetOrgPolicyRequest) MarshalJSON() ([]byte, error) {
+	type noMethod SetOrgPolicyRequest
+	raw := noMethod(*s)
+	return gensupport.MarshalJSON(raw, s.ForceSendFields, s.NullFields)
+}
+
 // Status: The `Status` type defines a logical error model that is
 // suitable for different
 // programming environments, including REST APIs and RPC APIs. It is
@@ -1518,6 +2323,1446 @@
 type UndeleteProjectRequest struct {
 }
 
+// method id "cloudresourcemanager.folders.clearOrgPolicy":
+
+type FoldersClearOrgPolicyCall struct {
+	s                     *Service
+	resource              string
+	clearorgpolicyrequest *ClearOrgPolicyRequest
+	urlParams_            gensupport.URLParams
+	ctx_                  context.Context
+	header_               http.Header
+}
+
+// ClearOrgPolicy: Clears a `Policy` from a resource.
+func (r *FoldersService) ClearOrgPolicy(resource string, clearorgpolicyrequest *ClearOrgPolicyRequest) *FoldersClearOrgPolicyCall {
+	c := &FoldersClearOrgPolicyCall{s: r.s, urlParams_: make(gensupport.URLParams)}
+	c.resource = resource
+	c.clearorgpolicyrequest = clearorgpolicyrequest
+	return c
+}
+
+// Fields allows partial responses to be retrieved. See
+// https://developers.google.com/gdata/docs/2.0/basics#PartialResponse
+// for more information.
+func (c *FoldersClearOrgPolicyCall) Fields(s ...googleapi.Field) *FoldersClearOrgPolicyCall {
+	c.urlParams_.Set("fields", googleapi.CombineFields(s))
+	return c
+}
+
+// Context sets the context to be used in this call's Do method. Any
+// pending HTTP request will be aborted if the provided context is
+// canceled.
+func (c *FoldersClearOrgPolicyCall) Context(ctx context.Context) *FoldersClearOrgPolicyCall {
+	c.ctx_ = ctx
+	return c
+}
+
+// Header returns an http.Header that can be modified by the caller to
+// add HTTP headers to the request.
+func (c *FoldersClearOrgPolicyCall) Header() http.Header {
+	if c.header_ == nil {
+		c.header_ = make(http.Header)
+	}
+	return c.header_
+}
+
+func (c *FoldersClearOrgPolicyCall) doRequest(alt string) (*http.Response, error) {
+	reqHeaders := make(http.Header)
+	for k, v := range c.header_ {
+		reqHeaders[k] = v
+	}
+	reqHeaders.Set("User-Agent", c.s.userAgent())
+	var body io.Reader = nil
+	body, err := googleapi.WithoutDataWrapper.JSONReader(c.clearorgpolicyrequest)
+	if err != nil {
+		return nil, err
+	}
+	reqHeaders.Set("Content-Type", "application/json")
+	c.urlParams_.Set("alt", alt)
+	urls := googleapi.ResolveRelative(c.s.BasePath, "v1/{+resource}:clearOrgPolicy")
+	urls += "?" + c.urlParams_.Encode()
+	req, _ := http.NewRequest("POST", urls, body)
+	req.Header = reqHeaders
+	googleapi.Expand(req.URL, map[string]string{
+		"resource": c.resource,
+	})
+	return gensupport.SendRequest(c.ctx_, c.s.client, req)
+}
+
+// Do executes the "cloudresourcemanager.folders.clearOrgPolicy" call.
+// Exactly one of *Empty or error will be non-nil. Any non-2xx status
+// code is an error. Response headers are in either
+// *Empty.ServerResponse.Header or (if a response was returned at all)
+// in error.(*googleapi.Error).Header. Use googleapi.IsNotModified to
+// check whether the returned error was because http.StatusNotModified
+// was returned.
+func (c *FoldersClearOrgPolicyCall) Do(opts ...googleapi.CallOption) (*Empty, error) {
+	gensupport.SetOptions(c.urlParams_, opts...)
+	res, err := c.doRequest("json")
+	if res != nil && res.StatusCode == http.StatusNotModified {
+		if res.Body != nil {
+			res.Body.Close()
+		}
+		return nil, &googleapi.Error{
+			Code:   res.StatusCode,
+			Header: res.Header,
+		}
+	}
+	if err != nil {
+		return nil, err
+	}
+	defer googleapi.CloseBody(res)
+	if err := googleapi.CheckResponse(res); err != nil {
+		return nil, err
+	}
+	ret := &Empty{
+		ServerResponse: googleapi.ServerResponse{
+			Header:         res.Header,
+			HTTPStatusCode: res.StatusCode,
+		},
+	}
+	target := &ret
+	if err := json.NewDecoder(res.Body).Decode(target); err != nil {
+		return nil, err
+	}
+	return ret, nil
+	// {
+	//   "description": "Clears a `Policy` from a resource.",
+	//   "flatPath": "v1/folders/{foldersId}:clearOrgPolicy",
+	//   "httpMethod": "POST",
+	//   "id": "cloudresourcemanager.folders.clearOrgPolicy",
+	//   "parameterOrder": [
+	//     "resource"
+	//   ],
+	//   "parameters": {
+	//     "resource": {
+	//       "description": "Name of the resource for the `Policy` to clear.",
+	//       "location": "path",
+	//       "pattern": "^folders/[^/]+$",
+	//       "required": true,
+	//       "type": "string"
+	//     }
+	//   },
+	//   "path": "v1/{+resource}:clearOrgPolicy",
+	//   "request": {
+	//     "$ref": "ClearOrgPolicyRequest"
+	//   },
+	//   "response": {
+	//     "$ref": "Empty"
+	//   },
+	//   "scopes": [
+	//     "https://www.googleapis.com/auth/cloud-platform"
+	//   ]
+	// }
+
+}
+
+// method id "cloudresourcemanager.folders.clearOrgPolicyV1":
+
+type FoldersClearOrgPolicyV1Call struct {
+	s                     *Service
+	resource              string
+	clearorgpolicyrequest *ClearOrgPolicyRequest
+	urlParams_            gensupport.URLParams
+	ctx_                  context.Context
+	header_               http.Header
+}
+
+// ClearOrgPolicyV1: Clears a `Policy` from a resource.
+func (r *FoldersService) ClearOrgPolicyV1(resource string, clearorgpolicyrequest *ClearOrgPolicyRequest) *FoldersClearOrgPolicyV1Call {
+	c := &FoldersClearOrgPolicyV1Call{s: r.s, urlParams_: make(gensupport.URLParams)}
+	c.resource = resource
+	c.clearorgpolicyrequest = clearorgpolicyrequest
+	return c
+}
+
+// Fields allows partial responses to be retrieved. See
+// https://developers.google.com/gdata/docs/2.0/basics#PartialResponse
+// for more information.
+func (c *FoldersClearOrgPolicyV1Call) Fields(s ...googleapi.Field) *FoldersClearOrgPolicyV1Call {
+	c.urlParams_.Set("fields", googleapi.CombineFields(s))
+	return c
+}
+
+// Context sets the context to be used in this call's Do method. Any
+// pending HTTP request will be aborted if the provided context is
+// canceled.
+func (c *FoldersClearOrgPolicyV1Call) Context(ctx context.Context) *FoldersClearOrgPolicyV1Call {
+	c.ctx_ = ctx
+	return c
+}
+
+// Header returns an http.Header that can be modified by the caller to
+// add HTTP headers to the request.
+func (c *FoldersClearOrgPolicyV1Call) Header() http.Header {
+	if c.header_ == nil {
+		c.header_ = make(http.Header)
+	}
+	return c.header_
+}
+
+func (c *FoldersClearOrgPolicyV1Call) doRequest(alt string) (*http.Response, error) {
+	reqHeaders := make(http.Header)
+	for k, v := range c.header_ {
+		reqHeaders[k] = v
+	}
+	reqHeaders.Set("User-Agent", c.s.userAgent())
+	var body io.Reader = nil
+	body, err := googleapi.WithoutDataWrapper.JSONReader(c.clearorgpolicyrequest)
+	if err != nil {
+		return nil, err
+	}
+	reqHeaders.Set("Content-Type", "application/json")
+	c.urlParams_.Set("alt", alt)
+	urls := googleapi.ResolveRelative(c.s.BasePath, "v1/{+resource}:clearOrgPolicyV1")
+	urls += "?" + c.urlParams_.Encode()
+	req, _ := http.NewRequest("POST", urls, body)
+	req.Header = reqHeaders
+	googleapi.Expand(req.URL, map[string]string{
+		"resource": c.resource,
+	})
+	return gensupport.SendRequest(c.ctx_, c.s.client, req)
+}
+
+// Do executes the "cloudresourcemanager.folders.clearOrgPolicyV1" call.
+// Exactly one of *Empty or error will be non-nil. Any non-2xx status
+// code is an error. Response headers are in either
+// *Empty.ServerResponse.Header or (if a response was returned at all)
+// in error.(*googleapi.Error).Header. Use googleapi.IsNotModified to
+// check whether the returned error was because http.StatusNotModified
+// was returned.
+func (c *FoldersClearOrgPolicyV1Call) Do(opts ...googleapi.CallOption) (*Empty, error) {
+	gensupport.SetOptions(c.urlParams_, opts...)
+	res, err := c.doRequest("json")
+	if res != nil && res.StatusCode == http.StatusNotModified {
+		if res.Body != nil {
+			res.Body.Close()
+		}
+		return nil, &googleapi.Error{
+			Code:   res.StatusCode,
+			Header: res.Header,
+		}
+	}
+	if err != nil {
+		return nil, err
+	}
+	defer googleapi.CloseBody(res)
+	if err := googleapi.CheckResponse(res); err != nil {
+		return nil, err
+	}
+	ret := &Empty{
+		ServerResponse: googleapi.ServerResponse{
+			Header:         res.Header,
+			HTTPStatusCode: res.StatusCode,
+		},
+	}
+	target := &ret
+	if err := json.NewDecoder(res.Body).Decode(target); err != nil {
+		return nil, err
+	}
+	return ret, nil
+	// {
+	//   "description": "Clears a `Policy` from a resource.",
+	//   "flatPath": "v1/folders/{foldersId}:clearOrgPolicyV1",
+	//   "httpMethod": "POST",
+	//   "id": "cloudresourcemanager.folders.clearOrgPolicyV1",
+	//   "parameterOrder": [
+	//     "resource"
+	//   ],
+	//   "parameters": {
+	//     "resource": {
+	//       "description": "Name of the resource for the `Policy` to clear.",
+	//       "location": "path",
+	//       "pattern": "^folders/[^/]+$",
+	//       "required": true,
+	//       "type": "string"
+	//     }
+	//   },
+	//   "path": "v1/{+resource}:clearOrgPolicyV1",
+	//   "request": {
+	//     "$ref": "ClearOrgPolicyRequest"
+	//   },
+	//   "response": {
+	//     "$ref": "Empty"
+	//   },
+	//   "scopes": [
+	//     "https://www.googleapis.com/auth/cloud-platform"
+	//   ]
+	// }
+
+}
+
+// method id "cloudresourcemanager.folders.getEffectiveOrgPolicy":
+
+type FoldersGetEffectiveOrgPolicyCall struct {
+	s                            *Service
+	resource                     string
+	geteffectiveorgpolicyrequest *GetEffectiveOrgPolicyRequest
+	urlParams_                   gensupport.URLParams
+	ctx_                         context.Context
+	header_                      http.Header
+}
+
+// GetEffectiveOrgPolicy: Gets the effective `Policy` on a resource.
+// This is the result of merging
+// `Policies` in the resource hierarchy. The returned `Policy` will not
+// have
+// an `etag`set because it is a computed `Policy` across multiple
+// resources.
+func (r *FoldersService) GetEffectiveOrgPolicy(resource string, geteffectiveorgpolicyrequest *GetEffectiveOrgPolicyRequest) *FoldersGetEffectiveOrgPolicyCall {
+	c := &FoldersGetEffectiveOrgPolicyCall{s: r.s, urlParams_: make(gensupport.URLParams)}
+	c.resource = resource
+	c.geteffectiveorgpolicyrequest = geteffectiveorgpolicyrequest
+	return c
+}
+
+// Fields allows partial responses to be retrieved. See
+// https://developers.google.com/gdata/docs/2.0/basics#PartialResponse
+// for more information.
+func (c *FoldersGetEffectiveOrgPolicyCall) Fields(s ...googleapi.Field) *FoldersGetEffectiveOrgPolicyCall {
+	c.urlParams_.Set("fields", googleapi.CombineFields(s))
+	return c
+}
+
+// Context sets the context to be used in this call's Do method. Any
+// pending HTTP request will be aborted if the provided context is
+// canceled.
+func (c *FoldersGetEffectiveOrgPolicyCall) Context(ctx context.Context) *FoldersGetEffectiveOrgPolicyCall {
+	c.ctx_ = ctx
+	return c
+}
+
+// Header returns an http.Header that can be modified by the caller to
+// add HTTP headers to the request.
+func (c *FoldersGetEffectiveOrgPolicyCall) Header() http.Header {
+	if c.header_ == nil {
+		c.header_ = make(http.Header)
+	}
+	return c.header_
+}
+
+func (c *FoldersGetEffectiveOrgPolicyCall) doRequest(alt string) (*http.Response, error) {
+	reqHeaders := make(http.Header)
+	for k, v := range c.header_ {
+		reqHeaders[k] = v
+	}
+	reqHeaders.Set("User-Agent", c.s.userAgent())
+	var body io.Reader = nil
+	body, err := googleapi.WithoutDataWrapper.JSONReader(c.geteffectiveorgpolicyrequest)
+	if err != nil {
+		return nil, err
+	}
+	reqHeaders.Set("Content-Type", "application/json")
+	c.urlParams_.Set("alt", alt)
+	urls := googleapi.ResolveRelative(c.s.BasePath, "v1/{+resource}:getEffectiveOrgPolicy")
+	urls += "?" + c.urlParams_.Encode()
+	req, _ := http.NewRequest("POST", urls, body)
+	req.Header = reqHeaders
+	googleapi.Expand(req.URL, map[string]string{
+		"resource": c.resource,
+	})
+	return gensupport.SendRequest(c.ctx_, c.s.client, req)
+}
+
+// Do executes the "cloudresourcemanager.folders.getEffectiveOrgPolicy" call.
+// Exactly one of *OrgPolicy or error will be non-nil. Any non-2xx
+// status code is an error. Response headers are in either
+// *OrgPolicy.ServerResponse.Header or (if a response was returned at
+// all) in error.(*googleapi.Error).Header. Use googleapi.IsNotModified
+// to check whether the returned error was because
+// http.StatusNotModified was returned.
+func (c *FoldersGetEffectiveOrgPolicyCall) Do(opts ...googleapi.CallOption) (*OrgPolicy, error) {
+	gensupport.SetOptions(c.urlParams_, opts...)
+	res, err := c.doRequest("json")
+	if res != nil && res.StatusCode == http.StatusNotModified {
+		if res.Body != nil {
+			res.Body.Close()
+		}
+		return nil, &googleapi.Error{
+			Code:   res.StatusCode,
+			Header: res.Header,
+		}
+	}
+	if err != nil {
+		return nil, err
+	}
+	defer googleapi.CloseBody(res)
+	if err := googleapi.CheckResponse(res); err != nil {
+		return nil, err
+	}
+	ret := &OrgPolicy{
+		ServerResponse: googleapi.ServerResponse{
+			Header:         res.Header,
+			HTTPStatusCode: res.StatusCode,
+		},
+	}
+	target := &ret
+	if err := json.NewDecoder(res.Body).Decode(target); err != nil {
+		return nil, err
+	}
+	return ret, nil
+	// {
+	//   "description": "Gets the effective `Policy` on a resource. This is the result of merging\n`Policies` in the resource hierarchy. The returned `Policy` will not have\nan `etag`set because it is a computed `Policy` across multiple resources.",
+	//   "flatPath": "v1/folders/{foldersId}:getEffectiveOrgPolicy",
+	//   "httpMethod": "POST",
+	//   "id": "cloudresourcemanager.folders.getEffectiveOrgPolicy",
+	//   "parameterOrder": [
+	//     "resource"
+	//   ],
+	//   "parameters": {
+	//     "resource": {
+	//       "description": "The name of the resource to start computing the effective `Policy`.",
+	//       "location": "path",
+	//       "pattern": "^folders/[^/]+$",
+	//       "required": true,
+	//       "type": "string"
+	//     }
+	//   },
+	//   "path": "v1/{+resource}:getEffectiveOrgPolicy",
+	//   "request": {
+	//     "$ref": "GetEffectiveOrgPolicyRequest"
+	//   },
+	//   "response": {
+	//     "$ref": "OrgPolicy"
+	//   },
+	//   "scopes": [
+	//     "https://www.googleapis.com/auth/cloud-platform",
+	//     "https://www.googleapis.com/auth/cloud-platform.read-only"
+	//   ]
+	// }
+
+}
+
+// method id "cloudresourcemanager.folders.getEffectiveOrgPolicyV1":
+
+type FoldersGetEffectiveOrgPolicyV1Call struct {
+	s                            *Service
+	resource                     string
+	geteffectiveorgpolicyrequest *GetEffectiveOrgPolicyRequest
+	urlParams_                   gensupport.URLParams
+	ctx_                         context.Context
+	header_                      http.Header
+}
+
+// GetEffectiveOrgPolicyV1: Gets the effective `Policy` on a resource.
+// This is the result of merging
+// `Policies` in the resource hierarchy. The returned `Policy` will not
+// have
+// an `etag`set because it is a computed `Policy` across multiple
+// resources.
+func (r *FoldersService) GetEffectiveOrgPolicyV1(resource string, geteffectiveorgpolicyrequest *GetEffectiveOrgPolicyRequest) *FoldersGetEffectiveOrgPolicyV1Call {
+	c := &FoldersGetEffectiveOrgPolicyV1Call{s: r.s, urlParams_: make(gensupport.URLParams)}
+	c.resource = resource
+	c.geteffectiveorgpolicyrequest = geteffectiveorgpolicyrequest
+	return c
+}
+
+// Fields allows partial responses to be retrieved. See
+// https://developers.google.com/gdata/docs/2.0/basics#PartialResponse
+// for more information.
+func (c *FoldersGetEffectiveOrgPolicyV1Call) Fields(s ...googleapi.Field) *FoldersGetEffectiveOrgPolicyV1Call {
+	c.urlParams_.Set("fields", googleapi.CombineFields(s))
+	return c
+}
+
+// Context sets the context to be used in this call's Do method. Any
+// pending HTTP request will be aborted if the provided context is
+// canceled.
+func (c *FoldersGetEffectiveOrgPolicyV1Call) Context(ctx context.Context) *FoldersGetEffectiveOrgPolicyV1Call {
+	c.ctx_ = ctx
+	return c
+}
+
+// Header returns an http.Header that can be modified by the caller to
+// add HTTP headers to the request.
+func (c *FoldersGetEffectiveOrgPolicyV1Call) Header() http.Header {
+	if c.header_ == nil {
+		c.header_ = make(http.Header)
+	}
+	return c.header_
+}
+
+func (c *FoldersGetEffectiveOrgPolicyV1Call) doRequest(alt string) (*http.Response, error) {
+	reqHeaders := make(http.Header)
+	for k, v := range c.header_ {
+		reqHeaders[k] = v
+	}
+	reqHeaders.Set("User-Agent", c.s.userAgent())
+	var body io.Reader = nil
+	body, err := googleapi.WithoutDataWrapper.JSONReader(c.geteffectiveorgpolicyrequest)
+	if err != nil {
+		return nil, err
+	}
+	reqHeaders.Set("Content-Type", "application/json")
+	c.urlParams_.Set("alt", alt)
+	urls := googleapi.ResolveRelative(c.s.BasePath, "v1/{+resource}:getEffectiveOrgPolicyV1")
+	urls += "?" + c.urlParams_.Encode()
+	req, _ := http.NewRequest("POST", urls, body)
+	req.Header = reqHeaders
+	googleapi.Expand(req.URL, map[string]string{
+		"resource": c.resource,
+	})
+	return gensupport.SendRequest(c.ctx_, c.s.client, req)
+}
+
+// Do executes the "cloudresourcemanager.folders.getEffectiveOrgPolicyV1" call.
+// Exactly one of *OrgPolicy or error will be non-nil. Any non-2xx
+// status code is an error. Response headers are in either
+// *OrgPolicy.ServerResponse.Header or (if a response was returned at
+// all) in error.(*googleapi.Error).Header. Use googleapi.IsNotModified
+// to check whether the returned error was because
+// http.StatusNotModified was returned.
+func (c *FoldersGetEffectiveOrgPolicyV1Call) Do(opts ...googleapi.CallOption) (*OrgPolicy, error) {
+	gensupport.SetOptions(c.urlParams_, opts...)
+	res, err := c.doRequest("json")
+	if res != nil && res.StatusCode == http.StatusNotModified {
+		if res.Body != nil {
+			res.Body.Close()
+		}
+		return nil, &googleapi.Error{
+			Code:   res.StatusCode,
+			Header: res.Header,
+		}
+	}
+	if err != nil {
+		return nil, err
+	}
+	defer googleapi.CloseBody(res)
+	if err := googleapi.CheckResponse(res); err != nil {
+		return nil, err
+	}
+	ret := &OrgPolicy{
+		ServerResponse: googleapi.ServerResponse{
+			Header:         res.Header,
+			HTTPStatusCode: res.StatusCode,
+		},
+	}
+	target := &ret
+	if err := json.NewDecoder(res.Body).Decode(target); err != nil {
+		return nil, err
+	}
+	return ret, nil
+	// {
+	//   "description": "Gets the effective `Policy` on a resource. This is the result of merging\n`Policies` in the resource hierarchy. The returned `Policy` will not have\nan `etag`set because it is a computed `Policy` across multiple resources.",
+	//   "flatPath": "v1/folders/{foldersId}:getEffectiveOrgPolicyV1",
+	//   "httpMethod": "POST",
+	//   "id": "cloudresourcemanager.folders.getEffectiveOrgPolicyV1",
+	//   "parameterOrder": [
+	//     "resource"
+	//   ],
+	//   "parameters": {
+	//     "resource": {
+	//       "description": "The name of the resource to start computing the effective `Policy`.",
+	//       "location": "path",
+	//       "pattern": "^folders/[^/]+$",
+	//       "required": true,
+	//       "type": "string"
+	//     }
+	//   },
+	//   "path": "v1/{+resource}:getEffectiveOrgPolicyV1",
+	//   "request": {
+	//     "$ref": "GetEffectiveOrgPolicyRequest"
+	//   },
+	//   "response": {
+	//     "$ref": "OrgPolicy"
+	//   },
+	//   "scopes": [
+	//     "https://www.googleapis.com/auth/cloud-platform",
+	//     "https://www.googleapis.com/auth/cloud-platform.read-only"
+	//   ]
+	// }
+
+}
+
+// method id "cloudresourcemanager.folders.getOrgPolicy":
+
+type FoldersGetOrgPolicyCall struct {
+	s                   *Service
+	resource            string
+	getorgpolicyrequest *GetOrgPolicyRequest
+	urlParams_          gensupport.URLParams
+	ctx_                context.Context
+	header_             http.Header
+}
+
+// GetOrgPolicy: Gets a `Policy` on a resource.
+//
+// If no `Policy` is set on the resource, a `Policy` is returned with
+// default
+// values including `POLICY_TYPE_NOT_SET` for the `policy_type oneof`.
+// The
+// `etag` value can be used with `SetOrgPolicy()` to create or update
+// a
+// `Policy` during read-modify-write.
+func (r *FoldersService) GetOrgPolicy(resource string, getorgpolicyrequest *GetOrgPolicyRequest) *FoldersGetOrgPolicyCall {
+	c := &FoldersGetOrgPolicyCall{s: r.s, urlParams_: make(gensupport.URLParams)}
+	c.resource = resource
+	c.getorgpolicyrequest = getorgpolicyrequest
+	return c
+}
+
+// Fields allows partial responses to be retrieved. See
+// https://developers.google.com/gdata/docs/2.0/basics#PartialResponse
+// for more information.
+func (c *FoldersGetOrgPolicyCall) Fields(s ...googleapi.Field) *FoldersGetOrgPolicyCall {
+	c.urlParams_.Set("fields", googleapi.CombineFields(s))
+	return c
+}
+
+// Context sets the context to be used in this call's Do method. Any
+// pending HTTP request will be aborted if the provided context is
+// canceled.
+func (c *FoldersGetOrgPolicyCall) Context(ctx context.Context) *FoldersGetOrgPolicyCall {
+	c.ctx_ = ctx
+	return c
+}
+
+// Header returns an http.Header that can be modified by the caller to
+// add HTTP headers to the request.
+func (c *FoldersGetOrgPolicyCall) Header() http.Header {
+	if c.header_ == nil {
+		c.header_ = make(http.Header)
+	}
+	return c.header_
+}
+
+func (c *FoldersGetOrgPolicyCall) doRequest(alt string) (*http.Response, error) {
+	reqHeaders := make(http.Header)
+	for k, v := range c.header_ {
+		reqHeaders[k] = v
+	}
+	reqHeaders.Set("User-Agent", c.s.userAgent())
+	var body io.Reader = nil
+	body, err := googleapi.WithoutDataWrapper.JSONReader(c.getorgpolicyrequest)
+	if err != nil {
+		return nil, err
+	}
+	reqHeaders.Set("Content-Type", "application/json")
+	c.urlParams_.Set("alt", alt)
+	urls := googleapi.ResolveRelative(c.s.BasePath, "v1/{+resource}:getOrgPolicy")
+	urls += "?" + c.urlParams_.Encode()
+	req, _ := http.NewRequest("POST", urls, body)
+	req.Header = reqHeaders
+	googleapi.Expand(req.URL, map[string]string{
+		"resource": c.resource,
+	})
+	return gensupport.SendRequest(c.ctx_, c.s.client, req)
+}
+
+// Do executes the "cloudresourcemanager.folders.getOrgPolicy" call.
+// Exactly one of *OrgPolicy or error will be non-nil. Any non-2xx
+// status code is an error. Response headers are in either
+// *OrgPolicy.ServerResponse.Header or (if a response was returned at
+// all) in error.(*googleapi.Error).Header. Use googleapi.IsNotModified
+// to check whether the returned error was because
+// http.StatusNotModified was returned.
+func (c *FoldersGetOrgPolicyCall) Do(opts ...googleapi.CallOption) (*OrgPolicy, error) {
+	gensupport.SetOptions(c.urlParams_, opts...)
+	res, err := c.doRequest("json")
+	if res != nil && res.StatusCode == http.StatusNotModified {
+		if res.Body != nil {
+			res.Body.Close()
+		}
+		return nil, &googleapi.Error{
+			Code:   res.StatusCode,
+			Header: res.Header,
+		}
+	}
+	if err != nil {
+		return nil, err
+	}
+	defer googleapi.CloseBody(res)
+	if err := googleapi.CheckResponse(res); err != nil {
+		return nil, err
+	}
+	ret := &OrgPolicy{
+		ServerResponse: googleapi.ServerResponse{
+			Header:         res.Header,
+			HTTPStatusCode: res.StatusCode,
+		},
+	}
+	target := &ret
+	if err := json.NewDecoder(res.Body).Decode(target); err != nil {
+		return nil, err
+	}
+	return ret, nil
+	// {
+	//   "description": "Gets a `Policy` on a resource.\n\nIf no `Policy` is set on the resource, a `Policy` is returned with default\nvalues including `POLICY_TYPE_NOT_SET` for the `policy_type oneof`. The\n`etag` value can be used with `SetOrgPolicy()` to create or update a\n`Policy` during read-modify-write.",
+	//   "flatPath": "v1/folders/{foldersId}:getOrgPolicy",
+	//   "httpMethod": "POST",
+	//   "id": "cloudresourcemanager.folders.getOrgPolicy",
+	//   "parameterOrder": [
+	//     "resource"
+	//   ],
+	//   "parameters": {
+	//     "resource": {
+	//       "description": "Name of the resource the `Policy` is set on.",
+	//       "location": "path",
+	//       "pattern": "^folders/[^/]+$",
+	//       "required": true,
+	//       "type": "string"
+	//     }
+	//   },
+	//   "path": "v1/{+resource}:getOrgPolicy",
+	//   "request": {
+	//     "$ref": "GetOrgPolicyRequest"
+	//   },
+	//   "response": {
+	//     "$ref": "OrgPolicy"
+	//   },
+	//   "scopes": [
+	//     "https://www.googleapis.com/auth/cloud-platform",
+	//     "https://www.googleapis.com/auth/cloud-platform.read-only"
+	//   ]
+	// }
+
+}
+
+// method id "cloudresourcemanager.folders.getOrgPolicyV1":
+
+type FoldersGetOrgPolicyV1Call struct {
+	s                   *Service
+	resource            string
+	getorgpolicyrequest *GetOrgPolicyRequest
+	urlParams_          gensupport.URLParams
+	ctx_                context.Context
+	header_             http.Header
+}
+
+// GetOrgPolicyV1: Gets a `Policy` on a resource.
+//
+// If no `Policy` is set on the resource, a `Policy` is returned with
+// default
+// values including `POLICY_TYPE_NOT_SET` for the `policy_type oneof`.
+// The
+// `etag` value can be used with `SetOrgPolicy()` to create or update
+// a
+// `Policy` during read-modify-write.
+func (r *FoldersService) GetOrgPolicyV1(resource string, getorgpolicyrequest *GetOrgPolicyRequest) *FoldersGetOrgPolicyV1Call {
+	c := &FoldersGetOrgPolicyV1Call{s: r.s, urlParams_: make(gensupport.URLParams)}
+	c.resource = resource
+	c.getorgpolicyrequest = getorgpolicyrequest
+	return c
+}
+
+// Fields allows partial responses to be retrieved. See
+// https://developers.google.com/gdata/docs/2.0/basics#PartialResponse
+// for more information.
+func (c *FoldersGetOrgPolicyV1Call) Fields(s ...googleapi.Field) *FoldersGetOrgPolicyV1Call {
+	c.urlParams_.Set("fields", googleapi.CombineFields(s))
+	return c
+}
+
+// Context sets the context to be used in this call's Do method. Any
+// pending HTTP request will be aborted if the provided context is
+// canceled.
+func (c *FoldersGetOrgPolicyV1Call) Context(ctx context.Context) *FoldersGetOrgPolicyV1Call {
+	c.ctx_ = ctx
+	return c
+}
+
+// Header returns an http.Header that can be modified by the caller to
+// add HTTP headers to the request.
+func (c *FoldersGetOrgPolicyV1Call) Header() http.Header {
+	if c.header_ == nil {
+		c.header_ = make(http.Header)
+	}
+	return c.header_
+}
+
+func (c *FoldersGetOrgPolicyV1Call) doRequest(alt string) (*http.Response, error) {
+	reqHeaders := make(http.Header)
+	for k, v := range c.header_ {
+		reqHeaders[k] = v
+	}
+	reqHeaders.Set("User-Agent", c.s.userAgent())
+	var body io.Reader = nil
+	body, err := googleapi.WithoutDataWrapper.JSONReader(c.getorgpolicyrequest)
+	if err != nil {
+		return nil, err
+	}
+	reqHeaders.Set("Content-Type", "application/json")
+	c.urlParams_.Set("alt", alt)
+	urls := googleapi.ResolveRelative(c.s.BasePath, "v1/{+resource}:getOrgPolicyV1")
+	urls += "?" + c.urlParams_.Encode()
+	req, _ := http.NewRequest("POST", urls, body)
+	req.Header = reqHeaders
+	googleapi.Expand(req.URL, map[string]string{
+		"resource": c.resource,
+	})
+	return gensupport.SendRequest(c.ctx_, c.s.client, req)
+}
+
+// Do executes the "cloudresourcemanager.folders.getOrgPolicyV1" call.
+// Exactly one of *OrgPolicy or error will be non-nil. Any non-2xx
+// status code is an error. Response headers are in either
+// *OrgPolicy.ServerResponse.Header or (if a response was returned at
+// all) in error.(*googleapi.Error).Header. Use googleapi.IsNotModified
+// to check whether the returned error was because
+// http.StatusNotModified was returned.
+func (c *FoldersGetOrgPolicyV1Call) Do(opts ...googleapi.CallOption) (*OrgPolicy, error) {
+	gensupport.SetOptions(c.urlParams_, opts...)
+	res, err := c.doRequest("json")
+	if res != nil && res.StatusCode == http.StatusNotModified {
+		if res.Body != nil {
+			res.Body.Close()
+		}
+		return nil, &googleapi.Error{
+			Code:   res.StatusCode,
+			Header: res.Header,
+		}
+	}
+	if err != nil {
+		return nil, err
+	}
+	defer googleapi.CloseBody(res)
+	if err := googleapi.CheckResponse(res); err != nil {
+		return nil, err
+	}
+	ret := &OrgPolicy{
+		ServerResponse: googleapi.ServerResponse{
+			Header:         res.Header,
+			HTTPStatusCode: res.StatusCode,
+		},
+	}
+	target := &ret
+	if err := json.NewDecoder(res.Body).Decode(target); err != nil {
+		return nil, err
+	}
+	return ret, nil
+	// {
+	//   "description": "Gets a `Policy` on a resource.\n\nIf no `Policy` is set on the resource, a `Policy` is returned with default\nvalues including `POLICY_TYPE_NOT_SET` for the `policy_type oneof`. The\n`etag` value can be used with `SetOrgPolicy()` to create or update a\n`Policy` during read-modify-write.",
+	//   "flatPath": "v1/folders/{foldersId}:getOrgPolicyV1",
+	//   "httpMethod": "POST",
+	//   "id": "cloudresourcemanager.folders.getOrgPolicyV1",
+	//   "parameterOrder": [
+	//     "resource"
+	//   ],
+	//   "parameters": {
+	//     "resource": {
+	//       "description": "Name of the resource the `Policy` is set on.",
+	//       "location": "path",
+	//       "pattern": "^folders/[^/]+$",
+	//       "required": true,
+	//       "type": "string"
+	//     }
+	//   },
+	//   "path": "v1/{+resource}:getOrgPolicyV1",
+	//   "request": {
+	//     "$ref": "GetOrgPolicyRequest"
+	//   },
+	//   "response": {
+	//     "$ref": "OrgPolicy"
+	//   },
+	//   "scopes": [
+	//     "https://www.googleapis.com/auth/cloud-platform",
+	//     "https://www.googleapis.com/auth/cloud-platform.read-only"
+	//   ]
+	// }
+
+}
+
+// method id "cloudresourcemanager.folders.listAvailableOrgPolicyConstraints":
+
+type FoldersListAvailableOrgPolicyConstraintsCall struct {
+	s                                        *Service
+	resource                                 string
+	listavailableorgpolicyconstraintsrequest *ListAvailableOrgPolicyConstraintsRequest
+	urlParams_                               gensupport.URLParams
+	ctx_                                     context.Context
+	header_                                  http.Header
+}
+
+// ListAvailableOrgPolicyConstraints: Lists `Constraints` that could be
+// applied on the specified resource.
+func (r *FoldersService) ListAvailableOrgPolicyConstraints(resource string, listavailableorgpolicyconstraintsrequest *ListAvailableOrgPolicyConstraintsRequest) *FoldersListAvailableOrgPolicyConstraintsCall {
+	c := &FoldersListAvailableOrgPolicyConstraintsCall{s: r.s, urlParams_: make(gensupport.URLParams)}
+	c.resource = resource
+	c.listavailableorgpolicyconstraintsrequest = listavailableorgpolicyconstraintsrequest
+	return c
+}
+
+// Fields allows partial responses to be retrieved. See
+// https://developers.google.com/gdata/docs/2.0/basics#PartialResponse
+// for more information.
+func (c *FoldersListAvailableOrgPolicyConstraintsCall) Fields(s ...googleapi.Field) *FoldersListAvailableOrgPolicyConstraintsCall {
+	c.urlParams_.Set("fields", googleapi.CombineFields(s))
+	return c
+}
+
+// Context sets the context to be used in this call's Do method. Any
+// pending HTTP request will be aborted if the provided context is
+// canceled.
+func (c *FoldersListAvailableOrgPolicyConstraintsCall) Context(ctx context.Context) *FoldersListAvailableOrgPolicyConstraintsCall {
+	c.ctx_ = ctx
+	return c
+}
+
+// Header returns an http.Header that can be modified by the caller to
+// add HTTP headers to the request.
+func (c *FoldersListAvailableOrgPolicyConstraintsCall) Header() http.Header {
+	if c.header_ == nil {
+		c.header_ = make(http.Header)
+	}
+	return c.header_
+}
+
+func (c *FoldersListAvailableOrgPolicyConstraintsCall) doRequest(alt string) (*http.Response, error) {
+	reqHeaders := make(http.Header)
+	for k, v := range c.header_ {
+		reqHeaders[k] = v
+	}
+	reqHeaders.Set("User-Agent", c.s.userAgent())
+	var body io.Reader = nil
+	body, err := googleapi.WithoutDataWrapper.JSONReader(c.listavailableorgpolicyconstraintsrequest)
+	if err != nil {
+		return nil, err
+	}
+	reqHeaders.Set("Content-Type", "application/json")
+	c.urlParams_.Set("alt", alt)
+	urls := googleapi.ResolveRelative(c.s.BasePath, "v1/{+resource}:listAvailableOrgPolicyConstraints")
+	urls += "?" + c.urlParams_.Encode()
+	req, _ := http.NewRequest("POST", urls, body)
+	req.Header = reqHeaders
+	googleapi.Expand(req.URL, map[string]string{
+		"resource": c.resource,
+	})
+	return gensupport.SendRequest(c.ctx_, c.s.client, req)
+}
+
+// Do executes the "cloudresourcemanager.folders.listAvailableOrgPolicyConstraints" call.
+// Exactly one of *ListAvailableOrgPolicyConstraintsResponse or error
+// will be non-nil. Any non-2xx status code is an error. Response
+// headers are in either
+// *ListAvailableOrgPolicyConstraintsResponse.ServerResponse.Header or
+// (if a response was returned at all) in
+// error.(*googleapi.Error).Header. Use googleapi.IsNotModified to check
+// whether the returned error was because http.StatusNotModified was
+// returned.
+func (c *FoldersListAvailableOrgPolicyConstraintsCall) Do(opts ...googleapi.CallOption) (*ListAvailableOrgPolicyConstraintsResponse, error) {
+	gensupport.SetOptions(c.urlParams_, opts...)
+	res, err := c.doRequest("json")
+	if res != nil && res.StatusCode == http.StatusNotModified {
+		if res.Body != nil {
+			res.Body.Close()
+		}
+		return nil, &googleapi.Error{
+			Code:   res.StatusCode,
+			Header: res.Header,
+		}
+	}
+	if err != nil {
+		return nil, err
+	}
+	defer googleapi.CloseBody(res)
+	if err := googleapi.CheckResponse(res); err != nil {
+		return nil, err
+	}
+	ret := &ListAvailableOrgPolicyConstraintsResponse{
+		ServerResponse: googleapi.ServerResponse{
+			Header:         res.Header,
+			HTTPStatusCode: res.StatusCode,
+		},
+	}
+	target := &ret
+	if err := json.NewDecoder(res.Body).Decode(target); err != nil {
+		return nil, err
+	}
+	return ret, nil
+	// {
+	//   "description": "Lists `Constraints` that could be applied on the specified resource.",
+	//   "flatPath": "v1/folders/{foldersId}:listAvailableOrgPolicyConstraints",
+	//   "httpMethod": "POST",
+	//   "id": "cloudresourcemanager.folders.listAvailableOrgPolicyConstraints",
+	//   "parameterOrder": [
+	//     "resource"
+	//   ],
+	//   "parameters": {
+	//     "resource": {
+	//       "description": "Name of the resource to list `Constraints` for.",
+	//       "location": "path",
+	//       "pattern": "^folders/[^/]+$",
+	//       "required": true,
+	//       "type": "string"
+	//     }
+	//   },
+	//   "path": "v1/{+resource}:listAvailableOrgPolicyConstraints",
+	//   "request": {
+	//     "$ref": "ListAvailableOrgPolicyConstraintsRequest"
+	//   },
+	//   "response": {
+	//     "$ref": "ListAvailableOrgPolicyConstraintsResponse"
+	//   },
+	//   "scopes": [
+	//     "https://www.googleapis.com/auth/cloud-platform",
+	//     "https://www.googleapis.com/auth/cloud-platform.read-only"
+	//   ]
+	// }
+
+}
+
+// Pages invokes f for each page of results.
+// A non-nil error returned from f will halt the iteration.
+// The provided context supersedes any context provided to the Context method.
+func (c *FoldersListAvailableOrgPolicyConstraintsCall) Pages(ctx context.Context, f func(*ListAvailableOrgPolicyConstraintsResponse) error) error {
+	c.ctx_ = ctx
+	defer func(pt string) { c.listavailableorgpolicyconstraintsrequest.PageToken = pt }(c.listavailableorgpolicyconstraintsrequest.PageToken) // reset paging to original point
+	for {
+		x, err := c.Do()
+		if err != nil {
+			return err
+		}
+		if err := f(x); err != nil {
+			return err
+		}
+		if x.NextPageToken == "" {
+			return nil
+		}
+		c.listavailableorgpolicyconstraintsrequest.PageToken = x.NextPageToken
+	}
+}
+
+// method id "cloudresourcemanager.folders.listOrgPolicies":
+
+type FoldersListOrgPoliciesCall struct {
+	s                      *Service
+	resource               string
+	listorgpoliciesrequest *ListOrgPoliciesRequest
+	urlParams_             gensupport.URLParams
+	ctx_                   context.Context
+	header_                http.Header
+}
+
+// ListOrgPolicies: Lists all the `Policies` set for a particular
+// resource.
+func (r *FoldersService) ListOrgPolicies(resource string, listorgpoliciesrequest *ListOrgPoliciesRequest) *FoldersListOrgPoliciesCall {
+	c := &FoldersListOrgPoliciesCall{s: r.s, urlParams_: make(gensupport.URLParams)}
+	c.resource = resource
+	c.listorgpoliciesrequest = listorgpoliciesrequest
+	return c
+}
+
+// Fields allows partial responses to be retrieved. See
+// https://developers.google.com/gdata/docs/2.0/basics#PartialResponse
+// for more information.
+func (c *FoldersListOrgPoliciesCall) Fields(s ...googleapi.Field) *FoldersListOrgPoliciesCall {
+	c.urlParams_.Set("fields", googleapi.CombineFields(s))
+	return c
+}
+
+// Context sets the context to be used in this call's Do method. Any
+// pending HTTP request will be aborted if the provided context is
+// canceled.
+func (c *FoldersListOrgPoliciesCall) Context(ctx context.Context) *FoldersListOrgPoliciesCall {
+	c.ctx_ = ctx
+	return c
+}
+
+// Header returns an http.Header that can be modified by the caller to
+// add HTTP headers to the request.
+func (c *FoldersListOrgPoliciesCall) Header() http.Header {
+	if c.header_ == nil {
+		c.header_ = make(http.Header)
+	}
+	return c.header_
+}
+
+func (c *FoldersListOrgPoliciesCall) doRequest(alt string) (*http.Response, error) {
+	reqHeaders := make(http.Header)
+	for k, v := range c.header_ {
+		reqHeaders[k] = v
+	}
+	reqHeaders.Set("User-Agent", c.s.userAgent())
+	var body io.Reader = nil
+	body, err := googleapi.WithoutDataWrapper.JSONReader(c.listorgpoliciesrequest)
+	if err != nil {
+		return nil, err
+	}
+	reqHeaders.Set("Content-Type", "application/json")
+	c.urlParams_.Set("alt", alt)
+	urls := googleapi.ResolveRelative(c.s.BasePath, "v1/{+resource}:listOrgPolicies")
+	urls += "?" + c.urlParams_.Encode()
+	req, _ := http.NewRequest("POST", urls, body)
+	req.Header = reqHeaders
+	googleapi.Expand(req.URL, map[string]string{
+		"resource": c.resource,
+	})
+	return gensupport.SendRequest(c.ctx_, c.s.client, req)
+}
+
+// Do executes the "cloudresourcemanager.folders.listOrgPolicies" call.
+// Exactly one of *ListOrgPoliciesResponse or error will be non-nil. Any
+// non-2xx status code is an error. Response headers are in either
+// *ListOrgPoliciesResponse.ServerResponse.Header or (if a response was
+// returned at all) in error.(*googleapi.Error).Header. Use
+// googleapi.IsNotModified to check whether the returned error was
+// because http.StatusNotModified was returned.
+func (c *FoldersListOrgPoliciesCall) Do(opts ...googleapi.CallOption) (*ListOrgPoliciesResponse, error) {
+	gensupport.SetOptions(c.urlParams_, opts...)
+	res, err := c.doRequest("json")
+	if res != nil && res.StatusCode == http.StatusNotModified {
+		if res.Body != nil {
+			res.Body.Close()
+		}
+		return nil, &googleapi.Error{
+			Code:   res.StatusCode,
+			Header: res.Header,
+		}
+	}
+	if err != nil {
+		return nil, err
+	}
+	defer googleapi.CloseBody(res)
+	if err := googleapi.CheckResponse(res); err != nil {
+		return nil, err
+	}
+	ret := &ListOrgPoliciesResponse{
+		ServerResponse: googleapi.ServerResponse{
+			Header:         res.Header,
+			HTTPStatusCode: res.StatusCode,
+		},
+	}
+	target := &ret
+	if err := json.NewDecoder(res.Body).Decode(target); err != nil {
+		return nil, err
+	}
+	return ret, nil
+	// {
+	//   "description": "Lists all the `Policies` set for a particular resource.",
+	//   "flatPath": "v1/folders/{foldersId}:listOrgPolicies",
+	//   "httpMethod": "POST",
+	//   "id": "cloudresourcemanager.folders.listOrgPolicies",
+	//   "parameterOrder": [
+	//     "resource"
+	//   ],
+	//   "parameters": {
+	//     "resource": {
+	//       "description": "Name of the resource to list Policies for.",
+	//       "location": "path",
+	//       "pattern": "^folders/[^/]+$",
+	//       "required": true,
+	//       "type": "string"
+	//     }
+	//   },
+	//   "path": "v1/{+resource}:listOrgPolicies",
+	//   "request": {
+	//     "$ref": "ListOrgPoliciesRequest"
+	//   },
+	//   "response": {
+	//     "$ref": "ListOrgPoliciesResponse"
+	//   },
+	//   "scopes": [
+	//     "https://www.googleapis.com/auth/cloud-platform",
+	//     "https://www.googleapis.com/auth/cloud-platform.read-only"
+	//   ]
+	// }
+
+}
+
+// Pages invokes f for each page of results.
+// A non-nil error returned from f will halt the iteration.
+// The provided context supersedes any context provided to the Context method.
+func (c *FoldersListOrgPoliciesCall) Pages(ctx context.Context, f func(*ListOrgPoliciesResponse) error) error {
+	c.ctx_ = ctx
+	defer func(pt string) { c.listorgpoliciesrequest.PageToken = pt }(c.listorgpoliciesrequest.PageToken) // reset paging to original point
+	for {
+		x, err := c.Do()
+		if err != nil {
+			return err
+		}
+		if err := f(x); err != nil {
+			return err
+		}
+		if x.NextPageToken == "" {
+			return nil
+		}
+		c.listorgpoliciesrequest.PageToken = x.NextPageToken
+	}
+}
+
+// method id "cloudresourcemanager.folders.setOrgPolicy":
+
+type FoldersSetOrgPolicyCall struct {
+	s                   *Service
+	resource            string
+	setorgpolicyrequest *SetOrgPolicyRequest
+	urlParams_          gensupport.URLParams
+	ctx_                context.Context
+	header_             http.Header
+}
+
+// SetOrgPolicy: Updates the specified `Policy` on the resource. Creates
+// a new `Policy` for
+// that `Constraint` on the resource if one does not exist.
+//
+// Not supplying an `etag` on the request `Policy` results in an
+// unconditional
+// write of the `Policy`.
+func (r *FoldersService) SetOrgPolicy(resource string, setorgpolicyrequest *SetOrgPolicyRequest) *FoldersSetOrgPolicyCall {
+	c := &FoldersSetOrgPolicyCall{s: r.s, urlParams_: make(gensupport.URLParams)}
+	c.resource = resource
+	c.setorgpolicyrequest = setorgpolicyrequest
+	return c
+}
+
+// Fields allows partial responses to be retrieved. See
+// https://developers.google.com/gdata/docs/2.0/basics#PartialResponse
+// for more information.
+func (c *FoldersSetOrgPolicyCall) Fields(s ...googleapi.Field) *FoldersSetOrgPolicyCall {
+	c.urlParams_.Set("fields", googleapi.CombineFields(s))
+	return c
+}
+
+// Context sets the context to be used in this call's Do method. Any
+// pending HTTP request will be aborted if the provided context is
+// canceled.
+func (c *FoldersSetOrgPolicyCall) Context(ctx context.Context) *FoldersSetOrgPolicyCall {
+	c.ctx_ = ctx
+	return c
+}
+
+// Header returns an http.Header that can be modified by the caller to
+// add HTTP headers to the request.
+func (c *FoldersSetOrgPolicyCall) Header() http.Header {
+	if c.header_ == nil {
+		c.header_ = make(http.Header)
+	}
+	return c.header_
+}
+
+func (c *FoldersSetOrgPolicyCall) doRequest(alt string) (*http.Response, error) {
+	reqHeaders := make(http.Header)
+	for k, v := range c.header_ {
+		reqHeaders[k] = v
+	}
+	reqHeaders.Set("User-Agent", c.s.userAgent())
+	var body io.Reader = nil
+	body, err := googleapi.WithoutDataWrapper.JSONReader(c.setorgpolicyrequest)
+	if err != nil {
+		return nil, err
+	}
+	reqHeaders.Set("Content-Type", "application/json")
+	c.urlParams_.Set("alt", alt)
+	urls := googleapi.ResolveRelative(c.s.BasePath, "v1/{+resource}:setOrgPolicy")
+	urls += "?" + c.urlParams_.Encode()
+	req, _ := http.NewRequest("POST", urls, body)
+	req.Header = reqHeaders
+	googleapi.Expand(req.URL, map[string]string{
+		"resource": c.resource,
+	})
+	return gensupport.SendRequest(c.ctx_, c.s.client, req)
+}
+
+// Do executes the "cloudresourcemanager.folders.setOrgPolicy" call.
+// Exactly one of *OrgPolicy or error will be non-nil. Any non-2xx
+// status code is an error. Response headers are in either
+// *OrgPolicy.ServerResponse.Header or (if a response was returned at
+// all) in error.(*googleapi.Error).Header. Use googleapi.IsNotModified
+// to check whether the returned error was because
+// http.StatusNotModified was returned.
+func (c *FoldersSetOrgPolicyCall) Do(opts ...googleapi.CallOption) (*OrgPolicy, error) {
+	gensupport.SetOptions(c.urlParams_, opts...)
+	res, err := c.doRequest("json")
+	if res != nil && res.StatusCode == http.StatusNotModified {
+		if res.Body != nil {
+			res.Body.Close()
+		}
+		return nil, &googleapi.Error{
+			Code:   res.StatusCode,
+			Header: res.Header,
+		}
+	}
+	if err != nil {
+		return nil, err
+	}
+	defer googleapi.CloseBody(res)
+	if err := googleapi.CheckResponse(res); err != nil {
+		return nil, err
+	}
+	ret := &OrgPolicy{
+		ServerResponse: googleapi.ServerResponse{
+			Header:         res.Header,
+			HTTPStatusCode: res.StatusCode,
+		},
+	}
+	target := &ret
+	if err := json.NewDecoder(res.Body).Decode(target); err != nil {
+		return nil, err
+	}
+	return ret, nil
+	// {
+	//   "description": "Updates the specified `Policy` on the resource. Creates a new `Policy` for\nthat `Constraint` on the resource if one does not exist.\n\nNot supplying an `etag` on the request `Policy` results in an unconditional\nwrite of the `Policy`.",
+	//   "flatPath": "v1/folders/{foldersId}:setOrgPolicy",
+	//   "httpMethod": "POST",
+	//   "id": "cloudresourcemanager.folders.setOrgPolicy",
+	//   "parameterOrder": [
+	//     "resource"
+	//   ],
+	//   "parameters": {
+	//     "resource": {
+	//       "description": "Resource name of the resource to attach the `Policy`.",
+	//       "location": "path",
+	//       "pattern": "^folders/[^/]+$",
+	//       "required": true,
+	//       "type": "string"
+	//     }
+	//   },
+	//   "path": "v1/{+resource}:setOrgPolicy",
+	//   "request": {
+	//     "$ref": "SetOrgPolicyRequest"
+	//   },
+	//   "response": {
+	//     "$ref": "OrgPolicy"
+	//   },
+	//   "scopes": [
+	//     "https://www.googleapis.com/auth/cloud-platform"
+	//   ]
+	// }
+
+}
+
+// method id "cloudresourcemanager.folders.setOrgPolicyV1":
+
+type FoldersSetOrgPolicyV1Call struct {
+	s                   *Service
+	resource            string
+	setorgpolicyrequest *SetOrgPolicyRequest
+	urlParams_          gensupport.URLParams
+	ctx_                context.Context
+	header_             http.Header
+}
+
+// SetOrgPolicyV1: Updates the specified `Policy` on the resource.
+// Creates a new `Policy` for
+// that `Constraint` on the resource if one does not exist.
+//
+// Not supplying an `etag` on the request `Policy` results in an
+// unconditional
+// write of the `Policy`.
+func (r *FoldersService) SetOrgPolicyV1(resource string, setorgpolicyrequest *SetOrgPolicyRequest) *FoldersSetOrgPolicyV1Call {
+	c := &FoldersSetOrgPolicyV1Call{s: r.s, urlParams_: make(gensupport.URLParams)}
+	c.resource = resource
+	c.setorgpolicyrequest = setorgpolicyrequest
+	return c
+}
+
+// Fields allows partial responses to be retrieved. See
+// https://developers.google.com/gdata/docs/2.0/basics#PartialResponse
+// for more information.
+func (c *FoldersSetOrgPolicyV1Call) Fields(s ...googleapi.Field) *FoldersSetOrgPolicyV1Call {
+	c.urlParams_.Set("fields", googleapi.CombineFields(s))
+	return c
+}
+
+// Context sets the context to be used in this call's Do method. Any
+// pending HTTP request will be aborted if the provided context is
+// canceled.
+func (c *FoldersSetOrgPolicyV1Call) Context(ctx context.Context) *FoldersSetOrgPolicyV1Call {
+	c.ctx_ = ctx
+	return c
+}
+
+// Header returns an http.Header that can be modified by the caller to
+// add HTTP headers to the request.
+func (c *FoldersSetOrgPolicyV1Call) Header() http.Header {
+	if c.header_ == nil {
+		c.header_ = make(http.Header)
+	}
+	return c.header_
+}
+
+func (c *FoldersSetOrgPolicyV1Call) doRequest(alt string) (*http.Response, error) {
+	reqHeaders := make(http.Header)
+	for k, v := range c.header_ {
+		reqHeaders[k] = v
+	}
+	reqHeaders.Set("User-Agent", c.s.userAgent())
+	var body io.Reader = nil
+	body, err := googleapi.WithoutDataWrapper.JSONReader(c.setorgpolicyrequest)
+	if err != nil {
+		return nil, err
+	}
+	reqHeaders.Set("Content-Type", "application/json")
+	c.urlParams_.Set("alt", alt)
+	urls := googleapi.ResolveRelative(c.s.BasePath, "v1/{+resource}:setOrgPolicyV1")
+	urls += "?" + c.urlParams_.Encode()
+	req, _ := http.NewRequest("POST", urls, body)
+	req.Header = reqHeaders
+	googleapi.Expand(req.URL, map[string]string{
+		"resource": c.resource,
+	})
+	return gensupport.SendRequest(c.ctx_, c.s.client, req)
+}
+
+// Do executes the "cloudresourcemanager.folders.setOrgPolicyV1" call.
+// Exactly one of *OrgPolicy or error will be non-nil. Any non-2xx
+// status code is an error. Response headers are in either
+// *OrgPolicy.ServerResponse.Header or (if a response was returned at
+// all) in error.(*googleapi.Error).Header. Use googleapi.IsNotModified
+// to check whether the returned error was because
+// http.StatusNotModified was returned.
+func (c *FoldersSetOrgPolicyV1Call) Do(opts ...googleapi.CallOption) (*OrgPolicy, error) {
+	gensupport.SetOptions(c.urlParams_, opts...)
+	res, err := c.doRequest("json")
+	if res != nil && res.StatusCode == http.StatusNotModified {
+		if res.Body != nil {
+			res.Body.Close()
+		}
+		return nil, &googleapi.Error{
+			Code:   res.StatusCode,
+			Header: res.Header,
+		}
+	}
+	if err != nil {
+		return nil, err
+	}
+	defer googleapi.CloseBody(res)
+	if err := googleapi.CheckResponse(res); err != nil {
+		return nil, err
+	}
+	ret := &OrgPolicy{
+		ServerResponse: googleapi.ServerResponse{
+			Header:         res.Header,
+			HTTPStatusCode: res.StatusCode,
+		},
+	}
+	target := &ret
+	if err := json.NewDecoder(res.Body).Decode(target); err != nil {
+		return nil, err
+	}
+	return ret, nil
+	// {
+	//   "description": "Updates the specified `Policy` on the resource. Creates a new `Policy` for\nthat `Constraint` on the resource if one does not exist.\n\nNot supplying an `etag` on the request `Policy` results in an unconditional\nwrite of the `Policy`.",
+	//   "flatPath": "v1/folders/{foldersId}:setOrgPolicyV1",
+	//   "httpMethod": "POST",
+	//   "id": "cloudresourcemanager.folders.setOrgPolicyV1",
+	//   "parameterOrder": [
+	//     "resource"
+	//   ],
+	//   "parameters": {
+	//     "resource": {
+	//       "description": "Resource name of the resource to attach the `Policy`.",
+	//       "location": "path",
+	//       "pattern": "^folders/[^/]+$",
+	//       "required": true,
+	//       "type": "string"
+	//     }
+	//   },
+	//   "path": "v1/{+resource}:setOrgPolicyV1",
+	//   "request": {
+	//     "$ref": "SetOrgPolicyRequest"
+	//   },
+	//   "response": {
+	//     "$ref": "OrgPolicy"
+	//   },
+	//   "scopes": [
+	//     "https://www.googleapis.com/auth/cloud-platform"
+	//   ]
+	// }
+
+}
+
 // method id "cloudresourcemanager.liens.create":
 
 type LiensCreateCall struct {
@@ -2117,6 +4362,276 @@
 
 }
 
+// method id "cloudresourcemanager.organizations.clearOrgPolicy":
+
+type OrganizationsClearOrgPolicyCall struct {
+	s                     *Service
+	resource              string
+	clearorgpolicyrequest *ClearOrgPolicyRequest
+	urlParams_            gensupport.URLParams
+	ctx_                  context.Context
+	header_               http.Header
+}
+
+// ClearOrgPolicy: Clears a `Policy` from a resource.
+func (r *OrganizationsService) ClearOrgPolicy(resource string, clearorgpolicyrequest *ClearOrgPolicyRequest) *OrganizationsClearOrgPolicyCall {
+	c := &OrganizationsClearOrgPolicyCall{s: r.s, urlParams_: make(gensupport.URLParams)}
+	c.resource = resource
+	c.clearorgpolicyrequest = clearorgpolicyrequest
+	return c
+}
+
+// Fields allows partial responses to be retrieved. See
+// https://developers.google.com/gdata/docs/2.0/basics#PartialResponse
+// for more information.
+func (c *OrganizationsClearOrgPolicyCall) Fields(s ...googleapi.Field) *OrganizationsClearOrgPolicyCall {
+	c.urlParams_.Set("fields", googleapi.CombineFields(s))
+	return c
+}
+
+// Context sets the context to be used in this call's Do method. Any
+// pending HTTP request will be aborted if the provided context is
+// canceled.
+func (c *OrganizationsClearOrgPolicyCall) Context(ctx context.Context) *OrganizationsClearOrgPolicyCall {
+	c.ctx_ = ctx
+	return c
+}
+
+// Header returns an http.Header that can be modified by the caller to
+// add HTTP headers to the request.
+func (c *OrganizationsClearOrgPolicyCall) Header() http.Header {
+	if c.header_ == nil {
+		c.header_ = make(http.Header)
+	}
+	return c.header_
+}
+
+func (c *OrganizationsClearOrgPolicyCall) doRequest(alt string) (*http.Response, error) {
+	reqHeaders := make(http.Header)
+	for k, v := range c.header_ {
+		reqHeaders[k] = v
+	}
+	reqHeaders.Set("User-Agent", c.s.userAgent())
+	var body io.Reader = nil
+	body, err := googleapi.WithoutDataWrapper.JSONReader(c.clearorgpolicyrequest)
+	if err != nil {
+		return nil, err
+	}
+	reqHeaders.Set("Content-Type", "application/json")
+	c.urlParams_.Set("alt", alt)
+	urls := googleapi.ResolveRelative(c.s.BasePath, "v1/{+resource}:clearOrgPolicy")
+	urls += "?" + c.urlParams_.Encode()
+	req, _ := http.NewRequest("POST", urls, body)
+	req.Header = reqHeaders
+	googleapi.Expand(req.URL, map[string]string{
+		"resource": c.resource,
+	})
+	return gensupport.SendRequest(c.ctx_, c.s.client, req)
+}
+
+// Do executes the "cloudresourcemanager.organizations.clearOrgPolicy" call.
+// Exactly one of *Empty or error will be non-nil. Any non-2xx status
+// code is an error. Response headers are in either
+// *Empty.ServerResponse.Header or (if a response was returned at all)
+// in error.(*googleapi.Error).Header. Use googleapi.IsNotModified to
+// check whether the returned error was because http.StatusNotModified
+// was returned.
+func (c *OrganizationsClearOrgPolicyCall) Do(opts ...googleapi.CallOption) (*Empty, error) {
+	gensupport.SetOptions(c.urlParams_, opts...)
+	res, err := c.doRequest("json")
+	if res != nil && res.StatusCode == http.StatusNotModified {
+		if res.Body != nil {
+			res.Body.Close()
+		}
+		return nil, &googleapi.Error{
+			Code:   res.StatusCode,
+			Header: res.Header,
+		}
+	}
+	if err != nil {
+		return nil, err
+	}
+	defer googleapi.CloseBody(res)
+	if err := googleapi.CheckResponse(res); err != nil {
+		return nil, err
+	}
+	ret := &Empty{
+		ServerResponse: googleapi.ServerResponse{
+			Header:         res.Header,
+			HTTPStatusCode: res.StatusCode,
+		},
+	}
+	target := &ret
+	if err := json.NewDecoder(res.Body).Decode(target); err != nil {
+		return nil, err
+	}
+	return ret, nil
+	// {
+	//   "description": "Clears a `Policy` from a resource.",
+	//   "flatPath": "v1/organizations/{organizationsId}:clearOrgPolicy",
+	//   "httpMethod": "POST",
+	//   "id": "cloudresourcemanager.organizations.clearOrgPolicy",
+	//   "parameterOrder": [
+	//     "resource"
+	//   ],
+	//   "parameters": {
+	//     "resource": {
+	//       "description": "Name of the resource for the `Policy` to clear.",
+	//       "location": "path",
+	//       "pattern": "^organizations/[^/]+$",
+	//       "required": true,
+	//       "type": "string"
+	//     }
+	//   },
+	//   "path": "v1/{+resource}:clearOrgPolicy",
+	//   "request": {
+	//     "$ref": "ClearOrgPolicyRequest"
+	//   },
+	//   "response": {
+	//     "$ref": "Empty"
+	//   },
+	//   "scopes": [
+	//     "https://www.googleapis.com/auth/cloud-platform"
+	//   ]
+	// }
+
+}
+
+// method id "cloudresourcemanager.organizations.clearOrgPolicyV1":
+
+type OrganizationsClearOrgPolicyV1Call struct {
+	s                     *Service
+	resource              string
+	clearorgpolicyrequest *ClearOrgPolicyRequest
+	urlParams_            gensupport.URLParams
+	ctx_                  context.Context
+	header_               http.Header
+}
+
+// ClearOrgPolicyV1: Clears a `Policy` from a resource.
+func (r *OrganizationsService) ClearOrgPolicyV1(resource string, clearorgpolicyrequest *ClearOrgPolicyRequest) *OrganizationsClearOrgPolicyV1Call {
+	c := &OrganizationsClearOrgPolicyV1Call{s: r.s, urlParams_: make(gensupport.URLParams)}
+	c.resource = resource
+	c.clearorgpolicyrequest = clearorgpolicyrequest
+	return c
+}
+
+// Fields allows partial responses to be retrieved. See
+// https://developers.google.com/gdata/docs/2.0/basics#PartialResponse
+// for more information.
+func (c *OrganizationsClearOrgPolicyV1Call) Fields(s ...googleapi.Field) *OrganizationsClearOrgPolicyV1Call {
+	c.urlParams_.Set("fields", googleapi.CombineFields(s))
+	return c
+}
+
+// Context sets the context to be used in this call's Do method. Any
+// pending HTTP request will be aborted if the provided context is
+// canceled.
+func (c *OrganizationsClearOrgPolicyV1Call) Context(ctx context.Context) *OrganizationsClearOrgPolicyV1Call {
+	c.ctx_ = ctx
+	return c
+}
+
+// Header returns an http.Header that can be modified by the caller to
+// add HTTP headers to the request.
+func (c *OrganizationsClearOrgPolicyV1Call) Header() http.Header {
+	if c.header_ == nil {
+		c.header_ = make(http.Header)
+	}
+	return c.header_
+}
+
+func (c *OrganizationsClearOrgPolicyV1Call) doRequest(alt string) (*http.Response, error) {
+	reqHeaders := make(http.Header)
+	for k, v := range c.header_ {
+		reqHeaders[k] = v
+	}
+	reqHeaders.Set("User-Agent", c.s.userAgent())
+	var body io.Reader = nil
+	body, err := googleapi.WithoutDataWrapper.JSONReader(c.clearorgpolicyrequest)
+	if err != nil {
+		return nil, err
+	}
+	reqHeaders.Set("Content-Type", "application/json")
+	c.urlParams_.Set("alt", alt)
+	urls := googleapi.ResolveRelative(c.s.BasePath, "v1/{+resource}:clearOrgPolicyV1")
+	urls += "?" + c.urlParams_.Encode()
+	req, _ := http.NewRequest("POST", urls, body)
+	req.Header = reqHeaders
+	googleapi.Expand(req.URL, map[string]string{
+		"resource": c.resource,
+	})
+	return gensupport.SendRequest(c.ctx_, c.s.client, req)
+}
+
+// Do executes the "cloudresourcemanager.organizations.clearOrgPolicyV1" call.
+// Exactly one of *Empty or error will be non-nil. Any non-2xx status
+// code is an error. Response headers are in either
+// *Empty.ServerResponse.Header or (if a response was returned at all)
+// in error.(*googleapi.Error).Header. Use googleapi.IsNotModified to
+// check whether the returned error was because http.StatusNotModified
+// was returned.
+func (c *OrganizationsClearOrgPolicyV1Call) Do(opts ...googleapi.CallOption) (*Empty, error) {
+	gensupport.SetOptions(c.urlParams_, opts...)
+	res, err := c.doRequest("json")
+	if res != nil && res.StatusCode == http.StatusNotModified {
+		if res.Body != nil {
+			res.Body.Close()
+		}
+		return nil, &googleapi.Error{
+			Code:   res.StatusCode,
+			Header: res.Header,
+		}
+	}
+	if err != nil {
+		return nil, err
+	}
+	defer googleapi.CloseBody(res)
+	if err := googleapi.CheckResponse(res); err != nil {
+		return nil, err
+	}
+	ret := &Empty{
+		ServerResponse: googleapi.ServerResponse{
+			Header:         res.Header,
+			HTTPStatusCode: res.StatusCode,
+		},
+	}
+	target := &ret
+	if err := json.NewDecoder(res.Body).Decode(target); err != nil {
+		return nil, err
+	}
+	return ret, nil
+	// {
+	//   "description": "Clears a `Policy` from a resource.",
+	//   "flatPath": "v1/organizations/{organizationsId}:clearOrgPolicyV1",
+	//   "httpMethod": "POST",
+	//   "id": "cloudresourcemanager.organizations.clearOrgPolicyV1",
+	//   "parameterOrder": [
+	//     "resource"
+	//   ],
+	//   "parameters": {
+	//     "resource": {
+	//       "description": "Name of the resource for the `Policy` to clear.",
+	//       "location": "path",
+	//       "pattern": "^organizations/[^/]+$",
+	//       "required": true,
+	//       "type": "string"
+	//     }
+	//   },
+	//   "path": "v1/{+resource}:clearOrgPolicyV1",
+	//   "request": {
+	//     "$ref": "ClearOrgPolicyRequest"
+	//   },
+	//   "response": {
+	//     "$ref": "Empty"
+	//   },
+	//   "scopes": [
+	//     "https://www.googleapis.com/auth/cloud-platform"
+	//   ]
+	// }
+
+}
+
 // method id "cloudresourcemanager.organizations.get":
 
 type OrganizationsGetCall struct {
@@ -2258,6 +4773,288 @@
 
 }
 
+// method id "cloudresourcemanager.organizations.getEffectiveOrgPolicy":
+
+type OrganizationsGetEffectiveOrgPolicyCall struct {
+	s                            *Service
+	resource                     string
+	geteffectiveorgpolicyrequest *GetEffectiveOrgPolicyRequest
+	urlParams_                   gensupport.URLParams
+	ctx_                         context.Context
+	header_                      http.Header
+}
+
+// GetEffectiveOrgPolicy: Gets the effective `Policy` on a resource.
+// This is the result of merging
+// `Policies` in the resource hierarchy. The returned `Policy` will not
+// have
+// an `etag`set because it is a computed `Policy` across multiple
+// resources.
+func (r *OrganizationsService) GetEffectiveOrgPolicy(resource string, geteffectiveorgpolicyrequest *GetEffectiveOrgPolicyRequest) *OrganizationsGetEffectiveOrgPolicyCall {
+	c := &OrganizationsGetEffectiveOrgPolicyCall{s: r.s, urlParams_: make(gensupport.URLParams)}
+	c.resource = resource
+	c.geteffectiveorgpolicyrequest = geteffectiveorgpolicyrequest
+	return c
+}
+
+// Fields allows partial responses to be retrieved. See
+// https://developers.google.com/gdata/docs/2.0/basics#PartialResponse
+// for more information.
+func (c *OrganizationsGetEffectiveOrgPolicyCall) Fields(s ...googleapi.Field) *OrganizationsGetEffectiveOrgPolicyCall {
+	c.urlParams_.Set("fields", googleapi.CombineFields(s))
+	return c
+}
+
+// Context sets the context to be used in this call's Do method. Any
+// pending HTTP request will be aborted if the provided context is
+// canceled.
+func (c *OrganizationsGetEffectiveOrgPolicyCall) Context(ctx context.Context) *OrganizationsGetEffectiveOrgPolicyCall {
+	c.ctx_ = ctx
+	return c
+}
+
+// Header returns an http.Header that can be modified by the caller to
+// add HTTP headers to the request.
+func (c *OrganizationsGetEffectiveOrgPolicyCall) Header() http.Header {
+	if c.header_ == nil {
+		c.header_ = make(http.Header)
+	}
+	return c.header_
+}
+
+func (c *OrganizationsGetEffectiveOrgPolicyCall) doRequest(alt string) (*http.Response, error) {
+	reqHeaders := make(http.Header)
+	for k, v := range c.header_ {
+		reqHeaders[k] = v
+	}
+	reqHeaders.Set("User-Agent", c.s.userAgent())
+	var body io.Reader = nil
+	body, err := googleapi.WithoutDataWrapper.JSONReader(c.geteffectiveorgpolicyrequest)
+	if err != nil {
+		return nil, err
+	}
+	reqHeaders.Set("Content-Type", "application/json")
+	c.urlParams_.Set("alt", alt)
+	urls := googleapi.ResolveRelative(c.s.BasePath, "v1/{+resource}:getEffectiveOrgPolicy")
+	urls += "?" + c.urlParams_.Encode()
+	req, _ := http.NewRequest("POST", urls, body)
+	req.Header = reqHeaders
+	googleapi.Expand(req.URL, map[string]string{
+		"resource": c.resource,
+	})
+	return gensupport.SendRequest(c.ctx_, c.s.client, req)
+}
+
+// Do executes the "cloudresourcemanager.organizations.getEffectiveOrgPolicy" call.
+// Exactly one of *OrgPolicy or error will be non-nil. Any non-2xx
+// status code is an error. Response headers are in either
+// *OrgPolicy.ServerResponse.Header or (if a response was returned at
+// all) in error.(*googleapi.Error).Header. Use googleapi.IsNotModified
+// to check whether the returned error was because
+// http.StatusNotModified was returned.
+func (c *OrganizationsGetEffectiveOrgPolicyCall) Do(opts ...googleapi.CallOption) (*OrgPolicy, error) {
+	gensupport.SetOptions(c.urlParams_, opts...)
+	res, err := c.doRequest("json")
+	if res != nil && res.StatusCode == http.StatusNotModified {
+		if res.Body != nil {
+			res.Body.Close()
+		}
+		return nil, &googleapi.Error{
+			Code:   res.StatusCode,
+			Header: res.Header,
+		}
+	}
+	if err != nil {
+		return nil, err
+	}
+	defer googleapi.CloseBody(res)
+	if err := googleapi.CheckResponse(res); err != nil {
+		return nil, err
+	}
+	ret := &OrgPolicy{
+		ServerResponse: googleapi.ServerResponse{
+			Header:         res.Header,
+			HTTPStatusCode: res.StatusCode,
+		},
+	}
+	target := &ret
+	if err := json.NewDecoder(res.Body).Decode(target); err != nil {
+		return nil, err
+	}
+	return ret, nil
+	// {
+	//   "description": "Gets the effective `Policy` on a resource. This is the result of merging\n`Policies` in the resource hierarchy. The returned `Policy` will not have\nan `etag`set because it is a computed `Policy` across multiple resources.",
+	//   "flatPath": "v1/organizations/{organizationsId}:getEffectiveOrgPolicy",
+	//   "httpMethod": "POST",
+	//   "id": "cloudresourcemanager.organizations.getEffectiveOrgPolicy",
+	//   "parameterOrder": [
+	//     "resource"
+	//   ],
+	//   "parameters": {
+	//     "resource": {
+	//       "description": "The name of the resource to start computing the effective `Policy`.",
+	//       "location": "path",
+	//       "pattern": "^organizations/[^/]+$",
+	//       "required": true,
+	//       "type": "string"
+	//     }
+	//   },
+	//   "path": "v1/{+resource}:getEffectiveOrgPolicy",
+	//   "request": {
+	//     "$ref": "GetEffectiveOrgPolicyRequest"
+	//   },
+	//   "response": {
+	//     "$ref": "OrgPolicy"
+	//   },
+	//   "scopes": [
+	//     "https://www.googleapis.com/auth/cloud-platform",
+	//     "https://www.googleapis.com/auth/cloud-platform.read-only"
+	//   ]
+	// }
+
+}
+
+// method id "cloudresourcemanager.organizations.getEffectiveOrgPolicyV1":
+
+type OrganizationsGetEffectiveOrgPolicyV1Call struct {
+	s                            *Service
+	resource                     string
+	geteffectiveorgpolicyrequest *GetEffectiveOrgPolicyRequest
+	urlParams_                   gensupport.URLParams
+	ctx_                         context.Context
+	header_                      http.Header
+}
+
+// GetEffectiveOrgPolicyV1: Gets the effective `Policy` on a resource.
+// This is the result of merging
+// `Policies` in the resource hierarchy. The returned `Policy` will not
+// have
+// an `etag`set because it is a computed `Policy` across multiple
+// resources.
+func (r *OrganizationsService) GetEffectiveOrgPolicyV1(resource string, geteffectiveorgpolicyrequest *GetEffectiveOrgPolicyRequest) *OrganizationsGetEffectiveOrgPolicyV1Call {
+	c := &OrganizationsGetEffectiveOrgPolicyV1Call{s: r.s, urlParams_: make(gensupport.URLParams)}
+	c.resource = resource
+	c.geteffectiveorgpolicyrequest = geteffectiveorgpolicyrequest
+	return c
+}
+
+// Fields allows partial responses to be retrieved. See
+// https://developers.google.com/gdata/docs/2.0/basics#PartialResponse
+// for more information.
+func (c *OrganizationsGetEffectiveOrgPolicyV1Call) Fields(s ...googleapi.Field) *OrganizationsGetEffectiveOrgPolicyV1Call {
+	c.urlParams_.Set("fields", googleapi.CombineFields(s))
+	return c
+}
+
+// Context sets the context to be used in this call's Do method. Any
+// pending HTTP request will be aborted if the provided context is
+// canceled.
+func (c *OrganizationsGetEffectiveOrgPolicyV1Call) Context(ctx context.Context) *OrganizationsGetEffectiveOrgPolicyV1Call {
+	c.ctx_ = ctx
+	return c
+}
+
+// Header returns an http.Header that can be modified by the caller to
+// add HTTP headers to the request.
+func (c *OrganizationsGetEffectiveOrgPolicyV1Call) Header() http.Header {
+	if c.header_ == nil {
+		c.header_ = make(http.Header)
+	}
+	return c.header_
+}
+
+func (c *OrganizationsGetEffectiveOrgPolicyV1Call) doRequest(alt string) (*http.Response, error) {
+	reqHeaders := make(http.Header)
+	for k, v := range c.header_ {
+		reqHeaders[k] = v
+	}
+	reqHeaders.Set("User-Agent", c.s.userAgent())
+	var body io.Reader = nil
+	body, err := googleapi.WithoutDataWrapper.JSONReader(c.geteffectiveorgpolicyrequest)
+	if err != nil {
+		return nil, err
+	}
+	reqHeaders.Set("Content-Type", "application/json")
+	c.urlParams_.Set("alt", alt)
+	urls := googleapi.ResolveRelative(c.s.BasePath, "v1/{+resource}:getEffectiveOrgPolicyV1")
+	urls += "?" + c.urlParams_.Encode()
+	req, _ := http.NewRequest("POST", urls, body)
+	req.Header = reqHeaders
+	googleapi.Expand(req.URL, map[string]string{
+		"resource": c.resource,
+	})
+	return gensupport.SendRequest(c.ctx_, c.s.client, req)
+}
+
+// Do executes the "cloudresourcemanager.organizations.getEffectiveOrgPolicyV1" call.
+// Exactly one of *OrgPolicy or error will be non-nil. Any non-2xx
+// status code is an error. Response headers are in either
+// *OrgPolicy.ServerResponse.Header or (if a response was returned at
+// all) in error.(*googleapi.Error).Header. Use googleapi.IsNotModified
+// to check whether the returned error was because
+// http.StatusNotModified was returned.
+func (c *OrganizationsGetEffectiveOrgPolicyV1Call) Do(opts ...googleapi.CallOption) (*OrgPolicy, error) {
+	gensupport.SetOptions(c.urlParams_, opts...)
+	res, err := c.doRequest("json")
+	if res != nil && res.StatusCode == http.StatusNotModified {
+		if res.Body != nil {
+			res.Body.Close()
+		}
+		return nil, &googleapi.Error{
+			Code:   res.StatusCode,
+			Header: res.Header,
+		}
+	}
+	if err != nil {
+		return nil, err
+	}
+	defer googleapi.CloseBody(res)
+	if err := googleapi.CheckResponse(res); err != nil {
+		return nil, err
+	}
+	ret := &OrgPolicy{
+		ServerResponse: googleapi.ServerResponse{
+			Header:         res.Header,
+			HTTPStatusCode: res.StatusCode,
+		},
+	}
+	target := &ret
+	if err := json.NewDecoder(res.Body).Decode(target); err != nil {
+		return nil, err
+	}
+	return ret, nil
+	// {
+	//   "description": "Gets the effective `Policy` on a resource. This is the result of merging\n`Policies` in the resource hierarchy. The returned `Policy` will not have\nan `etag`set because it is a computed `Policy` across multiple resources.",
+	//   "flatPath": "v1/organizations/{organizationsId}:getEffectiveOrgPolicyV1",
+	//   "httpMethod": "POST",
+	//   "id": "cloudresourcemanager.organizations.getEffectiveOrgPolicyV1",
+	//   "parameterOrder": [
+	//     "resource"
+	//   ],
+	//   "parameters": {
+	//     "resource": {
+	//       "description": "The name of the resource to start computing the effective `Policy`.",
+	//       "location": "path",
+	//       "pattern": "^organizations/[^/]+$",
+	//       "required": true,
+	//       "type": "string"
+	//     }
+	//   },
+	//   "path": "v1/{+resource}:getEffectiveOrgPolicyV1",
+	//   "request": {
+	//     "$ref": "GetEffectiveOrgPolicyRequest"
+	//   },
+	//   "response": {
+	//     "$ref": "OrgPolicy"
+	//   },
+	//   "scopes": [
+	//     "https://www.googleapis.com/auth/cloud-platform",
+	//     "https://www.googleapis.com/auth/cloud-platform.read-only"
+	//   ]
+	// }
+
+}
+
 // method id "cloudresourcemanager.organizations.getIamPolicy":
 
 type OrganizationsGetIamPolicyCall struct {
@@ -2398,6 +5195,612 @@
 
 }
 
+// method id "cloudresourcemanager.organizations.getOrgPolicy":
+
+type OrganizationsGetOrgPolicyCall struct {
+	s                   *Service
+	resource            string
+	getorgpolicyrequest *GetOrgPolicyRequest
+	urlParams_          gensupport.URLParams
+	ctx_                context.Context
+	header_             http.Header
+}
+
+// GetOrgPolicy: Gets a `Policy` on a resource.
+//
+// If no `Policy` is set on the resource, a `Policy` is returned with
+// default
+// values including `POLICY_TYPE_NOT_SET` for the `policy_type oneof`.
+// The
+// `etag` value can be used with `SetOrgPolicy()` to create or update
+// a
+// `Policy` during read-modify-write.
+func (r *OrganizationsService) GetOrgPolicy(resource string, getorgpolicyrequest *GetOrgPolicyRequest) *OrganizationsGetOrgPolicyCall {
+	c := &OrganizationsGetOrgPolicyCall{s: r.s, urlParams_: make(gensupport.URLParams)}
+	c.resource = resource
+	c.getorgpolicyrequest = getorgpolicyrequest
+	return c
+}
+
+// Fields allows partial responses to be retrieved. See
+// https://developers.google.com/gdata/docs/2.0/basics#PartialResponse
+// for more information.
+func (c *OrganizationsGetOrgPolicyCall) Fields(s ...googleapi.Field) *OrganizationsGetOrgPolicyCall {
+	c.urlParams_.Set("fields", googleapi.CombineFields(s))
+	return c
+}
+
+// Context sets the context to be used in this call's Do method. Any
+// pending HTTP request will be aborted if the provided context is
+// canceled.
+func (c *OrganizationsGetOrgPolicyCall) Context(ctx context.Context) *OrganizationsGetOrgPolicyCall {
+	c.ctx_ = ctx
+	return c
+}
+
+// Header returns an http.Header that can be modified by the caller to
+// add HTTP headers to the request.
+func (c *OrganizationsGetOrgPolicyCall) Header() http.Header {
+	if c.header_ == nil {
+		c.header_ = make(http.Header)
+	}
+	return c.header_
+}
+
+func (c *OrganizationsGetOrgPolicyCall) doRequest(alt string) (*http.Response, error) {
+	reqHeaders := make(http.Header)
+	for k, v := range c.header_ {
+		reqHeaders[k] = v
+	}
+	reqHeaders.Set("User-Agent", c.s.userAgent())
+	var body io.Reader = nil
+	body, err := googleapi.WithoutDataWrapper.JSONReader(c.getorgpolicyrequest)
+	if err != nil {
+		return nil, err
+	}
+	reqHeaders.Set("Content-Type", "application/json")
+	c.urlParams_.Set("alt", alt)
+	urls := googleapi.ResolveRelative(c.s.BasePath, "v1/{+resource}:getOrgPolicy")
+	urls += "?" + c.urlParams_.Encode()
+	req, _ := http.NewRequest("POST", urls, body)
+	req.Header = reqHeaders
+	googleapi.Expand(req.URL, map[string]string{
+		"resource": c.resource,
+	})
+	return gensupport.SendRequest(c.ctx_, c.s.client, req)
+}
+
+// Do executes the "cloudresourcemanager.organizations.getOrgPolicy" call.
+// Exactly one of *OrgPolicy or error will be non-nil. Any non-2xx
+// status code is an error. Response headers are in either
+// *OrgPolicy.ServerResponse.Header or (if a response was returned at
+// all) in error.(*googleapi.Error).Header. Use googleapi.IsNotModified
+// to check whether the returned error was because
+// http.StatusNotModified was returned.
+func (c *OrganizationsGetOrgPolicyCall) Do(opts ...googleapi.CallOption) (*OrgPolicy, error) {
+	gensupport.SetOptions(c.urlParams_, opts...)
+	res, err := c.doRequest("json")
+	if res != nil && res.StatusCode == http.StatusNotModified {
+		if res.Body != nil {
+			res.Body.Close()
+		}
+		return nil, &googleapi.Error{
+			Code:   res.StatusCode,
+			Header: res.Header,
+		}
+	}
+	if err != nil {
+		return nil, err
+	}
+	defer googleapi.CloseBody(res)
+	if err := googleapi.CheckResponse(res); err != nil {
+		return nil, err
+	}
+	ret := &OrgPolicy{
+		ServerResponse: googleapi.ServerResponse{
+			Header:         res.Header,
+			HTTPStatusCode: res.StatusCode,
+		},
+	}
+	target := &ret
+	if err := json.NewDecoder(res.Body).Decode(target); err != nil {
+		return nil, err
+	}
+	return ret, nil
+	// {
+	//   "description": "Gets a `Policy` on a resource.\n\nIf no `Policy` is set on the resource, a `Policy` is returned with default\nvalues including `POLICY_TYPE_NOT_SET` for the `policy_type oneof`. The\n`etag` value can be used with `SetOrgPolicy()` to create or update a\n`Policy` during read-modify-write.",
+	//   "flatPath": "v1/organizations/{organizationsId}:getOrgPolicy",
+	//   "httpMethod": "POST",
+	//   "id": "cloudresourcemanager.organizations.getOrgPolicy",
+	//   "parameterOrder": [
+	//     "resource"
+	//   ],
+	//   "parameters": {
+	//     "resource": {
+	//       "description": "Name of the resource the `Policy` is set on.",
+	//       "location": "path",
+	//       "pattern": "^organizations/[^/]+$",
+	//       "required": true,
+	//       "type": "string"
+	//     }
+	//   },
+	//   "path": "v1/{+resource}:getOrgPolicy",
+	//   "request": {
+	//     "$ref": "GetOrgPolicyRequest"
+	//   },
+	//   "response": {
+	//     "$ref": "OrgPolicy"
+	//   },
+	//   "scopes": [
+	//     "https://www.googleapis.com/auth/cloud-platform",
+	//     "https://www.googleapis.com/auth/cloud-platform.read-only"
+	//   ]
+	// }
+
+}
+
+// method id "cloudresourcemanager.organizations.getOrgPolicyV1":
+
+type OrganizationsGetOrgPolicyV1Call struct {
+	s                   *Service
+	resource            string
+	getorgpolicyrequest *GetOrgPolicyRequest
+	urlParams_          gensupport.URLParams
+	ctx_                context.Context
+	header_             http.Header
+}
+
+// GetOrgPolicyV1: Gets a `Policy` on a resource.
+//
+// If no `Policy` is set on the resource, a `Policy` is returned with
+// default
+// values including `POLICY_TYPE_NOT_SET` for the `policy_type oneof`.
+// The
+// `etag` value can be used with `SetOrgPolicy()` to create or update
+// a
+// `Policy` during read-modify-write.
+func (r *OrganizationsService) GetOrgPolicyV1(resource string, getorgpolicyrequest *GetOrgPolicyRequest) *OrganizationsGetOrgPolicyV1Call {
+	c := &OrganizationsGetOrgPolicyV1Call{s: r.s, urlParams_: make(gensupport.URLParams)}
+	c.resource = resource
+	c.getorgpolicyrequest = getorgpolicyrequest
+	return c
+}
+
+// Fields allows partial responses to be retrieved. See
+// https://developers.google.com/gdata/docs/2.0/basics#PartialResponse
+// for more information.
+func (c *OrganizationsGetOrgPolicyV1Call) Fields(s ...googleapi.Field) *OrganizationsGetOrgPolicyV1Call {
+	c.urlParams_.Set("fields", googleapi.CombineFields(s))
+	return c
+}
+
+// Context sets the context to be used in this call's Do method. Any
+// pending HTTP request will be aborted if the provided context is
+// canceled.
+func (c *OrganizationsGetOrgPolicyV1Call) Context(ctx context.Context) *OrganizationsGetOrgPolicyV1Call {
+	c.ctx_ = ctx
+	return c
+}
+
+// Header returns an http.Header that can be modified by the caller to
+// add HTTP headers to the request.
+func (c *OrganizationsGetOrgPolicyV1Call) Header() http.Header {
+	if c.header_ == nil {
+		c.header_ = make(http.Header)
+	}
+	return c.header_
+}
+
+func (c *OrganizationsGetOrgPolicyV1Call) doRequest(alt string) (*http.Response, error) {
+	reqHeaders := make(http.Header)
+	for k, v := range c.header_ {
+		reqHeaders[k] = v
+	}
+	reqHeaders.Set("User-Agent", c.s.userAgent())
+	var body io.Reader = nil
+	body, err := googleapi.WithoutDataWrapper.JSONReader(c.getorgpolicyrequest)
+	if err != nil {
+		return nil, err
+	}
+	reqHeaders.Set("Content-Type", "application/json")
+	c.urlParams_.Set("alt", alt)
+	urls := googleapi.ResolveRelative(c.s.BasePath, "v1/{+resource}:getOrgPolicyV1")
+	urls += "?" + c.urlParams_.Encode()
+	req, _ := http.NewRequest("POST", urls, body)
+	req.Header = reqHeaders
+	googleapi.Expand(req.URL, map[string]string{
+		"resource": c.resource,
+	})
+	return gensupport.SendRequest(c.ctx_, c.s.client, req)
+}
+
+// Do executes the "cloudresourcemanager.organizations.getOrgPolicyV1" call.
+// Exactly one of *OrgPolicy or error will be non-nil. Any non-2xx
+// status code is an error. Response headers are in either
+// *OrgPolicy.ServerResponse.Header or (if a response was returned at
+// all) in error.(*googleapi.Error).Header. Use googleapi.IsNotModified
+// to check whether the returned error was because
+// http.StatusNotModified was returned.
+func (c *OrganizationsGetOrgPolicyV1Call) Do(opts ...googleapi.CallOption) (*OrgPolicy, error) {
+	gensupport.SetOptions(c.urlParams_, opts...)
+	res, err := c.doRequest("json")
+	if res != nil && res.StatusCode == http.StatusNotModified {
+		if res.Body != nil {
+			res.Body.Close()
+		}
+		return nil, &googleapi.Error{
+			Code:   res.StatusCode,
+			Header: res.Header,
+		}
+	}
+	if err != nil {
+		return nil, err
+	}
+	defer googleapi.CloseBody(res)
+	if err := googleapi.CheckResponse(res); err != nil {
+		return nil, err
+	}
+	ret := &OrgPolicy{
+		ServerResponse: googleapi.ServerResponse{
+			Header:         res.Header,
+			HTTPStatusCode: res.StatusCode,
+		},
+	}
+	target := &ret
+	if err := json.NewDecoder(res.Body).Decode(target); err != nil {
+		return nil, err
+	}
+	return ret, nil
+	// {
+	//   "description": "Gets a `Policy` on a resource.\n\nIf no `Policy` is set on the resource, a `Policy` is returned with default\nvalues including `POLICY_TYPE_NOT_SET` for the `policy_type oneof`. The\n`etag` value can be used with `SetOrgPolicy()` to create or update a\n`Policy` during read-modify-write.",
+	//   "flatPath": "v1/organizations/{organizationsId}:getOrgPolicyV1",
+	//   "httpMethod": "POST",
+	//   "id": "cloudresourcemanager.organizations.getOrgPolicyV1",
+	//   "parameterOrder": [
+	//     "resource"
+	//   ],
+	//   "parameters": {
+	//     "resource": {
+	//       "description": "Name of the resource the `Policy` is set on.",
+	//       "location": "path",
+	//       "pattern": "^organizations/[^/]+$",
+	//       "required": true,
+	//       "type": "string"
+	//     }
+	//   },
+	//   "path": "v1/{+resource}:getOrgPolicyV1",
+	//   "request": {
+	//     "$ref": "GetOrgPolicyRequest"
+	//   },
+	//   "response": {
+	//     "$ref": "OrgPolicy"
+	//   },
+	//   "scopes": [
+	//     "https://www.googleapis.com/auth/cloud-platform",
+	//     "https://www.googleapis.com/auth/cloud-platform.read-only"
+	//   ]
+	// }
+
+}
+
+// method id "cloudresourcemanager.organizations.listAvailableOrgPolicyConstraints":
+
+type OrganizationsListAvailableOrgPolicyConstraintsCall struct {
+	s                                        *Service
+	resource                                 string
+	listavailableorgpolicyconstraintsrequest *ListAvailableOrgPolicyConstraintsRequest
+	urlParams_                               gensupport.URLParams
+	ctx_                                     context.Context
+	header_                                  http.Header
+}
+
+// ListAvailableOrgPolicyConstraints: Lists `Constraints` that could be
+// applied on the specified resource.
+func (r *OrganizationsService) ListAvailableOrgPolicyConstraints(resource string, listavailableorgpolicyconstraintsrequest *ListAvailableOrgPolicyConstraintsRequest) *OrganizationsListAvailableOrgPolicyConstraintsCall {
+	c := &OrganizationsListAvailableOrgPolicyConstraintsCall{s: r.s, urlParams_: make(gensupport.URLParams)}
+	c.resource = resource
+	c.listavailableorgpolicyconstraintsrequest = listavailableorgpolicyconstraintsrequest
+	return c
+}
+
+// Fields allows partial responses to be retrieved. See
+// https://developers.google.com/gdata/docs/2.0/basics#PartialResponse
+// for more information.
+func (c *OrganizationsListAvailableOrgPolicyConstraintsCall) Fields(s ...googleapi.Field) *OrganizationsListAvailableOrgPolicyConstraintsCall {
+	c.urlParams_.Set("fields", googleapi.CombineFields(s))
+	return c
+}
+
+// Context sets the context to be used in this call's Do method. Any
+// pending HTTP request will be aborted if the provided context is
+// canceled.
+func (c *OrganizationsListAvailableOrgPolicyConstraintsCall) Context(ctx context.Context) *OrganizationsListAvailableOrgPolicyConstraintsCall {
+	c.ctx_ = ctx
+	return c
+}
+
+// Header returns an http.Header that can be modified by the caller to
+// add HTTP headers to the request.
+func (c *OrganizationsListAvailableOrgPolicyConstraintsCall) Header() http.Header {
+	if c.header_ == nil {
+		c.header_ = make(http.Header)
+	}
+	return c.header_
+}
+
+func (c *OrganizationsListAvailableOrgPolicyConstraintsCall) doRequest(alt string) (*http.Response, error) {
+	reqHeaders := make(http.Header)
+	for k, v := range c.header_ {
+		reqHeaders[k] = v
+	}
+	reqHeaders.Set("User-Agent", c.s.userAgent())
+	var body io.Reader = nil
+	body, err := googleapi.WithoutDataWrapper.JSONReader(c.listavailableorgpolicyconstraintsrequest)
+	if err != nil {
+		return nil, err
+	}
+	reqHeaders.Set("Content-Type", "application/json")
+	c.urlParams_.Set("alt", alt)
+	urls := googleapi.ResolveRelative(c.s.BasePath, "v1/{+resource}:listAvailableOrgPolicyConstraints")
+	urls += "?" + c.urlParams_.Encode()
+	req, _ := http.NewRequest("POST", urls, body)
+	req.Header = reqHeaders
+	googleapi.Expand(req.URL, map[string]string{
+		"resource": c.resource,
+	})
+	return gensupport.SendRequest(c.ctx_, c.s.client, req)
+}
+
+// Do executes the "cloudresourcemanager.organizations.listAvailableOrgPolicyConstraints" call.
+// Exactly one of *ListAvailableOrgPolicyConstraintsResponse or error
+// will be non-nil. Any non-2xx status code is an error. Response
+// headers are in either
+// *ListAvailableOrgPolicyConstraintsResponse.ServerResponse.Header or
+// (if a response was returned at all) in
+// error.(*googleapi.Error).Header. Use googleapi.IsNotModified to check
+// whether the returned error was because http.StatusNotModified was
+// returned.
+func (c *OrganizationsListAvailableOrgPolicyConstraintsCall) Do(opts ...googleapi.CallOption) (*ListAvailableOrgPolicyConstraintsResponse, error) {
+	gensupport.SetOptions(c.urlParams_, opts...)
+	res, err := c.doRequest("json")
+	if res != nil && res.StatusCode == http.StatusNotModified {
+		if res.Body != nil {
+			res.Body.Close()
+		}
+		return nil, &googleapi.Error{
+			Code:   res.StatusCode,
+			Header: res.Header,
+		}
+	}
+	if err != nil {
+		return nil, err
+	}
+	defer googleapi.CloseBody(res)
+	if err := googleapi.CheckResponse(res); err != nil {
+		return nil, err
+	}
+	ret := &ListAvailableOrgPolicyConstraintsResponse{
+		ServerResponse: googleapi.ServerResponse{
+			Header:         res.Header,
+			HTTPStatusCode: res.StatusCode,
+		},
+	}
+	target := &ret
+	if err := json.NewDecoder(res.Body).Decode(target); err != nil {
+		return nil, err
+	}
+	return ret, nil
+	// {
+	//   "description": "Lists `Constraints` that could be applied on the specified resource.",
+	//   "flatPath": "v1/organizations/{organizationsId}:listAvailableOrgPolicyConstraints",
+	//   "httpMethod": "POST",
+	//   "id": "cloudresourcemanager.organizations.listAvailableOrgPolicyConstraints",
+	//   "parameterOrder": [
+	//     "resource"
+	//   ],
+	//   "parameters": {
+	//     "resource": {
+	//       "description": "Name of the resource to list `Constraints` for.",
+	//       "location": "path",
+	//       "pattern": "^organizations/[^/]+$",
+	//       "required": true,
+	//       "type": "string"
+	//     }
+	//   },
+	//   "path": "v1/{+resource}:listAvailableOrgPolicyConstraints",
+	//   "request": {
+	//     "$ref": "ListAvailableOrgPolicyConstraintsRequest"
+	//   },
+	//   "response": {
+	//     "$ref": "ListAvailableOrgPolicyConstraintsResponse"
+	//   },
+	//   "scopes": [
+	//     "https://www.googleapis.com/auth/cloud-platform",
+	//     "https://www.googleapis.com/auth/cloud-platform.read-only"
+	//   ]
+	// }
+
+}
+
+// Pages invokes f for each page of results.
+// A non-nil error returned from f will halt the iteration.
+// The provided context supersedes any context provided to the Context method.
+func (c *OrganizationsListAvailableOrgPolicyConstraintsCall) Pages(ctx context.Context, f func(*ListAvailableOrgPolicyConstraintsResponse) error) error {
+	c.ctx_ = ctx
+	defer func(pt string) { c.listavailableorgpolicyconstraintsrequest.PageToken = pt }(c.listavailableorgpolicyconstraintsrequest.PageToken) // reset paging to original point
+	for {
+		x, err := c.Do()
+		if err != nil {
+			return err
+		}
+		if err := f(x); err != nil {
+			return err
+		}
+		if x.NextPageToken == "" {
+			return nil
+		}
+		c.listavailableorgpolicyconstraintsrequest.PageToken = x.NextPageToken
+	}
+}
+
+// method id "cloudresourcemanager.organizations.listOrgPolicies":
+
+type OrganizationsListOrgPoliciesCall struct {
+	s                      *Service
+	resource               string
+	listorgpoliciesrequest *ListOrgPoliciesRequest
+	urlParams_             gensupport.URLParams
+	ctx_                   context.Context
+	header_                http.Header
+}
+
+// ListOrgPolicies: Lists all the `Policies` set for a particular
+// resource.
+func (r *OrganizationsService) ListOrgPolicies(resource string, listorgpoliciesrequest *ListOrgPoliciesRequest) *OrganizationsListOrgPoliciesCall {
+	c := &OrganizationsListOrgPoliciesCall{s: r.s, urlParams_: make(gensupport.URLParams)}
+	c.resource = resource
+	c.listorgpoliciesrequest = listorgpoliciesrequest
+	return c
+}
+
+// Fields allows partial responses to be retrieved. See
+// https://developers.google.com/gdata/docs/2.0/basics#PartialResponse
+// for more information.
+func (c *OrganizationsListOrgPoliciesCall) Fields(s ...googleapi.Field) *OrganizationsListOrgPoliciesCall {
+	c.urlParams_.Set("fields", googleapi.CombineFields(s))
+	return c
+}
+
+// Context sets the context to be used in this call's Do method. Any
+// pending HTTP request will be aborted if the provided context is
+// canceled.
+func (c *OrganizationsListOrgPoliciesCall) Context(ctx context.Context) *OrganizationsListOrgPoliciesCall {
+	c.ctx_ = ctx
+	return c
+}
+
+// Header returns an http.Header that can be modified by the caller to
+// add HTTP headers to the request.
+func (c *OrganizationsListOrgPoliciesCall) Header() http.Header {
+	if c.header_ == nil {
+		c.header_ = make(http.Header)
+	}
+	return c.header_
+}
+
+func (c *OrganizationsListOrgPoliciesCall) doRequest(alt string) (*http.Response, error) {
+	reqHeaders := make(http.Header)
+	for k, v := range c.header_ {
+		reqHeaders[k] = v
+	}
+	reqHeaders.Set("User-Agent", c.s.userAgent())
+	var body io.Reader = nil
+	body, err := googleapi.WithoutDataWrapper.JSONReader(c.listorgpoliciesrequest)
+	if err != nil {
+		return nil, err
+	}
+	reqHeaders.Set("Content-Type", "application/json")
+	c.urlParams_.Set("alt", alt)
+	urls := googleapi.ResolveRelative(c.s.BasePath, "v1/{+resource}:listOrgPolicies")
+	urls += "?" + c.urlParams_.Encode()
+	req, _ := http.NewRequest("POST", urls, body)
+	req.Header = reqHeaders
+	googleapi.Expand(req.URL, map[string]string{
+		"resource": c.resource,
+	})
+	return gensupport.SendRequest(c.ctx_, c.s.client, req)
+}
+
+// Do executes the "cloudresourcemanager.organizations.listOrgPolicies" call.
+// Exactly one of *ListOrgPoliciesResponse or error will be non-nil. Any
+// non-2xx status code is an error. Response headers are in either
+// *ListOrgPoliciesResponse.ServerResponse.Header or (if a response was
+// returned at all) in error.(*googleapi.Error).Header. Use
+// googleapi.IsNotModified to check whether the returned error was
+// because http.StatusNotModified was returned.
+func (c *OrganizationsListOrgPoliciesCall) Do(opts ...googleapi.CallOption) (*ListOrgPoliciesResponse, error) {
+	gensupport.SetOptions(c.urlParams_, opts...)
+	res, err := c.doRequest("json")
+	if res != nil && res.StatusCode == http.StatusNotModified {
+		if res.Body != nil {
+			res.Body.Close()
+		}
+		return nil, &googleapi.Error{
+			Code:   res.StatusCode,
+			Header: res.Header,
+		}
+	}
+	if err != nil {
+		return nil, err
+	}
+	defer googleapi.CloseBody(res)
+	if err := googleapi.CheckResponse(res); err != nil {
+		return nil, err
+	}
+	ret := &ListOrgPoliciesResponse{
+		ServerResponse: googleapi.ServerResponse{
+			Header:         res.Header,
+			HTTPStatusCode: res.StatusCode,
+		},
+	}
+	target := &ret
+	if err := json.NewDecoder(res.Body).Decode(target); err != nil {
+		return nil, err
+	}
+	return ret, nil
+	// {
+	//   "description": "Lists all the `Policies` set for a particular resource.",
+	//   "flatPath": "v1/organizations/{organizationsId}:listOrgPolicies",
+	//   "httpMethod": "POST",
+	//   "id": "cloudresourcemanager.organizations.listOrgPolicies",
+	//   "parameterOrder": [
+	//     "resource"
+	//   ],
+	//   "parameters": {
+	//     "resource": {
+	//       "description": "Name of the resource to list Policies for.",
+	//       "location": "path",
+	//       "pattern": "^organizations/[^/]+$",
+	//       "required": true,
+	//       "type": "string"
+	//     }
+	//   },
+	//   "path": "v1/{+resource}:listOrgPolicies",
+	//   "request": {
+	//     "$ref": "ListOrgPoliciesRequest"
+	//   },
+	//   "response": {
+	//     "$ref": "ListOrgPoliciesResponse"
+	//   },
+	//   "scopes": [
+	//     "https://www.googleapis.com/auth/cloud-platform",
+	//     "https://www.googleapis.com/auth/cloud-platform.read-only"
+	//   ]
+	// }
+
+}
+
+// Pages invokes f for each page of results.
+// A non-nil error returned from f will halt the iteration.
+// The provided context supersedes any context provided to the Context method.
+func (c *OrganizationsListOrgPoliciesCall) Pages(ctx context.Context, f func(*ListOrgPoliciesResponse) error) error {
+	c.ctx_ = ctx
+	defer func(pt string) { c.listorgpoliciesrequest.PageToken = pt }(c.listorgpoliciesrequest.PageToken) // reset paging to original point
+	for {
+		x, err := c.Do()
+		if err != nil {
+			return err
+		}
+		if err := f(x); err != nil {
+			return err
+		}
+		if x.NextPageToken == "" {
+			return nil
+		}
+		c.listorgpoliciesrequest.PageToken = x.NextPageToken
+	}
+}
+
 // method id "cloudresourcemanager.organizations.search":
 
 type OrganizationsSearchCall struct {
@@ -2685,6 +6088,288 @@
 
 }
 
+// method id "cloudresourcemanager.organizations.setOrgPolicy":
+
+type OrganizationsSetOrgPolicyCall struct {
+	s                   *Service
+	resource            string
+	setorgpolicyrequest *SetOrgPolicyRequest
+	urlParams_          gensupport.URLParams
+	ctx_                context.Context
+	header_             http.Header
+}
+
+// SetOrgPolicy: Updates the specified `Policy` on the resource. Creates
+// a new `Policy` for
+// that `Constraint` on the resource if one does not exist.
+//
+// Not supplying an `etag` on the request `Policy` results in an
+// unconditional
+// write of the `Policy`.
+func (r *OrganizationsService) SetOrgPolicy(resource string, setorgpolicyrequest *SetOrgPolicyRequest) *OrganizationsSetOrgPolicyCall {
+	c := &OrganizationsSetOrgPolicyCall{s: r.s, urlParams_: make(gensupport.URLParams)}
+	c.resource = resource
+	c.setorgpolicyrequest = setorgpolicyrequest
+	return c
+}
+
+// Fields allows partial responses to be retrieved. See
+// https://developers.google.com/gdata/docs/2.0/basics#PartialResponse
+// for more information.
+func (c *OrganizationsSetOrgPolicyCall) Fields(s ...googleapi.Field) *OrganizationsSetOrgPolicyCall {
+	c.urlParams_.Set("fields", googleapi.CombineFields(s))
+	return c
+}
+
+// Context sets the context to be used in this call's Do method. Any
+// pending HTTP request will be aborted if the provided context is
+// canceled.
+func (c *OrganizationsSetOrgPolicyCall) Context(ctx context.Context) *OrganizationsSetOrgPolicyCall {
+	c.ctx_ = ctx
+	return c
+}
+
+// Header returns an http.Header that can be modified by the caller to
+// add HTTP headers to the request.
+func (c *OrganizationsSetOrgPolicyCall) Header() http.Header {
+	if c.header_ == nil {
+		c.header_ = make(http.Header)
+	}
+	return c.header_
+}
+
+func (c *OrganizationsSetOrgPolicyCall) doRequest(alt string) (*http.Response, error) {
+	reqHeaders := make(http.Header)
+	for k, v := range c.header_ {
+		reqHeaders[k] = v
+	}
+	reqHeaders.Set("User-Agent", c.s.userAgent())
+	var body io.Reader = nil
+	body, err := googleapi.WithoutDataWrapper.JSONReader(c.setorgpolicyrequest)
+	if err != nil {
+		return nil, err
+	}
+	reqHeaders.Set("Content-Type", "application/json")
+	c.urlParams_.Set("alt", alt)
+	urls := googleapi.ResolveRelative(c.s.BasePath, "v1/{+resource}:setOrgPolicy")
+	urls += "?" + c.urlParams_.Encode()
+	req, _ := http.NewRequest("POST", urls, body)
+	req.Header = reqHeaders
+	googleapi.Expand(req.URL, map[string]string{
+		"resource": c.resource,
+	})
+	return gensupport.SendRequest(c.ctx_, c.s.client, req)
+}
+
+// Do executes the "cloudresourcemanager.organizations.setOrgPolicy" call.
+// Exactly one of *OrgPolicy or error will be non-nil. Any non-2xx
+// status code is an error. Response headers are in either
+// *OrgPolicy.ServerResponse.Header or (if a response was returned at
+// all) in error.(*googleapi.Error).Header. Use googleapi.IsNotModified
+// to check whether the returned error was because
+// http.StatusNotModified was returned.
+func (c *OrganizationsSetOrgPolicyCall) Do(opts ...googleapi.CallOption) (*OrgPolicy, error) {
+	gensupport.SetOptions(c.urlParams_, opts...)
+	res, err := c.doRequest("json")
+	if res != nil && res.StatusCode == http.StatusNotModified {
+		if res.Body != nil {
+			res.Body.Close()
+		}
+		return nil, &googleapi.Error{
+			Code:   res.StatusCode,
+			Header: res.Header,
+		}
+	}
+	if err != nil {
+		return nil, err
+	}
+	defer googleapi.CloseBody(res)
+	if err := googleapi.CheckResponse(res); err != nil {
+		return nil, err
+	}
+	ret := &OrgPolicy{
+		ServerResponse: googleapi.ServerResponse{
+			Header:         res.Header,
+			HTTPStatusCode: res.StatusCode,
+		},
+	}
+	target := &ret
+	if err := json.NewDecoder(res.Body).Decode(target); err != nil {
+		return nil, err
+	}
+	return ret, nil
+	// {
+	//   "description": "Updates the specified `Policy` on the resource. Creates a new `Policy` for\nthat `Constraint` on the resource if one does not exist.\n\nNot supplying an `etag` on the request `Policy` results in an unconditional\nwrite of the `Policy`.",
+	//   "flatPath": "v1/organizations/{organizationsId}:setOrgPolicy",
+	//   "httpMethod": "POST",
+	//   "id": "cloudresourcemanager.organizations.setOrgPolicy",
+	//   "parameterOrder": [
+	//     "resource"
+	//   ],
+	//   "parameters": {
+	//     "resource": {
+	//       "description": "Resource name of the resource to attach the `Policy`.",
+	//       "location": "path",
+	//       "pattern": "^organizations/[^/]+$",
+	//       "required": true,
+	//       "type": "string"
+	//     }
+	//   },
+	//   "path": "v1/{+resource}:setOrgPolicy",
+	//   "request": {
+	//     "$ref": "SetOrgPolicyRequest"
+	//   },
+	//   "response": {
+	//     "$ref": "OrgPolicy"
+	//   },
+	//   "scopes": [
+	//     "https://www.googleapis.com/auth/cloud-platform"
+	//   ]
+	// }
+
+}
+
+// method id "cloudresourcemanager.organizations.setOrgPolicyV1":
+
+type OrganizationsSetOrgPolicyV1Call struct {
+	s                   *Service
+	resource            string
+	setorgpolicyrequest *SetOrgPolicyRequest
+	urlParams_          gensupport.URLParams
+	ctx_                context.Context
+	header_             http.Header
+}
+
+// SetOrgPolicyV1: Updates the specified `Policy` on the resource.
+// Creates a new `Policy` for
+// that `Constraint` on the resource if one does not exist.
+//
+// Not supplying an `etag` on the request `Policy` results in an
+// unconditional
+// write of the `Policy`.
+func (r *OrganizationsService) SetOrgPolicyV1(resource string, setorgpolicyrequest *SetOrgPolicyRequest) *OrganizationsSetOrgPolicyV1Call {
+	c := &OrganizationsSetOrgPolicyV1Call{s: r.s, urlParams_: make(gensupport.URLParams)}
+	c.resource = resource
+	c.setorgpolicyrequest = setorgpolicyrequest
+	return c
+}
+
+// Fields allows partial responses to be retrieved. See
+// https://developers.google.com/gdata/docs/2.0/basics#PartialResponse
+// for more information.
+func (c *OrganizationsSetOrgPolicyV1Call) Fields(s ...googleapi.Field) *OrganizationsSetOrgPolicyV1Call {
+	c.urlParams_.Set("fields", googleapi.CombineFields(s))
+	return c
+}
+
+// Context sets the context to be used in this call's Do method. Any
+// pending HTTP request will be aborted if the provided context is
+// canceled.
+func (c *OrganizationsSetOrgPolicyV1Call) Context(ctx context.Context) *OrganizationsSetOrgPolicyV1Call {
+	c.ctx_ = ctx
+	return c
+}
+
+// Header returns an http.Header that can be modified by the caller to
+// add HTTP headers to the request.
+func (c *OrganizationsSetOrgPolicyV1Call) Header() http.Header {
+	if c.header_ == nil {
+		c.header_ = make(http.Header)
+	}
+	return c.header_
+}
+
+func (c *OrganizationsSetOrgPolicyV1Call) doRequest(alt string) (*http.Response, error) {
+	reqHeaders := make(http.Header)
+	for k, v := range c.header_ {
+		reqHeaders[k] = v
+	}
+	reqHeaders.Set("User-Agent", c.s.userAgent())
+	var body io.Reader = nil
+	body, err := googleapi.WithoutDataWrapper.JSONReader(c.setorgpolicyrequest)
+	if err != nil {
+		return nil, err
+	}
+	reqHeaders.Set("Content-Type", "application/json")
+	c.urlParams_.Set("alt", alt)
+	urls := googleapi.ResolveRelative(c.s.BasePath, "v1/{+resource}:setOrgPolicyV1")
+	urls += "?" + c.urlParams_.Encode()
+	req, _ := http.NewRequest("POST", urls, body)
+	req.Header = reqHeaders
+	googleapi.Expand(req.URL, map[string]string{
+		"resource": c.resource,
+	})
+	return gensupport.SendRequest(c.ctx_, c.s.client, req)
+}
+
+// Do executes the "cloudresourcemanager.organizations.setOrgPolicyV1" call.
+// Exactly one of *OrgPolicy or error will be non-nil. Any non-2xx
+// status code is an error. Response headers are in either
+// *OrgPolicy.ServerResponse.Header or (if a response was returned at
+// all) in error.(*googleapi.Error).Header. Use googleapi.IsNotModified
+// to check whether the returned error was because
+// http.StatusNotModified was returned.
+func (c *OrganizationsSetOrgPolicyV1Call) Do(opts ...googleapi.CallOption) (*OrgPolicy, error) {
+	gensupport.SetOptions(c.urlParams_, opts...)
+	res, err := c.doRequest("json")
+	if res != nil && res.StatusCode == http.StatusNotModified {
+		if res.Body != nil {
+			res.Body.Close()
+		}
+		return nil, &googleapi.Error{
+			Code:   res.StatusCode,
+			Header: res.Header,
+		}
+	}
+	if err != nil {
+		return nil, err
+	}
+	defer googleapi.CloseBody(res)
+	if err := googleapi.CheckResponse(res); err != nil {
+		return nil, err
+	}
+	ret := &OrgPolicy{
+		ServerResponse: googleapi.ServerResponse{
+			Header:         res.Header,
+			HTTPStatusCode: res.StatusCode,
+		},
+	}
+	target := &ret
+	if err := json.NewDecoder(res.Body).Decode(target); err != nil {
+		return nil, err
+	}
+	return ret, nil
+	// {
+	//   "description": "Updates the specified `Policy` on the resource. Creates a new `Policy` for\nthat `Constraint` on the resource if one does not exist.\n\nNot supplying an `etag` on the request `Policy` results in an unconditional\nwrite of the `Policy`.",
+	//   "flatPath": "v1/organizations/{organizationsId}:setOrgPolicyV1",
+	//   "httpMethod": "POST",
+	//   "id": "cloudresourcemanager.organizations.setOrgPolicyV1",
+	//   "parameterOrder": [
+	//     "resource"
+	//   ],
+	//   "parameters": {
+	//     "resource": {
+	//       "description": "Resource name of the resource to attach the `Policy`.",
+	//       "location": "path",
+	//       "pattern": "^organizations/[^/]+$",
+	//       "required": true,
+	//       "type": "string"
+	//     }
+	//   },
+	//   "path": "v1/{+resource}:setOrgPolicyV1",
+	//   "request": {
+	//     "$ref": "SetOrgPolicyRequest"
+	//   },
+	//   "response": {
+	//     "$ref": "OrgPolicy"
+	//   },
+	//   "scopes": [
+	//     "https://www.googleapis.com/auth/cloud-platform"
+	//   ]
+	// }
+
+}
+
 // method id "cloudresourcemanager.organizations.testIamPermissions":
 
 type OrganizationsTestIamPermissionsCall struct {
@@ -2824,6 +6509,276 @@
 
 }
 
+// method id "cloudresourcemanager.projects.clearOrgPolicy":
+
+type ProjectsClearOrgPolicyCall struct {
+	s                     *Service
+	resource              string
+	clearorgpolicyrequest *ClearOrgPolicyRequest
+	urlParams_            gensupport.URLParams
+	ctx_                  context.Context
+	header_               http.Header
+}
+
+// ClearOrgPolicy: Clears a `Policy` from a resource.
+func (r *ProjectsService) ClearOrgPolicy(resource string, clearorgpolicyrequest *ClearOrgPolicyRequest) *ProjectsClearOrgPolicyCall {
+	c := &ProjectsClearOrgPolicyCall{s: r.s, urlParams_: make(gensupport.URLParams)}
+	c.resource = resource
+	c.clearorgpolicyrequest = clearorgpolicyrequest
+	return c
+}
+
+// Fields allows partial responses to be retrieved. See
+// https://developers.google.com/gdata/docs/2.0/basics#PartialResponse
+// for more information.
+func (c *ProjectsClearOrgPolicyCall) Fields(s ...googleapi.Field) *ProjectsClearOrgPolicyCall {
+	c.urlParams_.Set("fields", googleapi.CombineFields(s))
+	return c
+}
+
+// Context sets the context to be used in this call's Do method. Any
+// pending HTTP request will be aborted if the provided context is
+// canceled.
+func (c *ProjectsClearOrgPolicyCall) Context(ctx context.Context) *ProjectsClearOrgPolicyCall {
+	c.ctx_ = ctx
+	return c
+}
+
+// Header returns an http.Header that can be modified by the caller to
+// add HTTP headers to the request.
+func (c *ProjectsClearOrgPolicyCall) Header() http.Header {
+	if c.header_ == nil {
+		c.header_ = make(http.Header)
+	}
+	return c.header_
+}
+
+func (c *ProjectsClearOrgPolicyCall) doRequest(alt string) (*http.Response, error) {
+	reqHeaders := make(http.Header)
+	for k, v := range c.header_ {
+		reqHeaders[k] = v
+	}
+	reqHeaders.Set("User-Agent", c.s.userAgent())
+	var body io.Reader = nil
+	body, err := googleapi.WithoutDataWrapper.JSONReader(c.clearorgpolicyrequest)
+	if err != nil {
+		return nil, err
+	}
+	reqHeaders.Set("Content-Type", "application/json")
+	c.urlParams_.Set("alt", alt)
+	urls := googleapi.ResolveRelative(c.s.BasePath, "v1/{+resource}:clearOrgPolicy")
+	urls += "?" + c.urlParams_.Encode()
+	req, _ := http.NewRequest("POST", urls, body)
+	req.Header = reqHeaders
+	googleapi.Expand(req.URL, map[string]string{
+		"resource": c.resource,
+	})
+	return gensupport.SendRequest(c.ctx_, c.s.client, req)
+}
+
+// Do executes the "cloudresourcemanager.projects.clearOrgPolicy" call.
+// Exactly one of *Empty or error will be non-nil. Any non-2xx status
+// code is an error. Response headers are in either
+// *Empty.ServerResponse.Header or (if a response was returned at all)
+// in error.(*googleapi.Error).Header. Use googleapi.IsNotModified to
+// check whether the returned error was because http.StatusNotModified
+// was returned.
+func (c *ProjectsClearOrgPolicyCall) Do(opts ...googleapi.CallOption) (*Empty, error) {
+	gensupport.SetOptions(c.urlParams_, opts...)
+	res, err := c.doRequest("json")
+	if res != nil && res.StatusCode == http.StatusNotModified {
+		if res.Body != nil {
+			res.Body.Close()
+		}
+		return nil, &googleapi.Error{
+			Code:   res.StatusCode,
+			Header: res.Header,
+		}
+	}
+	if err != nil {
+		return nil, err
+	}
+	defer googleapi.CloseBody(res)
+	if err := googleapi.CheckResponse(res); err != nil {
+		return nil, err
+	}
+	ret := &Empty{
+		ServerResponse: googleapi.ServerResponse{
+			Header:         res.Header,
+			HTTPStatusCode: res.StatusCode,
+		},
+	}
+	target := &ret
+	if err := json.NewDecoder(res.Body).Decode(target); err != nil {
+		return nil, err
+	}
+	return ret, nil
+	// {
+	//   "description": "Clears a `Policy` from a resource.",
+	//   "flatPath": "v1/projects/{projectsId}:clearOrgPolicy",
+	//   "httpMethod": "POST",
+	//   "id": "cloudresourcemanager.projects.clearOrgPolicy",
+	//   "parameterOrder": [
+	//     "resource"
+	//   ],
+	//   "parameters": {
+	//     "resource": {
+	//       "description": "Name of the resource for the `Policy` to clear.",
+	//       "location": "path",
+	//       "pattern": "^projects/[^/]+$",
+	//       "required": true,
+	//       "type": "string"
+	//     }
+	//   },
+	//   "path": "v1/{+resource}:clearOrgPolicy",
+	//   "request": {
+	//     "$ref": "ClearOrgPolicyRequest"
+	//   },
+	//   "response": {
+	//     "$ref": "Empty"
+	//   },
+	//   "scopes": [
+	//     "https://www.googleapis.com/auth/cloud-platform"
+	//   ]
+	// }
+
+}
+
+// method id "cloudresourcemanager.projects.clearOrgPolicyV1":
+
+type ProjectsClearOrgPolicyV1Call struct {
+	s                     *Service
+	resource              string
+	clearorgpolicyrequest *ClearOrgPolicyRequest
+	urlParams_            gensupport.URLParams
+	ctx_                  context.Context
+	header_               http.Header
+}
+
+// ClearOrgPolicyV1: Clears a `Policy` from a resource.
+func (r *ProjectsService) ClearOrgPolicyV1(resource string, clearorgpolicyrequest *ClearOrgPolicyRequest) *ProjectsClearOrgPolicyV1Call {
+	c := &ProjectsClearOrgPolicyV1Call{s: r.s, urlParams_: make(gensupport.URLParams)}
+	c.resource = resource
+	c.clearorgpolicyrequest = clearorgpolicyrequest
+	return c
+}
+
+// Fields allows partial responses to be retrieved. See
+// https://developers.google.com/gdata/docs/2.0/basics#PartialResponse
+// for more information.
+func (c *ProjectsClearOrgPolicyV1Call) Fields(s ...googleapi.Field) *ProjectsClearOrgPolicyV1Call {
+	c.urlParams_.Set("fields", googleapi.CombineFields(s))
+	return c
+}
+
+// Context sets the context to be used in this call's Do method. Any
+// pending HTTP request will be aborted if the provided context is
+// canceled.
+func (c *ProjectsClearOrgPolicyV1Call) Context(ctx context.Context) *ProjectsClearOrgPolicyV1Call {
+	c.ctx_ = ctx
+	return c
+}
+
+// Header returns an http.Header that can be modified by the caller to
+// add HTTP headers to the request.
+func (c *ProjectsClearOrgPolicyV1Call) Header() http.Header {
+	if c.header_ == nil {
+		c.header_ = make(http.Header)
+	}
+	return c.header_
+}
+
+func (c *ProjectsClearOrgPolicyV1Call) doRequest(alt string) (*http.Response, error) {
+	reqHeaders := make(http.Header)
+	for k, v := range c.header_ {
+		reqHeaders[k] = v
+	}
+	reqHeaders.Set("User-Agent", c.s.userAgent())
+	var body io.Reader = nil
+	body, err := googleapi.WithoutDataWrapper.JSONReader(c.clearorgpolicyrequest)
+	if err != nil {
+		return nil, err
+	}
+	reqHeaders.Set("Content-Type", "application/json")
+	c.urlParams_.Set("alt", alt)
+	urls := googleapi.ResolveRelative(c.s.BasePath, "v1/{+resource}:clearOrgPolicyV1")
+	urls += "?" + c.urlParams_.Encode()
+	req, _ := http.NewRequest("POST", urls, body)
+	req.Header = reqHeaders
+	googleapi.Expand(req.URL, map[string]string{
+		"resource": c.resource,
+	})
+	return gensupport.SendRequest(c.ctx_, c.s.client, req)
+}
+
+// Do executes the "cloudresourcemanager.projects.clearOrgPolicyV1" call.
+// Exactly one of *Empty or error will be non-nil. Any non-2xx status
+// code is an error. Response headers are in either
+// *Empty.ServerResponse.Header or (if a response was returned at all)
+// in error.(*googleapi.Error).Header. Use googleapi.IsNotModified to
+// check whether the returned error was because http.StatusNotModified
+// was returned.
+func (c *ProjectsClearOrgPolicyV1Call) Do(opts ...googleapi.CallOption) (*Empty, error) {
+	gensupport.SetOptions(c.urlParams_, opts...)
+	res, err := c.doRequest("json")
+	if res != nil && res.StatusCode == http.StatusNotModified {
+		if res.Body != nil {
+			res.Body.Close()
+		}
+		return nil, &googleapi.Error{
+			Code:   res.StatusCode,
+			Header: res.Header,
+		}
+	}
+	if err != nil {
+		return nil, err
+	}
+	defer googleapi.CloseBody(res)
+	if err := googleapi.CheckResponse(res); err != nil {
+		return nil, err
+	}
+	ret := &Empty{
+		ServerResponse: googleapi.ServerResponse{
+			Header:         res.Header,
+			HTTPStatusCode: res.StatusCode,
+		},
+	}
+	target := &ret
+	if err := json.NewDecoder(res.Body).Decode(target); err != nil {
+		return nil, err
+	}
+	return ret, nil
+	// {
+	//   "description": "Clears a `Policy` from a resource.",
+	//   "flatPath": "v1/projects/{projectsId}:clearOrgPolicyV1",
+	//   "httpMethod": "POST",
+	//   "id": "cloudresourcemanager.projects.clearOrgPolicyV1",
+	//   "parameterOrder": [
+	//     "resource"
+	//   ],
+	//   "parameters": {
+	//     "resource": {
+	//       "description": "Name of the resource for the `Policy` to clear.",
+	//       "location": "path",
+	//       "pattern": "^projects/[^/]+$",
+	//       "required": true,
+	//       "type": "string"
+	//     }
+	//   },
+	//   "path": "v1/{+resource}:clearOrgPolicyV1",
+	//   "request": {
+	//     "$ref": "ClearOrgPolicyRequest"
+	//   },
+	//   "response": {
+	//     "$ref": "Empty"
+	//   },
+	//   "scopes": [
+	//     "https://www.googleapis.com/auth/cloud-platform"
+	//   ]
+	// }
+
+}
+
 // method id "cloudresourcemanager.projects.create":
 
 type ProjectsCreateCall struct {
@@ -3387,6 +7342,288 @@
 
 }
 
+// method id "cloudresourcemanager.projects.getEffectiveOrgPolicy":
+
+type ProjectsGetEffectiveOrgPolicyCall struct {
+	s                            *Service
+	resource                     string
+	geteffectiveorgpolicyrequest *GetEffectiveOrgPolicyRequest
+	urlParams_                   gensupport.URLParams
+	ctx_                         context.Context
+	header_                      http.Header
+}
+
+// GetEffectiveOrgPolicy: Gets the effective `Policy` on a resource.
+// This is the result of merging
+// `Policies` in the resource hierarchy. The returned `Policy` will not
+// have
+// an `etag`set because it is a computed `Policy` across multiple
+// resources.
+func (r *ProjectsService) GetEffectiveOrgPolicy(resource string, geteffectiveorgpolicyrequest *GetEffectiveOrgPolicyRequest) *ProjectsGetEffectiveOrgPolicyCall {
+	c := &ProjectsGetEffectiveOrgPolicyCall{s: r.s, urlParams_: make(gensupport.URLParams)}
+	c.resource = resource
+	c.geteffectiveorgpolicyrequest = geteffectiveorgpolicyrequest
+	return c
+}
+
+// Fields allows partial responses to be retrieved. See
+// https://developers.google.com/gdata/docs/2.0/basics#PartialResponse
+// for more information.
+func (c *ProjectsGetEffectiveOrgPolicyCall) Fields(s ...googleapi.Field) *ProjectsGetEffectiveOrgPolicyCall {
+	c.urlParams_.Set("fields", googleapi.CombineFields(s))
+	return c
+}
+
+// Context sets the context to be used in this call's Do method. Any
+// pending HTTP request will be aborted if the provided context is
+// canceled.
+func (c *ProjectsGetEffectiveOrgPolicyCall) Context(ctx context.Context) *ProjectsGetEffectiveOrgPolicyCall {
+	c.ctx_ = ctx
+	return c
+}
+
+// Header returns an http.Header that can be modified by the caller to
+// add HTTP headers to the request.
+func (c *ProjectsGetEffectiveOrgPolicyCall) Header() http.Header {
+	if c.header_ == nil {
+		c.header_ = make(http.Header)
+	}
+	return c.header_
+}
+
+func (c *ProjectsGetEffectiveOrgPolicyCall) doRequest(alt string) (*http.Response, error) {
+	reqHeaders := make(http.Header)
+	for k, v := range c.header_ {
+		reqHeaders[k] = v
+	}
+	reqHeaders.Set("User-Agent", c.s.userAgent())
+	var body io.Reader = nil
+	body, err := googleapi.WithoutDataWrapper.JSONReader(c.geteffectiveorgpolicyrequest)
+	if err != nil {
+		return nil, err
+	}
+	reqHeaders.Set("Content-Type", "application/json")
+	c.urlParams_.Set("alt", alt)
+	urls := googleapi.ResolveRelative(c.s.BasePath, "v1/{+resource}:getEffectiveOrgPolicy")
+	urls += "?" + c.urlParams_.Encode()
+	req, _ := http.NewRequest("POST", urls, body)
+	req.Header = reqHeaders
+	googleapi.Expand(req.URL, map[string]string{
+		"resource": c.resource,
+	})
+	return gensupport.SendRequest(c.ctx_, c.s.client, req)
+}
+
+// Do executes the "cloudresourcemanager.projects.getEffectiveOrgPolicy" call.
+// Exactly one of *OrgPolicy or error will be non-nil. Any non-2xx
+// status code is an error. Response headers are in either
+// *OrgPolicy.ServerResponse.Header or (if a response was returned at
+// all) in error.(*googleapi.Error).Header. Use googleapi.IsNotModified
+// to check whether the returned error was because
+// http.StatusNotModified was returned.
+func (c *ProjectsGetEffectiveOrgPolicyCall) Do(opts ...googleapi.CallOption) (*OrgPolicy, error) {
+	gensupport.SetOptions(c.urlParams_, opts...)
+	res, err := c.doRequest("json")
+	if res != nil && res.StatusCode == http.StatusNotModified {
+		if res.Body != nil {
+			res.Body.Close()
+		}
+		return nil, &googleapi.Error{
+			Code:   res.StatusCode,
+			Header: res.Header,
+		}
+	}
+	if err != nil {
+		return nil, err
+	}
+	defer googleapi.CloseBody(res)
+	if err := googleapi.CheckResponse(res); err != nil {
+		return nil, err
+	}
+	ret := &OrgPolicy{
+		ServerResponse: googleapi.ServerResponse{
+			Header:         res.Header,
+			HTTPStatusCode: res.StatusCode,
+		},
+	}
+	target := &ret
+	if err := json.NewDecoder(res.Body).Decode(target); err != nil {
+		return nil, err
+	}
+	return ret, nil
+	// {
+	//   "description": "Gets the effective `Policy` on a resource. This is the result of merging\n`Policies` in the resource hierarchy. The returned `Policy` will not have\nan `etag`set because it is a computed `Policy` across multiple resources.",
+	//   "flatPath": "v1/projects/{projectsId}:getEffectiveOrgPolicy",
+	//   "httpMethod": "POST",
+	//   "id": "cloudresourcemanager.projects.getEffectiveOrgPolicy",
+	//   "parameterOrder": [
+	//     "resource"
+	//   ],
+	//   "parameters": {
+	//     "resource": {
+	//       "description": "The name of the resource to start computing the effective `Policy`.",
+	//       "location": "path",
+	//       "pattern": "^projects/[^/]+$",
+	//       "required": true,
+	//       "type": "string"
+	//     }
+	//   },
+	//   "path": "v1/{+resource}:getEffectiveOrgPolicy",
+	//   "request": {
+	//     "$ref": "GetEffectiveOrgPolicyRequest"
+	//   },
+	//   "response": {
+	//     "$ref": "OrgPolicy"
+	//   },
+	//   "scopes": [
+	//     "https://www.googleapis.com/auth/cloud-platform",
+	//     "https://www.googleapis.com/auth/cloud-platform.read-only"
+	//   ]
+	// }
+
+}
+
+// method id "cloudresourcemanager.projects.getEffectiveOrgPolicyV1":
+
+type ProjectsGetEffectiveOrgPolicyV1Call struct {
+	s                            *Service
+	resource                     string
+	geteffectiveorgpolicyrequest *GetEffectiveOrgPolicyRequest
+	urlParams_                   gensupport.URLParams
+	ctx_                         context.Context
+	header_                      http.Header
+}
+
+// GetEffectiveOrgPolicyV1: Gets the effective `Policy` on a resource.
+// This is the result of merging
+// `Policies` in the resource hierarchy. The returned `Policy` will not
+// have
+// an `etag`set because it is a computed `Policy` across multiple
+// resources.
+func (r *ProjectsService) GetEffectiveOrgPolicyV1(resource string, geteffectiveorgpolicyrequest *GetEffectiveOrgPolicyRequest) *ProjectsGetEffectiveOrgPolicyV1Call {
+	c := &ProjectsGetEffectiveOrgPolicyV1Call{s: r.s, urlParams_: make(gensupport.URLParams)}
+	c.resource = resource
+	c.geteffectiveorgpolicyrequest = geteffectiveorgpolicyrequest
+	return c
+}
+
+// Fields allows partial responses to be retrieved. See
+// https://developers.google.com/gdata/docs/2.0/basics#PartialResponse
+// for more information.
+func (c *ProjectsGetEffectiveOrgPolicyV1Call) Fields(s ...googleapi.Field) *ProjectsGetEffectiveOrgPolicyV1Call {
+	c.urlParams_.Set("fields", googleapi.CombineFields(s))
+	return c
+}
+
+// Context sets the context to be used in this call's Do method. Any
+// pending HTTP request will be aborted if the provided context is
+// canceled.
+func (c *ProjectsGetEffectiveOrgPolicyV1Call) Context(ctx context.Context) *ProjectsGetEffectiveOrgPolicyV1Call {
+	c.ctx_ = ctx
+	return c
+}
+
+// Header returns an http.Header that can be modified by the caller to
+// add HTTP headers to the request.
+func (c *ProjectsGetEffectiveOrgPolicyV1Call) Header() http.Header {
+	if c.header_ == nil {
+		c.header_ = make(http.Header)
+	}
+	return c.header_
+}
+
+func (c *ProjectsGetEffectiveOrgPolicyV1Call) doRequest(alt string) (*http.Response, error) {
+	reqHeaders := make(http.Header)
+	for k, v := range c.header_ {
+		reqHeaders[k] = v
+	}
+	reqHeaders.Set("User-Agent", c.s.userAgent())
+	var body io.Reader = nil
+	body, err := googleapi.WithoutDataWrapper.JSONReader(c.geteffectiveorgpolicyrequest)
+	if err != nil {
+		return nil, err
+	}
+	reqHeaders.Set("Content-Type", "application/json")
+	c.urlParams_.Set("alt", alt)
+	urls := googleapi.ResolveRelative(c.s.BasePath, "v1/{+resource}:getEffectiveOrgPolicyV1")
+	urls += "?" + c.urlParams_.Encode()
+	req, _ := http.NewRequest("POST", urls, body)
+	req.Header = reqHeaders
+	googleapi.Expand(req.URL, map[string]string{
+		"resource": c.resource,
+	})
+	return gensupport.SendRequest(c.ctx_, c.s.client, req)
+}
+
+// Do executes the "cloudresourcemanager.projects.getEffectiveOrgPolicyV1" call.
+// Exactly one of *OrgPolicy or error will be non-nil. Any non-2xx
+// status code is an error. Response headers are in either
+// *OrgPolicy.ServerResponse.Header or (if a response was returned at
+// all) in error.(*googleapi.Error).Header. Use googleapi.IsNotModified
+// to check whether the returned error was because
+// http.StatusNotModified was returned.
+func (c *ProjectsGetEffectiveOrgPolicyV1Call) Do(opts ...googleapi.CallOption) (*OrgPolicy, error) {
+	gensupport.SetOptions(c.urlParams_, opts...)
+	res, err := c.doRequest("json")
+	if res != nil && res.StatusCode == http.StatusNotModified {
+		if res.Body != nil {
+			res.Body.Close()
+		}
+		return nil, &googleapi.Error{
+			Code:   res.StatusCode,
+			Header: res.Header,
+		}
+	}
+	if err != nil {
+		return nil, err
+	}
+	defer googleapi.CloseBody(res)
+	if err := googleapi.CheckResponse(res); err != nil {
+		return nil, err
+	}
+	ret := &OrgPolicy{
+		ServerResponse: googleapi.ServerResponse{
+			Header:         res.Header,
+			HTTPStatusCode: res.StatusCode,
+		},
+	}
+	target := &ret
+	if err := json.NewDecoder(res.Body).Decode(target); err != nil {
+		return nil, err
+	}
+	return ret, nil
+	// {
+	//   "description": "Gets the effective `Policy` on a resource. This is the result of merging\n`Policies` in the resource hierarchy. The returned `Policy` will not have\nan `etag`set because it is a computed `Policy` across multiple resources.",
+	//   "flatPath": "v1/projects/{projectsId}:getEffectiveOrgPolicyV1",
+	//   "httpMethod": "POST",
+	//   "id": "cloudresourcemanager.projects.getEffectiveOrgPolicyV1",
+	//   "parameterOrder": [
+	//     "resource"
+	//   ],
+	//   "parameters": {
+	//     "resource": {
+	//       "description": "The name of the resource to start computing the effective `Policy`.",
+	//       "location": "path",
+	//       "pattern": "^projects/[^/]+$",
+	//       "required": true,
+	//       "type": "string"
+	//     }
+	//   },
+	//   "path": "v1/{+resource}:getEffectiveOrgPolicyV1",
+	//   "request": {
+	//     "$ref": "GetEffectiveOrgPolicyRequest"
+	//   },
+	//   "response": {
+	//     "$ref": "OrgPolicy"
+	//   },
+	//   "scopes": [
+	//     "https://www.googleapis.com/auth/cloud-platform",
+	//     "https://www.googleapis.com/auth/cloud-platform.read-only"
+	//   ]
+	// }
+
+}
+
 // method id "cloudresourcemanager.projects.getIamPolicy":
 
 type ProjectsGetIamPolicyCall struct {
@@ -3524,6 +7761,294 @@
 
 }
 
+// method id "cloudresourcemanager.projects.getOrgPolicy":
+
+type ProjectsGetOrgPolicyCall struct {
+	s                   *Service
+	resource            string
+	getorgpolicyrequest *GetOrgPolicyRequest
+	urlParams_          gensupport.URLParams
+	ctx_                context.Context
+	header_             http.Header
+}
+
+// GetOrgPolicy: Gets a `Policy` on a resource.
+//
+// If no `Policy` is set on the resource, a `Policy` is returned with
+// default
+// values including `POLICY_TYPE_NOT_SET` for the `policy_type oneof`.
+// The
+// `etag` value can be used with `SetOrgPolicy()` to create or update
+// a
+// `Policy` during read-modify-write.
+func (r *ProjectsService) GetOrgPolicy(resource string, getorgpolicyrequest *GetOrgPolicyRequest) *ProjectsGetOrgPolicyCall {
+	c := &ProjectsGetOrgPolicyCall{s: r.s, urlParams_: make(gensupport.URLParams)}
+	c.resource = resource
+	c.getorgpolicyrequest = getorgpolicyrequest
+	return c
+}
+
+// Fields allows partial responses to be retrieved. See
+// https://developers.google.com/gdata/docs/2.0/basics#PartialResponse
+// for more information.
+func (c *ProjectsGetOrgPolicyCall) Fields(s ...googleapi.Field) *ProjectsGetOrgPolicyCall {
+	c.urlParams_.Set("fields", googleapi.CombineFields(s))
+	return c
+}
+
+// Context sets the context to be used in this call's Do method. Any
+// pending HTTP request will be aborted if the provided context is
+// canceled.
+func (c *ProjectsGetOrgPolicyCall) Context(ctx context.Context) *ProjectsGetOrgPolicyCall {
+	c.ctx_ = ctx
+	return c
+}
+
+// Header returns an http.Header that can be modified by the caller to
+// add HTTP headers to the request.
+func (c *ProjectsGetOrgPolicyCall) Header() http.Header {
+	if c.header_ == nil {
+		c.header_ = make(http.Header)
+	}
+	return c.header_
+}
+
+func (c *ProjectsGetOrgPolicyCall) doRequest(alt string) (*http.Response, error) {
+	reqHeaders := make(http.Header)
+	for k, v := range c.header_ {
+		reqHeaders[k] = v
+	}
+	reqHeaders.Set("User-Agent", c.s.userAgent())
+	var body io.Reader = nil
+	body, err := googleapi.WithoutDataWrapper.JSONReader(c.getorgpolicyrequest)
+	if err != nil {
+		return nil, err
+	}
+	reqHeaders.Set("Content-Type", "application/json")
+	c.urlParams_.Set("alt", alt)
+	urls := googleapi.ResolveRelative(c.s.BasePath, "v1/{+resource}:getOrgPolicy")
+	urls += "?" + c.urlParams_.Encode()
+	req, _ := http.NewRequest("POST", urls, body)
+	req.Header = reqHeaders
+	googleapi.Expand(req.URL, map[string]string{
+		"resource": c.resource,
+	})
+	return gensupport.SendRequest(c.ctx_, c.s.client, req)
+}
+
+// Do executes the "cloudresourcemanager.projects.getOrgPolicy" call.
+// Exactly one of *OrgPolicy or error will be non-nil. Any non-2xx
+// status code is an error. Response headers are in either
+// *OrgPolicy.ServerResponse.Header or (if a response was returned at
+// all) in error.(*googleapi.Error).Header. Use googleapi.IsNotModified
+// to check whether the returned error was because
+// http.StatusNotModified was returned.
+func (c *ProjectsGetOrgPolicyCall) Do(opts ...googleapi.CallOption) (*OrgPolicy, error) {
+	gensupport.SetOptions(c.urlParams_, opts...)
+	res, err := c.doRequest("json")
+	if res != nil && res.StatusCode == http.StatusNotModified {
+		if res.Body != nil {
+			res.Body.Close()
+		}
+		return nil, &googleapi.Error{
+			Code:   res.StatusCode,
+			Header: res.Header,
+		}
+	}
+	if err != nil {
+		return nil, err
+	}
+	defer googleapi.CloseBody(res)
+	if err := googleapi.CheckResponse(res); err != nil {
+		return nil, err
+	}
+	ret := &OrgPolicy{
+		ServerResponse: googleapi.ServerResponse{
+			Header:         res.Header,
+			HTTPStatusCode: res.StatusCode,
+		},
+	}
+	target := &ret
+	if err := json.NewDecoder(res.Body).Decode(target); err != nil {
+		return nil, err
+	}
+	return ret, nil
+	// {
+	//   "description": "Gets a `Policy` on a resource.\n\nIf no `Policy` is set on the resource, a `Policy` is returned with default\nvalues including `POLICY_TYPE_NOT_SET` for the `policy_type oneof`. The\n`etag` value can be used with `SetOrgPolicy()` to create or update a\n`Policy` during read-modify-write.",
+	//   "flatPath": "v1/projects/{projectsId}:getOrgPolicy",
+	//   "httpMethod": "POST",
+	//   "id": "cloudresourcemanager.projects.getOrgPolicy",
+	//   "parameterOrder": [
+	//     "resource"
+	//   ],
+	//   "parameters": {
+	//     "resource": {
+	//       "description": "Name of the resource the `Policy` is set on.",
+	//       "location": "path",
+	//       "pattern": "^projects/[^/]+$",
+	//       "required": true,
+	//       "type": "string"
+	//     }
+	//   },
+	//   "path": "v1/{+resource}:getOrgPolicy",
+	//   "request": {
+	//     "$ref": "GetOrgPolicyRequest"
+	//   },
+	//   "response": {
+	//     "$ref": "OrgPolicy"
+	//   },
+	//   "scopes": [
+	//     "https://www.googleapis.com/auth/cloud-platform",
+	//     "https://www.googleapis.com/auth/cloud-platform.read-only"
+	//   ]
+	// }
+
+}
+
+// method id "cloudresourcemanager.projects.getOrgPolicyV1":
+
+type ProjectsGetOrgPolicyV1Call struct {
+	s                   *Service
+	resource            string
+	getorgpolicyrequest *GetOrgPolicyRequest
+	urlParams_          gensupport.URLParams
+	ctx_                context.Context
+	header_             http.Header
+}
+
+// GetOrgPolicyV1: Gets a `Policy` on a resource.
+//
+// If no `Policy` is set on the resource, a `Policy` is returned with
+// default
+// values including `POLICY_TYPE_NOT_SET` for the `policy_type oneof`.
+// The
+// `etag` value can be used with `SetOrgPolicy()` to create or update
+// a
+// `Policy` during read-modify-write.
+func (r *ProjectsService) GetOrgPolicyV1(resource string, getorgpolicyrequest *GetOrgPolicyRequest) *ProjectsGetOrgPolicyV1Call {
+	c := &ProjectsGetOrgPolicyV1Call{s: r.s, urlParams_: make(gensupport.URLParams)}
+	c.resource = resource
+	c.getorgpolicyrequest = getorgpolicyrequest
+	return c
+}
+
+// Fields allows partial responses to be retrieved. See
+// https://developers.google.com/gdata/docs/2.0/basics#PartialResponse
+// for more information.
+func (c *ProjectsGetOrgPolicyV1Call) Fields(s ...googleapi.Field) *ProjectsGetOrgPolicyV1Call {
+	c.urlParams_.Set("fields", googleapi.CombineFields(s))
+	return c
+}
+
+// Context sets the context to be used in this call's Do method. Any
+// pending HTTP request will be aborted if the provided context is
+// canceled.
+func (c *ProjectsGetOrgPolicyV1Call) Context(ctx context.Context) *ProjectsGetOrgPolicyV1Call {
+	c.ctx_ = ctx
+	return c
+}
+
+// Header returns an http.Header that can be modified by the caller to
+// add HTTP headers to the request.
+func (c *ProjectsGetOrgPolicyV1Call) Header() http.Header {
+	if c.header_ == nil {
+		c.header_ = make(http.Header)
+	}
+	return c.header_
+}
+
+func (c *ProjectsGetOrgPolicyV1Call) doRequest(alt string) (*http.Response, error) {
+	reqHeaders := make(http.Header)
+	for k, v := range c.header_ {
+		reqHeaders[k] = v
+	}
+	reqHeaders.Set("User-Agent", c.s.userAgent())
+	var body io.Reader = nil
+	body, err := googleapi.WithoutDataWrapper.JSONReader(c.getorgpolicyrequest)
+	if err != nil {
+		return nil, err
+	}
+	reqHeaders.Set("Content-Type", "application/json")
+	c.urlParams_.Set("alt", alt)
+	urls := googleapi.ResolveRelative(c.s.BasePath, "v1/{+resource}:getOrgPolicyV1")
+	urls += "?" + c.urlParams_.Encode()
+	req, _ := http.NewRequest("POST", urls, body)
+	req.Header = reqHeaders
+	googleapi.Expand(req.URL, map[string]string{
+		"resource": c.resource,
+	})
+	return gensupport.SendRequest(c.ctx_, c.s.client, req)
+}
+
+// Do executes the "cloudresourcemanager.projects.getOrgPolicyV1" call.
+// Exactly one of *OrgPolicy or error will be non-nil. Any non-2xx
+// status code is an error. Response headers are in either
+// *OrgPolicy.ServerResponse.Header or (if a response was returned at
+// all) in error.(*googleapi.Error).Header. Use googleapi.IsNotModified
+// to check whether the returned error was because
+// http.StatusNotModified was returned.
+func (c *ProjectsGetOrgPolicyV1Call) Do(opts ...googleapi.CallOption) (*OrgPolicy, error) {
+	gensupport.SetOptions(c.urlParams_, opts...)
+	res, err := c.doRequest("json")
+	if res != nil && res.StatusCode == http.StatusNotModified {
+		if res.Body != nil {
+			res.Body.Close()
+		}
+		return nil, &googleapi.Error{
+			Code:   res.StatusCode,
+			Header: res.Header,
+		}
+	}
+	if err != nil {
+		return nil, err
+	}
+	defer googleapi.CloseBody(res)
+	if err := googleapi.CheckResponse(res); err != nil {
+		return nil, err
+	}
+	ret := &OrgPolicy{
+		ServerResponse: googleapi.ServerResponse{
+			Header:         res.Header,
+			HTTPStatusCode: res.StatusCode,
+		},
+	}
+	target := &ret
+	if err := json.NewDecoder(res.Body).Decode(target); err != nil {
+		return nil, err
+	}
+	return ret, nil
+	// {
+	//   "description": "Gets a `Policy` on a resource.\n\nIf no `Policy` is set on the resource, a `Policy` is returned with default\nvalues including `POLICY_TYPE_NOT_SET` for the `policy_type oneof`. The\n`etag` value can be used with `SetOrgPolicy()` to create or update a\n`Policy` during read-modify-write.",
+	//   "flatPath": "v1/projects/{projectsId}:getOrgPolicyV1",
+	//   "httpMethod": "POST",
+	//   "id": "cloudresourcemanager.projects.getOrgPolicyV1",
+	//   "parameterOrder": [
+	//     "resource"
+	//   ],
+	//   "parameters": {
+	//     "resource": {
+	//       "description": "Name of the resource the `Policy` is set on.",
+	//       "location": "path",
+	//       "pattern": "^projects/[^/]+$",
+	//       "required": true,
+	//       "type": "string"
+	//     }
+	//   },
+	//   "path": "v1/{+resource}:getOrgPolicyV1",
+	//   "request": {
+	//     "$ref": "GetOrgPolicyRequest"
+	//   },
+	//   "response": {
+	//     "$ref": "OrgPolicy"
+	//   },
+	//   "scopes": [
+	//     "https://www.googleapis.com/auth/cloud-platform",
+	//     "https://www.googleapis.com/auth/cloud-platform.read-only"
+	//   ]
+	// }
+
+}
+
 // method id "cloudresourcemanager.projects.list":
 
 type ProjectsListCall struct {
@@ -3567,8 +8092,8 @@
 // `color`.|
 // |labels.color:red|The project's label `color` has the value
 // `red`.|
-// |labels.color:red&nbsp;label.size:big|The project's label `color` has
-// the
+// |labels.color:red&nbsp;labels.size:big|The project's label `color`
+// has the
 // value `red` and its label `size` has the value `big`.
 func (c *ProjectsListCall) Filter(filter string) *ProjectsListCall {
 	c.urlParams_.Set("filter", filter)
@@ -3690,7 +8215,7 @@
 	//   "parameterOrder": [],
 	//   "parameters": {
 	//     "filter": {
-	//       "description": "An expression for filtering the results of the request.  Filter rules are\ncase insensitive. The fields eligible for filtering are:\n\n+ `name`\n+ `id`\n+ \u003ccode\u003elabels.\u003cem\u003ekey\u003c/em\u003e\u003c/code\u003e where *key* is the name of a label\n\nSome examples of using labels as filters:\n\n|Filter|Description|\n|------|-----------|\n|name:*|The project has a name.|\n|name:Howl|The project's name is `Howl` or `howl`.|\n|name:HOWL|Equivalent to above.|\n|NAME:howl|Equivalent to above.|\n|labels.color:*|The project has the label `color`.|\n|labels.color:red|The project's label `color` has the value `red`.|\n|labels.color:red\u0026nbsp;label.size:big|The project's label `color` has the\nvalue `red` and its label `size` has the value `big`.\n\nOptional.",
+	//       "description": "An expression for filtering the results of the request.  Filter rules are\ncase insensitive. The fields eligible for filtering are:\n\n+ `name`\n+ `id`\n+ \u003ccode\u003elabels.\u003cem\u003ekey\u003c/em\u003e\u003c/code\u003e where *key* is the name of a label\n\nSome examples of using labels as filters:\n\n|Filter|Description|\n|------|-----------|\n|name:*|The project has a name.|\n|name:Howl|The project's name is `Howl` or `howl`.|\n|name:HOWL|Equivalent to above.|\n|NAME:howl|Equivalent to above.|\n|labels.color:*|The project has the label `color`.|\n|labels.color:red|The project's label `color` has the value `red`.|\n|labels.color:red\u0026nbsp;labels.size:big|The project's label `color` has the\nvalue `red` and its label `size` has the value `big`.\n\nOptional.",
 	//       "location": "query",
 	//       "type": "string"
 	//     },
@@ -3739,6 +8264,324 @@
 	}
 }
 
+// method id "cloudresourcemanager.projects.listAvailableOrgPolicyConstraints":
+
+type ProjectsListAvailableOrgPolicyConstraintsCall struct {
+	s                                        *Service
+	resource                                 string
+	listavailableorgpolicyconstraintsrequest *ListAvailableOrgPolicyConstraintsRequest
+	urlParams_                               gensupport.URLParams
+	ctx_                                     context.Context
+	header_                                  http.Header
+}
+
+// ListAvailableOrgPolicyConstraints: Lists `Constraints` that could be
+// applied on the specified resource.
+func (r *ProjectsService) ListAvailableOrgPolicyConstraints(resource string, listavailableorgpolicyconstraintsrequest *ListAvailableOrgPolicyConstraintsRequest) *ProjectsListAvailableOrgPolicyConstraintsCall {
+	c := &ProjectsListAvailableOrgPolicyConstraintsCall{s: r.s, urlParams_: make(gensupport.URLParams)}
+	c.resource = resource
+	c.listavailableorgpolicyconstraintsrequest = listavailableorgpolicyconstraintsrequest
+	return c
+}
+
+// Fields allows partial responses to be retrieved. See
+// https://developers.google.com/gdata/docs/2.0/basics#PartialResponse
+// for more information.
+func (c *ProjectsListAvailableOrgPolicyConstraintsCall) Fields(s ...googleapi.Field) *ProjectsListAvailableOrgPolicyConstraintsCall {
+	c.urlParams_.Set("fields", googleapi.CombineFields(s))
+	return c
+}
+
+// Context sets the context to be used in this call's Do method. Any
+// pending HTTP request will be aborted if the provided context is
+// canceled.
+func (c *ProjectsListAvailableOrgPolicyConstraintsCall) Context(ctx context.Context) *ProjectsListAvailableOrgPolicyConstraintsCall {
+	c.ctx_ = ctx
+	return c
+}
+
+// Header returns an http.Header that can be modified by the caller to
+// add HTTP headers to the request.
+func (c *ProjectsListAvailableOrgPolicyConstraintsCall) Header() http.Header {
+	if c.header_ == nil {
+		c.header_ = make(http.Header)
+	}
+	return c.header_
+}
+
+func (c *ProjectsListAvailableOrgPolicyConstraintsCall) doRequest(alt string) (*http.Response, error) {
+	reqHeaders := make(http.Header)
+	for k, v := range c.header_ {
+		reqHeaders[k] = v
+	}
+	reqHeaders.Set("User-Agent", c.s.userAgent())
+	var body io.Reader = nil
+	body, err := googleapi.WithoutDataWrapper.JSONReader(c.listavailableorgpolicyconstraintsrequest)
+	if err != nil {
+		return nil, err
+	}
+	reqHeaders.Set("Content-Type", "application/json")
+	c.urlParams_.Set("alt", alt)
+	urls := googleapi.ResolveRelative(c.s.BasePath, "v1/{+resource}:listAvailableOrgPolicyConstraints")
+	urls += "?" + c.urlParams_.Encode()
+	req, _ := http.NewRequest("POST", urls, body)
+	req.Header = reqHeaders
+	googleapi.Expand(req.URL, map[string]string{
+		"resource": c.resource,
+	})
+	return gensupport.SendRequest(c.ctx_, c.s.client, req)
+}
+
+// Do executes the "cloudresourcemanager.projects.listAvailableOrgPolicyConstraints" call.
+// Exactly one of *ListAvailableOrgPolicyConstraintsResponse or error
+// will be non-nil. Any non-2xx status code is an error. Response
+// headers are in either
+// *ListAvailableOrgPolicyConstraintsResponse.ServerResponse.Header or
+// (if a response was returned at all) in
+// error.(*googleapi.Error).Header. Use googleapi.IsNotModified to check
+// whether the returned error was because http.StatusNotModified was
+// returned.
+func (c *ProjectsListAvailableOrgPolicyConstraintsCall) Do(opts ...googleapi.CallOption) (*ListAvailableOrgPolicyConstraintsResponse, error) {
+	gensupport.SetOptions(c.urlParams_, opts...)
+	res, err := c.doRequest("json")
+	if res != nil && res.StatusCode == http.StatusNotModified {
+		if res.Body != nil {
+			res.Body.Close()
+		}
+		return nil, &googleapi.Error{
+			Code:   res.StatusCode,
+			Header: res.Header,
+		}
+	}
+	if err != nil {
+		return nil, err
+	}
+	defer googleapi.CloseBody(res)
+	if err := googleapi.CheckResponse(res); err != nil {
+		return nil, err
+	}
+	ret := &ListAvailableOrgPolicyConstraintsResponse{
+		ServerResponse: googleapi.ServerResponse{
+			Header:         res.Header,
+			HTTPStatusCode: res.StatusCode,
+		},
+	}
+	target := &ret
+	if err := json.NewDecoder(res.Body).Decode(target); err != nil {
+		return nil, err
+	}
+	return ret, nil
+	// {
+	//   "description": "Lists `Constraints` that could be applied on the specified resource.",
+	//   "flatPath": "v1/projects/{projectsId}:listAvailableOrgPolicyConstraints",
+	//   "httpMethod": "POST",
+	//   "id": "cloudresourcemanager.projects.listAvailableOrgPolicyConstraints",
+	//   "parameterOrder": [
+	//     "resource"
+	//   ],
+	//   "parameters": {
+	//     "resource": {
+	//       "description": "Name of the resource to list `Constraints` for.",
+	//       "location": "path",
+	//       "pattern": "^projects/[^/]+$",
+	//       "required": true,
+	//       "type": "string"
+	//     }
+	//   },
+	//   "path": "v1/{+resource}:listAvailableOrgPolicyConstraints",
+	//   "request": {
+	//     "$ref": "ListAvailableOrgPolicyConstraintsRequest"
+	//   },
+	//   "response": {
+	//     "$ref": "ListAvailableOrgPolicyConstraintsResponse"
+	//   },
+	//   "scopes": [
+	//     "https://www.googleapis.com/auth/cloud-platform",
+	//     "https://www.googleapis.com/auth/cloud-platform.read-only"
+	//   ]
+	// }
+
+}
+
+// Pages invokes f for each page of results.
+// A non-nil error returned from f will halt the iteration.
+// The provided context supersedes any context provided to the Context method.
+func (c *ProjectsListAvailableOrgPolicyConstraintsCall) Pages(ctx context.Context, f func(*ListAvailableOrgPolicyConstraintsResponse) error) error {
+	c.ctx_ = ctx
+	defer func(pt string) { c.listavailableorgpolicyconstraintsrequest.PageToken = pt }(c.listavailableorgpolicyconstraintsrequest.PageToken) // reset paging to original point
+	for {
+		x, err := c.Do()
+		if err != nil {
+			return err
+		}
+		if err := f(x); err != nil {
+			return err
+		}
+		if x.NextPageToken == "" {
+			return nil
+		}
+		c.listavailableorgpolicyconstraintsrequest.PageToken = x.NextPageToken
+	}
+}
+
+// method id "cloudresourcemanager.projects.listOrgPolicies":
+
+type ProjectsListOrgPoliciesCall struct {
+	s                      *Service
+	resource               string
+	listorgpoliciesrequest *ListOrgPoliciesRequest
+	urlParams_             gensupport.URLParams
+	ctx_                   context.Context
+	header_                http.Header
+}
+
+// ListOrgPolicies: Lists all the `Policies` set for a particular
+// resource.
+func (r *ProjectsService) ListOrgPolicies(resource string, listorgpoliciesrequest *ListOrgPoliciesRequest) *ProjectsListOrgPoliciesCall {
+	c := &ProjectsListOrgPoliciesCall{s: r.s, urlParams_: make(gensupport.URLParams)}
+	c.resource = resource
+	c.listorgpoliciesrequest = listorgpoliciesrequest
+	return c
+}
+
+// Fields allows partial responses to be retrieved. See
+// https://developers.google.com/gdata/docs/2.0/basics#PartialResponse
+// for more information.
+func (c *ProjectsListOrgPoliciesCall) Fields(s ...googleapi.Field) *ProjectsListOrgPoliciesCall {
+	c.urlParams_.Set("fields", googleapi.CombineFields(s))
+	return c
+}
+
+// Context sets the context to be used in this call's Do method. Any
+// pending HTTP request will be aborted if the provided context is
+// canceled.
+func (c *ProjectsListOrgPoliciesCall) Context(ctx context.Context) *ProjectsListOrgPoliciesCall {
+	c.ctx_ = ctx
+	return c
+}
+
+// Header returns an http.Header that can be modified by the caller to
+// add HTTP headers to the request.
+func (c *ProjectsListOrgPoliciesCall) Header() http.Header {
+	if c.header_ == nil {
+		c.header_ = make(http.Header)
+	}
+	return c.header_
+}
+
+func (c *ProjectsListOrgPoliciesCall) doRequest(alt string) (*http.Response, error) {
+	reqHeaders := make(http.Header)
+	for k, v := range c.header_ {
+		reqHeaders[k] = v
+	}
+	reqHeaders.Set("User-Agent", c.s.userAgent())
+	var body io.Reader = nil
+	body, err := googleapi.WithoutDataWrapper.JSONReader(c.listorgpoliciesrequest)
+	if err != nil {
+		return nil, err
+	}
+	reqHeaders.Set("Content-Type", "application/json")
+	c.urlParams_.Set("alt", alt)
+	urls := googleapi.ResolveRelative(c.s.BasePath, "v1/{+resource}:listOrgPolicies")
+	urls += "?" + c.urlParams_.Encode()
+	req, _ := http.NewRequest("POST", urls, body)
+	req.Header = reqHeaders
+	googleapi.Expand(req.URL, map[string]string{
+		"resource": c.resource,
+	})
+	return gensupport.SendRequest(c.ctx_, c.s.client, req)
+}
+
+// Do executes the "cloudresourcemanager.projects.listOrgPolicies" call.
+// Exactly one of *ListOrgPoliciesResponse or error will be non-nil. Any
+// non-2xx status code is an error. Response headers are in either
+// *ListOrgPoliciesResponse.ServerResponse.Header or (if a response was
+// returned at all) in error.(*googleapi.Error).Header. Use
+// googleapi.IsNotModified to check whether the returned error was
+// because http.StatusNotModified was returned.
+func (c *ProjectsListOrgPoliciesCall) Do(opts ...googleapi.CallOption) (*ListOrgPoliciesResponse, error) {
+	gensupport.SetOptions(c.urlParams_, opts...)
+	res, err := c.doRequest("json")
+	if res != nil && res.StatusCode == http.StatusNotModified {
+		if res.Body != nil {
+			res.Body.Close()
+		}
+		return nil, &googleapi.Error{
+			Code:   res.StatusCode,
+			Header: res.Header,
+		}
+	}
+	if err != nil {
+		return nil, err
+	}
+	defer googleapi.CloseBody(res)
+	if err := googleapi.CheckResponse(res); err != nil {
+		return nil, err
+	}
+	ret := &ListOrgPoliciesResponse{
+		ServerResponse: googleapi.ServerResponse{
+			Header:         res.Header,
+			HTTPStatusCode: res.StatusCode,
+		},
+	}
+	target := &ret
+	if err := json.NewDecoder(res.Body).Decode(target); err != nil {
+		return nil, err
+	}
+	return ret, nil
+	// {
+	//   "description": "Lists all the `Policies` set for a particular resource.",
+	//   "flatPath": "v1/projects/{projectsId}:listOrgPolicies",
+	//   "httpMethod": "POST",
+	//   "id": "cloudresourcemanager.projects.listOrgPolicies",
+	//   "parameterOrder": [
+	//     "resource"
+	//   ],
+	//   "parameters": {
+	//     "resource": {
+	//       "description": "Name of the resource to list Policies for.",
+	//       "location": "path",
+	//       "pattern": "^projects/[^/]+$",
+	//       "required": true,
+	//       "type": "string"
+	//     }
+	//   },
+	//   "path": "v1/{+resource}:listOrgPolicies",
+	//   "request": {
+	//     "$ref": "ListOrgPoliciesRequest"
+	//   },
+	//   "response": {
+	//     "$ref": "ListOrgPoliciesResponse"
+	//   },
+	//   "scopes": [
+	//     "https://www.googleapis.com/auth/cloud-platform",
+	//     "https://www.googleapis.com/auth/cloud-platform.read-only"
+	//   ]
+	// }
+
+}
+
+// Pages invokes f for each page of results.
+// A non-nil error returned from f will halt the iteration.
+// The provided context supersedes any context provided to the Context method.
+func (c *ProjectsListOrgPoliciesCall) Pages(ctx context.Context, f func(*ListOrgPoliciesResponse) error) error {
+	c.ctx_ = ctx
+	defer func(pt string) { c.listorgpoliciesrequest.PageToken = pt }(c.listorgpoliciesrequest.PageToken) // reset paging to original point
+	for {
+		x, err := c.Do()
+		if err != nil {
+			return err
+		}
+		if err := f(x); err != nil {
+			return err
+		}
+		if x.NextPageToken == "" {
+			return nil
+		}
+		c.listorgpoliciesrequest.PageToken = x.NextPageToken
+	}
+}
+
 // method id "cloudresourcemanager.projects.setIamPolicy":
 
 type ProjectsSetIamPolicyCall struct {
@@ -3785,8 +8628,9 @@
 //
 // + There must be at least one owner who has accepted the Terms
 // of
-// Service (ToS) agreement in the policy. Calling `setIamPolicy()` to
-// to remove the last ToS-accepted owner from the policy will fail.
+// Service (ToS) agreement in the policy. Calling `setIamPolicy()`
+// to
+// remove the last ToS-accepted owner from the policy will fail.
 // This
 // restriction also applies to legacy projects that no longer have
 // owners
@@ -3897,7 +8741,7 @@
 	}
 	return ret, nil
 	// {
-	//   "description": "Sets the IAM access control policy for the specified Project. Replaces\nany existing policy.\n\nThe following constraints apply when using `setIamPolicy()`:\n\n+ Project does not support `allUsers` and `allAuthenticatedUsers` as\n`members` in a `Binding` of a `Policy`.\n\n+ The owner role can be granted only to `user` and `serviceAccount`.\n\n+ Service accounts can be made owners of a project directly\nwithout any restrictions. However, to be added as an owner, a user must be\ninvited via Cloud Platform console and must accept the invitation.\n\n+ A user cannot be granted the owner role using `setIamPolicy()`. The user\nmust be granted the owner role using the Cloud Platform Console and must\nexplicitly accept the invitation.\n\n+ Invitations to grant the owner role cannot be sent using\n`setIamPolicy()`;\nthey must be sent only using the Cloud Platform Console.\n\n+ Membership changes that leave the project without any owners that have\naccepted the Terms of Service (ToS) will be rejected.\n\n+ There must be at least one owner who has accepted the Terms of\nService (ToS) agreement in the policy. Calling `setIamPolicy()` to\nto remove the last ToS-accepted owner from the policy will fail. This\nrestriction also applies to legacy projects that no longer have owners\nwho have accepted the ToS. Edits to IAM policies will be rejected until\nthe lack of a ToS-accepting owner is rectified.\n\n+ Calling this method requires enabling the App Engine Admin API.\n\nNote: Removing service accounts from policies or changing their roles\ncan render services completely inoperable. It is important to understand\nhow the service account is being used before removing or updating its\nroles.",
+	//   "description": "Sets the IAM access control policy for the specified Project. Replaces\nany existing policy.\n\nThe following constraints apply when using `setIamPolicy()`:\n\n+ Project does not support `allUsers` and `allAuthenticatedUsers` as\n`members` in a `Binding` of a `Policy`.\n\n+ The owner role can be granted only to `user` and `serviceAccount`.\n\n+ Service accounts can be made owners of a project directly\nwithout any restrictions. However, to be added as an owner, a user must be\ninvited via Cloud Platform console and must accept the invitation.\n\n+ A user cannot be granted the owner role using `setIamPolicy()`. The user\nmust be granted the owner role using the Cloud Platform Console and must\nexplicitly accept the invitation.\n\n+ Invitations to grant the owner role cannot be sent using\n`setIamPolicy()`;\nthey must be sent only using the Cloud Platform Console.\n\n+ Membership changes that leave the project without any owners that have\naccepted the Terms of Service (ToS) will be rejected.\n\n+ There must be at least one owner who has accepted the Terms of\nService (ToS) agreement in the policy. Calling `setIamPolicy()` to\nremove the last ToS-accepted owner from the policy will fail. This\nrestriction also applies to legacy projects that no longer have owners\nwho have accepted the ToS. Edits to IAM policies will be rejected until\nthe lack of a ToS-accepting owner is rectified.\n\n+ Calling this method requires enabling the App Engine Admin API.\n\nNote: Removing service accounts from policies or changing their roles\ncan render services completely inoperable. It is important to understand\nhow the service account is being used before removing or updating its\nroles.",
 	//   "flatPath": "v1/projects/{resource}:setIamPolicy",
 	//   "httpMethod": "POST",
 	//   "id": "cloudresourcemanager.projects.setIamPolicy",
@@ -3926,6 +8770,288 @@
 
 }
 
+// method id "cloudresourcemanager.projects.setOrgPolicy":
+
+type ProjectsSetOrgPolicyCall struct {
+	s                   *Service
+	resource            string
+	setorgpolicyrequest *SetOrgPolicyRequest
+	urlParams_          gensupport.URLParams
+	ctx_                context.Context
+	header_             http.Header
+}
+
+// SetOrgPolicy: Updates the specified `Policy` on the resource. Creates
+// a new `Policy` for
+// that `Constraint` on the resource if one does not exist.
+//
+// Not supplying an `etag` on the request `Policy` results in an
+// unconditional
+// write of the `Policy`.
+func (r *ProjectsService) SetOrgPolicy(resource string, setorgpolicyrequest *SetOrgPolicyRequest) *ProjectsSetOrgPolicyCall {
+	c := &ProjectsSetOrgPolicyCall{s: r.s, urlParams_: make(gensupport.URLParams)}
+	c.resource = resource
+	c.setorgpolicyrequest = setorgpolicyrequest
+	return c
+}
+
+// Fields allows partial responses to be retrieved. See
+// https://developers.google.com/gdata/docs/2.0/basics#PartialResponse
+// for more information.
+func (c *ProjectsSetOrgPolicyCall) Fields(s ...googleapi.Field) *ProjectsSetOrgPolicyCall {
+	c.urlParams_.Set("fields", googleapi.CombineFields(s))
+	return c
+}
+
+// Context sets the context to be used in this call's Do method. Any
+// pending HTTP request will be aborted if the provided context is
+// canceled.
+func (c *ProjectsSetOrgPolicyCall) Context(ctx context.Context) *ProjectsSetOrgPolicyCall {
+	c.ctx_ = ctx
+	return c
+}
+
+// Header returns an http.Header that can be modified by the caller to
+// add HTTP headers to the request.
+func (c *ProjectsSetOrgPolicyCall) Header() http.Header {
+	if c.header_ == nil {
+		c.header_ = make(http.Header)
+	}
+	return c.header_
+}
+
+func (c *ProjectsSetOrgPolicyCall) doRequest(alt string) (*http.Response, error) {
+	reqHeaders := make(http.Header)
+	for k, v := range c.header_ {
+		reqHeaders[k] = v
+	}
+	reqHeaders.Set("User-Agent", c.s.userAgent())
+	var body io.Reader = nil
+	body, err := googleapi.WithoutDataWrapper.JSONReader(c.setorgpolicyrequest)
+	if err != nil {
+		return nil, err
+	}
+	reqHeaders.Set("Content-Type", "application/json")
+	c.urlParams_.Set("alt", alt)
+	urls := googleapi.ResolveRelative(c.s.BasePath, "v1/{+resource}:setOrgPolicy")
+	urls += "?" + c.urlParams_.Encode()
+	req, _ := http.NewRequest("POST", urls, body)
+	req.Header = reqHeaders
+	googleapi.Expand(req.URL, map[string]string{
+		"resource": c.resource,
+	})
+	return gensupport.SendRequest(c.ctx_, c.s.client, req)
+}
+
+// Do executes the "cloudresourcemanager.projects.setOrgPolicy" call.
+// Exactly one of *OrgPolicy or error will be non-nil. Any non-2xx
+// status code is an error. Response headers are in either
+// *OrgPolicy.ServerResponse.Header or (if a response was returned at
+// all) in error.(*googleapi.Error).Header. Use googleapi.IsNotModified
+// to check whether the returned error was because
+// http.StatusNotModified was returned.
+func (c *ProjectsSetOrgPolicyCall) Do(opts ...googleapi.CallOption) (*OrgPolicy, error) {
+	gensupport.SetOptions(c.urlParams_, opts...)
+	res, err := c.doRequest("json")
+	if res != nil && res.StatusCode == http.StatusNotModified {
+		if res.Body != nil {
+			res.Body.Close()
+		}
+		return nil, &googleapi.Error{
+			Code:   res.StatusCode,
+			Header: res.Header,
+		}
+	}
+	if err != nil {
+		return nil, err
+	}
+	defer googleapi.CloseBody(res)
+	if err := googleapi.CheckResponse(res); err != nil {
+		return nil, err
+	}
+	ret := &OrgPolicy{
+		ServerResponse: googleapi.ServerResponse{
+			Header:         res.Header,
+			HTTPStatusCode: res.StatusCode,
+		},
+	}
+	target := &ret
+	if err := json.NewDecoder(res.Body).Decode(target); err != nil {
+		return nil, err
+	}
+	return ret, nil
+	// {
+	//   "description": "Updates the specified `Policy` on the resource. Creates a new `Policy` for\nthat `Constraint` on the resource if one does not exist.\n\nNot supplying an `etag` on the request `Policy` results in an unconditional\nwrite of the `Policy`.",
+	//   "flatPath": "v1/projects/{projectsId}:setOrgPolicy",
+	//   "httpMethod": "POST",
+	//   "id": "cloudresourcemanager.projects.setOrgPolicy",
+	//   "parameterOrder": [
+	//     "resource"
+	//   ],
+	//   "parameters": {
+	//     "resource": {
+	//       "description": "Resource name of the resource to attach the `Policy`.",
+	//       "location": "path",
+	//       "pattern": "^projects/[^/]+$",
+	//       "required": true,
+	//       "type": "string"
+	//     }
+	//   },
+	//   "path": "v1/{+resource}:setOrgPolicy",
+	//   "request": {
+	//     "$ref": "SetOrgPolicyRequest"
+	//   },
+	//   "response": {
+	//     "$ref": "OrgPolicy"
+	//   },
+	//   "scopes": [
+	//     "https://www.googleapis.com/auth/cloud-platform"
+	//   ]
+	// }
+
+}
+
+// method id "cloudresourcemanager.projects.setOrgPolicyV1":
+
+type ProjectsSetOrgPolicyV1Call struct {
+	s                   *Service
+	resource            string
+	setorgpolicyrequest *SetOrgPolicyRequest
+	urlParams_          gensupport.URLParams
+	ctx_                context.Context
+	header_             http.Header
+}
+
+// SetOrgPolicyV1: Updates the specified `Policy` on the resource.
+// Creates a new `Policy` for
+// that `Constraint` on the resource if one does not exist.
+//
+// Not supplying an `etag` on the request `Policy` results in an
+// unconditional
+// write of the `Policy`.
+func (r *ProjectsService) SetOrgPolicyV1(resource string, setorgpolicyrequest *SetOrgPolicyRequest) *ProjectsSetOrgPolicyV1Call {
+	c := &ProjectsSetOrgPolicyV1Call{s: r.s, urlParams_: make(gensupport.URLParams)}
+	c.resource = resource
+	c.setorgpolicyrequest = setorgpolicyrequest
+	return c
+}
+
+// Fields allows partial responses to be retrieved. See
+// https://developers.google.com/gdata/docs/2.0/basics#PartialResponse
+// for more information.
+func (c *ProjectsSetOrgPolicyV1Call) Fields(s ...googleapi.Field) *ProjectsSetOrgPolicyV1Call {
+	c.urlParams_.Set("fields", googleapi.CombineFields(s))
+	return c
+}
+
+// Context sets the context to be used in this call's Do method. Any
+// pending HTTP request will be aborted if the provided context is
+// canceled.
+func (c *ProjectsSetOrgPolicyV1Call) Context(ctx context.Context) *ProjectsSetOrgPolicyV1Call {
+	c.ctx_ = ctx
+	return c
+}
+
+// Header returns an http.Header that can be modified by the caller to
+// add HTTP headers to the request.
+func (c *ProjectsSetOrgPolicyV1Call) Header() http.Header {
+	if c.header_ == nil {
+		c.header_ = make(http.Header)
+	}
+	return c.header_
+}
+
+func (c *ProjectsSetOrgPolicyV1Call) doRequest(alt string) (*http.Response, error) {
+	reqHeaders := make(http.Header)
+	for k, v := range c.header_ {
+		reqHeaders[k] = v
+	}
+	reqHeaders.Set("User-Agent", c.s.userAgent())
+	var body io.Reader = nil
+	body, err := googleapi.WithoutDataWrapper.JSONReader(c.setorgpolicyrequest)
+	if err != nil {
+		return nil, err
+	}
+	reqHeaders.Set("Content-Type", "application/json")
+	c.urlParams_.Set("alt", alt)
+	urls := googleapi.ResolveRelative(c.s.BasePath, "v1/{+resource}:setOrgPolicyV1")
+	urls += "?" + c.urlParams_.Encode()
+	req, _ := http.NewRequest("POST", urls, body)
+	req.Header = reqHeaders
+	googleapi.Expand(req.URL, map[string]string{
+		"resource": c.resource,
+	})
+	return gensupport.SendRequest(c.ctx_, c.s.client, req)
+}
+
+// Do executes the "cloudresourcemanager.projects.setOrgPolicyV1" call.
+// Exactly one of *OrgPolicy or error will be non-nil. Any non-2xx
+// status code is an error. Response headers are in either
+// *OrgPolicy.ServerResponse.Header or (if a response was returned at
+// all) in error.(*googleapi.Error).Header. Use googleapi.IsNotModified
+// to check whether the returned error was because
+// http.StatusNotModified was returned.
+func (c *ProjectsSetOrgPolicyV1Call) Do(opts ...googleapi.CallOption) (*OrgPolicy, error) {
+	gensupport.SetOptions(c.urlParams_, opts...)
+	res, err := c.doRequest("json")
+	if res != nil && res.StatusCode == http.StatusNotModified {
+		if res.Body != nil {
+			res.Body.Close()
+		}
+		return nil, &googleapi.Error{
+			Code:   res.StatusCode,
+			Header: res.Header,
+		}
+	}
+	if err != nil {
+		return nil, err
+	}
+	defer googleapi.CloseBody(res)
+	if err := googleapi.CheckResponse(res); err != nil {
+		return nil, err
+	}
+	ret := &OrgPolicy{
+		ServerResponse: googleapi.ServerResponse{
+			Header:         res.Header,
+			HTTPStatusCode: res.StatusCode,
+		},
+	}
+	target := &ret
+	if err := json.NewDecoder(res.Body).Decode(target); err != nil {
+		return nil, err
+	}
+	return ret, nil
+	// {
+	//   "description": "Updates the specified `Policy` on the resource. Creates a new `Policy` for\nthat `Constraint` on the resource if one does not exist.\n\nNot supplying an `etag` on the request `Policy` results in an unconditional\nwrite of the `Policy`.",
+	//   "flatPath": "v1/projects/{projectsId}:setOrgPolicyV1",
+	//   "httpMethod": "POST",
+	//   "id": "cloudresourcemanager.projects.setOrgPolicyV1",
+	//   "parameterOrder": [
+	//     "resource"
+	//   ],
+	//   "parameters": {
+	//     "resource": {
+	//       "description": "Resource name of the resource to attach the `Policy`.",
+	//       "location": "path",
+	//       "pattern": "^projects/[^/]+$",
+	//       "required": true,
+	//       "type": "string"
+	//     }
+	//   },
+	//   "path": "v1/{+resource}:setOrgPolicyV1",
+	//   "request": {
+	//     "$ref": "SetOrgPolicyRequest"
+	//   },
+	//   "response": {
+	//     "$ref": "OrgPolicy"
+	//   },
+	//   "scopes": [
+	//     "https://www.googleapis.com/auth/cloud-platform"
+	//   ]
+	// }
+
+}
+
 // method id "cloudresourcemanager.projects.testIamPermissions":
 
 type ProjectsTestIamPermissionsCall struct {
diff --git a/cloudresourcemanager/v1beta1/cloudresourcemanager-api.json b/cloudresourcemanager/v1beta1/cloudresourcemanager-api.json
index 8c74009..c33256f 100644
--- a/cloudresourcemanager/v1beta1/cloudresourcemanager-api.json
+++ b/cloudresourcemanager/v1beta1/cloudresourcemanager-api.json
@@ -1,14 +1,250 @@
 {
-  "batchPath": "batch",
-  "id": "cloudresourcemanager:v1beta1",
-  "documentationLink": "https://cloud.google.com/resource-manager",
-  "revision": "20170301",
-  "title": "Google Cloud Resource Manager API",
-  "ownerName": "Google",
-  "discoveryVersion": "v1",
   "resources": {
     "projects": {
       "methods": {
+        "get": {
+          "description": "Retrieves the Project identified by the specified\n`project_id` (for example, `my-project-123`).\n\nThe caller must have read permissions for this Project.",
+          "httpMethod": "GET",
+          "parameterOrder": [
+            "projectId"
+          ],
+          "response": {
+            "$ref": "Project"
+          },
+          "parameters": {
+            "projectId": {
+              "location": "path",
+              "description": "The Project ID (for example, `my-project-123`).\n\nRequired.",
+              "required": true,
+              "type": "string"
+            }
+          },
+          "scopes": [
+            "https://www.googleapis.com/auth/cloud-platform",
+            "https://www.googleapis.com/auth/cloud-platform.read-only"
+          ],
+          "flatPath": "v1beta1/projects/{projectId}",
+          "id": "cloudresourcemanager.projects.get",
+          "path": "v1beta1/projects/{projectId}"
+        },
+        "undelete": {
+          "response": {
+            "$ref": "Empty"
+          },
+          "parameterOrder": [
+            "projectId"
+          ],
+          "httpMethod": "POST",
+          "parameters": {
+            "projectId": {
+              "required": true,
+              "type": "string",
+              "location": "path",
+              "description": "The project ID (for example, `foo-bar-123`).\n\nRequired."
+            }
+          },
+          "scopes": [
+            "https://www.googleapis.com/auth/cloud-platform"
+          ],
+          "flatPath": "v1beta1/projects/{projectId}:undelete",
+          "path": "v1beta1/projects/{projectId}:undelete",
+          "id": "cloudresourcemanager.projects.undelete",
+          "request": {
+            "$ref": "UndeleteProjectRequest"
+          },
+          "description": "Restores the Project identified by the specified\n`project_id` (for example, `my-project-123`).\nYou can only use this method for a Project that has a lifecycle state of\nDELETE_REQUESTED.\nAfter deletion starts, the Project cannot be restored.\n\nThe caller must have modify permissions for this Project."
+        },
+        "update": {
+          "response": {
+            "$ref": "Project"
+          },
+          "parameterOrder": [
+            "projectId"
+          ],
+          "httpMethod": "PUT",
+          "parameters": {
+            "projectId": {
+              "location": "path",
+              "description": "The project ID (for example, `my-project-123`).\n\nRequired.",
+              "required": true,
+              "type": "string"
+            }
+          },
+          "scopes": [
+            "https://www.googleapis.com/auth/cloud-platform"
+          ],
+          "flatPath": "v1beta1/projects/{projectId}",
+          "path": "v1beta1/projects/{projectId}",
+          "id": "cloudresourcemanager.projects.update",
+          "request": {
+            "$ref": "Project"
+          },
+          "description": "Updates the attributes of the Project identified by the specified\n`project_id` (for example, `my-project-123`).\n\nThe caller must have modify permissions for this Project."
+        },
+        "getAncestry": {
+          "request": {
+            "$ref": "GetAncestryRequest"
+          },
+          "description": "Gets a list of ancestors in the resource hierarchy for the Project\nidentified by the specified `project_id` (for example, `my-project-123`).\n\nThe caller must have read permissions for this Project.",
+          "httpMethod": "POST",
+          "parameterOrder": [
+            "projectId"
+          ],
+          "response": {
+            "$ref": "GetAncestryResponse"
+          },
+          "parameters": {
+            "projectId": {
+              "required": true,
+              "type": "string",
+              "location": "path",
+              "description": "The Project ID (for example, `my-project-123`).\n\nRequired."
+            }
+          },
+          "scopes": [
+            "https://www.googleapis.com/auth/cloud-platform",
+            "https://www.googleapis.com/auth/cloud-platform.read-only"
+          ],
+          "flatPath": "v1beta1/projects/{projectId}:getAncestry",
+          "id": "cloudresourcemanager.projects.getAncestry",
+          "path": "v1beta1/projects/{projectId}:getAncestry"
+        },
+        "testIamPermissions": {
+          "httpMethod": "POST",
+          "parameterOrder": [
+            "resource"
+          ],
+          "response": {
+            "$ref": "TestIamPermissionsResponse"
+          },
+          "parameters": {
+            "resource": {
+              "required": true,
+              "type": "string",
+              "location": "path",
+              "description": "REQUIRED: The resource for which the policy detail is being requested.\nSee the operation documentation for the appropriate value for this field."
+            }
+          },
+          "scopes": [
+            "https://www.googleapis.com/auth/cloud-platform",
+            "https://www.googleapis.com/auth/cloud-platform.read-only"
+          ],
+          "flatPath": "v1beta1/projects/{resource}:testIamPermissions",
+          "id": "cloudresourcemanager.projects.testIamPermissions",
+          "path": "v1beta1/projects/{resource}:testIamPermissions",
+          "request": {
+            "$ref": "TestIamPermissionsRequest"
+          },
+          "description": "Returns permissions that a caller has on the specified Project."
+        },
+        "delete": {
+          "flatPath": "v1beta1/projects/{projectId}",
+          "id": "cloudresourcemanager.projects.delete",
+          "path": "v1beta1/projects/{projectId}",
+          "description": "Marks the Project identified by the specified\n`project_id` (for example, `my-project-123`) for deletion.\nThis method will only affect the Project if the following criteria are met:\n\n+ The Project does not have a billing account associated with it.\n+ The Project has a lifecycle state of\nACTIVE.\n\nThis method changes the Project's lifecycle state from\nACTIVE\nto DELETE_REQUESTED.\nThe deletion starts at an unspecified time, at which point the project is\nno longer accessible.\n\nUntil the deletion completes, you can check the lifecycle state\nchecked by retrieving the Project with GetProject,\nand the Project remains visible to ListProjects.\nHowever, you cannot update the project.\n\nAfter the deletion completes, the Project is not retrievable by\nthe  GetProject and\nListProjects methods.\n\nThe caller must have modify permissions for this Project.",
+          "httpMethod": "DELETE",
+          "parameterOrder": [
+            "projectId"
+          ],
+          "response": {
+            "$ref": "Empty"
+          },
+          "parameters": {
+            "projectId": {
+              "required": true,
+              "type": "string",
+              "location": "path",
+              "description": "The Project ID (for example, `foo-bar-123`).\n\nRequired."
+            }
+          },
+          "scopes": [
+            "https://www.googleapis.com/auth/cloud-platform"
+          ]
+        },
+        "list": {
+          "flatPath": "v1beta1/projects",
+          "path": "v1beta1/projects",
+          "id": "cloudresourcemanager.projects.list",
+          "description": "Lists Projects that are visible to the user and satisfy the\nspecified filter. This method returns Projects in an unspecified order.\nNew Projects do not necessarily appear at the end of the list.",
+          "response": {
+            "$ref": "ListProjectsResponse"
+          },
+          "parameterOrder": [],
+          "httpMethod": "GET",
+          "scopes": [
+            "https://www.googleapis.com/auth/cloud-platform",
+            "https://www.googleapis.com/auth/cloud-platform.read-only"
+          ],
+          "parameters": {
+            "filter": {
+              "location": "query",
+              "description": "An expression for filtering the results of the request.  Filter rules are\ncase insensitive. The fields eligible for filtering are:\n\n+ `name`\n+ `id`\n+ \u003ccode\u003elabels.\u003cem\u003ekey\u003c/em\u003e\u003c/code\u003e where *key* is the name of a label\n\nSome examples of using labels as filters:\n\n|Filter|Description|\n|------|-----------|\n|name:*|The project has a name.|\n|name:Howl|The project's name is `Howl` or `howl`.|\n|name:HOWL|Equivalent to above.|\n|NAME:howl|Equivalent to above.|\n|labels.color:*|The project has the label `color`.|\n|labels.color:red|The project's label `color` has the value `red`.|\n|labels.color:red&nbsp;labels.size:big|The project's label `color` has the value `red` and its label `size` has the value `big`.\n\nOptional.",
+              "type": "string"
+            },
+            "pageToken": {
+              "location": "query",
+              "description": "A pagination token returned from a previous call to ListProjects\nthat indicates from where listing should continue.\n\nOptional.",
+              "type": "string"
+            },
+            "pageSize": {
+              "location": "query",
+              "description": "The maximum number of Projects to return in the response.\nThe server can return fewer Projects than requested.\nIf unspecified, server picks an appropriate default.\n\nOptional.",
+              "format": "int32",
+              "type": "integer"
+            }
+          }
+        },
+        "setIamPolicy": {
+          "response": {
+            "$ref": "Policy"
+          },
+          "parameterOrder": [
+            "resource"
+          ],
+          "httpMethod": "POST",
+          "scopes": [
+            "https://www.googleapis.com/auth/cloud-platform"
+          ],
+          "parameters": {
+            "resource": {
+              "location": "path",
+              "description": "REQUIRED: The resource for which the policy is being specified.\nSee the operation documentation for the appropriate value for this field.",
+              "required": true,
+              "type": "string"
+            }
+          },
+          "flatPath": "v1beta1/projects/{resource}:setIamPolicy",
+          "path": "v1beta1/projects/{resource}:setIamPolicy",
+          "id": "cloudresourcemanager.projects.setIamPolicy",
+          "description": "Sets the IAM access control policy for the specified Project. Replaces\nany existing policy.\n\nThe following constraints apply when using `setIamPolicy()`:\n\n+ Project does not support `allUsers` and `allAuthenticatedUsers` as\n`members` in a `Binding` of a `Policy`.\n\n+ The owner role can be granted only to `user` and `serviceAccount`.\n\n+ Service accounts can be made owners of a project directly\nwithout any restrictions. However, to be added as an owner, a user must be\ninvited via Cloud Platform console and must accept the invitation.\n\n+ A user cannot be granted the owner role using `setIamPolicy()`. The user\nmust be granted the owner role using the Cloud Platform Console and must\nexplicitly accept the invitation.\n\n+ Invitations to grant the owner role cannot be sent using\n`setIamPolicy()`; they must be sent only using the Cloud Platform Console.\n\n+ Membership changes that leave the project without any owners that have\naccepted the Terms of Service (ToS) will be rejected.\n\n+ There must be at least one owner who has accepted the Terms of\nService (ToS) agreement in the policy. Calling `setIamPolicy()` to\nremove the last ToS-accepted owner from the policy will fail. This\nrestriction also applies to legacy projects that no longer have owners\nwho have accepted the ToS. Edits to IAM policies will be rejected until\nthe lack of a ToS-accepting owner is rectified.\n\n+ Calling this method requires enabling the App Engine Admin API.\n\nNote: Removing service accounts from policies or changing their roles\ncan render services completely inoperable. It is important to understand\nhow the service account is being used before removing or updating its\nroles.",
+          "request": {
+            "$ref": "SetIamPolicyRequest"
+          }
+        },
+        "create": {
+          "description": "Creates a Project resource.\n\nInitially, the Project resource is owned by its creator exclusively.\nThe creator can later grant permission to others to read or update the\nProject.\n\nSeveral APIs are activated automatically for the Project, including\nGoogle Cloud Storage.",
+          "request": {
+            "$ref": "Project"
+          },
+          "httpMethod": "POST",
+          "parameterOrder": [],
+          "response": {
+            "$ref": "Project"
+          },
+          "scopes": [
+            "https://www.googleapis.com/auth/cloud-platform"
+          ],
+          "parameters": {
+            "useLegacyStack": {
+              "location": "query",
+              "description": "A safety hatch to opt out of the new reliable project creation process.",
+              "type": "boolean"
+            }
+          },
+          "flatPath": "v1beta1/projects",
+          "id": "cloudresourcemanager.projects.create",
+          "path": "v1beta1/projects"
+        },
         "getIamPolicy": {
           "httpMethod": "POST",
           "parameterOrder": [
@@ -36,228 +272,41 @@
             "$ref": "GetIamPolicyRequest"
           },
           "description": "Returns the IAM access control policy for the specified Project.\nPermission is denied if the policy or the resource does not exist."
-        },
-        "undelete": {
-          "description": "Restores the Project identified by the specified\n`project_id` (for example, `my-project-123`).\nYou can only use this method for a Project that has a lifecycle state of\nDELETE_REQUESTED.\nAfter deletion starts, the Project cannot be restored.\n\nThe caller must have modify permissions for this Project.",
+        }
+      }
+    },
+    "organizations": {
+      "methods": {
+        "listAvailableOrgPolicyConstraints": {
+          "flatPath": "v1beta1/organizations/{organizationsId}:listAvailableOrgPolicyConstraints",
+          "id": "cloudresourcemanager.organizations.listAvailableOrgPolicyConstraints",
+          "path": "v1beta1/{+resource}:listAvailableOrgPolicyConstraints",
           "request": {
-            "$ref": "UndeleteProjectRequest"
+            "$ref": "ListAvailableOrgPolicyConstraintsRequest"
           },
-          "response": {
-            "$ref": "Empty"
-          },
-          "parameterOrder": [
-            "projectId"
-          ],
+          "description": "Lists `Constraints` that could be applied on the specified resource.",
           "httpMethod": "POST",
-          "scopes": [
-            "https://www.googleapis.com/auth/cloud-platform"
-          ],
-          "parameters": {
-            "projectId": {
-              "location": "path",
-              "description": "The project ID (for example, `foo-bar-123`).\n\nRequired.",
-              "required": true,
-              "type": "string"
-            }
-          },
-          "flatPath": "v1beta1/projects/{projectId}:undelete",
-          "path": "v1beta1/projects/{projectId}:undelete",
-          "id": "cloudresourcemanager.projects.undelete"
-        },
-        "get": {
-          "description": "Retrieves the Project identified by the specified\n`project_id` (for example, `my-project-123`).\n\nThe caller must have read permissions for this Project.",
-          "httpMethod": "GET",
-          "parameterOrder": [
-            "projectId"
-          ],
-          "response": {
-            "$ref": "Project"
-          },
-          "scopes": [
-            "https://www.googleapis.com/auth/cloud-platform",
-            "https://www.googleapis.com/auth/cloud-platform.read-only"
-          ],
-          "parameters": {
-            "projectId": {
-              "location": "path",
-              "description": "The Project ID (for example, `my-project-123`).\n\nRequired.",
-              "required": true,
-              "type": "string"
-            }
-          },
-          "flatPath": "v1beta1/projects/{projectId}",
-          "id": "cloudresourcemanager.projects.get",
-          "path": "v1beta1/projects/{projectId}"
-        },
-        "getAncestry": {
-          "response": {
-            "$ref": "GetAncestryResponse"
-          },
-          "parameterOrder": [
-            "projectId"
-          ],
-          "httpMethod": "POST",
-          "parameters": {
-            "projectId": {
-              "location": "path",
-              "description": "The Project ID (for example, `my-project-123`).\n\nRequired.",
-              "required": true,
-              "type": "string"
-            }
-          },
-          "scopes": [
-            "https://www.googleapis.com/auth/cloud-platform",
-            "https://www.googleapis.com/auth/cloud-platform.read-only"
-          ],
-          "flatPath": "v1beta1/projects/{projectId}:getAncestry",
-          "path": "v1beta1/projects/{projectId}:getAncestry",
-          "id": "cloudresourcemanager.projects.getAncestry",
-          "request": {
-            "$ref": "GetAncestryRequest"
-          },
-          "description": "Gets a list of ancestors in the resource hierarchy for the Project\nidentified by the specified `project_id` (for example, `my-project-123`).\n\nThe caller must have read permissions for this Project."
-        },
-        "update": {
-          "description": "Updates the attributes of the Project identified by the specified\n`project_id` (for example, `my-project-123`).\n\nThe caller must have modify permissions for this Project.",
-          "request": {
-            "$ref": "Project"
-          },
-          "response": {
-            "$ref": "Project"
-          },
-          "parameterOrder": [
-            "projectId"
-          ],
-          "httpMethod": "PUT",
-          "scopes": [
-            "https://www.googleapis.com/auth/cloud-platform"
-          ],
-          "parameters": {
-            "projectId": {
-              "location": "path",
-              "description": "The project ID (for example, `my-project-123`).\n\nRequired.",
-              "required": true,
-              "type": "string"
-            }
-          },
-          "flatPath": "v1beta1/projects/{projectId}",
-          "path": "v1beta1/projects/{projectId}",
-          "id": "cloudresourcemanager.projects.update"
-        },
-        "testIamPermissions": {
-          "request": {
-            "$ref": "TestIamPermissionsRequest"
-          },
-          "description": "Returns permissions that a caller has on the specified Project.",
-          "response": {
-            "$ref": "TestIamPermissionsResponse"
-          },
           "parameterOrder": [
             "resource"
           ],
-          "httpMethod": "POST",
+          "response": {
+            "$ref": "ListAvailableOrgPolicyConstraintsResponse"
+          },
           "parameters": {
             "resource": {
-              "description": "REQUIRED: The resource for which the policy detail is being requested.\nSee the operation documentation for the appropriate value for this field.",
+              "location": "path",
+              "description": "Name of the resource to list `Constraints` for.",
               "required": true,
               "type": "string",
-              "location": "path"
+              "pattern": "^organizations/[^/]+$"
             }
           },
           "scopes": [
             "https://www.googleapis.com/auth/cloud-platform",
             "https://www.googleapis.com/auth/cloud-platform.read-only"
-          ],
-          "flatPath": "v1beta1/projects/{resource}:testIamPermissions",
-          "path": "v1beta1/projects/{resource}:testIamPermissions",
-          "id": "cloudresourcemanager.projects.testIamPermissions"
+          ]
         },
-        "delete": {
-          "response": {
-            "$ref": "Empty"
-          },
-          "parameterOrder": [
-            "projectId"
-          ],
-          "httpMethod": "DELETE",
-          "scopes": [
-            "https://www.googleapis.com/auth/cloud-platform"
-          ],
-          "parameters": {
-            "projectId": {
-              "description": "The Project ID (for example, `foo-bar-123`).\n\nRequired.",
-              "required": true,
-              "type": "string",
-              "location": "path"
-            }
-          },
-          "flatPath": "v1beta1/projects/{projectId}",
-          "path": "v1beta1/projects/{projectId}",
-          "id": "cloudresourcemanager.projects.delete",
-          "description": "Marks the Project identified by the specified\n`project_id` (for example, `my-project-123`) for deletion.\nThis method will only affect the Project if the following criteria are met:\n\n+ The Project does not have a billing account associated with it.\n+ The Project has a lifecycle state of\nACTIVE.\n\nThis method changes the Project's lifecycle state from\nACTIVE\nto DELETE_REQUESTED.\nThe deletion starts at an unspecified time, at which point the project is\nno longer accessible.\n\nUntil the deletion completes, you can check the lifecycle state\nchecked by retrieving the Project with GetProject,\nand the Project remains visible to ListProjects.\nHowever, you cannot update the project.\n\nAfter the deletion completes, the Project is not retrievable by\nthe  GetProject and\nListProjects methods.\n\nThe caller must have modify permissions for this Project."
-        },
-        "list": {
-          "httpMethod": "GET",
-          "parameterOrder": [],
-          "response": {
-            "$ref": "ListProjectsResponse"
-          },
-          "scopes": [
-            "https://www.googleapis.com/auth/cloud-platform",
-            "https://www.googleapis.com/auth/cloud-platform.read-only"
-          ],
-          "parameters": {
-            "pageSize": {
-              "location": "query",
-              "description": "The maximum number of Projects to return in the response.\nThe server can return fewer Projects than requested.\nIf unspecified, server picks an appropriate default.\n\nOptional.",
-              "format": "int32",
-              "type": "integer"
-            },
-            "filter": {
-              "description": "An expression for filtering the results of the request.  Filter rules are\ncase insensitive. The fields eligible for filtering are:\n\n+ `name`\n+ `id`\n+ \u003ccode\u003elabels.\u003cem\u003ekey\u003c/em\u003e\u003c/code\u003e where *key* is the name of a label\n\nSome examples of using labels as filters:\n\n|Filter|Description|\n|------|-----------|\n|name:*|The project has a name.|\n|name:Howl|The project's name is `Howl` or `howl`.|\n|name:HOWL|Equivalent to above.|\n|NAME:howl|Equivalent to above.|\n|labels.color:*|The project has the label `color`.|\n|labels.color:red|The project's label `color` has the value `red`.|\n|labels.color:red&nbsp;label.size:big|The project's label `color` has the value `red` and its label `size` has the value `big`.\n\nOptional.",
-              "type": "string",
-              "location": "query"
-            },
-            "pageToken": {
-              "description": "A pagination token returned from a previous call to ListProjects\nthat indicates from where listing should continue.\n\nOptional.",
-              "type": "string",
-              "location": "query"
-            }
-          },
-          "flatPath": "v1beta1/projects",
-          "id": "cloudresourcemanager.projects.list",
-          "path": "v1beta1/projects",
-          "description": "Lists Projects that are visible to the user and satisfy the\nspecified filter. This method returns Projects in an unspecified order.\nNew Projects do not necessarily appear at the end of the list."
-        },
-        "create": {
-          "request": {
-            "$ref": "Project"
-          },
-          "description": "Creates a Project resource.\n\nInitially, the Project resource is owned by its creator exclusively.\nThe creator can later grant permission to others to read or update the\nProject.\n\nSeveral APIs are activated automatically for the Project, including\nGoogle Cloud Storage.",
-          "response": {
-            "$ref": "Project"
-          },
-          "parameterOrder": [],
-          "httpMethod": "POST",
-          "parameters": {
-            "useLegacyStack": {
-              "location": "query",
-              "description": "A safety hatch to opt out of the new reliable project creation process.",
-              "type": "boolean"
-            }
-          },
-          "scopes": [
-            "https://www.googleapis.com/auth/cloud-platform"
-          ],
-          "flatPath": "v1beta1/projects",
-          "path": "v1beta1/projects",
-          "id": "cloudresourcemanager.projects.create"
-        },
-        "setIamPolicy": {
-          "description": "Sets the IAM access control policy for the specified Project. Replaces\nany existing policy.\n\nThe following constraints apply when using `setIamPolicy()`:\n\n+ Project does not support `allUsers` and `allAuthenticatedUsers` as\n`members` in a `Binding` of a `Policy`.\n\n+ The owner role can be granted only to `user` and `serviceAccount`.\n\n+ Service accounts can be made owners of a project directly\nwithout any restrictions. However, to be added as an owner, a user must be\ninvited via Cloud Platform console and must accept the invitation.\n\n+ A user cannot be granted the owner role using `setIamPolicy()`. The user\nmust be granted the owner role using the Cloud Platform Console and must\nexplicitly accept the invitation.\n\n+ Invitations to grant the owner role cannot be sent using `setIamPolicy()`;\nthey must be sent only using the Cloud Platform Console.\n\n+ Membership changes that leave the project without any owners that have\naccepted the Terms of Service (ToS) will be rejected.\n\n+ There must be at least one owner who has accepted the Terms of\nService (ToS) agreement in the policy. Calling `setIamPolicy()` to\nto remove the last ToS-accepted owner from the policy will fail. This\nrestriction also applies to legacy projects that no longer have owners\nwho have accepted the ToS. Edits to IAM policies will be rejected until\nthe lack of a ToS-accepting owner is rectified.\n\n+ Calling this method requires enabling the App Engine Admin API.\n\nNote: Removing service accounts from policies or changing their roles\ncan render services completely inoperable. It is important to understand\nhow the service account is being used before removing or updating its roles.",
-          "request": {
-            "$ref": "SetIamPolicyRequest"
-          },
+        "getIamPolicy": {
           "httpMethod": "POST",
           "parameterOrder": [
             "resource"
@@ -265,37 +314,300 @@
           "response": {
             "$ref": "Policy"
           },
+          "parameters": {
+            "resource": {
+              "required": true,
+              "type": "string",
+              "pattern": "^organizations/[^/]+$",
+              "location": "path",
+              "description": "REQUIRED: The resource for which the policy is being requested.\nSee the operation documentation for the appropriate value for this field."
+            }
+          },
           "scopes": [
-            "https://www.googleapis.com/auth/cloud-platform"
+            "https://www.googleapis.com/auth/cloud-platform",
+            "https://www.googleapis.com/auth/cloud-platform.read-only"
+          ],
+          "flatPath": "v1beta1/organizations/{organizationsId}:getIamPolicy",
+          "id": "cloudresourcemanager.organizations.getIamPolicy",
+          "path": "v1beta1/{+resource}:getIamPolicy",
+          "request": {
+            "$ref": "GetIamPolicyRequest"
+          },
+          "description": "Gets the access control policy for an Organization resource. May be empty\nif no such policy or resource exists. The `resource` field should be the\norganization's resource name, e.g. \"organizations/123\"."
+        },
+        "getOrgPolicy": {
+          "flatPath": "v1beta1/organizations/{organizationsId}:getOrgPolicy",
+          "id": "cloudresourcemanager.organizations.getOrgPolicy",
+          "path": "v1beta1/{+resource}:getOrgPolicy",
+          "description": "Gets a `Policy` on a resource.\n\nIf no `Policy` is set on the resource, a `Policy` is returned with default\nvalues including `POLICY_TYPE_NOT_SET` for the `policy_type oneof`. The\n`etag` value can be used with `SetOrgPolicy()` to create or update a\n`Policy` during read-modify-write.",
+          "request": {
+            "$ref": "GetOrgPolicyRequest"
+          },
+          "httpMethod": "POST",
+          "parameterOrder": [
+            "resource"
+          ],
+          "response": {
+            "$ref": "OrgPolicy"
+          },
+          "scopes": [
+            "https://www.googleapis.com/auth/cloud-platform",
+            "https://www.googleapis.com/auth/cloud-platform.read-only"
           ],
           "parameters": {
             "resource": {
-              "description": "REQUIRED: The resource for which the policy is being specified.\nSee the operation documentation for the appropriate value for this field.",
+              "location": "path",
+              "description": "Name of the resource the `Policy` is set on.",
               "required": true,
               "type": "string",
-              "location": "path"
+              "pattern": "^organizations/[^/]+$"
+            }
+          }
+        },
+        "getOrgPolicyV1": {
+          "response": {
+            "$ref": "OrgPolicy"
+          },
+          "parameterOrder": [
+            "resource"
+          ],
+          "httpMethod": "POST",
+          "parameters": {
+            "resource": {
+              "location": "path",
+              "description": "Name of the resource the `Policy` is set on.",
+              "required": true,
+              "type": "string",
+              "pattern": "^organizations/[^/]+$"
             }
           },
-          "flatPath": "v1beta1/projects/{resource}:setIamPolicy",
-          "id": "cloudresourcemanager.projects.setIamPolicy",
-          "path": "v1beta1/projects/{resource}:setIamPolicy"
-        }
-      }
-    },
-    "organizations": {
-      "methods": {
-        "get": {
-          "flatPath": "v1beta1/organizations/{organizationsId}",
-          "path": "v1beta1/{+name}",
-          "id": "cloudresourcemanager.organizations.get",
-          "description": "Fetches an Organization resource identified by the specified resource name.",
+          "scopes": [
+            "https://www.googleapis.com/auth/cloud-platform",
+            "https://www.googleapis.com/auth/cloud-platform.read-only"
+          ],
+          "flatPath": "v1beta1/organizations/{organizationsId}:getOrgPolicyV1",
+          "path": "v1beta1/{+resource}:getOrgPolicyV1",
+          "id": "cloudresourcemanager.organizations.getOrgPolicyV1",
+          "request": {
+            "$ref": "GetOrgPolicyRequest"
+          },
+          "description": "Gets a `Policy` on a resource.\n\nIf no `Policy` is set on the resource, a `Policy` is returned with default\nvalues including `POLICY_TYPE_NOT_SET` for the `policy_type oneof`. The\n`etag` value can be used with `SetOrgPolicy()` to create or update a\n`Policy` during read-modify-write."
+        },
+        "getEffectiveOrgPolicy": {
+          "request": {
+            "$ref": "GetEffectiveOrgPolicyRequest"
+          },
+          "description": "Gets the effective `Policy` on a resource. This is the result of merging\n`Policies` in the resource hierarchy. The returned `Policy` will not have\nan `etag`set because it is a computed `Policy` across multiple resources.",
+          "response": {
+            "$ref": "OrgPolicy"
+          },
+          "parameterOrder": [
+            "resource"
+          ],
+          "httpMethod": "POST",
+          "parameters": {
+            "resource": {
+              "required": true,
+              "type": "string",
+              "pattern": "^organizations/[^/]+$",
+              "location": "path",
+              "description": "The name of the resource to start computing the effective `Policy`."
+            }
+          },
+          "scopes": [
+            "https://www.googleapis.com/auth/cloud-platform",
+            "https://www.googleapis.com/auth/cloud-platform.read-only"
+          ],
+          "flatPath": "v1beta1/organizations/{organizationsId}:getEffectiveOrgPolicy",
+          "path": "v1beta1/{+resource}:getEffectiveOrgPolicy",
+          "id": "cloudresourcemanager.organizations.getEffectiveOrgPolicy"
+        },
+        "update": {
           "response": {
             "$ref": "Organization"
           },
           "parameterOrder": [
             "name"
           ],
+          "httpMethod": "PUT",
+          "scopes": [
+            "https://www.googleapis.com/auth/cloud-platform"
+          ],
+          "parameters": {
+            "name": {
+              "location": "path",
+              "description": "Output Only. The resource name of the organization. This is the\norganization's relative path in the API. Its format is\n\"organizations/[organization_id]\". For example, \"organizations/1234\".",
+              "required": true,
+              "type": "string",
+              "pattern": "^organizations/[^/]+$"
+            }
+          },
+          "flatPath": "v1beta1/organizations/{organizationsId}",
+          "path": "v1beta1/{+name}",
+          "id": "cloudresourcemanager.organizations.update",
+          "description": "Updates an Organization resource identified by the specified resource name.",
+          "request": {
+            "$ref": "Organization"
+          }
+        },
+        "setOrgPolicyV1": {
+          "httpMethod": "POST",
+          "parameterOrder": [
+            "resource"
+          ],
+          "response": {
+            "$ref": "OrgPolicy"
+          },
+          "scopes": [
+            "https://www.googleapis.com/auth/cloud-platform"
+          ],
+          "parameters": {
+            "resource": {
+              "required": true,
+              "type": "string",
+              "pattern": "^organizations/[^/]+$",
+              "location": "path",
+              "description": "Resource name of the resource to attach the `Policy`."
+            }
+          },
+          "flatPath": "v1beta1/organizations/{organizationsId}:setOrgPolicyV1",
+          "id": "cloudresourcemanager.organizations.setOrgPolicyV1",
+          "path": "v1beta1/{+resource}:setOrgPolicyV1",
+          "description": "Updates the specified `Policy` on the resource. Creates a new `Policy` for\nthat `Constraint` on the resource if one does not exist.\n\nNot supplying an `etag` on the request `Policy` results in an unconditional\nwrite of the `Policy`.",
+          "request": {
+            "$ref": "SetOrgPolicyRequest"
+          }
+        },
+        "list": {
           "httpMethod": "GET",
+          "parameterOrder": [],
+          "response": {
+            "$ref": "ListOrganizationsResponse"
+          },
+          "parameters": {
+            "pageToken": {
+              "type": "string",
+              "location": "query",
+              "description": "A pagination token returned from a previous call to `ListOrganizations`\nthat indicates from where listing should continue.\nThis field is optional."
+            },
+            "pageSize": {
+              "type": "integer",
+              "location": "query",
+              "description": "The maximum number of Organizations to return in the response.\nThis field is optional.",
+              "format": "int32"
+            },
+            "filter": {
+              "type": "string",
+              "location": "query",
+              "description": "An optional query string used to filter the Organizations to return in\nthe response. Filter rules are case-insensitive.\n\n\nOrganizations may be filtered by `owner.directoryCustomerId` or by\n`domain`, where the domain is a Google for Work domain, for example:\n\n|Filter|Description|\n|------|-----------|\n|owner.directorycustomerid:123456789|Organizations with `owner.directory_customer_id` equal to `123456789`.|\n|domain:google.com|Organizations corresponding to the domain `google.com`.|\n\nThis field is optional."
+            }
+          },
+          "scopes": [
+            "https://www.googleapis.com/auth/cloud-platform",
+            "https://www.googleapis.com/auth/cloud-platform.read-only"
+          ],
+          "flatPath": "v1beta1/organizations",
+          "id": "cloudresourcemanager.organizations.list",
+          "path": "v1beta1/organizations",
+          "description": "Lists Organization resources that are visible to the user and satisfy\nthe specified filter. This method returns Organizations in an unspecified\norder. New Organizations do not necessarily appear at the end of the list."
+        },
+        "setOrgPolicy": {
+          "request": {
+            "$ref": "SetOrgPolicyRequest"
+          },
+          "description": "Updates the specified `Policy` on the resource. Creates a new `Policy` for\nthat `Constraint` on the resource if one does not exist.\n\nNot supplying an `etag` on the request `Policy` results in an unconditional\nwrite of the `Policy`.",
+          "httpMethod": "POST",
+          "parameterOrder": [
+            "resource"
+          ],
+          "response": {
+            "$ref": "OrgPolicy"
+          },
+          "parameters": {
+            "resource": {
+              "location": "path",
+              "description": "Resource name of the resource to attach the `Policy`.",
+              "required": true,
+              "type": "string",
+              "pattern": "^organizations/[^/]+$"
+            }
+          },
+          "scopes": [
+            "https://www.googleapis.com/auth/cloud-platform"
+          ],
+          "flatPath": "v1beta1/organizations/{organizationsId}:setOrgPolicy",
+          "id": "cloudresourcemanager.organizations.setOrgPolicy",
+          "path": "v1beta1/{+resource}:setOrgPolicy"
+        },
+        "clearOrgPolicyV1": {
+          "flatPath": "v1beta1/organizations/{organizationsId}:clearOrgPolicyV1",
+          "path": "v1beta1/{+resource}:clearOrgPolicyV1",
+          "id": "cloudresourcemanager.organizations.clearOrgPolicyV1",
+          "request": {
+            "$ref": "ClearOrgPolicyRequest"
+          },
+          "description": "Clears a `Policy` from a resource.",
+          "response": {
+            "$ref": "Empty"
+          },
+          "parameterOrder": [
+            "resource"
+          ],
+          "httpMethod": "POST",
+          "parameters": {
+            "resource": {
+              "required": true,
+              "type": "string",
+              "pattern": "^organizations/[^/]+$",
+              "location": "path",
+              "description": "Name of the resource for the `Policy` to clear."
+            }
+          },
+          "scopes": [
+            "https://www.googleapis.com/auth/cloud-platform"
+          ]
+        },
+        "listOrgPolicies": {
+          "request": {
+            "$ref": "ListOrgPoliciesRequest"
+          },
+          "description": "Lists all the `Policies` set for a particular resource.",
+          "response": {
+            "$ref": "ListOrgPoliciesResponse"
+          },
+          "parameterOrder": [
+            "resource"
+          ],
+          "httpMethod": "POST",
+          "parameters": {
+            "resource": {
+              "required": true,
+              "type": "string",
+              "pattern": "^organizations/[^/]+$",
+              "location": "path",
+              "description": "Name of the resource to list Policies for."
+            }
+          },
+          "scopes": [
+            "https://www.googleapis.com/auth/cloud-platform",
+            "https://www.googleapis.com/auth/cloud-platform.read-only"
+          ],
+          "flatPath": "v1beta1/organizations/{organizationsId}:listOrgPolicies",
+          "path": "v1beta1/{+resource}:listOrgPolicies",
+          "id": "cloudresourcemanager.organizations.listOrgPolicies"
+        },
+        "get": {
+          "flatPath": "v1beta1/organizations/{organizationsId}",
+          "id": "cloudresourcemanager.organizations.get",
+          "path": "v1beta1/{+name}",
+          "description": "Fetches an Organization resource identified by the specified resource name.",
+          "httpMethod": "GET",
+          "parameterOrder": [
+            "name"
+          ],
+          "response": {
+            "$ref": "Organization"
+          },
           "scopes": [
             "https://www.googleapis.com/auth/cloud-platform",
             "https://www.googleapis.com/auth/cloud-platform.read-only"
@@ -307,47 +619,15 @@
               "type": "string"
             },
             "name": {
+              "location": "path",
               "description": "The resource name of the Organization to fetch, e.g. \"organizations/1234\".",
               "required": true,
               "type": "string",
-              "pattern": "^organizations/[^/]+$",
-              "location": "path"
+              "pattern": "^organizations/[^/]+$"
             }
           }
         },
-        "update": {
-          "response": {
-            "$ref": "Organization"
-          },
-          "parameterOrder": [
-            "name"
-          ],
-          "httpMethod": "PUT",
-          "parameters": {
-            "name": {
-              "description": "Output Only. The resource name of the organization. This is the\norganization's relative path in the API. Its format is\n\"organizations/[organization_id]\". For example, \"organizations/1234\".",
-              "required": true,
-              "type": "string",
-              "pattern": "^organizations/[^/]+$",
-              "location": "path"
-            }
-          },
-          "scopes": [
-            "https://www.googleapis.com/auth/cloud-platform"
-          ],
-          "flatPath": "v1beta1/organizations/{organizationsId}",
-          "path": "v1beta1/{+name}",
-          "id": "cloudresourcemanager.organizations.update",
-          "request": {
-            "$ref": "Organization"
-          },
-          "description": "Updates an Organization resource identified by the specified resource name."
-        },
         "testIamPermissions": {
-          "description": "Returns permissions that a caller has on the specified Organization.\nThe `resource` field should be the organization's resource name,\ne.g. \"organizations/123\".",
-          "request": {
-            "$ref": "TestIamPermissionsRequest"
-          },
           "httpMethod": "POST",
           "parameterOrder": [
             "resource"
@@ -370,70 +650,70 @@
           },
           "flatPath": "v1beta1/organizations/{organizationsId}:testIamPermissions",
           "id": "cloudresourcemanager.organizations.testIamPermissions",
-          "path": "v1beta1/{+resource}:testIamPermissions"
-        },
-        "list": {
-          "description": "Lists Organization resources that are visible to the user and satisfy\nthe specified filter. This method returns Organizations in an unspecified\norder. New Organizations do not necessarily appear at the end of the list.",
-          "response": {
-            "$ref": "ListOrganizationsResponse"
-          },
-          "parameterOrder": [],
-          "httpMethod": "GET",
-          "scopes": [
-            "https://www.googleapis.com/auth/cloud-platform",
-            "https://www.googleapis.com/auth/cloud-platform.read-only"
-          ],
-          "parameters": {
-            "pageSize": {
-              "description": "The maximum number of Organizations to return in the response.\nThis field is optional.",
-              "format": "int32",
-              "type": "integer",
-              "location": "query"
-            },
-            "filter": {
-              "location": "query",
-              "description": "An optional query string used to filter the Organizations to return in\nthe response. Filter rules are case-insensitive.\n\n\nOrganizations may be filtered by `owner.directoryCustomerId` or by\n`domain`, where the domain is a Google for Work domain, for example:\n\n|Filter|Description|\n|------|-----------|\n|owner.directorycustomerid:123456789|Organizations with `owner.directory_customer_id` equal to `123456789`.|\n|domain:google.com|Organizations corresponding to the domain `google.com`.|\n\nThis field is optional.",
-              "type": "string"
-            },
-            "pageToken": {
-              "description": "A pagination token returned from a previous call to `ListOrganizations`\nthat indicates from where listing should continue.\nThis field is optional.",
-              "type": "string",
-              "location": "query"
-            }
-          },
-          "flatPath": "v1beta1/organizations",
-          "path": "v1beta1/organizations",
-          "id": "cloudresourcemanager.organizations.list"
-        },
-        "setIamPolicy": {
-          "description": "Sets the access control policy on an Organization resource. Replaces any\nexisting policy. The `resource` field should be the organization's resource\nname, e.g. \"organizations/123\".",
+          "path": "v1beta1/{+resource}:testIamPermissions",
+          "description": "Returns permissions that a caller has on the specified Organization.\nThe `resource` field should be the organization's resource name,\ne.g. \"organizations/123\".",
           "request": {
-            "$ref": "SetIamPolicyRequest"
-          },
+            "$ref": "TestIamPermissionsRequest"
+          }
+        },
+        "getEffectiveOrgPolicyV1": {
           "response": {
-            "$ref": "Policy"
+            "$ref": "OrgPolicy"
           },
           "parameterOrder": [
             "resource"
           ],
           "httpMethod": "POST",
+          "parameters": {
+            "resource": {
+              "location": "path",
+              "description": "The name of the resource to start computing the effective `Policy`.",
+              "required": true,
+              "type": "string",
+              "pattern": "^organizations/[^/]+$"
+            }
+          },
+          "scopes": [
+            "https://www.googleapis.com/auth/cloud-platform",
+            "https://www.googleapis.com/auth/cloud-platform.read-only"
+          ],
+          "flatPath": "v1beta1/organizations/{organizationsId}:getEffectiveOrgPolicyV1",
+          "path": "v1beta1/{+resource}:getEffectiveOrgPolicyV1",
+          "id": "cloudresourcemanager.organizations.getEffectiveOrgPolicyV1",
+          "request": {
+            "$ref": "GetEffectiveOrgPolicyRequest"
+          },
+          "description": "Gets the effective `Policy` on a resource. This is the result of merging\n`Policies` in the resource hierarchy. The returned `Policy` will not have\nan `etag`set because it is a computed `Policy` across multiple resources."
+        },
+        "clearOrgPolicy": {
+          "response": {
+            "$ref": "Empty"
+          },
+          "parameterOrder": [
+            "resource"
+          ],
+          "httpMethod": "POST",
+          "parameters": {
+            "resource": {
+              "location": "path",
+              "description": "Name of the resource for the `Policy` to clear.",
+              "required": true,
+              "type": "string",
+              "pattern": "^organizations/[^/]+$"
+            }
+          },
           "scopes": [
             "https://www.googleapis.com/auth/cloud-platform"
           ],
-          "parameters": {
-            "resource": {
-              "description": "REQUIRED: The resource for which the policy is being specified.\nSee the operation documentation for the appropriate value for this field.",
-              "required": true,
-              "type": "string",
-              "pattern": "^organizations/[^/]+$",
-              "location": "path"
-            }
+          "flatPath": "v1beta1/organizations/{organizationsId}:clearOrgPolicy",
+          "path": "v1beta1/{+resource}:clearOrgPolicy",
+          "id": "cloudresourcemanager.organizations.clearOrgPolicy",
+          "request": {
+            "$ref": "ClearOrgPolicyRequest"
           },
-          "flatPath": "v1beta1/organizations/{organizationsId}:setIamPolicy",
-          "path": "v1beta1/{+resource}:setIamPolicy",
-          "id": "cloudresourcemanager.organizations.setIamPolicy"
+          "description": "Clears a `Policy` from a resource."
         },
-        "getIamPolicy": {
+        "setIamPolicy": {
           "response": {
             "$ref": "Policy"
           },
@@ -441,102 +721,34 @@
             "resource"
           ],
           "httpMethod": "POST",
-          "scopes": [
-            "https://www.googleapis.com/auth/cloud-platform",
-            "https://www.googleapis.com/auth/cloud-platform.read-only"
-          ],
           "parameters": {
             "resource": {
-              "description": "REQUIRED: The resource for which the policy is being requested.\nSee the operation documentation for the appropriate value for this field.",
+              "location": "path",
+              "description": "REQUIRED: The resource for which the policy is being specified.\nSee the operation documentation for the appropriate value for this field.",
               "required": true,
               "type": "string",
-              "pattern": "^organizations/[^/]+$",
-              "location": "path"
+              "pattern": "^organizations/[^/]+$"
             }
           },
-          "flatPath": "v1beta1/organizations/{organizationsId}:getIamPolicy",
-          "path": "v1beta1/{+resource}:getIamPolicy",
-          "id": "cloudresourcemanager.organizations.getIamPolicy",
-          "description": "Gets the access control policy for an Organization resource. May be empty\nif no such policy or resource exists. The `resource` field should be the\norganization's resource name, e.g. \"organizations/123\".",
+          "scopes": [
+            "https://www.googleapis.com/auth/cloud-platform"
+          ],
+          "flatPath": "v1beta1/organizations/{organizationsId}:setIamPolicy",
+          "path": "v1beta1/{+resource}:setIamPolicy",
+          "id": "cloudresourcemanager.organizations.setIamPolicy",
           "request": {
-            "$ref": "GetIamPolicyRequest"
-          }
+            "$ref": "SetIamPolicyRequest"
+          },
+          "description": "Sets the access control policy on an Organization resource. Replaces any\nexisting policy. The `resource` field should be the organization's resource\nname, e.g. \"organizations/123\"."
         }
       }
     }
   },
   "parameters": {
-    "access_token": {
-      "description": "OAuth access token.",
-      "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"
-    },
-    "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"
-    },
-    "pp": {
-      "description": "Pretty-print response.",
-      "type": "boolean",
-      "default": "true",
-      "location": "query"
-    },
-    "oauth_token": {
-      "description": "OAuth 2.0 token for the current user.",
-      "type": "string",
-      "location": "query"
-    },
-    "bearer_token": {
-      "location": "query",
-      "description": "OAuth bearer token.",
-      "type": "string"
-    },
-    "upload_protocol": {
-      "location": "query",
-      "description": "Upload protocol for media (e.g. \"raw\", \"multipart\").",
-      "type": "string"
-    },
-    "prettyPrint": {
-      "description": "Returns response with indentations and line breaks.",
-      "type": "boolean",
-      "default": "true",
-      "location": "query"
-    },
-    "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\").",
-      "type": "string",
-      "location": "query"
-    },
-    "$.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",
+      "description": "Data format for response.",
+      "default": "json",
       "enum": [
         "json",
         "media",
@@ -547,49 +759,121 @@
         "Responses with Content-Type of application/json",
         "Media download with context-dependent Content-Type",
         "Responses with Content-Type of application/x-protobuf"
-      ],
+      ]
+    },
+    "access_token": {
+      "type": "string",
       "location": "query",
-      "description": "Data format for response.",
-      "default": "json"
+      "description": "OAuth access token."
+    },
+    "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"
+    },
+    "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"
+    },
+    "pp": {
+      "location": "query",
+      "description": "Pretty-print response.",
+      "type": "boolean",
+      "default": "true"
+    },
+    "bearer_token": {
+      "type": "string",
+      "location": "query",
+      "description": "OAuth bearer token."
+    },
+    "oauth_token": {
+      "type": "string",
+      "location": "query",
+      "description": "OAuth 2.0 token for the current user."
+    },
+    "upload_protocol": {
+      "location": "query",
+      "description": "Upload protocol for media (e.g. \"raw\", \"multipart\").",
+      "type": "string"
+    },
+    "prettyPrint": {
+      "location": "query",
+      "description": "Returns response with indentations and line breaks.",
+      "type": "boolean",
+      "default": "true"
+    },
+    "fields": {
+      "location": "query",
+      "description": "Selector specifying which fields to include in a partial response.",
+      "type": "string"
+    },
+    "uploadType": {
+      "type": "string",
+      "location": "query",
+      "description": "Legacy upload protocol for media (e.g. \"media\", \"multipart\")."
+    },
+    "callback": {
+      "location": "query",
+      "description": "JSONP",
+      "type": "string"
+    },
+    "$.xgafv": {
+      "location": "query",
+      "enum": [
+        "1",
+        "2"
+      ],
+      "description": "V1 error format.",
+      "type": "string",
+      "enumDescriptions": [
+        "v1 error format",
+        "v2 error format"
+      ]
     }
   },
   "schemas": {
+    "ListOrgPoliciesRequest": {
+      "description": "The request sent to the ListOrgPolicies method.",
+      "type": "object",
+      "properties": {
+        "pageToken": {
+          "description": "Page token used to retrieve the next page. This is currently unsupported\nand will be ignored. The server may at any point start using this field.",
+          "type": "string"
+        },
+        "pageSize": {
+          "description": "Size of the pages to be returned. This is currently unsupported and will\nbe ignored. The server may at any point start using this field to limit\npage size.",
+          "format": "int32",
+          "type": "integer"
+        }
+      },
+      "id": "ListOrgPoliciesRequest"
+    },
     "AuditConfig": {
-      "description": "Specifies the audit configuration for a service.\nIt consists of which permission types are logged, and what identities, if\nany, are exempted from logging.\nAn AuditConifg must have one or more AuditLogConfigs.\n\nIf there are AuditConfigs for both `allServices` and a specific service,\nthe union of the two AuditConfigs is used for that service: the log_types\nspecified in each AuditConfig are enabled, and the exempted_members in each\nAuditConfig are exempted.\nExample Policy with multiple AuditConfigs:\n{\n  \"audit_configs\": [\n    {\n      \"service\": \"allServices\"\n      \"audit_log_configs\": [\n        {\n          \"log_type\": \"DATA_READ\",\n          \"exempted_members\": [\n            \"user:foo@gmail.com\"\n          ]\n        },\n        {\n          \"log_type\": \"DATA_WRITE\",\n        },\n        {\n          \"log_type\": \"ADMIN_READ\",\n        }\n      ]\n    },\n    {\n      \"service\": \"fooservice@googleapis.com\"\n      \"audit_log_configs\": [\n        {\n          \"log_type\": \"DATA_READ\",\n        },\n        {\n          \"log_type\": \"DATA_WRITE\",\n          \"exempted_members\": [\n            \"user:bar@gmail.com\"\n          ]\n        }\n      ]\n    }\n  ]\n}\nFor fooservice, this policy enables DATA_READ, DATA_WRITE and ADMIN_READ\nlogging. It also exempts foo@gmail.com from DATA_READ logging, and\nbar@gmail.com from DATA_WRITE logging.",
+      "description": "Specifies the audit configuration for a service.\nThe configuration determines which permission types are logged, and what\nidentities, if any, are exempted from logging.\nAn AuditConifg must have one or more AuditLogConfigs.\n\nIf there are AuditConfigs for both `allServices` and a specific service,\nthe union of the two AuditConfigs is used for that service: the log_types\nspecified in each AuditConfig are enabled, and the exempted_members in each\nAuditConfig are exempted.\nExample Policy with multiple AuditConfigs:\n{\n  \"audit_configs\": [\n    {\n      \"service\": \"allServices\"\n      \"audit_log_configs\": [\n        {\n          \"log_type\": \"DATA_READ\",\n          \"exempted_members\": [\n            \"user:foo@gmail.com\"\n          ]\n        },\n        {\n          \"log_type\": \"DATA_WRITE\",\n        },\n        {\n          \"log_type\": \"ADMIN_READ\",\n        }\n      ]\n    },\n    {\n      \"service\": \"fooservice@googleapis.com\"\n      \"audit_log_configs\": [\n        {\n          \"log_type\": \"DATA_READ\",\n        },\n        {\n          \"log_type\": \"DATA_WRITE\",\n          \"exempted_members\": [\n            \"user:bar@gmail.com\"\n          ]\n        }\n      ]\n    }\n  ]\n}\nFor fooservice, this policy enables DATA_READ, DATA_WRITE and ADMIN_READ\nlogging. It also exempts foo@gmail.com from DATA_READ logging, and\nbar@gmail.com from DATA_WRITE logging.",
       "type": "object",
       "properties": {
         "service": {
-          "description": "Specifies a service that will be enabled for audit logging.\nFor example, `resourcemanager`, `storage`, `compute`.\n`allServices` is a special value that covers all services.",
+          "description": "Specifies a service that will be enabled for audit logging.\nFor example, `storage.googleapis.com`, `cloudsql.googleapis.com`.\n`allServices` is a special value that covers all services.",
           "type": "string"
         },
         "auditLogConfigs": {
-          "description": "The configuration for logging of each type of permission.\nNext ID: 4",
           "type": "array",
           "items": {
             "$ref": "AuditLogConfig"
-          }
+          },
+          "description": "The configuration for logging of each type of permission.\nNext ID: 4"
         }
       },
       "id": "AuditConfig"
     },
-    "Ancestor": {
-      "description": "Identifying information for a single ancestor of a project.",
-      "type": "object",
-      "properties": {
-        "resourceId": {
-          "$ref": "ResourceId",
-          "description": "Resource id of the ancestor."
-        }
-      },
-      "id": "Ancestor"
-    },
     "ListOrganizationsResponse": {
       "description": "The response returned from the `ListOrganizations` method.",
       "type": "object",
       "properties": {
         "nextPageToken": {
-          "description": "A pagination token to be used to retrieve the next page of results. If the\nresult is too large to fit within the page size specified in the request,\nthis field will be set with a token that can be used to fetch the next page\nof results. If this field is empty, it indicates that this response\ncontains the last page of results.",
-          "type": "string"
+          "type": "string",
+          "description": "A pagination token to be used to retrieve the next page of results. If the\nresult is too large to fit within the page size specified in the request,\nthis field will be set with a token that can be used to fetch the next page\nof results. If this field is empty, it indicates that this response\ncontains the last page of results."
         },
         "organizations": {
           "description": "The list of Organizations that matched the list query, possibly paginated.",
@@ -601,101 +885,116 @@
       },
       "id": "ListOrganizationsResponse"
     },
-    "SetIamPolicyRequest": {
-      "description": "Request message for `SetIamPolicy` method.",
+    "Constraint": {
+      "description": "A `Constraint` describes a way in which a resource's configuration can be\nrestricted. For example, it controls which cloud services can be activated\nacross an organization, or whether a Compute Engine instance can have\nserial port connections established. `Constraints` can be configured by the\norganization's policy adminstrator to fit the needs of the organzation by\nsetting Policies for `Constraints` at different locations in the\norganization's resource hierarchy. Policies are inherited down the resource\nhierarchy from higher levels, but can also be overridden. For details about\nthe inheritance rules please read about\nPolicies.\n\n`Constraints` have a default behavior determined by the `constraint_default`\nfield, which is the enforcement behavior that is used in the absence of a\n`Policy` being defined or inherited for the resource in question.",
       "type": "object",
       "properties": {
-        "updateMask": {
-          "description": "OPTIONAL: A FieldMask specifying which fields of the policy to modify. Only\nthe fields in the mask will be modified. If no mask is provided, a default\nmask is used:\npaths: \"bindings, etag\"\nThis field is only used by Cloud IAM.",
-          "format": "google-fieldmask",
+        "displayName": {
+          "description": "The human readable name.\n\nMutable.",
           "type": "string"
         },
-        "policy": {
-          "$ref": "Policy",
-          "description": "REQUIRED: The complete policy to be applied to the `resource`. The size of\nthe policy is limited to a few 10s of KB. An empty policy is a\nvalid policy but certain Cloud Platform services (such as Projects)\nmight reject them."
+        "description": {
+          "description": "Detailed description of what this `Constraint` controls as well as how and\nwhere it is enforced.\n\nMutable.",
+          "type": "string"
+        },
+        "booleanConstraint": {
+          "$ref": "BooleanConstraint",
+          "description": "Defines this constraint as being a BooleanConstraint."
+        },
+        "constraintDefault": {
+          "type": "string",
+          "enumDescriptions": [
+            "This is only used for distinguishing unset values and should never be\nused.",
+            "Indicate that all values are allowed for list constraints.\nIndicate that enforcement is off for boolean constraints.",
+            "Indicate that all values are denied for list constraints.\nIndicate that enforcement is on for boolean constraints."
+          ],
+          "enum": [
+            "CONSTRAINT_DEFAULT_UNSPECIFIED",
+            "ALLOW",
+            "DENY"
+          ],
+          "description": "The evaluation behavior of this constraint in the absense of 'Policy'."
+        },
+        "name": {
+          "description": "Immutable value, required to globally be unique. For example,\n`constraints/serviceuser.services`",
+          "type": "string"
+        },
+        "version": {
+          "description": "Version of the `Constraint`. Default version is 0;",
+          "format": "int32",
+          "type": "integer"
+        },
+        "listConstraint": {
+          "$ref": "ListConstraint",
+          "description": "Defines this constraint as being a ListConstraint."
         }
       },
-      "id": "SetIamPolicyRequest"
+      "id": "Constraint"
     },
     "Binding": {
-      "description": "Associates `members` with a `role`.",
       "type": "object",
       "properties": {
         "members": {
-          "description": "Specifies the identities requesting access for a Cloud Platform resource.\n`members` can have the following values:\n\n* `allUsers`: A special identifier that represents anyone who is\n   on the internet; with or without a Google account.\n\n* `allAuthenticatedUsers`: A special identifier that represents anyone\n   who is authenticated with a Google account or a service account.\n\n* `user:{emailid}`: An email address that represents a specific Google\n   account. For example, `alice@gmail.com` or `joe@example.com`.\n\n\n* `serviceAccount:{emailid}`: An email address that represents a service\n   account. For example, `my-other-app@appspot.gserviceaccount.com`.\n\n* `group:{emailid}`: An email address that represents a Google group.\n   For example, `admins@example.com`.\n\n* `domain:{domain}`: A Google Apps domain name that represents all the\n   users of that domain. For example, `google.com` or `example.com`.\n\n",
           "type": "array",
           "items": {
             "type": "string"
-          }
+          },
+          "description": "Specifies the identities requesting access for a Cloud Platform resource.\n`members` can have the following values:\n\n* `allUsers`: A special identifier that represents anyone who is\n   on the internet; with or without a Google account.\n\n* `allAuthenticatedUsers`: A special identifier that represents anyone\n   who is authenticated with a Google account or a service account.\n\n* `user:{emailid}`: An email address that represents a specific Google\n   account. For example, `alice@gmail.com` or `joe@example.com`.\n\n\n* `serviceAccount:{emailid}`: An email address that represents a service\n   account. For example, `my-other-app@appspot.gserviceaccount.com`.\n\n* `group:{emailid}`: An email address that represents a Google group.\n   For example, `admins@example.com`.\n\n* `domain:{domain}`: A Google Apps domain name that represents all the\n   users of that domain. For example, `google.com` or `example.com`.\n\n"
         },
         "role": {
           "description": "Role that is assigned to `members`.\nFor example, `roles/viewer`, `roles/editor`, or `roles/owner`.\nRequired",
           "type": "string"
         }
       },
-      "id": "Binding"
+      "id": "Binding",
+      "description": "Associates `members` with a `role`."
     },
-    "Empty": {
-      "description": "A generic empty message that you can re-use to avoid defining duplicated\nempty messages in your APIs. A typical example is to use it as the request\nor the response type of an API method. For instance:\n\n    service Foo {\n      rpc Bar(google.protobuf.Empty) returns (google.protobuf.Empty);\n    }\n\nThe JSON representation for `Empty` is empty JSON object `{}`.",
-      "type": "object",
-      "properties": {},
-      "id": "Empty"
-    },
-    "Organization": {
-      "description": "The root node in the resource hierarchy to which a particular entity's\n(e.g., company) resources belong.",
+    "GetOrgPolicyRequest": {
       "type": "object",
       "properties": {
-        "organizationId": {
-          "description": "An immutable id for the Organization that is assigned on creation. This\nshould be omitted when creating a new Organization.\nThis field is read-only.\nThis field is deprecated and will be removed in v1. Use name instead.",
-          "type": "string"
-        },
-        "lifecycleState": {
-          "enumDescriptions": [
-            "Unspecified state.  This is only useful for distinguishing unset values.",
-            "The normal and active state.",
-            "The organization has been marked for deletion by the user."
-          ],
-          "enum": [
-            "LIFECYCLE_STATE_UNSPECIFIED",
-            "ACTIVE",
-            "DELETE_REQUESTED"
-          ],
-          "description": "The organization's current lifecycle state. Assigned by the server.\n@OutputOnly",
-          "type": "string"
-        },
-        "displayName": {
-          "description": "A friendly string to be used to refer to the Organization in the UI.\nAssigned by the server, set to the primary domain of the G Suite\ncustomer that owns the organization.\n@OutputOnly",
-          "type": "string"
-        },
-        "creationTime": {
-          "description": "Timestamp when the Organization was created. Assigned by the server.\n@OutputOnly",
-          "format": "google-datetime",
-          "type": "string"
-        },
-        "owner": {
-          "$ref": "OrganizationOwner",
-          "description": "The owner of this Organization. The owner should be specified on\ncreation. Once set, it cannot be changed.\nThis field is required."
-        },
-        "name": {
-          "description": "Output Only. The resource name of the organization. This is the\norganization's relative path in the API. Its format is\n\"organizations/[organization_id]\". For example, \"organizations/1234\".",
-          "type": "string"
+        "constraint": {
+          "type": "string",
+          "description": "Name of the `Constraint` to get the `Policy`."
         }
       },
-      "id": "Organization"
+      "id": "GetOrgPolicyRequest",
+      "description": "The request sent to the GetOrgPolicy method."
     },
-    "UndeleteProjectRequest": {
-      "description": "The request sent to the UndeleteProject\nmethod.",
+    "RestoreDefault": {
+      "description": "Ignores policies set above this resource and restores the\n`constraint_default` enforcement behavior of the specific `Constraint` at\nthis resource.\n\nSuppose that `constraint_default` is set to `ALLOW` for the\n`Constraint` `constraints/serviceuser.services`. Suppose that organization\nfoo.com sets a `Policy` at their Organization resource node that restricts\nthe allowed service activations to deny all service activations. They\ncould then set a `Policy` with the `policy_type` `restore_default` on\nseveral experimental projects, restoring the `constraint_default`\nenforcement of the `Constraint` for only those projects, allowing those\nprojects to have all services activated.",
       "type": "object",
       "properties": {},
-      "id": "UndeleteProjectRequest"
+      "id": "RestoreDefault"
+    },
+    "UndeleteProjectRequest": {
+      "type": "object",
+      "properties": {},
+      "id": "UndeleteProjectRequest",
+      "description": "The request sent to the UndeleteProject\nmethod."
+    },
+    "ClearOrgPolicyRequest": {
+      "type": "object",
+      "properties": {
+        "etag": {
+          "description": "The current version, for concurrency control. Not sending an `etag`\nwill cause the `Policy` to be cleared blindly.",
+          "format": "byte",
+          "type": "string"
+        },
+        "constraint": {
+          "type": "string",
+          "description": "Name of the `Constraint` of the `Policy` to clear."
+        }
+      },
+      "id": "ClearOrgPolicyRequest",
+      "description": "The request sent to the ClearOrgPolicy method."
     },
     "ProjectCreationStatus": {
       "description": "A status object which is used as the `metadata` field for the Operation\nreturned by CreateProject. It provides insight for when significant phases of\nProject creation have completed.",
       "type": "object",
       "properties": {
         "ready": {
-          "description": "True if the project creation process is complete.",
-          "type": "boolean"
+          "type": "boolean",
+          "description": "True if the project creation process is complete."
         },
         "createTime": {
           "description": "Creation time of the project creation workflow.",
@@ -709,8 +1008,13 @@
       },
       "id": "ProjectCreationStatus"
     },
+    "BooleanConstraint": {
+      "type": "object",
+      "properties": {},
+      "id": "BooleanConstraint",
+      "description": "A `Constraint` that is either enforced or not.\n\nFor example a constraint `constraints/compute.disableSerialPortAccess`.\nIf it is enforced on a VM instance, serial port connections will not be\nopened to that instance."
+    },
     "TestIamPermissionsResponse": {
-      "description": "Response message for `TestIamPermissions` method.",
       "type": "object",
       "properties": {
         "permissions": {
@@ -721,7 +1025,8 @@
           }
         }
       },
-      "id": "TestIamPermissionsResponse"
+      "id": "TestIamPermissionsResponse",
+      "description": "Response message for `TestIamPermissions` method."
     },
     "GetIamPolicyRequest": {
       "description": "Request message for `GetIamPolicy` method.",
@@ -729,20 +1034,6 @@
       "properties": {},
       "id": "GetIamPolicyRequest"
     },
-    "GetAncestryResponse": {
-      "description": "Response from the GetAncestry method.",
-      "type": "object",
-      "properties": {
-        "ancestor": {
-          "description": "Ancestors are ordered from bottom to top of the resource hierarchy. The\nfirst ancestor is the project itself, followed by the project's parent,\netc.",
-          "type": "array",
-          "items": {
-            "$ref": "Ancestor"
-          }
-        }
-      },
-      "id": "GetAncestryResponse"
-    },
     "OrganizationOwner": {
       "description": "The entity that owns an Organization. The lifetime of the Organization and\nall of its descendants are bound to the `OrganizationOwner`. If the\n`OrganizationOwner` is deleted, the Organization and all its descendants will\nbe deleted.",
       "type": "object",
@@ -754,6 +1045,348 @@
       },
       "id": "OrganizationOwner"
     },
+    "ListProjectsResponse": {
+      "description": "A page of the response received from the\nListProjects\nmethod.\n\nA paginated response where more pages are available has\n`next_page_token` set. This token can be used in a subsequent request to\nretrieve the next request page.",
+      "type": "object",
+      "properties": {
+        "projects": {
+          "type": "array",
+          "items": {
+            "$ref": "Project"
+          },
+          "description": "The list of Projects that matched the list filter. This list can\nbe paginated."
+        },
+        "nextPageToken": {
+          "description": "Pagination token.\n\nIf the result set is too large to fit in a single response, this token\nis returned. It encodes the position of the current result cursor.\nFeeding this value into a new list request with the `page_token` parameter\ngives the next page of the results.\n\nWhen `next_page_token` is not filled in, there is no next page and\nthe list returned is the last page in the result set.\n\nPagination tokens have a limited lifetime.",
+          "type": "string"
+        }
+      },
+      "id": "ListProjectsResponse"
+    },
+    "Project": {
+      "description": "A Project is a high-level Google Cloud Platform entity.  It is a\ncontainer for ACLs, APIs, App Engine Apps, VMs, and other\nGoogle Cloud Platform resources.",
+      "type": "object",
+      "properties": {
+        "lifecycleState": {
+          "enum": [
+            "LIFECYCLE_STATE_UNSPECIFIED",
+            "ACTIVE",
+            "DELETE_REQUESTED",
+            "DELETE_IN_PROGRESS"
+          ],
+          "description": "The Project lifecycle state.\n\nRead-only.",
+          "type": "string",
+          "enumDescriptions": [
+            "Unspecified state.  This is only used/useful for distinguishing\nunset values.",
+            "The normal and active state.",
+            "The project has been marked for deletion by the user\n(by invoking DeleteProject)\nor by the system (Google Cloud Platform).\nThis can generally be reversed by invoking UndeleteProject.",
+            "This lifecycle state is no longer used and is not returned by the API."
+          ]
+        },
+        "projectNumber": {
+          "description": "The number uniquely identifying the project.\n\nExample: \u003ccode\u003e415104041262\u003c/code\u003e\nRead-only.",
+          "format": "int64",
+          "type": "string"
+        },
+        "parent": {
+          "$ref": "ResourceId",
+          "description": "An optional reference to a parent Resource.\n\nThe only supported parent type is \"organization\". Once set, the parent\ncannot be modified. The `parent` can be set on creation or using the\n`UpdateProject` method; the end user must have the\n`resourcemanager.projects.create` permission on the parent.\n\nRead-write."
+        },
+        "createTime": {
+          "type": "string",
+          "description": "Creation time.\n\nRead-only.",
+          "format": "google-datetime"
+        },
+        "labels": {
+          "type": "object",
+          "additionalProperties": {
+            "type": "string"
+          },
+          "description": "The labels associated with this Project.\n\nLabel keys must be between 1 and 63 characters long and must conform\nto the following regular expression: \\[a-z\\](\\[-a-z0-9\\]*\\[a-z0-9\\])?.\n\nLabel values must be between 0 and 63 characters long and must conform\nto the regular expression (\\[a-z\\](\\[-a-z0-9\\]*\\[a-z0-9\\])?)?.\n\nNo more than 256 labels can be associated with a given resource.\n\nClients should store labels in a representation such as JSON that does not\ndepend on specific characters being disallowed.\n\nExample: \u003ccode\u003e\"environment\" : \"dev\"\u003c/code\u003e\nRead-write."
+        },
+        "name": {
+          "description": "The user-assigned display name of the Project.\nIt must be 4 to 30 characters.\nAllowed characters are: lowercase and uppercase letters, numbers,\nhyphen, single-quote, double-quote, space, and exclamation point.\n\nExample: \u003ccode\u003eMy Project\u003c/code\u003e\nRead-write.",
+          "type": "string"
+        },
+        "projectId": {
+          "type": "string",
+          "description": "The unique, user-assigned ID of the Project.\nIt must be 6 to 30 lowercase letters, digits, or hyphens.\nIt must start with a letter.\nTrailing hyphens are prohibited.\n\nExample: \u003ccode\u003etokyo-rain-123\u003c/code\u003e\nRead-only after creation."
+        }
+      },
+      "id": "Project"
+    },
+    "ListOrgPoliciesResponse": {
+      "description": "The response returned from the ListOrgPolicies method. It will be empty\nif no `Policies` are set on the resource.",
+      "type": "object",
+      "properties": {
+        "policies": {
+          "type": "array",
+          "items": {
+            "$ref": "OrgPolicy"
+          },
+          "description": "The `Policies` that are set on the resource. It will be empty if no\n`Policies` are set."
+        },
+        "nextPageToken": {
+          "description": "Page token used to retrieve the next page. This is currently not used, but\nthe server may at any point start supplying a valid token.",
+          "type": "string"
+        }
+      },
+      "id": "ListOrgPoliciesResponse"
+    },
+    "FolderOperationError": {
+      "type": "object",
+      "properties": {
+        "errorMessageId": {
+          "enum": [
+            "ERROR_TYPE_UNSPECIFIED",
+            "FOLDER_HEIGHT_VIOLATION",
+            "MAX_CHILD_FOLDERS_VIOLATION",
+            "FOLDER_NAME_UNIQUENESS_VIOLATION",
+            "RESOURCE_DELETED",
+            "PARENT_DELETED",
+            "CYCLE_INTRODUCED_ERROR",
+            "FOLDER_BEING_MOVED",
+            "FOLDER_TO_DELETE_NON_EMPTY"
+          ],
+          "description": "The type of operation error experienced.",
+          "type": "string",
+          "enumDescriptions": [
+            "The error type was unrecognized or unspecified.",
+            "The attempted action would violate the max folder depth constraint.",
+            "The attempted action would violate the max child folders constraint.",
+            "The attempted action would violate the locally-unique folder\ndisplay_name constraint.",
+            "The resource being moved has been deleted.",
+            "The resource a folder was being added to has been deleted.",
+            "The attempted action would introduce cycle in resource path.",
+            "The attempted action would move a folder that is already being moved.",
+            "The folder the caller is trying to delete contains active resources."
+          ]
+        }
+      },
+      "id": "FolderOperationError",
+      "description": "A classification of the Folder Operation error."
+    },
+    "OrgPolicy": {
+      "description": "Defines a Cloud Organization `Policy` which is used to specify `Constraints`\nfor configurations of Cloud Platform resources.",
+      "type": "object",
+      "properties": {
+        "version": {
+          "description": "Version of the `Policy`. Default version is 0;",
+          "format": "int32",
+          "type": "integer"
+        },
+        "restoreDefault": {
+          "$ref": "RestoreDefault",
+          "description": "Restores the default behavior of the constraint; independent of\n`Constraint` type."
+        },
+        "listPolicy": {
+          "$ref": "ListPolicy",
+          "description": "List of values either allowed or disallowed."
+        },
+        "etag": {
+          "description": "An opaque tag indicating the current version of the `Policy`, used for\nconcurrency control.\n\nWhen the `Policy` is returned from either a `GetPolicy` or a\n`ListOrgPolicy` request, this `etag` indicates the version of the current\n`Policy` to use when executing a read-modify-write loop.\n\nWhen the `Policy` is returned from a `GetEffectivePolicy` request, the\n`etag` will be unset.\n\nWhen the `Policy` is used in a `SetOrgPolicy` method, use the `etag` value\nthat was returned from a `GetOrgPolicy` request as part of a\nread-modify-write loop for concurrency control. Not setting the `etag`in a\n`SetOrgPolicy` request will result in an unconditional write of the\n`Policy`.",
+          "format": "byte",
+          "type": "string"
+        },
+        "booleanPolicy": {
+          "$ref": "BooleanPolicy",
+          "description": "For boolean `Constraints`, whether to enforce the `Constraint` or not."
+        },
+        "constraint": {
+          "description": "The name of the `Constraint` the `Policy` is configuring, for example,\n`constraints/serviceuser.services`.\n\nImmutable after creation.",
+          "type": "string"
+        },
+        "updateTime": {
+          "type": "string",
+          "description": "The time stamp the `Policy` was previously updated. This is set by the\nserver, not specified by the caller, and represents the last time a call to\n`SetOrgPolicy` was made for that `Policy`. Any value set by the client will\nbe ignored.",
+          "format": "google-datetime"
+        }
+      },
+      "id": "OrgPolicy"
+    },
+    "BooleanPolicy": {
+      "description": "Used in `policy_type` to specify how `boolean_policy` will behave at this\nresource.",
+      "type": "object",
+      "properties": {
+        "enforced": {
+          "description": "If `true`, then the `Policy` is enforced. If `false`, then any\nconfiguration is acceptable.\n\nSuppose you have a `Constraint` `constraints/compute.disableSerialPortAccess`\nwith `constraint_default` set to `ALLOW`. A `Policy` for that\n`Constraint` exhibits the following behavior:\n  - If the `Policy` at this resource has enforced set to `false`, serial\n    port connection attempts will be allowed.\n  - If the `Policy` at this resource has enforced set to `true`, serial\n    port connection attempts will be refused.\n  - If the `Policy` at this resource is `RestoreDefault`, serial port\n    connection attempts will be allowed.\n  - If no `Policy` is set at this resource or anywhere higher in the\n    resource hierarchy, serial port connection attempts will be allowed.\n  - If no `Policy` is set at this resource, but one exists higher in the\n    resource hierarchy, the behavior is as if the`Policy` were set at\n    this resource.\n\nThe following examples demonstrate the different possible layerings:\n\nExample 1 (nearest `Constraint` wins):\n  `organizations/foo` has a `Policy` with:\n    {enforced: false}\n  `projects/bar` has no `Policy` set.\nThe constraint at `projects/bar` and `organizations/foo` will not be\nenforced.\n\nExample 2 (enforcement gets replaced):\n  `organizations/foo` has a `Policy` with:\n    {enforced: false}\n  `projects/bar` has a `Policy` with:\n    {enforced: true}\nThe constraint at `organizations/foo` is not enforced.\nThe constraint at `projects/bar` is enforced.\n\nExample 3 (RestoreDefault):\n  `organizations/foo` has a `Policy` with:\n    {enforced: true}\n  `projects/bar` has a `Policy` with:\n    {RestoreDefault: {}}\nThe constraint at `organizations/foo` is enforced.\nThe constraint at `projects/bar` is not enforced, because\n`constraint_default` for the `Constraint` is `ALLOW`.",
+          "type": "boolean"
+        }
+      },
+      "id": "BooleanPolicy"
+    },
+    "Ancestor": {
+      "type": "object",
+      "properties": {
+        "resourceId": {
+          "$ref": "ResourceId",
+          "description": "Resource id of the ancestor."
+        }
+      },
+      "id": "Ancestor",
+      "description": "Identifying information for a single ancestor of a project."
+    },
+    "ListConstraint": {
+      "type": "object",
+      "properties": {
+        "suggestedValue": {
+          "type": "string",
+          "description": "Optional. The Google Cloud Console will try to default to a configuration\nthat matches the value specified in this `Constraint`."
+        }
+      },
+      "id": "ListConstraint",
+      "description": "A `Constraint` that allows or disallows a list of string values, which are\nconfigured by an Organization's policy administrator with a `Policy`."
+    },
+    "SetOrgPolicyRequest": {
+      "type": "object",
+      "properties": {
+        "policy": {
+          "$ref": "OrgPolicy",
+          "description": "`Policy` to set on the resource."
+        }
+      },
+      "id": "SetOrgPolicyRequest",
+      "description": "The request sent to the SetOrgPolicyRequest method."
+    },
+    "SetIamPolicyRequest": {
+      "description": "Request message for `SetIamPolicy` method.",
+      "type": "object",
+      "properties": {
+        "policy": {
+          "$ref": "Policy",
+          "description": "REQUIRED: The complete policy to be applied to the `resource`. The size of\nthe policy is limited to a few 10s of KB. An empty policy is a\nvalid policy but certain Cloud Platform services (such as Projects)\nmight reject them."
+        },
+        "updateMask": {
+          "description": "OPTIONAL: A FieldMask specifying which fields of the policy to modify. Only\nthe fields in the mask will be modified. If no mask is provided, the\nfollowing default mask is used:\npaths: \"bindings, etag\"\nThis field is only used by Cloud IAM.",
+          "format": "google-fieldmask",
+          "type": "string"
+        }
+      },
+      "id": "SetIamPolicyRequest"
+    },
+    "Empty": {
+      "type": "object",
+      "properties": {},
+      "id": "Empty",
+      "description": "A generic empty message that you can re-use to avoid defining duplicated\nempty messages in your APIs. A typical example is to use it as the request\nor the response type of an API method. For instance:\n\n    service Foo {\n      rpc Bar(google.protobuf.Empty) returns (google.protobuf.Empty);\n    }\n\nThe JSON representation for `Empty` is empty JSON object `{}`."
+    },
+    "Organization": {
+      "description": "The root node in the resource hierarchy to which a particular entity's\n(e.g., company) resources belong.",
+      "type": "object",
+      "properties": {
+        "creationTime": {
+          "description": "Timestamp when the Organization was created. Assigned by the server.\n@OutputOnly",
+          "format": "google-datetime",
+          "type": "string"
+        },
+        "owner": {
+          "$ref": "OrganizationOwner",
+          "description": "The owner of this Organization. The owner should be specified on\ncreation. Once set, it cannot be changed.\nThis field is required."
+        },
+        "name": {
+          "description": "Output Only. The resource name of the organization. This is the\norganization's relative path in the API. Its format is\n\"organizations/[organization_id]\". For example, \"organizations/1234\".",
+          "type": "string"
+        },
+        "organizationId": {
+          "description": "An immutable id for the Organization that is assigned on creation. This\nshould be omitted when creating a new Organization.\nThis field is read-only.\nThis field is deprecated and will be removed in v1. Use name instead.",
+          "type": "string"
+        },
+        "lifecycleState": {
+          "type": "string",
+          "enumDescriptions": [
+            "Unspecified state.  This is only useful for distinguishing unset values.",
+            "The normal and active state.",
+            "The organization has been marked for deletion by the user."
+          ],
+          "enum": [
+            "LIFECYCLE_STATE_UNSPECIFIED",
+            "ACTIVE",
+            "DELETE_REQUESTED"
+          ],
+          "description": "The organization's current lifecycle state. Assigned by the server.\n@OutputOnly"
+        },
+        "displayName": {
+          "description": "A friendly string to be used to refer to the Organization in the UI.\nAssigned by the server, set to the primary domain of the G Suite\ncustomer that owns the organization.\n@OutputOnly",
+          "type": "string"
+        }
+      },
+      "id": "Organization"
+    },
+    "ListAvailableOrgPolicyConstraintsResponse": {
+      "type": "object",
+      "properties": {
+        "nextPageToken": {
+          "type": "string",
+          "description": "Page token used to retrieve the next page. This is currently not used."
+        },
+        "constraints": {
+          "description": "The collection of constraints that are settable on the request resource.",
+          "type": "array",
+          "items": {
+            "$ref": "Constraint"
+          }
+        }
+      },
+      "id": "ListAvailableOrgPolicyConstraintsResponse",
+      "description": "The response returned from the ListAvailableOrgPolicyConstraints method.\nReturns all `Constraints` that could be set at this level of the hierarchy\n(contrast with the response from `ListPolicies`, which returns all policies\nwhich are set)."
+    },
+    "ListPolicy": {
+      "description": "Used in `policy_type` to specify how `list_policy` behaves at this\nresource.\n\nA `ListPolicy` can define specific values that are allowed or denied by\nsetting either the `allowed_values` or `denied_values` fields. It can also\nbe used to allow or deny all values, by setting the `all_values` field. If\n`all_values` is `ALL_VALUES_UNSPECIFIED`, exactly one of `allowed_values`\nor `denied_values` must be set (attempting to set both or neither will\nresult in a failed request). If `all_values` is set to either `ALLOW` or\n`DENY`, `allowed_values` and `denied_values` must be unset.",
+      "type": "object",
+      "properties": {
+        "allowedValues": {
+          "type": "array",
+          "items": {
+            "type": "string"
+          },
+          "description": "List of values allowed  at this resource. an only be set if no values are\nset for `denied_values` and `all_values` is set to\n`ALL_VALUES_UNSPECIFIED`."
+        },
+        "suggestedValue": {
+          "type": "string",
+          "description": "Optional. The Google Cloud Console will try to default to a configuration\nthat matches the value specified in this `Policy`. If `suggested_value`\nis not set, it will inherit the value specified higher in the hierarchy,\nunless `inherit_from_parent` is `false`."
+        },
+        "inheritFromParent": {
+          "type": "boolean",
+          "description": "Determines the inheritance behavior for this `Policy`.\n\nBy default, a `ListPolicy` set at a resource supercedes any `Policy` set\nanywhere up the resource hierarchy. However, if `inherit_from_parent` is\nset to `true`, then the values from the effective `Policy` of the parent\nresource are inherited, meaning the values set in this `Policy` are\nadded to the values inherited up the hierarchy.\n\nSetting `Policy` hierarchies that inherit both allowed values and denied\nvalues isn't recommended in most circumstances to keep the configuration\nsimple and understandable. However, it is possible to set a `Policy` with\n`allowed_values` set that inherits a `Policy` with `denied_values` set.\nIn this case, the values that are allowed must be in `allowed_values` and\nnot present in `denied_values`.\n\nFor example, suppose you have a `Constraint`\n`constraints/serviceuser.services`, which has a `constraint_type` of\n`list_constraint`, and with `constraint_default` set to `ALLOW`.\nSuppose that at the Organization level, a `Policy` is applied that\nrestricts the allowed API activations to {`E1`, `E2`}. Then, if a\n`Policy` is applied to a project below the Organization that has\n`inherit_from_parent` set to `false` and field all_values set to DENY,\nthen an attempt to activate any API will be denied.\n\nThe following examples demonstrate different possible layerings:\n\nExample 1 (no inherited values):\n  `organizations/foo` has a `Policy` with values:\n    {allowed_values: “E1” allowed_values:”E2”}\n  ``projects/bar`` has `inherit_from_parent` `false` and values:\n    {allowed_values: \"E3\" allowed_values: \"E4\"}\nThe accepted values at `organizations/foo` are `E1`, `E2`.\nThe accepted values at `projects/bar` are `E3`, and `E4`.\n\nExample 2 (inherited values):\n  `organizations/foo` has a `Policy` with values:\n    {allowed_values: “E1” allowed_values:”E2”}\n  `projects/bar` has a `Policy` with values:\n    {value: “E3” value: ”E4” inherit_from_parent: true}\nThe accepted values at `organizations/foo` are `E1`, `E2`.\nThe accepted values at `projects/bar` are `E1`, `E2`, `E3`, and `E4`.\n\nExample 3 (inheriting both allowed and denied values):\n  `organizations/foo` has a `Policy` with values:\n    {allowed_values: \"E1\" allowed_values: \"E2\"}\n  `projects/bar` has a `Policy` with:\n    {denied_values: \"E1\"}\nThe accepted values at `organizations/foo` are `E1`, `E2`.\nThe value accepted at `projects/bar` is `E2`.\n\nExample 4 (RestoreDefault):\n  `organizations/foo` has a `Policy` with values:\n    {allowed_values: “E1” allowed_values:”E2”}\n  `projects/bar` has a `Policy` with values:\n    {RestoreDefault: {}}\nThe accepted values at `organizations/foo` are `E1`, `E2`.\nThe accepted values at `projects/bar` are either all or none depending on\nthe value of `constraint_default` (if `ALLOW`, all; if\n`DENY`, none).\n\nExample 5 (no policy inherits parent policy):\n  `organizations/foo` has no `Policy` set.\n  `projects/bar` has no `Policy` set.\nThe accepted values at both levels are either all or none depending on\nthe value of `constraint_default` (if `ALLOW`, all; if\n`DENY`, none).\n\nExample 6 (ListConstraint allowing all):\n  `organizations/foo` has a `Policy` with values:\n    {allowed_values: “E1” allowed_values: ”E2”}\n  `projects/bar` has a `Policy` with:\n    {all: ALLOW}\nThe accepted values at `organizations/foo` are `E1`, E2`.\nAny value is accepted at `projects/bar`.\n\nExample 7 (ListConstraint allowing none):\n  `organizations/foo` has a `Policy` with values:\n    {allowed_values: “E1” allowed_values: ”E2”}\n  `projects/bar` has a `Policy` with:\n    {all: DENY}\nThe accepted values at `organizations/foo` are `E1`, E2`.\nNo value is accepted at `projects/bar`."
+        },
+        "deniedValues": {
+          "description": "List of values denied at this resource. Can only be set if no values are\nset for `allowed_values` and `all_values` is set to\n`ALL_VALUES_UNSPECIFIED`.",
+          "type": "array",
+          "items": {
+            "type": "string"
+          }
+        },
+        "allValues": {
+          "enum": [
+            "ALL_VALUES_UNSPECIFIED",
+            "ALLOW",
+            "DENY"
+          ],
+          "description": "The policy all_values state.",
+          "type": "string",
+          "enumDescriptions": [
+            "Indicates that either allowed_values or denied_values must be set.",
+            "A policy with this set allows all values.",
+            "A policy with this set denies all values."
+          ]
+        }
+      },
+      "id": "ListPolicy"
+    },
+    "GetAncestryResponse": {
+      "type": "object",
+      "properties": {
+        "ancestor": {
+          "type": "array",
+          "items": {
+            "$ref": "Ancestor"
+          },
+          "description": "Ancestors are ordered from bottom to top of the resource hierarchy. The\nfirst ancestor is the project itself, followed by the project's parent,\netc."
+        }
+      },
+      "id": "GetAncestryResponse",
+      "description": "Response from the GetAncestry method."
+    },
     "AuditLogConfig": {
       "description": "Provides the configuration for logging a type of permissions.\nExample:\n\n    {\n      \"audit_log_configs\": [\n        {\n          \"log_type\": \"DATA_READ\",\n          \"exempted_members\": [\n            \"user:foo@gmail.com\"\n          ]\n        },\n        {\n          \"log_type\": \"DATA_WRITE\",\n        }\n      ]\n    }\n\nThis enables 'DATA_READ' and 'DATA_WRITE' logging, while exempting\nfoo@gmail.com from DATA_READ logging.",
       "type": "object",
@@ -766,12 +1399,6 @@
           }
         },
         "logType": {
-          "enumDescriptions": [
-            "Default case. Should never be this.",
-            "Admin reads. Example: CloudIAM getIamPolicy",
-            "Data writes. Example: CloudSQL Users create",
-            "Data reads. Example: CloudSQL Users list"
-          ],
           "enum": [
             "LOG_TYPE_UNSPECIFIED",
             "ADMIN_READ",
@@ -779,89 +1406,24 @@
             "DATA_READ"
           ],
           "description": "The log type that this config enables.",
-          "type": "string"
+          "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"
+          ]
         }
       },
       "id": "AuditLogConfig"
     },
-    "ListProjectsResponse": {
-      "description": "A page of the response received from the\nListProjects\nmethod.\n\nA paginated response where more pages are available has\n`next_page_token` set. This token can be used in a subsequent request to\nretrieve the next request page.",
-      "type": "object",
-      "properties": {
-        "projects": {
-          "description": "The list of Projects that matched the list filter. This list can\nbe paginated.",
-          "type": "array",
-          "items": {
-            "$ref": "Project"
-          }
-        },
-        "nextPageToken": {
-          "description": "Pagination token.\n\nIf the result set is too large to fit in a single response, this token\nis returned. It encodes the position of the current result cursor.\nFeeding this value into a new list request with the `page_token` parameter\ngives the next page of the results.\n\nWhen `next_page_token` is not filled in, there is no next page and\nthe list returned is the last page in the result set.\n\nPagination tokens have a limited lifetime.",
-          "type": "string"
-        }
-      },
-      "id": "ListProjectsResponse"
-    },
     "GetAncestryRequest": {
-      "description": "The request sent to the\nGetAncestry\nmethod.",
       "type": "object",
       "properties": {},
-      "id": "GetAncestryRequest"
-    },
-    "Project": {
-      "description": "A Project is a high-level Google Cloud Platform entity.  It is a\ncontainer for ACLs, APIs, App Engine Apps, VMs, and other\nGoogle Cloud Platform resources.",
-      "type": "object",
-      "properties": {
-        "labels": {
-          "description": "The labels associated with this Project.\n\nLabel keys must be between 1 and 63 characters long and must conform\nto the following regular expression: \\[a-z\\](\\[-a-z0-9\\]*\\[a-z0-9\\])?.\n\nLabel values must be between 0 and 63 characters long and must conform\nto the regular expression (\\[a-z\\](\\[-a-z0-9\\]*\\[a-z0-9\\])?)?.\n\nNo more than 256 labels can be associated with a given resource.\n\nClients should store labels in a representation such as JSON that does not\ndepend on specific characters being disallowed.\n\nExample: \u003ccode\u003e\"environment\" : \"dev\"\u003c/code\u003e\nRead-write.",
-          "type": "object",
-          "additionalProperties": {
-            "type": "string"
-          }
-        },
-        "createTime": {
-          "description": "Creation time.\n\nRead-only.",
-          "format": "google-datetime",
-          "type": "string"
-        },
-        "name": {
-          "description": "The user-assigned display name of the Project.\nIt must be 4 to 30 characters.\nAllowed characters are: lowercase and uppercase letters, numbers,\nhyphen, single-quote, double-quote, space, and exclamation point.\n\nExample: \u003ccode\u003eMy Project\u003c/code\u003e\nRead-write.",
-          "type": "string"
-        },
-        "projectId": {
-          "description": "The unique, user-assigned ID of the Project.\nIt must be 6 to 30 lowercase letters, digits, or hyphens.\nIt must start with a letter.\nTrailing hyphens are prohibited.\n\nExample: \u003ccode\u003etokyo-rain-123\u003c/code\u003e\nRead-only after creation.",
-          "type": "string"
-        },
-        "lifecycleState": {
-          "enumDescriptions": [
-            "Unspecified state.  This is only used/useful for distinguishing\nunset values.",
-            "The normal and active state.",
-            "The project has been marked for deletion by the user\n(by invoking DeleteProject)\nor by the system (Google Cloud Platform).\nThis can generally be reversed by invoking UndeleteProject.",
-            "This lifecycle state is no longer used and is not returned by the API."
-          ],
-          "enum": [
-            "LIFECYCLE_STATE_UNSPECIFIED",
-            "ACTIVE",
-            "DELETE_REQUESTED",
-            "DELETE_IN_PROGRESS"
-          ],
-          "description": "The Project lifecycle state.\n\nRead-only.",
-          "type": "string"
-        },
-        "projectNumber": {
-          "description": "The number uniquely identifying the project.\n\nExample: \u003ccode\u003e415104041262\u003c/code\u003e\nRead-only.",
-          "format": "int64",
-          "type": "string"
-        },
-        "parent": {
-          "description": "An optional reference to a parent Resource.\n\nThe only supported parent type is \"organization\". Once set, the parent\ncannot be modified. The `parent` can be set on creation or using the\n`UpdateProject` method; the end user must have the\n`resourcemanager.projects.create` permission on the parent.\n\nRead-write.",
-          "$ref": "ResourceId"
-        }
-      },
-      "id": "Project"
+      "id": "GetAncestryRequest",
+      "description": "The request sent to the\nGetAncestry\nmethod."
     },
     "TestIamPermissionsRequest": {
-      "description": "Request message for `TestIamPermissions` method.",
       "type": "object",
       "properties": {
         "permissions": {
@@ -872,54 +1434,45 @@
           }
         }
       },
-      "id": "TestIamPermissionsRequest"
+      "id": "TestIamPermissionsRequest",
+      "description": "Request message for `TestIamPermissions` method."
     },
-    "FolderOperation": {
-      "description": "Metadata describing a long running folder operation",
+    "ListAvailableOrgPolicyConstraintsRequest": {
       "type": "object",
       "properties": {
-        "displayName": {
-          "description": "The display name of the folder.",
-          "type": "string"
-        },
-        "sourceParent": {
-          "description": "The resource name of the folder's parent.\nOnly applicable when the operation_type is MOVE.",
-          "type": "string"
-        },
-        "destinationParent": {
-          "description": "The resource name of the folder or organization we are either creating\nthe folder under or moving the folder to.",
-          "type": "string"
-        },
-        "operationType": {
-          "description": "The type of this operation.",
+        "pageToken": {
           "type": "string",
-          "enumDescriptions": [
-            "Operation type not specified.",
-            "A create folder operation.",
-            "A move folder operation."
-          ],
-          "enum": [
-            "OPERATION_TYPE_UNSPECIFIED",
-            "CREATE",
-            "MOVE"
-          ]
+          "description": "Page token used to retrieve the next page. This is currently unsupported\nand will be ignored. The server may at any point start using this field."
+        },
+        "pageSize": {
+          "description": "Size of the pages to be returned. This is currently unsupported and will\nbe ignored. The server may at any point start using this field to limit\npage size.",
+          "format": "int32",
+          "type": "integer"
         }
       },
-      "id": "FolderOperation"
+      "id": "ListAvailableOrgPolicyConstraintsRequest",
+      "description": "The request sent to the [ListAvailableOrgPolicyConstraints]\ngoogle.cloud.OrgPolicy.v1.ListAvailableOrgPolicyConstraints] method."
     },
     "Policy": {
       "description": "Defines an Identity and Access Management (IAM) policy. It is used to\nspecify access control policies for Cloud Platform resources.\n\n\nA `Policy` consists of a list of `bindings`. A `Binding` binds a list of\n`members` to a `role`, where the members can be user accounts, Google groups,\nGoogle domains, and service accounts. A `role` is a named list of permissions\ndefined by IAM.\n\n**Example**\n\n    {\n      \"bindings\": [\n        {\n          \"role\": \"roles/owner\",\n          \"members\": [\n            \"user:mike@example.com\",\n            \"group:admins@example.com\",\n            \"domain:google.com\",\n            \"serviceAccount:my-other-app@appspot.gserviceaccount.com\",\n          ]\n        },\n        {\n          \"role\": \"roles/viewer\",\n          \"members\": [\"user:sean@example.com\"]\n        }\n      ]\n    }\n\nFor a description of IAM and its features, see the\n[IAM developer's guide](https://cloud.google.com/iam).",
       "type": "object",
       "properties": {
+        "bindings": {
+          "type": "array",
+          "items": {
+            "$ref": "Binding"
+          },
+          "description": "Associates a list of `members` to a `role`.\nMultiple `bindings` must not be specified for the same `role`.\n`bindings` with no members will result in an error."
+        },
         "etag": {
+          "type": "string",
           "description": "`etag` is used for optimistic concurrency control as a way to help\nprevent simultaneous updates of a policy from overwriting each other.\nIt is strongly suggested that systems make use of the `etag` in the\nread-modify-write cycle to perform policy updates in order to avoid race\nconditions: An `etag` is returned in the response to `getIamPolicy`, and\nsystems are expected to put that etag in the request to `setIamPolicy` to\nensure that their change will be applied to the same version of the policy.\n\nIf no `etag` is provided in the call to `setIamPolicy`, then the existing\npolicy is overwritten blindly.",
-          "format": "byte",
-          "type": "string"
+          "format": "byte"
         },
         "version": {
+          "type": "integer",
           "description": "Version of the `Policy`. The default version is 0.",
-          "format": "int32",
-          "type": "integer"
+          "format": "int32"
         },
         "auditConfigs": {
           "description": "Specifies cloud audit logging configuration for this policy.",
@@ -927,49 +1480,42 @@
           "items": {
             "$ref": "AuditConfig"
           }
-        },
-        "bindings": {
-          "description": "Associates a list of `members` to a `role`.\nMultiple `bindings` must not be specified for the same `role`.\n`bindings` with no members will result in an error.",
-          "type": "array",
-          "items": {
-            "$ref": "Binding"
-          }
         }
       },
       "id": "Policy"
     },
-    "FolderOperationError": {
-      "description": "A classification of the Folder Operation error.",
+    "FolderOperation": {
       "type": "object",
       "properties": {
-        "errorMessageId": {
-          "description": "The type of operation error experienced.",
+        "operationType": {
+          "enum": [
+            "OPERATION_TYPE_UNSPECIFIED",
+            "CREATE",
+            "MOVE"
+          ],
+          "description": "The type of this operation.",
           "type": "string",
           "enumDescriptions": [
-            "The error type was unrecognized or unspecified.",
-            "The attempted action would violate the max folder depth constraint.",
-            "The attempted action would violate the max child folders constraint.",
-            "The attempted action would violate the locally-unique folder\ndisplay_name constraint.",
-            "The resource being moved has been deleted.",
-            "The resource a folder was being added to has been deleted.",
-            "The attempted action would introduce cycle in resource path.",
-            "The attempted action would move a folder that is already being moved.",
-            "The folder the caller is trying to delete contains active resources."
-          ],
-          "enum": [
-            "ERROR_TYPE_UNSPECIFIED",
-            "FOLDER_HEIGHT_VIOLATION",
-            "MAX_CHILD_FOLDERS_VIOLATION",
-            "FOLDER_NAME_UNIQUENESS_VIOLATION",
-            "RESOURCE_DELETED",
-            "PARENT_DELETED",
-            "CYCLE_INTRODUCED_ERROR",
-            "FOLDER_ALREADY_BEING_MOVED",
-            "FOLDER_TO_DELETE_NON_EMPTY"
+            "Operation type not specified.",
+            "A create folder operation.",
+            "A move folder operation."
           ]
+        },
+        "displayName": {
+          "type": "string",
+          "description": "The display name of the folder."
+        },
+        "sourceParent": {
+          "type": "string",
+          "description": "The resource name of the folder's parent.\nOnly applicable when the operation_type is MOVE."
+        },
+        "destinationParent": {
+          "description": "The resource name of the folder or organization we are either creating\nthe folder under or moving the folder to.",
+          "type": "string"
         }
       },
-      "id": "FolderOperationError"
+      "id": "FolderOperation",
+      "description": "Metadata describing a long running folder operation"
     },
     "ResourceId": {
       "description": "A container to reference an id for any resource type. A `resource` in Google\nCloud Platform is a generic term for something you (a developer) may want to\ninteract with through one of our API's. Some examples are an App Engine app,\na Compute Engine instance, a Cloud SQL database, and so on.",
@@ -985,13 +1531,24 @@
         }
       },
       "id": "ResourceId"
+    },
+    "GetEffectiveOrgPolicyRequest": {
+      "description": "The request sent to the GetEffectiveOrgPolicy method.",
+      "type": "object",
+      "properties": {
+        "constraint": {
+          "type": "string",
+          "description": "The name of the `Constraint` to compute the effective `Policy`."
+        }
+      },
+      "id": "GetEffectiveOrgPolicyRequest"
     }
   },
-  "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"
+    "x16": "http://www.google.com/images/icons/product/search-16.gif",
+    "x32": "http://www.google.com/images/icons/product/search-32.gif"
   },
+  "protocol": "rest",
   "version": "v1beta1",
   "baseUrl": "https://cloudresourcemanager.googleapis.com/",
   "canonicalName": "Cloud Resource Manager",
@@ -1008,10 +1565,17 @@
     }
   },
   "servicePath": "",
-  "description": "The Google Cloud Resource Manager API provides methods for creating, reading, and updating project metadata.",
   "kind": "discovery#restDescription",
+  "description": "The Google Cloud Resource Manager API provides methods for creating, reading, and updating project metadata.",
   "rootUrl": "https://cloudresourcemanager.googleapis.com/",
   "basePath": "",
   "ownerDomain": "google.com",
-  "name": "cloudresourcemanager"
+  "name": "cloudresourcemanager",
+  "batchPath": "batch",
+  "revision": "20170324",
+  "documentationLink": "https://cloud.google.com/resource-manager",
+  "id": "cloudresourcemanager:v1beta1",
+  "title": "Google Cloud Resource Manager API",
+  "ownerName": "Google",
+  "discoveryVersion": "v1"
 }
diff --git a/cloudresourcemanager/v1beta1/cloudresourcemanager-gen.go b/cloudresourcemanager/v1beta1/cloudresourcemanager-gen.go
index 0a329b0..d43fc41 100644
--- a/cloudresourcemanager/v1beta1/cloudresourcemanager-gen.go
+++ b/cloudresourcemanager/v1beta1/cloudresourcemanager-gen.go
@@ -65,10 +65,9 @@
 }
 
 type Service struct {
-	client                    *http.Client
-	BasePath                  string // API endpoint base URL
-	UserAgent                 string // optional additional User-Agent fragment
-	GoogleClientHeaderElement string // client header fragment, for Google use only
+	client    *http.Client
+	BasePath  string // API endpoint base URL
+	UserAgent string // optional additional User-Agent fragment
 
 	Organizations *OrganizationsService
 
@@ -82,10 +81,6 @@
 	return googleapi.UserAgent + " " + s.UserAgent
 }
 
-func (s *Service) clientHeader() string {
-	return gensupport.GoogleClientHeader("20170210", s.GoogleClientHeaderElement)
-}
-
 func NewOrganizationsService(s *Service) *OrganizationsService {
 	rs := &OrganizationsService{s: s}
 	return rs
@@ -133,9 +128,9 @@
 }
 
 // AuditConfig: Specifies the audit configuration for a service.
-// It consists of which permission types are logged, and what
-// identities, if
-// any, are exempted from logging.
+// The configuration determines which permission types are logged, and
+// what
+// identities, if any, are exempted from logging.
 // An AuditConifg must have one or more AuditLogConfigs.
 //
 // If there are AuditConfigs for both `allServices` and a specific
@@ -194,7 +189,8 @@
 
 	// Service: Specifies a service that will be enabled for audit
 	// logging.
-	// For example, `resourcemanager`, `storage`, `compute`.
+	// For example, `storage.googleapis.com`,
+	// `cloudsql.googleapis.com`.
 	// `allServices` is a special value that covers all services.
 	Service string `json:"service,omitempty"`
 
@@ -348,6 +344,225 @@
 	return gensupport.MarshalJSON(raw, s.ForceSendFields, s.NullFields)
 }
 
+// BooleanConstraint: A `Constraint` that is either enforced or
+// not.
+//
+// For example a constraint
+// `constraints/compute.disableSerialPortAccess`.
+// If it is enforced on a VM instance, serial port connections will not
+// be
+// opened to that instance.
+type BooleanConstraint struct {
+}
+
+// BooleanPolicy: Used in `policy_type` to specify how `boolean_policy`
+// will behave at this
+// resource.
+type BooleanPolicy struct {
+	// Enforced: 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`.
+	Enforced bool `json:"enforced,omitempty"`
+
+	// ForceSendFields is a list of field names (e.g. "Enforced") to
+	// unconditionally include in API requests. By default, fields with
+	// empty values are omitted from API requests. However, any non-pointer,
+	// non-interface field appearing in ForceSendFields will be sent to the
+	// server regardless of whether the field is empty or not. This may be
+	// used to include empty fields in Patch requests.
+	ForceSendFields []string `json:"-"`
+
+	// NullFields is a list of field names (e.g. "Enforced") to include in
+	// API requests with the JSON null value. By default, fields with empty
+	// values are omitted from API requests. However, any field with an
+	// empty value appearing in NullFields will be sent to the server as
+	// null. It is an error if a field in this list has a non-empty value.
+	// This may be used to include null fields in Patch requests.
+	NullFields []string `json:"-"`
+}
+
+func (s *BooleanPolicy) MarshalJSON() ([]byte, error) {
+	type noMethod BooleanPolicy
+	raw := noMethod(*s)
+	return gensupport.MarshalJSON(raw, s.ForceSendFields, s.NullFields)
+}
+
+// ClearOrgPolicyRequest: The request sent to the ClearOrgPolicy method.
+type ClearOrgPolicyRequest struct {
+	// Constraint: Name of the `Constraint` of the `Policy` to clear.
+	Constraint string `json:"constraint,omitempty"`
+
+	// Etag: The current version, for concurrency control. Not sending an
+	// `etag`
+	// will cause the `Policy` to be cleared blindly.
+	Etag string `json:"etag,omitempty"`
+
+	// ForceSendFields is a list of field names (e.g. "Constraint") to
+	// unconditionally include in API requests. By default, fields with
+	// empty values are omitted from API requests. However, any non-pointer,
+	// non-interface field appearing in ForceSendFields will be sent to the
+	// server regardless of whether the field is empty or not. This may be
+	// used to include empty fields in Patch requests.
+	ForceSendFields []string `json:"-"`
+
+	// NullFields is a list of field names (e.g. "Constraint") to include in
+	// API requests with the JSON null value. By default, fields with empty
+	// values are omitted from API requests. However, any field with an
+	// empty value appearing in NullFields will be sent to the server as
+	// null. It is an error if a field in this list has a non-empty value.
+	// This may be used to include null fields in Patch requests.
+	NullFields []string `json:"-"`
+}
+
+func (s *ClearOrgPolicyRequest) MarshalJSON() ([]byte, error) {
+	type noMethod ClearOrgPolicyRequest
+	raw := noMethod(*s)
+	return gensupport.MarshalJSON(raw, s.ForceSendFields, s.NullFields)
+}
+
+// Constraint: A `Constraint` describes a way in which a resource's
+// configuration can be
+// restricted. For example, it controls which cloud services can be
+// activated
+// across an organization, or whether a Compute Engine instance can
+// have
+// serial port connections established. `Constraints` can be configured
+// by the
+// organization's policy adminstrator to fit the needs of the
+// organzation by
+// setting Policies for `Constraints` at different locations in
+// the
+// organization's resource hierarchy. Policies are inherited down the
+// resource
+// hierarchy from higher levels, but can also be overridden. For details
+// about
+// the inheritance rules please read about
+// Policies.
+//
+// `Constraints` have a default behavior determined by the
+// `constraint_default`
+// field, which is the enforcement behavior that is used in the absence
+// of a
+// `Policy` being defined or inherited for the resource in question.
+type Constraint struct {
+	// BooleanConstraint: Defines this constraint as being a
+	// BooleanConstraint.
+	BooleanConstraint *BooleanConstraint `json:"booleanConstraint,omitempty"`
+
+	// ConstraintDefault: The evaluation behavior of this constraint in the
+	// absense of 'Policy'.
+	//
+	// Possible values:
+	//   "CONSTRAINT_DEFAULT_UNSPECIFIED" - This is only used for
+	// distinguishing unset values and should never be
+	// used.
+	//   "ALLOW" - Indicate that all values are allowed for list
+	// constraints.
+	// Indicate that enforcement is off for boolean constraints.
+	//   "DENY" - Indicate that all values are denied for list
+	// constraints.
+	// Indicate that enforcement is on for boolean constraints.
+	ConstraintDefault string `json:"constraintDefault,omitempty"`
+
+	// Description: Detailed description of what this `Constraint` controls
+	// as well as how and
+	// where it is enforced.
+	//
+	// Mutable.
+	Description string `json:"description,omitempty"`
+
+	// DisplayName: The human readable name.
+	//
+	// Mutable.
+	DisplayName string `json:"displayName,omitempty"`
+
+	// ListConstraint: Defines this constraint as being a ListConstraint.
+	ListConstraint *ListConstraint `json:"listConstraint,omitempty"`
+
+	// Name: Immutable value, required to globally be unique. For
+	// example,
+	// `constraints/serviceuser.services`
+	Name string `json:"name,omitempty"`
+
+	// Version: Version of the `Constraint`. Default version is 0;
+	Version int64 `json:"version,omitempty"`
+
+	// ForceSendFields is a list of field names (e.g. "BooleanConstraint")
+	// to unconditionally include in API requests. By default, fields with
+	// empty values are omitted from API requests. However, any non-pointer,
+	// non-interface field appearing in ForceSendFields will be sent to the
+	// server regardless of whether the field is empty or not. This may be
+	// used to include empty fields in Patch requests.
+	ForceSendFields []string `json:"-"`
+
+	// NullFields is a list of field names (e.g. "BooleanConstraint") to
+	// include in API requests with the JSON null value. By default, fields
+	// with empty values are omitted from API requests. However, any field
+	// with an empty value appearing in NullFields will be sent to the
+	// server as null. It is an error if a field in this list has a
+	// non-empty value. This may be used to include null fields in Patch
+	// requests.
+	NullFields []string `json:"-"`
+}
+
+func (s *Constraint) MarshalJSON() ([]byte, error) {
+	type noMethod Constraint
+	raw := noMethod(*s)
+	return gensupport.MarshalJSON(raw, s.ForceSendFields, s.NullFields)
+}
+
 // Empty: 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
@@ -431,8 +646,8 @@
 	// been deleted.
 	//   "CYCLE_INTRODUCED_ERROR" - The attempted action would introduce
 	// cycle in resource path.
-	//   "FOLDER_ALREADY_BEING_MOVED" - The attempted action would move a
-	// folder that is already being moved.
+	//   "FOLDER_BEING_MOVED" - The attempted action would move a folder
+	// that is already being moved.
 	//   "FOLDER_TO_DELETE_NON_EMPTY" - The folder the caller is trying to
 	// delete contains active resources.
 	ErrorMessageId string `json:"errorMessageId,omitempty"`
@@ -503,10 +718,265 @@
 	return gensupport.MarshalJSON(raw, s.ForceSendFields, s.NullFields)
 }
 
+// GetEffectiveOrgPolicyRequest: The request sent to the
+// GetEffectiveOrgPolicy method.
+type GetEffectiveOrgPolicyRequest struct {
+	// Constraint: The name of the `Constraint` to compute the effective
+	// `Policy`.
+	Constraint string `json:"constraint,omitempty"`
+
+	// ForceSendFields is a list of field names (e.g. "Constraint") to
+	// unconditionally include in API requests. By default, fields with
+	// empty values are omitted from API requests. However, any non-pointer,
+	// non-interface field appearing in ForceSendFields will be sent to the
+	// server regardless of whether the field is empty or not. This may be
+	// used to include empty fields in Patch requests.
+	ForceSendFields []string `json:"-"`
+
+	// NullFields is a list of field names (e.g. "Constraint") to include in
+	// API requests with the JSON null value. By default, fields with empty
+	// values are omitted from API requests. However, any field with an
+	// empty value appearing in NullFields will be sent to the server as
+	// null. It is an error if a field in this list has a non-empty value.
+	// This may be used to include null fields in Patch requests.
+	NullFields []string `json:"-"`
+}
+
+func (s *GetEffectiveOrgPolicyRequest) MarshalJSON() ([]byte, error) {
+	type noMethod GetEffectiveOrgPolicyRequest
+	raw := noMethod(*s)
+	return gensupport.MarshalJSON(raw, s.ForceSendFields, s.NullFields)
+}
+
 // GetIamPolicyRequest: Request message for `GetIamPolicy` method.
 type GetIamPolicyRequest struct {
 }
 
+// GetOrgPolicyRequest: The request sent to the GetOrgPolicy method.
+type GetOrgPolicyRequest struct {
+	// Constraint: Name of the `Constraint` to get the `Policy`.
+	Constraint string `json:"constraint,omitempty"`
+
+	// ForceSendFields is a list of field names (e.g. "Constraint") to
+	// unconditionally include in API requests. By default, fields with
+	// empty values are omitted from API requests. However, any non-pointer,
+	// non-interface field appearing in ForceSendFields will be sent to the
+	// server regardless of whether the field is empty or not. This may be
+	// used to include empty fields in Patch requests.
+	ForceSendFields []string `json:"-"`
+
+	// NullFields is a list of field names (e.g. "Constraint") to include in
+	// API requests with the JSON null value. By default, fields with empty
+	// values are omitted from API requests. However, any field with an
+	// empty value appearing in NullFields will be sent to the server as
+	// null. It is an error if a field in this list has a non-empty value.
+	// This may be used to include null fields in Patch requests.
+	NullFields []string `json:"-"`
+}
+
+func (s *GetOrgPolicyRequest) MarshalJSON() ([]byte, error) {
+	type noMethod GetOrgPolicyRequest
+	raw := noMethod(*s)
+	return gensupport.MarshalJSON(raw, s.ForceSendFields, s.NullFields)
+}
+
+// ListAvailableOrgPolicyConstraintsRequest: The request sent to the
+// [ListAvailableOrgPolicyConstraints]
+// google.cloud.OrgPolicy.v1.ListAvai
+// lableOrgPolicyConstraints] method.
+type ListAvailableOrgPolicyConstraintsRequest struct {
+	// PageSize: Size of the pages to be returned. This is currently
+	// unsupported and will
+	// be ignored. The server may at any point start using this field to
+	// limit
+	// page size.
+	PageSize int64 `json:"pageSize,omitempty"`
+
+	// PageToken: Page token used to retrieve the next page. This is
+	// currently unsupported
+	// and will be ignored. The server may at any point start using this
+	// field.
+	PageToken string `json:"pageToken,omitempty"`
+
+	// ForceSendFields is a list of field names (e.g. "PageSize") to
+	// unconditionally include in API requests. By default, fields with
+	// empty values are omitted from API requests. However, any non-pointer,
+	// non-interface field appearing in ForceSendFields will be sent to the
+	// server regardless of whether the field is empty or not. This may be
+	// used to include empty fields in Patch requests.
+	ForceSendFields []string `json:"-"`
+
+	// NullFields is a list of field names (e.g. "PageSize") to include in
+	// API requests with the JSON null value. By default, fields with empty
+	// values are omitted from API requests. However, any field with an
+	// empty value appearing in NullFields will be sent to the server as
+	// null. It is an error if a field in this list has a non-empty value.
+	// This may be used to include null fields in Patch requests.
+	NullFields []string `json:"-"`
+}
+
+func (s *ListAvailableOrgPolicyConstraintsRequest) MarshalJSON() ([]byte, error) {
+	type noMethod ListAvailableOrgPolicyConstraintsRequest
+	raw := noMethod(*s)
+	return gensupport.MarshalJSON(raw, s.ForceSendFields, s.NullFields)
+}
+
+// ListAvailableOrgPolicyConstraintsResponse: The response returned from
+// the ListAvailableOrgPolicyConstraints method.
+// Returns all `Constraints` that could be set at this level of the
+// hierarchy
+// (contrast with the response from `ListPolicies`, which returns all
+// policies
+// which are set).
+type ListAvailableOrgPolicyConstraintsResponse struct {
+	// Constraints: The collection of constraints that are settable on the
+	// request resource.
+	Constraints []*Constraint `json:"constraints,omitempty"`
+
+	// NextPageToken: Page token used to retrieve the next page. This is
+	// currently not used.
+	NextPageToken string `json:"nextPageToken,omitempty"`
+
+	// ServerResponse contains the HTTP response code and headers from the
+	// server.
+	googleapi.ServerResponse `json:"-"`
+
+	// ForceSendFields is a list of field names (e.g. "Constraints") to
+	// unconditionally include in API requests. By default, fields with
+	// empty values are omitted from API requests. However, any non-pointer,
+	// non-interface field appearing in ForceSendFields will be sent to the
+	// server regardless of whether the field is empty or not. This may be
+	// used to include empty fields in Patch requests.
+	ForceSendFields []string `json:"-"`
+
+	// NullFields is a list of field names (e.g. "Constraints") to include
+	// in API requests with the JSON null value. By default, fields with
+	// empty values are omitted from API requests. However, any field with
+	// an empty value appearing in NullFields will be sent to the server as
+	// null. It is an error if a field in this list has a non-empty value.
+	// This may be used to include null fields in Patch requests.
+	NullFields []string `json:"-"`
+}
+
+func (s *ListAvailableOrgPolicyConstraintsResponse) MarshalJSON() ([]byte, error) {
+	type noMethod ListAvailableOrgPolicyConstraintsResponse
+	raw := noMethod(*s)
+	return gensupport.MarshalJSON(raw, s.ForceSendFields, s.NullFields)
+}
+
+// ListConstraint: A `Constraint` that allows or disallows a list of
+// string values, which are
+// configured by an Organization's policy administrator with a `Policy`.
+type ListConstraint struct {
+	// SuggestedValue: Optional. The Google Cloud Console will try to
+	// default to a configuration
+	// that matches the value specified in this `Constraint`.
+	SuggestedValue string `json:"suggestedValue,omitempty"`
+
+	// ForceSendFields is a list of field names (e.g. "SuggestedValue") to
+	// unconditionally include in API requests. By default, fields with
+	// empty values are omitted from API requests. However, any non-pointer,
+	// non-interface field appearing in ForceSendFields will be sent to the
+	// server regardless of whether the field is empty or not. This may be
+	// used to include empty fields in Patch requests.
+	ForceSendFields []string `json:"-"`
+
+	// NullFields is a list of field names (e.g. "SuggestedValue") to
+	// include in API requests with the JSON null value. By default, fields
+	// with empty values are omitted from API requests. However, any field
+	// with an empty value appearing in NullFields will be sent to the
+	// server as null. It is an error if a field in this list has a
+	// non-empty value. This may be used to include null fields in Patch
+	// requests.
+	NullFields []string `json:"-"`
+}
+
+func (s *ListConstraint) MarshalJSON() ([]byte, error) {
+	type noMethod ListConstraint
+	raw := noMethod(*s)
+	return gensupport.MarshalJSON(raw, s.ForceSendFields, s.NullFields)
+}
+
+// ListOrgPoliciesRequest: The request sent to the ListOrgPolicies
+// method.
+type ListOrgPoliciesRequest struct {
+	// PageSize: Size of the pages to be returned. This is currently
+	// unsupported and will
+	// be ignored. The server may at any point start using this field to
+	// limit
+	// page size.
+	PageSize int64 `json:"pageSize,omitempty"`
+
+	// PageToken: Page token used to retrieve the next page. This is
+	// currently unsupported
+	// and will be ignored. The server may at any point start using this
+	// field.
+	PageToken string `json:"pageToken,omitempty"`
+
+	// ForceSendFields is a list of field names (e.g. "PageSize") to
+	// unconditionally include in API requests. By default, fields with
+	// empty values are omitted from API requests. However, any non-pointer,
+	// non-interface field appearing in ForceSendFields will be sent to the
+	// server regardless of whether the field is empty or not. This may be
+	// used to include empty fields in Patch requests.
+	ForceSendFields []string `json:"-"`
+
+	// NullFields is a list of field names (e.g. "PageSize") to include in
+	// API requests with the JSON null value. By default, fields with empty
+	// values are omitted from API requests. However, any field with an
+	// empty value appearing in NullFields will be sent to the server as
+	// null. It is an error if a field in this list has a non-empty value.
+	// This may be used to include null fields in Patch requests.
+	NullFields []string `json:"-"`
+}
+
+func (s *ListOrgPoliciesRequest) MarshalJSON() ([]byte, error) {
+	type noMethod ListOrgPoliciesRequest
+	raw := noMethod(*s)
+	return gensupport.MarshalJSON(raw, s.ForceSendFields, s.NullFields)
+}
+
+// ListOrgPoliciesResponse: The response returned from the
+// ListOrgPolicies method. It will be empty
+// if no `Policies` are set on the resource.
+type ListOrgPoliciesResponse struct {
+	// NextPageToken: Page token used to retrieve the next page. This is
+	// currently not used, but
+	// the server may at any point start supplying a valid token.
+	NextPageToken string `json:"nextPageToken,omitempty"`
+
+	// Policies: The `Policies` that are set on the resource. It will be
+	// empty if no
+	// `Policies` are set.
+	Policies []*OrgPolicy `json:"policies,omitempty"`
+
+	// ServerResponse contains the HTTP response code and headers from the
+	// server.
+	googleapi.ServerResponse `json:"-"`
+
+	// ForceSendFields is a list of field names (e.g. "NextPageToken") to
+	// unconditionally include in API requests. By default, fields with
+	// empty values are omitted from API requests. However, any non-pointer,
+	// non-interface field appearing in ForceSendFields will be sent to the
+	// server regardless of whether the field is empty or not. This may be
+	// used to include empty fields in Patch requests.
+	ForceSendFields []string `json:"-"`
+
+	// NullFields is a list of field names (e.g. "NextPageToken") to include
+	// in API requests with the JSON null value. By default, fields with
+	// empty values are omitted from API requests. However, any field with
+	// an empty value appearing in NullFields will be sent to the server as
+	// null. It is an error if a field in this list has a non-empty value.
+	// This may be used to include null fields in Patch requests.
+	NullFields []string `json:"-"`
+}
+
+func (s *ListOrgPoliciesResponse) MarshalJSON() ([]byte, error) {
+	type noMethod ListOrgPoliciesResponse
+	raw := noMethod(*s)
+	return gensupport.MarshalJSON(raw, s.ForceSendFields, s.NullFields)
+}
+
 // ListOrganizationsResponse: The response returned from the
 // `ListOrganizations` method.
 type ListOrganizationsResponse struct {
@@ -552,6 +1022,184 @@
 	return gensupport.MarshalJSON(raw, s.ForceSendFields, s.NullFields)
 }
 
+// ListPolicy: Used in `policy_type` to specify how `list_policy`
+// behaves at this
+// resource.
+//
+// A `ListPolicy` can define specific values that are allowed or denied
+// by
+// setting either the `allowed_values` or `denied_values` fields. It can
+// also
+// be used to allow or deny all values, by setting the `all_values`
+// field. If
+// `all_values` is `ALL_VALUES_UNSPECIFIED`, exactly one of
+// `allowed_values`
+// or `denied_values` must be set (attempting to set both or neither
+// will
+// result in a failed request). If `all_values` is set to either `ALLOW`
+// or
+// `DENY`, `allowed_values` and `denied_values` must be unset.
+type ListPolicy struct {
+	// AllValues: The policy all_values state.
+	//
+	// Possible values:
+	//   "ALL_VALUES_UNSPECIFIED" - Indicates that either allowed_values or
+	// denied_values must be set.
+	//   "ALLOW" - A policy with this set allows all values.
+	//   "DENY" - A policy with this set denies all values.
+	AllValues string `json:"allValues,omitempty"`
+
+	// AllowedValues: List of values allowed  at this resource. an only be
+	// set if no values are
+	// set for `denied_values` and `all_values` is set
+	// to
+	// `ALL_VALUES_UNSPECIFIED`.
+	AllowedValues []string `json:"allowedValues,omitempty"`
+
+	// DeniedValues: List of values denied at this resource. Can only be set
+	// if no values are
+	// set for `allowed_values` and `all_values` is set
+	// to
+	// `ALL_VALUES_UNSPECIFIED`.
+	DeniedValues []string `json:"deniedValues,omitempty"`
+
+	// InheritFromParent: Determines the inheritance behavior for this
+	// `Policy`.
+	//
+	// By default, a `ListPolicy` set at a resource supercedes 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:
+	//
+	// 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`.
+	InheritFromParent bool `json:"inheritFromParent,omitempty"`
+
+	// SuggestedValue: 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`.
+	SuggestedValue string `json:"suggestedValue,omitempty"`
+
+	// ForceSendFields is a list of field names (e.g. "AllValues") to
+	// unconditionally include in API requests. By default, fields with
+	// empty values are omitted from API requests. However, any non-pointer,
+	// non-interface field appearing in ForceSendFields will be sent to the
+	// server regardless of whether the field is empty or not. This may be
+	// used to include empty fields in Patch requests.
+	ForceSendFields []string `json:"-"`
+
+	// NullFields is a list of field names (e.g. "AllValues") to include in
+	// API requests with the JSON null value. By default, fields with empty
+	// values are omitted from API requests. However, any field with an
+	// empty value appearing in NullFields will be sent to the server as
+	// null. It is an error if a field in this list has a non-empty value.
+	// This may be used to include null fields in Patch requests.
+	NullFields []string `json:"-"`
+}
+
+func (s *ListPolicy) MarshalJSON() ([]byte, error) {
+	type noMethod ListPolicy
+	raw := noMethod(*s)
+	return gensupport.MarshalJSON(raw, s.ForceSendFields, s.NullFields)
+}
+
 // ListProjectsResponse: A page of the response received from
 // the
 // ListProjects
@@ -612,6 +1260,93 @@
 	return gensupport.MarshalJSON(raw, s.ForceSendFields, s.NullFields)
 }
 
+// OrgPolicy: Defines a Cloud Organization `Policy` which is used to
+// specify `Constraints`
+// for configurations of Cloud Platform resources.
+type OrgPolicy struct {
+	// BooleanPolicy: For boolean `Constraints`, whether to enforce the
+	// `Constraint` or not.
+	BooleanPolicy *BooleanPolicy `json:"booleanPolicy,omitempty"`
+
+	// Constraint: The name of the `Constraint` the `Policy` is configuring,
+	// for example,
+	// `constraints/serviceuser.services`.
+	//
+	// Immutable after creation.
+	Constraint string `json:"constraint,omitempty"`
+
+	// Etag: 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`.
+	Etag string `json:"etag,omitempty"`
+
+	// ListPolicy: List of values either allowed or disallowed.
+	ListPolicy *ListPolicy `json:"listPolicy,omitempty"`
+
+	// RestoreDefault: Restores the default behavior of the constraint;
+	// independent of
+	// `Constraint` type.
+	RestoreDefault *RestoreDefault `json:"restoreDefault,omitempty"`
+
+	// UpdateTime: 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.
+	UpdateTime string `json:"updateTime,omitempty"`
+
+	// Version: Version of the `Policy`. Default version is 0;
+	Version int64 `json:"version,omitempty"`
+
+	// ServerResponse contains the HTTP response code and headers from the
+	// server.
+	googleapi.ServerResponse `json:"-"`
+
+	// ForceSendFields is a list of field names (e.g. "BooleanPolicy") to
+	// unconditionally include in API requests. By default, fields with
+	// empty values are omitted from API requests. However, any non-pointer,
+	// non-interface field appearing in ForceSendFields will be sent to the
+	// server regardless of whether the field is empty or not. This may be
+	// used to include empty fields in Patch requests.
+	ForceSendFields []string `json:"-"`
+
+	// NullFields is a list of field names (e.g. "BooleanPolicy") to include
+	// in API requests with the JSON null value. By default, fields with
+	// empty values are omitted from API requests. However, any field with
+	// an empty value appearing in NullFields will be sent to the server as
+	// null. It is an error if a field in this list has a non-empty value.
+	// This may be used to include null fields in Patch requests.
+	NullFields []string `json:"-"`
+}
+
+func (s *OrgPolicy) MarshalJSON() ([]byte, error) {
+	type noMethod OrgPolicy
+	raw := noMethod(*s)
+	return gensupport.MarshalJSON(raw, s.ForceSendFields, s.NullFields)
+}
+
 // Organization: The root node in the resource hierarchy to which a
 // particular entity's
 // (e.g., company) resources belong.
@@ -1021,6 +1756,30 @@
 	return gensupport.MarshalJSON(raw, s.ForceSendFields, s.NullFields)
 }
 
+// RestoreDefault: 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.
+type RestoreDefault struct {
+}
+
 // SetIamPolicyRequest: Request message for `SetIamPolicy` method.
 type SetIamPolicyRequest struct {
 	// Policy: REQUIRED: The complete policy to be applied to the
@@ -1033,9 +1792,9 @@
 
 	// UpdateMask: 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, a
-	// default
-	// mask is used:
+	// the fields in the mask will be modified. If no mask is provided,
+	// the
+	// following default mask is used:
 	// paths: "bindings, etag"
 	// This field is only used by Cloud IAM.
 	UpdateMask string `json:"updateMask,omitempty"`
@@ -1063,6 +1822,35 @@
 	return gensupport.MarshalJSON(raw, s.ForceSendFields, s.NullFields)
 }
 
+// SetOrgPolicyRequest: The request sent to the SetOrgPolicyRequest
+// method.
+type SetOrgPolicyRequest struct {
+	// Policy: `Policy` to set on the resource.
+	Policy *OrgPolicy `json:"policy,omitempty"`
+
+	// ForceSendFields is a list of field names (e.g. "Policy") to
+	// unconditionally include in API requests. By default, fields with
+	// empty values are omitted from API requests. However, any non-pointer,
+	// non-interface field appearing in ForceSendFields will be sent to the
+	// server regardless of whether the field is empty or not. This may be
+	// used to include empty fields in Patch requests.
+	ForceSendFields []string `json:"-"`
+
+	// NullFields is a list of field names (e.g. "Policy") to include in API
+	// requests with the JSON null value. By default, fields with empty
+	// values are omitted from API requests. However, any field with an
+	// empty value appearing in NullFields will be sent to the server as
+	// null. It is an error if a field in this list has a non-empty value.
+	// This may be used to include null fields in Patch requests.
+	NullFields []string `json:"-"`
+}
+
+func (s *SetOrgPolicyRequest) MarshalJSON() ([]byte, error) {
+	type noMethod SetOrgPolicyRequest
+	raw := noMethod(*s)
+	return gensupport.MarshalJSON(raw, s.ForceSendFields, s.NullFields)
+}
+
 // TestIamPermissionsRequest: Request message for `TestIamPermissions`
 // method.
 type TestIamPermissionsRequest struct {
@@ -1139,6 +1927,276 @@
 type UndeleteProjectRequest struct {
 }
 
+// method id "cloudresourcemanager.organizations.clearOrgPolicy":
+
+type OrganizationsClearOrgPolicyCall struct {
+	s                     *Service
+	resource              string
+	clearorgpolicyrequest *ClearOrgPolicyRequest
+	urlParams_            gensupport.URLParams
+	ctx_                  context.Context
+	header_               http.Header
+}
+
+// ClearOrgPolicy: Clears a `Policy` from a resource.
+func (r *OrganizationsService) ClearOrgPolicy(resource string, clearorgpolicyrequest *ClearOrgPolicyRequest) *OrganizationsClearOrgPolicyCall {
+	c := &OrganizationsClearOrgPolicyCall{s: r.s, urlParams_: make(gensupport.URLParams)}
+	c.resource = resource
+	c.clearorgpolicyrequest = clearorgpolicyrequest
+	return c
+}
+
+// Fields allows partial responses to be retrieved. See
+// https://developers.google.com/gdata/docs/2.0/basics#PartialResponse
+// for more information.
+func (c *OrganizationsClearOrgPolicyCall) Fields(s ...googleapi.Field) *OrganizationsClearOrgPolicyCall {
+	c.urlParams_.Set("fields", googleapi.CombineFields(s))
+	return c
+}
+
+// Context sets the context to be used in this call's Do method. Any
+// pending HTTP request will be aborted if the provided context is
+// canceled.
+func (c *OrganizationsClearOrgPolicyCall) Context(ctx context.Context) *OrganizationsClearOrgPolicyCall {
+	c.ctx_ = ctx
+	return c
+}
+
+// Header returns an http.Header that can be modified by the caller to
+// add HTTP headers to the request.
+func (c *OrganizationsClearOrgPolicyCall) Header() http.Header {
+	if c.header_ == nil {
+		c.header_ = make(http.Header)
+	}
+	return c.header_
+}
+
+func (c *OrganizationsClearOrgPolicyCall) doRequest(alt string) (*http.Response, error) {
+	reqHeaders := make(http.Header)
+	for k, v := range c.header_ {
+		reqHeaders[k] = v
+	}
+	reqHeaders.Set("User-Agent", c.s.userAgent())
+	var body io.Reader = nil
+	body, err := googleapi.WithoutDataWrapper.JSONReader(c.clearorgpolicyrequest)
+	if err != nil {
+		return nil, err
+	}
+	reqHeaders.Set("Content-Type", "application/json")
+	c.urlParams_.Set("alt", alt)
+	urls := googleapi.ResolveRelative(c.s.BasePath, "v1beta1/{+resource}:clearOrgPolicy")
+	urls += "?" + c.urlParams_.Encode()
+	req, _ := http.NewRequest("POST", urls, body)
+	req.Header = reqHeaders
+	googleapi.Expand(req.URL, map[string]string{
+		"resource": c.resource,
+	})
+	return gensupport.SendRequest(c.ctx_, c.s.client, req)
+}
+
+// Do executes the "cloudresourcemanager.organizations.clearOrgPolicy" call.
+// Exactly one of *Empty or error will be non-nil. Any non-2xx status
+// code is an error. Response headers are in either
+// *Empty.ServerResponse.Header or (if a response was returned at all)
+// in error.(*googleapi.Error).Header. Use googleapi.IsNotModified to
+// check whether the returned error was because http.StatusNotModified
+// was returned.
+func (c *OrganizationsClearOrgPolicyCall) Do(opts ...googleapi.CallOption) (*Empty, error) {
+	gensupport.SetOptions(c.urlParams_, opts...)
+	res, err := c.doRequest("json")
+	if res != nil && res.StatusCode == http.StatusNotModified {
+		if res.Body != nil {
+			res.Body.Close()
+		}
+		return nil, &googleapi.Error{
+			Code:   res.StatusCode,
+			Header: res.Header,
+		}
+	}
+	if err != nil {
+		return nil, err
+	}
+	defer googleapi.CloseBody(res)
+	if err := googleapi.CheckResponse(res); err != nil {
+		return nil, err
+	}
+	ret := &Empty{
+		ServerResponse: googleapi.ServerResponse{
+			Header:         res.Header,
+			HTTPStatusCode: res.StatusCode,
+		},
+	}
+	target := &ret
+	if err := json.NewDecoder(res.Body).Decode(target); err != nil {
+		return nil, err
+	}
+	return ret, nil
+	// {
+	//   "description": "Clears a `Policy` from a resource.",
+	//   "flatPath": "v1beta1/organizations/{organizationsId}:clearOrgPolicy",
+	//   "httpMethod": "POST",
+	//   "id": "cloudresourcemanager.organizations.clearOrgPolicy",
+	//   "parameterOrder": [
+	//     "resource"
+	//   ],
+	//   "parameters": {
+	//     "resource": {
+	//       "description": "Name of the resource for the `Policy` to clear.",
+	//       "location": "path",
+	//       "pattern": "^organizations/[^/]+$",
+	//       "required": true,
+	//       "type": "string"
+	//     }
+	//   },
+	//   "path": "v1beta1/{+resource}:clearOrgPolicy",
+	//   "request": {
+	//     "$ref": "ClearOrgPolicyRequest"
+	//   },
+	//   "response": {
+	//     "$ref": "Empty"
+	//   },
+	//   "scopes": [
+	//     "https://www.googleapis.com/auth/cloud-platform"
+	//   ]
+	// }
+
+}
+
+// method id "cloudresourcemanager.organizations.clearOrgPolicyV1":
+
+type OrganizationsClearOrgPolicyV1Call struct {
+	s                     *Service
+	resource              string
+	clearorgpolicyrequest *ClearOrgPolicyRequest
+	urlParams_            gensupport.URLParams
+	ctx_                  context.Context
+	header_               http.Header
+}
+
+// ClearOrgPolicyV1: Clears a `Policy` from a resource.
+func (r *OrganizationsService) ClearOrgPolicyV1(resource string, clearorgpolicyrequest *ClearOrgPolicyRequest) *OrganizationsClearOrgPolicyV1Call {
+	c := &OrganizationsClearOrgPolicyV1Call{s: r.s, urlParams_: make(gensupport.URLParams)}
+	c.resource = resource
+	c.clearorgpolicyrequest = clearorgpolicyrequest
+	return c
+}
+
+// Fields allows partial responses to be retrieved. See
+// https://developers.google.com/gdata/docs/2.0/basics#PartialResponse
+// for more information.
+func (c *OrganizationsClearOrgPolicyV1Call) Fields(s ...googleapi.Field) *OrganizationsClearOrgPolicyV1Call {
+	c.urlParams_.Set("fields", googleapi.CombineFields(s))
+	return c
+}
+
+// Context sets the context to be used in this call's Do method. Any
+// pending HTTP request will be aborted if the provided context is
+// canceled.
+func (c *OrganizationsClearOrgPolicyV1Call) Context(ctx context.Context) *OrganizationsClearOrgPolicyV1Call {
+	c.ctx_ = ctx
+	return c
+}
+
+// Header returns an http.Header that can be modified by the caller to
+// add HTTP headers to the request.
+func (c *OrganizationsClearOrgPolicyV1Call) Header() http.Header {
+	if c.header_ == nil {
+		c.header_ = make(http.Header)
+	}
+	return c.header_
+}
+
+func (c *OrganizationsClearOrgPolicyV1Call) doRequest(alt string) (*http.Response, error) {
+	reqHeaders := make(http.Header)
+	for k, v := range c.header_ {
+		reqHeaders[k] = v
+	}
+	reqHeaders.Set("User-Agent", c.s.userAgent())
+	var body io.Reader = nil
+	body, err := googleapi.WithoutDataWrapper.JSONReader(c.clearorgpolicyrequest)
+	if err != nil {
+		return nil, err
+	}
+	reqHeaders.Set("Content-Type", "application/json")
+	c.urlParams_.Set("alt", alt)
+	urls := googleapi.ResolveRelative(c.s.BasePath, "v1beta1/{+resource}:clearOrgPolicyV1")
+	urls += "?" + c.urlParams_.Encode()
+	req, _ := http.NewRequest("POST", urls, body)
+	req.Header = reqHeaders
+	googleapi.Expand(req.URL, map[string]string{
+		"resource": c.resource,
+	})
+	return gensupport.SendRequest(c.ctx_, c.s.client, req)
+}
+
+// Do executes the "cloudresourcemanager.organizations.clearOrgPolicyV1" call.
+// Exactly one of *Empty or error will be non-nil. Any non-2xx status
+// code is an error. Response headers are in either
+// *Empty.ServerResponse.Header or (if a response was returned at all)
+// in error.(*googleapi.Error).Header. Use googleapi.IsNotModified to
+// check whether the returned error was because http.StatusNotModified
+// was returned.
+func (c *OrganizationsClearOrgPolicyV1Call) Do(opts ...googleapi.CallOption) (*Empty, error) {
+	gensupport.SetOptions(c.urlParams_, opts...)
+	res, err := c.doRequest("json")
+	if res != nil && res.StatusCode == http.StatusNotModified {
+		if res.Body != nil {
+			res.Body.Close()
+		}
+		return nil, &googleapi.Error{
+			Code:   res.StatusCode,
+			Header: res.Header,
+		}
+	}
+	if err != nil {
+		return nil, err
+	}
+	defer googleapi.CloseBody(res)
+	if err := googleapi.CheckResponse(res); err != nil {
+		return nil, err
+	}
+	ret := &Empty{
+		ServerResponse: googleapi.ServerResponse{
+			Header:         res.Header,
+			HTTPStatusCode: res.StatusCode,
+		},
+	}
+	target := &ret
+	if err := json.NewDecoder(res.Body).Decode(target); err != nil {
+		return nil, err
+	}
+	return ret, nil
+	// {
+	//   "description": "Clears a `Policy` from a resource.",
+	//   "flatPath": "v1beta1/organizations/{organizationsId}:clearOrgPolicyV1",
+	//   "httpMethod": "POST",
+	//   "id": "cloudresourcemanager.organizations.clearOrgPolicyV1",
+	//   "parameterOrder": [
+	//     "resource"
+	//   ],
+	//   "parameters": {
+	//     "resource": {
+	//       "description": "Name of the resource for the `Policy` to clear.",
+	//       "location": "path",
+	//       "pattern": "^organizations/[^/]+$",
+	//       "required": true,
+	//       "type": "string"
+	//     }
+	//   },
+	//   "path": "v1beta1/{+resource}:clearOrgPolicyV1",
+	//   "request": {
+	//     "$ref": "ClearOrgPolicyRequest"
+	//   },
+	//   "response": {
+	//     "$ref": "Empty"
+	//   },
+	//   "scopes": [
+	//     "https://www.googleapis.com/auth/cloud-platform"
+	//   ]
+	// }
+
+}
+
 // method id "cloudresourcemanager.organizations.get":
 
 type OrganizationsGetCall struct {
@@ -1207,7 +2265,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	if c.ifNoneMatch_ != "" {
 		reqHeaders.Set("If-None-Match", c.ifNoneMatch_)
 	}
@@ -1294,6 +2351,288 @@
 
 }
 
+// method id "cloudresourcemanager.organizations.getEffectiveOrgPolicy":
+
+type OrganizationsGetEffectiveOrgPolicyCall struct {
+	s                            *Service
+	resource                     string
+	geteffectiveorgpolicyrequest *GetEffectiveOrgPolicyRequest
+	urlParams_                   gensupport.URLParams
+	ctx_                         context.Context
+	header_                      http.Header
+}
+
+// GetEffectiveOrgPolicy: Gets the effective `Policy` on a resource.
+// This is the result of merging
+// `Policies` in the resource hierarchy. The returned `Policy` will not
+// have
+// an `etag`set because it is a computed `Policy` across multiple
+// resources.
+func (r *OrganizationsService) GetEffectiveOrgPolicy(resource string, geteffectiveorgpolicyrequest *GetEffectiveOrgPolicyRequest) *OrganizationsGetEffectiveOrgPolicyCall {
+	c := &OrganizationsGetEffectiveOrgPolicyCall{s: r.s, urlParams_: make(gensupport.URLParams)}
+	c.resource = resource
+	c.geteffectiveorgpolicyrequest = geteffectiveorgpolicyrequest
+	return c
+}
+
+// Fields allows partial responses to be retrieved. See
+// https://developers.google.com/gdata/docs/2.0/basics#PartialResponse
+// for more information.
+func (c *OrganizationsGetEffectiveOrgPolicyCall) Fields(s ...googleapi.Field) *OrganizationsGetEffectiveOrgPolicyCall {
+	c.urlParams_.Set("fields", googleapi.CombineFields(s))
+	return c
+}
+
+// Context sets the context to be used in this call's Do method. Any
+// pending HTTP request will be aborted if the provided context is
+// canceled.
+func (c *OrganizationsGetEffectiveOrgPolicyCall) Context(ctx context.Context) *OrganizationsGetEffectiveOrgPolicyCall {
+	c.ctx_ = ctx
+	return c
+}
+
+// Header returns an http.Header that can be modified by the caller to
+// add HTTP headers to the request.
+func (c *OrganizationsGetEffectiveOrgPolicyCall) Header() http.Header {
+	if c.header_ == nil {
+		c.header_ = make(http.Header)
+	}
+	return c.header_
+}
+
+func (c *OrganizationsGetEffectiveOrgPolicyCall) doRequest(alt string) (*http.Response, error) {
+	reqHeaders := make(http.Header)
+	for k, v := range c.header_ {
+		reqHeaders[k] = v
+	}
+	reqHeaders.Set("User-Agent", c.s.userAgent())
+	var body io.Reader = nil
+	body, err := googleapi.WithoutDataWrapper.JSONReader(c.geteffectiveorgpolicyrequest)
+	if err != nil {
+		return nil, err
+	}
+	reqHeaders.Set("Content-Type", "application/json")
+	c.urlParams_.Set("alt", alt)
+	urls := googleapi.ResolveRelative(c.s.BasePath, "v1beta1/{+resource}:getEffectiveOrgPolicy")
+	urls += "?" + c.urlParams_.Encode()
+	req, _ := http.NewRequest("POST", urls, body)
+	req.Header = reqHeaders
+	googleapi.Expand(req.URL, map[string]string{
+		"resource": c.resource,
+	})
+	return gensupport.SendRequest(c.ctx_, c.s.client, req)
+}
+
+// Do executes the "cloudresourcemanager.organizations.getEffectiveOrgPolicy" call.
+// Exactly one of *OrgPolicy or error will be non-nil. Any non-2xx
+// status code is an error. Response headers are in either
+// *OrgPolicy.ServerResponse.Header or (if a response was returned at
+// all) in error.(*googleapi.Error).Header. Use googleapi.IsNotModified
+// to check whether the returned error was because
+// http.StatusNotModified was returned.
+func (c *OrganizationsGetEffectiveOrgPolicyCall) Do(opts ...googleapi.CallOption) (*OrgPolicy, error) {
+	gensupport.SetOptions(c.urlParams_, opts...)
+	res, err := c.doRequest("json")
+	if res != nil && res.StatusCode == http.StatusNotModified {
+		if res.Body != nil {
+			res.Body.Close()
+		}
+		return nil, &googleapi.Error{
+			Code:   res.StatusCode,
+			Header: res.Header,
+		}
+	}
+	if err != nil {
+		return nil, err
+	}
+	defer googleapi.CloseBody(res)
+	if err := googleapi.CheckResponse(res); err != nil {
+		return nil, err
+	}
+	ret := &OrgPolicy{
+		ServerResponse: googleapi.ServerResponse{
+			Header:         res.Header,
+			HTTPStatusCode: res.StatusCode,
+		},
+	}
+	target := &ret
+	if err := json.NewDecoder(res.Body).Decode(target); err != nil {
+		return nil, err
+	}
+	return ret, nil
+	// {
+	//   "description": "Gets the effective `Policy` on a resource. This is the result of merging\n`Policies` in the resource hierarchy. The returned `Policy` will not have\nan `etag`set because it is a computed `Policy` across multiple resources.",
+	//   "flatPath": "v1beta1/organizations/{organizationsId}:getEffectiveOrgPolicy",
+	//   "httpMethod": "POST",
+	//   "id": "cloudresourcemanager.organizations.getEffectiveOrgPolicy",
+	//   "parameterOrder": [
+	//     "resource"
+	//   ],
+	//   "parameters": {
+	//     "resource": {
+	//       "description": "The name of the resource to start computing the effective `Policy`.",
+	//       "location": "path",
+	//       "pattern": "^organizations/[^/]+$",
+	//       "required": true,
+	//       "type": "string"
+	//     }
+	//   },
+	//   "path": "v1beta1/{+resource}:getEffectiveOrgPolicy",
+	//   "request": {
+	//     "$ref": "GetEffectiveOrgPolicyRequest"
+	//   },
+	//   "response": {
+	//     "$ref": "OrgPolicy"
+	//   },
+	//   "scopes": [
+	//     "https://www.googleapis.com/auth/cloud-platform",
+	//     "https://www.googleapis.com/auth/cloud-platform.read-only"
+	//   ]
+	// }
+
+}
+
+// method id "cloudresourcemanager.organizations.getEffectiveOrgPolicyV1":
+
+type OrganizationsGetEffectiveOrgPolicyV1Call struct {
+	s                            *Service
+	resource                     string
+	geteffectiveorgpolicyrequest *GetEffectiveOrgPolicyRequest
+	urlParams_                   gensupport.URLParams
+	ctx_                         context.Context
+	header_                      http.Header
+}
+
+// GetEffectiveOrgPolicyV1: Gets the effective `Policy` on a resource.
+// This is the result of merging
+// `Policies` in the resource hierarchy. The returned `Policy` will not
+// have
+// an `etag`set because it is a computed `Policy` across multiple
+// resources.
+func (r *OrganizationsService) GetEffectiveOrgPolicyV1(resource string, geteffectiveorgpolicyrequest *GetEffectiveOrgPolicyRequest) *OrganizationsGetEffectiveOrgPolicyV1Call {
+	c := &OrganizationsGetEffectiveOrgPolicyV1Call{s: r.s, urlParams_: make(gensupport.URLParams)}
+	c.resource = resource
+	c.geteffectiveorgpolicyrequest = geteffectiveorgpolicyrequest
+	return c
+}
+
+// Fields allows partial responses to be retrieved. See
+// https://developers.google.com/gdata/docs/2.0/basics#PartialResponse
+// for more information.
+func (c *OrganizationsGetEffectiveOrgPolicyV1Call) Fields(s ...googleapi.Field) *OrganizationsGetEffectiveOrgPolicyV1Call {
+	c.urlParams_.Set("fields", googleapi.CombineFields(s))
+	return c
+}
+
+// Context sets the context to be used in this call's Do method. Any
+// pending HTTP request will be aborted if the provided context is
+// canceled.
+func (c *OrganizationsGetEffectiveOrgPolicyV1Call) Context(ctx context.Context) *OrganizationsGetEffectiveOrgPolicyV1Call {
+	c.ctx_ = ctx
+	return c
+}
+
+// Header returns an http.Header that can be modified by the caller to
+// add HTTP headers to the request.
+func (c *OrganizationsGetEffectiveOrgPolicyV1Call) Header() http.Header {
+	if c.header_ == nil {
+		c.header_ = make(http.Header)
+	}
+	return c.header_
+}
+
+func (c *OrganizationsGetEffectiveOrgPolicyV1Call) doRequest(alt string) (*http.Response, error) {
+	reqHeaders := make(http.Header)
+	for k, v := range c.header_ {
+		reqHeaders[k] = v
+	}
+	reqHeaders.Set("User-Agent", c.s.userAgent())
+	var body io.Reader = nil
+	body, err := googleapi.WithoutDataWrapper.JSONReader(c.geteffectiveorgpolicyrequest)
+	if err != nil {
+		return nil, err
+	}
+	reqHeaders.Set("Content-Type", "application/json")
+	c.urlParams_.Set("alt", alt)
+	urls := googleapi.ResolveRelative(c.s.BasePath, "v1beta1/{+resource}:getEffectiveOrgPolicyV1")
+	urls += "?" + c.urlParams_.Encode()
+	req, _ := http.NewRequest("POST", urls, body)
+	req.Header = reqHeaders
+	googleapi.Expand(req.URL, map[string]string{
+		"resource": c.resource,
+	})
+	return gensupport.SendRequest(c.ctx_, c.s.client, req)
+}
+
+// Do executes the "cloudresourcemanager.organizations.getEffectiveOrgPolicyV1" call.
+// Exactly one of *OrgPolicy or error will be non-nil. Any non-2xx
+// status code is an error. Response headers are in either
+// *OrgPolicy.ServerResponse.Header or (if a response was returned at
+// all) in error.(*googleapi.Error).Header. Use googleapi.IsNotModified
+// to check whether the returned error was because
+// http.StatusNotModified was returned.
+func (c *OrganizationsGetEffectiveOrgPolicyV1Call) Do(opts ...googleapi.CallOption) (*OrgPolicy, error) {
+	gensupport.SetOptions(c.urlParams_, opts...)
+	res, err := c.doRequest("json")
+	if res != nil && res.StatusCode == http.StatusNotModified {
+		if res.Body != nil {
+			res.Body.Close()
+		}
+		return nil, &googleapi.Error{
+			Code:   res.StatusCode,
+			Header: res.Header,
+		}
+	}
+	if err != nil {
+		return nil, err
+	}
+	defer googleapi.CloseBody(res)
+	if err := googleapi.CheckResponse(res); err != nil {
+		return nil, err
+	}
+	ret := &OrgPolicy{
+		ServerResponse: googleapi.ServerResponse{
+			Header:         res.Header,
+			HTTPStatusCode: res.StatusCode,
+		},
+	}
+	target := &ret
+	if err := json.NewDecoder(res.Body).Decode(target); err != nil {
+		return nil, err
+	}
+	return ret, nil
+	// {
+	//   "description": "Gets the effective `Policy` on a resource. This is the result of merging\n`Policies` in the resource hierarchy. The returned `Policy` will not have\nan `etag`set because it is a computed `Policy` across multiple resources.",
+	//   "flatPath": "v1beta1/organizations/{organizationsId}:getEffectiveOrgPolicyV1",
+	//   "httpMethod": "POST",
+	//   "id": "cloudresourcemanager.organizations.getEffectiveOrgPolicyV1",
+	//   "parameterOrder": [
+	//     "resource"
+	//   ],
+	//   "parameters": {
+	//     "resource": {
+	//       "description": "The name of the resource to start computing the effective `Policy`.",
+	//       "location": "path",
+	//       "pattern": "^organizations/[^/]+$",
+	//       "required": true,
+	//       "type": "string"
+	//     }
+	//   },
+	//   "path": "v1beta1/{+resource}:getEffectiveOrgPolicyV1",
+	//   "request": {
+	//     "$ref": "GetEffectiveOrgPolicyRequest"
+	//   },
+	//   "response": {
+	//     "$ref": "OrgPolicy"
+	//   },
+	//   "scopes": [
+	//     "https://www.googleapis.com/auth/cloud-platform",
+	//     "https://www.googleapis.com/auth/cloud-platform.read-only"
+	//   ]
+	// }
+
+}
+
 // method id "cloudresourcemanager.organizations.getIamPolicy":
 
 type OrganizationsGetIamPolicyCall struct {
@@ -1348,7 +2687,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	var body io.Reader = nil
 	body, err := googleapi.WithoutDataWrapper.JSONReader(c.getiampolicyrequest)
 	if err != nil {
@@ -1435,6 +2773,294 @@
 
 }
 
+// method id "cloudresourcemanager.organizations.getOrgPolicy":
+
+type OrganizationsGetOrgPolicyCall struct {
+	s                   *Service
+	resource            string
+	getorgpolicyrequest *GetOrgPolicyRequest
+	urlParams_          gensupport.URLParams
+	ctx_                context.Context
+	header_             http.Header
+}
+
+// GetOrgPolicy: Gets a `Policy` on a resource.
+//
+// If no `Policy` is set on the resource, a `Policy` is returned with
+// default
+// values including `POLICY_TYPE_NOT_SET` for the `policy_type oneof`.
+// The
+// `etag` value can be used with `SetOrgPolicy()` to create or update
+// a
+// `Policy` during read-modify-write.
+func (r *OrganizationsService) GetOrgPolicy(resource string, getorgpolicyrequest *GetOrgPolicyRequest) *OrganizationsGetOrgPolicyCall {
+	c := &OrganizationsGetOrgPolicyCall{s: r.s, urlParams_: make(gensupport.URLParams)}
+	c.resource = resource
+	c.getorgpolicyrequest = getorgpolicyrequest
+	return c
+}
+
+// Fields allows partial responses to be retrieved. See
+// https://developers.google.com/gdata/docs/2.0/basics#PartialResponse
+// for more information.
+func (c *OrganizationsGetOrgPolicyCall) Fields(s ...googleapi.Field) *OrganizationsGetOrgPolicyCall {
+	c.urlParams_.Set("fields", googleapi.CombineFields(s))
+	return c
+}
+
+// Context sets the context to be used in this call's Do method. Any
+// pending HTTP request will be aborted if the provided context is
+// canceled.
+func (c *OrganizationsGetOrgPolicyCall) Context(ctx context.Context) *OrganizationsGetOrgPolicyCall {
+	c.ctx_ = ctx
+	return c
+}
+
+// Header returns an http.Header that can be modified by the caller to
+// add HTTP headers to the request.
+func (c *OrganizationsGetOrgPolicyCall) Header() http.Header {
+	if c.header_ == nil {
+		c.header_ = make(http.Header)
+	}
+	return c.header_
+}
+
+func (c *OrganizationsGetOrgPolicyCall) doRequest(alt string) (*http.Response, error) {
+	reqHeaders := make(http.Header)
+	for k, v := range c.header_ {
+		reqHeaders[k] = v
+	}
+	reqHeaders.Set("User-Agent", c.s.userAgent())
+	var body io.Reader = nil
+	body, err := googleapi.WithoutDataWrapper.JSONReader(c.getorgpolicyrequest)
+	if err != nil {
+		return nil, err
+	}
+	reqHeaders.Set("Content-Type", "application/json")
+	c.urlParams_.Set("alt", alt)
+	urls := googleapi.ResolveRelative(c.s.BasePath, "v1beta1/{+resource}:getOrgPolicy")
+	urls += "?" + c.urlParams_.Encode()
+	req, _ := http.NewRequest("POST", urls, body)
+	req.Header = reqHeaders
+	googleapi.Expand(req.URL, map[string]string{
+		"resource": c.resource,
+	})
+	return gensupport.SendRequest(c.ctx_, c.s.client, req)
+}
+
+// Do executes the "cloudresourcemanager.organizations.getOrgPolicy" call.
+// Exactly one of *OrgPolicy or error will be non-nil. Any non-2xx
+// status code is an error. Response headers are in either
+// *OrgPolicy.ServerResponse.Header or (if a response was returned at
+// all) in error.(*googleapi.Error).Header. Use googleapi.IsNotModified
+// to check whether the returned error was because
+// http.StatusNotModified was returned.
+func (c *OrganizationsGetOrgPolicyCall) Do(opts ...googleapi.CallOption) (*OrgPolicy, error) {
+	gensupport.SetOptions(c.urlParams_, opts...)
+	res, err := c.doRequest("json")
+	if res != nil && res.StatusCode == http.StatusNotModified {
+		if res.Body != nil {
+			res.Body.Close()
+		}
+		return nil, &googleapi.Error{
+			Code:   res.StatusCode,
+			Header: res.Header,
+		}
+	}
+	if err != nil {
+		return nil, err
+	}
+	defer googleapi.CloseBody(res)
+	if err := googleapi.CheckResponse(res); err != nil {
+		return nil, err
+	}
+	ret := &OrgPolicy{
+		ServerResponse: googleapi.ServerResponse{
+			Header:         res.Header,
+			HTTPStatusCode: res.StatusCode,
+		},
+	}
+	target := &ret
+	if err := json.NewDecoder(res.Body).Decode(target); err != nil {
+		return nil, err
+	}
+	return ret, nil
+	// {
+	//   "description": "Gets a `Policy` on a resource.\n\nIf no `Policy` is set on the resource, a `Policy` is returned with default\nvalues including `POLICY_TYPE_NOT_SET` for the `policy_type oneof`. The\n`etag` value can be used with `SetOrgPolicy()` to create or update a\n`Policy` during read-modify-write.",
+	//   "flatPath": "v1beta1/organizations/{organizationsId}:getOrgPolicy",
+	//   "httpMethod": "POST",
+	//   "id": "cloudresourcemanager.organizations.getOrgPolicy",
+	//   "parameterOrder": [
+	//     "resource"
+	//   ],
+	//   "parameters": {
+	//     "resource": {
+	//       "description": "Name of the resource the `Policy` is set on.",
+	//       "location": "path",
+	//       "pattern": "^organizations/[^/]+$",
+	//       "required": true,
+	//       "type": "string"
+	//     }
+	//   },
+	//   "path": "v1beta1/{+resource}:getOrgPolicy",
+	//   "request": {
+	//     "$ref": "GetOrgPolicyRequest"
+	//   },
+	//   "response": {
+	//     "$ref": "OrgPolicy"
+	//   },
+	//   "scopes": [
+	//     "https://www.googleapis.com/auth/cloud-platform",
+	//     "https://www.googleapis.com/auth/cloud-platform.read-only"
+	//   ]
+	// }
+
+}
+
+// method id "cloudresourcemanager.organizations.getOrgPolicyV1":
+
+type OrganizationsGetOrgPolicyV1Call struct {
+	s                   *Service
+	resource            string
+	getorgpolicyrequest *GetOrgPolicyRequest
+	urlParams_          gensupport.URLParams
+	ctx_                context.Context
+	header_             http.Header
+}
+
+// GetOrgPolicyV1: Gets a `Policy` on a resource.
+//
+// If no `Policy` is set on the resource, a `Policy` is returned with
+// default
+// values including `POLICY_TYPE_NOT_SET` for the `policy_type oneof`.
+// The
+// `etag` value can be used with `SetOrgPolicy()` to create or update
+// a
+// `Policy` during read-modify-write.
+func (r *OrganizationsService) GetOrgPolicyV1(resource string, getorgpolicyrequest *GetOrgPolicyRequest) *OrganizationsGetOrgPolicyV1Call {
+	c := &OrganizationsGetOrgPolicyV1Call{s: r.s, urlParams_: make(gensupport.URLParams)}
+	c.resource = resource
+	c.getorgpolicyrequest = getorgpolicyrequest
+	return c
+}
+
+// Fields allows partial responses to be retrieved. See
+// https://developers.google.com/gdata/docs/2.0/basics#PartialResponse
+// for more information.
+func (c *OrganizationsGetOrgPolicyV1Call) Fields(s ...googleapi.Field) *OrganizationsGetOrgPolicyV1Call {
+	c.urlParams_.Set("fields", googleapi.CombineFields(s))
+	return c
+}
+
+// Context sets the context to be used in this call's Do method. Any
+// pending HTTP request will be aborted if the provided context is
+// canceled.
+func (c *OrganizationsGetOrgPolicyV1Call) Context(ctx context.Context) *OrganizationsGetOrgPolicyV1Call {
+	c.ctx_ = ctx
+	return c
+}
+
+// Header returns an http.Header that can be modified by the caller to
+// add HTTP headers to the request.
+func (c *OrganizationsGetOrgPolicyV1Call) Header() http.Header {
+	if c.header_ == nil {
+		c.header_ = make(http.Header)
+	}
+	return c.header_
+}
+
+func (c *OrganizationsGetOrgPolicyV1Call) doRequest(alt string) (*http.Response, error) {
+	reqHeaders := make(http.Header)
+	for k, v := range c.header_ {
+		reqHeaders[k] = v
+	}
+	reqHeaders.Set("User-Agent", c.s.userAgent())
+	var body io.Reader = nil
+	body, err := googleapi.WithoutDataWrapper.JSONReader(c.getorgpolicyrequest)
+	if err != nil {
+		return nil, err
+	}
+	reqHeaders.Set("Content-Type", "application/json")
+	c.urlParams_.Set("alt", alt)
+	urls := googleapi.ResolveRelative(c.s.BasePath, "v1beta1/{+resource}:getOrgPolicyV1")
+	urls += "?" + c.urlParams_.Encode()
+	req, _ := http.NewRequest("POST", urls, body)
+	req.Header = reqHeaders
+	googleapi.Expand(req.URL, map[string]string{
+		"resource": c.resource,
+	})
+	return gensupport.SendRequest(c.ctx_, c.s.client, req)
+}
+
+// Do executes the "cloudresourcemanager.organizations.getOrgPolicyV1" call.
+// Exactly one of *OrgPolicy or error will be non-nil. Any non-2xx
+// status code is an error. Response headers are in either
+// *OrgPolicy.ServerResponse.Header or (if a response was returned at
+// all) in error.(*googleapi.Error).Header. Use googleapi.IsNotModified
+// to check whether the returned error was because
+// http.StatusNotModified was returned.
+func (c *OrganizationsGetOrgPolicyV1Call) Do(opts ...googleapi.CallOption) (*OrgPolicy, error) {
+	gensupport.SetOptions(c.urlParams_, opts...)
+	res, err := c.doRequest("json")
+	if res != nil && res.StatusCode == http.StatusNotModified {
+		if res.Body != nil {
+			res.Body.Close()
+		}
+		return nil, &googleapi.Error{
+			Code:   res.StatusCode,
+			Header: res.Header,
+		}
+	}
+	if err != nil {
+		return nil, err
+	}
+	defer googleapi.CloseBody(res)
+	if err := googleapi.CheckResponse(res); err != nil {
+		return nil, err
+	}
+	ret := &OrgPolicy{
+		ServerResponse: googleapi.ServerResponse{
+			Header:         res.Header,
+			HTTPStatusCode: res.StatusCode,
+		},
+	}
+	target := &ret
+	if err := json.NewDecoder(res.Body).Decode(target); err != nil {
+		return nil, err
+	}
+	return ret, nil
+	// {
+	//   "description": "Gets a `Policy` on a resource.\n\nIf no `Policy` is set on the resource, a `Policy` is returned with default\nvalues including `POLICY_TYPE_NOT_SET` for the `policy_type oneof`. The\n`etag` value can be used with `SetOrgPolicy()` to create or update a\n`Policy` during read-modify-write.",
+	//   "flatPath": "v1beta1/organizations/{organizationsId}:getOrgPolicyV1",
+	//   "httpMethod": "POST",
+	//   "id": "cloudresourcemanager.organizations.getOrgPolicyV1",
+	//   "parameterOrder": [
+	//     "resource"
+	//   ],
+	//   "parameters": {
+	//     "resource": {
+	//       "description": "Name of the resource the `Policy` is set on.",
+	//       "location": "path",
+	//       "pattern": "^organizations/[^/]+$",
+	//       "required": true,
+	//       "type": "string"
+	//     }
+	//   },
+	//   "path": "v1beta1/{+resource}:getOrgPolicyV1",
+	//   "request": {
+	//     "$ref": "GetOrgPolicyRequest"
+	//   },
+	//   "response": {
+	//     "$ref": "OrgPolicy"
+	//   },
+	//   "scopes": [
+	//     "https://www.googleapis.com/auth/cloud-platform",
+	//     "https://www.googleapis.com/auth/cloud-platform.read-only"
+	//   ]
+	// }
+
+}
+
 // method id "cloudresourcemanager.organizations.list":
 
 type OrganizationsListCall struct {
@@ -1538,7 +3164,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	if c.ifNoneMatch_ != "" {
 		reqHeaders.Set("If-None-Match", c.ifNoneMatch_)
 	}
@@ -1645,6 +3270,324 @@
 	}
 }
 
+// method id "cloudresourcemanager.organizations.listAvailableOrgPolicyConstraints":
+
+type OrganizationsListAvailableOrgPolicyConstraintsCall struct {
+	s                                        *Service
+	resource                                 string
+	listavailableorgpolicyconstraintsrequest *ListAvailableOrgPolicyConstraintsRequest
+	urlParams_                               gensupport.URLParams
+	ctx_                                     context.Context
+	header_                                  http.Header
+}
+
+// ListAvailableOrgPolicyConstraints: Lists `Constraints` that could be
+// applied on the specified resource.
+func (r *OrganizationsService) ListAvailableOrgPolicyConstraints(resource string, listavailableorgpolicyconstraintsrequest *ListAvailableOrgPolicyConstraintsRequest) *OrganizationsListAvailableOrgPolicyConstraintsCall {
+	c := &OrganizationsListAvailableOrgPolicyConstraintsCall{s: r.s, urlParams_: make(gensupport.URLParams)}
+	c.resource = resource
+	c.listavailableorgpolicyconstraintsrequest = listavailableorgpolicyconstraintsrequest
+	return c
+}
+
+// Fields allows partial responses to be retrieved. See
+// https://developers.google.com/gdata/docs/2.0/basics#PartialResponse
+// for more information.
+func (c *OrganizationsListAvailableOrgPolicyConstraintsCall) Fields(s ...googleapi.Field) *OrganizationsListAvailableOrgPolicyConstraintsCall {
+	c.urlParams_.Set("fields", googleapi.CombineFields(s))
+	return c
+}
+
+// Context sets the context to be used in this call's Do method. Any
+// pending HTTP request will be aborted if the provided context is
+// canceled.
+func (c *OrganizationsListAvailableOrgPolicyConstraintsCall) Context(ctx context.Context) *OrganizationsListAvailableOrgPolicyConstraintsCall {
+	c.ctx_ = ctx
+	return c
+}
+
+// Header returns an http.Header that can be modified by the caller to
+// add HTTP headers to the request.
+func (c *OrganizationsListAvailableOrgPolicyConstraintsCall) Header() http.Header {
+	if c.header_ == nil {
+		c.header_ = make(http.Header)
+	}
+	return c.header_
+}
+
+func (c *OrganizationsListAvailableOrgPolicyConstraintsCall) doRequest(alt string) (*http.Response, error) {
+	reqHeaders := make(http.Header)
+	for k, v := range c.header_ {
+		reqHeaders[k] = v
+	}
+	reqHeaders.Set("User-Agent", c.s.userAgent())
+	var body io.Reader = nil
+	body, err := googleapi.WithoutDataWrapper.JSONReader(c.listavailableorgpolicyconstraintsrequest)
+	if err != nil {
+		return nil, err
+	}
+	reqHeaders.Set("Content-Type", "application/json")
+	c.urlParams_.Set("alt", alt)
+	urls := googleapi.ResolveRelative(c.s.BasePath, "v1beta1/{+resource}:listAvailableOrgPolicyConstraints")
+	urls += "?" + c.urlParams_.Encode()
+	req, _ := http.NewRequest("POST", urls, body)
+	req.Header = reqHeaders
+	googleapi.Expand(req.URL, map[string]string{
+		"resource": c.resource,
+	})
+	return gensupport.SendRequest(c.ctx_, c.s.client, req)
+}
+
+// Do executes the "cloudresourcemanager.organizations.listAvailableOrgPolicyConstraints" call.
+// Exactly one of *ListAvailableOrgPolicyConstraintsResponse or error
+// will be non-nil. Any non-2xx status code is an error. Response
+// headers are in either
+// *ListAvailableOrgPolicyConstraintsResponse.ServerResponse.Header or
+// (if a response was returned at all) in
+// error.(*googleapi.Error).Header. Use googleapi.IsNotModified to check
+// whether the returned error was because http.StatusNotModified was
+// returned.
+func (c *OrganizationsListAvailableOrgPolicyConstraintsCall) Do(opts ...googleapi.CallOption) (*ListAvailableOrgPolicyConstraintsResponse, error) {
+	gensupport.SetOptions(c.urlParams_, opts...)
+	res, err := c.doRequest("json")
+	if res != nil && res.StatusCode == http.StatusNotModified {
+		if res.Body != nil {
+			res.Body.Close()
+		}
+		return nil, &googleapi.Error{
+			Code:   res.StatusCode,
+			Header: res.Header,
+		}
+	}
+	if err != nil {
+		return nil, err
+	}
+	defer googleapi.CloseBody(res)
+	if err := googleapi.CheckResponse(res); err != nil {
+		return nil, err
+	}
+	ret := &ListAvailableOrgPolicyConstraintsResponse{
+		ServerResponse: googleapi.ServerResponse{
+			Header:         res.Header,
+			HTTPStatusCode: res.StatusCode,
+		},
+	}
+	target := &ret
+	if err := json.NewDecoder(res.Body).Decode(target); err != nil {
+		return nil, err
+	}
+	return ret, nil
+	// {
+	//   "description": "Lists `Constraints` that could be applied on the specified resource.",
+	//   "flatPath": "v1beta1/organizations/{organizationsId}:listAvailableOrgPolicyConstraints",
+	//   "httpMethod": "POST",
+	//   "id": "cloudresourcemanager.organizations.listAvailableOrgPolicyConstraints",
+	//   "parameterOrder": [
+	//     "resource"
+	//   ],
+	//   "parameters": {
+	//     "resource": {
+	//       "description": "Name of the resource to list `Constraints` for.",
+	//       "location": "path",
+	//       "pattern": "^organizations/[^/]+$",
+	//       "required": true,
+	//       "type": "string"
+	//     }
+	//   },
+	//   "path": "v1beta1/{+resource}:listAvailableOrgPolicyConstraints",
+	//   "request": {
+	//     "$ref": "ListAvailableOrgPolicyConstraintsRequest"
+	//   },
+	//   "response": {
+	//     "$ref": "ListAvailableOrgPolicyConstraintsResponse"
+	//   },
+	//   "scopes": [
+	//     "https://www.googleapis.com/auth/cloud-platform",
+	//     "https://www.googleapis.com/auth/cloud-platform.read-only"
+	//   ]
+	// }
+
+}
+
+// Pages invokes f for each page of results.
+// A non-nil error returned from f will halt the iteration.
+// The provided context supersedes any context provided to the Context method.
+func (c *OrganizationsListAvailableOrgPolicyConstraintsCall) Pages(ctx context.Context, f func(*ListAvailableOrgPolicyConstraintsResponse) error) error {
+	c.ctx_ = ctx
+	defer func(pt string) { c.listavailableorgpolicyconstraintsrequest.PageToken = pt }(c.listavailableorgpolicyconstraintsrequest.PageToken) // reset paging to original point
+	for {
+		x, err := c.Do()
+		if err != nil {
+			return err
+		}
+		if err := f(x); err != nil {
+			return err
+		}
+		if x.NextPageToken == "" {
+			return nil
+		}
+		c.listavailableorgpolicyconstraintsrequest.PageToken = x.NextPageToken
+	}
+}
+
+// method id "cloudresourcemanager.organizations.listOrgPolicies":
+
+type OrganizationsListOrgPoliciesCall struct {
+	s                      *Service
+	resource               string
+	listorgpoliciesrequest *ListOrgPoliciesRequest
+	urlParams_             gensupport.URLParams
+	ctx_                   context.Context
+	header_                http.Header
+}
+
+// ListOrgPolicies: Lists all the `Policies` set for a particular
+// resource.
+func (r *OrganizationsService) ListOrgPolicies(resource string, listorgpoliciesrequest *ListOrgPoliciesRequest) *OrganizationsListOrgPoliciesCall {
+	c := &OrganizationsListOrgPoliciesCall{s: r.s, urlParams_: make(gensupport.URLParams)}
+	c.resource = resource
+	c.listorgpoliciesrequest = listorgpoliciesrequest
+	return c
+}
+
+// Fields allows partial responses to be retrieved. See
+// https://developers.google.com/gdata/docs/2.0/basics#PartialResponse
+// for more information.
+func (c *OrganizationsListOrgPoliciesCall) Fields(s ...googleapi.Field) *OrganizationsListOrgPoliciesCall {
+	c.urlParams_.Set("fields", googleapi.CombineFields(s))
+	return c
+}
+
+// Context sets the context to be used in this call's Do method. Any
+// pending HTTP request will be aborted if the provided context is
+// canceled.
+func (c *OrganizationsListOrgPoliciesCall) Context(ctx context.Context) *OrganizationsListOrgPoliciesCall {
+	c.ctx_ = ctx
+	return c
+}
+
+// Header returns an http.Header that can be modified by the caller to
+// add HTTP headers to the request.
+func (c *OrganizationsListOrgPoliciesCall) Header() http.Header {
+	if c.header_ == nil {
+		c.header_ = make(http.Header)
+	}
+	return c.header_
+}
+
+func (c *OrganizationsListOrgPoliciesCall) doRequest(alt string) (*http.Response, error) {
+	reqHeaders := make(http.Header)
+	for k, v := range c.header_ {
+		reqHeaders[k] = v
+	}
+	reqHeaders.Set("User-Agent", c.s.userAgent())
+	var body io.Reader = nil
+	body, err := googleapi.WithoutDataWrapper.JSONReader(c.listorgpoliciesrequest)
+	if err != nil {
+		return nil, err
+	}
+	reqHeaders.Set("Content-Type", "application/json")
+	c.urlParams_.Set("alt", alt)
+	urls := googleapi.ResolveRelative(c.s.BasePath, "v1beta1/{+resource}:listOrgPolicies")
+	urls += "?" + c.urlParams_.Encode()
+	req, _ := http.NewRequest("POST", urls, body)
+	req.Header = reqHeaders
+	googleapi.Expand(req.URL, map[string]string{
+		"resource": c.resource,
+	})
+	return gensupport.SendRequest(c.ctx_, c.s.client, req)
+}
+
+// Do executes the "cloudresourcemanager.organizations.listOrgPolicies" call.
+// Exactly one of *ListOrgPoliciesResponse or error will be non-nil. Any
+// non-2xx status code is an error. Response headers are in either
+// *ListOrgPoliciesResponse.ServerResponse.Header or (if a response was
+// returned at all) in error.(*googleapi.Error).Header. Use
+// googleapi.IsNotModified to check whether the returned error was
+// because http.StatusNotModified was returned.
+func (c *OrganizationsListOrgPoliciesCall) Do(opts ...googleapi.CallOption) (*ListOrgPoliciesResponse, error) {
+	gensupport.SetOptions(c.urlParams_, opts...)
+	res, err := c.doRequest("json")
+	if res != nil && res.StatusCode == http.StatusNotModified {
+		if res.Body != nil {
+			res.Body.Close()
+		}
+		return nil, &googleapi.Error{
+			Code:   res.StatusCode,
+			Header: res.Header,
+		}
+	}
+	if err != nil {
+		return nil, err
+	}
+	defer googleapi.CloseBody(res)
+	if err := googleapi.CheckResponse(res); err != nil {
+		return nil, err
+	}
+	ret := &ListOrgPoliciesResponse{
+		ServerResponse: googleapi.ServerResponse{
+			Header:         res.Header,
+			HTTPStatusCode: res.StatusCode,
+		},
+	}
+	target := &ret
+	if err := json.NewDecoder(res.Body).Decode(target); err != nil {
+		return nil, err
+	}
+	return ret, nil
+	// {
+	//   "description": "Lists all the `Policies` set for a particular resource.",
+	//   "flatPath": "v1beta1/organizations/{organizationsId}:listOrgPolicies",
+	//   "httpMethod": "POST",
+	//   "id": "cloudresourcemanager.organizations.listOrgPolicies",
+	//   "parameterOrder": [
+	//     "resource"
+	//   ],
+	//   "parameters": {
+	//     "resource": {
+	//       "description": "Name of the resource to list Policies for.",
+	//       "location": "path",
+	//       "pattern": "^organizations/[^/]+$",
+	//       "required": true,
+	//       "type": "string"
+	//     }
+	//   },
+	//   "path": "v1beta1/{+resource}:listOrgPolicies",
+	//   "request": {
+	//     "$ref": "ListOrgPoliciesRequest"
+	//   },
+	//   "response": {
+	//     "$ref": "ListOrgPoliciesResponse"
+	//   },
+	//   "scopes": [
+	//     "https://www.googleapis.com/auth/cloud-platform",
+	//     "https://www.googleapis.com/auth/cloud-platform.read-only"
+	//   ]
+	// }
+
+}
+
+// Pages invokes f for each page of results.
+// A non-nil error returned from f will halt the iteration.
+// The provided context supersedes any context provided to the Context method.
+func (c *OrganizationsListOrgPoliciesCall) Pages(ctx context.Context, f func(*ListOrgPoliciesResponse) error) error {
+	c.ctx_ = ctx
+	defer func(pt string) { c.listorgpoliciesrequest.PageToken = pt }(c.listorgpoliciesrequest.PageToken) // reset paging to original point
+	for {
+		x, err := c.Do()
+		if err != nil {
+			return err
+		}
+		if err := f(x); err != nil {
+			return err
+		}
+		if x.NextPageToken == "" {
+			return nil
+		}
+		c.listorgpoliciesrequest.PageToken = x.NextPageToken
+	}
+}
+
 // method id "cloudresourcemanager.organizations.setIamPolicy":
 
 type OrganizationsSetIamPolicyCall struct {
@@ -1699,7 +3642,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	var body io.Reader = nil
 	body, err := googleapi.WithoutDataWrapper.JSONReader(c.setiampolicyrequest)
 	if err != nil {
@@ -1785,6 +3727,288 @@
 
 }
 
+// method id "cloudresourcemanager.organizations.setOrgPolicy":
+
+type OrganizationsSetOrgPolicyCall struct {
+	s                   *Service
+	resource            string
+	setorgpolicyrequest *SetOrgPolicyRequest
+	urlParams_          gensupport.URLParams
+	ctx_                context.Context
+	header_             http.Header
+}
+
+// SetOrgPolicy: Updates the specified `Policy` on the resource. Creates
+// a new `Policy` for
+// that `Constraint` on the resource if one does not exist.
+//
+// Not supplying an `etag` on the request `Policy` results in an
+// unconditional
+// write of the `Policy`.
+func (r *OrganizationsService) SetOrgPolicy(resource string, setorgpolicyrequest *SetOrgPolicyRequest) *OrganizationsSetOrgPolicyCall {
+	c := &OrganizationsSetOrgPolicyCall{s: r.s, urlParams_: make(gensupport.URLParams)}
+	c.resource = resource
+	c.setorgpolicyrequest = setorgpolicyrequest
+	return c
+}
+
+// Fields allows partial responses to be retrieved. See
+// https://developers.google.com/gdata/docs/2.0/basics#PartialResponse
+// for more information.
+func (c *OrganizationsSetOrgPolicyCall) Fields(s ...googleapi.Field) *OrganizationsSetOrgPolicyCall {
+	c.urlParams_.Set("fields", googleapi.CombineFields(s))
+	return c
+}
+
+// Context sets the context to be used in this call's Do method. Any
+// pending HTTP request will be aborted if the provided context is
+// canceled.
+func (c *OrganizationsSetOrgPolicyCall) Context(ctx context.Context) *OrganizationsSetOrgPolicyCall {
+	c.ctx_ = ctx
+	return c
+}
+
+// Header returns an http.Header that can be modified by the caller to
+// add HTTP headers to the request.
+func (c *OrganizationsSetOrgPolicyCall) Header() http.Header {
+	if c.header_ == nil {
+		c.header_ = make(http.Header)
+	}
+	return c.header_
+}
+
+func (c *OrganizationsSetOrgPolicyCall) doRequest(alt string) (*http.Response, error) {
+	reqHeaders := make(http.Header)
+	for k, v := range c.header_ {
+		reqHeaders[k] = v
+	}
+	reqHeaders.Set("User-Agent", c.s.userAgent())
+	var body io.Reader = nil
+	body, err := googleapi.WithoutDataWrapper.JSONReader(c.setorgpolicyrequest)
+	if err != nil {
+		return nil, err
+	}
+	reqHeaders.Set("Content-Type", "application/json")
+	c.urlParams_.Set("alt", alt)
+	urls := googleapi.ResolveRelative(c.s.BasePath, "v1beta1/{+resource}:setOrgPolicy")
+	urls += "?" + c.urlParams_.Encode()
+	req, _ := http.NewRequest("POST", urls, body)
+	req.Header = reqHeaders
+	googleapi.Expand(req.URL, map[string]string{
+		"resource": c.resource,
+	})
+	return gensupport.SendRequest(c.ctx_, c.s.client, req)
+}
+
+// Do executes the "cloudresourcemanager.organizations.setOrgPolicy" call.
+// Exactly one of *OrgPolicy or error will be non-nil. Any non-2xx
+// status code is an error. Response headers are in either
+// *OrgPolicy.ServerResponse.Header or (if a response was returned at
+// all) in error.(*googleapi.Error).Header. Use googleapi.IsNotModified
+// to check whether the returned error was because
+// http.StatusNotModified was returned.
+func (c *OrganizationsSetOrgPolicyCall) Do(opts ...googleapi.CallOption) (*OrgPolicy, error) {
+	gensupport.SetOptions(c.urlParams_, opts...)
+	res, err := c.doRequest("json")
+	if res != nil && res.StatusCode == http.StatusNotModified {
+		if res.Body != nil {
+			res.Body.Close()
+		}
+		return nil, &googleapi.Error{
+			Code:   res.StatusCode,
+			Header: res.Header,
+		}
+	}
+	if err != nil {
+		return nil, err
+	}
+	defer googleapi.CloseBody(res)
+	if err := googleapi.CheckResponse(res); err != nil {
+		return nil, err
+	}
+	ret := &OrgPolicy{
+		ServerResponse: googleapi.ServerResponse{
+			Header:         res.Header,
+			HTTPStatusCode: res.StatusCode,
+		},
+	}
+	target := &ret
+	if err := json.NewDecoder(res.Body).Decode(target); err != nil {
+		return nil, err
+	}
+	return ret, nil
+	// {
+	//   "description": "Updates the specified `Policy` on the resource. Creates a new `Policy` for\nthat `Constraint` on the resource if one does not exist.\n\nNot supplying an `etag` on the request `Policy` results in an unconditional\nwrite of the `Policy`.",
+	//   "flatPath": "v1beta1/organizations/{organizationsId}:setOrgPolicy",
+	//   "httpMethod": "POST",
+	//   "id": "cloudresourcemanager.organizations.setOrgPolicy",
+	//   "parameterOrder": [
+	//     "resource"
+	//   ],
+	//   "parameters": {
+	//     "resource": {
+	//       "description": "Resource name of the resource to attach the `Policy`.",
+	//       "location": "path",
+	//       "pattern": "^organizations/[^/]+$",
+	//       "required": true,
+	//       "type": "string"
+	//     }
+	//   },
+	//   "path": "v1beta1/{+resource}:setOrgPolicy",
+	//   "request": {
+	//     "$ref": "SetOrgPolicyRequest"
+	//   },
+	//   "response": {
+	//     "$ref": "OrgPolicy"
+	//   },
+	//   "scopes": [
+	//     "https://www.googleapis.com/auth/cloud-platform"
+	//   ]
+	// }
+
+}
+
+// method id "cloudresourcemanager.organizations.setOrgPolicyV1":
+
+type OrganizationsSetOrgPolicyV1Call struct {
+	s                   *Service
+	resource            string
+	setorgpolicyrequest *SetOrgPolicyRequest
+	urlParams_          gensupport.URLParams
+	ctx_                context.Context
+	header_             http.Header
+}
+
+// SetOrgPolicyV1: Updates the specified `Policy` on the resource.
+// Creates a new `Policy` for
+// that `Constraint` on the resource if one does not exist.
+//
+// Not supplying an `etag` on the request `Policy` results in an
+// unconditional
+// write of the `Policy`.
+func (r *OrganizationsService) SetOrgPolicyV1(resource string, setorgpolicyrequest *SetOrgPolicyRequest) *OrganizationsSetOrgPolicyV1Call {
+	c := &OrganizationsSetOrgPolicyV1Call{s: r.s, urlParams_: make(gensupport.URLParams)}
+	c.resource = resource
+	c.setorgpolicyrequest = setorgpolicyrequest
+	return c
+}
+
+// Fields allows partial responses to be retrieved. See
+// https://developers.google.com/gdata/docs/2.0/basics#PartialResponse
+// for more information.
+func (c *OrganizationsSetOrgPolicyV1Call) Fields(s ...googleapi.Field) *OrganizationsSetOrgPolicyV1Call {
+	c.urlParams_.Set("fields", googleapi.CombineFields(s))
+	return c
+}
+
+// Context sets the context to be used in this call's Do method. Any
+// pending HTTP request will be aborted if the provided context is
+// canceled.
+func (c *OrganizationsSetOrgPolicyV1Call) Context(ctx context.Context) *OrganizationsSetOrgPolicyV1Call {
+	c.ctx_ = ctx
+	return c
+}
+
+// Header returns an http.Header that can be modified by the caller to
+// add HTTP headers to the request.
+func (c *OrganizationsSetOrgPolicyV1Call) Header() http.Header {
+	if c.header_ == nil {
+		c.header_ = make(http.Header)
+	}
+	return c.header_
+}
+
+func (c *OrganizationsSetOrgPolicyV1Call) doRequest(alt string) (*http.Response, error) {
+	reqHeaders := make(http.Header)
+	for k, v := range c.header_ {
+		reqHeaders[k] = v
+	}
+	reqHeaders.Set("User-Agent", c.s.userAgent())
+	var body io.Reader = nil
+	body, err := googleapi.WithoutDataWrapper.JSONReader(c.setorgpolicyrequest)
+	if err != nil {
+		return nil, err
+	}
+	reqHeaders.Set("Content-Type", "application/json")
+	c.urlParams_.Set("alt", alt)
+	urls := googleapi.ResolveRelative(c.s.BasePath, "v1beta1/{+resource}:setOrgPolicyV1")
+	urls += "?" + c.urlParams_.Encode()
+	req, _ := http.NewRequest("POST", urls, body)
+	req.Header = reqHeaders
+	googleapi.Expand(req.URL, map[string]string{
+		"resource": c.resource,
+	})
+	return gensupport.SendRequest(c.ctx_, c.s.client, req)
+}
+
+// Do executes the "cloudresourcemanager.organizations.setOrgPolicyV1" call.
+// Exactly one of *OrgPolicy or error will be non-nil. Any non-2xx
+// status code is an error. Response headers are in either
+// *OrgPolicy.ServerResponse.Header or (if a response was returned at
+// all) in error.(*googleapi.Error).Header. Use googleapi.IsNotModified
+// to check whether the returned error was because
+// http.StatusNotModified was returned.
+func (c *OrganizationsSetOrgPolicyV1Call) Do(opts ...googleapi.CallOption) (*OrgPolicy, error) {
+	gensupport.SetOptions(c.urlParams_, opts...)
+	res, err := c.doRequest("json")
+	if res != nil && res.StatusCode == http.StatusNotModified {
+		if res.Body != nil {
+			res.Body.Close()
+		}
+		return nil, &googleapi.Error{
+			Code:   res.StatusCode,
+			Header: res.Header,
+		}
+	}
+	if err != nil {
+		return nil, err
+	}
+	defer googleapi.CloseBody(res)
+	if err := googleapi.CheckResponse(res); err != nil {
+		return nil, err
+	}
+	ret := &OrgPolicy{
+		ServerResponse: googleapi.ServerResponse{
+			Header:         res.Header,
+			HTTPStatusCode: res.StatusCode,
+		},
+	}
+	target := &ret
+	if err := json.NewDecoder(res.Body).Decode(target); err != nil {
+		return nil, err
+	}
+	return ret, nil
+	// {
+	//   "description": "Updates the specified `Policy` on the resource. Creates a new `Policy` for\nthat `Constraint` on the resource if one does not exist.\n\nNot supplying an `etag` on the request `Policy` results in an unconditional\nwrite of the `Policy`.",
+	//   "flatPath": "v1beta1/organizations/{organizationsId}:setOrgPolicyV1",
+	//   "httpMethod": "POST",
+	//   "id": "cloudresourcemanager.organizations.setOrgPolicyV1",
+	//   "parameterOrder": [
+	//     "resource"
+	//   ],
+	//   "parameters": {
+	//     "resource": {
+	//       "description": "Resource name of the resource to attach the `Policy`.",
+	//       "location": "path",
+	//       "pattern": "^organizations/[^/]+$",
+	//       "required": true,
+	//       "type": "string"
+	//     }
+	//   },
+	//   "path": "v1beta1/{+resource}:setOrgPolicyV1",
+	//   "request": {
+	//     "$ref": "SetOrgPolicyRequest"
+	//   },
+	//   "response": {
+	//     "$ref": "OrgPolicy"
+	//   },
+	//   "scopes": [
+	//     "https://www.googleapis.com/auth/cloud-platform"
+	//   ]
+	// }
+
+}
+
 // method id "cloudresourcemanager.organizations.testIamPermissions":
 
 type OrganizationsTestIamPermissionsCall struct {
@@ -1838,7 +4062,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	var body io.Reader = nil
 	body, err := googleapi.WithoutDataWrapper.JSONReader(c.testiampermissionsrequest)
 	if err != nil {
@@ -1976,7 +4199,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	var body io.Reader = nil
 	body, err := googleapi.WithoutDataWrapper.JSONReader(c.organization)
 	if err != nil {
@@ -2127,7 +4349,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	var body io.Reader = nil
 	body, err := googleapi.WithoutDataWrapper.JSONReader(c.project)
 	if err != nil {
@@ -2280,7 +4501,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	var body io.Reader = nil
 	c.urlParams_.Set("alt", alt)
 	urls := googleapi.ResolveRelative(c.s.BasePath, "v1beta1/projects/{projectId}")
@@ -2419,7 +4639,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	if c.ifNoneMatch_ != "" {
 		reqHeaders.Set("If-None-Match", c.ifNoneMatch_)
 	}
@@ -2555,7 +4774,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	var body io.Reader = nil
 	body, err := googleapi.WithoutDataWrapper.JSONReader(c.getancestryrequest)
 	if err != nil {
@@ -2693,7 +4911,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	var body io.Reader = nil
 	body, err := googleapi.WithoutDataWrapper.JSONReader(c.getiampolicyrequest)
 	if err != nil {
@@ -2822,8 +5039,8 @@
 // `color`.|
 // |labels.color:red|The project's label `color` has the value
 // `red`.|
-// |labels.color:red&nbsp;label.size:big|The project's label `color` has
-// the value `red` and its label `size` has the value `big`.
+// |labels.color:red&nbsp;labels.size:big|The project's label `color`
+// has the value `red` and its label `size` has the value `big`.
 func (c *ProjectsListCall) Filter(filter string) *ProjectsListCall {
 	c.urlParams_.Set("filter", filter)
 	return c
@@ -2887,7 +5104,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	if c.ifNoneMatch_ != "" {
 		reqHeaders.Set("If-None-Match", c.ifNoneMatch_)
 	}
@@ -2945,7 +5161,7 @@
 	//   "parameterOrder": [],
 	//   "parameters": {
 	//     "filter": {
-	//       "description": "An expression for filtering the results of the request.  Filter rules are\ncase insensitive. The fields eligible for filtering are:\n\n+ `name`\n+ `id`\n+ \u003ccode\u003elabels.\u003cem\u003ekey\u003c/em\u003e\u003c/code\u003e where *key* is the name of a label\n\nSome examples of using labels as filters:\n\n|Filter|Description|\n|------|-----------|\n|name:*|The project has a name.|\n|name:Howl|The project's name is `Howl` or `howl`.|\n|name:HOWL|Equivalent to above.|\n|NAME:howl|Equivalent to above.|\n|labels.color:*|The project has the label `color`.|\n|labels.color:red|The project's label `color` has the value `red`.|\n|labels.color:red\u0026nbsp;label.size:big|The project's label `color` has the value `red` and its label `size` has the value `big`.\n\nOptional.",
+	//       "description": "An expression for filtering the results of the request.  Filter rules are\ncase insensitive. The fields eligible for filtering are:\n\n+ `name`\n+ `id`\n+ \u003ccode\u003elabels.\u003cem\u003ekey\u003c/em\u003e\u003c/code\u003e where *key* is the name of a label\n\nSome examples of using labels as filters:\n\n|Filter|Description|\n|------|-----------|\n|name:*|The project has a name.|\n|name:Howl|The project's name is `Howl` or `howl`.|\n|name:HOWL|Equivalent to above.|\n|NAME:howl|Equivalent to above.|\n|labels.color:*|The project has the label `color`.|\n|labels.color:red|The project's label `color` has the value `red`.|\n|labels.color:red\u0026nbsp;labels.size:big|The project's label `color` has the value `red` and its label `size` has the value `big`.\n\nOptional.",
 	//       "location": "query",
 	//       "type": "string"
 	//     },
@@ -3029,9 +5245,10 @@
 // must
 // explicitly accept the invitation.
 //
-// + Invitations to grant the owner role cannot be sent using
-// `setIamPolicy()`;
-// they must be sent only using the Cloud Platform Console.
+// + Invitations to grant the owner role cannot be sent
+// using
+// `setIamPolicy()`; they must be sent only using the Cloud Platform
+// Console.
 //
 // + Membership changes that leave the project without any owners that
 // have
@@ -3039,8 +5256,9 @@
 //
 // + There must be at least one owner who has accepted the Terms
 // of
-// Service (ToS) agreement in the policy. Calling `setIamPolicy()` to
-// to remove the last ToS-accepted owner from the policy will fail.
+// Service (ToS) agreement in the policy. Calling `setIamPolicy()`
+// to
+// remove the last ToS-accepted owner from the policy will fail.
 // This
 // restriction also applies to legacy projects that no longer have
 // owners
@@ -3055,7 +5273,8 @@
 // roles
 // can render services completely inoperable. It is important to
 // understand
-// how the service account is being used before removing or updating its
+// how the service account is being used before removing or updating
+// its
 // roles.
 func (r *ProjectsService) SetIamPolicy(resource string, setiampolicyrequest *SetIamPolicyRequest) *ProjectsSetIamPolicyCall {
 	c := &ProjectsSetIamPolicyCall{s: r.s, urlParams_: make(gensupport.URLParams)}
@@ -3095,7 +5314,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	var body io.Reader = nil
 	body, err := googleapi.WithoutDataWrapper.JSONReader(c.setiampolicyrequest)
 	if err != nil {
@@ -3151,7 +5369,7 @@
 	}
 	return ret, nil
 	// {
-	//   "description": "Sets the IAM access control policy for the specified Project. Replaces\nany existing policy.\n\nThe following constraints apply when using `setIamPolicy()`:\n\n+ Project does not support `allUsers` and `allAuthenticatedUsers` as\n`members` in a `Binding` of a `Policy`.\n\n+ The owner role can be granted only to `user` and `serviceAccount`.\n\n+ Service accounts can be made owners of a project directly\nwithout any restrictions. However, to be added as an owner, a user must be\ninvited via Cloud Platform console and must accept the invitation.\n\n+ A user cannot be granted the owner role using `setIamPolicy()`. The user\nmust be granted the owner role using the Cloud Platform Console and must\nexplicitly accept the invitation.\n\n+ Invitations to grant the owner role cannot be sent using `setIamPolicy()`;\nthey must be sent only using the Cloud Platform Console.\n\n+ Membership changes that leave the project without any owners that have\naccepted the Terms of Service (ToS) will be rejected.\n\n+ There must be at least one owner who has accepted the Terms of\nService (ToS) agreement in the policy. Calling `setIamPolicy()` to\nto remove the last ToS-accepted owner from the policy will fail. This\nrestriction also applies to legacy projects that no longer have owners\nwho have accepted the ToS. Edits to IAM policies will be rejected until\nthe lack of a ToS-accepting owner is rectified.\n\n+ Calling this method requires enabling the App Engine Admin API.\n\nNote: Removing service accounts from policies or changing their roles\ncan render services completely inoperable. It is important to understand\nhow the service account is being used before removing or updating its roles.",
+	//   "description": "Sets the IAM access control policy for the specified Project. Replaces\nany existing policy.\n\nThe following constraints apply when using `setIamPolicy()`:\n\n+ Project does not support `allUsers` and `allAuthenticatedUsers` as\n`members` in a `Binding` of a `Policy`.\n\n+ The owner role can be granted only to `user` and `serviceAccount`.\n\n+ Service accounts can be made owners of a project directly\nwithout any restrictions. However, to be added as an owner, a user must be\ninvited via Cloud Platform console and must accept the invitation.\n\n+ A user cannot be granted the owner role using `setIamPolicy()`. The user\nmust be granted the owner role using the Cloud Platform Console and must\nexplicitly accept the invitation.\n\n+ Invitations to grant the owner role cannot be sent using\n`setIamPolicy()`; they must be sent only using the Cloud Platform Console.\n\n+ Membership changes that leave the project without any owners that have\naccepted the Terms of Service (ToS) will be rejected.\n\n+ There must be at least one owner who has accepted the Terms of\nService (ToS) agreement in the policy. Calling `setIamPolicy()` to\nremove the last ToS-accepted owner from the policy will fail. This\nrestriction also applies to legacy projects that no longer have owners\nwho have accepted the ToS. Edits to IAM policies will be rejected until\nthe lack of a ToS-accepting owner is rectified.\n\n+ Calling this method requires enabling the App Engine Admin API.\n\nNote: Removing service accounts from policies or changing their roles\ncan render services completely inoperable. It is important to understand\nhow the service account is being used before removing or updating its\nroles.",
 	//   "flatPath": "v1beta1/projects/{resource}:setIamPolicy",
 	//   "httpMethod": "POST",
 	//   "id": "cloudresourcemanager.projects.setIamPolicy",
@@ -3231,7 +5449,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	var body io.Reader = nil
 	body, err := googleapi.WithoutDataWrapper.JSONReader(c.testiampermissionsrequest)
 	if err != nil {
@@ -3375,7 +5592,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	var body io.Reader = nil
 	body, err := googleapi.WithoutDataWrapper.JSONReader(c.undeleteprojectrequest)
 	if err != nil {
@@ -3514,7 +5730,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	var body io.Reader = nil
 	body, err := googleapi.WithoutDataWrapper.JSONReader(c.project)
 	if err != nil {
diff --git a/cloudtrace/v1/cloudtrace-api.json b/cloudtrace/v1/cloudtrace-api.json
index 798e7c4..d9ebeee 100644
--- a/cloudtrace/v1/cloudtrace-api.json
+++ b/cloudtrace/v1/cloudtrace-api.json
@@ -1,292 +1,13 @@
 {
-  "canonicalName": "Cloud Trace",
-  "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/trace.readonly": {
-          "description": "Read Trace data for a project or application"
-        },
-        "https://www.googleapis.com/auth/trace.append": {
-          "description": "Write Trace data for a project or application"
-        }
-      }
-    }
-  },
-  "rootUrl": "https://cloudtrace.googleapis.com/",
-  "ownerDomain": "google.com",
-  "name": "cloudtrace",
-  "batchPath": "batch",
-  "title": "Stackdriver Trace API",
-  "ownerName": "Google",
-  "resources": {
-    "projects": {
-      "methods": {
-        "patchTraces": {
-          "request": {
-            "$ref": "Traces"
-          },
-          "description": "Sends new traces to Stackdriver Trace or updates existing traces. If the ID\nof a trace that you send matches that of an existing trace, any fields\nin the existing trace and its spans are overwritten by the provided values,\nand any new fields provided are merged with the existing trace data. If the\nID does not match, a new trace is created.",
-          "httpMethod": "PATCH",
-          "parameterOrder": [
-            "projectId"
-          ],
-          "response": {
-            "$ref": "Empty"
-          },
-          "parameters": {
-            "projectId": {
-              "description": "ID of the Cloud project where the trace data is stored.",
-              "required": true,
-              "type": "string",
-              "location": "path"
-            }
-          },
-          "scopes": [
-            "https://www.googleapis.com/auth/cloud-platform",
-            "https://www.googleapis.com/auth/trace.append"
-          ],
-          "flatPath": "v1/projects/{projectId}/traces",
-          "id": "cloudtrace.projects.patchTraces",
-          "path": "v1/projects/{projectId}/traces"
-        }
-      },
-      "resources": {
-        "traces": {
-          "methods": {
-            "list": {
-              "flatPath": "v1/projects/{projectId}/traces",
-              "id": "cloudtrace.projects.traces.list",
-              "path": "v1/projects/{projectId}/traces",
-              "description": "Returns of a list of traces that match the specified filter conditions.",
-              "httpMethod": "GET",
-              "response": {
-                "$ref": "ListTracesResponse"
-              },
-              "parameterOrder": [
-                "projectId"
-              ],
-              "scopes": [
-                "https://www.googleapis.com/auth/cloud-platform",
-                "https://www.googleapis.com/auth/trace.readonly"
-              ],
-              "parameters": {
-                "filter": {
-                  "type": "string",
-                  "location": "query",
-                  "description": "An optional filter for the request."
-                },
-                "endTime": {
-                  "type": "string",
-                  "location": "query",
-                  "description": "Start of the time interval (inclusive) during which the trace data was\ncollected from the application.",
-                  "format": "google-datetime"
-                },
-                "startTime": {
-                  "location": "query",
-                  "description": "End of the time interval (inclusive) during which the trace data was\ncollected from the application.",
-                  "format": "google-datetime",
-                  "type": "string"
-                },
-                "pageToken": {
-                  "location": "query",
-                  "description": "Token identifying the page of results to return. If provided, use the\nvalue of the `next_page_token` field from a previous request. Optional.",
-                  "type": "string"
-                },
-                "pageSize": {
-                  "description": "Maximum number of traces to return. If not specified or \u003c= 0, the\nimplementation selects a reasonable value.  The implementation may\nreturn fewer traces than the requested page size. Optional.",
-                  "format": "int32",
-                  "type": "integer",
-                  "location": "query"
-                },
-                "view": {
-                  "location": "query",
-                  "enum": [
-                    "VIEW_TYPE_UNSPECIFIED",
-                    "MINIMAL",
-                    "ROOTSPAN",
-                    "COMPLETE"
-                  ],
-                  "description": "Type of data returned for traces in the list. Optional. Default is\n`MINIMAL`.",
-                  "type": "string"
-                },
-                "orderBy": {
-                  "type": "string",
-                  "location": "query",
-                  "description": "Field used to sort the returned traces. Optional.\nCan be one of the following:\n\n*   `trace_id`\n*   `name` (`name` field of root span in the trace)\n*   `duration` (difference between `end_time` and `start_time` fields of\n     the root span)\n*   `start` (`start_time` field of the root span)\n\nDescending order can be specified by appending `desc` to the sort field\n(for example, `name desc`).\n\nOnly one sort field is permitted."
-                },
-                "projectId": {
-                  "required": true,
-                  "type": "string",
-                  "location": "path",
-                  "description": "ID of the Cloud project where the trace data is stored."
-                }
-              }
-            },
-            "get": {
-              "response": {
-                "$ref": "Trace"
-              },
-              "parameterOrder": [
-                "projectId",
-                "traceId"
-              ],
-              "httpMethod": "GET",
-              "parameters": {
-                "projectId": {
-                  "description": "ID of the Cloud project where the trace data is stored.",
-                  "required": true,
-                  "type": "string",
-                  "location": "path"
-                },
-                "traceId": {
-                  "location": "path",
-                  "description": "ID of the trace to return.",
-                  "required": true,
-                  "type": "string"
-                }
-              },
-              "scopes": [
-                "https://www.googleapis.com/auth/cloud-platform",
-                "https://www.googleapis.com/auth/trace.readonly"
-              ],
-              "flatPath": "v1/projects/{projectId}/traces/{traceId}",
-              "path": "v1/projects/{projectId}/traces/{traceId}",
-              "id": "cloudtrace.projects.traces.get",
-              "description": "Gets a single trace by its ID."
-            }
-          }
-        }
-      }
-    }
-  },
-  "parameters": {
-    "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"
-    },
-    "access_token": {
-      "description": "OAuth access token.",
-      "type": "string",
-      "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"
-    },
-    "pp": {
-      "type": "boolean",
-      "default": "true",
-      "location": "query",
-      "description": "Pretty-print response."
-    },
-    "bearer_token": {
-      "location": "query",
-      "description": "OAuth bearer token.",
-      "type": "string"
-    },
-    "oauth_token": {
-      "description": "OAuth 2.0 token for the current user.",
-      "type": "string",
-      "location": "query"
-    },
-    "upload_protocol": {
-      "location": "query",
-      "description": "Upload protocol for media (e.g. \"raw\", \"multipart\").",
-      "type": "string"
-    },
-    "prettyPrint": {
-      "location": "query",
-      "description": "Returns response with indentations and line breaks.",
-      "type": "boolean",
-      "default": "true"
-    },
-    "uploadType": {
-      "location": "query",
-      "description": "Legacy upload protocol for media (e.g. \"media\", \"multipart\").",
-      "type": "string"
-    },
-    "fields": {
-      "type": "string",
-      "location": "query",
-      "description": "Selector specifying which fields to include in a partial response."
-    },
-    "callback": {
-      "location": "query",
-      "description": "JSONP",
-      "type": "string"
-    },
-    "$.xgafv": {
-      "description": "V1 error format.",
-      "type": "string",
-      "enumDescriptions": [
-        "v1 error format",
-        "v2 error format"
-      ],
-      "location": "query",
-      "enum": [
-        "1",
-        "2"
-      ]
-    },
-    "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",
-      "description": "Data format for response.",
-      "default": "json",
-      "enum": [
-        "json",
-        "media",
-        "proto"
-      ],
-      "type": "string"
-    }
-  },
-  "version": "v1",
-  "baseUrl": "https://cloudtrace.googleapis.com/",
-  "servicePath": "",
-  "description": "Send and retrieve trace data from Stackdriver Trace. Data is generated and available by default for all App Engine applications. Data from other applications can be written to Stackdriver Trace for display, reporting, and analysis.\n",
-  "kind": "discovery#restDescription",
-  "basePath": "",
-  "revision": "20170225",
-  "id": "cloudtrace:v1",
-  "documentationLink": "https://cloud.google.com/trace",
-  "discoveryVersion": "v1",
-  "version_module": "True",
   "schemas": {
-    "Traces": {
-      "description": "List of new or updated traces.",
-      "type": "object",
-      "properties": {
-        "traces": {
-          "description": "List of traces.",
-          "type": "array",
-          "items": {
-            "$ref": "Trace"
-          }
-        }
-      },
-      "id": "Traces"
-    },
     "TraceSpan": {
+      "description": "A span represents a single timed event within a trace. Spans can be nested\nand form a trace tree. Often, a trace contains a root span that describes the\nend-to-end latency of an operation and, optionally, one or more subspans for\nits suboperations. Spans do not need to be contiguous. There may be gaps\nbetween spans in a trace.",
       "type": "object",
       "properties": {
-        "name": {
-          "type": "string",
-          "description": "Name of the span. Must be less than 128 bytes. The span name is sanitized\nand displayed in the Stackdriver Trace tool in the\n{% dynamic print site_values.console_name %}.\nThe name may be a method name or some other per-call site name.\nFor the same executable and the same call point, a best practice is\nto use a consistent name, which makes it easier to correlate\ncross-trace spans."
-        },
         "spanId": {
+          "type": "string",
           "description": "Identifier for the span. Must be a 64-bit integer other than 0 and\nunique within a trace.",
-          "format": "uint64",
-          "type": "string"
+          "format": "uint64"
         },
         "parentSpanId": {
           "description": "ID of the parent span, if any. Optional.",
@@ -299,34 +20,37 @@
           "type": "string"
         },
         "startTime": {
-          "type": "string",
           "description": "Start time of the span in nanoseconds from the UNIX epoch.",
-          "format": "google-datetime"
+          "format": "google-datetime",
+          "type": "string"
         },
         "kind": {
-          "type": "string",
-          "enumDescriptions": [
-            "Unspecified.",
-            "Indicates that the span covers server-side handling of an RPC or other\nremote network request.",
-            "Indicates that the span covers the client-side wrapper around an RPC or\nother remote request."
-          ],
           "enum": [
             "SPAN_KIND_UNSPECIFIED",
             "RPC_SERVER",
             "RPC_CLIENT"
           ],
-          "description": "Distinguishes between spans generated in a particular context. For example,\ntwo spans with the same name may be distinguished using `RPC_CLIENT`\nand `RPC_SERVER` to identify queueing latency associated with the span."
+          "description": "Distinguishes between spans generated in a particular context. For example,\ntwo spans with the same name may be distinguished using `RPC_CLIENT`\nand `RPC_SERVER` to identify queueing latency associated with the span.",
+          "type": "string",
+          "enumDescriptions": [
+            "Unspecified.",
+            "Indicates that the span covers server-side handling of an RPC or other\nremote network request.",
+            "Indicates that the span covers the client-side wrapper around an RPC or\nother remote request."
+          ]
         },
         "labels": {
+          "type": "object",
           "additionalProperties": {
             "type": "string"
           },
-          "description": "Collection of labels associated with the span. Label keys must be less than\n128 bytes. Label values must be less than 16 kilobytes.",
-          "type": "object"
+          "description": "Collection of labels associated with the span. Label keys must be less than\n128 bytes. Label values must be less than 16 kilobytes."
+        },
+        "name": {
+          "description": "Name of the span. Must be less than 128 bytes. The span name is sanitized\nand displayed in the Stackdriver Trace tool in the\n{% dynamic print site_values.console_name %}.\nThe name may be a method name or some other per-call site name.\nFor the same executable and the same call point, a best practice is\nto use a consistent name, which makes it easier to correlate\ncross-trace spans.",
+          "type": "string"
         }
       },
-      "id": "TraceSpan",
-      "description": "A span represents a single timed event within a trace. Spans can be nested\nand form a trace tree. Often, a trace contains a root span that describes the\nend-to-end latency of an operation and, optionally, one or more subspans for\nits suboperations. Spans do not need to be contiguous. There may be gaps\nbetween spans in a trace."
+      "id": "TraceSpan"
     },
     "ListTracesResponse": {
       "description": "The response message for the `ListTraces` method.",
@@ -353,7 +77,6 @@
       "id": "Empty"
     },
     "Trace": {
-      "type": "object",
       "properties": {
         "projectId": {
           "description": "Project ID of the Cloud project where the trace data is stored.",
@@ -372,12 +95,289 @@
         }
       },
       "id": "Trace",
-      "description": "A trace describes how long it takes for an application to perform an\noperation. It consists of a set of spans, each of which represent a single\ntimed event within the operation."
+      "description": "A trace describes how long it takes for an application to perform an\noperation. It consists of a set of spans, each of which represent a single\ntimed event within the operation.",
+      "type": "object"
+    },
+    "Traces": {
+      "description": "List of new or updated traces.",
+      "type": "object",
+      "properties": {
+        "traces": {
+          "description": "List of traces.",
+          "type": "array",
+          "items": {
+            "$ref": "Trace"
+          }
+        }
+      },
+      "id": "Traces"
     }
   },
+  "protocol": "rest",
   "icons": {
-    "x16": "http://www.google.com/images/icons/product/search-16.gif",
-    "x32": "http://www.google.com/images/icons/product/search-32.gif"
+    "x32": "http://www.google.com/images/icons/product/search-32.gif",
+    "x16": "http://www.google.com/images/icons/product/search-16.gif"
   },
-  "protocol": "rest"
+  "canonicalName": "Cloud Trace",
+  "auth": {
+    "oauth2": {
+      "scopes": {
+        "https://www.googleapis.com/auth/trace.readonly": {
+          "description": "Read Trace data for a project or application"
+        },
+        "https://www.googleapis.com/auth/trace.append": {
+          "description": "Write Trace data for a project or application"
+        },
+        "https://www.googleapis.com/auth/cloud-platform": {
+          "description": "View and manage your data across Google Cloud Platform services"
+        }
+      }
+    }
+  },
+  "rootUrl": "https://cloudtrace.googleapis.com/",
+  "ownerDomain": "google.com",
+  "name": "cloudtrace",
+  "batchPath": "batch",
+  "title": "Stackdriver Trace API",
+  "ownerName": "Google",
+  "resources": {
+    "projects": {
+      "methods": {
+        "patchTraces": {
+          "path": "v1/projects/{projectId}/traces",
+          "id": "cloudtrace.projects.patchTraces",
+          "request": {
+            "$ref": "Traces"
+          },
+          "description": "Sends new traces to Stackdriver Trace or updates existing traces. If the ID\nof a trace that you send matches that of an existing trace, any fields\nin the existing trace and its spans are overwritten by the provided values,\nand any new fields provided are merged with the existing trace data. If the\nID does not match, a new trace is created.",
+          "response": {
+            "$ref": "Empty"
+          },
+          "parameterOrder": [
+            "projectId"
+          ],
+          "httpMethod": "PATCH",
+          "parameters": {
+            "projectId": {
+              "description": "ID of the Cloud project where the trace data is stored.",
+              "required": true,
+              "type": "string",
+              "location": "path"
+            }
+          },
+          "scopes": [
+            "https://www.googleapis.com/auth/cloud-platform",
+            "https://www.googleapis.com/auth/trace.append"
+          ],
+          "flatPath": "v1/projects/{projectId}/traces"
+        }
+      },
+      "resources": {
+        "traces": {
+          "methods": {
+            "list": {
+              "description": "Returns of a list of traces that match the specified filter conditions.",
+              "httpMethod": "GET",
+              "parameterOrder": [
+                "projectId"
+              ],
+              "response": {
+                "$ref": "ListTracesResponse"
+              },
+              "parameters": {
+                "orderBy": {
+                  "description": "Field used to sort the returned traces. Optional.\nCan be one of the following:\n\n*   `trace_id`\n*   `name` (`name` field of root span in the trace)\n*   `duration` (difference between `end_time` and `start_time` fields of\n     the root span)\n*   `start` (`start_time` field of the root span)\n\nDescending order can be specified by appending `desc` to the sort field\n(for example, `name desc`).\n\nOnly one sort field is permitted.",
+                  "type": "string",
+                  "location": "query"
+                },
+                "projectId": {
+                  "location": "path",
+                  "description": "ID of the Cloud project where the trace data is stored.",
+                  "required": true,
+                  "type": "string"
+                },
+                "filter": {
+                  "description": "An optional filter for the request.",
+                  "type": "string",
+                  "location": "query"
+                },
+                "endTime": {
+                  "location": "query",
+                  "description": "Start of the time interval (inclusive) during which the trace data was\ncollected from the application.",
+                  "format": "google-datetime",
+                  "type": "string"
+                },
+                "pageToken": {
+                  "type": "string",
+                  "location": "query",
+                  "description": "Token identifying the page of results to return. If provided, use the\nvalue of the `next_page_token` field from a previous request. Optional."
+                },
+                "startTime": {
+                  "description": "End of the time interval (inclusive) during which the trace data was\ncollected from the application.",
+                  "format": "google-datetime",
+                  "type": "string",
+                  "location": "query"
+                },
+                "pageSize": {
+                  "location": "query",
+                  "description": "Maximum number of traces to return. If not specified or \u003c= 0, the\nimplementation selects a reasonable value.  The implementation may\nreturn fewer traces than the requested page size. Optional.",
+                  "format": "int32",
+                  "type": "integer"
+                },
+                "view": {
+                  "location": "query",
+                  "enum": [
+                    "VIEW_TYPE_UNSPECIFIED",
+                    "MINIMAL",
+                    "ROOTSPAN",
+                    "COMPLETE"
+                  ],
+                  "description": "Type of data returned for traces in the list. Optional. Default is\n`MINIMAL`.",
+                  "type": "string"
+                }
+              },
+              "scopes": [
+                "https://www.googleapis.com/auth/cloud-platform",
+                "https://www.googleapis.com/auth/trace.readonly"
+              ],
+              "flatPath": "v1/projects/{projectId}/traces",
+              "id": "cloudtrace.projects.traces.list",
+              "path": "v1/projects/{projectId}/traces"
+            },
+            "get": {
+              "httpMethod": "GET",
+              "response": {
+                "$ref": "Trace"
+              },
+              "parameterOrder": [
+                "projectId",
+                "traceId"
+              ],
+              "scopes": [
+                "https://www.googleapis.com/auth/cloud-platform",
+                "https://www.googleapis.com/auth/trace.readonly"
+              ],
+              "parameters": {
+                "projectId": {
+                  "location": "path",
+                  "description": "ID of the Cloud project where the trace data is stored.",
+                  "required": true,
+                  "type": "string"
+                },
+                "traceId": {
+                  "description": "ID of the trace to return.",
+                  "required": true,
+                  "type": "string",
+                  "location": "path"
+                }
+              },
+              "flatPath": "v1/projects/{projectId}/traces/{traceId}",
+              "id": "cloudtrace.projects.traces.get",
+              "path": "v1/projects/{projectId}/traces/{traceId}",
+              "description": "Gets a single trace by its ID."
+            }
+          }
+        }
+      }
+    }
+  },
+  "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"
+    },
+    "access_token": {
+      "location": "query",
+      "description": "OAuth access token.",
+      "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"
+    },
+    "pp": {
+      "description": "Pretty-print response.",
+      "type": "boolean",
+      "default": "true",
+      "location": "query"
+    },
+    "bearer_token": {
+      "description": "OAuth bearer token.",
+      "type": "string",
+      "location": "query"
+    },
+    "oauth_token": {
+      "location": "query",
+      "description": "OAuth 2.0 token for the current user.",
+      "type": "string"
+    },
+    "upload_protocol": {
+      "description": "Upload protocol for media (e.g. \"raw\", \"multipart\").",
+      "type": "string",
+      "location": "query"
+    },
+    "prettyPrint": {
+      "location": "query",
+      "description": "Returns response with indentations and line breaks.",
+      "type": "boolean",
+      "default": "true"
+    },
+    "fields": {
+      "location": "query",
+      "description": "Selector specifying which fields to include in a partial response.",
+      "type": "string"
+    },
+    "uploadType": {
+      "location": "query",
+      "description": "Legacy upload protocol for media (e.g. \"media\", \"multipart\").",
+      "type": "string"
+    },
+    "$.xgafv": {
+      "type": "string",
+      "enumDescriptions": [
+        "v1 error format",
+        "v2 error format"
+      ],
+      "location": "query",
+      "enum": [
+        "1",
+        "2"
+      ],
+      "description": "V1 error format."
+    },
+    "callback": {
+      "description": "JSONP",
+      "type": "string",
+      "location": "query"
+    },
+    "alt": {
+      "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",
+      "description": "Data format for response.",
+      "default": "json"
+    }
+  },
+  "version": "v1",
+  "baseUrl": "https://cloudtrace.googleapis.com/",
+  "kind": "discovery#restDescription",
+  "description": "Send and retrieve trace data from Stackdriver Trace. Data is generated and available by default for all App Engine applications. Data from other applications can be written to Stackdriver Trace for display, reporting, and analysis.\n",
+  "servicePath": "",
+  "basePath": "",
+  "documentationLink": "https://cloud.google.com/trace",
+  "id": "cloudtrace:v1",
+  "revision": "20170320",
+  "discoveryVersion": "v1",
+  "version_module": "True"
 }
diff --git a/cloudtrace/v1/cloudtrace-gen.go b/cloudtrace/v1/cloudtrace-gen.go
index 3d8313b..912f4c0 100644
--- a/cloudtrace/v1/cloudtrace-gen.go
+++ b/cloudtrace/v1/cloudtrace-gen.go
@@ -67,10 +67,9 @@
 }
 
 type Service struct {
-	client                    *http.Client
-	BasePath                  string // API endpoint base URL
-	UserAgent                 string // optional additional User-Agent fragment
-	GoogleClientHeaderElement string // client header fragment, for Google use only
+	client    *http.Client
+	BasePath  string // API endpoint base URL
+	UserAgent string // optional additional User-Agent fragment
 
 	Projects *ProjectsService
 }
@@ -82,10 +81,6 @@
 	return googleapi.UserAgent + " " + s.UserAgent
 }
 
-func (s *Service) clientHeader() string {
-	return gensupport.GoogleClientHeader("20170210", s.GoogleClientHeaderElement)
-}
-
 func NewProjectsService(s *Service) *ProjectsService {
 	rs := &ProjectsService{s: s}
 	rs.Traces = NewProjectsTracesService(s)
@@ -376,7 +371,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	var body io.Reader = nil
 	body, err := googleapi.WithoutDataWrapper.JSONReader(c.traces)
 	if err != nil {
@@ -523,7 +517,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	if c.ifNoneMatch_ != "" {
 		reqHeaders.Set("If-None-Match", c.ifNoneMatch_)
 	}
@@ -748,7 +741,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	if c.ifNoneMatch_ != "" {
 		reqHeaders.Set("If-None-Match", c.ifNoneMatch_)
 	}
diff --git a/clouduseraccounts/v0.alpha/clouduseraccounts-gen.go b/clouduseraccounts/v0.alpha/clouduseraccounts-gen.go
index 146811c..69c6533 100644
--- a/clouduseraccounts/v0.alpha/clouduseraccounts-gen.go
+++ b/clouduseraccounts/v0.alpha/clouduseraccounts-gen.go
@@ -73,10 +73,9 @@
 }
 
 type Service struct {
-	client                    *http.Client
-	BasePath                  string // API endpoint base URL
-	UserAgent                 string // optional additional User-Agent fragment
-	GoogleClientHeaderElement string // client header fragment, for Google use only
+	client    *http.Client
+	BasePath  string // API endpoint base URL
+	UserAgent string // optional additional User-Agent fragment
 
 	GlobalAccountsOperations *GlobalAccountsOperationsService
 
@@ -94,10 +93,6 @@
 	return googleapi.UserAgent + " " + s.UserAgent
 }
 
-func (s *Service) clientHeader() string {
-	return gensupport.GoogleClientHeader("20170210", s.GoogleClientHeaderElement)
-}
-
 func NewGlobalAccountsOperationsService(s *Service) *GlobalAccountsOperationsService {
 	rs := &GlobalAccountsOperationsService{s: s}
 	return rs
@@ -1476,7 +1471,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	var body io.Reader = nil
 	c.urlParams_.Set("alt", alt)
 	urls := googleapi.ResolveRelative(c.s.BasePath, "{project}/global/operations/{operation}")
@@ -1596,7 +1590,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	if c.ifNoneMatch_ != "" {
 		reqHeaders.Set("If-None-Match", c.ifNoneMatch_)
 	}
@@ -1818,7 +1811,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	if c.ifNoneMatch_ != "" {
 		reqHeaders.Set("If-None-Match", c.ifNoneMatch_)
 	}
@@ -1998,7 +1990,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	var body io.Reader = nil
 	body, err := googleapi.WithoutDataWrapper.JSONReader(c.groupsaddmemberrequest)
 	if err != nil {
@@ -2143,7 +2134,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	var body io.Reader = nil
 	c.urlParams_.Set("alt", alt)
 	urls := googleapi.ResolveRelative(c.s.BasePath, "{project}/global/groups/{groupName}")
@@ -2291,7 +2281,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	if c.ifNoneMatch_ != "" {
 		reqHeaders.Set("If-None-Match", c.ifNoneMatch_)
 	}
@@ -2445,7 +2434,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	if c.ifNoneMatch_ != "" {
 		reqHeaders.Set("If-None-Match", c.ifNoneMatch_)
 	}
@@ -2588,7 +2576,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	var body io.Reader = nil
 	body, err := googleapi.WithoutDataWrapper.JSONReader(c.group)
 	if err != nil {
@@ -2804,7 +2791,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	if c.ifNoneMatch_ != "" {
 		reqHeaders.Set("If-None-Match", c.ifNoneMatch_)
 	}
@@ -2984,7 +2970,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	var body io.Reader = nil
 	body, err := googleapi.WithoutDataWrapper.JSONReader(c.groupsremovememberrequest)
 	if err != nil {
@@ -3132,7 +3117,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	var body io.Reader = nil
 	body, err := googleapi.WithoutDataWrapper.JSONReader(c.policy)
 	if err != nil {
@@ -3282,7 +3266,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	var body io.Reader = nil
 	body, err := googleapi.WithoutDataWrapper.JSONReader(c.testpermissionsrequest)
 	if err != nil {
@@ -3440,7 +3423,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	var body io.Reader = nil
 	c.urlParams_.Set("alt", alt)
 	urls := googleapi.ResolveRelative(c.s.BasePath, "{project}/zones/{zone}/authorizedKeysView/{user}")
@@ -3673,7 +3655,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	var body io.Reader = nil
 	c.urlParams_.Set("alt", alt)
 	urls := googleapi.ResolveRelative(c.s.BasePath, "{project}/zones/{zone}/linuxAccountViews")
@@ -3847,7 +3828,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	var body io.Reader = nil
 	body, err := googleapi.WithoutDataWrapper.JSONReader(c.publickey)
 	if err != nil {
@@ -3992,7 +3972,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	var body io.Reader = nil
 	c.urlParams_.Set("alt", alt)
 	urls := googleapi.ResolveRelative(c.s.BasePath, "{project}/global/users/{user}")
@@ -4140,7 +4119,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	if c.ifNoneMatch_ != "" {
 		reqHeaders.Set("If-None-Match", c.ifNoneMatch_)
 	}
@@ -4294,7 +4272,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	if c.ifNoneMatch_ != "" {
 		reqHeaders.Set("If-None-Match", c.ifNoneMatch_)
 	}
@@ -4437,7 +4414,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	var body io.Reader = nil
 	body, err := googleapi.WithoutDataWrapper.JSONReader(c.user)
 	if err != nil {
@@ -4653,7 +4629,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	if c.ifNoneMatch_ != "" {
 		reqHeaders.Set("If-None-Match", c.ifNoneMatch_)
 	}
@@ -4832,7 +4807,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	var body io.Reader = nil
 	c.urlParams_.Set("alt", alt)
 	urls := googleapi.ResolveRelative(c.s.BasePath, "{project}/global/users/{user}/removePublicKey")
@@ -4980,7 +4954,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	var body io.Reader = nil
 	body, err := googleapi.WithoutDataWrapper.JSONReader(c.policy)
 	if err != nil {
@@ -5130,7 +5103,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	var body io.Reader = nil
 	body, err := googleapi.WithoutDataWrapper.JSONReader(c.testpermissionsrequest)
 	if err != nil {
diff --git a/clouduseraccounts/v0.beta/clouduseraccounts-gen.go b/clouduseraccounts/v0.beta/clouduseraccounts-gen.go
index 05b52c2..7a9896e 100644
--- a/clouduseraccounts/v0.beta/clouduseraccounts-gen.go
+++ b/clouduseraccounts/v0.beta/clouduseraccounts-gen.go
@@ -73,10 +73,9 @@
 }
 
 type Service struct {
-	client                    *http.Client
-	BasePath                  string // API endpoint base URL
-	UserAgent                 string // optional additional User-Agent fragment
-	GoogleClientHeaderElement string // client header fragment, for Google use only
+	client    *http.Client
+	BasePath  string // API endpoint base URL
+	UserAgent string // optional additional User-Agent fragment
 
 	GlobalAccountsOperations *GlobalAccountsOperationsService
 
@@ -94,10 +93,6 @@
 	return googleapi.UserAgent + " " + s.UserAgent
 }
 
-func (s *Service) clientHeader() string {
-	return gensupport.GoogleClientHeader("20170210", s.GoogleClientHeaderElement)
-}
-
 func NewGlobalAccountsOperationsService(s *Service) *GlobalAccountsOperationsService {
 	rs := &GlobalAccountsOperationsService{s: s}
 	return rs
@@ -1050,7 +1045,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	var body io.Reader = nil
 	c.urlParams_.Set("alt", alt)
 	urls := googleapi.ResolveRelative(c.s.BasePath, "{project}/global/operations/{operation}")
@@ -1170,7 +1164,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	if c.ifNoneMatch_ != "" {
 		reqHeaders.Set("If-None-Match", c.ifNoneMatch_)
 	}
@@ -1392,7 +1385,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	if c.ifNoneMatch_ != "" {
 		reqHeaders.Set("If-None-Match", c.ifNoneMatch_)
 	}
@@ -1572,7 +1564,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	var body io.Reader = nil
 	body, err := googleapi.WithoutDataWrapper.JSONReader(c.groupsaddmemberrequest)
 	if err != nil {
@@ -1717,7 +1708,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	var body io.Reader = nil
 	c.urlParams_.Set("alt", alt)
 	urls := googleapi.ResolveRelative(c.s.BasePath, "{project}/global/groups/{groupName}")
@@ -1865,7 +1855,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	if c.ifNoneMatch_ != "" {
 		reqHeaders.Set("If-None-Match", c.ifNoneMatch_)
 	}
@@ -2008,7 +1997,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	var body io.Reader = nil
 	body, err := googleapi.WithoutDataWrapper.JSONReader(c.group)
 	if err != nil {
@@ -2224,7 +2212,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	if c.ifNoneMatch_ != "" {
 		reqHeaders.Set("If-None-Match", c.ifNoneMatch_)
 	}
@@ -2404,7 +2391,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	var body io.Reader = nil
 	body, err := googleapi.WithoutDataWrapper.JSONReader(c.groupsremovememberrequest)
 	if err != nil {
@@ -2560,7 +2546,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	var body io.Reader = nil
 	c.urlParams_.Set("alt", alt)
 	urls := googleapi.ResolveRelative(c.s.BasePath, "{project}/zones/{zone}/authorizedKeysView/{user}")
@@ -2793,7 +2778,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	var body io.Reader = nil
 	c.urlParams_.Set("alt", alt)
 	urls := googleapi.ResolveRelative(c.s.BasePath, "{project}/zones/{zone}/linuxAccountViews")
@@ -2967,7 +2951,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	var body io.Reader = nil
 	body, err := googleapi.WithoutDataWrapper.JSONReader(c.publickey)
 	if err != nil {
@@ -3112,7 +3095,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	var body io.Reader = nil
 	c.urlParams_.Set("alt", alt)
 	urls := googleapi.ResolveRelative(c.s.BasePath, "{project}/global/users/{user}")
@@ -3260,7 +3242,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	if c.ifNoneMatch_ != "" {
 		reqHeaders.Set("If-None-Match", c.ifNoneMatch_)
 	}
@@ -3403,7 +3384,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	var body io.Reader = nil
 	body, err := googleapi.WithoutDataWrapper.JSONReader(c.user)
 	if err != nil {
@@ -3619,7 +3599,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	if c.ifNoneMatch_ != "" {
 		reqHeaders.Set("If-None-Match", c.ifNoneMatch_)
 	}
@@ -3798,7 +3777,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	var body io.Reader = nil
 	c.urlParams_.Set("alt", alt)
 	urls := googleapi.ResolveRelative(c.s.BasePath, "{project}/global/users/{user}/removePublicKey")
diff --git a/clouduseraccounts/vm_alpha/clouduseraccounts-gen.go b/clouduseraccounts/vm_alpha/clouduseraccounts-gen.go
index 929d779..ccd9a8d 100644
--- a/clouduseraccounts/vm_alpha/clouduseraccounts-gen.go
+++ b/clouduseraccounts/vm_alpha/clouduseraccounts-gen.go
@@ -73,10 +73,9 @@
 }
 
 type Service struct {
-	client                    *http.Client
-	BasePath                  string // API endpoint base URL
-	UserAgent                 string // optional additional User-Agent fragment
-	GoogleClientHeaderElement string // client header fragment, for Google use only
+	client    *http.Client
+	BasePath  string // API endpoint base URL
+	UserAgent string // optional additional User-Agent fragment
 
 	GlobalAccountsOperations *GlobalAccountsOperationsService
 
@@ -94,10 +93,6 @@
 	return googleapi.UserAgent + " " + s.UserAgent
 }
 
-func (s *Service) clientHeader() string {
-	return gensupport.GoogleClientHeader("20170210", s.GoogleClientHeaderElement)
-}
-
 func NewGlobalAccountsOperationsService(s *Service) *GlobalAccountsOperationsService {
 	rs := &GlobalAccountsOperationsService{s: s}
 	return rs
@@ -1476,7 +1471,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	var body io.Reader = nil
 	c.urlParams_.Set("alt", alt)
 	urls := googleapi.ResolveRelative(c.s.BasePath, "{project}/global/operations/{operation}")
@@ -1596,7 +1590,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	if c.ifNoneMatch_ != "" {
 		reqHeaders.Set("If-None-Match", c.ifNoneMatch_)
 	}
@@ -1818,7 +1811,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	if c.ifNoneMatch_ != "" {
 		reqHeaders.Set("If-None-Match", c.ifNoneMatch_)
 	}
@@ -1998,7 +1990,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	var body io.Reader = nil
 	body, err := googleapi.WithoutDataWrapper.JSONReader(c.groupsaddmemberrequest)
 	if err != nil {
@@ -2143,7 +2134,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	var body io.Reader = nil
 	c.urlParams_.Set("alt", alt)
 	urls := googleapi.ResolveRelative(c.s.BasePath, "{project}/global/groups/{groupName}")
@@ -2291,7 +2281,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	if c.ifNoneMatch_ != "" {
 		reqHeaders.Set("If-None-Match", c.ifNoneMatch_)
 	}
@@ -2445,7 +2434,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	if c.ifNoneMatch_ != "" {
 		reqHeaders.Set("If-None-Match", c.ifNoneMatch_)
 	}
@@ -2588,7 +2576,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	var body io.Reader = nil
 	body, err := googleapi.WithoutDataWrapper.JSONReader(c.group)
 	if err != nil {
@@ -2804,7 +2791,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	if c.ifNoneMatch_ != "" {
 		reqHeaders.Set("If-None-Match", c.ifNoneMatch_)
 	}
@@ -2984,7 +2970,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	var body io.Reader = nil
 	body, err := googleapi.WithoutDataWrapper.JSONReader(c.groupsremovememberrequest)
 	if err != nil {
@@ -3132,7 +3117,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	var body io.Reader = nil
 	body, err := googleapi.WithoutDataWrapper.JSONReader(c.policy)
 	if err != nil {
@@ -3282,7 +3266,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	var body io.Reader = nil
 	body, err := googleapi.WithoutDataWrapper.JSONReader(c.testpermissionsrequest)
 	if err != nil {
@@ -3440,7 +3423,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	var body io.Reader = nil
 	c.urlParams_.Set("alt", alt)
 	urls := googleapi.ResolveRelative(c.s.BasePath, "{project}/zones/{zone}/authorizedKeysView/{user}")
@@ -3673,7 +3655,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	var body io.Reader = nil
 	c.urlParams_.Set("alt", alt)
 	urls := googleapi.ResolveRelative(c.s.BasePath, "{project}/zones/{zone}/linuxAccountViews")
@@ -3847,7 +3828,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	var body io.Reader = nil
 	body, err := googleapi.WithoutDataWrapper.JSONReader(c.publickey)
 	if err != nil {
@@ -3992,7 +3972,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	var body io.Reader = nil
 	c.urlParams_.Set("alt", alt)
 	urls := googleapi.ResolveRelative(c.s.BasePath, "{project}/global/users/{user}")
@@ -4140,7 +4119,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	if c.ifNoneMatch_ != "" {
 		reqHeaders.Set("If-None-Match", c.ifNoneMatch_)
 	}
@@ -4294,7 +4272,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	if c.ifNoneMatch_ != "" {
 		reqHeaders.Set("If-None-Match", c.ifNoneMatch_)
 	}
@@ -4437,7 +4414,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	var body io.Reader = nil
 	body, err := googleapi.WithoutDataWrapper.JSONReader(c.user)
 	if err != nil {
@@ -4653,7 +4629,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	if c.ifNoneMatch_ != "" {
 		reqHeaders.Set("If-None-Match", c.ifNoneMatch_)
 	}
@@ -4832,7 +4807,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	var body io.Reader = nil
 	c.urlParams_.Set("alt", alt)
 	urls := googleapi.ResolveRelative(c.s.BasePath, "{project}/global/users/{user}/removePublicKey")
@@ -4980,7 +4954,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	var body io.Reader = nil
 	body, err := googleapi.WithoutDataWrapper.JSONReader(c.policy)
 	if err != nil {
@@ -5130,7 +5103,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	var body io.Reader = nil
 	body, err := googleapi.WithoutDataWrapper.JSONReader(c.testpermissionsrequest)
 	if err != nil {
diff --git a/clouduseraccounts/vm_beta/clouduseraccounts-gen.go b/clouduseraccounts/vm_beta/clouduseraccounts-gen.go
index 53ef49a..5f16d89 100644
--- a/clouduseraccounts/vm_beta/clouduseraccounts-gen.go
+++ b/clouduseraccounts/vm_beta/clouduseraccounts-gen.go
@@ -73,10 +73,9 @@
 }
 
 type Service struct {
-	client                    *http.Client
-	BasePath                  string // API endpoint base URL
-	UserAgent                 string // optional additional User-Agent fragment
-	GoogleClientHeaderElement string // client header fragment, for Google use only
+	client    *http.Client
+	BasePath  string // API endpoint base URL
+	UserAgent string // optional additional User-Agent fragment
 
 	GlobalAccountsOperations *GlobalAccountsOperationsService
 
@@ -94,10 +93,6 @@
 	return googleapi.UserAgent + " " + s.UserAgent
 }
 
-func (s *Service) clientHeader() string {
-	return gensupport.GoogleClientHeader("20170210", s.GoogleClientHeaderElement)
-}
-
 func NewGlobalAccountsOperationsService(s *Service) *GlobalAccountsOperationsService {
 	rs := &GlobalAccountsOperationsService{s: s}
 	return rs
@@ -1050,7 +1045,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	var body io.Reader = nil
 	c.urlParams_.Set("alt", alt)
 	urls := googleapi.ResolveRelative(c.s.BasePath, "{project}/global/operations/{operation}")
@@ -1170,7 +1164,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	if c.ifNoneMatch_ != "" {
 		reqHeaders.Set("If-None-Match", c.ifNoneMatch_)
 	}
@@ -1392,7 +1385,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	if c.ifNoneMatch_ != "" {
 		reqHeaders.Set("If-None-Match", c.ifNoneMatch_)
 	}
@@ -1572,7 +1564,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	var body io.Reader = nil
 	body, err := googleapi.WithoutDataWrapper.JSONReader(c.groupsaddmemberrequest)
 	if err != nil {
@@ -1717,7 +1708,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	var body io.Reader = nil
 	c.urlParams_.Set("alt", alt)
 	urls := googleapi.ResolveRelative(c.s.BasePath, "{project}/global/groups/{groupName}")
@@ -1865,7 +1855,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	if c.ifNoneMatch_ != "" {
 		reqHeaders.Set("If-None-Match", c.ifNoneMatch_)
 	}
@@ -2008,7 +1997,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	var body io.Reader = nil
 	body, err := googleapi.WithoutDataWrapper.JSONReader(c.group)
 	if err != nil {
@@ -2224,7 +2212,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	if c.ifNoneMatch_ != "" {
 		reqHeaders.Set("If-None-Match", c.ifNoneMatch_)
 	}
@@ -2404,7 +2391,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	var body io.Reader = nil
 	body, err := googleapi.WithoutDataWrapper.JSONReader(c.groupsremovememberrequest)
 	if err != nil {
@@ -2560,7 +2546,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	var body io.Reader = nil
 	c.urlParams_.Set("alt", alt)
 	urls := googleapi.ResolveRelative(c.s.BasePath, "{project}/zones/{zone}/authorizedKeysView/{user}")
@@ -2793,7 +2778,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	var body io.Reader = nil
 	c.urlParams_.Set("alt", alt)
 	urls := googleapi.ResolveRelative(c.s.BasePath, "{project}/zones/{zone}/linuxAccountViews")
@@ -2967,7 +2951,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	var body io.Reader = nil
 	body, err := googleapi.WithoutDataWrapper.JSONReader(c.publickey)
 	if err != nil {
@@ -3112,7 +3095,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	var body io.Reader = nil
 	c.urlParams_.Set("alt", alt)
 	urls := googleapi.ResolveRelative(c.s.BasePath, "{project}/global/users/{user}")
@@ -3260,7 +3242,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	if c.ifNoneMatch_ != "" {
 		reqHeaders.Set("If-None-Match", c.ifNoneMatch_)
 	}
@@ -3403,7 +3384,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	var body io.Reader = nil
 	body, err := googleapi.WithoutDataWrapper.JSONReader(c.user)
 	if err != nil {
@@ -3619,7 +3599,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	if c.ifNoneMatch_ != "" {
 		reqHeaders.Set("If-None-Match", c.ifNoneMatch_)
 	}
@@ -3798,7 +3777,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	var body io.Reader = nil
 	c.urlParams_.Set("alt", alt)
 	urls := googleapi.ResolveRelative(c.s.BasePath, "{project}/global/users/{user}/removePublicKey")
diff --git a/compute/v0.alpha/compute-api.json b/compute/v0.alpha/compute-api.json
index 5e26179..e6f8475 100644
--- a/compute/v0.alpha/compute-api.json
+++ b/compute/v0.alpha/compute-api.json
@@ -1,11 +1,11 @@
 {
  "kind": "discovery#restDescription",
- "etag": "\"tbys6C40o18GZwyMen5GMkdK-3s/ry3ciIJyFc5hhGjeUo4t9bWBDOU\"",
+ "etag": "\"tbys6C40o18GZwyMen5GMkdK-3s/DTW2IzeTh4yhYDOmlZC3JUDYySE\"",
  "discoveryVersion": "v1",
  "id": "compute:alpha",
  "name": "compute",
  "version": "alpha",
- "revision": "20170224",
+ "revision": "20170302",
  "title": "Compute Engine API",
  "description": "Creates and runs virtual machines on Google Cloud Platform.",
  "ownerDomain": "google.com",
@@ -2037,6 +2037,7 @@
       "APPROVER",
       "ATTRIBUTION",
       "AUTHORITY",
+      "JUSTIFICATION_TYPE",
       "NO_ATTR",
       "SECURITY_REALM"
      ],
@@ -2045,6 +2046,7 @@
       "",
       "",
       "",
+      "",
       ""
      ]
     },
@@ -11539,8 +11541,7 @@
      "parameters": {
       "autoscaler": {
        "type": "string",
-       "description": "Name of the autoscaler to update.",
-       "required": true,
+       "description": "Name of the autoscaler to patch.",
        "pattern": "[a-z](?:[-a-z0-9]{0,61}[a-z0-9])?",
        "location": "query"
       },
@@ -11566,8 +11567,7 @@
      },
      "parameterOrder": [
       "project",
-      "zone",
-      "autoscaler"
+      "zone"
      ],
      "request": {
       "$ref": "Autoscaler"
@@ -11577,7 +11577,8 @@
      },
      "scopes": [
       "https://www.googleapis.com/auth/cloud-platform",
-      "https://www.googleapis.com/auth/compute"
+      "https://www.googleapis.com/auth/compute",
+      "https://www.googleapis.com/auth/compute.readonly"
      ]
     },
     "testIamPermissions": {
@@ -20525,8 +20526,7 @@
      "parameters": {
       "autoscaler": {
        "type": "string",
-       "description": "Name of the autoscaler to update.",
-       "required": true,
+       "description": "Name of the autoscaler to patch.",
        "pattern": "[a-z](?:[-a-z0-9]{0,61}[a-z0-9])?",
        "location": "query"
       },
@@ -20552,8 +20552,7 @@
      },
      "parameterOrder": [
       "project",
-      "region",
-      "autoscaler"
+      "region"
      ],
      "request": {
       "$ref": "Autoscaler"
@@ -20563,7 +20562,8 @@
      },
      "scopes": [
       "https://www.googleapis.com/auth/cloud-platform",
-      "https://www.googleapis.com/auth/compute"
+      "https://www.googleapis.com/auth/compute",
+      "https://www.googleapis.com/auth/compute.readonly"
      ]
     },
     "testIamPermissions": {
diff --git a/compute/v0.alpha/compute-gen.go b/compute/v0.alpha/compute-gen.go
index fdcb17d..75533fa 100644
--- a/compute/v0.alpha/compute-gen.go
+++ b/compute/v0.alpha/compute-gen.go
@@ -128,10 +128,9 @@
 }
 
 type Service struct {
-	client                    *http.Client
-	BasePath                  string // API endpoint base URL
-	UserAgent                 string // optional additional User-Agent fragment
-	GoogleClientHeaderElement string // client header fragment, for Google use only
+	client    *http.Client
+	BasePath  string // API endpoint base URL
+	UserAgent string // optional additional User-Agent fragment
 
 	AcceleratorTypes *AcceleratorTypesService
 
@@ -247,10 +246,6 @@
 	return googleapi.UserAgent + " " + s.UserAgent
 }
 
-func (s *Service) clientHeader() string {
-	return gensupport.GoogleClientHeader("20170210", s.GoogleClientHeaderElement)
-}
-
 func NewAcceleratorTypesService(s *Service) *AcceleratorTypesService {
 	rs := &AcceleratorTypesService{s: s}
 	return rs
@@ -3835,6 +3830,7 @@
 	//   "APPROVER"
 	//   "ATTRIBUTION"
 	//   "AUTHORITY"
+	//   "JUSTIFICATION_TYPE"
 	//   "NO_ATTR"
 	//   "SECURITY_REALM"
 	Iam string `json:"iam,omitempty"`
@@ -17702,7 +17698,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	if c.ifNoneMatch_ != "" {
 		reqHeaders.Set("If-None-Match", c.ifNoneMatch_)
 	}
@@ -17892,7 +17887,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	if c.ifNoneMatch_ != "" {
 		reqHeaders.Set("If-None-Match", c.ifNoneMatch_)
 	}
@@ -18122,7 +18116,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	if c.ifNoneMatch_ != "" {
 		reqHeaders.Set("If-None-Match", c.ifNoneMatch_)
 	}
@@ -18385,7 +18378,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	if c.ifNoneMatch_ != "" {
 		reqHeaders.Set("If-None-Match", c.ifNoneMatch_)
 	}
@@ -18571,7 +18563,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	var body io.Reader = nil
 	c.urlParams_.Set("alt", alt)
 	urls := googleapi.ResolveRelative(c.s.BasePath, "{project}/regions/{region}/addresses/{address}")
@@ -18736,7 +18727,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	if c.ifNoneMatch_ != "" {
 		reqHeaders.Set("If-None-Match", c.ifNoneMatch_)
 	}
@@ -18897,7 +18887,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	var body io.Reader = nil
 	body, err := googleapi.WithoutDataWrapper.JSONReader(c.address)
 	if err != nil {
@@ -19128,7 +19117,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	if c.ifNoneMatch_ != "" {
 		reqHeaders.Set("If-None-Match", c.ifNoneMatch_)
 	}
@@ -19325,7 +19313,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	var body io.Reader = nil
 	body, err := googleapi.WithoutDataWrapper.JSONReader(c.regionsetlabelsrequest)
 	if err != nil {
@@ -19489,7 +19476,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	var body io.Reader = nil
 	body, err := googleapi.WithoutDataWrapper.JSONReader(c.testpermissionsrequest)
 	if err != nil {
@@ -19721,7 +19707,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	if c.ifNoneMatch_ != "" {
 		reqHeaders.Set("If-None-Match", c.ifNoneMatch_)
 	}
@@ -19906,7 +19891,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	var body io.Reader = nil
 	c.urlParams_.Set("alt", alt)
 	urls := googleapi.ResolveRelative(c.s.BasePath, "{project}/zones/{zone}/autoscalers/{autoscaler}")
@@ -20071,7 +20055,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	if c.ifNoneMatch_ != "" {
 		reqHeaders.Set("If-None-Match", c.ifNoneMatch_)
 	}
@@ -20231,7 +20214,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	var body io.Reader = nil
 	body, err := googleapi.WithoutDataWrapper.JSONReader(c.autoscaler)
 	if err != nil {
@@ -20461,7 +20443,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	if c.ifNoneMatch_ != "" {
 		reqHeaders.Set("If-None-Match", c.ifNoneMatch_)
 	}
@@ -20599,23 +20580,29 @@
 // method id "compute.autoscalers.patch":
 
 type AutoscalersPatchCall struct {
-	s           *Service
-	project     string
-	zone        string
-	autoscaler2 *Autoscaler
-	urlParams_  gensupport.URLParams
-	ctx_        context.Context
-	header_     http.Header
+	s          *Service
+	project    string
+	zone       string
+	autoscaler *Autoscaler
+	urlParams_ gensupport.URLParams
+	ctx_       context.Context
+	header_    http.Header
 }
 
 // Patch: Updates an autoscaler in the specified project using the data
 // included in the request. This method supports patch semantics.
-func (r *AutoscalersService) Patch(project string, zone string, autoscaler string, autoscaler2 *Autoscaler) *AutoscalersPatchCall {
+func (r *AutoscalersService) Patch(project string, zone string, autoscaler *Autoscaler) *AutoscalersPatchCall {
 	c := &AutoscalersPatchCall{s: r.s, urlParams_: make(gensupport.URLParams)}
 	c.project = project
 	c.zone = zone
+	c.autoscaler = autoscaler
+	return c
+}
+
+// Autoscaler sets the optional parameter "autoscaler": Name of the
+// autoscaler to patch.
+func (c *AutoscalersPatchCall) Autoscaler(autoscaler string) *AutoscalersPatchCall {
 	c.urlParams_.Set("autoscaler", autoscaler)
-	c.autoscaler2 = autoscaler2
 	return c
 }
 
@@ -20657,9 +20644,8 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	var body io.Reader = nil
-	body, err := googleapi.WithoutDataWrapper.JSONReader(c.autoscaler2)
+	body, err := googleapi.WithoutDataWrapper.JSONReader(c.autoscaler)
 	if err != nil {
 		return nil, err
 	}
@@ -20719,15 +20705,13 @@
 	//   "id": "compute.autoscalers.patch",
 	//   "parameterOrder": [
 	//     "project",
-	//     "zone",
-	//     "autoscaler"
+	//     "zone"
 	//   ],
 	//   "parameters": {
 	//     "autoscaler": {
-	//       "description": "Name of the autoscaler to update.",
+	//       "description": "Name of the autoscaler to patch.",
 	//       "location": "query",
 	//       "pattern": "[a-z](?:[-a-z0-9]{0,61}[a-z0-9])?",
-	//       "required": true,
 	//       "type": "string"
 	//     },
 	//     "project": {
@@ -20759,7 +20743,8 @@
 	//   },
 	//   "scopes": [
 	//     "https://www.googleapis.com/auth/cloud-platform",
-	//     "https://www.googleapis.com/auth/compute"
+	//     "https://www.googleapis.com/auth/compute",
+	//     "https://www.googleapis.com/auth/compute.readonly"
 	//   ]
 	// }
 
@@ -20820,7 +20805,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	var body io.Reader = nil
 	body, err := googleapi.WithoutDataWrapper.JSONReader(c.testpermissionsrequest)
 	if err != nil {
@@ -20992,7 +20976,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	var body io.Reader = nil
 	body, err := googleapi.WithoutDataWrapper.JSONReader(c.autoscaler)
 	if err != nil {
@@ -21155,7 +21138,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	var body io.Reader = nil
 	c.urlParams_.Set("alt", alt)
 	urls := googleapi.ResolveRelative(c.s.BasePath, "{project}/global/backendBuckets/{backendBucket}")
@@ -21309,7 +21291,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	if c.ifNoneMatch_ != "" {
 		reqHeaders.Set("If-None-Match", c.ifNoneMatch_)
 	}
@@ -21462,7 +21443,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	if c.ifNoneMatch_ != "" {
 		reqHeaders.Set("If-None-Match", c.ifNoneMatch_)
 	}
@@ -21611,7 +21591,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	var body io.Reader = nil
 	body, err := googleapi.WithoutDataWrapper.JSONReader(c.backendbucket)
 	if err != nil {
@@ -21830,7 +21809,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	if c.ifNoneMatch_ != "" {
 		reqHeaders.Set("If-None-Match", c.ifNoneMatch_)
 	}
@@ -22016,7 +21994,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	var body io.Reader = nil
 	body, err := googleapi.WithoutDataWrapper.JSONReader(c.backendbucket)
 	if err != nil {
@@ -22170,7 +22147,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	var body io.Reader = nil
 	body, err := googleapi.WithoutDataWrapper.JSONReader(c.policy)
 	if err != nil {
@@ -22318,7 +22294,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	var body io.Reader = nil
 	body, err := googleapi.WithoutDataWrapper.JSONReader(c.testpermissionsrequest)
 	if err != nil {
@@ -22474,7 +22449,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	var body io.Reader = nil
 	body, err := googleapi.WithoutDataWrapper.JSONReader(c.backendbucket)
 	if err != nil {
@@ -22702,7 +22676,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	if c.ifNoneMatch_ != "" {
 		reqHeaders.Set("If-None-Match", c.ifNoneMatch_)
 	}
@@ -22886,7 +22859,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	var body io.Reader = nil
 	c.urlParams_.Set("alt", alt)
 	urls := googleapi.ResolveRelative(c.s.BasePath, "{project}/global/backendServices/{backendService}")
@@ -23041,7 +23013,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	if c.ifNoneMatch_ != "" {
 		reqHeaders.Set("If-None-Match", c.ifNoneMatch_)
 	}
@@ -23186,7 +23157,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	var body io.Reader = nil
 	body, err := googleapi.WithoutDataWrapper.JSONReader(c.resourcegroupreference)
 	if err != nil {
@@ -23342,7 +23312,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	var body io.Reader = nil
 	body, err := googleapi.WithoutDataWrapper.JSONReader(c.backendservice)
 	if err != nil {
@@ -23562,7 +23531,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	if c.ifNoneMatch_ != "" {
 		reqHeaders.Set("If-None-Match", c.ifNoneMatch_)
 	}
@@ -23752,7 +23720,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	var body io.Reader = nil
 	body, err := googleapi.WithoutDataWrapper.JSONReader(c.backendservice)
 	if err != nil {
@@ -23906,7 +23873,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	var body io.Reader = nil
 	body, err := googleapi.WithoutDataWrapper.JSONReader(c.testpermissionsrequest)
 	if err != nil {
@@ -24065,7 +24031,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	var body io.Reader = nil
 	body, err := googleapi.WithoutDataWrapper.JSONReader(c.backendservice)
 	if err != nil {
@@ -24218,7 +24183,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	var body io.Reader = nil
 	body, err := googleapi.WithoutDataWrapper.JSONReader(c.testpermissionsrequest)
 	if err != nil {
@@ -24441,7 +24405,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	if c.ifNoneMatch_ != "" {
 		reqHeaders.Set("If-None-Match", c.ifNoneMatch_)
 	}
@@ -24631,7 +24594,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	if c.ifNoneMatch_ != "" {
 		reqHeaders.Set("If-None-Match", c.ifNoneMatch_)
 	}
@@ -24791,7 +24753,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	var body io.Reader = nil
 	body, err := googleapi.WithoutDataWrapper.JSONReader(c.commitment)
 	if err != nil {
@@ -25021,7 +24982,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	if c.ifNoneMatch_ != "" {
 		reqHeaders.Set("If-None-Match", c.ifNoneMatch_)
 	}
@@ -25211,7 +25171,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	var body io.Reader = nil
 	body, err := googleapi.WithoutDataWrapper.JSONReader(c.testpermissionsrequest)
 	if err != nil {
@@ -25444,7 +25403,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	if c.ifNoneMatch_ != "" {
 		reqHeaders.Set("If-None-Match", c.ifNoneMatch_)
 	}
@@ -25635,7 +25593,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	if c.ifNoneMatch_ != "" {
 		reqHeaders.Set("If-None-Match", c.ifNoneMatch_)
 	}
@@ -25866,7 +25823,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	if c.ifNoneMatch_ != "" {
 		reqHeaders.Set("If-None-Match", c.ifNoneMatch_)
 	}
@@ -26129,7 +26085,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	if c.ifNoneMatch_ != "" {
 		reqHeaders.Set("If-None-Match", c.ifNoneMatch_)
 	}
@@ -26323,7 +26278,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	var body io.Reader = nil
 	body, err := googleapi.WithoutDataWrapper.JSONReader(c.snapshot)
 	if err != nil {
@@ -26499,7 +26453,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	var body io.Reader = nil
 	c.urlParams_.Set("alt", alt)
 	urls := googleapi.ResolveRelative(c.s.BasePath, "{project}/zones/{zone}/disks/{disk}")
@@ -26664,7 +26617,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	if c.ifNoneMatch_ != "" {
 		reqHeaders.Set("If-None-Match", c.ifNoneMatch_)
 	}
@@ -26828,7 +26780,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	if c.ifNoneMatch_ != "" {
 		reqHeaders.Set("If-None-Match", c.ifNoneMatch_)
 	}
@@ -26999,7 +26950,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	var body io.Reader = nil
 	body, err := googleapi.WithoutDataWrapper.JSONReader(c.disk)
 	if err != nil {
@@ -27235,7 +27185,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	if c.ifNoneMatch_ != "" {
 		reqHeaders.Set("If-None-Match", c.ifNoneMatch_)
 	}
@@ -27431,7 +27380,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	var body io.Reader = nil
 	body, err := googleapi.WithoutDataWrapper.JSONReader(c.disksresizerequest)
 	if err != nil {
@@ -27595,7 +27543,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	var body io.Reader = nil
 	body, err := googleapi.WithoutDataWrapper.JSONReader(c.policy)
 	if err != nil {
@@ -27761,7 +27708,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	var body io.Reader = nil
 	body, err := googleapi.WithoutDataWrapper.JSONReader(c.zonesetlabelsrequest)
 	if err != nil {
@@ -27925,7 +27871,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	var body io.Reader = nil
 	body, err := googleapi.WithoutDataWrapper.JSONReader(c.testpermissionsrequest)
 	if err != nil {
@@ -28088,7 +28033,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	var body io.Reader = nil
 	c.urlParams_.Set("alt", alt)
 	urls := googleapi.ResolveRelative(c.s.BasePath, "{project}/global/firewalls/{firewall}")
@@ -28242,7 +28186,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	if c.ifNoneMatch_ != "" {
 		reqHeaders.Set("If-None-Match", c.ifNoneMatch_)
 	}
@@ -28392,7 +28335,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	var body io.Reader = nil
 	body, err := googleapi.WithoutDataWrapper.JSONReader(c.firewall)
 	if err != nil {
@@ -28612,7 +28554,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	if c.ifNoneMatch_ != "" {
 		reqHeaders.Set("If-None-Match", c.ifNoneMatch_)
 	}
@@ -28799,7 +28740,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	var body io.Reader = nil
 	body, err := googleapi.WithoutDataWrapper.JSONReader(c.firewall2)
 	if err != nil {
@@ -28953,7 +28893,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	var body io.Reader = nil
 	body, err := googleapi.WithoutDataWrapper.JSONReader(c.testpermissionsrequest)
 	if err != nil {
@@ -29110,7 +29049,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	var body io.Reader = nil
 	body, err := googleapi.WithoutDataWrapper.JSONReader(c.firewall2)
 	if err != nil {
@@ -29338,7 +29276,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	if c.ifNoneMatch_ != "" {
 		reqHeaders.Set("If-None-Match", c.ifNoneMatch_)
 	}
@@ -29524,7 +29461,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	var body io.Reader = nil
 	c.urlParams_.Set("alt", alt)
 	urls := googleapi.ResolveRelative(c.s.BasePath, "{project}/regions/{region}/forwardingRules/{forwardingRule}")
@@ -29689,7 +29625,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	if c.ifNoneMatch_ != "" {
 		reqHeaders.Set("If-None-Match", c.ifNoneMatch_)
 	}
@@ -29850,7 +29785,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	var body io.Reader = nil
 	body, err := googleapi.WithoutDataWrapper.JSONReader(c.forwardingrule)
 	if err != nil {
@@ -30081,7 +30015,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	if c.ifNoneMatch_ != "" {
 		reqHeaders.Set("If-None-Match", c.ifNoneMatch_)
 	}
@@ -30278,7 +30211,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	var body io.Reader = nil
 	body, err := googleapi.WithoutDataWrapper.JSONReader(c.regionsetlabelsrequest)
 	if err != nil {
@@ -30450,7 +30382,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	var body io.Reader = nil
 	body, err := googleapi.WithoutDataWrapper.JSONReader(c.targetreference)
 	if err != nil {
@@ -30614,7 +30545,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	var body io.Reader = nil
 	body, err := googleapi.WithoutDataWrapper.JSONReader(c.testpermissionsrequest)
 	if err != nil {
@@ -30777,7 +30707,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	var body io.Reader = nil
 	c.urlParams_.Set("alt", alt)
 	urls := googleapi.ResolveRelative(c.s.BasePath, "{project}/global/addresses/{address}")
@@ -30932,7 +30861,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	if c.ifNoneMatch_ != "" {
 		reqHeaders.Set("If-None-Match", c.ifNoneMatch_)
 	}
@@ -31082,7 +31010,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	var body io.Reader = nil
 	body, err := googleapi.WithoutDataWrapper.JSONReader(c.address)
 	if err != nil {
@@ -31301,7 +31228,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	if c.ifNoneMatch_ != "" {
 		reqHeaders.Set("If-None-Match", c.ifNoneMatch_)
 	}
@@ -31480,7 +31406,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	var body io.Reader = nil
 	body, err := googleapi.WithoutDataWrapper.JSONReader(c.globalsetlabelsrequest)
 	if err != nil {
@@ -31628,7 +31553,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	var body io.Reader = nil
 	body, err := googleapi.WithoutDataWrapper.JSONReader(c.testpermissionsrequest)
 	if err != nil {
@@ -31782,7 +31706,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	var body io.Reader = nil
 	c.urlParams_.Set("alt", alt)
 	urls := googleapi.ResolveRelative(c.s.BasePath, "{project}/global/forwardingRules/{forwardingRule}")
@@ -31937,7 +31860,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	if c.ifNoneMatch_ != "" {
 		reqHeaders.Set("If-None-Match", c.ifNoneMatch_)
 	}
@@ -32087,7 +32009,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	var body io.Reader = nil
 	body, err := googleapi.WithoutDataWrapper.JSONReader(c.forwardingrule)
 	if err != nil {
@@ -32307,7 +32228,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	if c.ifNoneMatch_ != "" {
 		reqHeaders.Set("If-None-Match", c.ifNoneMatch_)
 	}
@@ -32486,7 +32406,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	var body io.Reader = nil
 	body, err := googleapi.WithoutDataWrapper.JSONReader(c.globalsetlabelsrequest)
 	if err != nil {
@@ -32642,7 +32561,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	var body io.Reader = nil
 	body, err := googleapi.WithoutDataWrapper.JSONReader(c.targetreference)
 	if err != nil {
@@ -32795,7 +32713,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	var body io.Reader = nil
 	body, err := googleapi.WithoutDataWrapper.JSONReader(c.testpermissionsrequest)
 	if err != nil {
@@ -33019,7 +32936,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	if c.ifNoneMatch_ != "" {
 		reqHeaders.Set("If-None-Match", c.ifNoneMatch_)
 	}
@@ -33196,7 +33112,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	var body io.Reader = nil
 	c.urlParams_.Set("alt", alt)
 	urls := googleapi.ResolveRelative(c.s.BasePath, "{project}/global/operations/{operation}")
@@ -33318,7 +33233,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	if c.ifNoneMatch_ != "" {
 		reqHeaders.Set("If-None-Match", c.ifNoneMatch_)
 	}
@@ -33538,7 +33452,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	if c.ifNoneMatch_ != "" {
 		reqHeaders.Set("If-None-Match", c.ifNoneMatch_)
 	}
@@ -33721,7 +33634,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	var body io.Reader = nil
 	c.urlParams_.Set("alt", alt)
 	urls := googleapi.ResolveRelative(c.s.BasePath, "{project}/global/healthChecks/{healthCheck}")
@@ -33875,7 +33787,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	if c.ifNoneMatch_ != "" {
 		reqHeaders.Set("If-None-Match", c.ifNoneMatch_)
 	}
@@ -34024,7 +33935,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	var body io.Reader = nil
 	body, err := googleapi.WithoutDataWrapper.JSONReader(c.healthcheck)
 	if err != nil {
@@ -34243,7 +34153,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	if c.ifNoneMatch_ != "" {
 		reqHeaders.Set("If-None-Match", c.ifNoneMatch_)
 	}
@@ -34430,7 +34339,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	var body io.Reader = nil
 	body, err := googleapi.WithoutDataWrapper.JSONReader(c.healthcheck)
 	if err != nil {
@@ -34584,7 +34492,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	var body io.Reader = nil
 	body, err := googleapi.WithoutDataWrapper.JSONReader(c.testpermissionsrequest)
 	if err != nil {
@@ -34740,7 +34647,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	var body io.Reader = nil
 	body, err := googleapi.WithoutDataWrapper.JSONReader(c.healthcheck)
 	if err != nil {
@@ -34967,7 +34873,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	if c.ifNoneMatch_ != "" {
 		reqHeaders.Set("If-None-Match", c.ifNoneMatch_)
 	}
@@ -35157,7 +35062,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	if c.ifNoneMatch_ != "" {
 		reqHeaders.Set("If-None-Match", c.ifNoneMatch_)
 	}
@@ -35387,7 +35291,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	if c.ifNoneMatch_ != "" {
 		reqHeaders.Set("If-None-Match", c.ifNoneMatch_)
 	}
@@ -35649,7 +35552,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	if c.ifNoneMatch_ != "" {
 		reqHeaders.Set("If-None-Match", c.ifNoneMatch_)
 	}
@@ -35834,7 +35736,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	var body io.Reader = nil
 	c.urlParams_.Set("alt", alt)
 	urls := googleapi.ResolveRelative(c.s.BasePath, "{project}/zones/{zone}/hosts/{host}")
@@ -35999,7 +35900,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	if c.ifNoneMatch_ != "" {
 		reqHeaders.Set("If-None-Match", c.ifNoneMatch_)
 	}
@@ -36163,7 +36063,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	if c.ifNoneMatch_ != "" {
 		reqHeaders.Set("If-None-Match", c.ifNoneMatch_)
 	}
@@ -36323,7 +36222,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	var body io.Reader = nil
 	body, err := googleapi.WithoutDataWrapper.JSONReader(c.host)
 	if err != nil {
@@ -36552,7 +36450,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	if c.ifNoneMatch_ != "" {
 		reqHeaders.Set("If-None-Match", c.ifNoneMatch_)
 	}
@@ -36742,7 +36639,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	var body io.Reader = nil
 	body, err := googleapi.WithoutDataWrapper.JSONReader(c.policy)
 	if err != nil {
@@ -36901,7 +36797,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	var body io.Reader = nil
 	body, err := googleapi.WithoutDataWrapper.JSONReader(c.testpermissionsrequest)
 	if err != nil {
@@ -37064,7 +36959,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	var body io.Reader = nil
 	c.urlParams_.Set("alt", alt)
 	urls := googleapi.ResolveRelative(c.s.BasePath, "{project}/global/httpHealthChecks/{httpHealthCheck}")
@@ -37219,7 +37113,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	if c.ifNoneMatch_ != "" {
 		reqHeaders.Set("If-None-Match", c.ifNoneMatch_)
 	}
@@ -37369,7 +37262,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	var body io.Reader = nil
 	body, err := googleapi.WithoutDataWrapper.JSONReader(c.httphealthcheck)
 	if err != nil {
@@ -37589,7 +37481,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	if c.ifNoneMatch_ != "" {
 		reqHeaders.Set("If-None-Match", c.ifNoneMatch_)
 	}
@@ -37777,7 +37668,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	var body io.Reader = nil
 	body, err := googleapi.WithoutDataWrapper.JSONReader(c.httphealthcheck)
 	if err != nil {
@@ -37931,7 +37821,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	var body io.Reader = nil
 	body, err := googleapi.WithoutDataWrapper.JSONReader(c.testpermissionsrequest)
 	if err != nil {
@@ -38088,7 +37977,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	var body io.Reader = nil
 	body, err := googleapi.WithoutDataWrapper.JSONReader(c.httphealthcheck)
 	if err != nil {
@@ -38245,7 +38133,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	var body io.Reader = nil
 	c.urlParams_.Set("alt", alt)
 	urls := googleapi.ResolveRelative(c.s.BasePath, "{project}/global/httpsHealthChecks/{httpsHealthCheck}")
@@ -38399,7 +38286,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	if c.ifNoneMatch_ != "" {
 		reqHeaders.Set("If-None-Match", c.ifNoneMatch_)
 	}
@@ -38548,7 +38434,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	var body io.Reader = nil
 	body, err := googleapi.WithoutDataWrapper.JSONReader(c.httpshealthcheck)
 	if err != nil {
@@ -38767,7 +38652,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	if c.ifNoneMatch_ != "" {
 		reqHeaders.Set("If-None-Match", c.ifNoneMatch_)
 	}
@@ -38954,7 +38838,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	var body io.Reader = nil
 	body, err := googleapi.WithoutDataWrapper.JSONReader(c.httpshealthcheck)
 	if err != nil {
@@ -39108,7 +38991,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	var body io.Reader = nil
 	body, err := googleapi.WithoutDataWrapper.JSONReader(c.testpermissionsrequest)
 	if err != nil {
@@ -39264,7 +39146,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	var body io.Reader = nil
 	body, err := googleapi.WithoutDataWrapper.JSONReader(c.httpshealthcheck)
 	if err != nil {
@@ -39422,7 +39303,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	var body io.Reader = nil
 	c.urlParams_.Set("alt", alt)
 	urls := googleapi.ResolveRelative(c.s.BasePath, "{project}/global/images/{image}")
@@ -39577,7 +39457,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	var body io.Reader = nil
 	body, err := googleapi.WithoutDataWrapper.JSONReader(c.deprecationstatus)
 	if err != nil {
@@ -39740,7 +39619,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	if c.ifNoneMatch_ != "" {
 		reqHeaders.Set("If-None-Match", c.ifNoneMatch_)
 	}
@@ -39893,7 +39771,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	if c.ifNoneMatch_ != "" {
 		reqHeaders.Set("If-None-Match", c.ifNoneMatch_)
 	}
@@ -40046,7 +39923,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	if c.ifNoneMatch_ != "" {
 		reqHeaders.Set("If-None-Match", c.ifNoneMatch_)
 	}
@@ -40203,7 +40079,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	var body io.Reader = nil
 	body, err := googleapi.WithoutDataWrapper.JSONReader(c.image)
 	if err != nil {
@@ -40436,7 +40311,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	if c.ifNoneMatch_ != "" {
 		reqHeaders.Set("If-None-Match", c.ifNoneMatch_)
 	}
@@ -40615,7 +40489,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	var body io.Reader = nil
 	body, err := googleapi.WithoutDataWrapper.JSONReader(c.policy)
 	if err != nil {
@@ -40763,7 +40636,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	var body io.Reader = nil
 	body, err := googleapi.WithoutDataWrapper.JSONReader(c.globalsetlabelsrequest)
 	if err != nil {
@@ -40911,7 +40783,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	var body io.Reader = nil
 	body, err := googleapi.WithoutDataWrapper.JSONReader(c.testpermissionsrequest)
 	if err != nil {
@@ -41076,7 +40947,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	var body io.Reader = nil
 	body, err := googleapi.WithoutDataWrapper.JSONReader(c.instancegroupmanagersabandoninstancesrequest)
 	if err != nil {
@@ -41311,7 +41181,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	if c.ifNoneMatch_ != "" {
 		reqHeaders.Set("If-None-Match", c.ifNoneMatch_)
 	}
@@ -41500,7 +41369,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	var body io.Reader = nil
 	c.urlParams_.Set("alt", alt)
 	urls := googleapi.ResolveRelative(c.s.BasePath, "{project}/zones/{zone}/instanceGroupManagers/{instanceGroupManager}")
@@ -41667,7 +41535,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	var body io.Reader = nil
 	body, err := googleapi.WithoutDataWrapper.JSONReader(c.instancegroupmanagersdeleteinstancesrequest)
 	if err != nil {
@@ -41839,7 +41706,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	if c.ifNoneMatch_ != "" {
 		reqHeaders.Set("If-None-Match", c.ifNoneMatch_)
 	}
@@ -42002,7 +41868,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	var body io.Reader = nil
 	body, err := googleapi.WithoutDataWrapper.JSONReader(c.instancegroupmanager)
 	if err != nil {
@@ -42231,7 +42096,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	if c.ifNoneMatch_ != "" {
 		reqHeaders.Set("If-None-Match", c.ifNoneMatch_)
 	}
@@ -42446,7 +42310,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	var body io.Reader = nil
 	c.urlParams_.Set("alt", alt)
 	urls := googleapi.ResolveRelative(c.s.BasePath, "{project}/zones/{zone}/instanceGroupManagers/{instanceGroupManager}/listManagedInstances")
@@ -42649,7 +42512,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	var body io.Reader = nil
 	body, err := googleapi.WithoutDataWrapper.JSONReader(c.instancegroupmanager)
 	if err != nil {
@@ -42823,7 +42685,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	var body io.Reader = nil
 	body, err := googleapi.WithoutDataWrapper.JSONReader(c.instancegroupmanagersrecreateinstancesrequest)
 	if err != nil {
@@ -42996,7 +42857,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	var body io.Reader = nil
 	c.urlParams_.Set("alt", alt)
 	urls := googleapi.ResolveRelative(c.s.BasePath, "{project}/zones/{zone}/instanceGroupManagers/{instanceGroupManager}/resize")
@@ -43174,7 +43034,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	var body io.Reader = nil
 	body, err := googleapi.WithoutDataWrapper.JSONReader(c.instancegroupmanagersresizeadvancedrequest)
 	if err != nil {
@@ -43342,7 +43201,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	var body io.Reader = nil
 	body, err := googleapi.WithoutDataWrapper.JSONReader(c.instancegroupmanagerssetautohealingrequest)
 	if err != nil {
@@ -43512,7 +43370,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	var body io.Reader = nil
 	body, err := googleapi.WithoutDataWrapper.JSONReader(c.instancegroupmanagerssetinstancetemplaterequest)
 	if err != nil {
@@ -43686,7 +43543,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	var body io.Reader = nil
 	body, err := googleapi.WithoutDataWrapper.JSONReader(c.instancegroupmanagerssettargetpoolsrequest)
 	if err != nil {
@@ -43848,7 +43704,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	var body io.Reader = nil
 	body, err := googleapi.WithoutDataWrapper.JSONReader(c.testpermissionsrequest)
 	if err != nil {
@@ -44018,7 +43873,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	var body io.Reader = nil
 	body, err := googleapi.WithoutDataWrapper.JSONReader(c.instancegroupmanager)
 	if err != nil {
@@ -44188,7 +44042,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	var body io.Reader = nil
 	body, err := googleapi.WithoutDataWrapper.JSONReader(c.instancegroupsaddinstancesrequest)
 	if err != nil {
@@ -44423,7 +44276,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	if c.ifNoneMatch_ != "" {
 		reqHeaders.Set("If-None-Match", c.ifNoneMatch_)
 	}
@@ -44611,7 +44463,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	var body io.Reader = nil
 	c.urlParams_.Set("alt", alt)
 	urls := googleapi.ResolveRelative(c.s.BasePath, "{project}/zones/{zone}/instanceGroups/{instanceGroup}")
@@ -44774,7 +44625,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	if c.ifNoneMatch_ != "" {
 		reqHeaders.Set("If-None-Match", c.ifNoneMatch_)
 	}
@@ -44932,7 +44782,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	var body io.Reader = nil
 	body, err := googleapi.WithoutDataWrapper.JSONReader(c.instancegroup)
 	if err != nil {
@@ -45161,7 +45010,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	if c.ifNoneMatch_ != "" {
 		reqHeaders.Set("If-None-Match", c.ifNoneMatch_)
 	}
@@ -45417,7 +45265,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	var body io.Reader = nil
 	body, err := googleapi.WithoutDataWrapper.JSONReader(c.instancegroupslistinstancesrequest)
 	if err != nil {
@@ -45626,7 +45473,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	var body io.Reader = nil
 	body, err := googleapi.WithoutDataWrapper.JSONReader(c.instancegroupsremoveinstancesrequest)
 	if err != nil {
@@ -45794,7 +45640,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	var body io.Reader = nil
 	body, err := googleapi.WithoutDataWrapper.JSONReader(c.instancegroupssetnamedportsrequest)
 	if err != nil {
@@ -45956,7 +45801,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	var body io.Reader = nil
 	body, err := googleapi.WithoutDataWrapper.JSONReader(c.testpermissionsrequest)
 	if err != nil {
@@ -46123,7 +45967,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	var body io.Reader = nil
 	c.urlParams_.Set("alt", alt)
 	urls := googleapi.ResolveRelative(c.s.BasePath, "{project}/global/instanceTemplates/{instanceTemplate}")
@@ -46278,7 +46121,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	if c.ifNoneMatch_ != "" {
 		reqHeaders.Set("If-None-Match", c.ifNoneMatch_)
 	}
@@ -46431,7 +46273,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	var body io.Reader = nil
 	body, err := googleapi.WithoutDataWrapper.JSONReader(c.instancetemplate)
 	if err != nil {
@@ -46651,7 +46492,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	if c.ifNoneMatch_ != "" {
 		reqHeaders.Set("If-None-Match", c.ifNoneMatch_)
 	}
@@ -46830,7 +46670,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	var body io.Reader = nil
 	body, err := googleapi.WithoutDataWrapper.JSONReader(c.testpermissionsrequest)
 	if err != nil {
@@ -46990,7 +46829,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	var body io.Reader = nil
 	body, err := googleapi.WithoutDataWrapper.JSONReader(c.accessconfig)
 	if err != nil {
@@ -47234,7 +47072,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	if c.ifNoneMatch_ != "" {
 		reqHeaders.Set("If-None-Match", c.ifNoneMatch_)
 	}
@@ -47430,7 +47267,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	var body io.Reader = nil
 	body, err := googleapi.WithoutDataWrapper.JSONReader(c.attacheddisk)
 	if err != nil {
@@ -47605,7 +47441,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	var body io.Reader = nil
 	c.urlParams_.Set("alt", alt)
 	urls := googleapi.ResolveRelative(c.s.BasePath, "{project}/zones/{zone}/instances/{instance}")
@@ -47769,7 +47604,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	var body io.Reader = nil
 	c.urlParams_.Set("alt", alt)
 	urls := googleapi.ResolveRelative(c.s.BasePath, "{project}/zones/{zone}/instances/{instance}/deleteAccessConfig")
@@ -47945,7 +47779,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	var body io.Reader = nil
 	c.urlParams_.Set("alt", alt)
 	urls := googleapi.ResolveRelative(c.s.BasePath, "{project}/zones/{zone}/instances/{instance}/detachDisk")
@@ -48118,7 +47951,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	if c.ifNoneMatch_ != "" {
 		reqHeaders.Set("If-None-Match", c.ifNoneMatch_)
 	}
@@ -48282,7 +48114,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	if c.ifNoneMatch_ != "" {
 		reqHeaders.Set("If-None-Match", c.ifNoneMatch_)
 	}
@@ -48465,7 +48296,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	if c.ifNoneMatch_ != "" {
 		reqHeaders.Set("If-None-Match", c.ifNoneMatch_)
 	}
@@ -48641,7 +48471,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	var body io.Reader = nil
 	body, err := googleapi.WithoutDataWrapper.JSONReader(c.instance)
 	if err != nil {
@@ -48872,7 +48701,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	if c.ifNoneMatch_ != "" {
 		reqHeaders.Set("If-None-Match", c.ifNoneMatch_)
 	}
@@ -49067,7 +48895,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	var body io.Reader = nil
 	c.urlParams_.Set("alt", alt)
 	urls := googleapi.ResolveRelative(c.s.BasePath, "{project}/zones/{zone}/instances/{instance}/reset")
@@ -49231,7 +49058,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	var body io.Reader = nil
 	c.urlParams_.Set("alt", alt)
 	urls := googleapi.ResolveRelative(c.s.BasePath, "{project}/zones/{zone}/instances/{instance}/setDiskAutoDelete")
@@ -49402,7 +49228,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	var body io.Reader = nil
 	body, err := googleapi.WithoutDataWrapper.JSONReader(c.policy)
 	if err != nil {
@@ -49568,7 +49393,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	var body io.Reader = nil
 	body, err := googleapi.WithoutDataWrapper.JSONReader(c.instancessetlabelsrequest)
 	if err != nil {
@@ -49739,7 +49563,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	var body io.Reader = nil
 	body, err := googleapi.WithoutDataWrapper.JSONReader(c.instancessetmachineresourcesrequest)
 	if err != nil {
@@ -49910,7 +49733,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	var body io.Reader = nil
 	body, err := googleapi.WithoutDataWrapper.JSONReader(c.instancessetmachinetyperequest)
 	if err != nil {
@@ -50082,7 +49904,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	var body io.Reader = nil
 	body, err := googleapi.WithoutDataWrapper.JSONReader(c.metadata)
 	if err != nil {
@@ -50253,7 +50074,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	var body io.Reader = nil
 	body, err := googleapi.WithoutDataWrapper.JSONReader(c.instancessetmincpuplatformrequest)
 	if err != nil {
@@ -50424,7 +50244,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	var body io.Reader = nil
 	body, err := googleapi.WithoutDataWrapper.JSONReader(c.scheduling)
 	if err != nil {
@@ -50596,7 +50415,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	var body io.Reader = nil
 	body, err := googleapi.WithoutDataWrapper.JSONReader(c.instancessetserviceaccountrequest)
 	if err != nil {
@@ -50768,7 +50586,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	var body io.Reader = nil
 	body, err := googleapi.WithoutDataWrapper.JSONReader(c.tags)
 	if err != nil {
@@ -50930,7 +50747,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	var body io.Reader = nil
 	c.urlParams_.Set("alt", alt)
 	urls := googleapi.ResolveRelative(c.s.BasePath, "{project}/zones/{zone}/instances/{instance}/simulateMaintenanceEvent")
@@ -51088,7 +50904,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	var body io.Reader = nil
 	c.urlParams_.Set("alt", alt)
 	urls := googleapi.ResolveRelative(c.s.BasePath, "{project}/zones/{zone}/instances/{instance}/start")
@@ -51252,7 +51067,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	var body io.Reader = nil
 	body, err := googleapi.WithoutDataWrapper.JSONReader(c.instancesstartwithencryptionkeyrequest)
 	if err != nil {
@@ -51435,7 +51249,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	var body io.Reader = nil
 	c.urlParams_.Set("alt", alt)
 	urls := googleapi.ResolveRelative(c.s.BasePath, "{project}/zones/{zone}/instances/{instance}/stop")
@@ -51613,7 +51426,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	var body io.Reader = nil
 	c.urlParams_.Set("alt", alt)
 	urls := googleapi.ResolveRelative(c.s.BasePath, "{project}/zones/{zone}/instances/{instance}/suspend")
@@ -51774,7 +51586,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	var body io.Reader = nil
 	body, err := googleapi.WithoutDataWrapper.JSONReader(c.testpermissionsrequest)
 	if err != nil {
@@ -51942,7 +51753,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	var body io.Reader = nil
 	body, err := googleapi.WithoutDataWrapper.JSONReader(c.accessconfig)
 	if err != nil {
@@ -52121,7 +51931,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	if c.ifNoneMatch_ != "" {
 		reqHeaders.Set("If-None-Match", c.ifNoneMatch_)
 	}
@@ -52269,7 +52078,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	var body io.Reader = nil
 	body, err := googleapi.WithoutDataWrapper.JSONReader(c.license)
 	if err != nil {
@@ -52491,7 +52299,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	if c.ifNoneMatch_ != "" {
 		reqHeaders.Set("If-None-Match", c.ifNoneMatch_)
 	}
@@ -52682,7 +52489,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	if c.ifNoneMatch_ != "" {
 		reqHeaders.Set("If-None-Match", c.ifNoneMatch_)
 	}
@@ -52913,7 +52719,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	if c.ifNoneMatch_ != "" {
 		reqHeaders.Set("If-None-Match", c.ifNoneMatch_)
 	}
@@ -53107,7 +52912,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	var body io.Reader = nil
 	body, err := googleapi.WithoutDataWrapper.JSONReader(c.networksaddpeeringrequest)
 	if err != nil {
@@ -53265,7 +53069,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	var body io.Reader = nil
 	c.urlParams_.Set("alt", alt)
 	urls := googleapi.ResolveRelative(c.s.BasePath, "{project}/global/networks/{network}")
@@ -53420,7 +53223,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	if c.ifNoneMatch_ != "" {
 		reqHeaders.Set("If-None-Match", c.ifNoneMatch_)
 	}
@@ -53570,7 +53372,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	var body io.Reader = nil
 	body, err := googleapi.WithoutDataWrapper.JSONReader(c.network)
 	if err != nil {
@@ -53790,7 +53591,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	if c.ifNoneMatch_ != "" {
 		reqHeaders.Set("If-None-Match", c.ifNoneMatch_)
 	}
@@ -53975,7 +53775,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	var body io.Reader = nil
 	body, err := googleapi.WithoutDataWrapper.JSONReader(c.networksremovepeeringrequest)
 	if err != nil {
@@ -54133,7 +53932,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	var body io.Reader = nil
 	c.urlParams_.Set("alt", alt)
 	urls := googleapi.ResolveRelative(c.s.BasePath, "{project}/global/networks/{network}/switchToCustomMode")
@@ -54278,7 +54076,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	var body io.Reader = nil
 	body, err := googleapi.WithoutDataWrapper.JSONReader(c.testpermissionsrequest)
 	if err != nil {
@@ -54429,7 +54226,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	var body io.Reader = nil
 	c.urlParams_.Set("alt", alt)
 	urls := googleapi.ResolveRelative(c.s.BasePath, "{project}/disableXpnHost")
@@ -54570,7 +54366,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	var body io.Reader = nil
 	body, err := googleapi.WithoutDataWrapper.JSONReader(c.projectsdisablexpnresourcerequest)
 	if err != nil {
@@ -54716,7 +54511,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	var body io.Reader = nil
 	c.urlParams_.Set("alt", alt)
 	urls := googleapi.ResolveRelative(c.s.BasePath, "{project}/enableXpnHost")
@@ -54859,7 +54653,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	var body io.Reader = nil
 	body, err := googleapi.WithoutDataWrapper.JSONReader(c.projectsenablexpnresourcerequest)
 	if err != nil {
@@ -55010,7 +54803,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	if c.ifNoneMatch_ != "" {
 		reqHeaders.Set("If-None-Match", c.ifNoneMatch_)
 	}
@@ -55152,7 +54944,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	if c.ifNoneMatch_ != "" {
 		reqHeaders.Set("If-None-Match", c.ifNoneMatch_)
 	}
@@ -55317,7 +55108,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	if c.ifNoneMatch_ != "" {
 		reqHeaders.Set("If-None-Match", c.ifNoneMatch_)
 	}
@@ -55514,7 +55304,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	var body io.Reader = nil
 	body, err := googleapi.WithoutDataWrapper.JSONReader(c.projectslistxpnhostsrequest)
 	if err != nil {
@@ -55698,7 +55487,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	var body io.Reader = nil
 	body, err := googleapi.WithoutDataWrapper.JSONReader(c.diskmoverequest)
 	if err != nil {
@@ -55847,7 +55635,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	var body io.Reader = nil
 	body, err := googleapi.WithoutDataWrapper.JSONReader(c.instancemoverequest)
 	if err != nil {
@@ -55997,7 +55784,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	var body io.Reader = nil
 	body, err := googleapi.WithoutDataWrapper.JSONReader(c.metadata)
 	if err != nil {
@@ -56147,7 +55933,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	var body io.Reader = nil
 	body, err := googleapi.WithoutDataWrapper.JSONReader(c.projectssetdefaultserviceaccountrequest)
 	if err != nil {
@@ -56299,7 +56084,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	var body io.Reader = nil
 	body, err := googleapi.WithoutDataWrapper.JSONReader(c.usageexportlocation)
 	if err != nil {
@@ -56452,7 +56236,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	var body io.Reader = nil
 	c.urlParams_.Set("alt", alt)
 	urls := googleapi.ResolveRelative(c.s.BasePath, "{project}/regions/{region}/autoscalers/{autoscaler}")
@@ -56616,7 +56399,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	if c.ifNoneMatch_ != "" {
 		reqHeaders.Set("If-None-Match", c.ifNoneMatch_)
 	}
@@ -56776,7 +56558,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	var body io.Reader = nil
 	body, err := googleapi.WithoutDataWrapper.JSONReader(c.autoscaler)
 	if err != nil {
@@ -57006,7 +56787,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	if c.ifNoneMatch_ != "" {
 		reqHeaders.Set("If-None-Match", c.ifNoneMatch_)
 	}
@@ -57144,23 +56924,29 @@
 // method id "compute.regionAutoscalers.patch":
 
 type RegionAutoscalersPatchCall struct {
-	s           *Service
-	project     string
-	region      string
-	autoscaler2 *Autoscaler
-	urlParams_  gensupport.URLParams
-	ctx_        context.Context
-	header_     http.Header
+	s          *Service
+	project    string
+	region     string
+	autoscaler *Autoscaler
+	urlParams_ gensupport.URLParams
+	ctx_       context.Context
+	header_    http.Header
 }
 
 // Patch: Updates an autoscaler in the specified project using the data
 // included in the request. This method supports patch semantics.
-func (r *RegionAutoscalersService) Patch(project string, region string, autoscaler string, autoscaler2 *Autoscaler) *RegionAutoscalersPatchCall {
+func (r *RegionAutoscalersService) Patch(project string, region string, autoscaler *Autoscaler) *RegionAutoscalersPatchCall {
 	c := &RegionAutoscalersPatchCall{s: r.s, urlParams_: make(gensupport.URLParams)}
 	c.project = project
 	c.region = region
+	c.autoscaler = autoscaler
+	return c
+}
+
+// Autoscaler sets the optional parameter "autoscaler": Name of the
+// autoscaler to patch.
+func (c *RegionAutoscalersPatchCall) Autoscaler(autoscaler string) *RegionAutoscalersPatchCall {
 	c.urlParams_.Set("autoscaler", autoscaler)
-	c.autoscaler2 = autoscaler2
 	return c
 }
 
@@ -57202,9 +56988,8 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	var body io.Reader = nil
-	body, err := googleapi.WithoutDataWrapper.JSONReader(c.autoscaler2)
+	body, err := googleapi.WithoutDataWrapper.JSONReader(c.autoscaler)
 	if err != nil {
 		return nil, err
 	}
@@ -57264,15 +57049,13 @@
 	//   "id": "compute.regionAutoscalers.patch",
 	//   "parameterOrder": [
 	//     "project",
-	//     "region",
-	//     "autoscaler"
+	//     "region"
 	//   ],
 	//   "parameters": {
 	//     "autoscaler": {
-	//       "description": "Name of the autoscaler to update.",
+	//       "description": "Name of the autoscaler to patch.",
 	//       "location": "query",
 	//       "pattern": "[a-z](?:[-a-z0-9]{0,61}[a-z0-9])?",
-	//       "required": true,
 	//       "type": "string"
 	//     },
 	//     "project": {
@@ -57304,7 +57087,8 @@
 	//   },
 	//   "scopes": [
 	//     "https://www.googleapis.com/auth/cloud-platform",
-	//     "https://www.googleapis.com/auth/compute"
+	//     "https://www.googleapis.com/auth/compute",
+	//     "https://www.googleapis.com/auth/compute.readonly"
 	//   ]
 	// }
 
@@ -57365,7 +57149,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	var body io.Reader = nil
 	body, err := googleapi.WithoutDataWrapper.JSONReader(c.testpermissionsrequest)
 	if err != nil {
@@ -57537,7 +57320,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	var body io.Reader = nil
 	body, err := googleapi.WithoutDataWrapper.JSONReader(c.autoscaler)
 	if err != nil {
@@ -57702,7 +57484,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	var body io.Reader = nil
 	c.urlParams_.Set("alt", alt)
 	urls := googleapi.ResolveRelative(c.s.BasePath, "{project}/regions/{region}/backendServices/{backendService}")
@@ -57866,7 +57647,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	if c.ifNoneMatch_ != "" {
 		reqHeaders.Set("If-None-Match", c.ifNoneMatch_)
 	}
@@ -58021,7 +57801,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	var body io.Reader = nil
 	body, err := googleapi.WithoutDataWrapper.JSONReader(c.resourcegroupreference)
 	if err != nil {
@@ -58188,7 +57967,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	var body io.Reader = nil
 	body, err := googleapi.WithoutDataWrapper.JSONReader(c.backendservice)
 	if err != nil {
@@ -58418,7 +58196,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	if c.ifNoneMatch_ != "" {
 		reqHeaders.Set("If-None-Match", c.ifNoneMatch_)
 	}
@@ -58618,7 +58395,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	var body io.Reader = nil
 	body, err := googleapi.WithoutDataWrapper.JSONReader(c.backendservice)
 	if err != nil {
@@ -58783,7 +58559,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	var body io.Reader = nil
 	body, err := googleapi.WithoutDataWrapper.JSONReader(c.testpermissionsrequest)
 	if err != nil {
@@ -58952,7 +58727,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	var body io.Reader = nil
 	body, err := googleapi.WithoutDataWrapper.JSONReader(c.backendservice)
 	if err != nil {
@@ -59125,7 +58899,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	if c.ifNoneMatch_ != "" {
 		reqHeaders.Set("If-None-Match", c.ifNoneMatch_)
 	}
@@ -59285,7 +59058,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	var body io.Reader = nil
 	body, err := googleapi.WithoutDataWrapper.JSONReader(c.commitment)
 	if err != nil {
@@ -59515,7 +59287,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	if c.ifNoneMatch_ != "" {
 		reqHeaders.Set("If-None-Match", c.ifNoneMatch_)
 	}
@@ -59705,7 +59476,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	var body io.Reader = nil
 	body, err := googleapi.WithoutDataWrapper.JSONReader(c.testpermissionsrequest)
 	if err != nil {
@@ -59874,7 +59644,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	if c.ifNoneMatch_ != "" {
 		reqHeaders.Set("If-None-Match", c.ifNoneMatch_)
 	}
@@ -60104,7 +59873,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	if c.ifNoneMatch_ != "" {
 		reqHeaders.Set("If-None-Match", c.ifNoneMatch_)
 	}
@@ -60306,7 +60074,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	var body io.Reader = nil
 	body, err := googleapi.WithoutDataWrapper.JSONReader(c.snapshot)
 	if err != nil {
@@ -60481,7 +60248,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	var body io.Reader = nil
 	c.urlParams_.Set("alt", alt)
 	urls := googleapi.ResolveRelative(c.s.BasePath, "{project}/regions/{region}/disks/{disk}")
@@ -60644,7 +60410,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	if c.ifNoneMatch_ != "" {
 		reqHeaders.Set("If-None-Match", c.ifNoneMatch_)
 	}
@@ -60811,7 +60576,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	var body io.Reader = nil
 	body, err := googleapi.WithoutDataWrapper.JSONReader(c.disk)
 	if err != nil {
@@ -61046,7 +60810,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	if c.ifNoneMatch_ != "" {
 		reqHeaders.Set("If-None-Match", c.ifNoneMatch_)
 	}
@@ -61242,7 +61005,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	var body io.Reader = nil
 	body, err := googleapi.WithoutDataWrapper.JSONReader(c.regiondisksresizerequest)
 	if err != nil {
@@ -61412,7 +61174,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	var body io.Reader = nil
 	body, err := googleapi.WithoutDataWrapper.JSONReader(c.regionsetlabelsrequest)
 	if err != nil {
@@ -61576,7 +61337,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	var body io.Reader = nil
 	body, err := googleapi.WithoutDataWrapper.JSONReader(c.testpermissionsrequest)
 	if err != nil {
@@ -61750,7 +61510,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	var body io.Reader = nil
 	body, err := googleapi.WithoutDataWrapper.JSONReader(c.regioninstancegroupmanagersabandoninstancesrequest)
 	if err != nil {
@@ -61917,7 +61676,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	var body io.Reader = nil
 	c.urlParams_.Set("alt", alt)
 	urls := googleapi.ResolveRelative(c.s.BasePath, "{project}/regions/{region}/instanceGroupManagers/{instanceGroupManager}")
@@ -62084,7 +61842,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	var body io.Reader = nil
 	body, err := googleapi.WithoutDataWrapper.JSONReader(c.regioninstancegroupmanagersdeleteinstancesrequest)
 	if err != nil {
@@ -62255,7 +62012,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	if c.ifNoneMatch_ != "" {
 		reqHeaders.Set("If-None-Match", c.ifNoneMatch_)
 	}
@@ -62418,7 +62174,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	var body io.Reader = nil
 	body, err := googleapi.WithoutDataWrapper.JSONReader(c.instancegroupmanager)
 	if err != nil {
@@ -62647,7 +62402,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	if c.ifNoneMatch_ != "" {
 		reqHeaders.Set("If-None-Match", c.ifNoneMatch_)
 	}
@@ -62860,7 +62614,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	var body io.Reader = nil
 	c.urlParams_.Set("alt", alt)
 	urls := googleapi.ResolveRelative(c.s.BasePath, "{project}/regions/{region}/instanceGroupManagers/{instanceGroupManager}/listManagedInstances")
@@ -63063,7 +62816,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	var body io.Reader = nil
 	body, err := googleapi.WithoutDataWrapper.JSONReader(c.instancegroupmanager)
 	if err != nil {
@@ -63237,7 +62989,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	var body io.Reader = nil
 	body, err := googleapi.WithoutDataWrapper.JSONReader(c.regioninstancegroupmanagersrecreaterequest)
 	if err != nil {
@@ -63411,7 +63162,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	var body io.Reader = nil
 	c.urlParams_.Set("alt", alt)
 	urls := googleapi.ResolveRelative(c.s.BasePath, "{project}/regions/{region}/instanceGroupManagers/{instanceGroupManager}/resize")
@@ -63581,7 +63331,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	var body io.Reader = nil
 	body, err := googleapi.WithoutDataWrapper.JSONReader(c.regioninstancegroupmanagerssetautohealingrequest)
 	if err != nil {
@@ -63751,7 +63500,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	var body io.Reader = nil
 	body, err := googleapi.WithoutDataWrapper.JSONReader(c.regioninstancegroupmanagerssettemplaterequest)
 	if err != nil {
@@ -63921,7 +63669,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	var body io.Reader = nil
 	body, err := googleapi.WithoutDataWrapper.JSONReader(c.regioninstancegroupmanagerssettargetpoolsrequest)
 	if err != nil {
@@ -64083,7 +63830,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	var body io.Reader = nil
 	body, err := googleapi.WithoutDataWrapper.JSONReader(c.testpermissionsrequest)
 	if err != nil {
@@ -64253,7 +63999,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	var body io.Reader = nil
 	body, err := googleapi.WithoutDataWrapper.JSONReader(c.instancegroupmanager)
 	if err != nil {
@@ -64423,7 +64168,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	if c.ifNoneMatch_ != "" {
 		reqHeaders.Set("If-None-Match", c.ifNoneMatch_)
 	}
@@ -64651,7 +64395,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	if c.ifNoneMatch_ != "" {
 		reqHeaders.Set("If-None-Match", c.ifNoneMatch_)
 	}
@@ -64910,7 +64653,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	var body io.Reader = nil
 	body, err := googleapi.WithoutDataWrapper.JSONReader(c.regioninstancegroupslistinstancesrequest)
 	if err != nil {
@@ -65120,7 +64862,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	var body io.Reader = nil
 	body, err := googleapi.WithoutDataWrapper.JSONReader(c.regioninstancegroupssetnamedportsrequest)
 	if err != nil {
@@ -65282,7 +65023,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	var body io.Reader = nil
 	body, err := googleapi.WithoutDataWrapper.JSONReader(c.testpermissionsrequest)
 	if err != nil {
@@ -65440,7 +65180,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	var body io.Reader = nil
 	c.urlParams_.Set("alt", alt)
 	urls := googleapi.ResolveRelative(c.s.BasePath, "{project}/regions/{region}/operations/{operation}")
@@ -65572,7 +65311,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	if c.ifNoneMatch_ != "" {
 		reqHeaders.Set("If-None-Match", c.ifNoneMatch_)
 	}
@@ -65803,7 +65541,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	if c.ifNoneMatch_ != "" {
 		reqHeaders.Set("If-None-Match", c.ifNoneMatch_)
 	}
@@ -66001,7 +65738,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	if c.ifNoneMatch_ != "" {
 		reqHeaders.Set("If-None-Match", c.ifNoneMatch_)
 	}
@@ -66221,7 +65957,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	if c.ifNoneMatch_ != "" {
 		reqHeaders.Set("If-None-Match", c.ifNoneMatch_)
 	}
@@ -66474,7 +66209,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	if c.ifNoneMatch_ != "" {
 		reqHeaders.Set("If-None-Match", c.ifNoneMatch_)
 	}
@@ -66659,7 +66393,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	var body io.Reader = nil
 	c.urlParams_.Set("alt", alt)
 	urls := googleapi.ResolveRelative(c.s.BasePath, "{project}/regions/{region}/routers/{router}")
@@ -66824,7 +66557,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	if c.ifNoneMatch_ != "" {
 		reqHeaders.Set("If-None-Match", c.ifNoneMatch_)
 	}
@@ -66988,7 +66720,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	if c.ifNoneMatch_ != "" {
 		reqHeaders.Set("If-None-Match", c.ifNoneMatch_)
 	}
@@ -67148,7 +66879,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	var body io.Reader = nil
 	body, err := googleapi.WithoutDataWrapper.JSONReader(c.router)
 	if err != nil {
@@ -67378,7 +67108,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	if c.ifNoneMatch_ != "" {
 		reqHeaders.Set("If-None-Match", c.ifNoneMatch_)
 	}
@@ -67575,7 +67304,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	var body io.Reader = nil
 	body, err := googleapi.WithoutDataWrapper.JSONReader(c.router2)
 	if err != nil {
@@ -67741,7 +67469,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	var body io.Reader = nil
 	body, err := googleapi.WithoutDataWrapper.JSONReader(c.router2)
 	if err != nil {
@@ -67901,7 +67628,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	var body io.Reader = nil
 	body, err := googleapi.WithoutDataWrapper.JSONReader(c.testpermissionsrequest)
 	if err != nil {
@@ -68068,7 +67794,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	var body io.Reader = nil
 	body, err := googleapi.WithoutDataWrapper.JSONReader(c.router2)
 	if err != nil {
@@ -68235,7 +67960,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	var body io.Reader = nil
 	c.urlParams_.Set("alt", alt)
 	urls := googleapi.ResolveRelative(c.s.BasePath, "{project}/global/routes/{route}")
@@ -68390,7 +68114,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	if c.ifNoneMatch_ != "" {
 		reqHeaders.Set("If-None-Match", c.ifNoneMatch_)
 	}
@@ -68540,7 +68263,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	var body io.Reader = nil
 	body, err := googleapi.WithoutDataWrapper.JSONReader(c.route)
 	if err != nil {
@@ -68760,7 +68482,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	if c.ifNoneMatch_ != "" {
 		reqHeaders.Set("If-None-Match", c.ifNoneMatch_)
 	}
@@ -68939,7 +68660,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	var body io.Reader = nil
 	body, err := googleapi.WithoutDataWrapper.JSONReader(c.testpermissionsrequest)
 	if err != nil {
@@ -69099,7 +68819,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	var body io.Reader = nil
 	c.urlParams_.Set("alt", alt)
 	urls := googleapi.ResolveRelative(c.s.BasePath, "{project}/global/snapshots/{snapshot}")
@@ -69254,7 +68973,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	if c.ifNoneMatch_ != "" {
 		reqHeaders.Set("If-None-Match", c.ifNoneMatch_)
 	}
@@ -69407,7 +69125,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	if c.ifNoneMatch_ != "" {
 		reqHeaders.Set("If-None-Match", c.ifNoneMatch_)
 	}
@@ -69627,7 +69344,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	if c.ifNoneMatch_ != "" {
 		reqHeaders.Set("If-None-Match", c.ifNoneMatch_)
 	}
@@ -69806,7 +69522,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	var body io.Reader = nil
 	body, err := googleapi.WithoutDataWrapper.JSONReader(c.policy)
 	if err != nil {
@@ -69954,7 +69669,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	var body io.Reader = nil
 	body, err := googleapi.WithoutDataWrapper.JSONReader(c.globalsetlabelsrequest)
 	if err != nil {
@@ -70102,7 +69816,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	var body io.Reader = nil
 	body, err := googleapi.WithoutDataWrapper.JSONReader(c.testpermissionsrequest)
 	if err != nil {
@@ -70255,7 +69968,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	var body io.Reader = nil
 	c.urlParams_.Set("alt", alt)
 	urls := googleapi.ResolveRelative(c.s.BasePath, "{project}/global/sslCertificates/{sslCertificate}")
@@ -70409,7 +70121,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	if c.ifNoneMatch_ != "" {
 		reqHeaders.Set("If-None-Match", c.ifNoneMatch_)
 	}
@@ -70558,7 +70269,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	var body io.Reader = nil
 	body, err := googleapi.WithoutDataWrapper.JSONReader(c.sslcertificate)
 	if err != nil {
@@ -70777,7 +70487,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	if c.ifNoneMatch_ != "" {
 		reqHeaders.Set("If-None-Match", c.ifNoneMatch_)
 	}
@@ -70956,7 +70665,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	var body io.Reader = nil
 	body, err := googleapi.WithoutDataWrapper.JSONReader(c.testpermissionsrequest)
 	if err != nil {
@@ -71179,7 +70887,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	if c.ifNoneMatch_ != "" {
 		reqHeaders.Set("If-None-Match", c.ifNoneMatch_)
 	}
@@ -71364,7 +71071,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	var body io.Reader = nil
 	c.urlParams_.Set("alt", alt)
 	urls := googleapi.ResolveRelative(c.s.BasePath, "{project}/regions/{region}/subnetworks/{subnetwork}")
@@ -71527,7 +71233,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	var body io.Reader = nil
 	body, err := googleapi.WithoutDataWrapper.JSONReader(c.subnetworksexpandipcidrrangerequest)
 	if err != nil {
@@ -71700,7 +71405,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	if c.ifNoneMatch_ != "" {
 		reqHeaders.Set("If-None-Match", c.ifNoneMatch_)
 	}
@@ -71864,7 +71568,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	if c.ifNoneMatch_ != "" {
 		reqHeaders.Set("If-None-Match", c.ifNoneMatch_)
 	}
@@ -72024,7 +71727,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	var body io.Reader = nil
 	body, err := googleapi.WithoutDataWrapper.JSONReader(c.subnetwork)
 	if err != nil {
@@ -72254,7 +71956,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	if c.ifNoneMatch_ != "" {
 		reqHeaders.Set("If-None-Match", c.ifNoneMatch_)
 	}
@@ -72444,7 +72145,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	var body io.Reader = nil
 	body, err := googleapi.WithoutDataWrapper.JSONReader(c.policy)
 	if err != nil {
@@ -72611,7 +72311,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	var body io.Reader = nil
 	body, err := googleapi.WithoutDataWrapper.JSONReader(c.subnetworkssetprivateipgoogleaccessrequest)
 	if err != nil {
@@ -72775,7 +72474,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	var body io.Reader = nil
 	body, err := googleapi.WithoutDataWrapper.JSONReader(c.testpermissionsrequest)
 	if err != nil {
@@ -72938,7 +72636,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	var body io.Reader = nil
 	c.urlParams_.Set("alt", alt)
 	urls := googleapi.ResolveRelative(c.s.BasePath, "{project}/global/targetHttpProxies/{targetHttpProxy}")
@@ -73093,7 +72790,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	if c.ifNoneMatch_ != "" {
 		reqHeaders.Set("If-None-Match", c.ifNoneMatch_)
 	}
@@ -73243,7 +72939,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	var body io.Reader = nil
 	body, err := googleapi.WithoutDataWrapper.JSONReader(c.targethttpproxy)
 	if err != nil {
@@ -73463,7 +73158,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	if c.ifNoneMatch_ != "" {
 		reqHeaders.Set("If-None-Match", c.ifNoneMatch_)
 	}
@@ -73649,7 +73343,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	var body io.Reader = nil
 	body, err := googleapi.WithoutDataWrapper.JSONReader(c.urlmapreference)
 	if err != nil {
@@ -73802,7 +73495,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	var body io.Reader = nil
 	body, err := googleapi.WithoutDataWrapper.JSONReader(c.testpermissionsrequest)
 	if err != nil {
@@ -73955,7 +73647,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	var body io.Reader = nil
 	c.urlParams_.Set("alt", alt)
 	urls := googleapi.ResolveRelative(c.s.BasePath, "{project}/global/targetHttpsProxies/{targetHttpsProxy}")
@@ -74109,7 +73800,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	if c.ifNoneMatch_ != "" {
 		reqHeaders.Set("If-None-Match", c.ifNoneMatch_)
 	}
@@ -74258,7 +73948,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	var body io.Reader = nil
 	body, err := googleapi.WithoutDataWrapper.JSONReader(c.targethttpsproxy)
 	if err != nil {
@@ -74477,7 +74166,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	if c.ifNoneMatch_ != "" {
 		reqHeaders.Set("If-None-Match", c.ifNoneMatch_)
 	}
@@ -74662,7 +74350,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	var body io.Reader = nil
 	body, err := googleapi.WithoutDataWrapper.JSONReader(c.targethttpsproxiessetsslcertificatesrequest)
 	if err != nil {
@@ -74821,7 +74508,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	var body io.Reader = nil
 	body, err := googleapi.WithoutDataWrapper.JSONReader(c.urlmapreference)
 	if err != nil {
@@ -74974,7 +74660,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	var body io.Reader = nil
 	body, err := googleapi.WithoutDataWrapper.JSONReader(c.testpermissionsrequest)
 	if err != nil {
@@ -75198,7 +74883,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	if c.ifNoneMatch_ != "" {
 		reqHeaders.Set("If-None-Match", c.ifNoneMatch_)
 	}
@@ -75384,7 +75068,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	var body io.Reader = nil
 	c.urlParams_.Set("alt", alt)
 	urls := googleapi.ResolveRelative(c.s.BasePath, "{project}/zones/{zone}/targetInstances/{targetInstance}")
@@ -75550,7 +75233,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	if c.ifNoneMatch_ != "" {
 		reqHeaders.Set("If-None-Match", c.ifNoneMatch_)
 	}
@@ -75711,7 +75393,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	var body io.Reader = nil
 	body, err := googleapi.WithoutDataWrapper.JSONReader(c.targetinstance)
 	if err != nil {
@@ -75942,7 +75623,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	if c.ifNoneMatch_ != "" {
 		reqHeaders.Set("If-None-Match", c.ifNoneMatch_)
 	}
@@ -76132,7 +75812,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	var body io.Reader = nil
 	body, err := googleapi.WithoutDataWrapper.JSONReader(c.testpermissionsrequest)
 	if err != nil {
@@ -76299,7 +75978,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	var body io.Reader = nil
 	body, err := googleapi.WithoutDataWrapper.JSONReader(c.targetpoolsaddhealthcheckrequest)
 	if err != nil {
@@ -76470,7 +76148,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	var body io.Reader = nil
 	body, err := googleapi.WithoutDataWrapper.JSONReader(c.targetpoolsaddinstancerequest)
 	if err != nil {
@@ -76707,7 +76384,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	if c.ifNoneMatch_ != "" {
 		reqHeaders.Set("If-None-Match", c.ifNoneMatch_)
 	}
@@ -76893,7 +76569,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	var body io.Reader = nil
 	c.urlParams_.Set("alt", alt)
 	urls := googleapi.ResolveRelative(c.s.BasePath, "{project}/regions/{region}/targetPools/{targetPool}")
@@ -77059,7 +76734,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	if c.ifNoneMatch_ != "" {
 		reqHeaders.Set("If-None-Match", c.ifNoneMatch_)
 	}
@@ -77215,7 +76889,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	var body io.Reader = nil
 	body, err := googleapi.WithoutDataWrapper.JSONReader(c.instancereference)
 	if err != nil {
@@ -77381,7 +77054,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	var body io.Reader = nil
 	body, err := googleapi.WithoutDataWrapper.JSONReader(c.targetpool)
 	if err != nil {
@@ -77612,7 +77284,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	if c.ifNoneMatch_ != "" {
 		reqHeaders.Set("If-None-Match", c.ifNoneMatch_)
 	}
@@ -77809,7 +77480,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	var body io.Reader = nil
 	body, err := googleapi.WithoutDataWrapper.JSONReader(c.targetpoolsremovehealthcheckrequest)
 	if err != nil {
@@ -77980,7 +77650,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	var body io.Reader = nil
 	body, err := googleapi.WithoutDataWrapper.JSONReader(c.targetpoolsremoveinstancerequest)
 	if err != nil {
@@ -78158,7 +77827,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	var body io.Reader = nil
 	body, err := googleapi.WithoutDataWrapper.JSONReader(c.targetreference)
 	if err != nil {
@@ -78328,7 +77996,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	var body io.Reader = nil
 	body, err := googleapi.WithoutDataWrapper.JSONReader(c.testpermissionsrequest)
 	if err != nil {
@@ -78490,7 +78157,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	var body io.Reader = nil
 	c.urlParams_.Set("alt", alt)
 	urls := googleapi.ResolveRelative(c.s.BasePath, "{project}/global/targetSslProxies/{targetSslProxy}")
@@ -78644,7 +78310,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	if c.ifNoneMatch_ != "" {
 		reqHeaders.Set("If-None-Match", c.ifNoneMatch_)
 	}
@@ -78793,7 +78458,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	var body io.Reader = nil
 	body, err := googleapi.WithoutDataWrapper.JSONReader(c.targetsslproxy)
 	if err != nil {
@@ -79012,7 +78676,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	if c.ifNoneMatch_ != "" {
 		reqHeaders.Set("If-None-Match", c.ifNoneMatch_)
 	}
@@ -79197,7 +78860,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	var body io.Reader = nil
 	body, err := googleapi.WithoutDataWrapper.JSONReader(c.targetsslproxiessetbackendservicerequest)
 	if err != nil {
@@ -79356,7 +79018,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	var body io.Reader = nil
 	body, err := googleapi.WithoutDataWrapper.JSONReader(c.targetsslproxiessetproxyheaderrequest)
 	if err != nil {
@@ -79515,7 +79176,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	var body io.Reader = nil
 	body, err := googleapi.WithoutDataWrapper.JSONReader(c.targetsslproxiessetsslcertificatesrequest)
 	if err != nil {
@@ -79668,7 +79328,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	var body io.Reader = nil
 	body, err := googleapi.WithoutDataWrapper.JSONReader(c.testpermissionsrequest)
 	if err != nil {
@@ -79821,7 +79480,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	var body io.Reader = nil
 	c.urlParams_.Set("alt", alt)
 	urls := googleapi.ResolveRelative(c.s.BasePath, "{project}/global/targetTcpProxies/{targetTcpProxy}")
@@ -79975,7 +79633,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	if c.ifNoneMatch_ != "" {
 		reqHeaders.Set("If-None-Match", c.ifNoneMatch_)
 	}
@@ -80124,7 +79781,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	var body io.Reader = nil
 	body, err := googleapi.WithoutDataWrapper.JSONReader(c.targettcpproxy)
 	if err != nil {
@@ -80343,7 +79999,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	if c.ifNoneMatch_ != "" {
 		reqHeaders.Set("If-None-Match", c.ifNoneMatch_)
 	}
@@ -80528,7 +80183,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	var body io.Reader = nil
 	body, err := googleapi.WithoutDataWrapper.JSONReader(c.targettcpproxiessetbackendservicerequest)
 	if err != nil {
@@ -80687,7 +80341,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	var body io.Reader = nil
 	body, err := googleapi.WithoutDataWrapper.JSONReader(c.targettcpproxiessetproxyheaderrequest)
 	if err != nil {
@@ -80840,7 +80493,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	var body io.Reader = nil
 	body, err := googleapi.WithoutDataWrapper.JSONReader(c.testpermissionsrequest)
 	if err != nil {
@@ -81063,7 +80715,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	if c.ifNoneMatch_ != "" {
 		reqHeaders.Set("If-None-Match", c.ifNoneMatch_)
 	}
@@ -81248,7 +80899,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	var body io.Reader = nil
 	c.urlParams_.Set("alt", alt)
 	urls := googleapi.ResolveRelative(c.s.BasePath, "{project}/regions/{region}/targetVpnGateways/{targetVpnGateway}")
@@ -81413,7 +81063,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	if c.ifNoneMatch_ != "" {
 		reqHeaders.Set("If-None-Match", c.ifNoneMatch_)
 	}
@@ -81573,7 +81222,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	var body io.Reader = nil
 	body, err := googleapi.WithoutDataWrapper.JSONReader(c.targetvpngateway)
 	if err != nil {
@@ -81803,7 +81451,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	if c.ifNoneMatch_ != "" {
 		reqHeaders.Set("If-None-Match", c.ifNoneMatch_)
 	}
@@ -81993,7 +81640,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	var body io.Reader = nil
 	body, err := googleapi.WithoutDataWrapper.JSONReader(c.testpermissionsrequest)
 	if err != nil {
@@ -82156,7 +81802,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	var body io.Reader = nil
 	c.urlParams_.Set("alt", alt)
 	urls := googleapi.ResolveRelative(c.s.BasePath, "{project}/global/urlMaps/{urlMap}")
@@ -82311,7 +81956,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	if c.ifNoneMatch_ != "" {
 		reqHeaders.Set("If-None-Match", c.ifNoneMatch_)
 	}
@@ -82461,7 +82105,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	var body io.Reader = nil
 	body, err := googleapi.WithoutDataWrapper.JSONReader(c.urlmap)
 	if err != nil {
@@ -82612,7 +82255,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	var body io.Reader = nil
 	body, err := googleapi.WithoutDataWrapper.JSONReader(c.cacheinvalidationrule)
 	if err != nil {
@@ -82841,7 +82483,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	if c.ifNoneMatch_ != "" {
 		reqHeaders.Set("If-None-Match", c.ifNoneMatch_)
 	}
@@ -83028,7 +82669,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	var body io.Reader = nil
 	body, err := googleapi.WithoutDataWrapper.JSONReader(c.urlmap)
 	if err != nil {
@@ -83182,7 +82822,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	var body io.Reader = nil
 	body, err := googleapi.WithoutDataWrapper.JSONReader(c.testpermissionsrequest)
 	if err != nil {
@@ -83339,7 +82978,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	var body io.Reader = nil
 	body, err := googleapi.WithoutDataWrapper.JSONReader(c.urlmap)
 	if err != nil {
@@ -83494,7 +83132,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	var body io.Reader = nil
 	body, err := googleapi.WithoutDataWrapper.JSONReader(c.urlmapsvalidaterequest)
 	if err != nil {
@@ -83716,7 +83353,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	if c.ifNoneMatch_ != "" {
 		reqHeaders.Set("If-None-Match", c.ifNoneMatch_)
 	}
@@ -83901,7 +83537,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	var body io.Reader = nil
 	c.urlParams_.Set("alt", alt)
 	urls := googleapi.ResolveRelative(c.s.BasePath, "{project}/regions/{region}/vpnTunnels/{vpnTunnel}")
@@ -84066,7 +83701,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	if c.ifNoneMatch_ != "" {
 		reqHeaders.Set("If-None-Match", c.ifNoneMatch_)
 	}
@@ -84226,7 +83860,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	var body io.Reader = nil
 	body, err := googleapi.WithoutDataWrapper.JSONReader(c.vpntunnel)
 	if err != nil {
@@ -84456,7 +84089,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	if c.ifNoneMatch_ != "" {
 		reqHeaders.Set("If-None-Match", c.ifNoneMatch_)
 	}
@@ -84653,7 +84285,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	var body io.Reader = nil
 	body, err := googleapi.WithoutDataWrapper.JSONReader(c.regionsetlabelsrequest)
 	if err != nil {
@@ -84817,7 +84448,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	var body io.Reader = nil
 	body, err := googleapi.WithoutDataWrapper.JSONReader(c.testpermissionsrequest)
 	if err != nil {
@@ -84975,7 +84605,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	var body io.Reader = nil
 	c.urlParams_.Set("alt", alt)
 	urls := googleapi.ResolveRelative(c.s.BasePath, "{project}/zones/{zone}/operations/{operation}")
@@ -85107,7 +84736,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	if c.ifNoneMatch_ != "" {
 		reqHeaders.Set("If-None-Match", c.ifNoneMatch_)
 	}
@@ -85338,7 +84966,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	if c.ifNoneMatch_ != "" {
 		reqHeaders.Set("If-None-Match", c.ifNoneMatch_)
 	}
@@ -85536,7 +85163,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	if c.ifNoneMatch_ != "" {
 		reqHeaders.Set("If-None-Match", c.ifNoneMatch_)
 	}
@@ -85756,7 +85382,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	if c.ifNoneMatch_ != "" {
 		reqHeaders.Set("If-None-Match", c.ifNoneMatch_)
 	}
diff --git a/compute/v0.beta/compute-api.json b/compute/v0.beta/compute-api.json
index 3b78326..b42eb94 100644
--- a/compute/v0.beta/compute-api.json
+++ b/compute/v0.beta/compute-api.json
@@ -1,11 +1,11 @@
 {
  "kind": "discovery#restDescription",
- "etag": "\"tbys6C40o18GZwyMen5GMkdK-3s/JuOZj_GZlAzFj3XABOmADpp-xVQ\"",
+ "etag": "\"tbys6C40o18GZwyMen5GMkdK-3s/pw0sjZcq1pf-f4MTX5KuXUYGzzA\"",
  "discoveryVersion": "v1",
  "id": "compute:beta",
  "name": "compute",
  "version": "beta",
- "revision": "20170224",
+ "revision": "20170302",
  "title": "Compute Engine API",
  "description": "Creates and runs virtual machines on Google Cloud Platform.",
  "ownerDomain": "google.com",
@@ -1865,6 +1865,7 @@
       "APPROVER",
       "ATTRIBUTION",
       "AUTHORITY",
+      "JUSTIFICATION_TYPE",
       "NO_ATTR",
       "SECURITY_REALM"
      ],
@@ -1873,6 +1874,7 @@
       "",
       "",
       "",
+      "",
       ""
      ]
     },
@@ -2552,10 +2554,49 @@
      "type": "string",
      "description": "[Output Only] Creation timestamp in RFC3339 text format."
     },
+    "denied": {
+     "type": "array",
+     "description": "The list of DENY rules specified by this firewall. Each rule specifies a protocol and port-range tuple that describes a permitted connection.",
+     "items": {
+      "type": "object",
+      "properties": {
+       "IPProtocol": {
+        "type": "string",
+        "description": "The IP protocol to which this rule applies. The protocol type is required when creating a firewall rule. This value can either be one of the following well known protocol strings (tcp, udp, icmp, esp, ah, sctp), or the IP protocol number."
+       },
+       "ports": {
+        "type": "array",
+        "description": "An optional list of ports to which this rule applies. This field is only applicable for UDP or TCP protocol. Each entry must be either an integer or a range. If not specified, this rule applies to connections through any port.\n\nExample inputs include: [\"22\"], [\"80\",\"443\"], and [\"12345-12349\"].",
+        "items": {
+         "type": "string"
+        }
+       }
+      }
+     }
+    },
     "description": {
      "type": "string",
      "description": "An optional description of this resource. Provide this property when you create the resource."
     },
+    "destinationRanges": {
+     "type": "array",
+     "description": "If destination ranges are specified, the firewall will apply only to traffic that has destination IP address in these ranges. These ranges must be expressed in CIDR format. Only IPv4 is supported.",
+     "items": {
+      "type": "string"
+     }
+    },
+    "direction": {
+     "type": "string",
+     "description": "Direction of traffic to which this firewall applies; default is INGRESS. Note: For INGRESS traffic, it is NOT supported to specify destinationRanges; For EGRESS traffic, it is NOT supported to specify sourceRanges OR sourceTags.",
+     "enum": [
+      "EGRESS",
+      "INGRESS"
+     ],
+     "enumDescriptions": [
+      "",
+      ""
+     ]
+    },
     "id": {
      "type": "string",
      "description": "[Output Only] The unique identifier for the resource. This identifier is defined by the server.",
@@ -2581,6 +2622,11 @@
      "type": "string",
      "description": "URL of the network resource for this firewall rule. If not specified when creating a firewall rule, the default network is used:\nglobal/networks/default\nIf you choose to specify this property, you can specify the network as a full or partial URL. For example, the following are all valid URLs:  \n- https://www.googleapis.com/compute/v1/projects/myproject/global/networks/my-network \n- projects/myproject/global/networks/my-network \n- global/networks/default"
     },
+    "priority": {
+     "type": "integer",
+     "description": "Priority for this rule. This is an integer between 0 and 65535, both inclusive. When not specified, the value assumed is 1000. Relative priorities determine precedence of conflicting rules. Lower value of priority implies higher precedence (eg, a rule with priority 0 has higher precedence than a rule with priority 1). DENY rules take precedence over ALLOW rules having equal priority.",
+     "format": "int32"
+    },
     "selfLink": {
      "type": "string",
      "description": "[Output Only] Server-defined URL for the resource."
@@ -5186,6 +5232,10 @@
     "lastAttempt": {
      "$ref": "ManagedInstanceLastAttempt",
      "description": "[Output Only] Information about the last attempt to create or delete the instance."
+    },
+    "version": {
+     "$ref": "ManagedInstanceVersion",
+     "description": "[Output Only] Intended version of this instance."
     }
    }
   },
@@ -5222,6 +5272,20 @@
     }
    }
   },
+  "ManagedInstanceVersion": {
+   "id": "ManagedInstanceVersion",
+   "type": "object",
+   "properties": {
+    "instanceTemplate": {
+     "type": "string",
+     "description": "[Output Only] The intended template of the instance. This field is empty when current_action is one of { DELETING, ABANDONING }."
+    },
+    "name": {
+     "type": "string",
+     "description": "[Output Only] Name of the version."
+    }
+   }
+  },
   "Metadata": {
    "id": "Metadata",
    "type": "object",
@@ -7739,6 +7803,15 @@
     }
    }
   },
+  "SubnetworksSetPrivateIpGoogleAccessRequest": {
+   "id": "SubnetworksSetPrivateIpGoogleAccessRequest",
+   "type": "object",
+   "properties": {
+    "privateIpGoogleAccess": {
+     "type": "boolean"
+    }
+   }
+  },
   "TCPHealthCheck": {
    "id": "TCPHealthCheck",
    "type": "object",
@@ -11711,7 +11784,7 @@
      "parameters": {
       "firewall": {
        "type": "string",
-       "description": "Name of the firewall rule to update.",
+       "description": "Name of the firewall rule to patch.",
        "required": true,
        "pattern": "[a-z](?:[-a-z0-9]{0,61}[a-z0-9])?",
        "location": "path"
@@ -11736,7 +11809,8 @@
      },
      "scopes": [
       "https://www.googleapis.com/auth/cloud-platform",
-      "https://www.googleapis.com/auth/compute"
+      "https://www.googleapis.com/auth/compute",
+      "https://www.googleapis.com/auth/compute.readonly"
      ]
     },
     "testIamPermissions": {
@@ -20395,6 +20469,50 @@
       "https://www.googleapis.com/auth/compute"
      ]
     },
+    "setPrivateIpGoogleAccess": {
+     "id": "compute.subnetworks.setPrivateIpGoogleAccess",
+     "path": "{project}/regions/{region}/subnetworks/{subnetwork}/setPrivateIpGoogleAccess",
+     "httpMethod": "POST",
+     "description": "Set whether VMs in this subnet can access Google services without assigning external IP addresses through Cloudpath.",
+     "parameters": {
+      "project": {
+       "type": "string",
+       "description": "Project ID for this request.",
+       "required": true,
+       "pattern": "(?:(?:[-a-z0-9]{1,63}\\.)*(?:[a-z](?:[-a-z0-9]{0,61}[a-z0-9])?):)?(?:[0-9]{1,19}|(?:[a-z0-9](?:[-a-z0-9]{0,61}[a-z0-9])?))",
+       "location": "path"
+      },
+      "region": {
+       "type": "string",
+       "description": "Name of the region scoping this request.",
+       "required": true,
+       "pattern": "[a-z](?:[-a-z0-9]{0,61}[a-z0-9])?",
+       "location": "path"
+      },
+      "subnetwork": {
+       "type": "string",
+       "description": "Name of the Subnetwork resource.",
+       "required": true,
+       "pattern": "[a-z](?:[-a-z0-9]{0,61}[a-z0-9])?",
+       "location": "path"
+      }
+     },
+     "parameterOrder": [
+      "project",
+      "region",
+      "subnetwork"
+     ],
+     "request": {
+      "$ref": "SubnetworksSetPrivateIpGoogleAccessRequest"
+     },
+     "response": {
+      "$ref": "Operation"
+     },
+     "scopes": [
+      "https://www.googleapis.com/auth/cloud-platform",
+      "https://www.googleapis.com/auth/compute"
+     ]
+    },
     "testIamPermissions": {
      "id": "compute.subnetworks.testIamPermissions",
      "path": "{project}/regions/{region}/subnetworks/{resource}/testIamPermissions",
diff --git a/compute/v0.beta/compute-gen.go b/compute/v0.beta/compute-gen.go
index 7679935..4273ed9 100644
--- a/compute/v0.beta/compute-gen.go
+++ b/compute/v0.beta/compute-gen.go
@@ -123,10 +123,9 @@
 }
 
 type Service struct {
-	client                    *http.Client
-	BasePath                  string // API endpoint base URL
-	UserAgent                 string // optional additional User-Agent fragment
-	GoogleClientHeaderElement string // client header fragment, for Google use only
+	client    *http.Client
+	BasePath  string // API endpoint base URL
+	UserAgent string // optional additional User-Agent fragment
 
 	AcceleratorTypes *AcceleratorTypesService
 
@@ -232,10 +231,6 @@
 	return googleapi.UserAgent + " " + s.UserAgent
 }
 
-func (s *Service) clientHeader() string {
-	return gensupport.GoogleClientHeader("20170210", s.GoogleClientHeaderElement)
-}
-
 func NewAcceleratorTypesService(s *Service) *AcceleratorTypesService {
 	rs := &AcceleratorTypesService{s: s}
 	return rs
@@ -3533,6 +3528,7 @@
 	//   "APPROVER"
 	//   "ATTRIBUTION"
 	//   "AUTHORITY"
+	//   "JUSTIFICATION_TYPE"
 	//   "NO_ATTR"
 	//   "SECURITY_REALM"
 	Iam string `json:"iam,omitempty"`
@@ -4574,10 +4570,31 @@
 	// format.
 	CreationTimestamp string `json:"creationTimestamp,omitempty"`
 
+	// Denied: The list of DENY rules specified by this firewall. Each rule
+	// specifies a protocol and port-range tuple that describes a permitted
+	// connection.
+	Denied []*FirewallDenied `json:"denied,omitempty"`
+
 	// Description: An optional description of this resource. Provide this
 	// property when you create the resource.
 	Description string `json:"description,omitempty"`
 
+	// DestinationRanges: If destination ranges are specified, the firewall
+	// will apply only to traffic that has destination IP address in these
+	// ranges. These ranges must be expressed in CIDR format. Only IPv4 is
+	// supported.
+	DestinationRanges []string `json:"destinationRanges,omitempty"`
+
+	// Direction: Direction of traffic to which this firewall applies;
+	// default is INGRESS. Note: For INGRESS traffic, it is NOT supported to
+	// specify destinationRanges; For EGRESS traffic, it is NOT supported to
+	// specify sourceRanges OR sourceTags.
+	//
+	// Possible values:
+	//   "EGRESS"
+	//   "INGRESS"
+	Direction string `json:"direction,omitempty"`
+
 	// Id: [Output Only] The unique identifier for the resource. This
 	// identifier is defined by the server.
 	Id uint64 `json:"id,omitempty,string"`
@@ -4608,6 +4625,14 @@
 	// - global/networks/default
 	Network string `json:"network,omitempty"`
 
+	// Priority: Priority for this rule. This is an integer between 0 and
+	// 65535, both inclusive. When not specified, the value assumed is 1000.
+	// Relative priorities determine precedence of conflicting rules. Lower
+	// value of priority implies higher precedence (eg, a rule with priority
+	// 0 has higher precedence than a rule with priority 1). DENY rules take
+	// precedence over ALLOW rules having equal priority.
+	Priority int64 `json:"priority,omitempty"`
+
 	// SelfLink: [Output Only] Server-defined URL for the resource.
 	SelfLink string `json:"selfLink,omitempty"`
 
@@ -4703,6 +4728,44 @@
 	return gensupport.MarshalJSON(raw, s.ForceSendFields, s.NullFields)
 }
 
+type FirewallDenied struct {
+	// IPProtocol: The IP protocol to which this rule applies. The protocol
+	// type is required when creating a firewall rule. This value can either
+	// be one of the following well known protocol strings (tcp, udp, icmp,
+	// esp, ah, sctp), or the IP protocol number.
+	IPProtocol string `json:"IPProtocol,omitempty"`
+
+	// Ports: An optional list of ports to which this rule applies. This
+	// field is only applicable for UDP or TCP protocol. Each entry must be
+	// either an integer or a range. If not specified, this rule applies to
+	// connections through any port.
+	//
+	// Example inputs include: ["22"], ["80","443"], and ["12345-12349"].
+	Ports []string `json:"ports,omitempty"`
+
+	// ForceSendFields is a list of field names (e.g. "IPProtocol") to
+	// unconditionally include in API requests. By default, fields with
+	// empty values are omitted from API requests. However, any non-pointer,
+	// non-interface field appearing in ForceSendFields will be sent to the
+	// server regardless of whether the field is empty or not. This may be
+	// used to include empty fields in Patch requests.
+	ForceSendFields []string `json:"-"`
+
+	// NullFields is a list of field names (e.g. "IPProtocol") to include in
+	// API requests with the JSON null value. By default, fields with empty
+	// values are omitted from API requests. However, any field with an
+	// empty value appearing in NullFields will be sent to the server as
+	// null. It is an error if a field in this list has a non-empty value.
+	// This may be used to include null fields in Patch requests.
+	NullFields []string `json:"-"`
+}
+
+func (s *FirewallDenied) MarshalJSON() ([]byte, error) {
+	type noMethod FirewallDenied
+	raw := noMethod(*s)
+	return gensupport.MarshalJSON(raw, s.ForceSendFields, s.NullFields)
+}
+
 // FirewallList: Contains a list of firewalls.
 type FirewallList struct {
 	// Id: [Output Only] The unique identifier for the resource. This
@@ -8682,6 +8745,9 @@
 	// create or delete the instance.
 	LastAttempt *ManagedInstanceLastAttempt `json:"lastAttempt,omitempty"`
 
+	// Version: [Output Only] Intended version of this instance.
+	Version *ManagedInstanceVersion `json:"version,omitempty"`
+
 	// ForceSendFields is a list of field names (e.g. "CurrentAction") to
 	// unconditionally include in API requests. By default, fields with
 	// empty values are omitted from API requests. However, any non-pointer,
@@ -8797,6 +8863,39 @@
 	return gensupport.MarshalJSON(raw, s.ForceSendFields, s.NullFields)
 }
 
+type ManagedInstanceVersion struct {
+	// InstanceTemplate: [Output Only] The intended template of the
+	// instance. This field is empty when current_action is one of {
+	// DELETING, ABANDONING }.
+	InstanceTemplate string `json:"instanceTemplate,omitempty"`
+
+	// Name: [Output Only] Name of the version.
+	Name string `json:"name,omitempty"`
+
+	// ForceSendFields is a list of field names (e.g. "InstanceTemplate") to
+	// unconditionally include in API requests. By default, fields with
+	// empty values are omitted from API requests. However, any non-pointer,
+	// non-interface field appearing in ForceSendFields will be sent to the
+	// server regardless of whether the field is empty or not. This may be
+	// used to include empty fields in Patch requests.
+	ForceSendFields []string `json:"-"`
+
+	// NullFields is a list of field names (e.g. "InstanceTemplate") to
+	// include in API requests with the JSON null value. By default, fields
+	// with empty values are omitted from API requests. However, any field
+	// with an empty value appearing in NullFields will be sent to the
+	// server as null. It is an error if a field in this list has a
+	// non-empty value. This may be used to include null fields in Patch
+	// requests.
+	NullFields []string `json:"-"`
+}
+
+func (s *ManagedInstanceVersion) MarshalJSON() ([]byte, error) {
+	type noMethod ManagedInstanceVersion
+	raw := noMethod(*s)
+	return gensupport.MarshalJSON(raw, s.ForceSendFields, s.NullFields)
+}
+
 // Metadata: A metadata key/value entry.
 type Metadata struct {
 	// Fingerprint: Specifies a fingerprint for this request, which is
@@ -12678,6 +12777,34 @@
 	return gensupport.MarshalJSON(raw, s.ForceSendFields, s.NullFields)
 }
 
+type SubnetworksSetPrivateIpGoogleAccessRequest struct {
+	PrivateIpGoogleAccess bool `json:"privateIpGoogleAccess,omitempty"`
+
+	// ForceSendFields is a list of field names (e.g.
+	// "PrivateIpGoogleAccess") to unconditionally include in API requests.
+	// By default, fields with empty values are omitted from API requests.
+	// However, any non-pointer, non-interface field appearing in
+	// ForceSendFields will be sent to the server regardless of whether the
+	// field is empty or not. This may be used to include empty fields in
+	// Patch requests.
+	ForceSendFields []string `json:"-"`
+
+	// NullFields is a list of field names (e.g. "PrivateIpGoogleAccess") to
+	// include in API requests with the JSON null value. By default, fields
+	// with empty values are omitted from API requests. However, any field
+	// with an empty value appearing in NullFields will be sent to the
+	// server as null. It is an error if a field in this list has a
+	// non-empty value. This may be used to include null fields in Patch
+	// requests.
+	NullFields []string `json:"-"`
+}
+
+func (s *SubnetworksSetPrivateIpGoogleAccessRequest) MarshalJSON() ([]byte, error) {
+	type noMethod SubnetworksSetPrivateIpGoogleAccessRequest
+	raw := noMethod(*s)
+	return gensupport.MarshalJSON(raw, s.ForceSendFields, s.NullFields)
+}
+
 type TCPHealthCheck struct {
 	// Port: The TCP port number for the health check request. The default
 	// value is 80. Valid values are 1 through 65535.
@@ -15783,7 +15910,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	if c.ifNoneMatch_ != "" {
 		reqHeaders.Set("If-None-Match", c.ifNoneMatch_)
 	}
@@ -15973,7 +16099,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	if c.ifNoneMatch_ != "" {
 		reqHeaders.Set("If-None-Match", c.ifNoneMatch_)
 	}
@@ -16203,7 +16328,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	if c.ifNoneMatch_ != "" {
 		reqHeaders.Set("If-None-Match", c.ifNoneMatch_)
 	}
@@ -16466,7 +16590,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	if c.ifNoneMatch_ != "" {
 		reqHeaders.Set("If-None-Match", c.ifNoneMatch_)
 	}
@@ -16645,7 +16768,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	var body io.Reader = nil
 	c.urlParams_.Set("alt", alt)
 	urls := googleapi.ResolveRelative(c.s.BasePath, "{project}/regions/{region}/addresses/{address}")
@@ -16805,7 +16927,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	if c.ifNoneMatch_ != "" {
 		reqHeaders.Set("If-None-Match", c.ifNoneMatch_)
 	}
@@ -16959,7 +17080,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	var body io.Reader = nil
 	body, err := googleapi.WithoutDataWrapper.JSONReader(c.address)
 	if err != nil {
@@ -17185,7 +17305,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	if c.ifNoneMatch_ != "" {
 		reqHeaders.Set("If-None-Match", c.ifNoneMatch_)
 	}
@@ -17375,7 +17494,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	var body io.Reader = nil
 	body, err := googleapi.WithoutDataWrapper.JSONReader(c.testpermissionsrequest)
 	if err != nil {
@@ -17607,7 +17725,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	if c.ifNoneMatch_ != "" {
 		reqHeaders.Set("If-None-Match", c.ifNoneMatch_)
 	}
@@ -17785,7 +17902,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	var body io.Reader = nil
 	c.urlParams_.Set("alt", alt)
 	urls := googleapi.ResolveRelative(c.s.BasePath, "{project}/zones/{zone}/autoscalers/{autoscaler}")
@@ -17945,7 +18061,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	if c.ifNoneMatch_ != "" {
 		reqHeaders.Set("If-None-Match", c.ifNoneMatch_)
 	}
@@ -18098,7 +18213,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	var body io.Reader = nil
 	body, err := googleapi.WithoutDataWrapper.JSONReader(c.autoscaler)
 	if err != nil {
@@ -18323,7 +18437,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	if c.ifNoneMatch_ != "" {
 		reqHeaders.Set("If-None-Match", c.ifNoneMatch_)
 	}
@@ -18512,7 +18625,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	var body io.Reader = nil
 	body, err := googleapi.WithoutDataWrapper.JSONReader(c.autoscaler2)
 	if err != nil {
@@ -18670,7 +18782,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	var body io.Reader = nil
 	body, err := googleapi.WithoutDataWrapper.JSONReader(c.testpermissionsrequest)
 	if err != nil {
@@ -18835,7 +18946,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	var body io.Reader = nil
 	body, err := googleapi.WithoutDataWrapper.JSONReader(c.autoscaler)
 	if err != nil {
@@ -18986,7 +19096,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	var body io.Reader = nil
 	c.urlParams_.Set("alt", alt)
 	urls := googleapi.ResolveRelative(c.s.BasePath, "{project}/global/backendBuckets/{backendBucket}")
@@ -19135,7 +19244,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	if c.ifNoneMatch_ != "" {
 		reqHeaders.Set("If-None-Match", c.ifNoneMatch_)
 	}
@@ -19277,7 +19385,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	var body io.Reader = nil
 	body, err := googleapi.WithoutDataWrapper.JSONReader(c.backendbucket)
 	if err != nil {
@@ -19491,7 +19598,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	if c.ifNoneMatch_ != "" {
 		reqHeaders.Set("If-None-Match", c.ifNoneMatch_)
 	}
@@ -19670,7 +19776,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	var body io.Reader = nil
 	body, err := googleapi.WithoutDataWrapper.JSONReader(c.backendbucket)
 	if err != nil {
@@ -19818,7 +19923,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	var body io.Reader = nil
 	body, err := googleapi.WithoutDataWrapper.JSONReader(c.backendbucket)
 	if err != nil {
@@ -20041,7 +20145,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	if c.ifNoneMatch_ != "" {
 		reqHeaders.Set("If-None-Match", c.ifNoneMatch_)
 	}
@@ -20218,7 +20321,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	var body io.Reader = nil
 	c.urlParams_.Set("alt", alt)
 	urls := googleapi.ResolveRelative(c.s.BasePath, "{project}/global/backendServices/{backendService}")
@@ -20368,7 +20470,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	if c.ifNoneMatch_ != "" {
 		reqHeaders.Set("If-None-Match", c.ifNoneMatch_)
 	}
@@ -20513,7 +20614,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	var body io.Reader = nil
 	body, err := googleapi.WithoutDataWrapper.JSONReader(c.resourcegroupreference)
 	if err != nil {
@@ -20662,7 +20762,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	var body io.Reader = nil
 	body, err := googleapi.WithoutDataWrapper.JSONReader(c.backendservice)
 	if err != nil {
@@ -20877,7 +20976,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	if c.ifNoneMatch_ != "" {
 		reqHeaders.Set("If-None-Match", c.ifNoneMatch_)
 	}
@@ -21060,7 +21158,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	var body io.Reader = nil
 	body, err := googleapi.WithoutDataWrapper.JSONReader(c.backendservice)
 	if err != nil {
@@ -21208,7 +21305,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	var body io.Reader = nil
 	body, err := googleapi.WithoutDataWrapper.JSONReader(c.testpermissionsrequest)
 	if err != nil {
@@ -21360,7 +21456,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	var body io.Reader = nil
 	body, err := googleapi.WithoutDataWrapper.JSONReader(c.backendservice)
 	if err != nil {
@@ -21582,7 +21677,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	if c.ifNoneMatch_ != "" {
 		reqHeaders.Set("If-None-Match", c.ifNoneMatch_)
 	}
@@ -21836,7 +21930,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	if c.ifNoneMatch_ != "" {
 		reqHeaders.Set("If-None-Match", c.ifNoneMatch_)
 	}
@@ -22027,7 +22120,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	if c.ifNoneMatch_ != "" {
 		reqHeaders.Set("If-None-Match", c.ifNoneMatch_)
 	}
@@ -22258,7 +22350,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	if c.ifNoneMatch_ != "" {
 		reqHeaders.Set("If-None-Match", c.ifNoneMatch_)
 	}
@@ -22521,7 +22612,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	if c.ifNoneMatch_ != "" {
 		reqHeaders.Set("If-None-Match", c.ifNoneMatch_)
 	}
@@ -22708,7 +22798,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	var body io.Reader = nil
 	body, err := googleapi.WithoutDataWrapper.JSONReader(c.snapshot)
 	if err != nil {
@@ -22872,7 +22961,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	var body io.Reader = nil
 	c.urlParams_.Set("alt", alt)
 	urls := googleapi.ResolveRelative(c.s.BasePath, "{project}/zones/{zone}/disks/{disk}")
@@ -23032,7 +23120,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	if c.ifNoneMatch_ != "" {
 		reqHeaders.Set("If-None-Match", c.ifNoneMatch_)
 	}
@@ -23196,7 +23283,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	var body io.Reader = nil
 	body, err := googleapi.WithoutDataWrapper.JSONReader(c.disk)
 	if err != nil {
@@ -23427,7 +23513,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	if c.ifNoneMatch_ != "" {
 		reqHeaders.Set("If-None-Match", c.ifNoneMatch_)
 	}
@@ -23616,7 +23701,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	var body io.Reader = nil
 	body, err := googleapi.WithoutDataWrapper.JSONReader(c.disksresizerequest)
 	if err != nil {
@@ -23775,7 +23859,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	var body io.Reader = nil
 	body, err := googleapi.WithoutDataWrapper.JSONReader(c.zonesetlabelsrequest)
 	if err != nil {
@@ -23934,7 +24017,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	var body io.Reader = nil
 	body, err := googleapi.WithoutDataWrapper.JSONReader(c.testpermissionsrequest)
 	if err != nil {
@@ -24090,7 +24172,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	var body io.Reader = nil
 	c.urlParams_.Set("alt", alt)
 	urls := googleapi.ResolveRelative(c.s.BasePath, "{project}/global/firewalls/{firewall}")
@@ -24239,7 +24320,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	if c.ifNoneMatch_ != "" {
 		reqHeaders.Set("If-None-Match", c.ifNoneMatch_)
 	}
@@ -24382,7 +24462,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	var body io.Reader = nil
 	body, err := googleapi.WithoutDataWrapper.JSONReader(c.firewall)
 	if err != nil {
@@ -24597,7 +24676,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	if c.ifNoneMatch_ != "" {
 		reqHeaders.Set("If-None-Match", c.ifNoneMatch_)
 	}
@@ -24777,7 +24855,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	var body io.Reader = nil
 	body, err := googleapi.WithoutDataWrapper.JSONReader(c.firewall2)
 	if err != nil {
@@ -24843,7 +24920,7 @@
 	//   ],
 	//   "parameters": {
 	//     "firewall": {
-	//       "description": "Name of the firewall rule to update.",
+	//       "description": "Name of the firewall rule to patch.",
 	//       "location": "path",
 	//       "pattern": "[a-z](?:[-a-z0-9]{0,61}[a-z0-9])?",
 	//       "required": true,
@@ -24866,7 +24943,8 @@
 	//   },
 	//   "scopes": [
 	//     "https://www.googleapis.com/auth/cloud-platform",
-	//     "https://www.googleapis.com/auth/compute"
+	//     "https://www.googleapis.com/auth/compute",
+	//     "https://www.googleapis.com/auth/compute.readonly"
 	//   ]
 	// }
 
@@ -24925,7 +25003,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	var body io.Reader = nil
 	body, err := googleapi.WithoutDataWrapper.JSONReader(c.testpermissionsrequest)
 	if err != nil {
@@ -25075,7 +25152,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	var body io.Reader = nil
 	body, err := googleapi.WithoutDataWrapper.JSONReader(c.firewall2)
 	if err != nil {
@@ -25298,7 +25374,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	if c.ifNoneMatch_ != "" {
 		reqHeaders.Set("If-None-Match", c.ifNoneMatch_)
 	}
@@ -25477,7 +25552,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	var body io.Reader = nil
 	c.urlParams_.Set("alt", alt)
 	urls := googleapi.ResolveRelative(c.s.BasePath, "{project}/regions/{region}/forwardingRules/{forwardingRule}")
@@ -25637,7 +25711,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	if c.ifNoneMatch_ != "" {
 		reqHeaders.Set("If-None-Match", c.ifNoneMatch_)
 	}
@@ -25791,7 +25864,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	var body io.Reader = nil
 	body, err := googleapi.WithoutDataWrapper.JSONReader(c.forwardingrule)
 	if err != nil {
@@ -26017,7 +26089,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	if c.ifNoneMatch_ != "" {
 		reqHeaders.Set("If-None-Match", c.ifNoneMatch_)
 	}
@@ -26208,7 +26279,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	var body io.Reader = nil
 	body, err := googleapi.WithoutDataWrapper.JSONReader(c.targetreference)
 	if err != nil {
@@ -26367,7 +26437,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	var body io.Reader = nil
 	body, err := googleapi.WithoutDataWrapper.JSONReader(c.testpermissionsrequest)
 	if err != nil {
@@ -26523,7 +26592,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	var body io.Reader = nil
 	c.urlParams_.Set("alt", alt)
 	urls := googleapi.ResolveRelative(c.s.BasePath, "{project}/global/addresses/{address}")
@@ -26673,7 +26741,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	if c.ifNoneMatch_ != "" {
 		reqHeaders.Set("If-None-Match", c.ifNoneMatch_)
 	}
@@ -26816,7 +26883,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	var body io.Reader = nil
 	body, err := googleapi.WithoutDataWrapper.JSONReader(c.address)
 	if err != nil {
@@ -27030,7 +27096,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	if c.ifNoneMatch_ != "" {
 		reqHeaders.Set("If-None-Match", c.ifNoneMatch_)
 	}
@@ -27209,7 +27274,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	var body io.Reader = nil
 	body, err := googleapi.WithoutDataWrapper.JSONReader(c.testpermissionsrequest)
 	if err != nil {
@@ -27356,7 +27420,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	var body io.Reader = nil
 	c.urlParams_.Set("alt", alt)
 	urls := googleapi.ResolveRelative(c.s.BasePath, "{project}/global/forwardingRules/{forwardingRule}")
@@ -27506,7 +27569,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	if c.ifNoneMatch_ != "" {
 		reqHeaders.Set("If-None-Match", c.ifNoneMatch_)
 	}
@@ -27649,7 +27711,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	var body io.Reader = nil
 	body, err := googleapi.WithoutDataWrapper.JSONReader(c.forwardingrule)
 	if err != nil {
@@ -27864,7 +27925,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	if c.ifNoneMatch_ != "" {
 		reqHeaders.Set("If-None-Match", c.ifNoneMatch_)
 	}
@@ -28044,7 +28104,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	var body io.Reader = nil
 	body, err := googleapi.WithoutDataWrapper.JSONReader(c.targetreference)
 	if err != nil {
@@ -28192,7 +28251,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	var body io.Reader = nil
 	body, err := googleapi.WithoutDataWrapper.JSONReader(c.testpermissionsrequest)
 	if err != nil {
@@ -28416,7 +28474,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	if c.ifNoneMatch_ != "" {
 		reqHeaders.Set("If-None-Match", c.ifNoneMatch_)
 	}
@@ -28593,7 +28650,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	var body io.Reader = nil
 	c.urlParams_.Set("alt", alt)
 	urls := googleapi.ResolveRelative(c.s.BasePath, "{project}/global/operations/{operation}")
@@ -28715,7 +28771,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	if c.ifNoneMatch_ != "" {
 		reqHeaders.Set("If-None-Match", c.ifNoneMatch_)
 	}
@@ -28935,7 +28990,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	if c.ifNoneMatch_ != "" {
 		reqHeaders.Set("If-None-Match", c.ifNoneMatch_)
 	}
@@ -29111,7 +29165,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	var body io.Reader = nil
 	c.urlParams_.Set("alt", alt)
 	urls := googleapi.ResolveRelative(c.s.BasePath, "{project}/global/healthChecks/{healthCheck}")
@@ -29260,7 +29313,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	if c.ifNoneMatch_ != "" {
 		reqHeaders.Set("If-None-Match", c.ifNoneMatch_)
 	}
@@ -29402,7 +29454,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	var body io.Reader = nil
 	body, err := googleapi.WithoutDataWrapper.JSONReader(c.healthcheck)
 	if err != nil {
@@ -29616,7 +29667,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	if c.ifNoneMatch_ != "" {
 		reqHeaders.Set("If-None-Match", c.ifNoneMatch_)
 	}
@@ -29796,7 +29846,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	var body io.Reader = nil
 	body, err := googleapi.WithoutDataWrapper.JSONReader(c.healthcheck)
 	if err != nil {
@@ -29944,7 +29993,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	var body io.Reader = nil
 	body, err := googleapi.WithoutDataWrapper.JSONReader(c.testpermissionsrequest)
 	if err != nil {
@@ -30093,7 +30141,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	var body io.Reader = nil
 	body, err := googleapi.WithoutDataWrapper.JSONReader(c.healthcheck)
 	if err != nil {
@@ -30239,7 +30286,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	var body io.Reader = nil
 	c.urlParams_.Set("alt", alt)
 	urls := googleapi.ResolveRelative(c.s.BasePath, "{project}/global/httpHealthChecks/{httpHealthCheck}")
@@ -30389,7 +30435,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	if c.ifNoneMatch_ != "" {
 		reqHeaders.Set("If-None-Match", c.ifNoneMatch_)
 	}
@@ -30532,7 +30577,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	var body io.Reader = nil
 	body, err := googleapi.WithoutDataWrapper.JSONReader(c.httphealthcheck)
 	if err != nil {
@@ -30747,7 +30791,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	if c.ifNoneMatch_ != "" {
 		reqHeaders.Set("If-None-Match", c.ifNoneMatch_)
 	}
@@ -30928,7 +30971,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	var body io.Reader = nil
 	body, err := googleapi.WithoutDataWrapper.JSONReader(c.httphealthcheck)
 	if err != nil {
@@ -31076,7 +31118,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	var body io.Reader = nil
 	body, err := googleapi.WithoutDataWrapper.JSONReader(c.testpermissionsrequest)
 	if err != nil {
@@ -31226,7 +31267,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	var body io.Reader = nil
 	body, err := googleapi.WithoutDataWrapper.JSONReader(c.httphealthcheck)
 	if err != nil {
@@ -31371,7 +31411,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	var body io.Reader = nil
 	c.urlParams_.Set("alt", alt)
 	urls := googleapi.ResolveRelative(c.s.BasePath, "{project}/global/httpsHealthChecks/{httpsHealthCheck}")
@@ -31520,7 +31559,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	if c.ifNoneMatch_ != "" {
 		reqHeaders.Set("If-None-Match", c.ifNoneMatch_)
 	}
@@ -31662,7 +31700,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	var body io.Reader = nil
 	body, err := googleapi.WithoutDataWrapper.JSONReader(c.httpshealthcheck)
 	if err != nil {
@@ -31876,7 +31913,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	if c.ifNoneMatch_ != "" {
 		reqHeaders.Set("If-None-Match", c.ifNoneMatch_)
 	}
@@ -32056,7 +32092,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	var body io.Reader = nil
 	body, err := googleapi.WithoutDataWrapper.JSONReader(c.httpshealthcheck)
 	if err != nil {
@@ -32204,7 +32239,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	var body io.Reader = nil
 	body, err := googleapi.WithoutDataWrapper.JSONReader(c.testpermissionsrequest)
 	if err != nil {
@@ -32353,7 +32387,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	var body io.Reader = nil
 	body, err := googleapi.WithoutDataWrapper.JSONReader(c.httpshealthcheck)
 	if err != nil {
@@ -32499,7 +32532,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	var body io.Reader = nil
 	c.urlParams_.Set("alt", alt)
 	urls := googleapi.ResolveRelative(c.s.BasePath, "{project}/global/images/{image}")
@@ -32642,7 +32674,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	var body io.Reader = nil
 	body, err := googleapi.WithoutDataWrapper.JSONReader(c.deprecationstatus)
 	if err != nil {
@@ -32800,7 +32831,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	if c.ifNoneMatch_ != "" {
 		reqHeaders.Set("If-None-Match", c.ifNoneMatch_)
 	}
@@ -32953,7 +32983,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	if c.ifNoneMatch_ != "" {
 		reqHeaders.Set("If-None-Match", c.ifNoneMatch_)
 	}
@@ -33096,7 +33125,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	var body io.Reader = nil
 	body, err := googleapi.WithoutDataWrapper.JSONReader(c.image)
 	if err != nil {
@@ -33319,7 +33347,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	if c.ifNoneMatch_ != "" {
 		reqHeaders.Set("If-None-Match", c.ifNoneMatch_)
 	}
@@ -33498,7 +33525,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	var body io.Reader = nil
 	body, err := googleapi.WithoutDataWrapper.JSONReader(c.globalsetlabelsrequest)
 	if err != nil {
@@ -33646,7 +33672,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	var body io.Reader = nil
 	body, err := googleapi.WithoutDataWrapper.JSONReader(c.testpermissionsrequest)
 	if err != nil {
@@ -33804,7 +33829,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	var body io.Reader = nil
 	body, err := googleapi.WithoutDataWrapper.JSONReader(c.instancegroupmanagersabandoninstancesrequest)
 	if err != nil {
@@ -34034,7 +34058,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	if c.ifNoneMatch_ != "" {
 		reqHeaders.Set("If-None-Match", c.ifNoneMatch_)
 	}
@@ -34216,7 +34239,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	var body io.Reader = nil
 	c.urlParams_.Set("alt", alt)
 	urls := googleapi.ResolveRelative(c.s.BasePath, "{project}/zones/{zone}/instanceGroupManagers/{instanceGroupManager}")
@@ -34371,7 +34393,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	var body io.Reader = nil
 	body, err := googleapi.WithoutDataWrapper.JSONReader(c.instancegroupmanagersdeleteinstancesrequest)
 	if err != nil {
@@ -34538,7 +34559,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	if c.ifNoneMatch_ != "" {
 		reqHeaders.Set("If-None-Match", c.ifNoneMatch_)
 	}
@@ -34694,7 +34714,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	var body io.Reader = nil
 	body, err := googleapi.WithoutDataWrapper.JSONReader(c.instancegroupmanager)
 	if err != nil {
@@ -34918,7 +34937,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	if c.ifNoneMatch_ != "" {
 		reqHeaders.Set("If-None-Match", c.ifNoneMatch_)
 	}
@@ -35133,7 +35151,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	var body io.Reader = nil
 	c.urlParams_.Set("alt", alt)
 	urls := googleapi.ResolveRelative(c.s.BasePath, "{project}/zones/{zone}/instanceGroupManagers/{instanceGroupManager}/listManagedInstances")
@@ -35308,7 +35325,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	var body io.Reader = nil
 	body, err := googleapi.WithoutDataWrapper.JSONReader(c.instancegroupmanager)
 	if err != nil {
@@ -35470,7 +35486,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	var body io.Reader = nil
 	body, err := googleapi.WithoutDataWrapper.JSONReader(c.instancegroupmanagersrecreateinstancesrequest)
 	if err != nil {
@@ -35631,7 +35646,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	var body io.Reader = nil
 	c.urlParams_.Set("alt", alt)
 	urls := googleapi.ResolveRelative(c.s.BasePath, "{project}/zones/{zone}/instanceGroupManagers/{instanceGroupManager}/resize")
@@ -35797,7 +35811,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	var body io.Reader = nil
 	body, err := googleapi.WithoutDataWrapper.JSONReader(c.instancegroupmanagersresizeadvancedrequest)
 	if err != nil {
@@ -35953,7 +35966,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	var body io.Reader = nil
 	body, err := googleapi.WithoutDataWrapper.JSONReader(c.instancegroupmanagerssetautohealingrequest)
 	if err != nil {
@@ -36111,7 +36123,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	var body io.Reader = nil
 	body, err := googleapi.WithoutDataWrapper.JSONReader(c.instancegroupmanagerssetinstancetemplaterequest)
 	if err != nil {
@@ -36273,7 +36284,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	var body io.Reader = nil
 	body, err := googleapi.WithoutDataWrapper.JSONReader(c.instancegroupmanagerssettargetpoolsrequest)
 	if err != nil {
@@ -36430,7 +36440,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	var body io.Reader = nil
 	body, err := googleapi.WithoutDataWrapper.JSONReader(c.testpermissionsrequest)
 	if err != nil {
@@ -36593,7 +36602,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	var body io.Reader = nil
 	body, err := googleapi.WithoutDataWrapper.JSONReader(c.instancegroupmanager)
 	if err != nil {
@@ -36751,7 +36759,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	var body io.Reader = nil
 	body, err := googleapi.WithoutDataWrapper.JSONReader(c.instancegroupsaddinstancesrequest)
 	if err != nil {
@@ -36981,7 +36988,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	if c.ifNoneMatch_ != "" {
 		reqHeaders.Set("If-None-Match", c.ifNoneMatch_)
 	}
@@ -37162,7 +37168,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	var body io.Reader = nil
 	c.urlParams_.Set("alt", alt)
 	urls := googleapi.ResolveRelative(c.s.BasePath, "{project}/zones/{zone}/instanceGroups/{instanceGroup}")
@@ -37320,7 +37325,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	if c.ifNoneMatch_ != "" {
 		reqHeaders.Set("If-None-Match", c.ifNoneMatch_)
 	}
@@ -37471,7 +37475,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	var body io.Reader = nil
 	body, err := googleapi.WithoutDataWrapper.JSONReader(c.instancegroup)
 	if err != nil {
@@ -37695,7 +37698,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	if c.ifNoneMatch_ != "" {
 		reqHeaders.Set("If-None-Match", c.ifNoneMatch_)
 	}
@@ -37951,7 +37953,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	var body io.Reader = nil
 	body, err := googleapi.WithoutDataWrapper.JSONReader(c.instancegroupslistinstancesrequest)
 	if err != nil {
@@ -38153,7 +38154,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	var body io.Reader = nil
 	body, err := googleapi.WithoutDataWrapper.JSONReader(c.instancegroupsremoveinstancesrequest)
 	if err != nil {
@@ -38309,7 +38309,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	var body io.Reader = nil
 	body, err := googleapi.WithoutDataWrapper.JSONReader(c.instancegroupssetnamedportsrequest)
 	if err != nil {
@@ -38466,7 +38465,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	var body io.Reader = nil
 	body, err := googleapi.WithoutDataWrapper.JSONReader(c.testpermissionsrequest)
 	if err != nil {
@@ -38626,7 +38624,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	var body io.Reader = nil
 	c.urlParams_.Set("alt", alt)
 	urls := googleapi.ResolveRelative(c.s.BasePath, "{project}/global/instanceTemplates/{instanceTemplate}")
@@ -38776,7 +38773,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	if c.ifNoneMatch_ != "" {
 		reqHeaders.Set("If-None-Match", c.ifNoneMatch_)
 	}
@@ -38922,7 +38918,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	var body io.Reader = nil
 	body, err := googleapi.WithoutDataWrapper.JSONReader(c.instancetemplate)
 	if err != nil {
@@ -39137,7 +39132,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	if c.ifNoneMatch_ != "" {
 		reqHeaders.Set("If-None-Match", c.ifNoneMatch_)
 	}
@@ -39316,7 +39310,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	var body io.Reader = nil
 	body, err := googleapi.WithoutDataWrapper.JSONReader(c.testpermissionsrequest)
 	if err != nil {
@@ -39469,7 +39462,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	var body io.Reader = nil
 	body, err := googleapi.WithoutDataWrapper.JSONReader(c.accessconfig)
 	if err != nil {
@@ -39708,7 +39700,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	if c.ifNoneMatch_ != "" {
 		reqHeaders.Set("If-None-Match", c.ifNoneMatch_)
 	}
@@ -39889,7 +39880,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	var body io.Reader = nil
 	body, err := googleapi.WithoutDataWrapper.JSONReader(c.attacheddisk)
 	if err != nil {
@@ -40047,7 +40037,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	var body io.Reader = nil
 	c.urlParams_.Set("alt", alt)
 	urls := googleapi.ResolveRelative(c.s.BasePath, "{project}/zones/{zone}/instances/{instance}")
@@ -40199,7 +40188,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	var body io.Reader = nil
 	c.urlParams_.Set("alt", alt)
 	urls := googleapi.ResolveRelative(c.s.BasePath, "{project}/zones/{zone}/instances/{instance}/deleteAccessConfig")
@@ -40363,7 +40351,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	var body io.Reader = nil
 	c.urlParams_.Set("alt", alt)
 	urls := googleapi.ResolveRelative(c.s.BasePath, "{project}/zones/{zone}/instances/{instance}/detachDisk")
@@ -40531,7 +40518,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	if c.ifNoneMatch_ != "" {
 		reqHeaders.Set("If-None-Match", c.ifNoneMatch_)
 	}
@@ -40714,7 +40700,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	if c.ifNoneMatch_ != "" {
 		reqHeaders.Set("If-None-Match", c.ifNoneMatch_)
 	}
@@ -40883,7 +40868,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	var body io.Reader = nil
 	body, err := googleapi.WithoutDataWrapper.JSONReader(c.instance)
 	if err != nil {
@@ -41109,7 +41093,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	if c.ifNoneMatch_ != "" {
 		reqHeaders.Set("If-None-Match", c.ifNoneMatch_)
 	}
@@ -41297,7 +41280,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	var body io.Reader = nil
 	c.urlParams_.Set("alt", alt)
 	urls := googleapi.ResolveRelative(c.s.BasePath, "{project}/zones/{zone}/instances/{instance}/reset")
@@ -41449,7 +41431,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	var body io.Reader = nil
 	c.urlParams_.Set("alt", alt)
 	urls := googleapi.ResolveRelative(c.s.BasePath, "{project}/zones/{zone}/instances/{instance}/setDiskAutoDelete")
@@ -41615,7 +41596,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	var body io.Reader = nil
 	body, err := googleapi.WithoutDataWrapper.JSONReader(c.instancessetlabelsrequest)
 	if err != nil {
@@ -41774,7 +41754,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	var body io.Reader = nil
 	body, err := googleapi.WithoutDataWrapper.JSONReader(c.instancessetmachineresourcesrequest)
 	if err != nil {
@@ -41933,7 +41912,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	var body io.Reader = nil
 	body, err := googleapi.WithoutDataWrapper.JSONReader(c.instancessetmachinetyperequest)
 	if err != nil {
@@ -42093,7 +42071,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	var body io.Reader = nil
 	body, err := googleapi.WithoutDataWrapper.JSONReader(c.metadata)
 	if err != nil {
@@ -42252,7 +42229,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	var body io.Reader = nil
 	body, err := googleapi.WithoutDataWrapper.JSONReader(c.scheduling)
 	if err != nil {
@@ -42412,7 +42388,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	var body io.Reader = nil
 	body, err := googleapi.WithoutDataWrapper.JSONReader(c.instancessetserviceaccountrequest)
 	if err != nil {
@@ -42572,7 +42547,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	var body io.Reader = nil
 	body, err := googleapi.WithoutDataWrapper.JSONReader(c.tags)
 	if err != nil {
@@ -42731,7 +42705,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	var body io.Reader = nil
 	c.urlParams_.Set("alt", alt)
 	urls := googleapi.ResolveRelative(c.s.BasePath, "{project}/zones/{zone}/instances/{instance}/start")
@@ -42883,7 +42856,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	var body io.Reader = nil
 	body, err := googleapi.WithoutDataWrapper.JSONReader(c.instancesstartwithencryptionkeyrequest)
 	if err != nil {
@@ -43046,7 +43018,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	var body io.Reader = nil
 	c.urlParams_.Set("alt", alt)
 	urls := googleapi.ResolveRelative(c.s.BasePath, "{project}/zones/{zone}/instances/{instance}/stop")
@@ -43197,7 +43168,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	var body io.Reader = nil
 	body, err := googleapi.WithoutDataWrapper.JSONReader(c.testpermissionsrequest)
 	if err != nil {
@@ -43365,7 +43335,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	if c.ifNoneMatch_ != "" {
 		reqHeaders.Set("If-None-Match", c.ifNoneMatch_)
 	}
@@ -43584,7 +43553,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	if c.ifNoneMatch_ != "" {
 		reqHeaders.Set("If-None-Match", c.ifNoneMatch_)
 	}
@@ -43775,7 +43743,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	if c.ifNoneMatch_ != "" {
 		reqHeaders.Set("If-None-Match", c.ifNoneMatch_)
 	}
@@ -44006,7 +43973,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	if c.ifNoneMatch_ != "" {
 		reqHeaders.Set("If-None-Match", c.ifNoneMatch_)
 	}
@@ -44193,7 +44159,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	var body io.Reader = nil
 	body, err := googleapi.WithoutDataWrapper.JSONReader(c.networksaddpeeringrequest)
 	if err != nil {
@@ -44339,7 +44304,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	var body io.Reader = nil
 	c.urlParams_.Set("alt", alt)
 	urls := googleapi.ResolveRelative(c.s.BasePath, "{project}/global/networks/{network}")
@@ -44489,7 +44453,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	if c.ifNoneMatch_ != "" {
 		reqHeaders.Set("If-None-Match", c.ifNoneMatch_)
 	}
@@ -44632,7 +44595,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	var body io.Reader = nil
 	body, err := googleapi.WithoutDataWrapper.JSONReader(c.network)
 	if err != nil {
@@ -44847,7 +44809,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	if c.ifNoneMatch_ != "" {
 		reqHeaders.Set("If-None-Match", c.ifNoneMatch_)
 	}
@@ -45025,7 +44986,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	var body io.Reader = nil
 	body, err := googleapi.WithoutDataWrapper.JSONReader(c.networksremovepeeringrequest)
 	if err != nil {
@@ -45171,7 +45131,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	var body io.Reader = nil
 	c.urlParams_.Set("alt", alt)
 	urls := googleapi.ResolveRelative(c.s.BasePath, "{project}/global/networks/{network}/switchToCustomMode")
@@ -45311,7 +45270,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	var body io.Reader = nil
 	body, err := googleapi.WithoutDataWrapper.JSONReader(c.testpermissionsrequest)
 	if err != nil {
@@ -45455,7 +45413,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	var body io.Reader = nil
 	c.urlParams_.Set("alt", alt)
 	urls := googleapi.ResolveRelative(c.s.BasePath, "{project}/disableXpnHost")
@@ -45584,7 +45541,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	var body io.Reader = nil
 	body, err := googleapi.WithoutDataWrapper.JSONReader(c.projectsdisablexpnresourcerequest)
 	if err != nil {
@@ -45718,7 +45674,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	var body io.Reader = nil
 	c.urlParams_.Set("alt", alt)
 	urls := googleapi.ResolveRelative(c.s.BasePath, "{project}/enableXpnHost")
@@ -45849,7 +45804,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	var body io.Reader = nil
 	body, err := googleapi.WithoutDataWrapper.JSONReader(c.projectsenablexpnresourcerequest)
 	if err != nil {
@@ -45995,7 +45949,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	if c.ifNoneMatch_ != "" {
 		reqHeaders.Set("If-None-Match", c.ifNoneMatch_)
 	}
@@ -46137,7 +46090,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	if c.ifNoneMatch_ != "" {
 		reqHeaders.Set("If-None-Match", c.ifNoneMatch_)
 	}
@@ -46302,7 +46254,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	if c.ifNoneMatch_ != "" {
 		reqHeaders.Set("If-None-Match", c.ifNoneMatch_)
 	}
@@ -46499,7 +46450,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	var body io.Reader = nil
 	body, err := googleapi.WithoutDataWrapper.JSONReader(c.projectslistxpnhostsrequest)
 	if err != nil {
@@ -46676,7 +46626,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	var body io.Reader = nil
 	body, err := googleapi.WithoutDataWrapper.JSONReader(c.diskmoverequest)
 	if err != nil {
@@ -46813,7 +46762,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	var body io.Reader = nil
 	body, err := googleapi.WithoutDataWrapper.JSONReader(c.instancemoverequest)
 	if err != nil {
@@ -46951,7 +46899,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	var body io.Reader = nil
 	body, err := googleapi.WithoutDataWrapper.JSONReader(c.metadata)
 	if err != nil {
@@ -47091,7 +47038,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	var body io.Reader = nil
 	body, err := googleapi.WithoutDataWrapper.JSONReader(c.usageexportlocation)
 	if err != nil {
@@ -47232,7 +47178,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	var body io.Reader = nil
 	c.urlParams_.Set("alt", alt)
 	urls := googleapi.ResolveRelative(c.s.BasePath, "{project}/regions/{region}/autoscalers/{autoscaler}")
@@ -47391,7 +47336,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	if c.ifNoneMatch_ != "" {
 		reqHeaders.Set("If-None-Match", c.ifNoneMatch_)
 	}
@@ -47544,7 +47488,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	var body io.Reader = nil
 	body, err := googleapi.WithoutDataWrapper.JSONReader(c.autoscaler)
 	if err != nil {
@@ -47769,7 +47712,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	if c.ifNoneMatch_ != "" {
 		reqHeaders.Set("If-None-Match", c.ifNoneMatch_)
 	}
@@ -47958,7 +47900,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	var body io.Reader = nil
 	body, err := googleapi.WithoutDataWrapper.JSONReader(c.autoscaler2)
 	if err != nil {
@@ -48116,7 +48057,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	var body io.Reader = nil
 	body, err := googleapi.WithoutDataWrapper.JSONReader(c.testpermissionsrequest)
 	if err != nil {
@@ -48281,7 +48221,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	var body io.Reader = nil
 	body, err := googleapi.WithoutDataWrapper.JSONReader(c.autoscaler)
 	if err != nil {
@@ -48434,7 +48373,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	var body io.Reader = nil
 	c.urlParams_.Set("alt", alt)
 	urls := googleapi.ResolveRelative(c.s.BasePath, "{project}/regions/{region}/backendServices/{backendService}")
@@ -48593,7 +48531,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	if c.ifNoneMatch_ != "" {
 		reqHeaders.Set("If-None-Match", c.ifNoneMatch_)
 	}
@@ -48748,7 +48685,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	var body io.Reader = nil
 	body, err := googleapi.WithoutDataWrapper.JSONReader(c.resourcegroupreference)
 	if err != nil {
@@ -48908,7 +48844,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	var body io.Reader = nil
 	body, err := googleapi.WithoutDataWrapper.JSONReader(c.backendservice)
 	if err != nil {
@@ -49133,7 +49068,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	if c.ifNoneMatch_ != "" {
 		reqHeaders.Set("If-None-Match", c.ifNoneMatch_)
 	}
@@ -49326,7 +49260,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	var body io.Reader = nil
 	body, err := googleapi.WithoutDataWrapper.JSONReader(c.backendservice)
 	if err != nil {
@@ -49485,7 +49418,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	var body io.Reader = nil
 	body, err := googleapi.WithoutDataWrapper.JSONReader(c.testpermissionsrequest)
 	if err != nil {
@@ -49647,7 +49579,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	var body io.Reader = nil
 	body, err := googleapi.WithoutDataWrapper.JSONReader(c.backendservice)
 	if err != nil {
@@ -49815,7 +49746,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	if c.ifNoneMatch_ != "" {
 		reqHeaders.Set("If-None-Match", c.ifNoneMatch_)
 	}
@@ -49968,7 +49898,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	var body io.Reader = nil
 	body, err := googleapi.WithoutDataWrapper.JSONReader(c.commitment)
 	if err != nil {
@@ -50193,7 +50122,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	if c.ifNoneMatch_ != "" {
 		reqHeaders.Set("If-None-Match", c.ifNoneMatch_)
 	}
@@ -50390,7 +50318,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	var body io.Reader = nil
 	body, err := googleapi.WithoutDataWrapper.JSONReader(c.regioninstancegroupmanagersabandoninstancesrequest)
 	if err != nil {
@@ -50545,7 +50472,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	var body io.Reader = nil
 	c.urlParams_.Set("alt", alt)
 	urls := googleapi.ResolveRelative(c.s.BasePath, "{project}/regions/{region}/instanceGroupManagers/{instanceGroupManager}")
@@ -50700,7 +50626,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	var body io.Reader = nil
 	body, err := googleapi.WithoutDataWrapper.JSONReader(c.regioninstancegroupmanagersdeleteinstancesrequest)
 	if err != nil {
@@ -50866,7 +50791,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	if c.ifNoneMatch_ != "" {
 		reqHeaders.Set("If-None-Match", c.ifNoneMatch_)
 	}
@@ -51022,7 +50946,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	var body io.Reader = nil
 	body, err := googleapi.WithoutDataWrapper.JSONReader(c.instancegroupmanager)
 	if err != nil {
@@ -51246,7 +51169,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	if c.ifNoneMatch_ != "" {
 		reqHeaders.Set("If-None-Match", c.ifNoneMatch_)
 	}
@@ -51459,7 +51381,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	var body io.Reader = nil
 	c.urlParams_.Set("alt", alt)
 	urls := googleapi.ResolveRelative(c.s.BasePath, "{project}/regions/{region}/instanceGroupManagers/{instanceGroupManager}/listManagedInstances")
@@ -51634,7 +51555,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	var body io.Reader = nil
 	body, err := googleapi.WithoutDataWrapper.JSONReader(c.instancegroupmanager)
 	if err != nil {
@@ -51796,7 +51716,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	var body io.Reader = nil
 	body, err := googleapi.WithoutDataWrapper.JSONReader(c.regioninstancegroupmanagersrecreaterequest)
 	if err != nil {
@@ -51958,7 +51877,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	var body io.Reader = nil
 	c.urlParams_.Set("alt", alt)
 	urls := googleapi.ResolveRelative(c.s.BasePath, "{project}/regions/{region}/instanceGroupManagers/{instanceGroupManager}/resize")
@@ -52116,7 +52034,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	var body io.Reader = nil
 	body, err := googleapi.WithoutDataWrapper.JSONReader(c.regioninstancegroupmanagerssetautohealingrequest)
 	if err != nil {
@@ -52274,7 +52191,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	var body io.Reader = nil
 	body, err := googleapi.WithoutDataWrapper.JSONReader(c.regioninstancegroupmanagerssettemplaterequest)
 	if err != nil {
@@ -52432,7 +52348,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	var body io.Reader = nil
 	body, err := googleapi.WithoutDataWrapper.JSONReader(c.regioninstancegroupmanagerssettargetpoolsrequest)
 	if err != nil {
@@ -52589,7 +52504,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	var body io.Reader = nil
 	body, err := googleapi.WithoutDataWrapper.JSONReader(c.testpermissionsrequest)
 	if err != nil {
@@ -52752,7 +52666,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	var body io.Reader = nil
 	body, err := googleapi.WithoutDataWrapper.JSONReader(c.instancegroupmanager)
 	if err != nil {
@@ -52917,7 +52830,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	if c.ifNoneMatch_ != "" {
 		reqHeaders.Set("If-None-Match", c.ifNoneMatch_)
 	}
@@ -53145,7 +53057,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	if c.ifNoneMatch_ != "" {
 		reqHeaders.Set("If-None-Match", c.ifNoneMatch_)
 	}
@@ -53404,7 +53315,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	var body io.Reader = nil
 	body, err := googleapi.WithoutDataWrapper.JSONReader(c.regioninstancegroupslistinstancesrequest)
 	if err != nil {
@@ -53607,7 +53517,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	var body io.Reader = nil
 	body, err := googleapi.WithoutDataWrapper.JSONReader(c.regioninstancegroupssetnamedportsrequest)
 	if err != nil {
@@ -53764,7 +53673,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	var body io.Reader = nil
 	body, err := googleapi.WithoutDataWrapper.JSONReader(c.testpermissionsrequest)
 	if err != nil {
@@ -53922,7 +53830,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	var body io.Reader = nil
 	c.urlParams_.Set("alt", alt)
 	urls := googleapi.ResolveRelative(c.s.BasePath, "{project}/regions/{region}/operations/{operation}")
@@ -54054,7 +53961,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	if c.ifNoneMatch_ != "" {
 		reqHeaders.Set("If-None-Match", c.ifNoneMatch_)
 	}
@@ -54285,7 +54191,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	if c.ifNoneMatch_ != "" {
 		reqHeaders.Set("If-None-Match", c.ifNoneMatch_)
 	}
@@ -54483,7 +54388,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	if c.ifNoneMatch_ != "" {
 		reqHeaders.Set("If-None-Match", c.ifNoneMatch_)
 	}
@@ -54703,7 +54607,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	if c.ifNoneMatch_ != "" {
 		reqHeaders.Set("If-None-Match", c.ifNoneMatch_)
 	}
@@ -54956,7 +54859,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	if c.ifNoneMatch_ != "" {
 		reqHeaders.Set("If-None-Match", c.ifNoneMatch_)
 	}
@@ -55134,7 +55036,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	var body io.Reader = nil
 	c.urlParams_.Set("alt", alt)
 	urls := googleapi.ResolveRelative(c.s.BasePath, "{project}/regions/{region}/routers/{router}")
@@ -55294,7 +55195,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	if c.ifNoneMatch_ != "" {
 		reqHeaders.Set("If-None-Match", c.ifNoneMatch_)
 	}
@@ -55458,7 +55358,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	if c.ifNoneMatch_ != "" {
 		reqHeaders.Set("If-None-Match", c.ifNoneMatch_)
 	}
@@ -55611,7 +55510,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	var body io.Reader = nil
 	body, err := googleapi.WithoutDataWrapper.JSONReader(c.router)
 	if err != nil {
@@ -55836,7 +55734,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	if c.ifNoneMatch_ != "" {
 		reqHeaders.Set("If-None-Match", c.ifNoneMatch_)
 	}
@@ -56026,7 +55923,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	var body io.Reader = nil
 	body, err := googleapi.WithoutDataWrapper.JSONReader(c.router2)
 	if err != nil {
@@ -56186,7 +56082,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	var body io.Reader = nil
 	body, err := googleapi.WithoutDataWrapper.JSONReader(c.router2)
 	if err != nil {
@@ -56346,7 +56241,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	var body io.Reader = nil
 	body, err := googleapi.WithoutDataWrapper.JSONReader(c.testpermissionsrequest)
 	if err != nil {
@@ -56506,7 +56400,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	var body io.Reader = nil
 	body, err := googleapi.WithoutDataWrapper.JSONReader(c.router2)
 	if err != nil {
@@ -56661,7 +56554,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	var body io.Reader = nil
 	c.urlParams_.Set("alt", alt)
 	urls := googleapi.ResolveRelative(c.s.BasePath, "{project}/global/routes/{route}")
@@ -56811,7 +56703,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	if c.ifNoneMatch_ != "" {
 		reqHeaders.Set("If-None-Match", c.ifNoneMatch_)
 	}
@@ -56954,7 +56845,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	var body io.Reader = nil
 	body, err := googleapi.WithoutDataWrapper.JSONReader(c.route)
 	if err != nil {
@@ -57169,7 +57059,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	if c.ifNoneMatch_ != "" {
 		reqHeaders.Set("If-None-Match", c.ifNoneMatch_)
 	}
@@ -57348,7 +57237,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	var body io.Reader = nil
 	body, err := googleapi.WithoutDataWrapper.JSONReader(c.testpermissionsrequest)
 	if err != nil {
@@ -57501,7 +57389,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	var body io.Reader = nil
 	c.urlParams_.Set("alt", alt)
 	urls := googleapi.ResolveRelative(c.s.BasePath, "{project}/global/snapshots/{snapshot}")
@@ -57651,7 +57538,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	if c.ifNoneMatch_ != "" {
 		reqHeaders.Set("If-None-Match", c.ifNoneMatch_)
 	}
@@ -57871,7 +57757,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	if c.ifNoneMatch_ != "" {
 		reqHeaders.Set("If-None-Match", c.ifNoneMatch_)
 	}
@@ -58050,7 +57935,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	var body io.Reader = nil
 	body, err := googleapi.WithoutDataWrapper.JSONReader(c.globalsetlabelsrequest)
 	if err != nil {
@@ -58198,7 +58082,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	var body io.Reader = nil
 	body, err := googleapi.WithoutDataWrapper.JSONReader(c.testpermissionsrequest)
 	if err != nil {
@@ -58344,7 +58227,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	var body io.Reader = nil
 	c.urlParams_.Set("alt", alt)
 	urls := googleapi.ResolveRelative(c.s.BasePath, "{project}/global/sslCertificates/{sslCertificate}")
@@ -58493,7 +58375,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	if c.ifNoneMatch_ != "" {
 		reqHeaders.Set("If-None-Match", c.ifNoneMatch_)
 	}
@@ -58635,7 +58516,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	var body io.Reader = nil
 	body, err := googleapi.WithoutDataWrapper.JSONReader(c.sslcertificate)
 	if err != nil {
@@ -58849,7 +58729,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	if c.ifNoneMatch_ != "" {
 		reqHeaders.Set("If-None-Match", c.ifNoneMatch_)
 	}
@@ -59028,7 +58907,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	var body io.Reader = nil
 	body, err := googleapi.WithoutDataWrapper.JSONReader(c.testpermissionsrequest)
 	if err != nil {
@@ -59251,7 +59129,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	if c.ifNoneMatch_ != "" {
 		reqHeaders.Set("If-None-Match", c.ifNoneMatch_)
 	}
@@ -59429,7 +59306,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	var body io.Reader = nil
 	c.urlParams_.Set("alt", alt)
 	urls := googleapi.ResolveRelative(c.s.BasePath, "{project}/regions/{region}/subnetworks/{subnetwork}")
@@ -59580,7 +59456,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	var body io.Reader = nil
 	body, err := googleapi.WithoutDataWrapper.JSONReader(c.subnetworksexpandipcidrrangerequest)
 	if err != nil {
@@ -59748,7 +59623,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	if c.ifNoneMatch_ != "" {
 		reqHeaders.Set("If-None-Match", c.ifNoneMatch_)
 	}
@@ -59912,7 +59786,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	if c.ifNoneMatch_ != "" {
 		reqHeaders.Set("If-None-Match", c.ifNoneMatch_)
 	}
@@ -60065,7 +59938,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	var body io.Reader = nil
 	body, err := googleapi.WithoutDataWrapper.JSONReader(c.subnetwork)
 	if err != nil {
@@ -60290,7 +60162,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	if c.ifNoneMatch_ != "" {
 		reqHeaders.Set("If-None-Match", c.ifNoneMatch_)
 	}
@@ -60480,7 +60351,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	var body io.Reader = nil
 	body, err := googleapi.WithoutDataWrapper.JSONReader(c.policy)
 	if err != nil {
@@ -60584,6 +60454,165 @@
 
 }
 
+// method id "compute.subnetworks.setPrivateIpGoogleAccess":
+
+type SubnetworksSetPrivateIpGoogleAccessCall struct {
+	s                                          *Service
+	project                                    string
+	region                                     string
+	subnetwork                                 string
+	subnetworkssetprivateipgoogleaccessrequest *SubnetworksSetPrivateIpGoogleAccessRequest
+	urlParams_                                 gensupport.URLParams
+	ctx_                                       context.Context
+	header_                                    http.Header
+}
+
+// SetPrivateIpGoogleAccess: Set whether VMs in this subnet can access
+// Google services without assigning external IP addresses through
+// Cloudpath.
+func (r *SubnetworksService) SetPrivateIpGoogleAccess(project string, region string, subnetwork string, subnetworkssetprivateipgoogleaccessrequest *SubnetworksSetPrivateIpGoogleAccessRequest) *SubnetworksSetPrivateIpGoogleAccessCall {
+	c := &SubnetworksSetPrivateIpGoogleAccessCall{s: r.s, urlParams_: make(gensupport.URLParams)}
+	c.project = project
+	c.region = region
+	c.subnetwork = subnetwork
+	c.subnetworkssetprivateipgoogleaccessrequest = subnetworkssetprivateipgoogleaccessrequest
+	return c
+}
+
+// Fields allows partial responses to be retrieved. See
+// https://developers.google.com/gdata/docs/2.0/basics#PartialResponse
+// for more information.
+func (c *SubnetworksSetPrivateIpGoogleAccessCall) Fields(s ...googleapi.Field) *SubnetworksSetPrivateIpGoogleAccessCall {
+	c.urlParams_.Set("fields", googleapi.CombineFields(s))
+	return c
+}
+
+// Context sets the context to be used in this call's Do method. Any
+// pending HTTP request will be aborted if the provided context is
+// canceled.
+func (c *SubnetworksSetPrivateIpGoogleAccessCall) Context(ctx context.Context) *SubnetworksSetPrivateIpGoogleAccessCall {
+	c.ctx_ = ctx
+	return c
+}
+
+// Header returns an http.Header that can be modified by the caller to
+// add HTTP headers to the request.
+func (c *SubnetworksSetPrivateIpGoogleAccessCall) Header() http.Header {
+	if c.header_ == nil {
+		c.header_ = make(http.Header)
+	}
+	return c.header_
+}
+
+func (c *SubnetworksSetPrivateIpGoogleAccessCall) doRequest(alt string) (*http.Response, error) {
+	reqHeaders := make(http.Header)
+	for k, v := range c.header_ {
+		reqHeaders[k] = v
+	}
+	reqHeaders.Set("User-Agent", c.s.userAgent())
+	var body io.Reader = nil
+	body, err := googleapi.WithoutDataWrapper.JSONReader(c.subnetworkssetprivateipgoogleaccessrequest)
+	if err != nil {
+		return nil, err
+	}
+	reqHeaders.Set("Content-Type", "application/json")
+	c.urlParams_.Set("alt", alt)
+	urls := googleapi.ResolveRelative(c.s.BasePath, "{project}/regions/{region}/subnetworks/{subnetwork}/setPrivateIpGoogleAccess")
+	urls += "?" + c.urlParams_.Encode()
+	req, _ := http.NewRequest("POST", urls, body)
+	req.Header = reqHeaders
+	googleapi.Expand(req.URL, map[string]string{
+		"project":    c.project,
+		"region":     c.region,
+		"subnetwork": c.subnetwork,
+	})
+	return gensupport.SendRequest(c.ctx_, c.s.client, req)
+}
+
+// Do executes the "compute.subnetworks.setPrivateIpGoogleAccess" call.
+// Exactly one of *Operation or error will be non-nil. Any non-2xx
+// status code is an error. Response headers are in either
+// *Operation.ServerResponse.Header or (if a response was returned at
+// all) in error.(*googleapi.Error).Header. Use googleapi.IsNotModified
+// to check whether the returned error was because
+// http.StatusNotModified was returned.
+func (c *SubnetworksSetPrivateIpGoogleAccessCall) Do(opts ...googleapi.CallOption) (*Operation, error) {
+	gensupport.SetOptions(c.urlParams_, opts...)
+	res, err := c.doRequest("json")
+	if res != nil && res.StatusCode == http.StatusNotModified {
+		if res.Body != nil {
+			res.Body.Close()
+		}
+		return nil, &googleapi.Error{
+			Code:   res.StatusCode,
+			Header: res.Header,
+		}
+	}
+	if err != nil {
+		return nil, err
+	}
+	defer googleapi.CloseBody(res)
+	if err := googleapi.CheckResponse(res); err != nil {
+		return nil, err
+	}
+	ret := &Operation{
+		ServerResponse: googleapi.ServerResponse{
+			Header:         res.Header,
+			HTTPStatusCode: res.StatusCode,
+		},
+	}
+	target := &ret
+	if err := json.NewDecoder(res.Body).Decode(target); err != nil {
+		return nil, err
+	}
+	return ret, nil
+	// {
+	//   "description": "Set whether VMs in this subnet can access Google services without assigning external IP addresses through Cloudpath.",
+	//   "httpMethod": "POST",
+	//   "id": "compute.subnetworks.setPrivateIpGoogleAccess",
+	//   "parameterOrder": [
+	//     "project",
+	//     "region",
+	//     "subnetwork"
+	//   ],
+	//   "parameters": {
+	//     "project": {
+	//       "description": "Project ID for this request.",
+	//       "location": "path",
+	//       "pattern": "(?:(?:[-a-z0-9]{1,63}\\.)*(?:[a-z](?:[-a-z0-9]{0,61}[a-z0-9])?):)?(?:[0-9]{1,19}|(?:[a-z0-9](?:[-a-z0-9]{0,61}[a-z0-9])?))",
+	//       "required": true,
+	//       "type": "string"
+	//     },
+	//     "region": {
+	//       "description": "Name of the region scoping this request.",
+	//       "location": "path",
+	//       "pattern": "[a-z](?:[-a-z0-9]{0,61}[a-z0-9])?",
+	//       "required": true,
+	//       "type": "string"
+	//     },
+	//     "subnetwork": {
+	//       "description": "Name of the Subnetwork resource.",
+	//       "location": "path",
+	//       "pattern": "[a-z](?:[-a-z0-9]{0,61}[a-z0-9])?",
+	//       "required": true,
+	//       "type": "string"
+	//     }
+	//   },
+	//   "path": "{project}/regions/{region}/subnetworks/{subnetwork}/setPrivateIpGoogleAccess",
+	//   "request": {
+	//     "$ref": "SubnetworksSetPrivateIpGoogleAccessRequest"
+	//   },
+	//   "response": {
+	//     "$ref": "Operation"
+	//   },
+	//   "scopes": [
+	//     "https://www.googleapis.com/auth/cloud-platform",
+	//     "https://www.googleapis.com/auth/compute"
+	//   ]
+	// }
+
+}
+
 // method id "compute.subnetworks.testIamPermissions":
 
 type SubnetworksTestIamPermissionsCall struct {
@@ -60639,7 +60668,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	var body io.Reader = nil
 	body, err := googleapi.WithoutDataWrapper.JSONReader(c.testpermissionsrequest)
 	if err != nil {
@@ -60795,7 +60823,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	var body io.Reader = nil
 	c.urlParams_.Set("alt", alt)
 	urls := googleapi.ResolveRelative(c.s.BasePath, "{project}/global/targetHttpProxies/{targetHttpProxy}")
@@ -60945,7 +60972,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	if c.ifNoneMatch_ != "" {
 		reqHeaders.Set("If-None-Match", c.ifNoneMatch_)
 	}
@@ -61088,7 +61114,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	var body io.Reader = nil
 	body, err := googleapi.WithoutDataWrapper.JSONReader(c.targethttpproxy)
 	if err != nil {
@@ -61303,7 +61328,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	if c.ifNoneMatch_ != "" {
 		reqHeaders.Set("If-None-Match", c.ifNoneMatch_)
 	}
@@ -61482,7 +61506,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	var body io.Reader = nil
 	body, err := googleapi.WithoutDataWrapper.JSONReader(c.urlmapreference)
 	if err != nil {
@@ -61630,7 +61653,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	var body io.Reader = nil
 	body, err := googleapi.WithoutDataWrapper.JSONReader(c.testpermissionsrequest)
 	if err != nil {
@@ -61776,7 +61798,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	var body io.Reader = nil
 	c.urlParams_.Set("alt", alt)
 	urls := googleapi.ResolveRelative(c.s.BasePath, "{project}/global/targetHttpsProxies/{targetHttpsProxy}")
@@ -61925,7 +61946,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	if c.ifNoneMatch_ != "" {
 		reqHeaders.Set("If-None-Match", c.ifNoneMatch_)
 	}
@@ -62067,7 +62087,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	var body io.Reader = nil
 	body, err := googleapi.WithoutDataWrapper.JSONReader(c.targethttpsproxy)
 	if err != nil {
@@ -62281,7 +62300,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	if c.ifNoneMatch_ != "" {
 		reqHeaders.Set("If-None-Match", c.ifNoneMatch_)
 	}
@@ -62459,7 +62477,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	var body io.Reader = nil
 	body, err := googleapi.WithoutDataWrapper.JSONReader(c.targethttpsproxiessetsslcertificatesrequest)
 	if err != nil {
@@ -62606,7 +62623,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	var body io.Reader = nil
 	body, err := googleapi.WithoutDataWrapper.JSONReader(c.urlmapreference)
 	if err != nil {
@@ -62754,7 +62770,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	var body io.Reader = nil
 	body, err := googleapi.WithoutDataWrapper.JSONReader(c.testpermissionsrequest)
 	if err != nil {
@@ -62978,7 +62993,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	if c.ifNoneMatch_ != "" {
 		reqHeaders.Set("If-None-Match", c.ifNoneMatch_)
 	}
@@ -63157,7 +63171,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	var body io.Reader = nil
 	c.urlParams_.Set("alt", alt)
 	urls := googleapi.ResolveRelative(c.s.BasePath, "{project}/zones/{zone}/targetInstances/{targetInstance}")
@@ -63318,7 +63331,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	if c.ifNoneMatch_ != "" {
 		reqHeaders.Set("If-None-Match", c.ifNoneMatch_)
 	}
@@ -63472,7 +63484,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	var body io.Reader = nil
 	body, err := googleapi.WithoutDataWrapper.JSONReader(c.targetinstance)
 	if err != nil {
@@ -63698,7 +63709,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	if c.ifNoneMatch_ != "" {
 		reqHeaders.Set("If-None-Match", c.ifNoneMatch_)
 	}
@@ -63888,7 +63898,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	var body io.Reader = nil
 	body, err := googleapi.WithoutDataWrapper.JSONReader(c.testpermissionsrequest)
 	if err != nil {
@@ -64048,7 +64057,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	var body io.Reader = nil
 	body, err := googleapi.WithoutDataWrapper.JSONReader(c.targetpoolsaddhealthcheckrequest)
 	if err != nil {
@@ -64207,7 +64215,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	var body io.Reader = nil
 	body, err := googleapi.WithoutDataWrapper.JSONReader(c.targetpoolsaddinstancerequest)
 	if err != nil {
@@ -64439,7 +64446,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	if c.ifNoneMatch_ != "" {
 		reqHeaders.Set("If-None-Match", c.ifNoneMatch_)
 	}
@@ -64618,7 +64624,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	var body io.Reader = nil
 	c.urlParams_.Set("alt", alt)
 	urls := googleapi.ResolveRelative(c.s.BasePath, "{project}/regions/{region}/targetPools/{targetPool}")
@@ -64779,7 +64784,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	if c.ifNoneMatch_ != "" {
 		reqHeaders.Set("If-None-Match", c.ifNoneMatch_)
 	}
@@ -64935,7 +64939,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	var body io.Reader = nil
 	body, err := googleapi.WithoutDataWrapper.JSONReader(c.instancereference)
 	if err != nil {
@@ -65094,7 +65097,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	var body io.Reader = nil
 	body, err := googleapi.WithoutDataWrapper.JSONReader(c.targetpool)
 	if err != nil {
@@ -65320,7 +65322,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	if c.ifNoneMatch_ != "" {
 		reqHeaders.Set("If-None-Match", c.ifNoneMatch_)
 	}
@@ -65510,7 +65511,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	var body io.Reader = nil
 	body, err := googleapi.WithoutDataWrapper.JSONReader(c.targetpoolsremovehealthcheckrequest)
 	if err != nil {
@@ -65669,7 +65669,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	var body io.Reader = nil
 	body, err := googleapi.WithoutDataWrapper.JSONReader(c.targetpoolsremoveinstancerequest)
 	if err != nil {
@@ -65835,7 +65834,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	var body io.Reader = nil
 	body, err := googleapi.WithoutDataWrapper.JSONReader(c.targetreference)
 	if err != nil {
@@ -66000,7 +65998,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	var body io.Reader = nil
 	body, err := googleapi.WithoutDataWrapper.JSONReader(c.testpermissionsrequest)
 	if err != nil {
@@ -66155,7 +66152,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	var body io.Reader = nil
 	c.urlParams_.Set("alt", alt)
 	urls := googleapi.ResolveRelative(c.s.BasePath, "{project}/global/targetSslProxies/{targetSslProxy}")
@@ -66304,7 +66300,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	if c.ifNoneMatch_ != "" {
 		reqHeaders.Set("If-None-Match", c.ifNoneMatch_)
 	}
@@ -66446,7 +66441,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	var body io.Reader = nil
 	body, err := googleapi.WithoutDataWrapper.JSONReader(c.targetsslproxy)
 	if err != nil {
@@ -66660,7 +66654,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	if c.ifNoneMatch_ != "" {
 		reqHeaders.Set("If-None-Match", c.ifNoneMatch_)
 	}
@@ -66838,7 +66831,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	var body io.Reader = nil
 	body, err := googleapi.WithoutDataWrapper.JSONReader(c.targetsslproxiessetbackendservicerequest)
 	if err != nil {
@@ -66985,7 +66977,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	var body io.Reader = nil
 	body, err := googleapi.WithoutDataWrapper.JSONReader(c.targetsslproxiessetproxyheaderrequest)
 	if err != nil {
@@ -67132,7 +67123,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	var body io.Reader = nil
 	body, err := googleapi.WithoutDataWrapper.JSONReader(c.targetsslproxiessetsslcertificatesrequest)
 	if err != nil {
@@ -67280,7 +67270,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	var body io.Reader = nil
 	body, err := googleapi.WithoutDataWrapper.JSONReader(c.testpermissionsrequest)
 	if err != nil {
@@ -67426,7 +67415,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	var body io.Reader = nil
 	c.urlParams_.Set("alt", alt)
 	urls := googleapi.ResolveRelative(c.s.BasePath, "{project}/global/targetTcpProxies/{targetTcpProxy}")
@@ -67575,7 +67563,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	if c.ifNoneMatch_ != "" {
 		reqHeaders.Set("If-None-Match", c.ifNoneMatch_)
 	}
@@ -67717,7 +67704,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	var body io.Reader = nil
 	body, err := googleapi.WithoutDataWrapper.JSONReader(c.targettcpproxy)
 	if err != nil {
@@ -67931,7 +67917,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	if c.ifNoneMatch_ != "" {
 		reqHeaders.Set("If-None-Match", c.ifNoneMatch_)
 	}
@@ -68109,7 +68094,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	var body io.Reader = nil
 	body, err := googleapi.WithoutDataWrapper.JSONReader(c.targettcpproxiessetbackendservicerequest)
 	if err != nil {
@@ -68256,7 +68240,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	var body io.Reader = nil
 	body, err := googleapi.WithoutDataWrapper.JSONReader(c.targettcpproxiessetproxyheaderrequest)
 	if err != nil {
@@ -68478,7 +68461,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	if c.ifNoneMatch_ != "" {
 		reqHeaders.Set("If-None-Match", c.ifNoneMatch_)
 	}
@@ -68656,7 +68638,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	var body io.Reader = nil
 	c.urlParams_.Set("alt", alt)
 	urls := googleapi.ResolveRelative(c.s.BasePath, "{project}/regions/{region}/targetVpnGateways/{targetVpnGateway}")
@@ -68816,7 +68797,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	if c.ifNoneMatch_ != "" {
 		reqHeaders.Set("If-None-Match", c.ifNoneMatch_)
 	}
@@ -68969,7 +68949,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	var body io.Reader = nil
 	body, err := googleapi.WithoutDataWrapper.JSONReader(c.targetvpngateway)
 	if err != nil {
@@ -69194,7 +69173,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	if c.ifNoneMatch_ != "" {
 		reqHeaders.Set("If-None-Match", c.ifNoneMatch_)
 	}
@@ -69384,7 +69362,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	var body io.Reader = nil
 	body, err := googleapi.WithoutDataWrapper.JSONReader(c.testpermissionsrequest)
 	if err != nil {
@@ -69540,7 +69517,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	var body io.Reader = nil
 	c.urlParams_.Set("alt", alt)
 	urls := googleapi.ResolveRelative(c.s.BasePath, "{project}/global/urlMaps/{urlMap}")
@@ -69690,7 +69666,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	if c.ifNoneMatch_ != "" {
 		reqHeaders.Set("If-None-Match", c.ifNoneMatch_)
 	}
@@ -69833,7 +69808,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	var body io.Reader = nil
 	body, err := googleapi.WithoutDataWrapper.JSONReader(c.urlmap)
 	if err != nil {
@@ -69972,7 +69946,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	var body io.Reader = nil
 	body, err := googleapi.WithoutDataWrapper.JSONReader(c.cacheinvalidationrule)
 	if err != nil {
@@ -70196,7 +70169,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	if c.ifNoneMatch_ != "" {
 		reqHeaders.Set("If-None-Match", c.ifNoneMatch_)
 	}
@@ -70376,7 +70348,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	var body io.Reader = nil
 	body, err := googleapi.WithoutDataWrapper.JSONReader(c.urlmap)
 	if err != nil {
@@ -70524,7 +70495,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	var body io.Reader = nil
 	body, err := googleapi.WithoutDataWrapper.JSONReader(c.testpermissionsrequest)
 	if err != nil {
@@ -70674,7 +70644,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	var body io.Reader = nil
 	body, err := googleapi.WithoutDataWrapper.JSONReader(c.urlmap)
 	if err != nil {
@@ -70824,7 +70793,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	var body io.Reader = nil
 	body, err := googleapi.WithoutDataWrapper.JSONReader(c.urlmapsvalidaterequest)
 	if err != nil {
@@ -71046,7 +71014,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	if c.ifNoneMatch_ != "" {
 		reqHeaders.Set("If-None-Match", c.ifNoneMatch_)
 	}
@@ -71224,7 +71191,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	var body io.Reader = nil
 	c.urlParams_.Set("alt", alt)
 	urls := googleapi.ResolveRelative(c.s.BasePath, "{project}/regions/{region}/vpnTunnels/{vpnTunnel}")
@@ -71384,7 +71350,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	if c.ifNoneMatch_ != "" {
 		reqHeaders.Set("If-None-Match", c.ifNoneMatch_)
 	}
@@ -71537,7 +71502,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	var body io.Reader = nil
 	body, err := googleapi.WithoutDataWrapper.JSONReader(c.vpntunnel)
 	if err != nil {
@@ -71762,7 +71726,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	if c.ifNoneMatch_ != "" {
 		reqHeaders.Set("If-None-Match", c.ifNoneMatch_)
 	}
@@ -71952,7 +71915,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	var body io.Reader = nil
 	body, err := googleapi.WithoutDataWrapper.JSONReader(c.testpermissionsrequest)
 	if err != nil {
@@ -72110,7 +72072,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	var body io.Reader = nil
 	c.urlParams_.Set("alt", alt)
 	urls := googleapi.ResolveRelative(c.s.BasePath, "{project}/zones/{zone}/operations/{operation}")
@@ -72242,7 +72203,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	if c.ifNoneMatch_ != "" {
 		reqHeaders.Set("If-None-Match", c.ifNoneMatch_)
 	}
@@ -72473,7 +72433,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	if c.ifNoneMatch_ != "" {
 		reqHeaders.Set("If-None-Match", c.ifNoneMatch_)
 	}
@@ -72671,7 +72630,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	if c.ifNoneMatch_ != "" {
 		reqHeaders.Set("If-None-Match", c.ifNoneMatch_)
 	}
@@ -72891,7 +72849,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	if c.ifNoneMatch_ != "" {
 		reqHeaders.Set("If-None-Match", c.ifNoneMatch_)
 	}
diff --git a/compute/v1/compute-gen.go b/compute/v1/compute-gen.go
index 069eddd..eff95db 100644
--- a/compute/v1/compute-gen.go
+++ b/compute/v1/compute-gen.go
@@ -119,10 +119,9 @@
 }
 
 type Service struct {
-	client                    *http.Client
-	BasePath                  string // API endpoint base URL
-	UserAgent                 string // optional additional User-Agent fragment
-	GoogleClientHeaderElement string // client header fragment, for Google use only
+	client    *http.Client
+	BasePath  string // API endpoint base URL
+	UserAgent string // optional additional User-Agent fragment
 
 	Addresses *AddressesService
 
@@ -220,10 +219,6 @@
 	return googleapi.UserAgent + " " + s.UserAgent
 }
 
-func (s *Service) clientHeader() string {
-	return gensupport.GoogleClientHeader("20170210", s.GoogleClientHeaderElement)
-}
-
 func NewAddressesService(s *Service) *AddressesService {
 	rs := &AddressesService{s: s}
 	return rs
@@ -13332,7 +13327,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	if c.ifNoneMatch_ != "" {
 		reqHeaders.Set("If-None-Match", c.ifNoneMatch_)
 	}
@@ -13511,7 +13505,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	var body io.Reader = nil
 	c.urlParams_.Set("alt", alt)
 	urls := googleapi.ResolveRelative(c.s.BasePath, "{project}/regions/{region}/addresses/{address}")
@@ -13671,7 +13664,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	if c.ifNoneMatch_ != "" {
 		reqHeaders.Set("If-None-Match", c.ifNoneMatch_)
 	}
@@ -13825,7 +13817,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	var body io.Reader = nil
 	body, err := googleapi.WithoutDataWrapper.JSONReader(c.address)
 	if err != nil {
@@ -14051,7 +14042,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	if c.ifNoneMatch_ != "" {
 		reqHeaders.Set("If-None-Match", c.ifNoneMatch_)
 	}
@@ -14313,7 +14303,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	if c.ifNoneMatch_ != "" {
 		reqHeaders.Set("If-None-Match", c.ifNoneMatch_)
 	}
@@ -14491,7 +14480,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	var body io.Reader = nil
 	c.urlParams_.Set("alt", alt)
 	urls := googleapi.ResolveRelative(c.s.BasePath, "{project}/zones/{zone}/autoscalers/{autoscaler}")
@@ -14651,7 +14639,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	if c.ifNoneMatch_ != "" {
 		reqHeaders.Set("If-None-Match", c.ifNoneMatch_)
 	}
@@ -14804,7 +14791,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	var body io.Reader = nil
 	body, err := googleapi.WithoutDataWrapper.JSONReader(c.autoscaler)
 	if err != nil {
@@ -15029,7 +15015,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	if c.ifNoneMatch_ != "" {
 		reqHeaders.Set("If-None-Match", c.ifNoneMatch_)
 	}
@@ -15218,7 +15203,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	var body io.Reader = nil
 	body, err := googleapi.WithoutDataWrapper.JSONReader(c.autoscaler2)
 	if err != nil {
@@ -15381,7 +15365,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	var body io.Reader = nil
 	body, err := googleapi.WithoutDataWrapper.JSONReader(c.autoscaler)
 	if err != nil {
@@ -15532,7 +15515,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	var body io.Reader = nil
 	c.urlParams_.Set("alt", alt)
 	urls := googleapi.ResolveRelative(c.s.BasePath, "{project}/global/backendBuckets/{backendBucket}")
@@ -15681,7 +15663,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	if c.ifNoneMatch_ != "" {
 		reqHeaders.Set("If-None-Match", c.ifNoneMatch_)
 	}
@@ -15823,7 +15804,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	var body io.Reader = nil
 	body, err := googleapi.WithoutDataWrapper.JSONReader(c.backendbucket)
 	if err != nil {
@@ -16037,7 +16017,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	if c.ifNoneMatch_ != "" {
 		reqHeaders.Set("If-None-Match", c.ifNoneMatch_)
 	}
@@ -16216,7 +16195,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	var body io.Reader = nil
 	body, err := googleapi.WithoutDataWrapper.JSONReader(c.backendbucket)
 	if err != nil {
@@ -16364,7 +16342,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	var body io.Reader = nil
 	body, err := googleapi.WithoutDataWrapper.JSONReader(c.backendbucket)
 	if err != nil {
@@ -16587,7 +16564,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	if c.ifNoneMatch_ != "" {
 		reqHeaders.Set("If-None-Match", c.ifNoneMatch_)
 	}
@@ -16764,7 +16740,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	var body io.Reader = nil
 	c.urlParams_.Set("alt", alt)
 	urls := googleapi.ResolveRelative(c.s.BasePath, "{project}/global/backendServices/{backendService}")
@@ -16914,7 +16889,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	if c.ifNoneMatch_ != "" {
 		reqHeaders.Set("If-None-Match", c.ifNoneMatch_)
 	}
@@ -17059,7 +17033,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	var body io.Reader = nil
 	body, err := googleapi.WithoutDataWrapper.JSONReader(c.resourcegroupreference)
 	if err != nil {
@@ -17208,7 +17181,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	var body io.Reader = nil
 	body, err := googleapi.WithoutDataWrapper.JSONReader(c.backendservice)
 	if err != nil {
@@ -17423,7 +17395,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	if c.ifNoneMatch_ != "" {
 		reqHeaders.Set("If-None-Match", c.ifNoneMatch_)
 	}
@@ -17606,7 +17577,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	var body io.Reader = nil
 	body, err := googleapi.WithoutDataWrapper.JSONReader(c.backendservice)
 	if err != nil {
@@ -17757,7 +17727,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	var body io.Reader = nil
 	body, err := googleapi.WithoutDataWrapper.JSONReader(c.backendservice)
 	if err != nil {
@@ -17980,7 +17949,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	if c.ifNoneMatch_ != "" {
 		reqHeaders.Set("If-None-Match", c.ifNoneMatch_)
 	}
@@ -18171,7 +18139,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	if c.ifNoneMatch_ != "" {
 		reqHeaders.Set("If-None-Match", c.ifNoneMatch_)
 	}
@@ -18402,7 +18369,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	if c.ifNoneMatch_ != "" {
 		reqHeaders.Set("If-None-Match", c.ifNoneMatch_)
 	}
@@ -18665,7 +18631,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	if c.ifNoneMatch_ != "" {
 		reqHeaders.Set("If-None-Match", c.ifNoneMatch_)
 	}
@@ -18852,7 +18817,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	var body io.Reader = nil
 	body, err := googleapi.WithoutDataWrapper.JSONReader(c.snapshot)
 	if err != nil {
@@ -19016,7 +18980,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	var body io.Reader = nil
 	c.urlParams_.Set("alt", alt)
 	urls := googleapi.ResolveRelative(c.s.BasePath, "{project}/zones/{zone}/disks/{disk}")
@@ -19176,7 +19139,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	if c.ifNoneMatch_ != "" {
 		reqHeaders.Set("If-None-Match", c.ifNoneMatch_)
 	}
@@ -19340,7 +19302,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	var body io.Reader = nil
 	body, err := googleapi.WithoutDataWrapper.JSONReader(c.disk)
 	if err != nil {
@@ -19571,7 +19532,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	if c.ifNoneMatch_ != "" {
 		reqHeaders.Set("If-None-Match", c.ifNoneMatch_)
 	}
@@ -19760,7 +19720,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	var body io.Reader = nil
 	body, err := googleapi.WithoutDataWrapper.JSONReader(c.disksresizerequest)
 	if err != nil {
@@ -19915,7 +19874,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	var body io.Reader = nil
 	c.urlParams_.Set("alt", alt)
 	urls := googleapi.ResolveRelative(c.s.BasePath, "{project}/global/firewalls/{firewall}")
@@ -20064,7 +20022,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	if c.ifNoneMatch_ != "" {
 		reqHeaders.Set("If-None-Match", c.ifNoneMatch_)
 	}
@@ -20207,7 +20164,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	var body io.Reader = nil
 	body, err := googleapi.WithoutDataWrapper.JSONReader(c.firewall)
 	if err != nil {
@@ -20422,7 +20378,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	if c.ifNoneMatch_ != "" {
 		reqHeaders.Set("If-None-Match", c.ifNoneMatch_)
 	}
@@ -20602,7 +20557,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	var body io.Reader = nil
 	body, err := googleapi.WithoutDataWrapper.JSONReader(c.firewall2)
 	if err != nil {
@@ -20751,7 +20705,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	var body io.Reader = nil
 	body, err := googleapi.WithoutDataWrapper.JSONReader(c.firewall2)
 	if err != nil {
@@ -20974,7 +20927,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	if c.ifNoneMatch_ != "" {
 		reqHeaders.Set("If-None-Match", c.ifNoneMatch_)
 	}
@@ -21153,7 +21105,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	var body io.Reader = nil
 	c.urlParams_.Set("alt", alt)
 	urls := googleapi.ResolveRelative(c.s.BasePath, "{project}/regions/{region}/forwardingRules/{forwardingRule}")
@@ -21313,7 +21264,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	if c.ifNoneMatch_ != "" {
 		reqHeaders.Set("If-None-Match", c.ifNoneMatch_)
 	}
@@ -21467,7 +21417,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	var body io.Reader = nil
 	body, err := googleapi.WithoutDataWrapper.JSONReader(c.forwardingrule)
 	if err != nil {
@@ -21693,7 +21642,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	if c.ifNoneMatch_ != "" {
 		reqHeaders.Set("If-None-Match", c.ifNoneMatch_)
 	}
@@ -21884,7 +21832,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	var body io.Reader = nil
 	body, err := googleapi.WithoutDataWrapper.JSONReader(c.targetreference)
 	if err != nil {
@@ -22039,7 +21986,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	var body io.Reader = nil
 	c.urlParams_.Set("alt", alt)
 	urls := googleapi.ResolveRelative(c.s.BasePath, "{project}/global/addresses/{address}")
@@ -22189,7 +22135,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	if c.ifNoneMatch_ != "" {
 		reqHeaders.Set("If-None-Match", c.ifNoneMatch_)
 	}
@@ -22332,7 +22277,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	var body io.Reader = nil
 	body, err := googleapi.WithoutDataWrapper.JSONReader(c.address)
 	if err != nil {
@@ -22546,7 +22490,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	if c.ifNoneMatch_ != "" {
 		reqHeaders.Set("If-None-Match", c.ifNoneMatch_)
 	}
@@ -22723,7 +22666,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	var body io.Reader = nil
 	c.urlParams_.Set("alt", alt)
 	urls := googleapi.ResolveRelative(c.s.BasePath, "{project}/global/forwardingRules/{forwardingRule}")
@@ -22873,7 +22815,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	if c.ifNoneMatch_ != "" {
 		reqHeaders.Set("If-None-Match", c.ifNoneMatch_)
 	}
@@ -23016,7 +22957,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	var body io.Reader = nil
 	body, err := googleapi.WithoutDataWrapper.JSONReader(c.forwardingrule)
 	if err != nil {
@@ -23231,7 +23171,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	if c.ifNoneMatch_ != "" {
 		reqHeaders.Set("If-None-Match", c.ifNoneMatch_)
 	}
@@ -23411,7 +23350,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	var body io.Reader = nil
 	body, err := googleapi.WithoutDataWrapper.JSONReader(c.targetreference)
 	if err != nil {
@@ -23634,7 +23572,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	if c.ifNoneMatch_ != "" {
 		reqHeaders.Set("If-None-Match", c.ifNoneMatch_)
 	}
@@ -23811,7 +23748,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	var body io.Reader = nil
 	c.urlParams_.Set("alt", alt)
 	urls := googleapi.ResolveRelative(c.s.BasePath, "{project}/global/operations/{operation}")
@@ -23933,7 +23869,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	if c.ifNoneMatch_ != "" {
 		reqHeaders.Set("If-None-Match", c.ifNoneMatch_)
 	}
@@ -24153,7 +24088,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	if c.ifNoneMatch_ != "" {
 		reqHeaders.Set("If-None-Match", c.ifNoneMatch_)
 	}
@@ -24329,7 +24263,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	var body io.Reader = nil
 	c.urlParams_.Set("alt", alt)
 	urls := googleapi.ResolveRelative(c.s.BasePath, "{project}/global/healthChecks/{healthCheck}")
@@ -24478,7 +24411,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	if c.ifNoneMatch_ != "" {
 		reqHeaders.Set("If-None-Match", c.ifNoneMatch_)
 	}
@@ -24620,7 +24552,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	var body io.Reader = nil
 	body, err := googleapi.WithoutDataWrapper.JSONReader(c.healthcheck)
 	if err != nil {
@@ -24834,7 +24765,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	if c.ifNoneMatch_ != "" {
 		reqHeaders.Set("If-None-Match", c.ifNoneMatch_)
 	}
@@ -25014,7 +24944,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	var body io.Reader = nil
 	body, err := googleapi.WithoutDataWrapper.JSONReader(c.healthcheck)
 	if err != nil {
@@ -25162,7 +25091,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	var body io.Reader = nil
 	body, err := googleapi.WithoutDataWrapper.JSONReader(c.healthcheck)
 	if err != nil {
@@ -25308,7 +25236,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	var body io.Reader = nil
 	c.urlParams_.Set("alt", alt)
 	urls := googleapi.ResolveRelative(c.s.BasePath, "{project}/global/httpHealthChecks/{httpHealthCheck}")
@@ -25458,7 +25385,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	if c.ifNoneMatch_ != "" {
 		reqHeaders.Set("If-None-Match", c.ifNoneMatch_)
 	}
@@ -25601,7 +25527,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	var body io.Reader = nil
 	body, err := googleapi.WithoutDataWrapper.JSONReader(c.httphealthcheck)
 	if err != nil {
@@ -25816,7 +25741,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	if c.ifNoneMatch_ != "" {
 		reqHeaders.Set("If-None-Match", c.ifNoneMatch_)
 	}
@@ -25997,7 +25921,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	var body io.Reader = nil
 	body, err := googleapi.WithoutDataWrapper.JSONReader(c.httphealthcheck)
 	if err != nil {
@@ -26146,7 +26069,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	var body io.Reader = nil
 	body, err := googleapi.WithoutDataWrapper.JSONReader(c.httphealthcheck)
 	if err != nil {
@@ -26291,7 +26213,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	var body io.Reader = nil
 	c.urlParams_.Set("alt", alt)
 	urls := googleapi.ResolveRelative(c.s.BasePath, "{project}/global/httpsHealthChecks/{httpsHealthCheck}")
@@ -26440,7 +26361,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	if c.ifNoneMatch_ != "" {
 		reqHeaders.Set("If-None-Match", c.ifNoneMatch_)
 	}
@@ -26582,7 +26502,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	var body io.Reader = nil
 	body, err := googleapi.WithoutDataWrapper.JSONReader(c.httpshealthcheck)
 	if err != nil {
@@ -26796,7 +26715,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	if c.ifNoneMatch_ != "" {
 		reqHeaders.Set("If-None-Match", c.ifNoneMatch_)
 	}
@@ -26976,7 +26894,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	var body io.Reader = nil
 	body, err := googleapi.WithoutDataWrapper.JSONReader(c.httpshealthcheck)
 	if err != nil {
@@ -27124,7 +27041,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	var body io.Reader = nil
 	body, err := googleapi.WithoutDataWrapper.JSONReader(c.httpshealthcheck)
 	if err != nil {
@@ -27270,7 +27186,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	var body io.Reader = nil
 	c.urlParams_.Set("alt", alt)
 	urls := googleapi.ResolveRelative(c.s.BasePath, "{project}/global/images/{image}")
@@ -27413,7 +27328,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	var body io.Reader = nil
 	body, err := googleapi.WithoutDataWrapper.JSONReader(c.deprecationstatus)
 	if err != nil {
@@ -27571,7 +27485,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	if c.ifNoneMatch_ != "" {
 		reqHeaders.Set("If-None-Match", c.ifNoneMatch_)
 	}
@@ -27724,7 +27637,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	if c.ifNoneMatch_ != "" {
 		reqHeaders.Set("If-None-Match", c.ifNoneMatch_)
 	}
@@ -27867,7 +27779,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	var body io.Reader = nil
 	body, err := googleapi.WithoutDataWrapper.JSONReader(c.image)
 	if err != nil {
@@ -28090,7 +28001,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	if c.ifNoneMatch_ != "" {
 		reqHeaders.Set("If-None-Match", c.ifNoneMatch_)
 	}
@@ -28278,7 +28188,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	var body io.Reader = nil
 	body, err := googleapi.WithoutDataWrapper.JSONReader(c.instancegroupmanagersabandoninstancesrequest)
 	if err != nil {
@@ -28508,7 +28417,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	if c.ifNoneMatch_ != "" {
 		reqHeaders.Set("If-None-Match", c.ifNoneMatch_)
 	}
@@ -28690,7 +28598,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	var body io.Reader = nil
 	c.urlParams_.Set("alt", alt)
 	urls := googleapi.ResolveRelative(c.s.BasePath, "{project}/zones/{zone}/instanceGroupManagers/{instanceGroupManager}")
@@ -28845,7 +28752,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	var body io.Reader = nil
 	body, err := googleapi.WithoutDataWrapper.JSONReader(c.instancegroupmanagersdeleteinstancesrequest)
 	if err != nil {
@@ -29012,7 +28918,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	if c.ifNoneMatch_ != "" {
 		reqHeaders.Set("If-None-Match", c.ifNoneMatch_)
 	}
@@ -29168,7 +29073,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	var body io.Reader = nil
 	body, err := googleapi.WithoutDataWrapper.JSONReader(c.instancegroupmanager)
 	if err != nil {
@@ -29392,7 +29296,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	if c.ifNoneMatch_ != "" {
 		reqHeaders.Set("If-None-Match", c.ifNoneMatch_)
 	}
@@ -29607,7 +29510,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	var body io.Reader = nil
 	c.urlParams_.Set("alt", alt)
 	urls := googleapi.ResolveRelative(c.s.BasePath, "{project}/zones/{zone}/instanceGroupManagers/{instanceGroupManager}/listManagedInstances")
@@ -29783,7 +29685,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	var body io.Reader = nil
 	body, err := googleapi.WithoutDataWrapper.JSONReader(c.instancegroupmanagersrecreateinstancesrequest)
 	if err != nil {
@@ -29944,7 +29845,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	var body io.Reader = nil
 	c.urlParams_.Set("alt", alt)
 	urls := googleapi.ResolveRelative(c.s.BasePath, "{project}/zones/{zone}/instanceGroupManagers/{instanceGroupManager}/resize")
@@ -30102,7 +30002,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	var body io.Reader = nil
 	body, err := googleapi.WithoutDataWrapper.JSONReader(c.instancegroupmanagerssetinstancetemplaterequest)
 	if err != nil {
@@ -30264,7 +30163,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	var body io.Reader = nil
 	body, err := googleapi.WithoutDataWrapper.JSONReader(c.instancegroupmanagerssettargetpoolsrequest)
 	if err != nil {
@@ -30422,7 +30320,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	var body io.Reader = nil
 	body, err := googleapi.WithoutDataWrapper.JSONReader(c.instancegroupsaddinstancesrequest)
 	if err != nil {
@@ -30652,7 +30549,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	if c.ifNoneMatch_ != "" {
 		reqHeaders.Set("If-None-Match", c.ifNoneMatch_)
 	}
@@ -30833,7 +30729,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	var body io.Reader = nil
 	c.urlParams_.Set("alt", alt)
 	urls := googleapi.ResolveRelative(c.s.BasePath, "{project}/zones/{zone}/instanceGroups/{instanceGroup}")
@@ -30991,7 +30886,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	if c.ifNoneMatch_ != "" {
 		reqHeaders.Set("If-None-Match", c.ifNoneMatch_)
 	}
@@ -31142,7 +31036,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	var body io.Reader = nil
 	body, err := googleapi.WithoutDataWrapper.JSONReader(c.instancegroup)
 	if err != nil {
@@ -31366,7 +31259,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	if c.ifNoneMatch_ != "" {
 		reqHeaders.Set("If-None-Match", c.ifNoneMatch_)
 	}
@@ -31622,7 +31514,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	var body io.Reader = nil
 	body, err := googleapi.WithoutDataWrapper.JSONReader(c.instancegroupslistinstancesrequest)
 	if err != nil {
@@ -31824,7 +31715,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	var body io.Reader = nil
 	body, err := googleapi.WithoutDataWrapper.JSONReader(c.instancegroupsremoveinstancesrequest)
 	if err != nil {
@@ -31980,7 +31870,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	var body io.Reader = nil
 	body, err := googleapi.WithoutDataWrapper.JSONReader(c.instancegroupssetnamedportsrequest)
 	if err != nil {
@@ -32137,7 +32026,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	var body io.Reader = nil
 	c.urlParams_.Set("alt", alt)
 	urls := googleapi.ResolveRelative(c.s.BasePath, "{project}/global/instanceTemplates/{instanceTemplate}")
@@ -32287,7 +32175,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	if c.ifNoneMatch_ != "" {
 		reqHeaders.Set("If-None-Match", c.ifNoneMatch_)
 	}
@@ -32433,7 +32320,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	var body io.Reader = nil
 	body, err := googleapi.WithoutDataWrapper.JSONReader(c.instancetemplate)
 	if err != nil {
@@ -32648,7 +32534,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	if c.ifNoneMatch_ != "" {
 		reqHeaders.Set("If-None-Match", c.ifNoneMatch_)
 	}
@@ -32831,7 +32716,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	var body io.Reader = nil
 	body, err := googleapi.WithoutDataWrapper.JSONReader(c.accessconfig)
 	if err != nil {
@@ -33070,7 +32954,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	if c.ifNoneMatch_ != "" {
 		reqHeaders.Set("If-None-Match", c.ifNoneMatch_)
 	}
@@ -33251,7 +33134,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	var body io.Reader = nil
 	body, err := googleapi.WithoutDataWrapper.JSONReader(c.attacheddisk)
 	if err != nil {
@@ -33409,7 +33291,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	var body io.Reader = nil
 	c.urlParams_.Set("alt", alt)
 	urls := googleapi.ResolveRelative(c.s.BasePath, "{project}/zones/{zone}/instances/{instance}")
@@ -33561,7 +33442,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	var body io.Reader = nil
 	c.urlParams_.Set("alt", alt)
 	urls := googleapi.ResolveRelative(c.s.BasePath, "{project}/zones/{zone}/instances/{instance}/deleteAccessConfig")
@@ -33725,7 +33605,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	var body io.Reader = nil
 	c.urlParams_.Set("alt", alt)
 	urls := googleapi.ResolveRelative(c.s.BasePath, "{project}/zones/{zone}/instances/{instance}/detachDisk")
@@ -33893,7 +33772,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	if c.ifNoneMatch_ != "" {
 		reqHeaders.Set("If-None-Match", c.ifNoneMatch_)
 	}
@@ -34076,7 +33954,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	if c.ifNoneMatch_ != "" {
 		reqHeaders.Set("If-None-Match", c.ifNoneMatch_)
 	}
@@ -34245,7 +34122,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	var body io.Reader = nil
 	body, err := googleapi.WithoutDataWrapper.JSONReader(c.instance)
 	if err != nil {
@@ -34471,7 +34347,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	if c.ifNoneMatch_ != "" {
 		reqHeaders.Set("If-None-Match", c.ifNoneMatch_)
 	}
@@ -34659,7 +34534,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	var body io.Reader = nil
 	c.urlParams_.Set("alt", alt)
 	urls := googleapi.ResolveRelative(c.s.BasePath, "{project}/zones/{zone}/instances/{instance}/reset")
@@ -34811,7 +34685,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	var body io.Reader = nil
 	c.urlParams_.Set("alt", alt)
 	urls := googleapi.ResolveRelative(c.s.BasePath, "{project}/zones/{zone}/instances/{instance}/setDiskAutoDelete")
@@ -34977,7 +34850,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	var body io.Reader = nil
 	body, err := googleapi.WithoutDataWrapper.JSONReader(c.instancessetmachinetyperequest)
 	if err != nil {
@@ -35137,7 +35009,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	var body io.Reader = nil
 	body, err := googleapi.WithoutDataWrapper.JSONReader(c.metadata)
 	if err != nil {
@@ -35296,7 +35167,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	var body io.Reader = nil
 	body, err := googleapi.WithoutDataWrapper.JSONReader(c.scheduling)
 	if err != nil {
@@ -35456,7 +35326,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	var body io.Reader = nil
 	body, err := googleapi.WithoutDataWrapper.JSONReader(c.instancessetserviceaccountrequest)
 	if err != nil {
@@ -35616,7 +35485,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	var body io.Reader = nil
 	body, err := googleapi.WithoutDataWrapper.JSONReader(c.tags)
 	if err != nil {
@@ -35775,7 +35643,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	var body io.Reader = nil
 	c.urlParams_.Set("alt", alt)
 	urls := googleapi.ResolveRelative(c.s.BasePath, "{project}/zones/{zone}/instances/{instance}/start")
@@ -35927,7 +35794,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	var body io.Reader = nil
 	body, err := googleapi.WithoutDataWrapper.JSONReader(c.instancesstartwithencryptionkeyrequest)
 	if err != nil {
@@ -36090,7 +35956,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	var body io.Reader = nil
 	c.urlParams_.Set("alt", alt)
 	urls := googleapi.ResolveRelative(c.s.BasePath, "{project}/zones/{zone}/instances/{instance}/stop")
@@ -36249,7 +36114,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	if c.ifNoneMatch_ != "" {
 		reqHeaders.Set("If-None-Match", c.ifNoneMatch_)
 	}
@@ -36468,7 +36332,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	if c.ifNoneMatch_ != "" {
 		reqHeaders.Set("If-None-Match", c.ifNoneMatch_)
 	}
@@ -36659,7 +36522,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	if c.ifNoneMatch_ != "" {
 		reqHeaders.Set("If-None-Match", c.ifNoneMatch_)
 	}
@@ -36890,7 +36752,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	if c.ifNoneMatch_ != "" {
 		reqHeaders.Set("If-None-Match", c.ifNoneMatch_)
 	}
@@ -37076,7 +36937,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	var body io.Reader = nil
 	c.urlParams_.Set("alt", alt)
 	urls := googleapi.ResolveRelative(c.s.BasePath, "{project}/global/networks/{network}")
@@ -37226,7 +37086,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	if c.ifNoneMatch_ != "" {
 		reqHeaders.Set("If-None-Match", c.ifNoneMatch_)
 	}
@@ -37369,7 +37228,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	var body io.Reader = nil
 	body, err := googleapi.WithoutDataWrapper.JSONReader(c.network)
 	if err != nil {
@@ -37584,7 +37442,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	if c.ifNoneMatch_ != "" {
 		reqHeaders.Set("If-None-Match", c.ifNoneMatch_)
 	}
@@ -37761,7 +37618,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	var body io.Reader = nil
 	c.urlParams_.Set("alt", alt)
 	urls := googleapi.ResolveRelative(c.s.BasePath, "{project}/global/networks/{network}/switchToCustomMode")
@@ -37908,7 +37764,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	if c.ifNoneMatch_ != "" {
 		reqHeaders.Set("If-None-Match", c.ifNoneMatch_)
 	}
@@ -38040,7 +37895,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	var body io.Reader = nil
 	body, err := googleapi.WithoutDataWrapper.JSONReader(c.diskmoverequest)
 	if err != nil {
@@ -38177,7 +38031,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	var body io.Reader = nil
 	body, err := googleapi.WithoutDataWrapper.JSONReader(c.instancemoverequest)
 	if err != nil {
@@ -38315,7 +38168,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	var body io.Reader = nil
 	body, err := googleapi.WithoutDataWrapper.JSONReader(c.metadata)
 	if err != nil {
@@ -38455,7 +38307,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	var body io.Reader = nil
 	body, err := googleapi.WithoutDataWrapper.JSONReader(c.usageexportlocation)
 	if err != nil {
@@ -38596,7 +38447,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	var body io.Reader = nil
 	c.urlParams_.Set("alt", alt)
 	urls := googleapi.ResolveRelative(c.s.BasePath, "{project}/regions/{region}/autoscalers/{autoscaler}")
@@ -38755,7 +38605,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	if c.ifNoneMatch_ != "" {
 		reqHeaders.Set("If-None-Match", c.ifNoneMatch_)
 	}
@@ -38908,7 +38757,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	var body io.Reader = nil
 	body, err := googleapi.WithoutDataWrapper.JSONReader(c.autoscaler)
 	if err != nil {
@@ -39133,7 +38981,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	if c.ifNoneMatch_ != "" {
 		reqHeaders.Set("If-None-Match", c.ifNoneMatch_)
 	}
@@ -39322,7 +39169,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	var body io.Reader = nil
 	body, err := googleapi.WithoutDataWrapper.JSONReader(c.autoscaler2)
 	if err != nil {
@@ -39485,7 +39331,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	var body io.Reader = nil
 	body, err := googleapi.WithoutDataWrapper.JSONReader(c.autoscaler)
 	if err != nil {
@@ -39638,7 +39483,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	var body io.Reader = nil
 	c.urlParams_.Set("alt", alt)
 	urls := googleapi.ResolveRelative(c.s.BasePath, "{project}/regions/{region}/backendServices/{backendService}")
@@ -39797,7 +39641,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	if c.ifNoneMatch_ != "" {
 		reqHeaders.Set("If-None-Match", c.ifNoneMatch_)
 	}
@@ -39952,7 +39795,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	var body io.Reader = nil
 	body, err := googleapi.WithoutDataWrapper.JSONReader(c.resourcegroupreference)
 	if err != nil {
@@ -40112,7 +39954,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	var body io.Reader = nil
 	body, err := googleapi.WithoutDataWrapper.JSONReader(c.backendservice)
 	if err != nil {
@@ -40337,7 +40178,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	if c.ifNoneMatch_ != "" {
 		reqHeaders.Set("If-None-Match", c.ifNoneMatch_)
 	}
@@ -40530,7 +40370,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	var body io.Reader = nil
 	body, err := googleapi.WithoutDataWrapper.JSONReader(c.backendservice)
 	if err != nil {
@@ -40691,7 +40530,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	var body io.Reader = nil
 	body, err := googleapi.WithoutDataWrapper.JSONReader(c.backendservice)
 	if err != nil {
@@ -40857,7 +40695,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	var body io.Reader = nil
 	body, err := googleapi.WithoutDataWrapper.JSONReader(c.regioninstancegroupmanagersabandoninstancesrequest)
 	if err != nil {
@@ -41012,7 +40849,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	var body io.Reader = nil
 	c.urlParams_.Set("alt", alt)
 	urls := googleapi.ResolveRelative(c.s.BasePath, "{project}/regions/{region}/instanceGroupManagers/{instanceGroupManager}")
@@ -41167,7 +41003,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	var body io.Reader = nil
 	body, err := googleapi.WithoutDataWrapper.JSONReader(c.regioninstancegroupmanagersdeleteinstancesrequest)
 	if err != nil {
@@ -41333,7 +41168,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	if c.ifNoneMatch_ != "" {
 		reqHeaders.Set("If-None-Match", c.ifNoneMatch_)
 	}
@@ -41489,7 +41323,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	var body io.Reader = nil
 	body, err := googleapi.WithoutDataWrapper.JSONReader(c.instancegroupmanager)
 	if err != nil {
@@ -41713,7 +41546,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	if c.ifNoneMatch_ != "" {
 		reqHeaders.Set("If-None-Match", c.ifNoneMatch_)
 	}
@@ -41926,7 +41758,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	var body io.Reader = nil
 	c.urlParams_.Set("alt", alt)
 	urls := googleapi.ResolveRelative(c.s.BasePath, "{project}/regions/{region}/instanceGroupManagers/{instanceGroupManager}/listManagedInstances")
@@ -42102,7 +41933,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	var body io.Reader = nil
 	body, err := googleapi.WithoutDataWrapper.JSONReader(c.regioninstancegroupmanagersrecreaterequest)
 	if err != nil {
@@ -42264,7 +42094,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	var body io.Reader = nil
 	c.urlParams_.Set("alt", alt)
 	urls := googleapi.ResolveRelative(c.s.BasePath, "{project}/regions/{region}/instanceGroupManagers/{instanceGroupManager}/resize")
@@ -42423,7 +42252,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	var body io.Reader = nil
 	body, err := googleapi.WithoutDataWrapper.JSONReader(c.regioninstancegroupmanagerssettemplaterequest)
 	if err != nil {
@@ -42581,7 +42409,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	var body io.Reader = nil
 	body, err := googleapi.WithoutDataWrapper.JSONReader(c.regioninstancegroupmanagerssettargetpoolsrequest)
 	if err != nil {
@@ -42746,7 +42573,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	if c.ifNoneMatch_ != "" {
 		reqHeaders.Set("If-None-Match", c.ifNoneMatch_)
 	}
@@ -42974,7 +42800,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	if c.ifNoneMatch_ != "" {
 		reqHeaders.Set("If-None-Match", c.ifNoneMatch_)
 	}
@@ -43233,7 +43058,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	var body io.Reader = nil
 	body, err := googleapi.WithoutDataWrapper.JSONReader(c.regioninstancegroupslistinstancesrequest)
 	if err != nil {
@@ -43436,7 +43260,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	var body io.Reader = nil
 	body, err := googleapi.WithoutDataWrapper.JSONReader(c.regioninstancegroupssetnamedportsrequest)
 	if err != nil {
@@ -43591,7 +43414,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	var body io.Reader = nil
 	c.urlParams_.Set("alt", alt)
 	urls := googleapi.ResolveRelative(c.s.BasePath, "{project}/regions/{region}/operations/{operation}")
@@ -43723,7 +43545,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	if c.ifNoneMatch_ != "" {
 		reqHeaders.Set("If-None-Match", c.ifNoneMatch_)
 	}
@@ -43954,7 +43775,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	if c.ifNoneMatch_ != "" {
 		reqHeaders.Set("If-None-Match", c.ifNoneMatch_)
 	}
@@ -44152,7 +43972,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	if c.ifNoneMatch_ != "" {
 		reqHeaders.Set("If-None-Match", c.ifNoneMatch_)
 	}
@@ -44372,7 +44191,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	if c.ifNoneMatch_ != "" {
 		reqHeaders.Set("If-None-Match", c.ifNoneMatch_)
 	}
@@ -44625,7 +44443,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	if c.ifNoneMatch_ != "" {
 		reqHeaders.Set("If-None-Match", c.ifNoneMatch_)
 	}
@@ -44803,7 +44620,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	var body io.Reader = nil
 	c.urlParams_.Set("alt", alt)
 	urls := googleapi.ResolveRelative(c.s.BasePath, "{project}/regions/{region}/routers/{router}")
@@ -44963,7 +44779,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	if c.ifNoneMatch_ != "" {
 		reqHeaders.Set("If-None-Match", c.ifNoneMatch_)
 	}
@@ -45127,7 +44942,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	if c.ifNoneMatch_ != "" {
 		reqHeaders.Set("If-None-Match", c.ifNoneMatch_)
 	}
@@ -45280,7 +45094,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	var body io.Reader = nil
 	body, err := googleapi.WithoutDataWrapper.JSONReader(c.router)
 	if err != nil {
@@ -45505,7 +45318,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	if c.ifNoneMatch_ != "" {
 		reqHeaders.Set("If-None-Match", c.ifNoneMatch_)
 	}
@@ -45695,7 +45507,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	var body io.Reader = nil
 	body, err := googleapi.WithoutDataWrapper.JSONReader(c.router2)
 	if err != nil {
@@ -45855,7 +45666,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	var body io.Reader = nil
 	body, err := googleapi.WithoutDataWrapper.JSONReader(c.router2)
 	if err != nil {
@@ -46015,7 +45825,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	var body io.Reader = nil
 	body, err := googleapi.WithoutDataWrapper.JSONReader(c.router2)
 	if err != nil {
@@ -46170,7 +45979,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	var body io.Reader = nil
 	c.urlParams_.Set("alt", alt)
 	urls := googleapi.ResolveRelative(c.s.BasePath, "{project}/global/routes/{route}")
@@ -46320,7 +46128,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	if c.ifNoneMatch_ != "" {
 		reqHeaders.Set("If-None-Match", c.ifNoneMatch_)
 	}
@@ -46463,7 +46270,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	var body io.Reader = nil
 	body, err := googleapi.WithoutDataWrapper.JSONReader(c.route)
 	if err != nil {
@@ -46678,7 +46484,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	if c.ifNoneMatch_ != "" {
 		reqHeaders.Set("If-None-Match", c.ifNoneMatch_)
 	}
@@ -46861,7 +46666,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	var body io.Reader = nil
 	c.urlParams_.Set("alt", alt)
 	urls := googleapi.ResolveRelative(c.s.BasePath, "{project}/global/snapshots/{snapshot}")
@@ -47011,7 +46815,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	if c.ifNoneMatch_ != "" {
 		reqHeaders.Set("If-None-Match", c.ifNoneMatch_)
 	}
@@ -47231,7 +47034,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	if c.ifNoneMatch_ != "" {
 		reqHeaders.Set("If-None-Match", c.ifNoneMatch_)
 	}
@@ -47407,7 +47209,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	var body io.Reader = nil
 	c.urlParams_.Set("alt", alt)
 	urls := googleapi.ResolveRelative(c.s.BasePath, "{project}/global/sslCertificates/{sslCertificate}")
@@ -47556,7 +47357,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	if c.ifNoneMatch_ != "" {
 		reqHeaders.Set("If-None-Match", c.ifNoneMatch_)
 	}
@@ -47698,7 +47498,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	var body io.Reader = nil
 	body, err := googleapi.WithoutDataWrapper.JSONReader(c.sslcertificate)
 	if err != nil {
@@ -47912,7 +47711,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	if c.ifNoneMatch_ != "" {
 		reqHeaders.Set("If-None-Match", c.ifNoneMatch_)
 	}
@@ -48165,7 +47963,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	if c.ifNoneMatch_ != "" {
 		reqHeaders.Set("If-None-Match", c.ifNoneMatch_)
 	}
@@ -48343,7 +48140,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	var body io.Reader = nil
 	c.urlParams_.Set("alt", alt)
 	urls := googleapi.ResolveRelative(c.s.BasePath, "{project}/regions/{region}/subnetworks/{subnetwork}")
@@ -48494,7 +48290,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	var body io.Reader = nil
 	body, err := googleapi.WithoutDataWrapper.JSONReader(c.subnetworksexpandipcidrrangerequest)
 	if err != nil {
@@ -48662,7 +48457,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	if c.ifNoneMatch_ != "" {
 		reqHeaders.Set("If-None-Match", c.ifNoneMatch_)
 	}
@@ -48815,7 +48609,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	var body io.Reader = nil
 	body, err := googleapi.WithoutDataWrapper.JSONReader(c.subnetwork)
 	if err != nil {
@@ -49040,7 +48833,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	if c.ifNoneMatch_ != "" {
 		reqHeaders.Set("If-None-Match", c.ifNoneMatch_)
 	}
@@ -49226,7 +49018,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	var body io.Reader = nil
 	c.urlParams_.Set("alt", alt)
 	urls := googleapi.ResolveRelative(c.s.BasePath, "{project}/global/targetHttpProxies/{targetHttpProxy}")
@@ -49376,7 +49167,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	if c.ifNoneMatch_ != "" {
 		reqHeaders.Set("If-None-Match", c.ifNoneMatch_)
 	}
@@ -49519,7 +49309,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	var body io.Reader = nil
 	body, err := googleapi.WithoutDataWrapper.JSONReader(c.targethttpproxy)
 	if err != nil {
@@ -49734,7 +49523,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	if c.ifNoneMatch_ != "" {
 		reqHeaders.Set("If-None-Match", c.ifNoneMatch_)
 	}
@@ -49913,7 +49701,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	var body io.Reader = nil
 	body, err := googleapi.WithoutDataWrapper.JSONReader(c.urlmapreference)
 	if err != nil {
@@ -50058,7 +49845,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	var body io.Reader = nil
 	c.urlParams_.Set("alt", alt)
 	urls := googleapi.ResolveRelative(c.s.BasePath, "{project}/global/targetHttpsProxies/{targetHttpsProxy}")
@@ -50207,7 +49993,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	if c.ifNoneMatch_ != "" {
 		reqHeaders.Set("If-None-Match", c.ifNoneMatch_)
 	}
@@ -50349,7 +50134,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	var body io.Reader = nil
 	body, err := googleapi.WithoutDataWrapper.JSONReader(c.targethttpsproxy)
 	if err != nil {
@@ -50563,7 +50347,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	if c.ifNoneMatch_ != "" {
 		reqHeaders.Set("If-None-Match", c.ifNoneMatch_)
 	}
@@ -50741,7 +50524,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	var body io.Reader = nil
 	body, err := googleapi.WithoutDataWrapper.JSONReader(c.targethttpsproxiessetsslcertificatesrequest)
 	if err != nil {
@@ -50888,7 +50670,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	var body io.Reader = nil
 	body, err := googleapi.WithoutDataWrapper.JSONReader(c.urlmapreference)
 	if err != nil {
@@ -51111,7 +50892,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	if c.ifNoneMatch_ != "" {
 		reqHeaders.Set("If-None-Match", c.ifNoneMatch_)
 	}
@@ -51290,7 +51070,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	var body io.Reader = nil
 	c.urlParams_.Set("alt", alt)
 	urls := googleapi.ResolveRelative(c.s.BasePath, "{project}/zones/{zone}/targetInstances/{targetInstance}")
@@ -51451,7 +51230,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	if c.ifNoneMatch_ != "" {
 		reqHeaders.Set("If-None-Match", c.ifNoneMatch_)
 	}
@@ -51605,7 +51383,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	var body io.Reader = nil
 	body, err := googleapi.WithoutDataWrapper.JSONReader(c.targetinstance)
 	if err != nil {
@@ -51831,7 +51608,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	if c.ifNoneMatch_ != "" {
 		reqHeaders.Set("If-None-Match", c.ifNoneMatch_)
 	}
@@ -52021,7 +51797,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	var body io.Reader = nil
 	body, err := googleapi.WithoutDataWrapper.JSONReader(c.targetpoolsaddhealthcheckrequest)
 	if err != nil {
@@ -52180,7 +51955,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	var body io.Reader = nil
 	body, err := googleapi.WithoutDataWrapper.JSONReader(c.targetpoolsaddinstancerequest)
 	if err != nil {
@@ -52412,7 +52186,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	if c.ifNoneMatch_ != "" {
 		reqHeaders.Set("If-None-Match", c.ifNoneMatch_)
 	}
@@ -52591,7 +52364,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	var body io.Reader = nil
 	c.urlParams_.Set("alt", alt)
 	urls := googleapi.ResolveRelative(c.s.BasePath, "{project}/regions/{region}/targetPools/{targetPool}")
@@ -52752,7 +52524,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	if c.ifNoneMatch_ != "" {
 		reqHeaders.Set("If-None-Match", c.ifNoneMatch_)
 	}
@@ -52908,7 +52679,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	var body io.Reader = nil
 	body, err := googleapi.WithoutDataWrapper.JSONReader(c.instancereference)
 	if err != nil {
@@ -53067,7 +52837,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	var body io.Reader = nil
 	body, err := googleapi.WithoutDataWrapper.JSONReader(c.targetpool)
 	if err != nil {
@@ -53293,7 +53062,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	if c.ifNoneMatch_ != "" {
 		reqHeaders.Set("If-None-Match", c.ifNoneMatch_)
 	}
@@ -53483,7 +53251,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	var body io.Reader = nil
 	body, err := googleapi.WithoutDataWrapper.JSONReader(c.targetpoolsremovehealthcheckrequest)
 	if err != nil {
@@ -53642,7 +53409,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	var body io.Reader = nil
 	body, err := googleapi.WithoutDataWrapper.JSONReader(c.targetpoolsremoveinstancerequest)
 	if err != nil {
@@ -53808,7 +53574,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	var body io.Reader = nil
 	body, err := googleapi.WithoutDataWrapper.JSONReader(c.targetreference)
 	if err != nil {
@@ -53968,7 +53733,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	var body io.Reader = nil
 	c.urlParams_.Set("alt", alt)
 	urls := googleapi.ResolveRelative(c.s.BasePath, "{project}/global/targetSslProxies/{targetSslProxy}")
@@ -54117,7 +53881,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	if c.ifNoneMatch_ != "" {
 		reqHeaders.Set("If-None-Match", c.ifNoneMatch_)
 	}
@@ -54259,7 +54022,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	var body io.Reader = nil
 	body, err := googleapi.WithoutDataWrapper.JSONReader(c.targetsslproxy)
 	if err != nil {
@@ -54473,7 +54235,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	if c.ifNoneMatch_ != "" {
 		reqHeaders.Set("If-None-Match", c.ifNoneMatch_)
 	}
@@ -54651,7 +54412,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	var body io.Reader = nil
 	body, err := googleapi.WithoutDataWrapper.JSONReader(c.targetsslproxiessetbackendservicerequest)
 	if err != nil {
@@ -54798,7 +54558,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	var body io.Reader = nil
 	body, err := googleapi.WithoutDataWrapper.JSONReader(c.targetsslproxiessetproxyheaderrequest)
 	if err != nil {
@@ -54945,7 +54704,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	var body io.Reader = nil
 	body, err := googleapi.WithoutDataWrapper.JSONReader(c.targetsslproxiessetsslcertificatesrequest)
 	if err != nil {
@@ -55167,7 +54925,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	if c.ifNoneMatch_ != "" {
 		reqHeaders.Set("If-None-Match", c.ifNoneMatch_)
 	}
@@ -55345,7 +55102,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	var body io.Reader = nil
 	c.urlParams_.Set("alt", alt)
 	urls := googleapi.ResolveRelative(c.s.BasePath, "{project}/regions/{region}/targetVpnGateways/{targetVpnGateway}")
@@ -55505,7 +55261,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	if c.ifNoneMatch_ != "" {
 		reqHeaders.Set("If-None-Match", c.ifNoneMatch_)
 	}
@@ -55658,7 +55413,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	var body io.Reader = nil
 	body, err := googleapi.WithoutDataWrapper.JSONReader(c.targetvpngateway)
 	if err != nil {
@@ -55883,7 +55637,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	if c.ifNoneMatch_ != "" {
 		reqHeaders.Set("If-None-Match", c.ifNoneMatch_)
 	}
@@ -56069,7 +55822,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	var body io.Reader = nil
 	c.urlParams_.Set("alt", alt)
 	urls := googleapi.ResolveRelative(c.s.BasePath, "{project}/global/urlMaps/{urlMap}")
@@ -56219,7 +55971,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	if c.ifNoneMatch_ != "" {
 		reqHeaders.Set("If-None-Match", c.ifNoneMatch_)
 	}
@@ -56362,7 +56113,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	var body io.Reader = nil
 	body, err := googleapi.WithoutDataWrapper.JSONReader(c.urlmap)
 	if err != nil {
@@ -56501,7 +56251,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	var body io.Reader = nil
 	body, err := googleapi.WithoutDataWrapper.JSONReader(c.cacheinvalidationrule)
 	if err != nil {
@@ -56725,7 +56474,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	if c.ifNoneMatch_ != "" {
 		reqHeaders.Set("If-None-Match", c.ifNoneMatch_)
 	}
@@ -56905,7 +56653,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	var body io.Reader = nil
 	body, err := googleapi.WithoutDataWrapper.JSONReader(c.urlmap)
 	if err != nil {
@@ -57054,7 +56801,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	var body io.Reader = nil
 	body, err := googleapi.WithoutDataWrapper.JSONReader(c.urlmap)
 	if err != nil {
@@ -57204,7 +56950,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	var body io.Reader = nil
 	body, err := googleapi.WithoutDataWrapper.JSONReader(c.urlmapsvalidaterequest)
 	if err != nil {
@@ -57426,7 +57171,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	if c.ifNoneMatch_ != "" {
 		reqHeaders.Set("If-None-Match", c.ifNoneMatch_)
 	}
@@ -57604,7 +57348,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	var body io.Reader = nil
 	c.urlParams_.Set("alt", alt)
 	urls := googleapi.ResolveRelative(c.s.BasePath, "{project}/regions/{region}/vpnTunnels/{vpnTunnel}")
@@ -57764,7 +57507,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	if c.ifNoneMatch_ != "" {
 		reqHeaders.Set("If-None-Match", c.ifNoneMatch_)
 	}
@@ -57917,7 +57659,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	var body io.Reader = nil
 	body, err := googleapi.WithoutDataWrapper.JSONReader(c.vpntunnel)
 	if err != nil {
@@ -58142,7 +57883,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	if c.ifNoneMatch_ != "" {
 		reqHeaders.Set("If-None-Match", c.ifNoneMatch_)
 	}
@@ -58330,7 +58070,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	var body io.Reader = nil
 	c.urlParams_.Set("alt", alt)
 	urls := googleapi.ResolveRelative(c.s.BasePath, "{project}/zones/{zone}/operations/{operation}")
@@ -58462,7 +58201,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	if c.ifNoneMatch_ != "" {
 		reqHeaders.Set("If-None-Match", c.ifNoneMatch_)
 	}
@@ -58693,7 +58431,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	if c.ifNoneMatch_ != "" {
 		reqHeaders.Set("If-None-Match", c.ifNoneMatch_)
 	}
@@ -58891,7 +58628,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	if c.ifNoneMatch_ != "" {
 		reqHeaders.Set("If-None-Match", c.ifNoneMatch_)
 	}
@@ -59111,7 +58847,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	if c.ifNoneMatch_ != "" {
 		reqHeaders.Set("If-None-Match", c.ifNoneMatch_)
 	}
diff --git a/consumersurveys/v2/consumersurveys-gen.go b/consumersurveys/v2/consumersurveys-gen.go
index 20b987a..591b31e 100644
--- a/consumersurveys/v2/consumersurveys-gen.go
+++ b/consumersurveys/v2/consumersurveys-gen.go
@@ -67,10 +67,9 @@
 }
 
 type Service struct {
-	client                    *http.Client
-	BasePath                  string // API endpoint base URL
-	UserAgent                 string // optional additional User-Agent fragment
-	GoogleClientHeaderElement string // client header fragment, for Google use only
+	client    *http.Client
+	BasePath  string // API endpoint base URL
+	UserAgent string // optional additional User-Agent fragment
 
 	Mobileapppanels *MobileapppanelsService
 
@@ -86,10 +85,6 @@
 	return googleapi.UserAgent + " " + s.UserAgent
 }
 
-func (s *Service) clientHeader() string {
-	return gensupport.GoogleClientHeader("20170210", s.GoogleClientHeaderElement)
-}
-
 func NewMobileapppanelsService(s *Service) *MobileapppanelsService {
 	rs := &MobileapppanelsService{s: s}
 	return rs
@@ -843,7 +838,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	if c.ifNoneMatch_ != "" {
 		reqHeaders.Set("If-None-Match", c.ifNoneMatch_)
 	}
@@ -999,7 +993,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	if c.ifNoneMatch_ != "" {
 		reqHeaders.Set("If-None-Match", c.ifNoneMatch_)
 	}
@@ -1133,7 +1126,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	var body io.Reader = nil
 	body, err := googleapi.WithoutDataWrapper.JSONReader(c.mobileapppanel)
 	if err != nil {
@@ -1281,7 +1273,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	if c.ifNoneMatch_ != "" {
 		reqHeaders.Set("If-None-Match", c.ifNoneMatch_)
 	}
@@ -1430,7 +1421,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	var body io.Reader = nil
 	c.urlParams_.Set("alt", alt)
 	urls := googleapi.ResolveRelative(c.s.BasePath, "surveys/{surveyUrlId}")
@@ -1566,7 +1556,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	if c.ifNoneMatch_ != "" {
 		reqHeaders.Set("If-None-Match", c.ifNoneMatch_)
 	}
@@ -1695,7 +1684,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	var body io.Reader = nil
 	body, err := googleapi.WithoutDataWrapper.JSONReader(c.survey)
 	if err != nil {
@@ -1841,7 +1829,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	if c.ifNoneMatch_ != "" {
 		reqHeaders.Set("If-None-Match", c.ifNoneMatch_)
 	}
@@ -1974,7 +1961,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	var body io.Reader = nil
 	body, err := googleapi.WithoutDataWrapper.JSONReader(c.surveysstartrequest)
 	if err != nil {
@@ -2106,7 +2092,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	var body io.Reader = nil
 	c.urlParams_.Set("alt", alt)
 	urls := googleapi.ResolveRelative(c.s.BasePath, "surveys/{resourceId}/stop")
@@ -2233,7 +2218,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	var body io.Reader = nil
 	body, err := googleapi.WithoutDataWrapper.JSONReader(c.survey)
 	if err != nil {
diff --git a/container/v1/container-gen.go b/container/v1/container-gen.go
index c6e0835..a46475e 100644
--- a/container/v1/container-gen.go
+++ b/container/v1/container-gen.go
@@ -61,10 +61,9 @@
 }
 
 type Service struct {
-	client                    *http.Client
-	BasePath                  string // API endpoint base URL
-	UserAgent                 string // optional additional User-Agent fragment
-	GoogleClientHeaderElement string // client header fragment, for Google use only
+	client    *http.Client
+	BasePath  string // API endpoint base URL
+	UserAgent string // optional additional User-Agent fragment
 
 	Projects *ProjectsService
 }
@@ -76,10 +75,6 @@
 	return googleapi.UserAgent + " " + s.UserAgent
 }
 
-func (s *Service) clientHeader() string {
-	return gensupport.GoogleClientHeader("20170210", s.GoogleClientHeaderElement)
-}
-
 func NewProjectsService(s *Service) *ProjectsService {
 	rs := &ProjectsService{s: s}
 	rs.Zones = NewProjectsZonesService(s)
@@ -1270,7 +1265,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	if c.ifNoneMatch_ != "" {
 		reqHeaders.Set("If-None-Match", c.ifNoneMatch_)
 	}
@@ -1417,7 +1411,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	var body io.Reader = nil
 	body, err := googleapi.WithoutDataWrapper.JSONReader(c.createclusterrequest)
 	if err != nil {
@@ -1566,7 +1559,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	var body io.Reader = nil
 	c.urlParams_.Set("alt", alt)
 	urls := googleapi.ResolveRelative(c.s.BasePath, "v1/projects/{projectId}/zones/{zone}/clusters/{clusterId}")
@@ -1721,7 +1713,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	if c.ifNoneMatch_ != "" {
 		reqHeaders.Set("If-None-Match", c.ifNoneMatch_)
 	}
@@ -1878,7 +1869,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	if c.ifNoneMatch_ != "" {
 		reqHeaders.Set("If-None-Match", c.ifNoneMatch_)
 	}
@@ -2019,7 +2009,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	var body io.Reader = nil
 	body, err := googleapi.WithoutDataWrapper.JSONReader(c.updateclusterrequest)
 	if err != nil {
@@ -2173,7 +2162,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	var body io.Reader = nil
 	body, err := googleapi.WithoutDataWrapper.JSONReader(c.createnodepoolrequest)
 	if err != nil {
@@ -2327,7 +2315,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	var body io.Reader = nil
 	c.urlParams_.Set("alt", alt)
 	urls := googleapi.ResolveRelative(c.s.BasePath, "v1/projects/{projectId}/zones/{zone}/clusters/{clusterId}/nodePools/{nodePoolId}")
@@ -2492,7 +2479,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	if c.ifNoneMatch_ != "" {
 		reqHeaders.Set("If-None-Match", c.ifNoneMatch_)
 	}
@@ -2658,7 +2644,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	if c.ifNoneMatch_ != "" {
 		reqHeaders.Set("If-None-Match", c.ifNoneMatch_)
 	}
@@ -2811,7 +2796,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	var body io.Reader = nil
 	body, err := googleapi.WithoutDataWrapper.JSONReader(c.rollbacknodepoolupgraderequest)
 	if err != nil {
@@ -2975,7 +2959,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	var body io.Reader = nil
 	body, err := googleapi.WithoutDataWrapper.JSONReader(c.setnodepoolmanagementrequest)
 	if err != nil {
@@ -3137,7 +3120,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	var body io.Reader = nil
 	body, err := googleapi.WithoutDataWrapper.JSONReader(c.canceloperationrequest)
 	if err != nil {
@@ -3300,7 +3282,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	if c.ifNoneMatch_ != "" {
 		reqHeaders.Set("If-None-Match", c.ifNoneMatch_)
 	}
@@ -3457,7 +3438,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	if c.ifNoneMatch_ != "" {
 		reqHeaders.Set("If-None-Match", c.ifNoneMatch_)
 	}
diff --git a/content/v2/content-gen.go b/content/v2/content-gen.go
index 426efb4..7588aca 100644
--- a/content/v2/content-gen.go
+++ b/content/v2/content-gen.go
@@ -71,10 +71,9 @@
 }
 
 type APIService struct {
-	client                    *http.Client
-	BasePath                  string // API endpoint base URL
-	UserAgent                 string // optional additional User-Agent fragment
-	GoogleClientHeaderElement string // client header fragment, for Google use only
+	client    *http.Client
+	BasePath  string // API endpoint base URL
+	UserAgent string // optional additional User-Agent fragment
 
 	Accounts *AccountsService
 
@@ -106,10 +105,6 @@
 	return googleapi.UserAgent + " " + s.UserAgent
 }
 
-func (s *APIService) clientHeader() string {
-	return gensupport.GoogleClientHeader("20170210", s.GoogleClientHeaderElement)
-}
-
 func NewAccountsService(s *APIService) *AccountsService {
 	rs := &AccountsService{s: s}
 	return rs
@@ -7289,7 +7284,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	if c.ifNoneMatch_ != "" {
 		reqHeaders.Set("If-None-Match", c.ifNoneMatch_)
 	}
@@ -7410,7 +7404,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	var body io.Reader = nil
 	body, err := googleapi.WithoutDataWrapper.JSONReader(c.accountscustombatchrequest)
 	if err != nil {
@@ -7545,7 +7538,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	var body io.Reader = nil
 	c.urlParams_.Set("alt", alt)
 	urls := googleapi.ResolveRelative(c.s.BasePath, "{merchantId}/accounts/{accountId}")
@@ -7672,7 +7664,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	if c.ifNoneMatch_ != "" {
 		reqHeaders.Set("If-None-Match", c.ifNoneMatch_)
 	}
@@ -7819,7 +7810,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	var body io.Reader = nil
 	body, err := googleapi.WithoutDataWrapper.JSONReader(c.account)
 	if err != nil {
@@ -7983,7 +7973,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	if c.ifNoneMatch_ != "" {
 		reqHeaders.Set("If-None-Match", c.ifNoneMatch_)
 	}
@@ -8157,7 +8146,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	var body io.Reader = nil
 	body, err := googleapi.WithoutDataWrapper.JSONReader(c.account)
 	if err != nil {
@@ -8318,7 +8306,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	var body io.Reader = nil
 	body, err := googleapi.WithoutDataWrapper.JSONReader(c.account)
 	if err != nil {
@@ -8473,7 +8460,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	var body io.Reader = nil
 	body, err := googleapi.WithoutDataWrapper.JSONReader(c.accountshippingcustombatchrequest)
 	if err != nil {
@@ -8615,7 +8601,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	if c.ifNoneMatch_ != "" {
 		reqHeaders.Set("If-None-Match", c.ifNoneMatch_)
 	}
@@ -8780,7 +8765,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	if c.ifNoneMatch_ != "" {
 		reqHeaders.Set("If-None-Match", c.ifNoneMatch_)
 	}
@@ -8955,7 +8939,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	var body io.Reader = nil
 	body, err := googleapi.WithoutDataWrapper.JSONReader(c.accountshipping)
 	if err != nil {
@@ -9116,7 +9099,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	var body io.Reader = nil
 	body, err := googleapi.WithoutDataWrapper.JSONReader(c.accountshipping)
 	if err != nil {
@@ -9263,7 +9245,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	var body io.Reader = nil
 	body, err := googleapi.WithoutDataWrapper.JSONReader(c.accountstatusescustombatchrequest)
 	if err != nil {
@@ -9397,7 +9378,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	if c.ifNoneMatch_ != "" {
 		reqHeaders.Set("If-None-Match", c.ifNoneMatch_)
 	}
@@ -9561,7 +9541,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	if c.ifNoneMatch_ != "" {
 		reqHeaders.Set("If-None-Match", c.ifNoneMatch_)
 	}
@@ -9729,7 +9708,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	var body io.Reader = nil
 	body, err := googleapi.WithoutDataWrapper.JSONReader(c.accounttaxcustombatchrequest)
 	if err != nil {
@@ -9870,7 +9848,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	if c.ifNoneMatch_ != "" {
 		reqHeaders.Set("If-None-Match", c.ifNoneMatch_)
 	}
@@ -10034,7 +10011,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	if c.ifNoneMatch_ != "" {
 		reqHeaders.Set("If-None-Match", c.ifNoneMatch_)
 	}
@@ -10209,7 +10185,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	var body io.Reader = nil
 	body, err := googleapi.WithoutDataWrapper.JSONReader(c.accounttax)
 	if err != nil {
@@ -10370,7 +10345,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	var body io.Reader = nil
 	body, err := googleapi.WithoutDataWrapper.JSONReader(c.accounttax)
 	if err != nil {
@@ -10524,7 +10498,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	var body io.Reader = nil
 	body, err := googleapi.WithoutDataWrapper.JSONReader(c.datafeedscustombatchrequest)
 	if err != nil {
@@ -10658,7 +10631,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	var body io.Reader = nil
 	c.urlParams_.Set("alt", alt)
 	urls := googleapi.ResolveRelative(c.s.BasePath, "{merchantId}/datafeeds/{datafeedId}")
@@ -10781,7 +10753,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	if c.ifNoneMatch_ != "" {
 		reqHeaders.Set("If-None-Match", c.ifNoneMatch_)
 	}
@@ -10926,7 +10897,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	var body io.Reader = nil
 	body, err := googleapi.WithoutDataWrapper.JSONReader(c.datafeed)
 	if err != nil {
@@ -11089,7 +11059,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	if c.ifNoneMatch_ != "" {
 		reqHeaders.Set("If-None-Match", c.ifNoneMatch_)
 	}
@@ -11262,7 +11231,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	var body io.Reader = nil
 	body, err := googleapi.WithoutDataWrapper.JSONReader(c.datafeed)
 	if err != nil {
@@ -11419,7 +11387,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	var body io.Reader = nil
 	body, err := googleapi.WithoutDataWrapper.JSONReader(c.datafeed)
 	if err != nil {
@@ -11564,7 +11531,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	var body io.Reader = nil
 	body, err := googleapi.WithoutDataWrapper.JSONReader(c.datafeedstatusescustombatchrequest)
 	if err != nil {
@@ -11697,7 +11663,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	if c.ifNoneMatch_ != "" {
 		reqHeaders.Set("If-None-Match", c.ifNoneMatch_)
 	}
@@ -11859,7 +11824,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	if c.ifNoneMatch_ != "" {
 		reqHeaders.Set("If-None-Match", c.ifNoneMatch_)
 	}
@@ -12029,7 +11993,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	var body io.Reader = nil
 	body, err := googleapi.WithoutDataWrapper.JSONReader(c.inventorycustombatchrequest)
 	if err != nil {
@@ -12170,7 +12133,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	var body io.Reader = nil
 	body, err := googleapi.WithoutDataWrapper.JSONReader(c.inventorysetrequest)
 	if err != nil {
@@ -12329,7 +12291,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	var body io.Reader = nil
 	body, err := googleapi.WithoutDataWrapper.JSONReader(c.ordersacknowledgerequest)
 	if err != nil {
@@ -12474,7 +12435,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	var body io.Reader = nil
 	c.urlParams_.Set("alt", alt)
 	urls := googleapi.ResolveRelative(c.s.BasePath, "{merchantId}/testorders/{orderId}/advance")
@@ -12612,7 +12572,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	var body io.Reader = nil
 	body, err := googleapi.WithoutDataWrapper.JSONReader(c.orderscancelrequest)
 	if err != nil {
@@ -12758,7 +12717,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	var body io.Reader = nil
 	body, err := googleapi.WithoutDataWrapper.JSONReader(c.orderscancellineitemrequest)
 	if err != nil {
@@ -12902,7 +12860,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	var body io.Reader = nil
 	body, err := googleapi.WithoutDataWrapper.JSONReader(c.orderscreatetestorderrequest)
 	if err != nil {
@@ -13037,7 +12994,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	var body io.Reader = nil
 	body, err := googleapi.WithoutDataWrapper.JSONReader(c.orderscustombatchrequest)
 	if err != nil {
@@ -13169,7 +13125,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	if c.ifNoneMatch_ != "" {
 		reqHeaders.Set("If-None-Match", c.ifNoneMatch_)
 	}
@@ -13319,7 +13274,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	if c.ifNoneMatch_ != "" {
 		reqHeaders.Set("If-None-Match", c.ifNoneMatch_)
 	}
@@ -13471,7 +13425,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	if c.ifNoneMatch_ != "" {
 		reqHeaders.Set("If-None-Match", c.ifNoneMatch_)
 	}
@@ -13716,7 +13669,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	if c.ifNoneMatch_ != "" {
 		reqHeaders.Set("If-None-Match", c.ifNoneMatch_)
 	}
@@ -13941,7 +13893,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	var body io.Reader = nil
 	body, err := googleapi.WithoutDataWrapper.JSONReader(c.ordersrefundrequest)
 	if err != nil {
@@ -14087,7 +14038,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	var body io.Reader = nil
 	body, err := googleapi.WithoutDataWrapper.JSONReader(c.ordersreturnlineitemrequest)
 	if err != nil {
@@ -14233,7 +14183,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	var body io.Reader = nil
 	body, err := googleapi.WithoutDataWrapper.JSONReader(c.ordersshiplineitemsrequest)
 	if err != nil {
@@ -14379,7 +14328,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	var body io.Reader = nil
 	body, err := googleapi.WithoutDataWrapper.JSONReader(c.ordersupdatemerchantorderidrequest)
 	if err != nil {
@@ -14526,7 +14474,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	var body io.Reader = nil
 	body, err := googleapi.WithoutDataWrapper.JSONReader(c.ordersupdateshipmentrequest)
 	if err != nil {
@@ -14676,7 +14623,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	var body io.Reader = nil
 	body, err := googleapi.WithoutDataWrapper.JSONReader(c.productscustombatchrequest)
 	if err != nil {
@@ -14811,7 +14757,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	var body io.Reader = nil
 	c.urlParams_.Set("alt", alt)
 	urls := googleapi.ResolveRelative(c.s.BasePath, "{merchantId}/products/{productId}")
@@ -14935,7 +14880,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	if c.ifNoneMatch_ != "" {
 		reqHeaders.Set("If-None-Match", c.ifNoneMatch_)
 	}
@@ -15083,7 +15027,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	var body io.Reader = nil
 	body, err := googleapi.WithoutDataWrapper.JSONReader(c.product)
 	if err != nil {
@@ -15256,7 +15199,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	if c.ifNoneMatch_ != "" {
 		reqHeaders.Set("If-None-Match", c.ifNoneMatch_)
 	}
@@ -15423,7 +15365,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	var body io.Reader = nil
 	body, err := googleapi.WithoutDataWrapper.JSONReader(c.productstatusescustombatchrequest)
 	if err != nil {
@@ -15556,7 +15497,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	if c.ifNoneMatch_ != "" {
 		reqHeaders.Set("If-None-Match", c.ifNoneMatch_)
 	}
@@ -15729,7 +15669,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	if c.ifNoneMatch_ != "" {
 		reqHeaders.Set("If-None-Match", c.ifNoneMatch_)
 	}
@@ -15902,7 +15841,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	var body io.Reader = nil
 	body, err := googleapi.WithoutDataWrapper.JSONReader(c.shippingsettingscustombatchrequest)
 	if err != nil {
@@ -16044,7 +15982,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	if c.ifNoneMatch_ != "" {
 		reqHeaders.Set("If-None-Match", c.ifNoneMatch_)
 	}
@@ -16193,7 +16130,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	if c.ifNoneMatch_ != "" {
 		reqHeaders.Set("If-None-Match", c.ifNoneMatch_)
 	}
@@ -16351,7 +16287,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	if c.ifNoneMatch_ != "" {
 		reqHeaders.Set("If-None-Match", c.ifNoneMatch_)
 	}
@@ -16526,7 +16461,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	var body io.Reader = nil
 	body, err := googleapi.WithoutDataWrapper.JSONReader(c.shippingsettings)
 	if err != nil {
@@ -16687,7 +16621,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	var body io.Reader = nil
 	body, err := googleapi.WithoutDataWrapper.JSONReader(c.shippingsettings)
 	if err != nil {
diff --git a/content/v2sandbox/content-gen.go b/content/v2sandbox/content-gen.go
index 751a4f4..5c3ffa2 100644
--- a/content/v2sandbox/content-gen.go
+++ b/content/v2sandbox/content-gen.go
@@ -61,10 +61,9 @@
 }
 
 type APIService struct {
-	client                    *http.Client
-	BasePath                  string // API endpoint base URL
-	UserAgent                 string // optional additional User-Agent fragment
-	GoogleClientHeaderElement string // client header fragment, for Google use only
+	client    *http.Client
+	BasePath  string // API endpoint base URL
+	UserAgent string // optional additional User-Agent fragment
 
 	Orders *OrdersService
 }
@@ -76,10 +75,6 @@
 	return googleapi.UserAgent + " " + s.UserAgent
 }
 
-func (s *APIService) clientHeader() string {
-	return gensupport.GoogleClientHeader("20170210", s.GoogleClientHeaderElement)
-}
-
 func NewOrdersService(s *APIService) *OrdersService {
 	rs := &OrdersService{s: s}
 	return rs
@@ -2483,7 +2478,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	var body io.Reader = nil
 	body, err := googleapi.WithoutDataWrapper.JSONReader(c.ordersacknowledgerequest)
 	if err != nil {
@@ -2628,7 +2622,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	var body io.Reader = nil
 	c.urlParams_.Set("alt", alt)
 	urls := googleapi.ResolveRelative(c.s.BasePath, "{merchantId}/testorders/{orderId}/advance")
@@ -2766,7 +2759,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	var body io.Reader = nil
 	body, err := googleapi.WithoutDataWrapper.JSONReader(c.orderscancelrequest)
 	if err != nil {
@@ -2912,7 +2904,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	var body io.Reader = nil
 	body, err := googleapi.WithoutDataWrapper.JSONReader(c.orderscancellineitemrequest)
 	if err != nil {
@@ -3056,7 +3047,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	var body io.Reader = nil
 	body, err := googleapi.WithoutDataWrapper.JSONReader(c.orderscreatetestorderrequest)
 	if err != nil {
@@ -3191,7 +3181,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	var body io.Reader = nil
 	body, err := googleapi.WithoutDataWrapper.JSONReader(c.orderscustombatchrequest)
 	if err != nil {
@@ -3323,7 +3312,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	if c.ifNoneMatch_ != "" {
 		reqHeaders.Set("If-None-Match", c.ifNoneMatch_)
 	}
@@ -3473,7 +3461,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	if c.ifNoneMatch_ != "" {
 		reqHeaders.Set("If-None-Match", c.ifNoneMatch_)
 	}
@@ -3625,7 +3612,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	if c.ifNoneMatch_ != "" {
 		reqHeaders.Set("If-None-Match", c.ifNoneMatch_)
 	}
@@ -3870,7 +3856,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	if c.ifNoneMatch_ != "" {
 		reqHeaders.Set("If-None-Match", c.ifNoneMatch_)
 	}
@@ -4095,7 +4080,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	var body io.Reader = nil
 	body, err := googleapi.WithoutDataWrapper.JSONReader(c.ordersrefundrequest)
 	if err != nil {
@@ -4241,7 +4225,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	var body io.Reader = nil
 	body, err := googleapi.WithoutDataWrapper.JSONReader(c.ordersreturnlineitemrequest)
 	if err != nil {
@@ -4387,7 +4370,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	var body io.Reader = nil
 	body, err := googleapi.WithoutDataWrapper.JSONReader(c.ordersshiplineitemsrequest)
 	if err != nil {
@@ -4533,7 +4515,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	var body io.Reader = nil
 	body, err := googleapi.WithoutDataWrapper.JSONReader(c.ordersupdatemerchantorderidrequest)
 	if err != nil {
@@ -4680,7 +4661,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	var body io.Reader = nil
 	body, err := googleapi.WithoutDataWrapper.JSONReader(c.ordersupdateshipmentrequest)
 	if err != nil {
diff --git a/customsearch/v1/customsearch-gen.go b/customsearch/v1/customsearch-gen.go
index 9c75267..8fb29d4 100644
--- a/customsearch/v1/customsearch-gen.go
+++ b/customsearch/v1/customsearch-gen.go
@@ -55,10 +55,9 @@
 }
 
 type Service struct {
-	client                    *http.Client
-	BasePath                  string // API endpoint base URL
-	UserAgent                 string // optional additional User-Agent fragment
-	GoogleClientHeaderElement string // client header fragment, for Google use only
+	client    *http.Client
+	BasePath  string // API endpoint base URL
+	UserAgent string // optional additional User-Agent fragment
 
 	Cse *CseService
 }
@@ -70,10 +69,6 @@
 	return googleapi.UserAgent + " " + s.UserAgent
 }
 
-func (s *Service) clientHeader() string {
-	return gensupport.GoogleClientHeader("20170210", s.GoogleClientHeaderElement)
-}
-
 func NewCseService(s *Service) *CseService {
 	rs := &CseService{s: s}
 	return rs
@@ -976,7 +971,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	if c.ifNoneMatch_ != "" {
 		reqHeaders.Set("If-None-Match", c.ifNoneMatch_)
 	}
diff --git a/dataflow/v1b3/dataflow-api.json b/dataflow/v1b3/dataflow-api.json
index c02a095..78352ce 100644
--- a/dataflow/v1b3/dataflow-api.json
+++ b/dataflow/v1b3/dataflow-api.json
@@ -1,7 +1,7 @@
 {
-  "revision": "20170303",
-  "documentationLink": "https://cloud.google.com/dataflow",
+  "revision": "20170318",
   "id": "dataflow:v1b3",
+  "documentationLink": "https://cloud.google.com/dataflow",
   "title": "Google Dataflow API",
   "discoveryVersion": "v1",
   "ownerName": "Google",
@@ -9,13 +9,6 @@
     "projects": {
       "methods": {
         "workerMessages": {
-          "flatPath": "v1b3/projects/{projectId}/WorkerMessages",
-          "id": "dataflow.projects.workerMessages",
-          "path": "v1b3/projects/{projectId}/WorkerMessages",
-          "request": {
-            "$ref": "SendWorkerMessagesRequest"
-          },
-          "description": "Send a worker_message to the service.",
           "httpMethod": "POST",
           "parameterOrder": [
             "projectId"
@@ -23,6 +16,10 @@
           "response": {
             "$ref": "SendWorkerMessagesResponse"
           },
+          "scopes": [
+            "https://www.googleapis.com/auth/cloud-platform",
+            "https://www.googleapis.com/auth/userinfo.email"
+          ],
           "parameters": {
             "projectId": {
               "description": "The project to send the WorkerMessages to.",
@@ -31,22 +28,196 @@
               "location": "path"
             }
           },
-          "scopes": [
-            "https://www.googleapis.com/auth/cloud-platform",
-            "https://www.googleapis.com/auth/userinfo.email"
-          ]
+          "flatPath": "v1b3/projects/{projectId}/WorkerMessages",
+          "id": "dataflow.projects.workerMessages",
+          "path": "v1b3/projects/{projectId}/WorkerMessages",
+          "description": "Send a worker_message to the service.",
+          "request": {
+            "$ref": "SendWorkerMessagesRequest"
+          }
         }
       },
       "resources": {
         "locations": {
           "resources": {
             "jobs": {
+              "resources": {
+                "workItems": {
+                  "methods": {
+                    "lease": {
+                      "httpMethod": "POST",
+                      "parameterOrder": [
+                        "projectId",
+                        "location",
+                        "jobId"
+                      ],
+                      "response": {
+                        "$ref": "LeaseWorkItemResponse"
+                      },
+                      "scopes": [
+                        "https://www.googleapis.com/auth/cloud-platform",
+                        "https://www.googleapis.com/auth/userinfo.email"
+                      ],
+                      "parameters": {
+                        "projectId": {
+                          "description": "Identifies the project this worker belongs to.",
+                          "required": true,
+                          "type": "string",
+                          "location": "path"
+                        },
+                        "jobId": {
+                          "description": "Identifies the workflow job this worker belongs to.",
+                          "required": true,
+                          "type": "string",
+                          "location": "path"
+                        },
+                        "location": {
+                          "location": "path",
+                          "description": "The location which contains the WorkItem's job.",
+                          "required": true,
+                          "type": "string"
+                        }
+                      },
+                      "flatPath": "v1b3/projects/{projectId}/locations/{location}/jobs/{jobId}/workItems:lease",
+                      "id": "dataflow.projects.locations.jobs.workItems.lease",
+                      "path": "v1b3/projects/{projectId}/locations/{location}/jobs/{jobId}/workItems:lease",
+                      "description": "Leases a dataflow WorkItem to run.",
+                      "request": {
+                        "$ref": "LeaseWorkItemRequest"
+                      }
+                    },
+                    "reportStatus": {
+                      "request": {
+                        "$ref": "ReportWorkItemStatusRequest"
+                      },
+                      "description": "Reports the status of dataflow WorkItems leased by a worker.",
+                      "response": {
+                        "$ref": "ReportWorkItemStatusResponse"
+                      },
+                      "parameterOrder": [
+                        "projectId",
+                        "location",
+                        "jobId"
+                      ],
+                      "httpMethod": "POST",
+                      "parameters": {
+                        "projectId": {
+                          "description": "The project which owns the WorkItem's job.",
+                          "required": true,
+                          "type": "string",
+                          "location": "path"
+                        },
+                        "jobId": {
+                          "location": "path",
+                          "description": "The job which the WorkItem is part of.",
+                          "required": true,
+                          "type": "string"
+                        },
+                        "location": {
+                          "description": "The location which contains the WorkItem's job.",
+                          "required": true,
+                          "type": "string",
+                          "location": "path"
+                        }
+                      },
+                      "scopes": [
+                        "https://www.googleapis.com/auth/cloud-platform",
+                        "https://www.googleapis.com/auth/userinfo.email"
+                      ],
+                      "flatPath": "v1b3/projects/{projectId}/locations/{location}/jobs/{jobId}/workItems:reportStatus",
+                      "path": "v1b3/projects/{projectId}/locations/{location}/jobs/{jobId}/workItems:reportStatus",
+                      "id": "dataflow.projects.locations.jobs.workItems.reportStatus"
+                    }
+                  }
+                },
+                "messages": {
+                  "methods": {
+                    "list": {
+                      "parameterOrder": [
+                        "projectId",
+                        "location",
+                        "jobId"
+                      ],
+                      "httpMethod": "GET",
+                      "response": {
+                        "$ref": "ListJobMessagesResponse"
+                      },
+                      "scopes": [
+                        "https://www.googleapis.com/auth/cloud-platform",
+                        "https://www.googleapis.com/auth/userinfo.email"
+                      ],
+                      "parameters": {
+                        "jobId": {
+                          "description": "The job to get messages about.",
+                          "required": true,
+                          "type": "string",
+                          "location": "path"
+                        },
+                        "projectId": {
+                          "location": "path",
+                          "description": "A project id.",
+                          "required": true,
+                          "type": "string"
+                        },
+                        "endTime": {
+                          "location": "query",
+                          "description": "Return only messages with timestamps \u003c end_time. The default is now\n(i.e. return up to the latest messages available).",
+                          "format": "google-datetime",
+                          "type": "string"
+                        },
+                        "location": {
+                          "location": "path",
+                          "description": "The location which contains the job specified by job_id.",
+                          "required": true,
+                          "type": "string"
+                        },
+                        "startTime": {
+                          "location": "query",
+                          "description": "If specified, return only messages with timestamps \u003e= start_time.\nThe default is the job creation time (i.e. beginning of messages).",
+                          "format": "google-datetime",
+                          "type": "string"
+                        },
+                        "pageToken": {
+                          "location": "query",
+                          "description": "If supplied, this should be the value of next_page_token returned\nby an earlier call. This will cause the next page of results to\nbe returned.",
+                          "type": "string"
+                        },
+                        "pageSize": {
+                          "description": "If specified, determines the maximum number of messages to\nreturn.  If unspecified, the service may choose an appropriate\ndefault, or may return an arbitrarily large number of results.",
+                          "format": "int32",
+                          "type": "integer",
+                          "location": "query"
+                        },
+                        "minimumImportance": {
+                          "enum": [
+                            "JOB_MESSAGE_IMPORTANCE_UNKNOWN",
+                            "JOB_MESSAGE_DEBUG",
+                            "JOB_MESSAGE_DETAILED",
+                            "JOB_MESSAGE_BASIC",
+                            "JOB_MESSAGE_WARNING",
+                            "JOB_MESSAGE_ERROR"
+                          ],
+                          "description": "Filter to only get messages with importance \u003e= level",
+                          "type": "string",
+                          "location": "query"
+                        }
+                      },
+                      "flatPath": "v1b3/projects/{projectId}/locations/{location}/jobs/{jobId}/messages",
+                      "path": "v1b3/projects/{projectId}/locations/{location}/jobs/{jobId}/messages",
+                      "id": "dataflow.projects.locations.jobs.messages.list",
+                      "description": "Request the job status."
+                    }
+                  }
+                }
+              },
               "methods": {
                 "update": {
-                  "description": "Updates the state of an existing Cloud Dataflow job.",
+                  "path": "v1b3/projects/{projectId}/locations/{location}/jobs/{jobId}",
+                  "id": "dataflow.projects.locations.jobs.update",
                   "request": {
                     "$ref": "Job"
                   },
+                  "description": "Updates the state of an existing Cloud Dataflow job.",
                   "response": {
                     "$ref": "Job"
                   },
@@ -56,39 +227,33 @@
                     "jobId"
                   ],
                   "httpMethod": "PUT",
-                  "scopes": [
-                    "https://www.googleapis.com/auth/cloud-platform",
-                    "https://www.googleapis.com/auth/userinfo.email"
-                  ],
                   "parameters": {
+                    "projectId": {
+                      "location": "path",
+                      "description": "The ID of the Cloud Platform project that the job belongs to.",
+                      "required": true,
+                      "type": "string"
+                    },
+                    "jobId": {
+                      "description": "The job ID.",
+                      "required": true,
+                      "type": "string",
+                      "location": "path"
+                    },
                     "location": {
                       "location": "path",
                       "description": "The location that contains this job.",
                       "required": true,
                       "type": "string"
-                    },
-                    "projectId": {
-                      "description": "The ID of the Cloud Platform project that the job belongs to.",
-                      "required": true,
-                      "type": "string",
-                      "location": "path"
-                    },
-                    "jobId": {
-                      "location": "path",
-                      "description": "The job ID.",
-                      "required": true,
-                      "type": "string"
                     }
                   },
-                  "flatPath": "v1b3/projects/{projectId}/locations/{location}/jobs/{jobId}",
-                  "path": "v1b3/projects/{projectId}/locations/{location}/jobs/{jobId}",
-                  "id": "dataflow.projects.locations.jobs.update"
+                  "scopes": [
+                    "https://www.googleapis.com/auth/cloud-platform",
+                    "https://www.googleapis.com/auth/userinfo.email"
+                  ],
+                  "flatPath": "v1b3/projects/{projectId}/locations/{location}/jobs/{jobId}"
                 },
                 "create": {
-                  "request": {
-                    "$ref": "Job"
-                  },
-                  "description": "Creates a Cloud Dataflow job.",
                   "httpMethod": "POST",
                   "parameterOrder": [
                     "projectId",
@@ -97,7 +262,16 @@
                   "response": {
                     "$ref": "Job"
                   },
+                  "scopes": [
+                    "https://www.googleapis.com/auth/cloud-platform",
+                    "https://www.googleapis.com/auth/userinfo.email"
+                  ],
                   "parameters": {
+                    "replaceJobId": {
+                      "description": "Deprecated. This field is now in the Job message.",
+                      "type": "string",
+                      "location": "query"
+                    },
                     "projectId": {
                       "location": "path",
                       "description": "The ID of the Cloud Platform project that the job belongs to.",
@@ -105,83 +279,80 @@
                       "type": "string"
                     },
                     "view": {
-                      "type": "string",
-                      "location": "query",
                       "enum": [
                         "JOB_VIEW_UNKNOWN",
                         "JOB_VIEW_SUMMARY",
                         "JOB_VIEW_ALL",
                         "JOB_VIEW_DESCRIPTION"
                       ],
-                      "description": "The level of information requested in response."
-                    },
-                    "location": {
-                      "location": "path",
-                      "description": "The location that contains this job.",
-                      "required": true,
-                      "type": "string"
-                    },
-                    "replaceJobId": {
-                      "description": "Deprecated. This field is now in the Job message.",
+                      "description": "The level of information requested in response.",
                       "type": "string",
                       "location": "query"
+                    },
+                    "location": {
+                      "description": "The location that contains this job.",
+                      "required": true,
+                      "type": "string",
+                      "location": "path"
                     }
                   },
-                  "scopes": [
-                    "https://www.googleapis.com/auth/cloud-platform",
-                    "https://www.googleapis.com/auth/userinfo.email"
-                  ],
                   "flatPath": "v1b3/projects/{projectId}/locations/{location}/jobs",
                   "id": "dataflow.projects.locations.jobs.create",
-                  "path": "v1b3/projects/{projectId}/locations/{location}/jobs"
+                  "path": "v1b3/projects/{projectId}/locations/{location}/jobs",
+                  "description": "Creates a Cloud Dataflow job.",
+                  "request": {
+                    "$ref": "Job"
+                  }
                 },
                 "getMetrics": {
-                  "response": {
-                    "$ref": "JobMetrics"
-                  },
+                  "path": "v1b3/projects/{projectId}/locations/{location}/jobs/{jobId}/metrics",
+                  "id": "dataflow.projects.locations.jobs.getMetrics",
+                  "description": "Request the job status.",
                   "parameterOrder": [
                     "projectId",
                     "location",
                     "jobId"
                   ],
                   "httpMethod": "GET",
+                  "response": {
+                    "$ref": "JobMetrics"
+                  },
                   "parameters": {
-                    "startTime": {
-                      "description": "Return only metric data that has changed since this time.\nDefault is to return all information about all metrics for the job.",
-                      "format": "google-datetime",
-                      "type": "string",
-                      "location": "query"
-                    },
-                    "projectId": {
-                      "location": "path",
-                      "description": "A project id.",
-                      "required": true,
-                      "type": "string"
-                    },
-                    "jobId": {
-                      "location": "path",
-                      "description": "The job to get messages for.",
-                      "required": true,
-                      "type": "string"
-                    },
                     "location": {
-                      "location": "path",
                       "description": "The location which contains the job specified by job_id.",
                       "required": true,
+                      "type": "string",
+                      "location": "path"
+                    },
+                    "startTime": {
+                      "location": "query",
+                      "description": "Return only metric data that has changed since this time.\nDefault is to return all information about all metrics for the job.",
+                      "format": "google-datetime",
                       "type": "string"
+                    },
+                    "projectId": {
+                      "description": "A project id.",
+                      "required": true,
+                      "type": "string",
+                      "location": "path"
+                    },
+                    "jobId": {
+                      "description": "The job to get messages for.",
+                      "required": true,
+                      "type": "string",
+                      "location": "path"
                     }
                   },
                   "scopes": [
                     "https://www.googleapis.com/auth/cloud-platform",
                     "https://www.googleapis.com/auth/userinfo.email"
                   ],
-                  "flatPath": "v1b3/projects/{projectId}/locations/{location}/jobs/{jobId}/metrics",
-                  "path": "v1b3/projects/{projectId}/locations/{location}/jobs/{jobId}/metrics",
-                  "id": "dataflow.projects.locations.jobs.getMetrics",
-                  "description": "Request the job status."
+                  "flatPath": "v1b3/projects/{projectId}/locations/{location}/jobs/{jobId}/metrics"
                 },
                 "get": {
-                  "httpMethod": "GET",
+                  "path": "v1b3/projects/{projectId}/locations/{location}/jobs/{jobId}",
+                  "id": "dataflow.projects.locations.jobs.get",
+                  "description": "Gets the state of the specified Cloud Dataflow job.",
                   "response": {
                     "$ref": "Job"
                   },
@@ -190,6 +361,11 @@
                     "location",
                     "jobId"
                   ],
+                  "httpMethod": "GET",
+                  "scopes": [
+                    "https://www.googleapis.com/auth/cloud-platform",
+                    "https://www.googleapis.com/auth/userinfo.email"
+                  ],
                   "parameters": {
                     "projectId": {
                       "description": "The ID of the Cloud Platform project that the job belongs to.",
@@ -198,10 +374,10 @@
                       "location": "path"
                     },
                     "jobId": {
+                      "description": "The job ID.",
                       "required": true,
                       "type": "string",
-                      "location": "path",
-                      "description": "The job ID."
+                      "location": "path"
                     },
                     "view": {
                       "location": "query",
@@ -221,40 +397,27 @@
                       "location": "path"
                     }
                   },
-                  "scopes": [
-                    "https://www.googleapis.com/auth/cloud-platform",
-                    "https://www.googleapis.com/auth/userinfo.email"
-                  ],
-                  "flatPath": "v1b3/projects/{projectId}/locations/{location}/jobs/{jobId}",
-                  "id": "dataflow.projects.locations.jobs.get",
-                  "path": "v1b3/projects/{projectId}/locations/{location}/jobs/{jobId}",
-                  "description": "Gets the state of the specified Cloud Dataflow job."
+                  "flatPath": "v1b3/projects/{projectId}/locations/{location}/jobs/{jobId}"
                 },
                 "list": {
-                  "flatPath": "v1b3/projects/{projectId}/locations/{location}/jobs",
-                  "path": "v1b3/projects/{projectId}/locations/{location}/jobs",
                   "id": "dataflow.projects.locations.jobs.list",
+                  "path": "v1b3/projects/{projectId}/locations/{location}/jobs",
                   "description": "List the jobs of a project.",
+                  "httpMethod": "GET",
+                  "response": {
+                    "$ref": "ListJobsResponse"
+                  },
                   "parameterOrder": [
                     "projectId",
                     "location"
                   ],
-                  "response": {
-                    "$ref": "ListJobsResponse"
-                  },
-                  "httpMethod": "GET",
                   "scopes": [
                     "https://www.googleapis.com/auth/cloud-platform",
                     "https://www.googleapis.com/auth/userinfo.email"
                   ],
                   "parameters": {
-                    "projectId": {
-                      "location": "path",
-                      "description": "The project which owns the jobs.",
-                      "required": true,
-                      "type": "string"
-                    },
                     "filter": {
+                      "location": "query",
                       "enum": [
                         "UNKNOWN",
                         "ALL",
@@ -262,19 +425,18 @@
                         "ACTIVE"
                       ],
                       "description": "The kind of filter to use.",
-                      "type": "string",
-                      "location": "query"
+                      "type": "string"
                     },
                     "location": {
+                      "location": "path",
                       "description": "The location that contains this job.",
                       "required": true,
-                      "type": "string",
-                      "location": "path"
+                      "type": "string"
                     },
                     "pageToken": {
-                      "type": "string",
                       "location": "query",
-                      "description": "Set this to the 'next_page_token' field of a previous response\nto request additional results in a long list."
+                      "description": "Set this to the 'next_page_token' field of a previous response\nto request additional results in a long list.",
+                      "type": "string"
                     },
                     "pageSize": {
                       "location": "query",
@@ -292,177 +454,15 @@
                       ],
                       "description": "Level of information requested in response. Default is `JOB_VIEW_SUMMARY`.",
                       "type": "string"
-                    }
-                  }
-                }
-              },
-              "resources": {
-                "workItems": {
-                  "methods": {
-                    "lease": {
-                      "httpMethod": "POST",
-                      "parameterOrder": [
-                        "projectId",
-                        "location",
-                        "jobId"
-                      ],
-                      "response": {
-                        "$ref": "LeaseWorkItemResponse"
-                      },
-                      "parameters": {
-                        "location": {
-                          "location": "path",
-                          "description": "The location which contains the WorkItem's job.",
-                          "required": true,
-                          "type": "string"
-                        },
-                        "projectId": {
-                          "location": "path",
-                          "description": "Identifies the project this worker belongs to.",
-                          "required": true,
-                          "type": "string"
-                        },
-                        "jobId": {
-                          "required": true,
-                          "type": "string",
-                          "location": "path",
-                          "description": "Identifies the workflow job this worker belongs to."
-                        }
-                      },
-                      "scopes": [
-                        "https://www.googleapis.com/auth/cloud-platform",
-                        "https://www.googleapis.com/auth/userinfo.email"
-                      ],
-                      "flatPath": "v1b3/projects/{projectId}/locations/{location}/jobs/{jobId}/workItems:lease",
-                      "id": "dataflow.projects.locations.jobs.workItems.lease",
-                      "path": "v1b3/projects/{projectId}/locations/{location}/jobs/{jobId}/workItems:lease",
-                      "request": {
-                        "$ref": "LeaseWorkItemRequest"
-                      },
-                      "description": "Leases a dataflow WorkItem to run."
                     },
-                    "reportStatus": {
-                      "description": "Reports the status of dataflow WorkItems leased by a worker.",
-                      "request": {
-                        "$ref": "ReportWorkItemStatusRequest"
-                      },
-                      "response": {
-                        "$ref": "ReportWorkItemStatusResponse"
-                      },
-                      "parameterOrder": [
-                        "projectId",
-                        "location",
-                        "jobId"
-                      ],
-                      "httpMethod": "POST",
-                      "scopes": [
-                        "https://www.googleapis.com/auth/cloud-platform",
-                        "https://www.googleapis.com/auth/userinfo.email"
-                      ],
-                      "parameters": {
-                        "location": {
-                          "location": "path",
-                          "description": "The location which contains the WorkItem's job.",
-                          "required": true,
-                          "type": "string"
-                        },
-                        "projectId": {
-                          "location": "path",
-                          "description": "The project which owns the WorkItem's job.",
-                          "required": true,
-                          "type": "string"
-                        },
-                        "jobId": {
-                          "description": "The job which the WorkItem is part of.",
-                          "required": true,
-                          "type": "string",
-                          "location": "path"
-                        }
-                      },
-                      "flatPath": "v1b3/projects/{projectId}/locations/{location}/jobs/{jobId}/workItems:reportStatus",
-                      "path": "v1b3/projects/{projectId}/locations/{location}/jobs/{jobId}/workItems:reportStatus",
-                      "id": "dataflow.projects.locations.jobs.workItems.reportStatus"
+                    "projectId": {
+                      "location": "path",
+                      "description": "The project which owns the jobs.",
+                      "required": true,
+                      "type": "string"
                     }
-                  }
-                },
-                "messages": {
-                  "methods": {
-                    "list": {
-                      "httpMethod": "GET",
-                      "response": {
-                        "$ref": "ListJobMessagesResponse"
-                      },
-                      "parameterOrder": [
-                        "projectId",
-                        "location",
-                        "jobId"
-                      ],
-                      "parameters": {
-                        "projectId": {
-                          "required": true,
-                          "type": "string",
-                          "location": "path",
-                          "description": "A project id."
-                        },
-                        "jobId": {
-                          "required": true,
-                          "type": "string",
-                          "location": "path",
-                          "description": "The job to get messages about."
-                        },
-                        "location": {
-                          "description": "The location which contains the job specified by job_id.",
-                          "required": true,
-                          "type": "string",
-                          "location": "path"
-                        },
-                        "endTime": {
-                          "location": "query",
-                          "description": "Return only messages with timestamps \u003c end_time. The default is now\n(i.e. return up to the latest messages available).",
-                          "format": "google-datetime",
-                          "type": "string"
-                        },
-                        "pageToken": {
-                          "description": "If supplied, this should be the value of next_page_token returned\nby an earlier call. This will cause the next page of results to\nbe returned.",
-                          "type": "string",
-                          "location": "query"
-                        },
-                        "startTime": {
-                          "location": "query",
-                          "description": "If specified, return only messages with timestamps \u003e= start_time.\nThe default is the job creation time (i.e. beginning of messages).",
-                          "format": "google-datetime",
-                          "type": "string"
-                        },
-                        "pageSize": {
-                          "description": "If specified, determines the maximum number of messages to\nreturn.  If unspecified, the service may choose an appropriate\ndefault, or may return an arbitrarily large number of results.",
-                          "format": "int32",
-                          "type": "integer",
-                          "location": "query"
-                        },
-                        "minimumImportance": {
-                          "location": "query",
-                          "enum": [
-                            "JOB_MESSAGE_IMPORTANCE_UNKNOWN",
-                            "JOB_MESSAGE_DEBUG",
-                            "JOB_MESSAGE_DETAILED",
-                            "JOB_MESSAGE_BASIC",
-                            "JOB_MESSAGE_WARNING",
-                            "JOB_MESSAGE_ERROR"
-                          ],
-                          "description": "Filter to only get messages with importance \u003e= level",
-                          "type": "string"
-                        }
-                      },
-                      "scopes": [
-                        "https://www.googleapis.com/auth/cloud-platform",
-                        "https://www.googleapis.com/auth/userinfo.email"
-                      ],
-                      "flatPath": "v1b3/projects/{projectId}/locations/{location}/jobs/{jobId}/messages",
-                      "id": "dataflow.projects.locations.jobs.messages.list",
-                      "path": "v1b3/projects/{projectId}/locations/{location}/jobs/{jobId}/messages",
-                      "description": "Request the job status."
-                    }
-                  }
+                  },
+                  "flatPath": "v1b3/projects/{projectId}/locations/{location}/jobs"
                 }
               }
             }
@@ -470,14 +470,20 @@
         },
         "templates": {
           "methods": {
-            "launch": {
-              "httpMethod": "POST",
+            "create": {
+              "path": "v1b3/projects/{projectId}/templates",
+              "id": "dataflow.projects.templates.create",
+              "description": "Creates a Cloud Dataflow job from a template.",
+              "request": {
+                "$ref": "CreateJobFromTemplateRequest"
+              },
+              "response": {
+                "$ref": "Job"
+              },
               "parameterOrder": [
                 "projectId"
               ],
-              "response": {
-                "$ref": "LaunchTemplateResponse"
-              },
+              "httpMethod": "POST",
               "scopes": [
                 "https://www.googleapis.com/auth/cloud-platform",
                 "https://www.googleapis.com/auth/userinfo.email"
@@ -488,45 +494,66 @@
                   "required": true,
                   "type": "string",
                   "location": "path"
-                },
+                }
+              },
+              "flatPath": "v1b3/projects/{projectId}/templates"
+            },
+            "launch": {
+              "path": "v1b3/projects/{projectId}/templates:launch",
+              "id": "dataflow.projects.templates.launch",
+              "description": "Launch a template.",
+              "request": {
+                "$ref": "LaunchTemplateParameters"
+              },
+              "response": {
+                "$ref": "LaunchTemplateResponse"
+              },
+              "parameterOrder": [
+                "projectId"
+              ],
+              "httpMethod": "POST",
+              "scopes": [
+                "https://www.googleapis.com/auth/cloud-platform",
+                "https://www.googleapis.com/auth/userinfo.email"
+              ],
+              "parameters": {
                 "gcsPath": {
                   "location": "query",
                   "description": "Required. A Cloud Storage path to the template from which to create\nthe job.\nMust be valid Cloud Storage URL, beginning with 'gs://'.",
                   "type": "string"
                 },
                 "dryRun": {
-                  "location": "query",
                   "description": "Whether or not the job should actually be executed after\nvalidating parameters. Defaults to false. Validation errors do\nnot cause the HTTP request to fail if true.",
-                  "type": "boolean"
+                  "type": "boolean",
+                  "location": "query"
+                },
+                "projectId": {
+                  "description": "Required. The ID of the Cloud Platform project that the job belongs to.",
+                  "required": true,
+                  "type": "string",
+                  "location": "path"
                 }
               },
-              "flatPath": "v1b3/projects/{projectId}/templates:launch",
-              "id": "dataflow.projects.templates.launch",
-              "path": "v1b3/projects/{projectId}/templates:launch",
-              "description": "Launch a template.",
-              "request": {
-                "$ref": "LaunchTemplateParameters"
-              }
+              "flatPath": "v1b3/projects/{projectId}/templates:launch"
             },
             "get": {
-              "description": "Get the template associated with a template.",
+              "parameterOrder": [
+                "projectId"
+              ],
               "httpMethod": "GET",
               "response": {
                 "$ref": "GetTemplateResponse"
               },
-              "parameterOrder": [
-                "projectId"
-              ],
               "scopes": [
                 "https://www.googleapis.com/auth/cloud-platform",
                 "https://www.googleapis.com/auth/userinfo.email"
               ],
               "parameters": {
                 "projectId": {
+                  "location": "path",
                   "description": "Required. The ID of the Cloud Platform project that the job belongs to.",
                   "required": true,
-                  "type": "string",
-                  "location": "path"
+                  "type": "string"
                 },
                 "view": {
                   "location": "query",
@@ -537,30 +564,50 @@
                   "type": "string"
                 },
                 "gcsPath": {
-                  "location": "query",
                   "description": "Required. A Cloud Storage path to the template from which to\ncreate the job.\nMust be a valid Cloud Storage URL, beginning with `gs://`.",
-                  "type": "string"
+                  "type": "string",
+                  "location": "query"
                 }
               },
               "flatPath": "v1b3/projects/{projectId}/templates:get",
+              "path": "v1b3/projects/{projectId}/templates:get",
               "id": "dataflow.projects.templates.get",
-              "path": "v1b3/projects/{projectId}/templates:get"
-            },
-            "create": {
-              "request": {
-                "$ref": "CreateJobFromTemplateRequest"
-              },
-              "description": "Creates a Cloud Dataflow job from a template.",
+              "description": "Get the template associated with a template."
+            }
+          }
+        },
+        "jobs": {
+          "methods": {
+            "getMetrics": {
+              "description": "Request the job status.",
+              "httpMethod": "GET",
               "response": {
-                "$ref": "Job"
+                "$ref": "JobMetrics"
               },
               "parameterOrder": [
-                "projectId"
+                "projectId",
+                "jobId"
               ],
-              "httpMethod": "POST",
               "parameters": {
+                "location": {
+                  "description": "The location which contains the job specified by job_id.",
+                  "type": "string",
+                  "location": "query"
+                },
+                "startTime": {
+                  "location": "query",
+                  "description": "Return only metric data that has changed since this time.\nDefault is to return all information about all metrics for the job.",
+                  "format": "google-datetime",
+                  "type": "string"
+                },
                 "projectId": {
-                  "description": "Required. The ID of the Cloud Platform project that the job belongs to.",
+                  "location": "path",
+                  "description": "A project id.",
+                  "required": true,
+                  "type": "string"
+                },
+                "jobId": {
+                  "description": "The job to get messages for.",
                   "required": true,
                   "type": "string",
                   "location": "path"
@@ -570,56 +617,9 @@
                 "https://www.googleapis.com/auth/cloud-platform",
                 "https://www.googleapis.com/auth/userinfo.email"
               ],
-              "flatPath": "v1b3/projects/{projectId}/templates",
-              "path": "v1b3/projects/{projectId}/templates",
-              "id": "dataflow.projects.templates.create"
-            }
-          }
-        },
-        "jobs": {
-          "methods": {
-            "getMetrics": {
-              "scopes": [
-                "https://www.googleapis.com/auth/cloud-platform",
-                "https://www.googleapis.com/auth/userinfo.email"
-              ],
-              "parameters": {
-                "startTime": {
-                  "description": "Return only metric data that has changed since this time.\nDefault is to return all information about all metrics for the job.",
-                  "format": "google-datetime",
-                  "type": "string",
-                  "location": "query"
-                },
-                "projectId": {
-                  "location": "path",
-                  "description": "A project id.",
-                  "required": true,
-                  "type": "string"
-                },
-                "jobId": {
-                  "location": "path",
-                  "description": "The job to get messages for.",
-                  "required": true,
-                  "type": "string"
-                },
-                "location": {
-                  "location": "query",
-                  "description": "The location which contains the job specified by job_id.",
-                  "type": "string"
-                }
-              },
               "flatPath": "v1b3/projects/{projectId}/jobs/{jobId}/metrics",
               "id": "dataflow.projects.jobs.getMetrics",
-              "path": "v1b3/projects/{projectId}/jobs/{jobId}/metrics",
-              "description": "Request the job status.",
-              "httpMethod": "GET",
-              "parameterOrder": [
-                "projectId",
-                "jobId"
-              ],
-              "response": {
-                "$ref": "JobMetrics"
-              }
+              "path": "v1b3/projects/{projectId}/jobs/{jobId}/metrics"
             },
             "get": {
               "description": "Gets the state of the specified Cloud Dataflow job.",
@@ -639,10 +639,10 @@
                   "type": "string"
                 },
                 "jobId": {
+                  "description": "The job ID.",
                   "required": true,
                   "type": "string",
-                  "location": "path",
-                  "description": "The job ID."
+                  "location": "path"
                 },
                 "view": {
                   "location": "query",
@@ -670,17 +670,39 @@
               "path": "v1b3/projects/{projectId}/jobs/{jobId}"
             },
             "list": {
-              "id": "dataflow.projects.jobs.list",
               "path": "v1b3/projects/{projectId}/jobs",
+              "id": "dataflow.projects.jobs.list",
               "description": "List the jobs of a project.",
+              "response": {
+                "$ref": "ListJobsResponse"
+              },
               "httpMethod": "GET",
               "parameterOrder": [
                 "projectId"
               ],
-              "response": {
-                "$ref": "ListJobsResponse"
-              },
               "parameters": {
+                "pageToken": {
+                  "description": "Set this to the 'next_page_token' field of a previous response\nto request additional results in a long list.",
+                  "type": "string",
+                  "location": "query"
+                },
+                "pageSize": {
+                  "location": "query",
+                  "description": "If there are many jobs, limit response to at most this many.\nThe actual number of jobs returned will be the lesser of max_responses\nand an unspecified server-defined limit.",
+                  "format": "int32",
+                  "type": "integer"
+                },
+                "view": {
+                  "enum": [
+                    "JOB_VIEW_UNKNOWN",
+                    "JOB_VIEW_SUMMARY",
+                    "JOB_VIEW_ALL",
+                    "JOB_VIEW_DESCRIPTION"
+                  ],
+                  "description": "Level of information requested in response. Default is `JOB_VIEW_SUMMARY`.",
+                  "type": "string",
+                  "location": "query"
+                },
                 "projectId": {
                   "description": "The project which owns the jobs.",
                   "required": true,
@@ -688,6 +710,7 @@
                   "location": "path"
                 },
                 "filter": {
+                  "location": "query",
                   "enum": [
                     "UNKNOWN",
                     "ALL",
@@ -695,35 +718,12 @@
                     "ACTIVE"
                   ],
                   "description": "The kind of filter to use.",
-                  "type": "string",
-                  "location": "query"
+                  "type": "string"
                 },
                 "location": {
                   "location": "query",
                   "description": "The location that contains this job.",
                   "type": "string"
-                },
-                "pageToken": {
-                  "description": "Set this to the 'next_page_token' field of a previous response\nto request additional results in a long list.",
-                  "type": "string",
-                  "location": "query"
-                },
-                "pageSize": {
-                  "description": "If there are many jobs, limit response to at most this many.\nThe actual number of jobs returned will be the lesser of max_responses\nand an unspecified server-defined limit.",
-                  "format": "int32",
-                  "type": "integer",
-                  "location": "query"
-                },
-                "view": {
-                  "description": "Level of information requested in response. Default is `JOB_VIEW_SUMMARY`.",
-                  "type": "string",
-                  "location": "query",
-                  "enum": [
-                    "JOB_VIEW_UNKNOWN",
-                    "JOB_VIEW_SUMMARY",
-                    "JOB_VIEW_ALL",
-                    "JOB_VIEW_DESCRIPTION"
-                  ]
                 }
               },
               "scopes": [
@@ -733,23 +733,29 @@
               "flatPath": "v1b3/projects/{projectId}/jobs"
             },
             "update": {
-              "response": {
+              "id": "dataflow.projects.jobs.update",
+              "path": "v1b3/projects/{projectId}/jobs/{jobId}",
+              "description": "Updates the state of an existing Cloud Dataflow job.",
+              "request": {
                 "$ref": "Job"
               },
+              "httpMethod": "PUT",
               "parameterOrder": [
                 "projectId",
                 "jobId"
               ],
-              "httpMethod": "PUT",
+              "response": {
+                "$ref": "Job"
+              },
               "scopes": [
                 "https://www.googleapis.com/auth/cloud-platform",
                 "https://www.googleapis.com/auth/userinfo.email"
               ],
               "parameters": {
                 "location": {
-                  "type": "string",
                   "location": "query",
-                  "description": "The location that contains this job."
+                  "description": "The location that contains this job.",
+                  "type": "string"
                 },
                 "projectId": {
                   "location": "path",
@@ -758,19 +764,13 @@
                   "type": "string"
                 },
                 "jobId": {
-                  "location": "path",
                   "description": "The job ID.",
                   "required": true,
-                  "type": "string"
+                  "type": "string",
+                  "location": "path"
                 }
               },
-              "flatPath": "v1b3/projects/{projectId}/jobs/{jobId}",
-              "path": "v1b3/projects/{projectId}/jobs/{jobId}",
-              "id": "dataflow.projects.jobs.update",
-              "description": "Updates the state of an existing Cloud Dataflow job.",
-              "request": {
-                "$ref": "Job"
-              }
+              "flatPath": "v1b3/projects/{projectId}/jobs/{jobId}"
             },
             "create": {
               "request": {
@@ -785,6 +785,11 @@
                 "$ref": "Job"
               },
               "parameters": {
+                "location": {
+                  "location": "query",
+                  "description": "The location that contains this job.",
+                  "type": "string"
+                },
                 "replaceJobId": {
                   "location": "query",
                   "description": "Deprecated. This field is now in the Job message.",
@@ -797,7 +802,6 @@
                   "type": "string"
                 },
                 "view": {
-                  "type": "string",
                   "location": "query",
                   "enum": [
                     "JOB_VIEW_UNKNOWN",
@@ -805,12 +809,8 @@
                     "JOB_VIEW_ALL",
                     "JOB_VIEW_DESCRIPTION"
                   ],
-                  "description": "The level of information requested in response."
-                },
-                "location": {
-                  "description": "The location that contains this job.",
-                  "type": "string",
-                  "location": "query"
+                  "description": "The level of information requested in response.",
+                  "type": "string"
                 }
               },
               "scopes": [
@@ -826,13 +826,10 @@
             "debug": {
               "methods": {
                 "getConfig": {
-                  "flatPath": "v1b3/projects/{projectId}/jobs/{jobId}/debug/getConfig",
-                  "id": "dataflow.projects.jobs.debug.getConfig",
-                  "path": "v1b3/projects/{projectId}/jobs/{jobId}/debug/getConfig",
-                  "description": "Get encoded debug configuration for component. Not cacheable.",
                   "request": {
                     "$ref": "GetDebugConfigRequest"
                   },
+                  "description": "Get encoded debug configuration for component. Not cacheable.",
                   "httpMethod": "POST",
                   "parameterOrder": [
                     "projectId",
@@ -841,10 +838,6 @@
                   "response": {
                     "$ref": "GetDebugConfigResponse"
                   },
-                  "scopes": [
-                    "https://www.googleapis.com/auth/cloud-platform",
-                    "https://www.googleapis.com/auth/userinfo.email"
-                  ],
                   "parameters": {
                     "projectId": {
                       "location": "path",
@@ -853,12 +846,19 @@
                       "type": "string"
                     },
                     "jobId": {
-                      "required": true,
-                      "type": "string",
                       "location": "path",
-                      "description": "The job id."
+                      "description": "The job id.",
+                      "required": true,
+                      "type": "string"
                     }
-                  }
+                  },
+                  "scopes": [
+                    "https://www.googleapis.com/auth/cloud-platform",
+                    "https://www.googleapis.com/auth/userinfo.email"
+                  ],
+                  "flatPath": "v1b3/projects/{projectId}/jobs/{jobId}/debug/getConfig",
+                  "id": "dataflow.projects.jobs.debug.getConfig",
+                  "path": "v1b3/projects/{projectId}/jobs/{jobId}/debug/getConfig"
                 },
                 "sendCapture": {
                   "httpMethod": "POST",
@@ -875,10 +875,10 @@
                   ],
                   "parameters": {
                     "projectId": {
-                      "location": "path",
                       "description": "The project id.",
                       "required": true,
-                      "type": "string"
+                      "type": "string",
+                      "location": "path"
                     },
                     "jobId": {
                       "description": "The job id.",
@@ -900,12 +900,10 @@
             "workItems": {
               "methods": {
                 "reportStatus": {
-                  "id": "dataflow.projects.jobs.workItems.reportStatus",
-                  "path": "v1b3/projects/{projectId}/jobs/{jobId}/workItems:reportStatus",
-                  "description": "Reports the status of dataflow WorkItems leased by a worker.",
                   "request": {
                     "$ref": "ReportWorkItemStatusRequest"
                   },
+                  "description": "Reports the status of dataflow WorkItems leased by a worker.",
                   "httpMethod": "POST",
                   "parameterOrder": [
                     "projectId",
@@ -914,16 +912,12 @@
                   "response": {
                     "$ref": "ReportWorkItemStatusResponse"
                   },
-                  "scopes": [
-                    "https://www.googleapis.com/auth/cloud-platform",
-                    "https://www.googleapis.com/auth/userinfo.email"
-                  ],
                   "parameters": {
                     "projectId": {
+                      "location": "path",
                       "description": "The project which owns the WorkItem's job.",
                       "required": true,
-                      "type": "string",
-                      "location": "path"
+                      "type": "string"
                     },
                     "jobId": {
                       "location": "path",
@@ -932,29 +926,33 @@
                       "type": "string"
                     }
                   },
-                  "flatPath": "v1b3/projects/{projectId}/jobs/{jobId}/workItems:reportStatus"
+                  "scopes": [
+                    "https://www.googleapis.com/auth/cloud-platform",
+                    "https://www.googleapis.com/auth/userinfo.email"
+                  ],
+                  "flatPath": "v1b3/projects/{projectId}/jobs/{jobId}/workItems:reportStatus",
+                  "id": "dataflow.projects.jobs.workItems.reportStatus",
+                  "path": "v1b3/projects/{projectId}/jobs/{jobId}/workItems:reportStatus"
                 },
                 "lease": {
-                  "id": "dataflow.projects.jobs.workItems.lease",
-                  "path": "v1b3/projects/{projectId}/jobs/{jobId}/workItems:lease",
-                  "request": {
-                    "$ref": "LeaseWorkItemRequest"
+                  "response": {
+                    "$ref": "LeaseWorkItemResponse"
                   },
-                  "description": "Leases a dataflow WorkItem to run.",
-                  "httpMethod": "POST",
                   "parameterOrder": [
                     "projectId",
                     "jobId"
                   ],
-                  "response": {
-                    "$ref": "LeaseWorkItemResponse"
-                  },
+                  "httpMethod": "POST",
+                  "scopes": [
+                    "https://www.googleapis.com/auth/cloud-platform",
+                    "https://www.googleapis.com/auth/userinfo.email"
+                  ],
                   "parameters": {
                     "projectId": {
-                      "required": true,
-                      "type": "string",
                       "location": "path",
-                      "description": "Identifies the project this worker belongs to."
+                      "description": "Identifies the project this worker belongs to.",
+                      "required": true,
+                      "type": "string"
                     },
                     "jobId": {
                       "description": "Identifies the workflow job this worker belongs to.",
@@ -963,11 +961,13 @@
                       "location": "path"
                     }
                   },
-                  "scopes": [
-                    "https://www.googleapis.com/auth/cloud-platform",
-                    "https://www.googleapis.com/auth/userinfo.email"
-                  ],
-                  "flatPath": "v1b3/projects/{projectId}/jobs/{jobId}/workItems:lease"
+                  "flatPath": "v1b3/projects/{projectId}/jobs/{jobId}/workItems:lease",
+                  "path": "v1b3/projects/{projectId}/jobs/{jobId}/workItems:lease",
+                  "id": "dataflow.projects.jobs.workItems.lease",
+                  "description": "Leases a dataflow WorkItem to run.",
+                  "request": {
+                    "$ref": "LeaseWorkItemRequest"
+                  }
                 }
               }
             },
@@ -987,27 +987,16 @@
                     "https://www.googleapis.com/auth/userinfo.email"
                   ],
                   "parameters": {
-                    "location": {
-                      "location": "query",
-                      "description": "The location which contains the job specified by job_id.",
-                      "type": "string"
-                    },
-                    "endTime": {
-                      "location": "query",
-                      "description": "Return only messages with timestamps \u003c end_time. The default is now\n(i.e. return up to the latest messages available).",
-                      "format": "google-datetime",
-                      "type": "string"
-                    },
-                    "pageToken": {
-                      "location": "query",
-                      "description": "If supplied, this should be the value of next_page_token returned\nby an earlier call. This will cause the next page of results to\nbe returned.",
-                      "type": "string"
-                    },
                     "startTime": {
-                      "location": "query",
                       "description": "If specified, return only messages with timestamps \u003e= start_time.\nThe default is the job creation time (i.e. beginning of messages).",
                       "format": "google-datetime",
-                      "type": "string"
+                      "type": "string",
+                      "location": "query"
+                    },
+                    "pageToken": {
+                      "description": "If supplied, this should be the value of next_page_token returned\nby an earlier call. This will cause the next page of results to\nbe returned.",
+                      "type": "string",
+                      "location": "query"
                     },
                     "pageSize": {
                       "description": "If specified, determines the maximum number of messages to\nreturn.  If unspecified, the service may choose an appropriate\ndefault, or may return an arbitrarily large number of results.",
@@ -1016,9 +1005,6 @@
                       "location": "query"
                     },
                     "minimumImportance": {
-                      "description": "Filter to only get messages with importance \u003e= level",
-                      "type": "string",
-                      "location": "query",
                       "enum": [
                         "JOB_MESSAGE_IMPORTANCE_UNKNOWN",
                         "JOB_MESSAGE_DEBUG",
@@ -1026,19 +1012,33 @@
                         "JOB_MESSAGE_BASIC",
                         "JOB_MESSAGE_WARNING",
                         "JOB_MESSAGE_ERROR"
-                      ]
-                    },
-                    "projectId": {
-                      "description": "A project id.",
-                      "required": true,
+                      ],
+                      "description": "Filter to only get messages with importance \u003e= level",
                       "type": "string",
-                      "location": "path"
+                      "location": "query"
                     },
                     "jobId": {
+                      "location": "path",
                       "description": "The job to get messages about.",
                       "required": true,
-                      "type": "string",
-                      "location": "path"
+                      "type": "string"
+                    },
+                    "projectId": {
+                      "location": "path",
+                      "description": "A project id.",
+                      "required": true,
+                      "type": "string"
+                    },
+                    "endTime": {
+                      "location": "query",
+                      "description": "Return only messages with timestamps \u003c end_time. The default is now\n(i.e. return up to the latest messages available).",
+                      "format": "google-datetime",
+                      "type": "string"
+                    },
+                    "location": {
+                      "location": "query",
+                      "description": "The location which contains the job specified by job_id.",
+                      "type": "string"
                     }
                   },
                   "flatPath": "v1b3/projects/{projectId}/jobs/{jobId}/messages",
@@ -1054,34 +1054,6 @@
     }
   },
   "parameters": {
-    "uploadType": {
-      "location": "query",
-      "description": "Legacy upload protocol for media (e.g. \"media\", \"multipart\").",
-      "type": "string"
-    },
-    "fields": {
-      "location": "query",
-      "description": "Selector specifying which fields to include in a partial response.",
-      "type": "string"
-    },
-    "$.xgafv": {
-      "enumDescriptions": [
-        "v1 error format",
-        "v2 error format"
-      ],
-      "location": "query",
-      "enum": [
-        "1",
-        "2"
-      ],
-      "description": "V1 error format.",
-      "type": "string"
-    },
-    "callback": {
-      "type": "string",
-      "location": "query",
-      "description": "JSONP"
-    },
     "alt": {
       "enum": [
         "json",
@@ -1099,328 +1071,99 @@
       "default": "json"
     },
     "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."
+      "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": {
+      "location": "query",
       "description": "OAuth access token.",
-      "type": "string",
-      "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."
+      "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"
     },
     "pp": {
-      "location": "query",
       "description": "Pretty-print response.",
       "type": "boolean",
-      "default": "true"
+      "default": "true",
+      "location": "query"
+    },
+    "bearer_token": {
+      "description": "OAuth bearer token.",
+      "type": "string",
+      "location": "query"
     },
     "oauth_token": {
       "description": "OAuth 2.0 token for the current user.",
       "type": "string",
       "location": "query"
     },
-    "bearer_token": {
-      "type": "string",
-      "location": "query",
-      "description": "OAuth bearer token."
-    },
     "upload_protocol": {
       "location": "query",
       "description": "Upload protocol for media (e.g. \"raw\", \"multipart\").",
       "type": "string"
     },
     "prettyPrint": {
+      "location": "query",
       "description": "Returns response with indentations and line breaks.",
       "type": "boolean",
-      "default": "true",
+      "default": "true"
+    },
+    "uploadType": {
+      "description": "Legacy upload protocol for media (e.g. \"media\", \"multipart\").",
+      "type": "string",
+      "location": "query"
+    },
+    "fields": {
+      "location": "query",
+      "description": "Selector specifying which fields to include in a partial response.",
+      "type": "string"
+    },
+    "callback": {
+      "location": "query",
+      "description": "JSONP",
+      "type": "string"
+    },
+    "$.xgafv": {
+      "enum": [
+        "1",
+        "2"
+      ],
+      "description": "V1 error format.",
+      "type": "string",
+      "enumDescriptions": [
+        "v1 error format",
+        "v2 error format"
+      ],
       "location": "query"
     }
   },
   "schemas": {
-    "RuntimeEnvironment": {
-      "properties": {
-        "maxWorkers": {
-          "description": "The maximum number of Google Compute Engine instances to be made\navailable to your pipeline during execution, from 1 to 1000.",
-          "format": "int32",
-          "type": "integer"
-        },
-        "zone": {
-          "description": "The Compute Engine [availability zone](https://cloud.google.com/compute/docs/regions-zones/regions-zones)\nfor launching worker instances to run your pipeline.",
-          "type": "string"
-        },
-        "serviceAccountEmail": {
-          "description": "The email address of the service account to run the job as.",
-          "type": "string"
-        },
-        "tempLocation": {
-          "description": "The Cloud Storage path to use for temporary files.\nMust be a valid Cloud Storage URL, beginning with `gs://`.",
-          "type": "string"
-        },
-        "bypassTempDirValidation": {
-          "description": "Whether to bypass the safety checks for the job's temporary directory.\nUse with caution.",
-          "type": "boolean"
-        }
-      },
-      "id": "RuntimeEnvironment",
-      "description": "The environment values to set at runtime.",
-      "type": "object"
-    },
-    "StreamingSideInputLocation": {
-      "type": "object",
-      "properties": {
-        "stateFamily": {
-          "description": "Identifies the state family where this side input is stored.",
-          "type": "string"
-        },
-        "tag": {
-          "description": "Identifies the particular side input within the streaming Dataflow job.",
-          "type": "string"
-        }
-      },
-      "id": "StreamingSideInputLocation",
-      "description": "Identifies the location of a streaming side input."
-    },
-    "MountedDataDisk": {
-      "properties": {
-        "dataDisk": {
-          "description": "The name of the data disk.\nThis name is local to the Google Cloud Platform project and uniquely\nidentifies the disk within that project, for example\n\"myproject-1014-104817-4c2-harness-0-disk-1\".",
-          "type": "string"
-        }
-      },
-      "id": "MountedDataDisk",
-      "description": "Describes mounted data disk.",
-      "type": "object"
-    },
-    "LaunchTemplateResponse": {
-      "description": "Response to the request to launch a template.",
-      "type": "object",
-      "properties": {
-        "job": {
-          "description": "The job that was launched, if the request was not a dry run and\nthe job was successfully launched.",
-          "$ref": "Job"
-        },
-        "status": {
-          "description": "The status of the launch template request. Any problems with the request\nwill be indicated in the error_details.",
-          "$ref": "Status"
-        }
-      },
-      "id": "LaunchTemplateResponse"
-    },
-    "Job": {
-      "properties": {
-        "replacedByJobId": {
-          "description": "If another job is an update of this job (and thus, this job is in\n`JOB_STATE_UPDATED`), this field contains the ID of that job.",
-          "type": "string"
-        },
-        "steps": {
-          "description": "The top-level steps that constitute the entire job.",
-          "type": "array",
-          "items": {
-            "$ref": "Step"
-          }
-        },
-        "executionInfo": {
-          "description": "Deprecated.",
-          "$ref": "JobExecutionInfo"
-        },
-        "id": {
-          "description": "The unique ID of this job.\n\nThis field is set by the Cloud Dataflow service when the Job is\ncreated, and is immutable for the life of the job.",
-          "type": "string"
-        },
-        "currentState": {
-          "description": "The current state of the job.\n\nJobs are created in the `JOB_STATE_STOPPED` state unless otherwise\nspecified.\n\nA job in the `JOB_STATE_RUNNING` state may asynchronously enter a\nterminal state. After a job has reached a terminal state, no\nfurther state updates may be made.\n\nThis field may be mutated by the Cloud Dataflow service;\ncallers cannot mutate it.",
-          "type": "string",
-          "enumDescriptions": [
-            "The job's run state isn't specified.",
-            "`JOB_STATE_STOPPED` indicates that the job has not\nyet started to run.",
-            "`JOB_STATE_RUNNING` indicates that the job is currently running.",
-            "`JOB_STATE_DONE` indicates that the job has successfully completed.\nThis is a terminal job state.  This state may be set by the Cloud Dataflow\nservice, as a transition from `JOB_STATE_RUNNING`. It may also be set via a\nCloud Dataflow `UpdateJob` call, if the job has not yet reached a terminal\nstate.",
-            "`JOB_STATE_FAILED` indicates that the job has failed.  This is a\nterminal job state.  This state may only be set by the Cloud Dataflow\nservice, and only as a transition from `JOB_STATE_RUNNING`.",
-            "`JOB_STATE_CANCELLED` indicates that the job has been explicitly\ncancelled. This is a terminal job state. This state may only be\nset via a Cloud Dataflow `UpdateJob` call, and only if the job has not\nyet reached another terminal state.",
-            "`JOB_STATE_UPDATED` indicates that the job was successfully updated,\nmeaning that this job was stopped and another job was started, inheriting\nstate from this one. This is a terminal job state. This state may only be\nset by the Cloud Dataflow service, and only as a transition from\n`JOB_STATE_RUNNING`.",
-            "`JOB_STATE_DRAINING` indicates that the job is in the process of draining.\nA draining job has stopped pulling from its input sources and is processing\nany data that remains in-flight. This state may be set via a Cloud Dataflow\n`UpdateJob` call, but only as a transition from `JOB_STATE_RUNNING`. Jobs\nthat are draining may only transition to `JOB_STATE_DRAINED`,\n`JOB_STATE_CANCELLED`, or `JOB_STATE_FAILED`.",
-            "`JOB_STATE_DRAINED` indicates that the job has been drained.\nA drained job terminated by stopping pulling from its input sources and\nprocessing any data that remained in-flight when draining was requested.\nThis state is a terminal state, may only be set by the Cloud Dataflow\nservice, and only as a transition from `JOB_STATE_DRAINING`."
-          ],
-          "enum": [
-            "JOB_STATE_UNKNOWN",
-            "JOB_STATE_STOPPED",
-            "JOB_STATE_RUNNING",
-            "JOB_STATE_DONE",
-            "JOB_STATE_FAILED",
-            "JOB_STATE_CANCELLED",
-            "JOB_STATE_UPDATED",
-            "JOB_STATE_DRAINING",
-            "JOB_STATE_DRAINED"
-          ]
-        },
-        "location": {
-          "description": "The location that contains this job.",
-          "type": "string"
-        },
-        "currentStateTime": {
-          "description": "The timestamp associated with the current state.",
-          "format": "google-datetime",
-          "type": "string"
-        },
-        "transformNameMapping": {
-          "additionalProperties": {
-            "type": "string"
-          },
-          "description": "The map of transform name prefixes of the job to be replaced to the\ncorresponding name prefixes of the new job.",
-          "type": "object"
-        },
-        "environment": {
-          "description": "The environment for the job.",
-          "$ref": "Environment"
-        },
-        "createTime": {
-          "type": "string",
-          "description": "The timestamp when the job was initially created. Immutable and set by the\nCloud Dataflow service.",
-          "format": "google-datetime"
-        },
-        "labels": {
-          "additionalProperties": {
-            "type": "string"
-          },
-          "description": "User-defined labels for this job.\n\nThe labels map can contain no more than 64 entries.  Entries of the labels\nmap are UTF8 strings that comply with the following restrictions:\n\n* Keys must conform to regexp:  \\p{Ll}\\p{Lo}{0,62}\n* Values must conform to regexp:  [\\p{Ll}\\p{Lo}\\p{N}_-]{0,63}\n* Both keys and values are additionally constrained to be \u003c= 128 bytes in\nsize.",
-          "type": "object"
-        },
-        "projectId": {
-          "description": "The ID of the Cloud Platform project that the job belongs to.",
-          "type": "string"
-        },
-        "type": {
-          "enumDescriptions": [
-            "The type of the job is unspecified, or unknown.",
-            "A batch job with a well-defined end point: data is read, data is\nprocessed, data is written, and the job is done.",
-            "A continuously streaming job with no end: data is read,\nprocessed, and written continuously."
-          ],
-          "enum": [
-            "JOB_TYPE_UNKNOWN",
-            "JOB_TYPE_BATCH",
-            "JOB_TYPE_STREAMING"
-          ],
-          "description": "The type of Cloud Dataflow job.",
-          "type": "string"
-        },
-        "pipelineDescription": {
-          "description": "Preliminary field: The format of this data may change at any time.\nA description of the user pipeline and stages through which it is executed.\nCreated by Cloud Dataflow service.  Only retrieved with\nJOB_VIEW_DESCRIPTION or JOB_VIEW_ALL.",
-          "$ref": "PipelineDescription"
-        },
-        "replaceJobId": {
-          "description": "If this job is an update of an existing job, this field is the job ID\nof the job it replaced.\n\nWhen sending a `CreateJobRequest`, you can update a job by specifying it\nhere. The job named here is stopped, and its intermediate state is\ntransferred to this job.",
-          "type": "string"
-        },
-        "requestedState": {
-          "type": "string",
-          "enumDescriptions": [
-            "The job's run state isn't specified.",
-            "`JOB_STATE_STOPPED` indicates that the job has not\nyet started to run.",
-            "`JOB_STATE_RUNNING` indicates that the job is currently running.",
-            "`JOB_STATE_DONE` indicates that the job has successfully completed.\nThis is a terminal job state.  This state may be set by the Cloud Dataflow\nservice, as a transition from `JOB_STATE_RUNNING`. It may also be set via a\nCloud Dataflow `UpdateJob` call, if the job has not yet reached a terminal\nstate.",
-            "`JOB_STATE_FAILED` indicates that the job has failed.  This is a\nterminal job state.  This state may only be set by the Cloud Dataflow\nservice, and only as a transition from `JOB_STATE_RUNNING`.",
-            "`JOB_STATE_CANCELLED` indicates that the job has been explicitly\ncancelled. This is a terminal job state. This state may only be\nset via a Cloud Dataflow `UpdateJob` call, and only if the job has not\nyet reached another terminal state.",
-            "`JOB_STATE_UPDATED` indicates that the job was successfully updated,\nmeaning that this job was stopped and another job was started, inheriting\nstate from this one. This is a terminal job state. This state may only be\nset by the Cloud Dataflow service, and only as a transition from\n`JOB_STATE_RUNNING`.",
-            "`JOB_STATE_DRAINING` indicates that the job is in the process of draining.\nA draining job has stopped pulling from its input sources and is processing\nany data that remains in-flight. This state may be set via a Cloud Dataflow\n`UpdateJob` call, but only as a transition from `JOB_STATE_RUNNING`. Jobs\nthat are draining may only transition to `JOB_STATE_DRAINED`,\n`JOB_STATE_CANCELLED`, or `JOB_STATE_FAILED`.",
-            "`JOB_STATE_DRAINED` indicates that the job has been drained.\nA drained job terminated by stopping pulling from its input sources and\nprocessing any data that remained in-flight when draining was requested.\nThis state is a terminal state, may only be set by the Cloud Dataflow\nservice, and only as a transition from `JOB_STATE_DRAINING`."
-          ],
-          "enum": [
-            "JOB_STATE_UNKNOWN",
-            "JOB_STATE_STOPPED",
-            "JOB_STATE_RUNNING",
-            "JOB_STATE_DONE",
-            "JOB_STATE_FAILED",
-            "JOB_STATE_CANCELLED",
-            "JOB_STATE_UPDATED",
-            "JOB_STATE_DRAINING",
-            "JOB_STATE_DRAINED"
-          ],
-          "description": "The job's requested state.\n\n`UpdateJob` may be used to switch between the `JOB_STATE_STOPPED` and\n`JOB_STATE_RUNNING` states, by setting requested_state.  `UpdateJob` may\nalso be used to directly set a job's requested state to\n`JOB_STATE_CANCELLED` or `JOB_STATE_DONE`, irrevocably terminating the\njob if it has not already reached a terminal state."
-        },
-        "tempFiles": {
-          "description": "A set of files the system should be aware of that are used\nfor temporary storage. These temporary files will be\nremoved on job completion.\nNo duplicates are allowed.\nNo file patterns are supported.\n\nThe supported files are:\n\nGoogle Cloud Storage:\n\n   storage.googleapis.com/{bucket}/{object}\n   bucket.storage.googleapis.com/{object}",
-          "type": "array",
-          "items": {
-            "type": "string"
-          }
-        },
-        "clientRequestId": {
-          "description": "The client's unique identifier of the job, re-used across retried attempts.\nIf this field is set, the service will ensure its uniqueness.\nThe request to create a job will fail if the service has knowledge of a\npreviously submitted job with the same client's ID and job name.\nThe caller may use this field to ensure idempotence of job\ncreation across retried attempts to create a job.\nBy default, the field is empty and, in that case, the service ignores it.",
-          "type": "string"
-        },
-        "name": {
-          "type": "string",
-          "description": "The user-specified Cloud Dataflow job name.\n\nOnly one Job with a given name may exist in a project at any\ngiven time. If a caller attempts to create a Job with the same\nname as an already-existing Job, the attempt returns the\nexisting Job.\n\nThe name must match the regular expression\n`[a-z]([-a-z0-9]{0,38}[a-z0-9])?`"
-        }
-      },
-      "id": "Job",
-      "description": "Defines a job to be run by the Cloud Dataflow service.",
-      "type": "object"
-    },
-    "DynamicSourceSplit": {
-      "description": "When a task splits using WorkItemStatus.dynamic_source_split, this\nmessage describes the two parts of the split relative to the\ndescription of the current task's input.",
-      "type": "object",
-      "properties": {
-        "residual": {
-          "description": "Residual part (returned to the pool of work).\nSpecified relative to the previously-current source.",
-          "$ref": "DerivedSource"
-        },
-        "primary": {
-          "$ref": "DerivedSource",
-          "description": "Primary part (continued to be processed by worker).\nSpecified relative to the previously-current source.\nBecomes current."
-        }
-      },
-      "id": "DynamicSourceSplit"
-    },
-    "DerivedSource": {
-      "description": "Specification of one of the bundles produced as a result of splitting\na Source (e.g. when executing a SourceSplitRequest, or when\nsplitting an active task using WorkItemStatus.dynamic_source_split),\nrelative to the source being split.",
-      "type": "object",
-      "properties": {
-        "derivationMode": {
-          "enumDescriptions": [
-            "The source derivation is unknown, or unspecified.",
-            "Produce a completely independent Source with no base.",
-            "Produce a Source based on the Source being split.",
-            "Produce a Source based on the base of the Source being split."
-          ],
-          "enum": [
-            "SOURCE_DERIVATION_MODE_UNKNOWN",
-            "SOURCE_DERIVATION_MODE_INDEPENDENT",
-            "SOURCE_DERIVATION_MODE_CHILD_OF_CURRENT",
-            "SOURCE_DERIVATION_MODE_SIBLING_OF_CURRENT"
-          ],
-          "description": "What source to base the produced source on (if any).",
-          "type": "string"
-        },
-        "source": {
-          "description": "Specification of the source.",
-          "$ref": "Source"
-        }
-      },
-      "id": "DerivedSource"
-    },
     "SourceOperationResponse": {
-      "description": "The result of a SourceOperationRequest, specified in\nReportWorkItemStatusRequest.source_operation when the work item\nis completed.",
-      "type": "object",
       "properties": {
-        "split": {
-          "$ref": "SourceSplitResponse",
-          "description": "A response to a request to split a source."
-        },
         "getMetadata": {
           "description": "A response to a request to get metadata about a source.",
           "$ref": "SourceGetMetadataResponse"
+        },
+        "split": {
+          "$ref": "SourceSplitResponse",
+          "description": "A response to a request to split a source."
         }
       },
-      "id": "SourceOperationResponse"
+      "id": "SourceOperationResponse",
+      "description": "The result of a SourceOperationRequest, specified in\nReportWorkItemStatusRequest.source_operation when the work item\nis completed.",
+      "type": "object"
+    },
+    "SendDebugCaptureResponse": {
+      "description": "Response to a send capture request.\nnothing",
+      "type": "object",
+      "properties": {},
+      "id": "SendDebugCaptureResponse"
     },
     "SideInputInfo": {
-      "id": "SideInputInfo",
       "description": "Information about a side input of a DoFn or an input of a SeqDoFn.",
       "type": "object",
       "properties": {
@@ -1432,43 +1175,36 @@
           }
         },
         "kind": {
-          "type": "object",
           "additionalProperties": {
-            "type": "any",
-            "description": "Properties of the object."
+            "description": "Properties of the object.",
+            "type": "any"
           },
-          "description": "How to interpret the source element(s) as a side input value."
+          "description": "How to interpret the source element(s) as a side input value.",
+          "type": "object"
         },
         "tag": {
           "description": "The id of the tag the user code will access this side input by;\nthis should correspond to the tag of some MultiOutputInfo.",
           "type": "string"
         }
-      }
+      },
+      "id": "SideInputInfo"
     },
-    "SendDebugCaptureResponse": {
-      "description": "Response to a send capture request.\nnothing",
-      "type": "object",
-      "properties": {},
-      "id": "SendDebugCaptureResponse"
-    },
-    "WriteInstruction": {
-      "description": "An instruction that writes records.\nTakes one input, produces no outputs.",
+    "CounterStructuredNameAndMetadata": {
+      "description": "A single message which encapsulates structured name and metadata for a given\ncounter.",
       "type": "object",
       "properties": {
-        "input": {
-          "$ref": "InstructionInput",
-          "description": "The input."
+        "name": {
+          "description": "Structured name of the counter.",
+          "$ref": "CounterStructuredName"
         },
-        "sink": {
-          "$ref": "Sink",
-          "description": "The sink to write to."
+        "metadata": {
+          "description": "Metadata associated with a counter",
+          "$ref": "CounterMetadata"
         }
       },
-      "id": "WriteInstruction"
+      "id": "CounterStructuredNameAndMetadata"
     },
     "ConcatPosition": {
-      "description": "A position that encapsulates an inner position and an index for the inner\nposition. A ConcatPosition can be used by a reader of a source that\nencapsulates a set of other sources.",
-      "type": "object",
       "properties": {
         "position": {
           "$ref": "Position",
@@ -1480,26 +1216,44 @@
           "type": "integer"
         }
       },
-      "id": "ConcatPosition"
+      "id": "ConcatPosition",
+      "description": "A position that encapsulates an inner position and an index for the inner\nposition. A ConcatPosition can be used by a reader of a source that\nencapsulates a set of other sources.",
+      "type": "object"
     },
-    "CounterStructuredNameAndMetadata": {
-      "description": "A single message which encapsulates structured name and metadata for a given\ncounter.",
-      "type": "object",
+    "WriteInstruction": {
       "properties": {
-        "metadata": {
-          "$ref": "CounterMetadata",
-          "description": "Metadata associated with a counter"
+        "input": {
+          "$ref": "InstructionInput",
+          "description": "The input."
         },
-        "name": {
-          "$ref": "CounterStructuredName",
-          "description": "Structured name of the counter."
+        "sink": {
+          "$ref": "Sink",
+          "description": "The sink to write to."
         }
       },
-      "id": "CounterStructuredNameAndMetadata"
+      "id": "WriteInstruction",
+      "description": "An instruction that writes records.\nTakes one input, produces no outputs.",
+      "type": "object"
+    },
+    "StreamingComputationRanges": {
+      "properties": {
+        "computationId": {
+          "description": "The ID of the computation.",
+          "type": "string"
+        },
+        "rangeAssignments": {
+          "description": "Data disk assignments for ranges from this computation.",
+          "type": "array",
+          "items": {
+            "$ref": "KeyRangeDataDiskAssignment"
+          }
+        }
+      },
+      "id": "StreamingComputationRanges",
+      "description": "Describes full or partial data disk assignment information of the computation\nranges.",
+      "type": "object"
     },
     "AutoscalingSettings": {
-      "description": "Settings for WorkerPool autoscaling.",
-      "type": "object",
       "properties": {
         "algorithm": {
           "enum": [
@@ -1521,37 +1275,14 @@
           "type": "integer"
         }
       },
-      "id": "AutoscalingSettings"
-    },
-    "StreamingComputationRanges": {
-      "description": "Describes full or partial data disk assignment information of the computation\nranges.",
-      "type": "object",
-      "properties": {
-        "computationId": {
-          "description": "The ID of the computation.",
-          "type": "string"
-        },
-        "rangeAssignments": {
-          "type": "array",
-          "items": {
-            "$ref": "KeyRangeDataDiskAssignment"
-          },
-          "description": "Data disk assignments for ranges from this computation."
-        }
-      },
-      "id": "StreamingComputationRanges"
+      "id": "AutoscalingSettings",
+      "description": "Settings for WorkerPool autoscaling.",
+      "type": "object"
     },
     "ExecutionStageSummary": {
       "description": "Description of the composing transforms, names/ids, and input/outputs of a\nstage of execution.  Some composing transforms and sources may have been\ngenerated by the Dataflow service during execution planning.",
       "type": "object",
       "properties": {
-        "outputSource": {
-          "type": "array",
-          "items": {
-            "$ref": "StageSource"
-          },
-          "description": "Output sources for this stage."
-        },
         "name": {
           "description": "Dataflow service generated name for this stage.",
           "type": "string"
@@ -1564,15 +1295,15 @@
           }
         },
         "id": {
-          "type": "string",
-          "description": "Dataflow service generated id for this stage."
+          "description": "Dataflow service generated id for this stage.",
+          "type": "string"
         },
         "componentTransform": {
+          "description": "Transforms that comprise this execution stage.",
           "type": "array",
           "items": {
             "$ref": "ComponentTransform"
-          },
-          "description": "Transforms that comprise this execution stage."
+          }
         },
         "componentSource": {
           "description": "Collections produced and consumed by component transforms of this stage.",
@@ -1582,7 +1313,6 @@
           }
         },
         "kind": {
-          "type": "string",
           "enumDescriptions": [
             "Unrecognized transform type.",
             "ParDo transform.",
@@ -1605,14 +1335,20 @@
             "SINGLETON_KIND",
             "SHUFFLE_KIND"
           ],
-          "description": "Type of tranform this stage is executing."
+          "description": "Type of tranform this stage is executing.",
+          "type": "string"
+        },
+        "outputSource": {
+          "description": "Output sources for this stage.",
+          "type": "array",
+          "items": {
+            "$ref": "StageSource"
+          }
         }
       },
       "id": "ExecutionStageSummary"
     },
     "SendWorkerMessagesRequest": {
-      "description": "A request for sending worker messages to the service.",
-      "type": "object",
       "properties": {
         "workerMessages": {
           "description": "The WorkerMessages to send.",
@@ -1622,14 +1358,12 @@
           }
         }
       },
-      "id": "SendWorkerMessagesRequest"
+      "id": "SendWorkerMessagesRequest",
+      "description": "A request for sending worker messages to the service.",
+      "type": "object"
     },
     "SourceSplitShard": {
       "properties": {
-        "source": {
-          "$ref": "Source",
-          "description": "DEPRECATED"
-        },
         "derivationMode": {
           "enumDescriptions": [
             "The source derivation is unknown, or unspecified.",
@@ -1645,6 +1379,10 @@
           ],
           "description": "DEPRECATED",
           "type": "string"
+        },
+        "source": {
+          "description": "DEPRECATED",
+          "$ref": "Source"
         }
       },
       "id": "SourceSplitShard",
@@ -1652,10 +1390,12 @@
       "type": "object"
     },
     "CPUTime": {
-      "id": "CPUTime",
-      "description": "Modeled after information exposed by /proc/stat.",
-      "type": "object",
       "properties": {
+        "totalMs": {
+          "description": "Total active CPU time across all cores (ie., non-idle) in milliseconds\nsince start-up.",
+          "format": "uint64",
+          "type": "string"
+        },
         "rate": {
           "description": "Average CPU utilization rate (% non-idle cpu / second) since previous\nsample.",
           "format": "double",
@@ -1665,21 +1405,35 @@
           "description": "Timestamp of the measurement.",
           "format": "google-datetime",
           "type": "string"
-        },
-        "totalMs": {
-          "description": "Total active CPU time across all cores (ie., non-idle) in milliseconds\nsince start-up.",
-          "format": "uint64",
-          "type": "string"
         }
-      }
+      },
+      "id": "CPUTime",
+      "description": "Modeled after information exposed by /proc/stat.",
+      "type": "object"
     },
     "Environment": {
       "description": "Describes the environment in which a Dataflow Job runs.",
       "type": "object",
       "properties": {
+        "sdkPipelineOptions": {
+          "additionalProperties": {
+            "description": "Properties of the object.",
+            "type": "any"
+          },
+          "description": "The Cloud Dataflow SDK pipeline options specified by the user. These\noptions are passed through the service and are used to recreate the\nSDK pipeline options on the worker in a language agnostic and platform\nindependent way.",
+          "type": "object"
+        },
+        "userAgent": {
+          "additionalProperties": {
+            "description": "Properties of the object.",
+            "type": "any"
+          },
+          "description": "A description of the process that generated the request.",
+          "type": "object"
+        },
         "clusterManagerApiService": {
-          "type": "string",
-          "description": "The type of cluster manager API to use.  If unknown or\nunspecified, the service will attempt to choose a reasonable\ndefault.  This should be in the form of the API service name,\ne.g. \"compute.googleapis.com\"."
+          "description": "The type of cluster manager API to use.  If unknown or\nunspecified, the service will attempt to choose a reasonable\ndefault.  This should be in the form of the API service name,\ne.g. \"compute.googleapis.com\".",
+          "type": "string"
         },
         "tempStoragePrefix": {
           "description": "The prefix of the resources the system should use for temporary\nstorage.  The system will append the suffix \"/temp-{JOBNAME} to\nthis resource prefix, where {JOBNAME} is the value of the\njob_name field.  The resulting bucket and object prefix is used\nas the prefix of the resources used to store temporary data\nneeded during the job execution.  NOTE: This will override the\nvalue in taskrunner_settings.\nThe supported resource type is:\n\nGoogle Cloud Storage:\n\n  storage.googleapis.com/{bucket}/{object}\n  bucket.storage.googleapis.com/{object}",
@@ -1693,8 +1447,8 @@
           }
         },
         "dataset": {
-          "type": "string",
-          "description": "The dataset for the current project where various workflow\nrelated tables are stored.\n\nThe supported resource type is:\n\nGoogle BigQuery:\n  bigquery.googleapis.com/{dataset}"
+          "description": "The dataset for the current project where various workflow\nrelated tables are stored.\n\nThe supported resource type is:\n\nGoogle BigQuery:\n  bigquery.googleapis.com/{dataset}",
+          "type": "string"
         },
         "experiments": {
           "description": "The list of experiments to enable.",
@@ -1703,14 +1457,6 @@
             "type": "string"
           }
         },
-        "internalExperiments": {
-          "description": "Experimental settings.",
-          "type": "object",
-          "additionalProperties": {
-            "description": "Properties of the object. Contains field @type with type URL.",
-            "type": "any"
-          }
-        },
         "version": {
           "additionalProperties": {
             "description": "Properties of the object.",
@@ -1719,25 +1465,17 @@
           "description": "A structure describing which components and their versions of the service\nare required in order to run the job.",
           "type": "object"
         },
+        "internalExperiments": {
+          "additionalProperties": {
+            "description": "Properties of the object. Contains field @type with type URL.",
+            "type": "any"
+          },
+          "description": "Experimental settings.",
+          "type": "object"
+        },
         "serviceAccountEmail": {
           "description": "Identity to run virtual machines as. Defaults to the default account.",
           "type": "string"
-        },
-        "userAgent": {
-          "additionalProperties": {
-            "description": "Properties of the object.",
-            "type": "any"
-          },
-          "description": "A description of the process that generated the request.",
-          "type": "object"
-        },
-        "sdkPipelineOptions": {
-          "additionalProperties": {
-            "description": "Properties of the object.",
-            "type": "any"
-          },
-          "description": "The Cloud Dataflow SDK pipeline options specified by the user. These\noptions are passed through the service and are used to recreate the\nSDK pipeline options on the worker in a language agnostic and platform\nindependent way.",
-          "type": "object"
         }
       },
       "id": "Environment"
@@ -1746,20 +1484,6 @@
       "description": "A task which describes what action should be performed for the specified\nstreaming computation ranges.",
       "type": "object",
       "properties": {
-        "taskType": {
-          "enumDescriptions": [
-            "The streaming computation task is unknown, or unspecified.",
-            "Stop processing specified streaming computation range(s).",
-            "Start processing specified streaming computation range(s)."
-          ],
-          "enum": [
-            "STREAMING_COMPUTATION_TASK_UNKNOWN",
-            "STREAMING_COMPUTATION_TASK_STOP",
-            "STREAMING_COMPUTATION_TASK_START"
-          ],
-          "description": "A type of streaming computation task.",
-          "type": "string"
-        },
         "computationRanges": {
           "description": "Contains ranges of a streaming computation this task should apply to.",
           "type": "array",
@@ -1773,12 +1497,25 @@
           "items": {
             "$ref": "MountedDataDisk"
           }
+        },
+        "taskType": {
+          "enumDescriptions": [
+            "The streaming computation task is unknown, or unspecified.",
+            "Stop processing specified streaming computation range(s).",
+            "Start processing specified streaming computation range(s)."
+          ],
+          "enum": [
+            "STREAMING_COMPUTATION_TASK_UNKNOWN",
+            "STREAMING_COMPUTATION_TASK_STOP",
+            "STREAMING_COMPUTATION_TASK_START"
+          ],
+          "description": "A type of streaming computation task.",
+          "type": "string"
         }
       },
       "id": "StreamingComputationTask"
     },
     "SendDebugCaptureRequest": {
-      "id": "SendDebugCaptureRequest",
       "description": "Request to send encoded debug information.",
       "type": "object",
       "properties": {
@@ -1791,18 +1528,19 @@
           "type": "string"
         },
         "data": {
-          "type": "string",
-          "description": "The encoded debug information."
+          "description": "The encoded debug information.",
+          "type": "string"
         }
-      }
+      },
+      "id": "SendDebugCaptureRequest"
     },
     "GetDebugConfigResponse": {
       "description": "Response to a get debug configuration request.",
       "type": "object",
       "properties": {
         "config": {
-          "type": "string",
-          "description": "The encoded debug configuration for the requested component."
+          "description": "The encoded debug configuration for the requested component.",
+          "type": "string"
         }
       },
       "id": "GetDebugConfigResponse"
@@ -1820,14 +1558,25 @@
           "type": "string"
         },
         "userName": {
-          "type": "string",
-          "description": "Human-readable name for this transform; may be user or system generated."
+          "description": "Human-readable name for this transform; may be user or system generated.",
+          "type": "string"
         }
       },
       "id": "ComponentTransform"
     },
     "StreamingSetupTask": {
+      "description": "A task which initializes part of a streaming Dataflow job.",
+      "type": "object",
       "properties": {
+        "receiveWorkPort": {
+          "description": "The TCP port on which the worker should listen for messages from\nother streaming computation workers.",
+          "format": "int32",
+          "type": "integer"
+        },
+        "streamingComputationTopology": {
+          "description": "The global topology of the streaming Dataflow job.",
+          "$ref": "TopologyConfig"
+        },
         "workerHarnessPort": {
           "description": "The TCP port used by the worker to communicate with the Dataflow\nworker harness.",
           "format": "int32",
@@ -1836,24 +1585,11 @@
         "drain": {
           "description": "The user has requested drain.",
           "type": "boolean"
-        },
-        "receiveWorkPort": {
-          "type": "integer",
-          "description": "The TCP port on which the worker should listen for messages from\nother streaming computation workers.",
-          "format": "int32"
-        },
-        "streamingComputationTopology": {
-          "description": "The global topology of the streaming Dataflow job.",
-          "$ref": "TopologyConfig"
         }
       },
-      "id": "StreamingSetupTask",
-      "description": "A task which initializes part of a streaming Dataflow job.",
-      "type": "object"
+      "id": "StreamingSetupTask"
     },
     "PubsubLocation": {
-      "description": "Identifies a pubsub location to use for transferring data into or\nout of a streaming Dataflow job.",
-      "type": "object",
       "properties": {
         "withAttributes": {
           "description": "If true, then the client has requested to get pubsub attributes.",
@@ -1863,17 +1599,17 @@
           "description": "If set, contains a pubsub label from which to extract record ids.\nIf left empty, record deduplication will be strictly best effort.",
           "type": "string"
         },
-        "topic": {
-          "type": "string",
-          "description": "A pubsub topic, in the form of\n\"pubsub.googleapis.com/topics/\u003cproject-id\u003e/\u003ctopic-name\u003e\""
-        },
         "timestampLabel": {
           "description": "If set, contains a pubsub label from which to extract record timestamps.\nIf left empty, record timestamps will be generated upon arrival.",
           "type": "string"
         },
+        "topic": {
+          "description": "A pubsub topic, in the form of\n\"pubsub.googleapis.com/topics/\u003cproject-id\u003e/\u003ctopic-name\u003e\"",
+          "type": "string"
+        },
         "subscription": {
-          "type": "string",
-          "description": "A pubsub subscription, in the form of\n\"pubsub.googleapis.com/subscriptions/\u003cproject-id\u003e/\u003csubscription-name\u003e\""
+          "description": "A pubsub subscription, in the form of\n\"pubsub.googleapis.com/subscriptions/\u003cproject-id\u003e/\u003csubscription-name\u003e\"",
+          "type": "string"
         },
         "dropLateData": {
           "description": "Indicates whether the pipeline allows late-arriving data.",
@@ -1884,13 +1620,19 @@
           "type": "string"
         }
       },
-      "id": "PubsubLocation"
+      "id": "PubsubLocation",
+      "description": "Identifies a pubsub location to use for transferring data into or\nout of a streaming Dataflow job.",
+      "type": "object"
     },
     "WorkerHealthReport": {
-      "id": "WorkerHealthReport",
       "description": "WorkerHealthReport contains information about the health of a worker.\n\nThe VM should be identified by the labels attached to the WorkerMessage that\nthis health ping belongs to.",
       "type": "object",
       "properties": {
+        "vmStartupTime": {
+          "description": "The time the VM was booted.",
+          "format": "google-datetime",
+          "type": "string"
+        },
         "vmIsHealthy": {
           "description": "Whether the VM is healthy.",
           "type": "boolean"
@@ -1910,22 +1652,12 @@
             },
             "type": "object"
           }
-        },
-        "vmStartupTime": {
-          "description": "The time the VM was booted.",
-          "format": "google-datetime",
-          "type": "string"
         }
-      }
+      },
+      "id": "WorkerHealthReport"
     },
     "JobMessage": {
-      "description": "A particular message pertaining to a Dataflow job.",
-      "type": "object",
       "properties": {
-        "id": {
-          "description": "Identifies the message.  This is automatically generated by the\nservice; the caller should treat it as an opaque string.",
-          "type": "string"
-        },
         "messageText": {
           "description": "The text of the message.",
           "type": "string"
@@ -1954,15 +1686,31 @@
           "description": "The timestamp of the message.",
           "format": "google-datetime",
           "type": "string"
+        },
+        "id": {
+          "description": "Identifies the message.  This is automatically generated by the\nservice; the caller should treat it as an opaque string.",
+          "type": "string"
         }
       },
-      "id": "JobMessage"
+      "id": "JobMessage",
+      "description": "A particular message pertaining to a Dataflow job.",
+      "type": "object"
     },
     "ParameterMetadata": {
+      "description": "Metadata for a specific parameter.",
+      "type": "object",
       "properties": {
+        "label": {
+          "description": "Required. The label to display for the parameter.",
+          "type": "string"
+        },
+        "helpText": {
+          "description": "Required. The help text to display for the parameter.",
+          "type": "string"
+        },
         "isOptional": {
-          "type": "boolean",
-          "description": "Optional. Whether the parameter is optional. Defaults to false."
+          "description": "Optional. Whether the parameter is optional. Defaults to false.",
+          "type": "boolean"
         },
         "name": {
           "description": "Required. The name of the parameter.",
@@ -1974,45 +1722,35 @@
           "items": {
             "type": "string"
           }
-        },
-        "label": {
-          "description": "Required. The label to display for the parameter.",
-          "type": "string"
-        },
-        "helpText": {
-          "description": "Required. The help text to display for the parameter.",
-          "type": "string"
         }
       },
-      "id": "ParameterMetadata",
-      "description": "Metadata for a specific parameter.",
-      "type": "object"
+      "id": "ParameterMetadata"
     },
     "MultiOutputInfo": {
+      "description": "Information about an output of a multi-output DoFn.",
+      "type": "object",
       "properties": {
         "tag": {
           "description": "The id of the tag the user code will emit to this output by; this\nshould correspond to the tag of some SideInputInfo.",
           "type": "string"
         }
       },
-      "id": "MultiOutputInfo",
-      "description": "Information about an output of a multi-output DoFn.",
-      "type": "object"
+      "id": "MultiOutputInfo"
     },
     "SourceSplitRequest": {
-      "description": "Represents the operation to split a high-level Source specification\ninto bundles (parts for parallel processing).\n\nAt a high level, splitting of a source into bundles happens as follows:\nSourceSplitRequest is applied to the source. If it returns\nSOURCE_SPLIT_OUTCOME_USE_CURRENT, no further splitting happens and the source\nis used \"as is\". Otherwise, splitting is applied recursively to each\nproduced DerivedSource.\n\nAs an optimization, for any Source, if its does_not_need_splitting is\ntrue, the framework assumes that splitting this source would return\nSOURCE_SPLIT_OUTCOME_USE_CURRENT, and doesn't initiate a SourceSplitRequest.\nThis applies both to the initial source being split and to bundles\nproduced from it.",
-      "type": "object",
       "properties": {
         "source": {
-          "$ref": "Source",
-          "description": "Specification of the source to be split."
+          "description": "Specification of the source to be split.",
+          "$ref": "Source"
         },
         "options": {
-          "$ref": "SourceSplitOptions",
-          "description": "Hints for tuning the splitting process."
+          "description": "Hints for tuning the splitting process.",
+          "$ref": "SourceSplitOptions"
         }
       },
-      "id": "SourceSplitRequest"
+      "id": "SourceSplitRequest",
+      "description": "Represents the operation to split a high-level Source specification\ninto bundles (parts for parallel processing).\n\nAt a high level, splitting of a source into bundles happens as follows:\nSourceSplitRequest is applied to the source. If it returns\nSOURCE_SPLIT_OUTCOME_USE_CURRENT, no further splitting happens and the source\nis used \"as is\". Otherwise, splitting is applied recursively to each\nproduced DerivedSource.\n\nAs an optimization, for any Source, if its does_not_need_splitting is\ntrue, the framework assumes that splitting this source would return\nSOURCE_SPLIT_OUTCOME_USE_CURRENT, and doesn't initiate a SourceSplitRequest.\nThis applies both to the initial source being split and to bundles\nproduced from it.",
+      "type": "object"
     },
     "SourceGetMetadataResponse": {
       "description": "The result of a SourceGetMetadataOperation.",
@@ -2025,22 +1763,6 @@
       },
       "id": "SourceGetMetadataResponse"
     },
-    "ShellTask": {
-      "properties": {
-        "exitCode": {
-          "description": "Exit code for the task.",
-          "format": "int32",
-          "type": "integer"
-        },
-        "command": {
-          "description": "The shell command to run.",
-          "type": "string"
-        }
-      },
-      "id": "ShellTask",
-      "description": "A task which consists of a shell command for the worker to execute.",
-      "type": "object"
-    },
     "MetricShortId": {
       "description": "The metric short id is returned to the user alongside an offset into\nReportWorkItemStatusRequest",
       "type": "object",
@@ -2058,37 +1780,27 @@
       },
       "id": "MetricShortId"
     },
-    "TaskRunnerSettings": {
-      "description": "Taskrunner configuration settings.",
+    "ShellTask": {
+      "description": "A task which consists of a shell command for the worker to execute.",
       "type": "object",
       "properties": {
-        "baseUrl": {
-          "description": "The base URL for the taskrunner to use when accessing Google Cloud APIs.\n\nWhen workers access Google Cloud APIs, they logically do so via\nrelative URLs.  If this field is specified, it supplies the base\nURL to use for resolving these relative URLs.  The normative\nalgorithm used is defined by RFC 1808, \"Relative Uniform Resource\nLocators\".\n\nIf not specified, the default value is \"http://www.googleapis.com/\"",
+        "command": {
+          "description": "The shell command to run.",
           "type": "string"
         },
-        "logToSerialconsole": {
-          "description": "Whether to send taskrunner log info to Google Compute Engine VM serial\nconsole.",
-          "type": "boolean"
-        },
-        "continueOnException": {
-          "description": "Whether to continue taskrunner if an exception is hit.",
-          "type": "boolean"
-        },
-        "parallelWorkerSettings": {
-          "$ref": "WorkerSettings",
-          "description": "The settings to pass to the parallel worker harness."
-        },
-        "vmId": {
-          "type": "string",
-          "description": "The ID string of the VM."
-        },
-        "taskUser": {
-          "type": "string",
-          "description": "The UNIX user ID on the worker VM to use for tasks launched by\ntaskrunner; e.g. \"root\"."
-        },
+        "exitCode": {
+          "description": "Exit code for the task.",
+          "format": "int32",
+          "type": "integer"
+        }
+      },
+      "id": "ShellTask"
+    },
+    "TaskRunnerSettings": {
+      "properties": {
         "alsologtostderr": {
-          "type": "boolean",
-          "description": "Whether to also send taskrunner log info to stderr."
+          "description": "Whether to also send taskrunner log info to stderr.",
+          "type": "boolean"
         },
         "taskGroup": {
           "description": "The UNIX group ID on the worker VM to use for tasks launched by\ntaskrunner; e.g. \"wheel\".",
@@ -2113,26 +1825,26 @@
           "description": "The API version of endpoint, e.g. \"v1b3\"",
           "type": "string"
         },
-        "logUploadLocation": {
-          "description": "Indicates where to put logs.  If this is not specified, the logs\nwill not be uploaded.\n\nThe supported resource type is:\n\nGoogle Cloud Storage:\n  storage.googleapis.com/{bucket}/{object}\n  bucket.storage.googleapis.com/{object}",
-          "type": "string"
-        },
         "streamingWorkerMainClass": {
           "description": "The streaming worker main class name.",
           "type": "string"
         },
+        "logUploadLocation": {
+          "description": "Indicates where to put logs.  If this is not specified, the logs\nwill not be uploaded.\n\nThe supported resource type is:\n\nGoogle Cloud Storage:\n  storage.googleapis.com/{bucket}/{object}\n  bucket.storage.googleapis.com/{object}",
+          "type": "string"
+        },
         "workflowFileName": {
           "description": "The file to store the workflow in.",
           "type": "string"
         },
-        "tempStoragePrefix": {
-          "description": "The prefix of the resources the taskrunner should use for\ntemporary storage.\n\nThe supported resource type is:\n\nGoogle Cloud Storage:\n  storage.googleapis.com/{bucket}/{object}\n  bucket.storage.googleapis.com/{object}",
-          "type": "string"
-        },
         "baseTaskDir": {
           "description": "The location on the worker for task-specific subdirectories.",
           "type": "string"
         },
+        "tempStoragePrefix": {
+          "description": "The prefix of the resources the taskrunner should use for\ntemporary storage.\n\nThe supported resource type is:\n\nGoogle Cloud Storage:\n  storage.googleapis.com/{bucket}/{object}\n  bucket.storage.googleapis.com/{object}",
+          "type": "string"
+        },
         "languageHint": {
           "description": "The suggested backend language.",
           "type": "string"
@@ -2140,15 +1852,43 @@
         "commandlinesFileName": {
           "description": "The file to store preprocessing commands in.",
           "type": "string"
+        },
+        "baseUrl": {
+          "description": "The base URL for the taskrunner to use when accessing Google Cloud APIs.\n\nWhen workers access Google Cloud APIs, they logically do so via\nrelative URLs.  If this field is specified, it supplies the base\nURL to use for resolving these relative URLs.  The normative\nalgorithm used is defined by RFC 1808, \"Relative Uniform Resource\nLocators\".\n\nIf not specified, the default value is \"http://www.googleapis.com/\"",
+          "type": "string"
+        },
+        "logToSerialconsole": {
+          "description": "Whether to send taskrunner log info to Google Compute Engine VM serial\nconsole.",
+          "type": "boolean"
+        },
+        "continueOnException": {
+          "description": "Whether to continue taskrunner if an exception is hit.",
+          "type": "boolean"
+        },
+        "parallelWorkerSettings": {
+          "description": "The settings to pass to the parallel worker harness.",
+          "$ref": "WorkerSettings"
+        },
+        "vmId": {
+          "description": "The ID string of the VM.",
+          "type": "string"
+        },
+        "taskUser": {
+          "description": "The UNIX user ID on the worker VM to use for tasks launched by\ntaskrunner; e.g. \"root\".",
+          "type": "string"
         }
       },
-      "id": "TaskRunnerSettings"
+      "id": "TaskRunnerSettings",
+      "description": "Taskrunner configuration settings.",
+      "type": "object"
     },
     "Position": {
-      "id": "Position",
-      "description": "Position defines a position within a collection of data.  The value\ncan be either the end position, a key (used with ordered\ncollections), a byte offset, or a record index.",
-      "type": "object",
       "properties": {
+        "recordIndex": {
+          "description": "Position is a record index.",
+          "format": "int64",
+          "type": "string"
+        },
         "shufflePosition": {
           "description": "CloudPosition is a base64 encoded BatchShufflePosition (with FIXED\nsharding).",
           "type": "string"
@@ -2169,16 +1909,13 @@
         "key": {
           "description": "Position is a string key, ordered lexicographically.",
           "type": "string"
-        },
-        "recordIndex": {
-          "description": "Position is a record index.",
-          "format": "int64",
-          "type": "string"
         }
-      }
+      },
+      "id": "Position",
+      "description": "Position defines a position within a collection of data.  The value\ncan be either the end position, a key (used with ordered\ncollections), a byte offset, or a record index.",
+      "type": "object"
     },
     "SplitInt64": {
-      "type": "object",
       "properties": {
         "lowBits": {
           "description": "The low order bits: n & 0xffffffff.",
@@ -2192,13 +1929,36 @@
         }
       },
       "id": "SplitInt64",
-      "description": "A representation of an int64, n, that is immune to precision loss when\nencoded in JSON."
+      "description": "A representation of an int64, n, that is immune to precision loss when\nencoded in JSON.",
+      "type": "object"
     },
     "Source": {
-      "id": "Source",
       "description": "A source that records can be read and decoded from.",
       "type": "object",
       "properties": {
+        "spec": {
+          "additionalProperties": {
+            "description": "Properties of the object.",
+            "type": "any"
+          },
+          "description": "The source to read from, plus its parameters.",
+          "type": "object"
+        },
+        "metadata": {
+          "description": "Optionally, metadata for this source can be supplied right away,\navoiding a SourceGetMetadataOperation roundtrip\n(see SourceOperationRequest).\n\nThis field is meaningful only in the Source objects populated\nby the user (e.g. when filling in a DerivedSource).\nSource objects supplied by the framework to the user don't have\nthis field populated.",
+          "$ref": "SourceMetadata"
+        },
+        "baseSpecs": {
+          "description": "While splitting, sources may specify the produced bundles\nas differences against another source, in order to save backend-side\nmemory and allow bigger jobs. For details, see SourceSplitRequest.\nTo support this use case, the full set of parameters of the source\nis logically obtained by taking the latest explicitly specified value\nof each parameter in the order:\nbase_specs (later items win), spec (overrides anything in base_specs).",
+          "type": "array",
+          "items": {
+            "additionalProperties": {
+              "description": "Properties of the object.",
+              "type": "any"
+            },
+            "type": "object"
+          }
+        },
         "codec": {
           "additionalProperties": {
             "description": "Properties of the object.",
@@ -2208,63 +1968,41 @@
           "type": "object"
         },
         "doesNotNeedSplitting": {
-          "type": "boolean",
-          "description": "Setting this value to true hints to the framework that the source\ndoesn't need splitting, and using SourceSplitRequest on it would\nyield SOURCE_SPLIT_OUTCOME_USE_CURRENT.\n\nE.g. a file splitter may set this to true when splitting a single file\ninto a set of byte ranges of appropriate size, and set this\nto false when splitting a filepattern into individual files.\nHowever, for efficiency, a file splitter may decide to produce\nfile subranges directly from the filepattern to avoid a splitting\nround-trip.\n\nSee SourceSplitRequest for an overview of the splitting process.\n\nThis field is meaningful only in the Source objects populated\nby the user (e.g. when filling in a DerivedSource).\nSource objects supplied by the framework to the user don't have\nthis field populated."
-        },
-        "spec": {
-          "type": "object",
-          "additionalProperties": {
-            "type": "any",
-            "description": "Properties of the object."
-          },
-          "description": "The source to read from, plus its parameters."
-        },
-        "metadata": {
-          "$ref": "SourceMetadata",
-          "description": "Optionally, metadata for this source can be supplied right away,\navoiding a SourceGetMetadataOperation roundtrip\n(see SourceOperationRequest).\n\nThis field is meaningful only in the Source objects populated\nby the user (e.g. when filling in a DerivedSource).\nSource objects supplied by the framework to the user don't have\nthis field populated."
-        },
-        "baseSpecs": {
-          "description": "While splitting, sources may specify the produced bundles\nas differences against another source, in order to save backend-side\nmemory and allow bigger jobs. For details, see SourceSplitRequest.\nTo support this use case, the full set of parameters of the source\nis logically obtained by taking the latest explicitly specified value\nof each parameter in the order:\nbase_specs (later items win), spec (overrides anything in base_specs).",
-          "type": "array",
-          "items": {
-            "type": "object",
-            "additionalProperties": {
-              "description": "Properties of the object.",
-              "type": "any"
-            }
-          }
+          "description": "Setting this value to true hints to the framework that the source\ndoesn't need splitting, and using SourceSplitRequest on it would\nyield SOURCE_SPLIT_OUTCOME_USE_CURRENT.\n\nE.g. a file splitter may set this to true when splitting a single file\ninto a set of byte ranges of appropriate size, and set this\nto false when splitting a filepattern into individual files.\nHowever, for efficiency, a file splitter may decide to produce\nfile subranges directly from the filepattern to avoid a splitting\nround-trip.\n\nSee SourceSplitRequest for an overview of the splitting process.\n\nThis field is meaningful only in the Source objects populated\nby the user (e.g. when filling in a DerivedSource).\nSource objects supplied by the framework to the user don't have\nthis field populated.",
+          "type": "boolean"
         }
-      }
+      },
+      "id": "Source"
     },
     "WorkerPool": {
       "description": "Describes one particular pool of Cloud Dataflow workers to be\ninstantiated by the Cloud Dataflow service in order to perform the\ncomputations required by a job.  Note that a workflow job may use\nmultiple pools, in order to match the various computational\nrequirements of the various stages of the job.",
       "type": "object",
       "properties": {
         "subnetwork": {
-          "type": "string",
-          "description": "Subnetwork to which VMs will be assigned, if desired.  Expected to be of\nthe form \"regions/REGION/subnetworks/SUBNETWORK\"."
+          "description": "Subnetwork to which VMs will be assigned, if desired.  Expected to be of\nthe form \"regions/REGION/subnetworks/SUBNETWORK\".",
+          "type": "string"
         },
         "ipConfiguration": {
-          "type": "string",
-          "enumDescriptions": [
-            "The configuration is unknown, or unspecified.",
-            "Workers should have public IP addresses.",
-            "Workers should have private IP addresses."
-          ],
           "enum": [
             "WORKER_IP_UNSPECIFIED",
             "WORKER_IP_PUBLIC",
             "WORKER_IP_PRIVATE"
           ],
-          "description": "Configuration for VM IPs."
+          "description": "Configuration for VM IPs.",
+          "type": "string",
+          "enumDescriptions": [
+            "The configuration is unknown, or unspecified.",
+            "Workers should have public IP addresses.",
+            "Workers should have private IP addresses."
+          ]
         },
         "taskrunnerSettings": {
-          "$ref": "TaskRunnerSettings",
-          "description": "Settings passed through to Google Compute Engine workers when\nusing the standard Dataflow task runner.  Users should ignore\nthis field."
+          "description": "Settings passed through to Google Compute Engine workers when\nusing the standard Dataflow task runner.  Users should ignore\nthis field.",
+          "$ref": "TaskRunnerSettings"
         },
         "autoscalingSettings": {
-          "$ref": "AutoscalingSettings",
-          "description": "Settings for autoscaling of this WorkerPool."
+          "description": "Settings for autoscaling of this WorkerPool.",
+          "$ref": "AutoscalingSettings"
         },
         "metadata": {
           "additionalProperties": {
@@ -2273,25 +2011,25 @@
           "description": "Metadata to set on the Google Compute Engine VMs.",
           "type": "object"
         },
+        "network": {
+          "description": "Network to which VMs will be assigned.  If empty or unspecified,\nthe service will use the network \"default\".",
+          "type": "string"
+        },
         "defaultPackageSet": {
-          "type": "string",
-          "enumDescriptions": [
-            "The default set of packages to stage is unknown, or unspecified.",
-            "Indicates that no packages should be staged at the worker unless\nexplicitly specified by the job.",
-            "Stage packages typically useful to workers written in Java.",
-            "Stage pacakges typically useful to workers written in Python."
-          ],
           "enum": [
             "DEFAULT_PACKAGE_SET_UNKNOWN",
             "DEFAULT_PACKAGE_SET_NONE",
             "DEFAULT_PACKAGE_SET_JAVA",
             "DEFAULT_PACKAGE_SET_PYTHON"
           ],
-          "description": "The default package set to install.  This allows the service to\nselect a default set of packages which are useful to worker\nharnesses written in a particular language."
-        },
-        "network": {
-          "description": "Network to which VMs will be assigned.  If empty or unspecified,\nthe service will use the network \"default\".",
-          "type": "string"
+          "description": "The default package set to install.  This allows the service to\nselect a default set of packages which are useful to worker\nharnesses written in a particular language.",
+          "type": "string",
+          "enumDescriptions": [
+            "The default set of packages to stage is unknown, or unspecified.",
+            "Indicates that no packages should be staged at the worker unless\nexplicitly specified by the job.",
+            "Stage packages typically useful to workers written in Java.",
+            "Stage pacakges typically useful to workers written in Python."
+          ]
         },
         "numThreadsPerWorker": {
           "description": "The number of threads per worker harness. If empty or unspecified, the\nservice will choose a number of threads (according to the number of cores\non the selected machine type for batch, or 1 by convention for streaming).",
@@ -2312,13 +2050,19 @@
           "type": "string"
         },
         "packages": {
+          "description": "Packages to be installed on workers.",
           "type": "array",
           "items": {
             "$ref": "Package"
-          },
-          "description": "Packages to be installed on workers."
+          }
         },
         "teardownPolicy": {
+          "enum": [
+            "TEARDOWN_POLICY_UNKNOWN",
+            "TEARDOWN_ALWAYS",
+            "TEARDOWN_ON_SUCCESS",
+            "TEARDOWN_NEVER"
+          ],
           "description": "Sets the policy for determining when to turndown worker pool.\nAllowed values are: `TEARDOWN_ALWAYS`, `TEARDOWN_ON_SUCCESS`, and\n`TEARDOWN_NEVER`.\n`TEARDOWN_ALWAYS` means workers are always torn down regardless of whether\nthe job succeeds. `TEARDOWN_ON_SUCCESS` means workers are torn down\nif the job succeeds. `TEARDOWN_NEVER` means the workers are never torn\ndown.\n\nIf the workers are not torn down by the service, they will\ncontinue to run and use Google Compute Engine VM resources in the\nuser's project until they are explicitly terminated by the user.\nBecause of this, Google recommends using the `TEARDOWN_ALWAYS`\npolicy except for small, manually supervised test jobs.\n\nIf unknown or unspecified, the service will attempt to choose a reasonable\ndefault.",
           "type": "string",
           "enumDescriptions": [
@@ -2326,12 +2070,6 @@
             "Always teardown the resource.",
             "Teardown the resource on success. This is useful for debugging\nfailures.",
             "Never teardown the resource. This is useful for debugging and\ndevelopment."
-          ],
-          "enum": [
-            "TEARDOWN_POLICY_UNKNOWN",
-            "TEARDOWN_ALWAYS",
-            "TEARDOWN_ON_SUCCESS",
-            "TEARDOWN_NEVER"
           ]
         },
         "onHostMaintenance": {
@@ -2339,12 +2077,12 @@
           "type": "string"
         },
         "poolArgs": {
-          "description": "Extra arguments for this worker pool.",
-          "type": "object",
           "additionalProperties": {
-            "type": "any",
-            "description": "Properties of the object. Contains field @type with type URL."
-          }
+            "description": "Properties of the object. Contains field @type with type URL.",
+            "type": "any"
+          },
+          "description": "Extra arguments for this worker pool.",
+          "type": "object"
         },
         "diskSizeGb": {
           "description": "Size of root disk for VMs, in GB.  If zero or unspecified, the service will\nattempt to choose a reasonable default.",
@@ -2368,50 +2106,43 @@
           "type": "string"
         },
         "dataDisks": {
+          "description": "Data disks that are used by a VM in this workflow.",
           "type": "array",
           "items": {
             "$ref": "Disk"
-          },
-          "description": "Data disks that are used by a VM in this workflow."
+          }
         }
       },
       "id": "WorkerPool"
     },
     "SourceOperationRequest": {
+      "description": "A work item that represents the different operations that can be\nperformed on a user-defined Source specification.",
       "type": "object",
       "properties": {
-        "split": {
-          "description": "Information about a request to split a source.",
-          "$ref": "SourceSplitRequest"
-        },
         "getMetadata": {
-          "$ref": "SourceGetMetadataRequest",
-          "description": "Information about a request to get metadata about a source."
+          "description": "Information about a request to get metadata about a source.",
+          "$ref": "SourceGetMetadataRequest"
+        },
+        "split": {
+          "$ref": "SourceSplitRequest",
+          "description": "Information about a request to split a source."
         }
       },
-      "id": "SourceOperationRequest",
-      "description": "A work item that represents the different operations that can be\nperformed on a user-defined Source specification."
+      "id": "SourceOperationRequest"
     },
     "WorkItem": {
-      "description": "WorkItem represents basic information about a WorkItem to be executed\nin the cloud.",
-      "type": "object",
       "properties": {
-        "id": {
-          "type": "string",
-          "description": "Identifies this WorkItem.",
-          "format": "int64"
-        },
         "configuration": {
-          "type": "string",
-          "description": "Work item-specific configuration as an opaque blob."
+          "description": "Work item-specific configuration as an opaque blob.",
+          "type": "string"
         },
         "mapTask": {
-          "$ref": "MapTask",
-          "description": "Additional information for MapTask WorkItems."
+          "description": "Additional information for MapTask WorkItems.",
+          "$ref": "MapTask"
         },
         "seqMapTask": {
-          "$ref": "SeqMapTask",
-          "description": "Additional information for SeqMapTask WorkItems."
+          "description": "Additional information for SeqMapTask WorkItems.",
+          "$ref": "SeqMapTask"
         },
         "packages": {
           "description": "Any required packages that need to be fetched in order to execute\nthis WorkItem.",
@@ -2424,32 +2155,32 @@
           "description": "Identifies the cloud project this WorkItem belongs to.",
           "type": "string"
         },
-        "sourceOperationTask": {
-          "$ref": "SourceOperationRequest",
-          "description": "Additional information for source operation WorkItems."
+        "streamingSetupTask": {
+          "$ref": "StreamingSetupTask",
+          "description": "Additional information for StreamingSetupTask WorkItems."
         },
         "reportStatusInterval": {
           "description": "Recommended reporting interval.",
           "format": "google-duration",
           "type": "string"
         },
-        "streamingSetupTask": {
-          "$ref": "StreamingSetupTask",
-          "description": "Additional information for StreamingSetupTask WorkItems."
+        "sourceOperationTask": {
+          "description": "Additional information for source operation WorkItems.",
+          "$ref": "SourceOperationRequest"
         },
         "streamingConfigTask": {
           "$ref": "StreamingConfigTask",
           "description": "Additional information for StreamingConfigTask WorkItems."
         },
         "leaseExpireTime": {
-          "type": "string",
           "description": "Time when the lease on this Work will expire.",
-          "format": "google-datetime"
+          "format": "google-datetime",
+          "type": "string"
         },
         "initialReportIndex": {
-          "type": "string",
           "description": "The initial index to use when reporting the status of the WorkItem.",
-          "format": "int64"
+          "format": "int64",
+          "type": "string"
         },
         "shellTask": {
           "$ref": "ShellTask",
@@ -2462,23 +2193,16 @@
         "jobId": {
           "description": "Identifies the workflow job this WorkItem belongs to.",
           "type": "string"
+        },
+        "id": {
+          "description": "Identifies this WorkItem.",
+          "format": "int64",
+          "type": "string"
         }
       },
-      "id": "WorkItem"
-    },
-    "ResourceUtilizationReport": {
-      "id": "ResourceUtilizationReport",
-      "description": "Worker metrics exported from workers. This contains resource utilization\nmetrics accumulated from a variety of sources. For more information, see\ngo/df-resource-signals.",
-      "type": "object",
-      "properties": {
-        "cpuTime": {
-          "description": "CPU utilization samples.",
-          "type": "array",
-          "items": {
-            "$ref": "CPUTime"
-          }
-        }
-      }
+      "id": "WorkItem",
+      "description": "WorkItem represents basic information about a WorkItem to be executed\nin the cloud.",
+      "type": "object"
     },
     "ReportedParallelism": {
       "description": "Represents the level of parallelism in a WorkItem's input,\nreported by the worker.",
@@ -2496,11 +2220,22 @@
       },
       "id": "ReportedParallelism"
     },
-    "TopologyConfig": {
-      "id": "TopologyConfig",
-      "description": "Global topology of the streaming Dataflow job, including all\ncomputations and their sharded locations.",
+    "ResourceUtilizationReport": {
+      "description": "Worker metrics exported from workers. This contains resource utilization\nmetrics accumulated from a variety of sources. For more information, see\ngo/df-resource-signals.",
       "type": "object",
       "properties": {
+        "cpuTime": {
+          "description": "CPU utilization samples.",
+          "type": "array",
+          "items": {
+            "$ref": "CPUTime"
+          }
+        }
+      },
+      "id": "ResourceUtilizationReport"
+    },
+    "TopologyConfig": {
+      "properties": {
         "userStageToComputationNameMap": {
           "additionalProperties": {
             "type": "string"
@@ -2516,11 +2251,11 @@
           }
         },
         "dataDiskAssignments": {
+          "description": "The disks assigned to a streaming Dataflow job.",
           "type": "array",
           "items": {
             "$ref": "DataDiskAssignment"
-          },
-          "description": "The disks assigned to a streaming Dataflow job."
+          }
         },
         "persistentStateVersion": {
           "description": "Version number for persistent state.",
@@ -2528,11 +2263,14 @@
           "type": "integer"
         },
         "forwardingKeyBits": {
-          "type": "integer",
           "description": "The size (in bits) of keys that will be assigned to source messages.",
-          "format": "int32"
+          "format": "int32",
+          "type": "integer"
         }
-      }
+      },
+      "id": "TopologyConfig",
+      "description": "Global topology of the streaming Dataflow job, including all\ncomputations and their sharded locations.",
+      "type": "object"
     },
     "SourceSplitOptions": {
       "description": "Hints for splitting a Source into bundles (parts for parallel\nprocessing) using SourceSplitRequest.",
@@ -2544,41 +2282,33 @@
           "type": "string"
         },
         "desiredShardSizeBytes": {
-          "type": "string",
           "description": "DEPRECATED in favor of desired_bundle_size_bytes.",
-          "format": "int64"
+          "format": "int64",
+          "type": "string"
         }
       },
       "id": "SourceSplitOptions"
     },
     "ReadInstruction": {
-      "description": "An instruction that reads records.\nTakes no inputs, produces one output.",
-      "type": "object",
       "properties": {
         "source": {
-          "description": "The source to read from.",
-          "$ref": "Source"
+          "$ref": "Source",
+          "description": "The source to read from."
         }
       },
-      "id": "ReadInstruction"
+      "id": "ReadInstruction",
+      "description": "An instruction that reads records.\nTakes no inputs, produces one output.",
+      "type": "object"
     },
     "WorkerSettings": {
       "properties": {
-        "reportingEnabled": {
-          "description": "Whether to send work progress updates to the service.",
-          "type": "boolean"
-        },
-        "baseUrl": {
-          "type": "string",
-          "description": "The base URL for accessing Google Cloud APIs.\n\nWhen workers access Google Cloud APIs, they logically do so via\nrelative URLs.  If this field is specified, it supplies the base\nURL to use for resolving these relative URLs.  The normative\nalgorithm used is defined by RFC 1808, \"Relative Uniform Resource\nLocators\".\n\nIf not specified, the default value is \"http://www.googleapis.com/\""
-        },
         "servicePath": {
-          "type": "string",
-          "description": "The Cloud Dataflow service path relative to the root URL, for example,\n\"dataflow/v1b3/projects\"."
+          "description": "The Cloud Dataflow service path relative to the root URL, for example,\n\"dataflow/v1b3/projects\".",
+          "type": "string"
         },
         "shuffleServicePath": {
-          "type": "string",
-          "description": "The Shuffle service path relative to the root URL, for example,\n\"shuffle/v1beta1\"."
+          "description": "The Shuffle service path relative to the root URL, for example,\n\"shuffle/v1beta1\".",
+          "type": "string"
         },
         "workerId": {
           "description": "The ID of the worker running this pipeline.",
@@ -2587,6 +2317,14 @@
         "tempStoragePrefix": {
           "description": "The prefix of the resources the system should use for temporary\nstorage.\n\nThe supported resource type is:\n\nGoogle Cloud Storage:\n\n  storage.googleapis.com/{bucket}/{object}\n  bucket.storage.googleapis.com/{object}",
           "type": "string"
+        },
+        "reportingEnabled": {
+          "description": "Whether to send work progress updates to the service.",
+          "type": "boolean"
+        },
+        "baseUrl": {
+          "description": "The base URL for accessing Google Cloud APIs.\n\nWhen workers access Google Cloud APIs, they logically do so via\nrelative URLs.  If this field is specified, it supplies the base\nURL to use for resolving these relative URLs.  The normative\nalgorithm used is defined by RFC 1808, \"Relative Uniform Resource\nLocators\".\n\nIf not specified, the default value is \"http://www.googleapis.com/\"",
+          "type": "string"
         }
       },
       "id": "WorkerSettings",
@@ -2612,7 +2350,6 @@
       "type": "object"
     },
     "StreamingStageLocation": {
-      "type": "object",
       "properties": {
         "streamId": {
           "description": "Identifies the particular stream within the streaming Dataflow\njob.",
@@ -2620,12 +2357,10 @@
         }
       },
       "id": "StreamingStageLocation",
-      "description": "Identifies the location of a streaming computation stage, for\nstage-to-stage communication."
+      "description": "Identifies the location of a streaming computation stage, for\nstage-to-stage communication.",
+      "type": "object"
     },
     "ApproximateSplitRequest": {
-      "id": "ApproximateSplitRequest",
-      "description": "A suggestion by the service to the worker to dynamically split the WorkItem.",
-      "type": "object",
       "properties": {
         "fractionConsumed": {
           "description": "A fraction at which to split the work item, from 0.0 (beginning of the\ninput) to 1.0 (end of the input).",
@@ -2636,16 +2371,13 @@
           "description": "A Position at which to split the work item.",
           "$ref": "Position"
         }
-      }
+      },
+      "id": "ApproximateSplitRequest",
+      "description": "A suggestion by the service to the worker to dynamically split the WorkItem.",
+      "type": "object"
     },
     "Status": {
-      "description": "The `Status` type defines a logical error model that is suitable for different\nprogramming environments, including REST APIs and RPC APIs. It is used by\n[gRPC](https://github.com/grpc). The error model is designed to be:\n\n- Simple to use and understand for most users\n- Flexible enough to meet unexpected needs\n\n# Overview\n\nThe `Status` message contains three pieces of data: error code, error message,\nand error details. The error code should be an enum value of\ngoogle.rpc.Code, but it may accept additional error codes if needed.  The\nerror message should be a developer-facing English message that helps\ndevelopers *understand* and *resolve* the error. If a localized user-facing\nerror message is needed, put the localized message in the error details or\nlocalize it in the client. The optional error details may contain arbitrary\ninformation about the error. There is a predefined set of error detail types\nin the package `google.rpc` which can be used for common error conditions.\n\n# Language mapping\n\nThe `Status` message is the logical representation of the error model, but it\nis not necessarily the actual wire format. When the `Status` message is\nexposed in different client libraries and different wire protocols, it can be\nmapped differently. For example, it will likely be mapped to some exceptions\nin Java, but more likely mapped to some error codes in C.\n\n# Other uses\n\nThe error model and the `Status` message can be used in a variety of\nenvironments, either with or without APIs, to provide a\nconsistent developer experience across different environments.\n\nExample uses of this error model include:\n\n- Partial errors. If a service needs to return partial errors to the client,\n    it may embed the `Status` in the normal response to indicate the partial\n    errors.\n\n- Workflow errors. A typical workflow has multiple steps. Each step may\n    have a `Status` message for error reporting purpose.\n\n- Batch operations. If a client uses batch request and batch response, the\n    `Status` message should be used directly inside batch response, one for\n    each error sub-response.\n\n- Asynchronous operations. If an API call embeds asynchronous operation\n    results in its response, the status of those operations should be\n    represented directly using the `Status` message.\n\n- Logging. If some API errors are stored in logs, the message `Status` could\n    be used directly after any stripping needed for security/privacy reasons.",
-      "type": "object",
       "properties": {
-        "message": {
-          "description": "A developer-facing error message, which should be in English. Any\nuser-facing error message should be localized and sent in the\ngoogle.rpc.Status.details field, or localized by the client.",
-          "type": "string"
-        },
         "details": {
           "description": "A list of messages that carry the error details.  There will be a\ncommon set of message types for APIs to use.",
           "type": "array",
@@ -2661,36 +2393,40 @@
           "description": "The status code, which should be an enum value of google.rpc.Code.",
           "format": "int32",
           "type": "integer"
+        },
+        "message": {
+          "description": "A developer-facing error message, which should be in English. Any\nuser-facing error message should be localized and sent in the\ngoogle.rpc.Status.details field, or localized by the client.",
+          "type": "string"
         }
       },
-      "id": "Status"
+      "id": "Status",
+      "description": "The `Status` type defines a logical error model that is suitable for different\nprogramming environments, including REST APIs and RPC APIs. It is used by\n[gRPC](https://github.com/grpc). The error model is designed to be:\n\n- Simple to use and understand for most users\n- Flexible enough to meet unexpected needs\n\n# Overview\n\nThe `Status` message contains three pieces of data: error code, error message,\nand error details. The error code should be an enum value of\ngoogle.rpc.Code, but it may accept additional error codes if needed.  The\nerror message should be a developer-facing English message that helps\ndevelopers *understand* and *resolve* the error. If a localized user-facing\nerror message is needed, put the localized message in the error details or\nlocalize it in the client. The optional error details may contain arbitrary\ninformation about the error. There is a predefined set of error detail types\nin the package `google.rpc` which can be used for common error conditions.\n\n# Language mapping\n\nThe `Status` message is the logical representation of the error model, but it\nis not necessarily the actual wire format. When the `Status` message is\nexposed in different client libraries and different wire protocols, it can be\nmapped differently. For example, it will likely be mapped to some exceptions\nin Java, but more likely mapped to some error codes in C.\n\n# Other uses\n\nThe error model and the `Status` message can be used in a variety of\nenvironments, either with or without APIs, to provide a\nconsistent developer experience across different environments.\n\nExample uses of this error model include:\n\n- Partial errors. If a service needs to return partial errors to the client,\n    it may embed the `Status` in the normal response to indicate the partial\n    errors.\n\n- Workflow errors. A typical workflow has multiple steps. Each step may\n    have a `Status` message for error reporting purpose.\n\n- Batch operations. If a client uses batch request and batch response, the\n    `Status` message should be used directly inside batch response, one for\n    each error sub-response.\n\n- Asynchronous operations. If an API call embeds asynchronous operation\n    results in its response, the status of those operations should be\n    represented directly using the `Status` message.\n\n- Logging. If some API errors are stored in logs, the message `Status` could\n    be used directly after any stripping needed for security/privacy reasons.",
+      "type": "object"
     },
     "StreamLocation": {
       "description": "Describes a stream of data, either as input to be processed or as\noutput of a streaming Dataflow job.",
       "type": "object",
       "properties": {
         "customSourceLocation": {
-          "$ref": "CustomSourceLocation",
-          "description": "The stream is a custom source."
+          "description": "The stream is a custom source.",
+          "$ref": "CustomSourceLocation"
         },
         "streamingStageLocation": {
-          "description": "The stream is part of another computation within the current\nstreaming Dataflow job.",
-          "$ref": "StreamingStageLocation"
+          "$ref": "StreamingStageLocation",
+          "description": "The stream is part of another computation within the current\nstreaming Dataflow job."
         },
         "pubsubLocation": {
           "$ref": "PubsubLocation",
           "description": "The stream is a pubsub stream."
         },
         "sideInputLocation": {
-          "$ref": "StreamingSideInputLocation",
-          "description": "The stream is a streaming side input."
+          "description": "The stream is a streaming side input.",
+          "$ref": "StreamingSideInputLocation"
         }
       },
       "id": "StreamLocation"
     },
     "SendWorkerMessagesResponse": {
-      "description": "The response to the worker messages.",
-      "type": "object",
       "properties": {
         "workerMessageResponses": {
           "description": "The servers response to the worker messages.",
@@ -2700,26 +2436,30 @@
           }
         }
       },
-      "id": "SendWorkerMessagesResponse"
+      "id": "SendWorkerMessagesResponse",
+      "description": "The response to the worker messages.",
+      "type": "object"
     },
-    "TransformSummary": {
+    "LeaseWorkItemResponse": {
+      "description": "Response to a request to lease WorkItems.",
       "type": "object",
       "properties": {
-        "name": {
-          "description": "User provided name for this transform instance.",
-          "type": "string"
-        },
+        "workItems": {
+          "description": "A list of the leased WorkItems.",
+          "type": "array",
+          "items": {
+            "$ref": "WorkItem"
+          }
+        }
+      },
+      "id": "LeaseWorkItemResponse"
+    },
+    "TransformSummary": {
+      "properties": {
         "id": {
           "description": "SDK generated id of this transform instance.",
           "type": "string"
         },
-        "outputCollectionName": {
-          "description": "User  names for all collection outputs to this transform.",
-          "type": "array",
-          "items": {
-            "type": "string"
-          }
-        },
         "displayData": {
           "description": "Transform-specific display data.",
           "type": "array",
@@ -2727,6 +2467,13 @@
             "$ref": "DisplayData"
           }
         },
+        "outputCollectionName": {
+          "description": "User  names for all collection outputs to this transform.",
+          "type": "array",
+          "items": {
+            "type": "string"
+          }
+        },
         "kind": {
           "enumDescriptions": [
             "Unrecognized transform type.",
@@ -2759,56 +2506,71 @@
           "items": {
             "type": "string"
           }
+        },
+        "name": {
+          "description": "User provided name for this transform instance.",
+          "type": "string"
         }
       },
       "id": "TransformSummary",
-      "description": "Description of the type, names/ids, and input/outputs for a transform."
+      "description": "Description of the type, names/ids, and input/outputs for a transform.",
+      "type": "object"
     },
     "StreamingComputationConfig": {
-      "description": "Configuration information for a single streaming computation.",
-      "type": "object",
       "properties": {
-        "computationId": {
-          "description": "Unique identifier for this computation.",
-          "type": "string"
-        },
         "systemName": {
           "description": "System defined name for this computation.",
           "type": "string"
         },
         "stageName": {
-          "type": "string",
-          "description": "Stage name of this computation."
+          "description": "Stage name of this computation.",
+          "type": "string"
         },
         "instructions": {
+          "description": "Instructions that comprise the computation.",
           "type": "array",
           "items": {
             "$ref": "ParallelInstruction"
-          },
-          "description": "Instructions that comprise the computation."
-        }
-      },
-      "id": "StreamingComputationConfig"
-    },
-    "LeaseWorkItemResponse": {
-      "description": "Response to a request to lease WorkItems.",
-      "type": "object",
-      "properties": {
-        "workItems": {
-          "description": "A list of the leased WorkItems.",
-          "type": "array",
-          "items": {
-            "$ref": "WorkItem"
           }
+        },
+        "computationId": {
+          "description": "Unique identifier for this computation.",
+          "type": "string"
         }
       },
-      "id": "LeaseWorkItemResponse"
+      "id": "StreamingComputationConfig",
+      "description": "Configuration information for a single streaming computation.",
+      "type": "object"
+    },
+    "Sink": {
+      "properties": {
+        "codec": {
+          "additionalProperties": {
+            "description": "Properties of the object.",
+            "type": "any"
+          },
+          "description": "The codec to use to encode data written to the sink.",
+          "type": "object"
+        },
+        "spec": {
+          "additionalProperties": {
+            "description": "Properties of the object.",
+            "type": "any"
+          },
+          "description": "The sink to write to, plus its parameters.",
+          "type": "object"
+        }
+      },
+      "id": "Sink",
+      "description": "A sink that records can be encoded and written to.",
+      "type": "object"
     },
     "LaunchTemplateParameters": {
-      "id": "LaunchTemplateParameters",
-      "description": "Parameters to provide to the template being launched.",
-      "type": "object",
       "properties": {
+        "environment": {
+          "$ref": "RuntimeEnvironment",
+          "description": "The runtime environment for the job."
+        },
         "parameters": {
           "additionalProperties": {
             "type": "string"
@@ -2819,68 +2581,31 @@
         "jobName": {
           "description": "Required. The job name to use for the created job.",
           "type": "string"
-        },
-        "environment": {
-          "$ref": "RuntimeEnvironment",
-          "description": "The runtime environment for the job."
-        }
-      }
-    },
-    "Sink": {
-      "description": "A sink that records can be encoded and written to.",
-      "type": "object",
-      "properties": {
-        "spec": {
-          "additionalProperties": {
-            "type": "any",
-            "description": "Properties of the object."
-          },
-          "description": "The sink to write to, plus its parameters.",
-          "type": "object"
-        },
-        "codec": {
-          "additionalProperties": {
-            "description": "Properties of the object.",
-            "type": "any"
-          },
-          "description": "The codec to use to encode data written to the sink.",
-          "type": "object"
         }
       },
-      "id": "Sink"
+      "id": "LaunchTemplateParameters",
+      "description": "Parameters to provide to the template being launched.",
+      "type": "object"
     },
     "FlattenInstruction": {
       "description": "An instruction that copies its inputs (zero or more) to its (single) output.",
       "type": "object",
       "properties": {
         "inputs": {
+          "description": "Describes the inputs to the flatten instruction.",
           "type": "array",
           "items": {
             "$ref": "InstructionInput"
-          },
-          "description": "Describes the inputs to the flatten instruction."
+          }
         }
       },
       "id": "FlattenInstruction"
     },
     "PartialGroupByKeyInstruction": {
-      "description": "An instruction that does a partial group-by-key.\nOne input and one output.",
-      "type": "object",
       "properties": {
-        "originalCombineValuesStepName": {
-          "description": "If this instruction includes a combining function, this is the name of the\nCombineValues instruction lifted into this instruction.",
-          "type": "string"
-        },
-        "sideInputs": {
-          "description": "Zero or more side inputs.",
-          "type": "array",
-          "items": {
-            "$ref": "SideInputInfo"
-          }
-        },
         "input": {
-          "$ref": "InstructionInput",
-          "description": "Describes the input to the partial group-by-key instruction."
+          "description": "Describes the input to the partial group-by-key instruction.",
+          "$ref": "InstructionInput"
         },
         "inputElementCodec": {
           "additionalProperties": {
@@ -2899,32 +2624,43 @@
           "type": "object"
         },
         "originalCombineValuesInputStoreName": {
-          "type": "string",
-          "description": "If this instruction includes a combining function this is the name of the\nintermediate store between the GBK and the CombineValues."
+          "description": "If this instruction includes a combining function this is the name of the\nintermediate store between the GBK and the CombineValues.",
+          "type": "string"
+        },
+        "originalCombineValuesStepName": {
+          "description": "If this instruction includes a combining function, this is the name of the\nCombineValues instruction lifted into this instruction.",
+          "type": "string"
+        },
+        "sideInputs": {
+          "description": "Zero or more side inputs.",
+          "type": "array",
+          "items": {
+            "$ref": "SideInputInfo"
+          }
         }
       },
-      "id": "PartialGroupByKeyInstruction"
+      "id": "PartialGroupByKeyInstruction",
+      "description": "An instruction that does a partial group-by-key.\nOne input and one output.",
+      "type": "object"
     },
     "InstructionInput": {
-      "id": "InstructionInput",
       "description": "An input of an instruction, as a reference to an output of a\nproducer instruction.",
       "type": "object",
       "properties": {
-        "outputNum": {
-          "type": "integer",
-          "description": "The output index (origin zero) within the producer.",
-          "format": "int32"
-        },
         "producerInstructionIndex": {
           "description": "The index (origin zero) of the parallel instruction that produces\nthe output to be consumed by this input.  This index is relative\nto the list of instructions in this input's instruction's\ncontaining MapTask.",
           "format": "int32",
           "type": "integer"
+        },
+        "outputNum": {
+          "description": "The output index (origin zero) within the producer.",
+          "format": "int32",
+          "type": "integer"
         }
-      }
+      },
+      "id": "InstructionInput"
     },
     "StageSource": {
-      "description": "Description of an input or output of an execution stage.",
-      "type": "object",
       "properties": {
         "originalTransformOrCollection": {
           "description": "User name for the original user transform or collection with which this\nsource is most closely associated.",
@@ -2944,9 +2680,12 @@
           "type": "string"
         }
       },
-      "id": "StageSource"
+      "id": "StageSource",
+      "description": "Description of an input or output of an execution stage.",
+      "type": "object"
     },
     "StringList": {
+      "description": "A metric value representing a list of strings.",
       "type": "object",
       "properties": {
         "elements": {
@@ -2957,14 +2696,33 @@
           }
         }
       },
-      "id": "StringList",
-      "description": "A metric value representing a list of strings."
+      "id": "StringList"
     },
     "DisplayData": {
-      "id": "DisplayData",
-      "description": "Data provided with a pipeline or transform to provide descriptive info.",
-      "type": "object",
       "properties": {
+        "strValue": {
+          "description": "Contains value if the data is of string type.",
+          "type": "string"
+        },
+        "int64Value": {
+          "description": "Contains value if the data is of int64 type.",
+          "format": "int64",
+          "type": "string"
+        },
+        "durationValue": {
+          "description": "Contains value if the data is of duration type.",
+          "format": "google-duration",
+          "type": "string"
+        },
+        "namespace": {
+          "description": "The namespace for the key. This is usually a class name or programming\nlanguage namespace (i.e. python module) which defines the display data.\nThis allows a dax monitoring system to specially handle the data\nand perform custom rendering.",
+          "type": "string"
+        },
+        "floatValue": {
+          "description": "Contains value if the data is of float type.",
+          "format": "float",
+          "type": "number"
+        },
         "key": {
           "description": "The key identifying the display data.\nThis is intended to be used as a label for the display data\nwhen viewed in a dax monitoring system.",
           "type": "string"
@@ -2973,67 +2731,45 @@
           "description": "A possible additional shorter value to display.\nFor example a java_class_name_value of com.mypackage.MyDoFn\nwill be stored with MyDoFn as the short_str_value and\ncom.mypackage.MyDoFn as the java_class_name value.\nshort_str_value can be displayed and java_class_name_value\nwill be displayed as a tooltip.",
           "type": "string"
         },
-        "label": {
-          "description": "An optional label to display in a dax UI for the element.",
-          "type": "string"
-        },
         "url": {
           "description": "An optional full URL.",
           "type": "string"
         },
+        "label": {
+          "description": "An optional label to display in a dax UI for the element.",
+          "type": "string"
+        },
         "timestampValue": {
           "description": "Contains value if the data is of timestamp type.",
           "format": "google-datetime",
           "type": "string"
         },
-        "boolValue": {
-          "description": "Contains value if the data is of a boolean type.",
-          "type": "boolean"
-        },
         "javaClassValue": {
           "description": "Contains value if the data is of java class type.",
           "type": "string"
         },
-        "strValue": {
-          "type": "string",
-          "description": "Contains value if the data is of string type."
-        },
-        "durationValue": {
-          "description": "Contains value if the data is of duration type.",
-          "format": "google-duration",
-          "type": "string"
-        },
-        "int64Value": {
-          "description": "Contains value if the data is of int64 type.",
-          "format": "int64",
-          "type": "string"
-        },
-        "namespace": {
-          "type": "string",
-          "description": "The namespace for the key. This is usually a class name or programming\nlanguage namespace (i.e. python module) which defines the display data.\nThis allows a dax monitoring system to specially handle the data\nand perform custom rendering."
-        },
-        "floatValue": {
-          "type": "number",
-          "description": "Contains value if the data is of float type.",
-          "format": "float"
+        "boolValue": {
+          "description": "Contains value if the data is of a boolean type.",
+          "type": "boolean"
         }
-      }
+      },
+      "id": "DisplayData",
+      "description": "Data provided with a pipeline or transform to provide descriptive info.",
+      "type": "object"
     },
     "LeaseWorkItemRequest": {
-      "description": "Request to lease WorkItems.",
-      "type": "object",
       "properties": {
         "currentWorkerTime": {
-          "type": "string",
           "description": "The current timestamp at the worker.",
-          "format": "google-datetime"
+          "format": "google-datetime",
+          "type": "string"
         },
         "workItemTypes": {
+          "description": "Filter for WorkItem type.",
           "type": "array",
           "items": {
             "type": "string"
-          },
-          "description": "Filter for WorkItem type."
+          }
         },
         "location": {
           "description": "The location which contains the WorkItem's job.",
@@ -3056,37 +2792,39 @@
           "type": "string"
         }
       },
-      "id": "LeaseWorkItemRequest"
+      "id": "LeaseWorkItemRequest",
+      "description": "Request to lease WorkItems.",
+      "type": "object"
     },
     "GetDebugConfigRequest": {
-      "description": "Request to get updated debug configuration for component.",
-      "type": "object",
       "properties": {
-        "workerId": {
-          "description": "The worker id, i.e., VM hostname.",
-          "type": "string"
-        },
         "componentId": {
           "description": "The internal component id for which debug configuration is\nrequested.",
           "type": "string"
+        },
+        "workerId": {
+          "description": "The worker id, i.e., VM hostname.",
+          "type": "string"
         }
       },
-      "id": "GetDebugConfigRequest"
+      "id": "GetDebugConfigRequest",
+      "description": "Request to get updated debug configuration for component.",
+      "type": "object"
     },
     "GetTemplateResponse": {
-      "description": "The response to a GetTemplate request.",
-      "type": "object",
       "properties": {
         "metadata": {
           "$ref": "TemplateMetadata",
           "description": "The template metadata describing the template name, available\nparameters, etc."
         },
         "status": {
-          "description": "The status of the get template request. Any problems with the\nrequest will be indicated in the error_details.",
-          "$ref": "Status"
+          "$ref": "Status",
+          "description": "The status of the get template request. Any problems with the\nrequest will be indicated in the error_details."
         }
       },
-      "id": "GetTemplateResponse"
+      "id": "GetTemplateResponse",
+      "description": "The response to a GetTemplate request.",
+      "type": "object"
     },
     "ReportWorkItemStatusRequest": {
       "description": "Request to report the status of WorkItems.",
@@ -3100,8 +2838,8 @@
           }
         },
         "workerId": {
-          "type": "string",
-          "description": "The ID of the worker reporting the WorkItem status.  If this\ndoes not match the ID of the worker which the Dataflow service\nbelieves currently has the lease on the WorkItem, the report\nwill be dropped (with an error response)."
+          "description": "The ID of the worker reporting the WorkItem status.  If this\ndoes not match the ID of the worker which the Dataflow service\nbelieves currently has the lease on the WorkItem, the report\nwill be dropped (with an error response).",
+          "type": "string"
         },
         "currentWorkerTime": {
           "description": "The current timestamp at the worker.",
@@ -3116,22 +2854,13 @@
       "id": "ReportWorkItemStatusRequest"
     },
     "PipelineDescription": {
-      "description": "A descriptive representation of submitted pipeline as well as the executed\nform.  This data is provided by the Dataflow service for ease of visualizing\nthe pipeline and interpretting Dataflow provided metrics.",
-      "type": "object",
       "properties": {
-        "executionPipelineStage": {
-          "description": "Description of each stage of execution of the pipeline.",
-          "type": "array",
-          "items": {
-            "$ref": "ExecutionStageSummary"
-          }
-        },
         "originalPipelineTransform": {
+          "description": "Description of each transform in the pipeline and collections between them.",
           "type": "array",
           "items": {
             "$ref": "TransformSummary"
-          },
-          "description": "Description of each transform in the pipeline and collections between them."
+          }
         },
         "displayData": {
           "description": "Pipeline level display data.",
@@ -3139,20 +2868,27 @@
           "items": {
             "$ref": "DisplayData"
           }
+        },
+        "executionPipelineStage": {
+          "description": "Description of each stage of execution of the pipeline.",
+          "type": "array",
+          "items": {
+            "$ref": "ExecutionStageSummary"
+          }
         }
       },
-      "id": "PipelineDescription"
+      "id": "PipelineDescription",
+      "description": "A descriptive representation of submitted pipeline as well as the executed\nform.  This data is provided by the Dataflow service for ease of visualizing\nthe pipeline and interpretting Dataflow provided metrics.",
+      "type": "object"
     },
     "StreamingConfigTask": {
-      "description": "A task that carries configuration information for streaming computations.",
-      "type": "object",
       "properties": {
         "userStepToStateFamilyNameMap": {
-          "type": "object",
           "additionalProperties": {
             "type": "string"
           },
-          "description": "Map from user step names to state families."
+          "description": "Map from user step names to state families.",
+          "type": "object"
         },
         "streamingComputationConfigs": {
           "description": "Set of computation configuration information.",
@@ -3162,34 +2898,28 @@
           }
         }
       },
-      "id": "StreamingConfigTask"
+      "id": "StreamingConfigTask",
+      "description": "A task that carries configuration information for streaming computations.",
+      "type": "object"
     },
     "JobExecutionInfo": {
-      "description": "Additional information about how a Cloud Dataflow job will be executed that\nisn't contained in the submitted job.",
-      "type": "object",
       "properties": {
         "stages": {
-          "type": "object",
           "additionalProperties": {
             "$ref": "JobExecutionStageInfo"
           },
-          "description": "A mapping from each stage to the information about that stage."
+          "description": "A mapping from each stage to the information about that stage.",
+          "type": "object"
         }
       },
-      "id": "JobExecutionInfo"
+      "id": "JobExecutionInfo",
+      "description": "Additional information about how a Cloud Dataflow job will be executed that\nisn't contained in the submitted job.",
+      "type": "object"
     },
     "Step": {
       "description": "Defines a particular step within a Cloud Dataflow job.\n\nA job consists of multiple steps, each of which performs some\nspecific operation as part of the overall job.  Data is typically\npassed from one step to another as part of the job.\n\nHere's an example of a sequence of steps which together implement a\nMap-Reduce job:\n\n  * Read a collection of data from some source, parsing the\n    collection's elements.\n\n  * Validate the elements.\n\n  * Apply a user-defined function to map each element to some value\n    and extract an element-specific key value.\n\n  * Group elements with the same key into a single element with\n    that key, transforming a multiply-keyed collection into a\n    uniquely-keyed collection.\n\n  * Write the elements out to some data sink.\n\nNote that the Cloud Dataflow service may be used to run many different\ntypes of jobs, not just Map-Reduce.",
       "type": "object",
       "properties": {
-        "properties": {
-          "additionalProperties": {
-            "description": "Properties of the object.",
-            "type": "any"
-          },
-          "description": "Named properties associated with the step. Each kind of\npredefined step has its own required set of properties.\nMust be provided on Create.  Only retrieved with JOB_VIEW_ALL.",
-          "type": "object"
-        },
         "name": {
           "description": "The name that identifies the step. This must be unique for each\nstep with respect to all other steps in the Cloud Dataflow job.",
           "type": "string"
@@ -3197,6 +2927,14 @@
         "kind": {
           "description": "The kind of step in the Cloud Dataflow job.",
           "type": "string"
+        },
+        "properties": {
+          "additionalProperties": {
+            "description": "Properties of the object.",
+            "type": "any"
+          },
+          "description": "Named properties associated with the step. Each kind of\npredefined step has its own required set of properties.\nMust be provided on Create.  Only retrieved with JOB_VIEW_ALL.",
+          "type": "object"
         }
       },
       "id": "Step"
@@ -3213,8 +2951,6 @@
       "id": "FailedLocation"
     },
     "Disk": {
-      "description": "Describes the data disk used by a workflow job.",
-      "type": "object",
       "properties": {
         "sizeGb": {
           "description": "Size of disk in GB.  If zero or unspecified, the service will\nattempt to choose a reasonable default.",
@@ -3230,7 +2966,9 @@
           "type": "string"
         }
       },
-      "id": "Disk"
+      "id": "Disk",
+      "description": "Describes the data disk used by a workflow job.",
+      "type": "object"
     },
     "CounterMetadata": {
       "description": "CounterMetadata includes all static non-name non-value counter attributes.",
@@ -3265,17 +3003,6 @@
           "type": "string"
         },
         "kind": {
-          "enumDescriptions": [
-            "Counter aggregation kind was not set.",
-            "Aggregated value is the sum of all contributed values.",
-            "Aggregated value is the max of all contributed values.",
-            "Aggregated value is the min of all contributed values.",
-            "Aggregated value is the mean of all contributed values.",
-            "Aggregated value represents the logical 'or' of all contributed values.",
-            "Aggregated value represents the logical 'and' of all contributed values.",
-            "Aggregated value is a set of unique contributed values.",
-            "Aggregated value captures statistics about a distribution."
-          ],
           "enum": [
             "INVALID",
             "SUM",
@@ -3288,7 +3015,18 @@
             "DISTRIBUTION"
           ],
           "description": "Counter aggregation kind.",
-          "type": "string"
+          "type": "string",
+          "enumDescriptions": [
+            "Counter aggregation kind was not set.",
+            "Aggregated value is the sum of all contributed values.",
+            "Aggregated value is the max of all contributed values.",
+            "Aggregated value is the min of all contributed values.",
+            "Aggregated value is the mean of all contributed values.",
+            "Aggregated value represents the logical 'or' of all contributed values.",
+            "Aggregated value represents the logical 'and' of all contributed values.",
+            "Aggregated value is a set of unique contributed values.",
+            "Aggregated value captures statistics about a distribution."
+          ]
         },
         "description": {
           "description": "Human-readable description of the counter semantics.",
@@ -3298,8 +3036,6 @@
       "id": "CounterMetadata"
     },
     "ListJobMessagesResponse": {
-      "description": "Response to a request to list job messages.",
-      "type": "object",
       "properties": {
         "jobMessages": {
           "description": "Messages in ascending timestamp order.",
@@ -3313,16 +3049,12 @@
           "type": "string"
         }
       },
-      "id": "ListJobMessagesResponse"
+      "id": "ListJobMessagesResponse",
+      "description": "Response to a request to list job messages.",
+      "type": "object"
     },
     "ApproximateReportedProgress": {
-      "description": "A progress measurement of a WorkItem by a worker.",
-      "type": "object",
       "properties": {
-        "position": {
-          "$ref": "Position",
-          "description": "A Position within the work to represent a progress."
-        },
         "fractionConsumed": {
           "description": "Completion as fraction of the input consumed, from 0.0 (beginning, nothing\nconsumed), to 1.0 (end of the input, entire input consumed).",
           "format": "double",
@@ -3335,27 +3067,32 @@
         "remainingParallelism": {
           "description": "Total amount of parallelism in the input of this task that remains,\n(i.e. can be delegated to this task and any new tasks via dynamic\nsplitting). Always at least 1 for non-finished work items and 0 for\nfinished.\n\n\"Amount of parallelism\" refers to how many non-empty parts of the input\ncan be read in parallel. This does not necessarily equal number\nof records. An input that can be read in parallel down to the\nindividual records is called \"perfectly splittable\".\nAn example of non-perfectly parallelizable input is a block-compressed\nfile format where a block of records has to be read as a whole,\nbut different blocks can be read in parallel.\n\nExamples:\n* If we are processing record #30 (starting at 1) out of 50 in a perfectly\n  splittable 50-record input, this value should be 21 (20 remaining + 1\n  current).\n* If we are reading through block 3 in a block-compressed file consisting\n  of 5 blocks, this value should be 3 (since blocks 4 and 5 can be\n  processed in parallel by new tasks via dynamic splitting and the current\n  task remains processing block 3).\n* If we are reading through the last block in a block-compressed file,\n  or reading or processing the last record in a perfectly splittable\n  input, this value should be 1, because apart from the current task, no\n  additional remainder can be split off.",
           "$ref": "ReportedParallelism"
+        },
+        "position": {
+          "$ref": "Position",
+          "description": "A Position within the work to represent a progress."
         }
       },
-      "id": "ApproximateReportedProgress"
+      "id": "ApproximateReportedProgress",
+      "description": "A progress measurement of a WorkItem by a worker.",
+      "type": "object"
     },
     "StateFamilyConfig": {
       "description": "State family configuration.",
       "type": "object",
       "properties": {
-        "stateFamily": {
-          "description": "The state family value.",
-          "type": "string"
-        },
         "isRead": {
           "description": "If true, this family corresponds to a read operation.",
           "type": "boolean"
+        },
+        "stateFamily": {
+          "description": "The state family value.",
+          "type": "string"
         }
       },
       "id": "StateFamilyConfig"
     },
     "IntegerList": {
-      "type": "object",
       "properties": {
         "elements": {
           "description": "Elements of the list.",
@@ -3366,18 +3103,16 @@
         }
       },
       "id": "IntegerList",
-      "description": "A metric value representing a list of integers."
+      "description": "A metric value representing a list of integers.",
+      "type": "object"
     },
     "ResourceUtilizationReportResponse": {
+      "description": "Service-side response to WorkerMessage reporting resource utilization.",
       "type": "object",
       "properties": {},
-      "id": "ResourceUtilizationReportResponse",
-      "description": "Service-side response to WorkerMessage reporting resource utilization."
+      "id": "ResourceUtilizationReportResponse"
     },
     "SourceSplitResponse": {
-      "id": "SourceSplitResponse",
-      "description": "The response to a SourceSplitRequest.",
-      "type": "object",
       "properties": {
         "outcome": {
           "enum": [
@@ -3407,27 +3142,13 @@
             "$ref": "SourceSplitShard"
           }
         }
-      }
+      },
+      "id": "SourceSplitResponse",
+      "description": "The response to a SourceSplitRequest.",
+      "type": "object"
     },
     "ParallelInstruction": {
-      "type": "object",
       "properties": {
-        "parDo": {
-          "description": "Additional information for ParDo instructions.",
-          "$ref": "ParDoInstruction"
-        },
-        "read": {
-          "$ref": "ReadInstruction",
-          "description": "Additional information for Read instructions."
-        },
-        "flatten": {
-          "description": "Additional information for Flatten instructions.",
-          "$ref": "FlattenInstruction"
-        },
-        "originalName": {
-          "description": "System-defined name for the operation in the original workflow graph.",
-          "type": "string"
-        },
         "write": {
           "$ref": "WriteInstruction",
           "description": "Additional information for Write instructions."
@@ -3437,8 +3158,8 @@
           "type": "string"
         },
         "partialGroupByKey": {
-          "$ref": "PartialGroupByKeyInstruction",
-          "description": "Additional information for PartialGroupByKey instructions."
+          "description": "Additional information for PartialGroupByKey instructions.",
+          "$ref": "PartialGroupByKeyInstruction"
         },
         "outputs": {
           "description": "Describes the outputs of the instruction.",
@@ -3450,33 +3171,47 @@
         "name": {
           "description": "User-provided name of this operation.",
           "type": "string"
+        },
+        "parDo": {
+          "$ref": "ParDoInstruction",
+          "description": "Additional information for ParDo instructions."
+        },
+        "read": {
+          "$ref": "ReadInstruction",
+          "description": "Additional information for Read instructions."
+        },
+        "flatten": {
+          "$ref": "FlattenInstruction",
+          "description": "Additional information for Flatten instructions."
+        },
+        "originalName": {
+          "description": "System-defined name for the operation in the original workflow graph.",
+          "type": "string"
         }
       },
       "id": "ParallelInstruction",
-      "description": "Describes a particular operation comprising a MapTask."
+      "description": "Describes a particular operation comprising a MapTask.",
+      "type": "object"
     },
     "Package": {
-      "id": "Package",
       "description": "The packages that must be installed in order for a worker to run the\nsteps of the Cloud Dataflow job that will be assigned to its worker\npool.\n\nThis is the mechanism by which the Cloud Dataflow SDK causes code to\nbe loaded onto the workers. For example, the Cloud Dataflow Java SDK\nmight use this to install jars containing the user's code and all of the\nvarious dependencies (libraries, data files, etc.) required in order\nfor that code to run.",
       "type": "object",
       "properties": {
-        "location": {
-          "description": "The resource to read the package from. The supported resource type is:\n\nGoogle Cloud Storage:\n\n  storage.googleapis.com/{bucket}\n  bucket.storage.googleapis.com/",
-          "type": "string"
-        },
         "name": {
           "description": "The name of the package.",
           "type": "string"
+        },
+        "location": {
+          "description": "The resource to read the package from. The supported resource type is:\n\nGoogle Cloud Storage:\n\n  storage.googleapis.com/{bucket}\n  bucket.storage.googleapis.com/",
+          "type": "string"
         }
-      }
+      },
+      "id": "Package"
     },
     "KeyRangeDataDiskAssignment": {
+      "description": "Data disk assignment information for a specific key-range of a sharded\ncomputation.\nCurrently we only support UTF-8 character splits to simplify encoding into\nJSON.",
       "type": "object",
       "properties": {
-        "end": {
-          "description": "The end (exclusive) of the key range.",
-          "type": "string"
-        },
         "start": {
           "description": "The start (inclusive) of the key range.",
           "type": "string"
@@ -3484,16 +3219,32 @@
         "dataDisk": {
           "description": "The name of the data disk where data for this range is stored.\nThis name is local to the Google Cloud Platform project and uniquely\nidentifies the disk within that project, for example\n\"myproject-1014-104817-4c2-harness-0-disk-1\".",
           "type": "string"
+        },
+        "end": {
+          "description": "The end (exclusive) of the key range.",
+          "type": "string"
         }
       },
-      "id": "KeyRangeDataDiskAssignment",
-      "description": "Data disk assignment information for a specific key-range of a sharded\ncomputation.\nCurrently we only support UTF-8 character splits to simplify encoding into\nJSON."
+      "id": "KeyRangeDataDiskAssignment"
     },
     "ParDoInstruction": {
-      "id": "ParDoInstruction",
-      "description": "An instruction that does a ParDo operation.\nTakes one main input and zero or more side inputs, and produces\nzero or more outputs.\nRuns user code.",
-      "type": "object",
       "properties": {
+        "input": {
+          "description": "The input.",
+          "$ref": "InstructionInput"
+        },
+        "numOutputs": {
+          "description": "The number of outputs.",
+          "format": "int32",
+          "type": "integer"
+        },
+        "sideInputs": {
+          "description": "Zero or more side inputs.",
+          "type": "array",
+          "items": {
+            "$ref": "SideInputInfo"
+          }
+        },
         "multiOutputInfos": {
           "description": "Information about each of the outputs, if user_fn is a  MultiDoFn.",
           "type": "array",
@@ -3508,34 +3259,16 @@
           },
           "description": "The user function to invoke.",
           "type": "object"
-        },
-        "input": {
-          "$ref": "InstructionInput",
-          "description": "The input."
-        },
-        "numOutputs": {
-          "description": "The number of outputs.",
-          "format": "int32",
-          "type": "integer"
-        },
-        "sideInputs": {
-          "description": "Zero or more side inputs.",
-          "type": "array",
-          "items": {
-            "$ref": "SideInputInfo"
-          }
         }
-      }
+      },
+      "id": "ParDoInstruction",
+      "description": "An instruction that does a ParDo operation.\nTakes one main input and zero or more side inputs, and produces\nzero or more outputs.\nRuns user code.",
+      "type": "object"
     },
     "CounterStructuredName": {
-      "id": "CounterStructuredName",
       "description": "Identifies a counter within a per-job namespace. Counters whose structured\nnames are the same get merged into a single value for the job.",
       "type": "object",
       "properties": {
-        "componentStepName": {
-          "description": "Name of the optimized step being executed by the workers.",
-          "type": "string"
-        },
         "portion": {
           "enumDescriptions": [
             "Counter portion has not been set.",
@@ -3581,34 +3314,26 @@
           ],
           "description": "One of the standard Origins defined above.",
           "type": "string"
+        },
+        "componentStepName": {
+          "description": "Name of the optimized step being executed by the workers.",
+          "type": "string"
         }
-      }
+      },
+      "id": "CounterStructuredName"
     },
     "MetricUpdate": {
       "description": "Describes the state of a metric.",
       "type": "object",
       "properties": {
-        "updateTime": {
-          "description": "Timestamp associated with the metric value. Optional when workers are\nreporting work progress; it will be filled in responses from the\nmetrics API.",
-          "format": "google-datetime",
-          "type": "string"
-        },
-        "name": {
-          "$ref": "MetricStructuredName",
-          "description": "Name of the metric."
-        },
-        "set": {
-          "description": "Worker-computed aggregate value for the \"Set\" aggregation kind.  The only\npossible value type is a list of Values whose type can be Long, Double,\nor String, according to the metric's type.  All Values in the list must\nbe of the same type.",
-          "type": "any"
+        "cumulative": {
+          "description": "True if this metric is reported as the total cumulative aggregate\nvalue accumulated since the worker started working on this WorkItem.\nBy default this is false, indicating that this metric is reported\nas a delta that is not associated with any WorkItem.",
+          "type": "boolean"
         },
         "internal": {
           "description": "Worker-computed aggregate value for internal use by the Dataflow\nservice.",
           "type": "any"
         },
-        "cumulative": {
-          "description": "True if this metric is reported as the total cumulative aggregate\nvalue accumulated since the worker started working on this WorkItem.\nBy default this is false, indicating that this metric is reported\nas a delta that is not associated with any WorkItem.",
-          "type": "boolean"
-        },
         "kind": {
           "description": "Metric aggregation kind.  The possible metric aggregation kinds are\n\"Sum\", \"Max\", \"Min\", \"Mean\", \"Set\", \"And\", and \"Or\".\nThe specified aggregation kind is case-insensitive.\n\nIf omitted, this is not an aggregated value but instead\na single metric sample value.",
           "type": "string"
@@ -3624,11 +3349,26 @@
         "meanSum": {
           "description": "Worker-computed aggregate value for the \"Mean\" aggregation kind.\nThis holds the sum of the aggregated values and is used in combination\nwith mean_count below to obtain the actual mean aggregate value.\nThe only possible value types are Long and Double.",
           "type": "any"
+        },
+        "updateTime": {
+          "description": "Timestamp associated with the metric value. Optional when workers are\nreporting work progress; it will be filled in responses from the\nmetrics API.",
+          "format": "google-datetime",
+          "type": "string"
+        },
+        "name": {
+          "$ref": "MetricStructuredName",
+          "description": "Name of the metric."
+        },
+        "set": {
+          "description": "Worker-computed aggregate value for the \"Set\" aggregation kind.  The only\npossible value type is a list of Values whose type can be Long, Double,\nor String, according to the metric's type.  All Values in the list must\nbe of the same type.",
+          "type": "any"
         }
       },
       "id": "MetricUpdate"
     },
     "ApproximateProgress": {
+      "description": "Obsolete in favor of ApproximateReportedProgress and ApproximateSplitRequest.",
+      "type": "object",
       "properties": {
         "percentComplete": {
           "description": "Obsolete.",
@@ -3645,32 +3385,28 @@
           "$ref": "Position"
         }
       },
-      "id": "ApproximateProgress",
-      "description": "Obsolete in favor of ApproximateReportedProgress and ApproximateSplitRequest.",
-      "type": "object"
+      "id": "ApproximateProgress"
     },
     "WorkerMessageResponse": {
-      "description": "A worker_message response allows the server to pass information to the\nsender.",
-      "type": "object",
       "properties": {
         "workerMetricsResponse": {
-          "$ref": "ResourceUtilizationReportResponse",
-          "description": "Service's response to reporting worker metrics (currently empty)."
+          "description": "Service's response to reporting worker metrics (currently empty).",
+          "$ref": "ResourceUtilizationReportResponse"
         },
         "workerHealthReportResponse": {
-          "$ref": "WorkerHealthReportResponse",
-          "description": "The service's response to a worker's health report."
+          "description": "The service's response to a worker's health report.",
+          "$ref": "WorkerHealthReportResponse"
         }
       },
-      "id": "WorkerMessageResponse"
+      "id": "WorkerMessageResponse",
+      "description": "A worker_message response allows the server to pass information to the\nsender.",
+      "type": "object"
     },
     "TemplateMetadata": {
-      "description": "Metadata describing a template.",
-      "type": "object",
       "properties": {
         "bypassTempDirValidation": {
-          "type": "boolean",
-          "description": "If true, will bypass the validation that the temp directory is\nwritable. This should only be used with templates for pipelines\nthat are guaranteed not to need to write to the temp directory,\nwhich is subject to change based on the optimizer."
+          "description": "If true, will bypass the validation that the temp directory is\nwritable. This should only be used with templates for pipelines\nthat are guaranteed not to need to write to the temp directory,\nwhich is subject to change based on the optimizer.",
+          "type": "boolean"
         },
         "name": {
           "description": "Required. The name of the template.",
@@ -3688,19 +3424,19 @@
           "type": "string"
         }
       },
-      "id": "TemplateMetadata"
+      "id": "TemplateMetadata",
+      "description": "Metadata describing a template.",
+      "type": "object"
     },
     "WorkerMessage": {
-      "description": "WorkerMessage provides information to the backend about a worker.",
-      "type": "object",
       "properties": {
         "workerMessageCode": {
-          "$ref": "WorkerMessageCode",
-          "description": "A worker message code."
+          "description": "A worker message code.",
+          "$ref": "WorkerMessageCode"
         },
         "workerMetrics": {
-          "$ref": "ResourceUtilizationReport",
-          "description": "Resource metrics reported by workers."
+          "description": "Resource metrics reported by workers.",
+          "$ref": "ResourceUtilizationReport"
         },
         "labels": {
           "additionalProperties": {
@@ -3715,11 +3451,13 @@
           "type": "string"
         },
         "workerHealthReport": {
-          "$ref": "WorkerHealthReport",
-          "description": "The health of a worker."
+          "description": "The health of a worker.",
+          "$ref": "WorkerHealthReport"
         }
       },
-      "id": "WorkerMessage"
+      "id": "WorkerMessage",
+      "description": "WorkerMessage provides information to the backend about a worker.",
+      "type": "object"
     },
     "JobMetrics": {
       "properties": {
@@ -3741,7 +3479,6 @@
       "type": "object"
     },
     "FloatingPointList": {
-      "id": "FloatingPointList",
       "description": "A metric value representing a list of floating point numbers.",
       "type": "object",
       "properties": {
@@ -3753,50 +3490,11 @@
             "type": "number"
           }
         }
-      }
+      },
+      "id": "FloatingPointList"
     },
     "CounterUpdate": {
-      "id": "CounterUpdate",
-      "description": "An update to a Counter sent from a worker.",
-      "type": "object",
       "properties": {
-        "floatingPointList": {
-          "$ref": "FloatingPointList",
-          "description": "List of floating point numbers, for Set."
-        },
-        "integer": {
-          "description": "Integer value for Sum, Max, Min.",
-          "$ref": "SplitInt64"
-        },
-        "structuredNameAndMetadata": {
-          "description": "Counter structured name and metadata.",
-          "$ref": "CounterStructuredNameAndMetadata"
-        },
-        "integerList": {
-          "$ref": "IntegerList",
-          "description": "List of integers, for Set."
-        },
-        "integerMean": {
-          "$ref": "IntegerMean",
-          "description": "Integer mean aggregation value for Mean."
-        },
-        "floatingPoint": {
-          "description": "Floating point value for Sum, Max, Min.",
-          "format": "double",
-          "type": "number"
-        },
-        "internal": {
-          "description": "Value for internally-defined counters used by the Dataflow service.",
-          "type": "any"
-        },
-        "cumulative": {
-          "description": "True if this counter is reported as the total cumulative aggregate\nvalue accumulated since the worker started working on this WorkItem.\nBy default this is false, indicating that this counter is reported\nas a delta.",
-          "type": "boolean"
-        },
-        "floatingPointMean": {
-          "description": "Floating point mean aggregation value for Mean.",
-          "$ref": "FloatingPointMean"
-        },
         "boolean": {
           "description": "Boolean value for And, Or.",
           "type": "boolean"
@@ -3817,10 +3515,52 @@
           "description": "The service-generated short identifier for this counter.\nThe short_id -\u003e (name, metadata) mapping is constant for the lifetime of\na job.",
           "format": "int64",
           "type": "string"
+        },
+        "floatingPointList": {
+          "description": "List of floating point numbers, for Set.",
+          "$ref": "FloatingPointList"
+        },
+        "integer": {
+          "$ref": "SplitInt64",
+          "description": "Integer value for Sum, Max, Min."
+        },
+        "integerList": {
+          "$ref": "IntegerList",
+          "description": "List of integers, for Set."
+        },
+        "structuredNameAndMetadata": {
+          "description": "Counter structured name and metadata.",
+          "$ref": "CounterStructuredNameAndMetadata"
+        },
+        "floatingPoint": {
+          "description": "Floating point value for Sum, Max, Min.",
+          "format": "double",
+          "type": "number"
+        },
+        "integerMean": {
+          "$ref": "IntegerMean",
+          "description": "Integer mean aggregation value for Mean."
+        },
+        "internal": {
+          "description": "Value for internally-defined counters used by the Dataflow service.",
+          "type": "any"
+        },
+        "cumulative": {
+          "description": "True if this counter is reported as the total cumulative aggregate\nvalue accumulated since the worker started working on this WorkItem.\nBy default this is false, indicating that this counter is reported\nas a delta.",
+          "type": "boolean"
+        },
+        "floatingPointMean": {
+          "description": "Floating point mean aggregation value for Mean.",
+          "$ref": "FloatingPointMean"
         }
-      }
+      },
+      "id": "CounterUpdate",
+      "description": "An update to a Counter sent from a worker.",
+      "type": "object"
     },
     "SourceMetadata": {
+      "description": "Metadata about a Source useful for automatically optimizing\nand tuning the pipeline, etc.",
+      "type": "object",
       "properties": {
         "producesSortedKeys": {
           "description": "Whether this source is known to produce key/value pairs with\nthe (encoded) keys in lexicographically sorted order.",
@@ -3836,14 +3576,18 @@
           "type": "string"
         }
       },
-      "id": "SourceMetadata",
-      "description": "Metadata about a Source useful for automatically optimizing\nand tuning the pipeline, etc.",
-      "type": "object"
+      "id": "SourceMetadata"
     },
     "DistributionUpdate": {
-      "description": "A metric value representing a distribution.",
-      "type": "object",
       "properties": {
+        "max": {
+          "$ref": "SplitInt64",
+          "description": "The maximum value present in the distribution."
+        },
+        "sum": {
+          "$ref": "SplitInt64",
+          "description": "Use an int64 since we'd prefer the added precision. If overflow is a common\nproblem we can detect it and use an additional int64 or a double."
+        },
         "count": {
           "$ref": "SplitInt64",
           "description": "The count of the number of elements present in the distribution."
@@ -3856,21 +3600,13 @@
           "description": "Use a double since the sum of squares is likely to overflow int64.",
           "format": "double",
           "type": "number"
-        },
-        "max": {
-          "$ref": "SplitInt64",
-          "description": "The maximum value present in the distribution."
-        },
-        "sum": {
-          "$ref": "SplitInt64",
-          "description": "Use an int64 since we'd prefer the added precision. If overflow is a common\nproblem we can detect it and use an additional int64 or a double."
         }
       },
-      "id": "DistributionUpdate"
+      "id": "DistributionUpdate",
+      "description": "A metric value representing a distribution.",
+      "type": "object"
     },
     "SourceFork": {
-      "description": "DEPRECATED in favor of DynamicSourceSplit.",
-      "type": "object",
       "properties": {
         "residual": {
           "description": "DEPRECATED",
@@ -3881,15 +3617,17 @@
           "description": "DEPRECATED"
         },
         "primary": {
-          "description": "DEPRECATED",
-          "$ref": "SourceSplitShard"
+          "$ref": "SourceSplitShard",
+          "description": "DEPRECATED"
         },
         "primarySource": {
           "description": "DEPRECATED",
           "$ref": "DerivedSource"
         }
       },
-      "id": "SourceFork"
+      "id": "SourceFork",
+      "description": "DEPRECATED in favor of DynamicSourceSplit.",
+      "type": "object"
     },
     "WorkerHealthReportResponse": {
       "description": "WorkerHealthReportResponse contains information returned to the worker\nin response to a health ping.",
@@ -3907,17 +3645,13 @@
       "description": "Conveys a worker's progress through the work described by a WorkItem.",
       "type": "object",
       "properties": {
-        "counterUpdates": {
-          "description": "Worker output counters for this WorkItem.",
+        "metricUpdates": {
+          "description": "DEPRECATED in favor of counter_updates.",
           "type": "array",
           "items": {
-            "$ref": "CounterUpdate"
+            "$ref": "MetricUpdate"
           }
         },
-        "workItemId": {
-          "type": "string",
-          "description": "Identifies the WorkItem."
-        },
         "errors": {
           "description": "Specifies errors which occurred during processing.  If errors are\nprovided, and completed = true, then the WorkItem is considered\nto have failed.",
           "type": "array",
@@ -3925,24 +3659,17 @@
             "$ref": "Status"
           }
         },
-        "metricUpdates": {
-          "description": "DEPRECATED in favor of counter_updates.",
-          "type": "array",
-          "items": {
-            "$ref": "MetricUpdate"
-          }
-        },
         "dynamicSourceSplit": {
-          "description": "See documentation of stop_position.",
-          "$ref": "DynamicSourceSplit"
+          "$ref": "DynamicSourceSplit",
+          "description": "See documentation of stop_position."
         },
         "sourceOperationResponse": {
-          "description": "If the work item represented a SourceOperationRequest, and the work\nis completed, contains the result of the operation.",
-          "$ref": "SourceOperationResponse"
+          "$ref": "SourceOperationResponse",
+          "description": "If the work item represented a SourceOperationRequest, and the work\nis completed, contains the result of the operation."
         },
         "progress": {
-          "$ref": "ApproximateProgress",
-          "description": "DEPRECATED in favor of reported_progress."
+          "description": "DEPRECATED in favor of reported_progress.",
+          "$ref": "ApproximateProgress"
         },
         "requestedLeaseDuration": {
           "description": "Amount of time the worker requests for its lease.",
@@ -3955,37 +3682,48 @@
           "type": "string"
         },
         "stopPosition": {
-          "$ref": "Position",
-          "description": "A worker may split an active map task in two parts, \"primary\" and\n\"residual\", continuing to process the primary part and returning the\nresidual part into the pool of available work.\nThis event is called a \"dynamic split\" and is critical to the dynamic\nwork rebalancing feature. The two obtained sub-tasks are called\n\"parts\" of the split.\nThe parts, if concatenated, must represent the same input as would\nbe read by the current task if the split did not happen.\nThe exact way in which the original task is decomposed into the two\nparts is specified either as a position demarcating them\n(stop_position), or explicitly as two DerivedSources, if this\ntask consumes a user-defined source type (dynamic_source_split).\n\nThe \"current\" task is adjusted as a result of the split: after a task\nwith range [A, B) sends a stop_position update at C, its range is\nconsidered to be [A, C), e.g.:\n* Progress should be interpreted relative to the new range, e.g.\n  \"75% completed\" means \"75% of [A, C) completed\"\n* The worker should interpret proposed_stop_position relative to the\n  new range, e.g. \"split at 68%\" should be interpreted as\n  \"split at 68% of [A, C)\".\n* If the worker chooses to split again using stop_position, only\n  stop_positions in [A, C) will be accepted.\n* Etc.\ndynamic_source_split has similar semantics: e.g., if a task with\nsource S splits using dynamic_source_split into {P, R}\n(where P and R must be together equivalent to S), then subsequent\nprogress and proposed_stop_position should be interpreted relative\nto P, and in a potential subsequent dynamic_source_split into {P', R'},\nP' and R' must be together equivalent to P, etc."
+          "description": "A worker may split an active map task in two parts, \"primary\" and\n\"residual\", continuing to process the primary part and returning the\nresidual part into the pool of available work.\nThis event is called a \"dynamic split\" and is critical to the dynamic\nwork rebalancing feature. The two obtained sub-tasks are called\n\"parts\" of the split.\nThe parts, if concatenated, must represent the same input as would\nbe read by the current task if the split did not happen.\nThe exact way in which the original task is decomposed into the two\nparts is specified either as a position demarcating them\n(stop_position), or explicitly as two DerivedSources, if this\ntask consumes a user-defined source type (dynamic_source_split).\n\nThe \"current\" task is adjusted as a result of the split: after a task\nwith range [A, B) sends a stop_position update at C, its range is\nconsidered to be [A, C), e.g.:\n* Progress should be interpreted relative to the new range, e.g.\n  \"75% completed\" means \"75% of [A, C) completed\"\n* The worker should interpret proposed_stop_position relative to the\n  new range, e.g. \"split at 68%\" should be interpreted as\n  \"split at 68% of [A, C)\".\n* If the worker chooses to split again using stop_position, only\n  stop_positions in [A, C) will be accepted.\n* Etc.\ndynamic_source_split has similar semantics: e.g., if a task with\nsource S splits using dynamic_source_split into {P, R}\n(where P and R must be together equivalent to S), then subsequent\nprogress and proposed_stop_position should be interpreted relative\nto P, and in a potential subsequent dynamic_source_split into {P', R'},\nP' and R' must be together equivalent to P, etc.",
+          "$ref": "Position"
         },
         "completed": {
           "description": "True if the WorkItem was completed (successfully or unsuccessfully).",
           "type": "boolean"
         },
         "reportedProgress": {
-          "$ref": "ApproximateReportedProgress",
-          "description": "The worker's progress through this WorkItem."
+          "description": "The worker's progress through this WorkItem.",
+          "$ref": "ApproximateReportedProgress"
         },
         "sourceFork": {
           "$ref": "SourceFork",
           "description": "DEPRECATED in favor of dynamic_source_split."
+        },
+        "counterUpdates": {
+          "description": "Worker output counters for this WorkItem.",
+          "type": "array",
+          "items": {
+            "$ref": "CounterUpdate"
+          }
+        },
+        "workItemId": {
+          "description": "Identifies the WorkItem.",
+          "type": "string"
         }
       },
       "id": "WorkItemStatus"
     },
     "ComponentSource": {
       "properties": {
-        "originalTransformOrCollection": {
-          "description": "User name for the original user transform or collection with which this\nsource is most closely associated.",
-          "type": "string"
-        },
         "name": {
           "description": "Dataflow service generated name for this source.",
           "type": "string"
         },
         "userName": {
-          "type": "string",
-          "description": "Human-readable name for this transform; may be user or system generated."
+          "description": "Human-readable name for this transform; may be user or system generated.",
+          "type": "string"
+        },
+        "originalTransformOrCollection": {
+          "description": "User name for the original user transform or collection with which this\nsource is most closely associated.",
+          "type": "string"
         }
       },
       "id": "ComponentSource",
@@ -3996,14 +3734,26 @@
       "description": "The Dataflow service's idea of the current state of a WorkItem\nbeing processed by a worker.",
       "type": "object",
       "properties": {
+        "leaseExpireTime": {
+          "description": "Time at which the current lease will expire.",
+          "format": "google-datetime",
+          "type": "string"
+        },
+        "metricShortId": {
+          "description": "The short ids that workers should use in subsequent metric updates.\nWorkers should strive to use short ids whenever possible, but it is ok\nto request the short_id again if a worker lost track of it\n(e.g. if the worker is recovering from a crash).\nNOTE: it is possible that the response may have short ids for a subset\nof the metrics.",
+          "type": "array",
+          "items": {
+            "$ref": "MetricShortId"
+          }
+        },
         "nextReportIndex": {
           "description": "The index value to use for the next report sent by the worker.\nNote: If the report call fails for whatever reason, the worker should\nreuse this index for subsequent report attempts.",
           "format": "int64",
           "type": "string"
         },
         "suggestedStopPoint": {
-          "description": "DEPRECATED in favor of split_request.",
-          "$ref": "ApproximateProgress"
+          "$ref": "ApproximateProgress",
+          "description": "DEPRECATED in favor of split_request."
         },
         "splitRequest": {
           "$ref": "ApproximateSplitRequest",
@@ -4025,96 +3775,84 @@
           },
           "description": "Other data returned by the service, specific to the particular\nworker harness.",
           "type": "object"
-        },
-        "leaseExpireTime": {
-          "description": "Time at which the current lease will expire.",
-          "format": "google-datetime",
-          "type": "string"
-        },
-        "metricShortId": {
-          "description": "The short ids that workers should use in subsequent metric updates.\nWorkers should strive to use short ids whenever possible, but it is ok\nto request the short_id again if a worker lost track of it\n(e.g. if the worker is recovering from a crash).\nNOTE: it is possible that the response may have short ids for a subset\nof the metrics.",
-          "type": "array",
-          "items": {
-            "$ref": "MetricShortId"
-          }
         }
       },
       "id": "WorkItemServiceState"
     },
     "MetricStructuredName": {
-      "description": "Identifies a metric, by describing the source which generated the\nmetric.",
-      "type": "object",
       "properties": {
         "context": {
-          "type": "object",
           "additionalProperties": {
             "type": "string"
           },
-          "description": "Zero or more labeled fields which identify the part of the job this\nmetric is associated with, such as the name of a step or collection.\n\nFor example, built-in counters associated with steps will have\ncontext['step'] = \u003cstep-name\u003e. Counters associated with PCollections\nin the SDK will have context['pcollection'] = \u003cpcollection-name\u003e."
+          "description": "Zero or more labeled fields which identify the part of the job this\nmetric is associated with, such as the name of a step or collection.\n\nFor example, built-in counters associated with steps will have\ncontext['step'] = \u003cstep-name\u003e. Counters associated with PCollections\nin the SDK will have context['pcollection'] = \u003cpcollection-name\u003e.",
+          "type": "object"
         },
         "origin": {
-          "type": "string",
-          "description": "Origin (namespace) of metric name. May be blank for user-define metrics;\nwill be \"dataflow\" for metrics defined by the Dataflow service or SDK."
+          "description": "Origin (namespace) of metric name. May be blank for user-define metrics;\nwill be \"dataflow\" for metrics defined by the Dataflow service or SDK.",
+          "type": "string"
         },
         "name": {
           "description": "Worker-defined metric name.",
           "type": "string"
         }
       },
-      "id": "MetricStructuredName"
+      "id": "MetricStructuredName",
+      "description": "Identifies a metric, by describing the source which generated the\nmetric.",
+      "type": "object"
     },
     "SeqMapTaskOutputInfo": {
       "description": "Information about an output of a SeqMapTask.",
       "type": "object",
       "properties": {
-        "sink": {
-          "$ref": "Sink",
-          "description": "The sink to write the output value to."
-        },
         "tag": {
           "description": "The id of the TupleTag the user code will tag the output value by.",
           "type": "string"
+        },
+        "sink": {
+          "description": "The sink to write the output value to.",
+          "$ref": "Sink"
         }
       },
       "id": "SeqMapTaskOutputInfo"
     },
     "JobExecutionStageInfo": {
-      "description": "Contains information about how a particular\ngoogle.dataflow.v1beta3.Step will be executed.",
-      "type": "object",
       "properties": {
         "stepName": {
+          "description": "The steps associated with the execution stage.\nNote that stages may have several steps, and that a given step\nmight be run by more than one stage.",
           "type": "array",
           "items": {
             "type": "string"
-          },
-          "description": "The steps associated with the execution stage.\nNote that stages may have several steps, and that a given step\nmight be run by more than one stage."
+          }
         }
       },
-      "id": "JobExecutionStageInfo"
+      "id": "JobExecutionStageInfo",
+      "description": "Contains information about how a particular\ngoogle.dataflow.v1beta3.Step will be executed.",
+      "type": "object"
     },
     "KeyRangeLocation": {
       "description": "Location information for a specific key-range of a sharded computation.\nCurrently we only support UTF-8 character splits to simplify encoding into\nJSON.",
       "type": "object",
       "properties": {
-        "deliveryEndpoint": {
-          "description": "The physical location of this range assignment to be used for\nstreaming computation cross-worker message delivery.",
-          "type": "string"
-        },
         "start": {
           "description": "The start (inclusive) of the key range.",
           "type": "string"
         },
         "dataDisk": {
-          "type": "string",
-          "description": "The name of the data disk where data for this range is stored.\nThis name is local to the Google Cloud Platform project and uniquely\nidentifies the disk within that project, for example\n\"myproject-1014-104817-4c2-harness-0-disk-1\"."
-        },
-        "persistentDirectory": {
-          "description": "The location of the persistent state for this range, as a\npersistent directory in the worker local filesystem.",
+          "description": "The name of the data disk where data for this range is stored.\nThis name is local to the Google Cloud Platform project and uniquely\nidentifies the disk within that project, for example\n\"myproject-1014-104817-4c2-harness-0-disk-1\".",
           "type": "string"
         },
         "end": {
           "description": "The end (exclusive) of the key range.",
           "type": "string"
+        },
+        "deprecatedPersistentDirectory": {
+          "description": "DEPRECATED. The location of the persistent state for this range, as a\npersistent directory in the worker local filesystem.",
+          "type": "string"
+        },
+        "deliveryEndpoint": {
+          "description": "The physical location of this range assignment to be used for\nstreaming computation cross-worker message delivery.",
+          "type": "string"
         }
       },
       "id": "KeyRangeLocation"
@@ -4130,55 +3868,10 @@
       },
       "id": "SourceGetMetadataRequest"
     },
-    "NameAndKind": {
-      "description": "Basic metadata about a counter.",
-      "type": "object",
-      "properties": {
-        "name": {
-          "description": "Name of the counter.",
-          "type": "string"
-        },
-        "kind": {
-          "enumDescriptions": [
-            "Counter aggregation kind was not set.",
-            "Aggregated value is the sum of all contributed values.",
-            "Aggregated value is the max of all contributed values.",
-            "Aggregated value is the min of all contributed values.",
-            "Aggregated value is the mean of all contributed values.",
-            "Aggregated value represents the logical 'or' of all contributed values.",
-            "Aggregated value represents the logical 'and' of all contributed values.",
-            "Aggregated value is a set of unique contributed values.",
-            "Aggregated value captures statistics about a distribution."
-          ],
-          "enum": [
-            "INVALID",
-            "SUM",
-            "MAX",
-            "MIN",
-            "MEAN",
-            "OR",
-            "AND",
-            "SET",
-            "DISTRIBUTION"
-          ],
-          "description": "Counter aggregation kind.",
-          "type": "string"
-        }
-      },
-      "id": "NameAndKind"
-    },
     "SeqMapTask": {
-      "id": "SeqMapTask",
       "description": "Describes a particular function to invoke.",
       "type": "object",
       "properties": {
-        "inputs": {
-          "description": "Information about each of the inputs.",
-          "type": "array",
-          "items": {
-            "$ref": "SideInputInfo"
-          }
-        },
         "stageName": {
           "description": "System-defined name of the stage containing the SeqDo operation.\nUnique across the workflow.",
           "type": "string"
@@ -4189,8 +3882,8 @@
         },
         "userFn": {
           "additionalProperties": {
-            "type": "any",
-            "description": "Properties of the object."
+            "description": "Properties of the object.",
+            "type": "any"
           },
           "description": "The user function to invoke.",
           "type": "object"
@@ -4205,19 +3898,63 @@
           "items": {
             "$ref": "SeqMapTaskOutputInfo"
           }
+        },
+        "inputs": {
+          "description": "Information about each of the inputs.",
+          "type": "array",
+          "items": {
+            "$ref": "SideInputInfo"
+          }
         }
-      }
+      },
+      "id": "SeqMapTask"
+    },
+    "NameAndKind": {
+      "properties": {
+        "name": {
+          "description": "Name of the counter.",
+          "type": "string"
+        },
+        "kind": {
+          "enum": [
+            "INVALID",
+            "SUM",
+            "MAX",
+            "MIN",
+            "MEAN",
+            "OR",
+            "AND",
+            "SET",
+            "DISTRIBUTION"
+          ],
+          "description": "Counter aggregation kind.",
+          "type": "string",
+          "enumDescriptions": [
+            "Counter aggregation kind was not set.",
+            "Aggregated value is the sum of all contributed values.",
+            "Aggregated value is the max of all contributed values.",
+            "Aggregated value is the min of all contributed values.",
+            "Aggregated value is the mean of all contributed values.",
+            "Aggregated value represents the logical 'or' of all contributed values.",
+            "Aggregated value represents the logical 'and' of all contributed values.",
+            "Aggregated value is a set of unique contributed values.",
+            "Aggregated value captures statistics about a distribution."
+          ]
+        }
+      },
+      "id": "NameAndKind",
+      "description": "Basic metadata about a counter.",
+      "type": "object"
     },
     "WorkerMessageCode": {
-      "type": "object",
       "properties": {
         "parameters": {
-          "description": "Parameters contains specific information about the code.\n\nThis is a struct to allow parameters of different types.\n\nExamples:\n 1. For a \"HARNESS_STARTED\" message parameters might provide the name\n    of the worker and additional data like timing information.\n 2. For a \"GCS_DOWNLOAD_ERROR\" parameters might contain fields listing\n    the GCS objects being downloaded and fields containing errors.\n\nIn general complex data structures should be avoided. If a worker\nneeds to send a specific and complicated data structure then please\nconsider defining a new proto and adding it to the data oneof in\nWorkerMessageResponse.\n\nConventions:\n Parameters should only be used for information that isn't typically passed\n as a label.\n hostname and other worker identifiers should almost always be passed\n as labels since they will be included on most messages.",
-          "type": "object",
           "additionalProperties": {
-            "type": "any",
-            "description": "Properties of the object."
-          }
+            "description": "Properties of the object.",
+            "type": "any"
+          },
+          "description": "Parameters contains specific information about the code.\n\nThis is a struct to allow parameters of different types.\n\nExamples:\n 1. For a \"HARNESS_STARTED\" message parameters might provide the name\n    of the worker and additional data like timing information.\n 2. For a \"GCS_DOWNLOAD_ERROR\" parameters might contain fields listing\n    the GCS objects being downloaded and fields containing errors.\n\nIn general complex data structures should be avoided. If a worker\nneeds to send a specific and complicated data structure then please\nconsider defining a new proto and adding it to the data oneof in\nWorkerMessageResponse.\n\nConventions:\n Parameters should only be used for information that isn't typically passed\n as a label.\n hostname and other worker identifiers should almost always be passed\n as labels since they will be included on most messages.",
+          "type": "object"
         },
         "code": {
           "description": "The code is a string intended for consumption by a machine that identifies\nthe type of message being sent.\nExamples:\n 1. \"HARNESS_STARTED\" might be used to indicate the worker harness has\n     started.\n 2. \"GCS_DOWNLOAD_ERROR\" might be used to indicate an error downloading\n    a GCS file as part of the boot process of one of the worker containers.\n\nThis is a string and not an enum to make it easy to add new codes without\nwaiting for an API change.",
@@ -4225,22 +3962,21 @@
         }
       },
       "id": "WorkerMessageCode",
-      "description": "A message code is used to report status and error messages to the service.\nThe message codes are intended to be machine readable. The service will\ntake care of translating these into user understandable messages if\nnecessary.\n\nExample use cases:\n  1. Worker processes reporting successful startup.\n  2. Worker processes reporting specific errors (e.g. package staging\n     failure)."
+      "description": "A message code is used to report status and error messages to the service.\nThe message codes are intended to be machine readable. The service will\ntake care of translating these into user understandable messages if\nnecessary.\n\nExample use cases:\n  1. Worker processes reporting successful startup.\n  2. Worker processes reporting specific errors (e.g. package staging\n     failure).",
+      "type": "object"
     },
     "CustomSourceLocation": {
-      "description": "Identifies the location of a custom souce.",
-      "type": "object",
       "properties": {
         "stateful": {
           "description": "Whether this source is stateful.",
           "type": "boolean"
         }
       },
-      "id": "CustomSourceLocation"
+      "id": "CustomSourceLocation",
+      "description": "Identifies the location of a custom souce.",
+      "type": "object"
     },
     "MapTask": {
-      "description": "MapTask consists of an ordered set of instructions, each of which\ndescribes one particular low-level operation for the worker to\nperform in order to accomplish the MapTask's WorkItem.\n\nEach instruction must appear in the list before any instructions which\ndepends on its output.",
-      "type": "object",
       "properties": {
         "systemName": {
           "description": "System-defined name of this MapTask.\nUnique across the workflow.",
@@ -4258,11 +3994,11 @@
           }
         }
       },
-      "id": "MapTask"
+      "id": "MapTask",
+      "description": "MapTask consists of an ordered set of instructions, each of which\ndescribes one particular low-level operation for the worker to\nperform in order to accomplish the MapTask's WorkItem.\n\nEach instruction must appear in the list before any instructions which\ndepends on its output.",
+      "type": "object"
     },
     "FloatingPointMean": {
-      "description": "A representation of a floating point mean metric contribution.",
-      "type": "object",
       "properties": {
         "count": {
           "$ref": "SplitInt64",
@@ -4274,9 +4010,12 @@
           "type": "number"
         }
       },
-      "id": "FloatingPointMean"
+      "id": "FloatingPointMean",
+      "description": "A representation of a floating point mean metric contribution.",
+      "type": "object"
     },
     "ReportWorkItemStatusResponse": {
+      "description": "Response from a request to report the status of WorkItems.",
       "type": "object",
       "properties": {
         "workItemServiceStates": {
@@ -4287,11 +4026,9 @@
           }
         }
       },
-      "id": "ReportWorkItemStatusResponse",
-      "description": "Response from a request to report the status of WorkItems."
+      "id": "ReportWorkItemStatusResponse"
     },
     "InstructionOutput": {
-      "id": "InstructionOutput",
       "description": "An output of an instruction.",
       "type": "object",
       "properties": {
@@ -4304,17 +4041,17 @@
           "type": "string"
         },
         "onlyCountKeyBytes": {
-          "type": "boolean",
-          "description": "For system-generated byte and mean byte metrics, certain instructions\nshould only report the key size."
+          "description": "For system-generated byte and mean byte metrics, certain instructions\nshould only report the key size.",
+          "type": "boolean"
         },
         "onlyCountValueBytes": {
-          "type": "boolean",
-          "description": "For system-generated byte and mean byte metrics, certain instructions\nshould only report the value size."
+          "description": "For system-generated byte and mean byte metrics, certain instructions\nshould only report the value size.",
+          "type": "boolean"
         },
         "codec": {
           "additionalProperties": {
-            "type": "any",
-            "description": "Properties of the object."
+            "description": "Properties of the object.",
+            "type": "any"
           },
           "description": "The codec to use to encode data being written via this output.",
           "type": "object"
@@ -4323,15 +4060,13 @@
           "description": "The user-provided name of this output.",
           "type": "string"
         }
-      }
+      },
+      "id": "InstructionOutput"
     },
     "CreateJobFromTemplateRequest": {
+      "description": "A request to create a Cloud Dataflow job from a template.",
       "type": "object",
       "properties": {
-        "environment": {
-          "$ref": "RuntimeEnvironment",
-          "description": "The runtime environment for the job."
-        },
         "parameters": {
           "additionalProperties": {
             "type": "string"
@@ -4346,37 +4081,33 @@
         "gcsPath": {
           "description": "Required. A Cloud Storage path to the template from which to\ncreate the job.\nMust be a valid Cloud Storage URL, beginning with `gs://`.",
           "type": "string"
+        },
+        "environment": {
+          "description": "The runtime environment for the job.",
+          "$ref": "RuntimeEnvironment"
         }
       },
-      "id": "CreateJobFromTemplateRequest",
-      "description": "A request to create a Cloud Dataflow job from a template."
+      "id": "CreateJobFromTemplateRequest"
     },
     "IntegerMean": {
-      "id": "IntegerMean",
-      "description": "A representation of an integer mean metric contribution.",
-      "type": "object",
       "properties": {
-        "sum": {
-          "description": "The sum of all values being aggregated.",
-          "$ref": "SplitInt64"
-        },
         "count": {
           "$ref": "SplitInt64",
           "description": "The number of values being aggregated."
+        },
+        "sum": {
+          "$ref": "SplitInt64",
+          "description": "The sum of all values being aggregated."
         }
-      }
+      },
+      "id": "IntegerMean",
+      "description": "A representation of an integer mean metric contribution.",
+      "type": "object"
     },
     "ListJobsResponse": {
       "description": "Response to a request to list Cloud Dataflow jobs.  This may be a partial\nresponse, depending on the page size in the ListJobsRequest.",
       "type": "object",
       "properties": {
-        "jobs": {
-          "description": "A subset of the requested job information.",
-          "type": "array",
-          "items": {
-            "$ref": "Job"
-          }
-        },
         "nextPageToken": {
           "description": "Set if there may be more results than fit in this response.",
           "type": "string"
@@ -4387,31 +4118,21 @@
           "items": {
             "$ref": "FailedLocation"
           }
+        },
+        "jobs": {
+          "description": "A subset of the requested job information.",
+          "type": "array",
+          "items": {
+            "$ref": "Job"
+          }
         }
       },
       "id": "ListJobsResponse"
     },
     "ComputationTopology": {
+      "description": "All configuration data for a particular Computation.",
       "type": "object",
       "properties": {
-        "userStageName": {
-          "description": "The user stage name.",
-          "type": "string"
-        },
-        "stateFamilies": {
-          "description": "The state family values.",
-          "type": "array",
-          "items": {
-            "$ref": "StateFamilyConfig"
-          }
-        },
-        "outputs": {
-          "description": "The outputs from the computation.",
-          "type": "array",
-          "items": {
-            "$ref": "StreamLocation"
-          }
-        },
         "systemStageName": {
           "description": "The system stage name.",
           "type": "string"
@@ -4433,10 +4154,285 @@
           "items": {
             "$ref": "KeyRangeLocation"
           }
+        },
+        "userStageName": {
+          "description": "The user stage name.",
+          "type": "string"
+        },
+        "stateFamilies": {
+          "description": "The state family values.",
+          "type": "array",
+          "items": {
+            "$ref": "StateFamilyConfig"
+          }
+        },
+        "outputs": {
+          "description": "The outputs from the computation.",
+          "type": "array",
+          "items": {
+            "$ref": "StreamLocation"
+          }
         }
       },
-      "id": "ComputationTopology",
-      "description": "All configuration data for a particular Computation."
+      "id": "ComputationTopology"
+    },
+    "RuntimeEnvironment": {
+      "properties": {
+        "zone": {
+          "description": "The Compute Engine [availability zone](https://cloud.google.com/compute/docs/regions-zones/regions-zones)\nfor launching worker instances to run your pipeline.",
+          "type": "string"
+        },
+        "serviceAccountEmail": {
+          "description": "The email address of the service account to run the job as.",
+          "type": "string"
+        },
+        "tempLocation": {
+          "description": "The Cloud Storage path to use for temporary files.\nMust be a valid Cloud Storage URL, beginning with `gs://`.",
+          "type": "string"
+        },
+        "bypassTempDirValidation": {
+          "description": "Whether to bypass the safety checks for the job's temporary directory.\nUse with caution.",
+          "type": "boolean"
+        },
+        "maxWorkers": {
+          "description": "The maximum number of Google Compute Engine instances to be made\navailable to your pipeline during execution, from 1 to 1000.",
+          "format": "int32",
+          "type": "integer"
+        }
+      },
+      "id": "RuntimeEnvironment",
+      "description": "The environment values to set at runtime.",
+      "type": "object"
+    },
+    "StreamingSideInputLocation": {
+      "description": "Identifies the location of a streaming side input.",
+      "type": "object",
+      "properties": {
+        "tag": {
+          "description": "Identifies the particular side input within the streaming Dataflow job.",
+          "type": "string"
+        },
+        "stateFamily": {
+          "description": "Identifies the state family where this side input is stored.",
+          "type": "string"
+        }
+      },
+      "id": "StreamingSideInputLocation"
+    },
+    "MountedDataDisk": {
+      "description": "Describes mounted data disk.",
+      "type": "object",
+      "properties": {
+        "dataDisk": {
+          "description": "The name of the data disk.\nThis name is local to the Google Cloud Platform project and uniquely\nidentifies the disk within that project, for example\n\"myproject-1014-104817-4c2-harness-0-disk-1\".",
+          "type": "string"
+        }
+      },
+      "id": "MountedDataDisk"
+    },
+    "LaunchTemplateResponse": {
+      "description": "Response to the request to launch a template.",
+      "type": "object",
+      "properties": {
+        "job": {
+          "description": "The job that was launched, if the request was not a dry run and\nthe job was successfully launched.",
+          "$ref": "Job"
+        }
+      },
+      "id": "LaunchTemplateResponse"
+    },
+    "DerivedSource": {
+      "properties": {
+        "derivationMode": {
+          "enum": [
+            "SOURCE_DERIVATION_MODE_UNKNOWN",
+            "SOURCE_DERIVATION_MODE_INDEPENDENT",
+            "SOURCE_DERIVATION_MODE_CHILD_OF_CURRENT",
+            "SOURCE_DERIVATION_MODE_SIBLING_OF_CURRENT"
+          ],
+          "description": "What source to base the produced source on (if any).",
+          "type": "string",
+          "enumDescriptions": [
+            "The source derivation is unknown, or unspecified.",
+            "Produce a completely independent Source with no base.",
+            "Produce a Source based on the Source being split.",
+            "Produce a Source based on the base of the Source being split."
+          ]
+        },
+        "source": {
+          "description": "Specification of the source.",
+          "$ref": "Source"
+        }
+      },
+      "id": "DerivedSource",
+      "description": "Specification of one of the bundles produced as a result of splitting\na Source (e.g. when executing a SourceSplitRequest, or when\nsplitting an active task using WorkItemStatus.dynamic_source_split),\nrelative to the source being split.",
+      "type": "object"
+    },
+    "DynamicSourceSplit": {
+      "description": "When a task splits using WorkItemStatus.dynamic_source_split, this\nmessage describes the two parts of the split relative to the\ndescription of the current task's input.",
+      "type": "object",
+      "properties": {
+        "primary": {
+          "description": "Primary part (continued to be processed by worker).\nSpecified relative to the previously-current source.\nBecomes current.",
+          "$ref": "DerivedSource"
+        },
+        "residual": {
+          "$ref": "DerivedSource",
+          "description": "Residual part (returned to the pool of work).\nSpecified relative to the previously-current source."
+        }
+      },
+      "id": "DynamicSourceSplit"
+    },
+    "Job": {
+      "properties": {
+        "name": {
+          "description": "The user-specified Cloud Dataflow job name.\n\nOnly one Job with a given name may exist in a project at any\ngiven time. If a caller attempts to create a Job with the same\nname as an already-existing Job, the attempt returns the\nexisting Job.\n\nThe name must match the regular expression\n`[a-z]([-a-z0-9]{0,38}[a-z0-9])?`",
+          "type": "string"
+        },
+        "replacedByJobId": {
+          "description": "If another job is an update of this job (and thus, this job is in\n`JOB_STATE_UPDATED`), this field contains the ID of that job.",
+          "type": "string"
+        },
+        "steps": {
+          "description": "The top-level steps that constitute the entire job.",
+          "type": "array",
+          "items": {
+            "$ref": "Step"
+          }
+        },
+        "executionInfo": {
+          "$ref": "JobExecutionInfo",
+          "description": "Deprecated."
+        },
+        "id": {
+          "description": "The unique ID of this job.\n\nThis field is set by the Cloud Dataflow service when the Job is\ncreated, and is immutable for the life of the job.",
+          "type": "string"
+        },
+        "currentState": {
+          "enumDescriptions": [
+            "The job's run state isn't specified.",
+            "`JOB_STATE_STOPPED` indicates that the job has not\nyet started to run.",
+            "`JOB_STATE_RUNNING` indicates that the job is currently running.",
+            "`JOB_STATE_DONE` indicates that the job has successfully completed.\nThis is a terminal job state.  This state may be set by the Cloud Dataflow\nservice, as a transition from `JOB_STATE_RUNNING`. It may also be set via a\nCloud Dataflow `UpdateJob` call, if the job has not yet reached a terminal\nstate.",
+            "`JOB_STATE_FAILED` indicates that the job has failed.  This is a\nterminal job state.  This state may only be set by the Cloud Dataflow\nservice, and only as a transition from `JOB_STATE_RUNNING`.",
+            "`JOB_STATE_CANCELLED` indicates that the job has been explicitly\ncancelled. This is a terminal job state. This state may only be\nset via a Cloud Dataflow `UpdateJob` call, and only if the job has not\nyet reached another terminal state.",
+            "`JOB_STATE_UPDATED` indicates that the job was successfully updated,\nmeaning that this job was stopped and another job was started, inheriting\nstate from this one. This is a terminal job state. This state may only be\nset by the Cloud Dataflow service, and only as a transition from\n`JOB_STATE_RUNNING`.",
+            "`JOB_STATE_DRAINING` indicates that the job is in the process of draining.\nA draining job has stopped pulling from its input sources and is processing\nany data that remains in-flight. This state may be set via a Cloud Dataflow\n`UpdateJob` call, but only as a transition from `JOB_STATE_RUNNING`. Jobs\nthat are draining may only transition to `JOB_STATE_DRAINED`,\n`JOB_STATE_CANCELLED`, or `JOB_STATE_FAILED`.",
+            "`JOB_STATE_DRAINED` indicates that the job has been drained.\nA drained job terminated by stopping pulling from its input sources and\nprocessing any data that remained in-flight when draining was requested.\nThis state is a terminal state, may only be set by the Cloud Dataflow\nservice, and only as a transition from `JOB_STATE_DRAINING`."
+          ],
+          "enum": [
+            "JOB_STATE_UNKNOWN",
+            "JOB_STATE_STOPPED",
+            "JOB_STATE_RUNNING",
+            "JOB_STATE_DONE",
+            "JOB_STATE_FAILED",
+            "JOB_STATE_CANCELLED",
+            "JOB_STATE_UPDATED",
+            "JOB_STATE_DRAINING",
+            "JOB_STATE_DRAINED"
+          ],
+          "description": "The current state of the job.\n\nJobs are created in the `JOB_STATE_STOPPED` state unless otherwise\nspecified.\n\nA job in the `JOB_STATE_RUNNING` state may asynchronously enter a\nterminal state. After a job has reached a terminal state, no\nfurther state updates may be made.\n\nThis field may be mutated by the Cloud Dataflow service;\ncallers cannot mutate it.",
+          "type": "string"
+        },
+        "location": {
+          "description": "The location that contains this job.",
+          "type": "string"
+        },
+        "currentStateTime": {
+          "description": "The timestamp associated with the current state.",
+          "format": "google-datetime",
+          "type": "string"
+        },
+        "transformNameMapping": {
+          "additionalProperties": {
+            "type": "string"
+          },
+          "description": "The map of transform name prefixes of the job to be replaced to the\ncorresponding name prefixes of the new job.",
+          "type": "object"
+        },
+        "createTime": {
+          "description": "The timestamp when the job was initially created. Immutable and set by the\nCloud Dataflow service.",
+          "format": "google-datetime",
+          "type": "string"
+        },
+        "environment": {
+          "description": "The environment for the job.",
+          "$ref": "Environment"
+        },
+        "labels": {
+          "additionalProperties": {
+            "type": "string"
+          },
+          "description": "User-defined labels for this job.\n\nThe labels map can contain no more than 64 entries.  Entries of the labels\nmap are UTF8 strings that comply with the following restrictions:\n\n* Keys must conform to regexp:  \\p{Ll}\\p{Lo}{0,62}\n* Values must conform to regexp:  [\\p{Ll}\\p{Lo}\\p{N}_-]{0,63}\n* Both keys and values are additionally constrained to be \u003c= 128 bytes in\nsize.",
+          "type": "object"
+        },
+        "projectId": {
+          "description": "The ID of the Cloud Platform project that the job belongs to.",
+          "type": "string"
+        },
+        "type": {
+          "enum": [
+            "JOB_TYPE_UNKNOWN",
+            "JOB_TYPE_BATCH",
+            "JOB_TYPE_STREAMING"
+          ],
+          "description": "The type of Cloud Dataflow job.",
+          "type": "string",
+          "enumDescriptions": [
+            "The type of the job is unspecified, or unknown.",
+            "A batch job with a well-defined end point: data is read, data is\nprocessed, data is written, and the job is done.",
+            "A continuously streaming job with no end: data is read,\nprocessed, and written continuously."
+          ]
+        },
+        "pipelineDescription": {
+          "$ref": "PipelineDescription",
+          "description": "Preliminary field: The format of this data may change at any time.\nA description of the user pipeline and stages through which it is executed.\nCreated by Cloud Dataflow service.  Only retrieved with\nJOB_VIEW_DESCRIPTION or JOB_VIEW_ALL."
+        },
+        "replaceJobId": {
+          "description": "If this job is an update of an existing job, this field is the job ID\nof the job it replaced.\n\nWhen sending a `CreateJobRequest`, you can update a job by specifying it\nhere. The job named here is stopped, and its intermediate state is\ntransferred to this job.",
+          "type": "string"
+        },
+        "requestedState": {
+          "enumDescriptions": [
+            "The job's run state isn't specified.",
+            "`JOB_STATE_STOPPED` indicates that the job has not\nyet started to run.",
+            "`JOB_STATE_RUNNING` indicates that the job is currently running.",
+            "`JOB_STATE_DONE` indicates that the job has successfully completed.\nThis is a terminal job state.  This state may be set by the Cloud Dataflow\nservice, as a transition from `JOB_STATE_RUNNING`. It may also be set via a\nCloud Dataflow `UpdateJob` call, if the job has not yet reached a terminal\nstate.",
+            "`JOB_STATE_FAILED` indicates that the job has failed.  This is a\nterminal job state.  This state may only be set by the Cloud Dataflow\nservice, and only as a transition from `JOB_STATE_RUNNING`.",
+            "`JOB_STATE_CANCELLED` indicates that the job has been explicitly\ncancelled. This is a terminal job state. This state may only be\nset via a Cloud Dataflow `UpdateJob` call, and only if the job has not\nyet reached another terminal state.",
+            "`JOB_STATE_UPDATED` indicates that the job was successfully updated,\nmeaning that this job was stopped and another job was started, inheriting\nstate from this one. This is a terminal job state. This state may only be\nset by the Cloud Dataflow service, and only as a transition from\n`JOB_STATE_RUNNING`.",
+            "`JOB_STATE_DRAINING` indicates that the job is in the process of draining.\nA draining job has stopped pulling from its input sources and is processing\nany data that remains in-flight. This state may be set via a Cloud Dataflow\n`UpdateJob` call, but only as a transition from `JOB_STATE_RUNNING`. Jobs\nthat are draining may only transition to `JOB_STATE_DRAINED`,\n`JOB_STATE_CANCELLED`, or `JOB_STATE_FAILED`.",
+            "`JOB_STATE_DRAINED` indicates that the job has been drained.\nA drained job terminated by stopping pulling from its input sources and\nprocessing any data that remained in-flight when draining was requested.\nThis state is a terminal state, may only be set by the Cloud Dataflow\nservice, and only as a transition from `JOB_STATE_DRAINING`."
+          ],
+          "enum": [
+            "JOB_STATE_UNKNOWN",
+            "JOB_STATE_STOPPED",
+            "JOB_STATE_RUNNING",
+            "JOB_STATE_DONE",
+            "JOB_STATE_FAILED",
+            "JOB_STATE_CANCELLED",
+            "JOB_STATE_UPDATED",
+            "JOB_STATE_DRAINING",
+            "JOB_STATE_DRAINED"
+          ],
+          "description": "The job's requested state.\n\n`UpdateJob` may be used to switch between the `JOB_STATE_STOPPED` and\n`JOB_STATE_RUNNING` states, by setting requested_state.  `UpdateJob` may\nalso be used to directly set a job's requested state to\n`JOB_STATE_CANCELLED` or `JOB_STATE_DONE`, irrevocably terminating the\njob if it has not already reached a terminal state.",
+          "type": "string"
+        },
+        "tempFiles": {
+          "description": "A set of files the system should be aware of that are used\nfor temporary storage. These temporary files will be\nremoved on job completion.\nNo duplicates are allowed.\nNo file patterns are supported.\n\nThe supported files are:\n\nGoogle Cloud Storage:\n\n   storage.googleapis.com/{bucket}/{object}\n   bucket.storage.googleapis.com/{object}",
+          "type": "array",
+          "items": {
+            "type": "string"
+          }
+        },
+        "clientRequestId": {
+          "description": "The client's unique identifier of the job, re-used across retried attempts.\nIf this field is set, the service will ensure its uniqueness.\nThe request to create a job will fail if the service has knowledge of a\npreviously submitted job with the same client's ID and job name.\nThe caller may use this field to ensure idempotence of job\ncreation across retried attempts to create a job.\nBy default, the field is empty and, in that case, the service ignores it.",
+          "type": "string"
+        }
+      },
+      "id": "Job",
+      "description": "Defines a job to be run by the Cloud Dataflow service.",
+      "type": "object"
     }
   },
   "icons": {
diff --git a/dataflow/v1b3/dataflow-gen.go b/dataflow/v1b3/dataflow-gen.go
index 48b3bea..e462805 100644
--- a/dataflow/v1b3/dataflow-gen.go
+++ b/dataflow/v1b3/dataflow-gen.go
@@ -64,10 +64,9 @@
 }
 
 type Service struct {
-	client                    *http.Client
-	BasePath                  string // API endpoint base URL
-	UserAgent                 string // optional additional User-Agent fragment
-	GoogleClientHeaderElement string // client header fragment, for Google use only
+	client    *http.Client
+	BasePath  string // API endpoint base URL
+	UserAgent string // optional additional User-Agent fragment
 
 	Projects *ProjectsService
 }
@@ -79,10 +78,6 @@
 	return googleapi.UserAgent + " " + s.UserAgent
 }
 
-func (s *Service) clientHeader() string {
-	return gensupport.GoogleClientHeader("20170210", s.GoogleClientHeaderElement)
-}
-
 func NewProjectsService(s *Service) *ProjectsService {
 	rs := &ProjectsService{s: s}
 	rs.Jobs = NewProjectsJobsService(s)
@@ -2394,14 +2389,14 @@
 	// streaming computation cross-worker message delivery.
 	DeliveryEndpoint string `json:"deliveryEndpoint,omitempty"`
 
+	// DeprecatedPersistentDirectory: DEPRECATED. The location of the
+	// persistent state for this range, as a
+	// persistent directory in the worker local filesystem.
+	DeprecatedPersistentDirectory string `json:"deprecatedPersistentDirectory,omitempty"`
+
 	// End: The end (exclusive) of the key range.
 	End string `json:"end,omitempty"`
 
-	// PersistentDirectory: The location of the persistent state for this
-	// range, as a
-	// persistent directory in the worker local filesystem.
-	PersistentDirectory string `json:"persistentDirectory,omitempty"`
-
 	// Start: The start (inclusive) of the key range.
 	Start string `json:"start,omitempty"`
 
@@ -2470,11 +2465,6 @@
 	// the job was successfully launched.
 	Job *Job `json:"job,omitempty"`
 
-	// Status: The status of the launch template request. Any problems with
-	// the request
-	// will be indicated in the error_details.
-	Status *Status `json:"status,omitempty"`
-
 	// ServerResponse contains the HTTP response code and headers from the
 	// server.
 	googleapi.ServerResponse `json:"-"`
@@ -6168,7 +6158,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	var body io.Reader = nil
 	body, err := googleapi.WithoutDataWrapper.JSONReader(c.sendworkermessagesrequest)
 	if err != nil {
@@ -6331,7 +6320,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	var body io.Reader = nil
 	body, err := googleapi.WithoutDataWrapper.JSONReader(c.job)
 	if err != nil {
@@ -6519,7 +6507,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	if c.ifNoneMatch_ != "" {
 		reqHeaders.Set("If-None-Match", c.ifNoneMatch_)
 	}
@@ -6700,7 +6687,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	if c.ifNoneMatch_ != "" {
 		reqHeaders.Set("If-None-Match", c.ifNoneMatch_)
 	}
@@ -6910,7 +6896,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	if c.ifNoneMatch_ != "" {
 		reqHeaders.Set("If-None-Match", c.ifNoneMatch_)
 	}
@@ -7109,7 +7094,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	var body io.Reader = nil
 	body, err := googleapi.WithoutDataWrapper.JSONReader(c.job)
 	if err != nil {
@@ -7261,7 +7245,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	var body io.Reader = nil
 	body, err := googleapi.WithoutDataWrapper.JSONReader(c.getdebugconfigrequest)
 	if err != nil {
@@ -7407,7 +7390,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	var body io.Reader = nil
 	body, err := googleapi.WithoutDataWrapper.JSONReader(c.senddebugcapturerequest)
 	if err != nil {
@@ -7619,7 +7601,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	if c.ifNoneMatch_ != "" {
 		reqHeaders.Set("If-None-Match", c.ifNoneMatch_)
 	}
@@ -7822,7 +7803,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	var body io.Reader = nil
 	body, err := googleapi.WithoutDataWrapper.JSONReader(c.leaseworkitemrequest)
 	if err != nil {
@@ -7969,7 +7949,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	var body io.Reader = nil
 	body, err := googleapi.WithoutDataWrapper.JSONReader(c.reportworkitemstatusrequest)
 	if err != nil {
@@ -8135,7 +8114,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	var body io.Reader = nil
 	body, err := googleapi.WithoutDataWrapper.JSONReader(c.job)
 	if err != nil {
@@ -8321,7 +8299,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	if c.ifNoneMatch_ != "" {
 		reqHeaders.Set("If-None-Match", c.ifNoneMatch_)
 	}
@@ -8500,7 +8477,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	if c.ifNoneMatch_ != "" {
 		reqHeaders.Set("If-None-Match", c.ifNoneMatch_)
 	}
@@ -8708,7 +8684,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	if c.ifNoneMatch_ != "" {
 		reqHeaders.Set("If-None-Match", c.ifNoneMatch_)
 	}
@@ -8905,7 +8880,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	var body io.Reader = nil
 	body, err := googleapi.WithoutDataWrapper.JSONReader(c.job)
 	if err != nil {
@@ -9120,7 +9094,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	if c.ifNoneMatch_ != "" {
 		reqHeaders.Set("If-None-Match", c.ifNoneMatch_)
 	}
@@ -9328,7 +9301,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	var body io.Reader = nil
 	body, err := googleapi.WithoutDataWrapper.JSONReader(c.leaseworkitemrequest)
 	if err != nil {
@@ -9485,7 +9457,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	var body io.Reader = nil
 	body, err := googleapi.WithoutDataWrapper.JSONReader(c.reportworkitemstatusrequest)
 	if err != nil {
@@ -9637,7 +9608,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	var body io.Reader = nil
 	body, err := googleapi.WithoutDataWrapper.JSONReader(c.createjobfromtemplaterequest)
 	if err != nil {
@@ -9801,7 +9771,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	if c.ifNoneMatch_ != "" {
 		reqHeaders.Set("If-None-Match", c.ifNoneMatch_)
 	}
@@ -9963,7 +9932,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	var body io.Reader = nil
 	body, err := googleapi.WithoutDataWrapper.JSONReader(c.launchtemplateparameters)
 	if err != nil {
diff --git a/dataproc/v1/dataproc-api.json b/dataproc/v1/dataproc-api.json
index 350af79..7cf3f3a 100644
--- a/dataproc/v1/dataproc-api.json
+++ b/dataproc/v1/dataproc-api.json
@@ -4,259 +4,59 @@
       "resources": {
         "regions": {
           "resources": {
-            "clusters": {
-              "methods": {
-                "diagnose": {
-                  "request": {
-                    "$ref": "DiagnoseClusterRequest"
-                  },
-                  "description": "Gets cluster diagnostic information. After the operation completes, the Operation.response field contains DiagnoseClusterOutputLocation.",
-                  "response": {
-                    "$ref": "Operation"
-                  },
-                  "parameterOrder": [
-                    "projectId",
-                    "region",
-                    "clusterName"
-                  ],
-                  "httpMethod": "POST",
-                  "parameters": {
-                    "projectId": {
-                      "location": "path",
-                      "description": "Required The ID of the Google Cloud Platform project that the cluster belongs to.",
-                      "required": true,
-                      "type": "string"
-                    },
-                    "region": {
-                      "required": true,
-                      "type": "string",
-                      "location": "path",
-                      "description": "Required The Cloud Dataproc region in which to handle the request."
-                    },
-                    "clusterName": {
-                      "required": true,
-                      "type": "string",
-                      "location": "path",
-                      "description": "Required The cluster name."
-                    }
-                  },
-                  "scopes": [
-                    "https://www.googleapis.com/auth/cloud-platform"
-                  ],
-                  "flatPath": "v1/projects/{projectId}/regions/{region}/clusters/{clusterName}:diagnose",
-                  "path": "v1/projects/{projectId}/regions/{region}/clusters/{clusterName}:diagnose",
-                  "id": "dataproc.projects.regions.clusters.diagnose"
-                },
-                "delete": {
-                  "flatPath": "v1/projects/{projectId}/regions/{region}/clusters/{clusterName}",
-                  "id": "dataproc.projects.regions.clusters.delete",
-                  "path": "v1/projects/{projectId}/regions/{region}/clusters/{clusterName}",
-                  "description": "Deletes a cluster in a project.",
-                  "httpMethod": "DELETE",
-                  "response": {
-                    "$ref": "Operation"
-                  },
-                  "parameterOrder": [
-                    "projectId",
-                    "region",
-                    "clusterName"
-                  ],
-                  "scopes": [
-                    "https://www.googleapis.com/auth/cloud-platform"
-                  ],
-                  "parameters": {
-                    "projectId": {
-                      "required": true,
-                      "type": "string",
-                      "location": "path",
-                      "description": "Required The ID of the Google Cloud Platform project that the cluster belongs to."
-                    },
-                    "region": {
-                      "required": true,
-                      "type": "string",
-                      "location": "path",
-                      "description": "Required The Cloud Dataproc region in which to handle the request."
-                    },
-                    "clusterName": {
-                      "location": "path",
-                      "description": "Required The cluster name.",
-                      "required": true,
-                      "type": "string"
-                    }
-                  }
-                },
-                "list": {
-                  "response": {
-                    "$ref": "ListClustersResponse"
-                  },
-                  "parameterOrder": [
-                    "projectId",
-                    "region"
-                  ],
-                  "httpMethod": "GET",
-                  "scopes": [
-                    "https://www.googleapis.com/auth/cloud-platform"
-                  ],
-                  "parameters": {
-                    "projectId": {
-                      "required": true,
-                      "type": "string",
-                      "location": "path",
-                      "description": "Required The ID of the Google Cloud Platform project that the cluster belongs to."
-                    },
-                    "region": {
-                      "required": true,
-                      "type": "string",
-                      "location": "path",
-                      "description": "Required The Cloud Dataproc region in which to handle the request."
-                    },
-                    "filter": {
-                      "type": "string",
-                      "location": "query",
-                      "description": "Optional A filter constraining the clusters to list. Filters are case-sensitive and have the following syntax:field = value AND field = value ...where field is one of status.state, clusterName, or labels.[KEY], and [KEY] is a label key. value can be * to match all values. status.state can be one of the following: ACTIVE, INACTIVE, CREATING, RUNNING, ERROR, DELETING, or UPDATING. ACTIVE contains the CREATING, UPDATING, and RUNNING states. INACTIVE contains the DELETING and ERROR states. clusterName is the name of the cluster provided at creation time. Only the logical AND operator is supported; space-separated items are treated as having an implicit AND operator.Example filter:status.state = ACTIVE AND clusterName = mycluster AND labels.env = staging AND labels.starred = *"
-                    },
-                    "pageToken": {
-                      "type": "string",
-                      "location": "query",
-                      "description": "Optional The standard List page token."
-                    },
-                    "pageSize": {
-                      "location": "query",
-                      "description": "Optional The standard List page size.",
-                      "format": "int32",
-                      "type": "integer"
-                    }
-                  },
-                  "flatPath": "v1/projects/{projectId}/regions/{region}/clusters",
-                  "path": "v1/projects/{projectId}/regions/{region}/clusters",
-                  "id": "dataproc.projects.regions.clusters.list",
-                  "description": "Lists all regions/{region}/clusters in a project."
-                },
-                "create": {
-                  "flatPath": "v1/projects/{projectId}/regions/{region}/clusters",
-                  "id": "dataproc.projects.regions.clusters.create",
-                  "path": "v1/projects/{projectId}/regions/{region}/clusters",
-                  "description": "Creates a cluster in a project.",
-                  "request": {
-                    "$ref": "Cluster"
-                  },
-                  "httpMethod": "POST",
-                  "parameterOrder": [
-                    "projectId",
-                    "region"
-                  ],
-                  "response": {
-                    "$ref": "Operation"
-                  },
-                  "scopes": [
-                    "https://www.googleapis.com/auth/cloud-platform"
-                  ],
-                  "parameters": {
-                    "projectId": {
-                      "location": "path",
-                      "description": "Required The ID of the Google Cloud Platform project that the cluster belongs to.",
-                      "required": true,
-                      "type": "string"
-                    },
-                    "region": {
-                      "location": "path",
-                      "description": "Required The Cloud Dataproc region in which to handle the request.",
-                      "required": true,
-                      "type": "string"
-                    }
-                  }
-                },
-                "patch": {
-                  "response": {
-                    "$ref": "Operation"
-                  },
-                  "parameterOrder": [
-                    "projectId",
-                    "region",
-                    "clusterName"
-                  ],
-                  "httpMethod": "PATCH",
-                  "scopes": [
-                    "https://www.googleapis.com/auth/cloud-platform"
-                  ],
-                  "parameters": {
-                    "clusterName": {
-                      "location": "path",
-                      "description": "Required The cluster name.",
-                      "required": true,
-                      "type": "string"
-                    },
-                    "projectId": {
-                      "required": true,
-                      "type": "string",
-                      "location": "path",
-                      "description": "Required The ID of the Google Cloud Platform project the cluster belongs to."
-                    },
-                    "region": {
-                      "location": "path",
-                      "description": "Required The Cloud Dataproc region in which to handle the request.",
-                      "required": true,
-                      "type": "string"
-                    },
-                    "updateMask": {
-                      "type": "string",
-                      "location": "query",
-                      "description": "Required Specifies the path, relative to \u003ccode\u003eCluster\u003c/code\u003e, of the field to update. For example, to change the number of workers in a cluster to 5, the \u003ccode\u003eupdate_mask\u003c/code\u003e parameter would be specified as \u003ccode\u003econfig.worker_config.num_instances\u003c/code\u003e, and the PATCH request body would specify the new value, as follows:\n{\n  \"config\":{\n    \"workerConfig\":{\n      \"numInstances\":\"5\"\n    }\n  }\n}\nSimilarly, to change the number of preemptible workers in a cluster to 5, the \u003ccode\u003eupdate_mask\u003c/code\u003e parameter would be \u003ccode\u003econfig.secondary_worker_config.num_instances\u003c/code\u003e, and the PATCH request body would be set as follows:\n{\n  \"config\":{\n    \"secondaryWorkerConfig\":{\n      \"numInstances\":\"5\"\n    }\n  }\n}\n\u003cstrong\u003eNote:\u003c/strong\u003e Currently, \u003ccode\u003econfig.worker_config.num_instances\u003c/code\u003e and \u003ccode\u003econfig.secondary_worker_config.num_instances\u003c/code\u003e are the only fields that can be updated.",
-                      "format": "google-fieldmask"
-                    }
-                  },
-                  "flatPath": "v1/projects/{projectId}/regions/{region}/clusters/{clusterName}",
-                  "path": "v1/projects/{projectId}/regions/{region}/clusters/{clusterName}",
-                  "id": "dataproc.projects.regions.clusters.patch",
-                  "description": "Updates a cluster in a project.",
-                  "request": {
-                    "$ref": "Cluster"
-                  }
-                },
-                "get": {
-                  "httpMethod": "GET",
-                  "parameterOrder": [
-                    "projectId",
-                    "region",
-                    "clusterName"
-                  ],
-                  "response": {
-                    "$ref": "Cluster"
-                  },
-                  "parameters": {
-                    "clusterName": {
-                      "location": "path",
-                      "description": "Required The cluster name.",
-                      "required": true,
-                      "type": "string"
-                    },
-                    "projectId": {
-                      "location": "path",
-                      "description": "Required The ID of the Google Cloud Platform project that the cluster belongs to.",
-                      "required": true,
-                      "type": "string"
-                    },
-                    "region": {
-                      "required": true,
-                      "type": "string",
-                      "location": "path",
-                      "description": "Required The Cloud Dataproc region in which to handle the request."
-                    }
-                  },
-                  "scopes": [
-                    "https://www.googleapis.com/auth/cloud-platform"
-                  ],
-                  "flatPath": "v1/projects/{projectId}/regions/{region}/clusters/{clusterName}",
-                  "id": "dataproc.projects.regions.clusters.get",
-                  "path": "v1/projects/{projectId}/regions/{region}/clusters/{clusterName}",
-                  "description": "Gets the resource representation for a cluster in a project."
-                }
-              }
-            },
             "operations": {
               "methods": {
+                "cancel": {
+                  "response": {
+                    "$ref": "Empty"
+                  },
+                  "parameterOrder": [
+                    "name"
+                  ],
+                  "httpMethod": "POST",
+                  "scopes": [
+                    "https://www.googleapis.com/auth/cloud-platform"
+                  ],
+                  "parameters": {
+                    "name": {
+                      "location": "path",
+                      "description": "The name of the operation resource to be cancelled.",
+                      "required": true,
+                      "type": "string",
+                      "pattern": "^projects/[^/]+/regions/[^/]+/operations/[^/]+$"
+                    }
+                  },
+                  "flatPath": "v1/projects/{projectsId}/regions/{regionsId}/operations/{operationsId}:cancel",
+                  "path": "v1/{+name}:cancel",
+                  "id": "dataproc.projects.regions.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."
+                },
+                "delete": {
+                  "flatPath": "v1/projects/{projectsId}/regions/{regionsId}/operations/{operationsId}",
+                  "id": "dataproc.projects.regions.operations.delete",
+                  "path": "v1/{+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",
+                  "parameterOrder": [
+                    "name"
+                  ],
+                  "response": {
+                    "$ref": "Empty"
+                  },
+                  "scopes": [
+                    "https://www.googleapis.com/auth/cloud-platform"
+                  ],
+                  "parameters": {
+                    "name": {
+                      "location": "path",
+                      "description": "The name of the operation resource to be deleted.",
+                      "required": true,
+                      "type": "string",
+                      "pattern": "^projects/[^/]+/regions/[^/]+/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 below allows API services to override the binding to use different resource name schemes, such as users/*/operations.",
                   "httpMethod": "GET",
                   "parameterOrder": [
                     "name"
@@ -264,6 +64,9 @@
                   "response": {
                     "$ref": "ListOperationsResponse"
                   },
+                  "scopes": [
+                    "https://www.googleapis.com/auth/cloud-platform"
+                  ],
                   "parameters": {
                     "name": {
                       "required": true,
@@ -289,12 +92,10 @@
                       "description": "The standard list filter."
                     }
                   },
-                  "scopes": [
-                    "https://www.googleapis.com/auth/cloud-platform"
-                  ],
                   "flatPath": "v1/projects/{projectsId}/regions/{regionsId}/operations",
                   "id": "dataproc.projects.regions.operations.list",
-                  "path": "v1/{+name}"
+                  "path": "v1/{+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 below allows API services to override the binding to use different resource name schemes, such as users/*/operations."
                 },
                 "get": {
                   "flatPath": "v1/projects/{projectsId}/regions/{regionsId}/operations/{operationsId}",
@@ -308,6 +109,9 @@
                     "name"
                   ],
                   "httpMethod": "GET",
+                  "scopes": [
+                    "https://www.googleapis.com/auth/cloud-platform"
+                  ],
                   "parameters": {
                     "name": {
                       "required": true,
@@ -316,146 +120,25 @@
                       "location": "path",
                       "description": "The name of the operation resource."
                     }
-                  },
-                  "scopes": [
-                    "https://www.googleapis.com/auth/cloud-platform"
-                  ]
-                },
-                "cancel": {
-                  "flatPath": "v1/projects/{projectsId}/regions/{regionsId}/operations/{operationsId}:cancel",
-                  "path": "v1/{+name}:cancel",
-                  "id": "dataproc.projects.regions.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.",
-                  "response": {
-                    "$ref": "Empty"
-                  },
-                  "parameterOrder": [
-                    "name"
-                  ],
-                  "httpMethod": "POST",
-                  "scopes": [
-                    "https://www.googleapis.com/auth/cloud-platform"
-                  ],
-                  "parameters": {
-                    "name": {
-                      "location": "path",
-                      "description": "The name of the operation resource to be cancelled.",
-                      "required": true,
-                      "type": "string",
-                      "pattern": "^projects/[^/]+/regions/[^/]+/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.",
-                  "response": {
-                    "$ref": "Empty"
-                  },
-                  "parameterOrder": [
-                    "name"
-                  ],
-                  "httpMethod": "DELETE",
-                  "scopes": [
-                    "https://www.googleapis.com/auth/cloud-platform"
-                  ],
-                  "parameters": {
-                    "name": {
-                      "required": true,
-                      "type": "string",
-                      "pattern": "^projects/[^/]+/regions/[^/]+/operations/[^/]+$",
-                      "location": "path",
-                      "description": "The name of the operation resource to be deleted."
-                    }
-                  },
-                  "flatPath": "v1/projects/{projectsId}/regions/{regionsId}/operations/{operationsId}",
-                  "path": "v1/{+name}",
-                  "id": "dataproc.projects.regions.operations.delete"
                 }
               }
             },
             "jobs": {
               "methods": {
-                "submit": {
-                  "description": "Submits a job to a cluster.",
-                  "request": {
-                    "$ref": "SubmitJobRequest"
-                  },
-                  "response": {
-                    "$ref": "Job"
-                  },
+                "list": {
+                  "flatPath": "v1/projects/{projectId}/regions/{region}/jobs",
+                  "id": "dataproc.projects.regions.jobs.list",
+                  "path": "v1/projects/{projectId}/regions/{region}/jobs",
+                  "description": "Lists regions/{region}/jobs in a project.",
+                  "httpMethod": "GET",
                   "parameterOrder": [
                     "projectId",
                     "region"
                   ],
-                  "httpMethod": "POST",
-                  "scopes": [
-                    "https://www.googleapis.com/auth/cloud-platform"
-                  ],
-                  "parameters": {
-                    "projectId": {
-                      "location": "path",
-                      "description": "Required The ID of the Google Cloud Platform project that the job belongs to.",
-                      "required": true,
-                      "type": "string"
-                    },
-                    "region": {
-                      "location": "path",
-                      "description": "Required The Cloud Dataproc region in which to handle the request.",
-                      "required": true,
-                      "type": "string"
-                    }
-                  },
-                  "flatPath": "v1/projects/{projectId}/regions/{region}/jobs:submit",
-                  "path": "v1/projects/{projectId}/regions/{region}/jobs:submit",
-                  "id": "dataproc.projects.regions.jobs.submit"
-                },
-                "delete": {
-                  "response": {
-                    "$ref": "Empty"
-                  },
-                  "parameterOrder": [
-                    "projectId",
-                    "region",
-                    "jobId"
-                  ],
-                  "httpMethod": "DELETE",
-                  "parameters": {
-                    "projectId": {
-                      "location": "path",
-                      "description": "Required The ID of the Google Cloud Platform project that the job belongs to.",
-                      "required": true,
-                      "type": "string"
-                    },
-                    "jobId": {
-                      "required": true,
-                      "type": "string",
-                      "location": "path",
-                      "description": "Required The job ID."
-                    },
-                    "region": {
-                      "required": true,
-                      "type": "string",
-                      "location": "path",
-                      "description": "Required The Cloud Dataproc region in which to handle the request."
-                    }
-                  },
-                  "scopes": [
-                    "https://www.googleapis.com/auth/cloud-platform"
-                  ],
-                  "flatPath": "v1/projects/{projectId}/regions/{region}/jobs/{jobId}",
-                  "path": "v1/projects/{projectId}/regions/{region}/jobs/{jobId}",
-                  "id": "dataproc.projects.regions.jobs.delete",
-                  "description": "Deletes the job from the project. If the job is active, the delete fails, and the response returns FAILED_PRECONDITION."
-                },
-                "list": {
                   "response": {
                     "$ref": "ListJobsResponse"
                   },
-                  "parameterOrder": [
-                    "projectId",
-                    "region"
-                  ],
-                  "httpMethod": "GET",
                   "parameters": {
                     "projectId": {
                       "location": "path",
@@ -469,19 +152,19 @@
                       "type": "string"
                     },
                     "jobStateMatcher": {
-                      "type": "string",
                       "location": "query",
                       "enum": [
                         "ALL",
                         "ACTIVE",
                         "NON_ACTIVE"
                       ],
-                      "description": "Optional Specifies enumerated categories of jobs to list (default = match ALL jobs)."
+                      "description": "Optional Specifies enumerated categories of jobs to list (default = match ALL jobs).",
+                      "type": "string"
                     },
                     "pageToken": {
-                      "type": "string",
                       "location": "query",
-                      "description": "Optional The page token, returned by a previous call, to request the next page of results."
+                      "description": "Optional The page token, returned by a previous call, to request the next page of results.",
+                      "type": "string"
                     },
                     "pageSize": {
                       "type": "integer",
@@ -496,18 +179,14 @@
                       "type": "string"
                     },
                     "clusterName": {
-                      "type": "string",
                       "location": "query",
-                      "description": "Optional If set, the returned jobs list includes only jobs that were submitted to the named cluster."
+                      "description": "Optional If set, the returned jobs list includes only jobs that were submitted to the named cluster.",
+                      "type": "string"
                     }
                   },
                   "scopes": [
                     "https://www.googleapis.com/auth/cloud-platform"
-                  ],
-                  "flatPath": "v1/projects/{projectId}/regions/{region}/jobs",
-                  "path": "v1/projects/{projectId}/regions/{region}/jobs",
-                  "id": "dataproc.projects.regions.jobs.list",
-                  "description": "Lists regions/{region}/jobs in a project."
+                  ]
                 },
                 "cancel": {
                   "httpMethod": "POST",
@@ -530,16 +209,16 @@
                       "description": "Required The ID of the Google Cloud Platform project that the job belongs to."
                     },
                     "jobId": {
-                      "required": true,
-                      "type": "string",
                       "location": "path",
-                      "description": "Required The job ID."
+                      "description": "Required The job ID.",
+                      "required": true,
+                      "type": "string"
                     },
                     "region": {
-                      "required": true,
-                      "type": "string",
                       "location": "path",
-                      "description": "Required The Cloud Dataproc region in which to handle the request."
+                      "description": "Required The Cloud Dataproc region in which to handle the request.",
+                      "required": true,
+                      "type": "string"
                     }
                   },
                   "flatPath": "v1/projects/{projectId}/regions/{region}/jobs/{jobId}:cancel",
@@ -550,7 +229,48 @@
                     "$ref": "CancelJobRequest"
                   }
                 },
+                "get": {
+                  "response": {
+                    "$ref": "Job"
+                  },
+                  "parameterOrder": [
+                    "projectId",
+                    "region",
+                    "jobId"
+                  ],
+                  "httpMethod": "GET",
+                  "parameters": {
+                    "projectId": {
+                      "required": true,
+                      "type": "string",
+                      "location": "path",
+                      "description": "Required The ID of the Google Cloud Platform project that the job belongs to."
+                    },
+                    "jobId": {
+                      "location": "path",
+                      "description": "Required The job ID.",
+                      "required": true,
+                      "type": "string"
+                    },
+                    "region": {
+                      "location": "path",
+                      "description": "Required The Cloud Dataproc region in which to handle the request.",
+                      "required": true,
+                      "type": "string"
+                    }
+                  },
+                  "scopes": [
+                    "https://www.googleapis.com/auth/cloud-platform"
+                  ],
+                  "flatPath": "v1/projects/{projectId}/regions/{region}/jobs/{jobId}",
+                  "path": "v1/projects/{projectId}/regions/{region}/jobs/{jobId}",
+                  "id": "dataproc.projects.regions.jobs.get",
+                  "description": "Gets the resource representation for a job in a project."
+                },
                 "patch": {
+                  "flatPath": "v1/projects/{projectId}/regions/{region}/jobs/{jobId}",
+                  "path": "v1/projects/{projectId}/regions/{region}/jobs/{jobId}",
+                  "id": "dataproc.projects.regions.jobs.patch",
                   "request": {
                     "$ref": "Job"
                   },
@@ -592,33 +312,314 @@
                   },
                   "scopes": [
                     "https://www.googleapis.com/auth/cloud-platform"
-                  ],
-                  "flatPath": "v1/projects/{projectId}/regions/{region}/jobs/{jobId}",
-                  "path": "v1/projects/{projectId}/regions/{region}/jobs/{jobId}",
-                  "id": "dataproc.projects.regions.jobs.patch"
+                  ]
                 },
-                "get": {
+                "submit": {
+                  "flatPath": "v1/projects/{projectId}/regions/{region}/jobs:submit",
+                  "id": "dataproc.projects.regions.jobs.submit",
+                  "path": "v1/projects/{projectId}/regions/{region}/jobs:submit",
+                  "request": {
+                    "$ref": "SubmitJobRequest"
+                  },
+                  "description": "Submits a job to a cluster.",
+                  "httpMethod": "POST",
+                  "parameterOrder": [
+                    "projectId",
+                    "region"
+                  ],
                   "response": {
                     "$ref": "Job"
                   },
+                  "parameters": {
+                    "projectId": {
+                      "required": true,
+                      "type": "string",
+                      "location": "path",
+                      "description": "Required The ID of the Google Cloud Platform project that the job belongs to."
+                    },
+                    "region": {
+                      "location": "path",
+                      "description": "Required The Cloud Dataproc region in which to handle the request.",
+                      "required": true,
+                      "type": "string"
+                    }
+                  },
+                  "scopes": [
+                    "https://www.googleapis.com/auth/cloud-platform"
+                  ]
+                },
+                "delete": {
+                  "httpMethod": "DELETE",
                   "parameterOrder": [
                     "projectId",
                     "region",
                     "jobId"
                   ],
-                  "httpMethod": "GET",
+                  "response": {
+                    "$ref": "Empty"
+                  },
+                  "scopes": [
+                    "https://www.googleapis.com/auth/cloud-platform"
+                  ],
                   "parameters": {
                     "projectId": {
-                      "location": "path",
-                      "description": "Required The ID of the Google Cloud Platform project that the job belongs to.",
-                      "required": true,
-                      "type": "string"
-                    },
-                    "jobId": {
                       "required": true,
                       "type": "string",
                       "location": "path",
-                      "description": "Required The job ID."
+                      "description": "Required The ID of the Google Cloud Platform project that the job belongs to."
+                    },
+                    "jobId": {
+                      "location": "path",
+                      "description": "Required The job ID.",
+                      "required": true,
+                      "type": "string"
+                    },
+                    "region": {
+                      "required": true,
+                      "type": "string",
+                      "location": "path",
+                      "description": "Required The Cloud Dataproc region in which to handle the request."
+                    }
+                  },
+                  "flatPath": "v1/projects/{projectId}/regions/{region}/jobs/{jobId}",
+                  "id": "dataproc.projects.regions.jobs.delete",
+                  "path": "v1/projects/{projectId}/regions/{region}/jobs/{jobId}",
+                  "description": "Deletes the job from the project. If the job is active, the delete fails, and the response returns FAILED_PRECONDITION."
+                }
+              }
+            },
+            "clusters": {
+              "methods": {
+                "list": {
+                  "flatPath": "v1/projects/{projectId}/regions/{region}/clusters",
+                  "id": "dataproc.projects.regions.clusters.list",
+                  "path": "v1/projects/{projectId}/regions/{region}/clusters",
+                  "description": "Lists all regions/{region}/clusters in a project.",
+                  "httpMethod": "GET",
+                  "parameterOrder": [
+                    "projectId",
+                    "region"
+                  ],
+                  "response": {
+                    "$ref": "ListClustersResponse"
+                  },
+                  "parameters": {
+                    "projectId": {
+                      "location": "path",
+                      "description": "Required The ID of the Google Cloud Platform project that the cluster belongs to.",
+                      "required": true,
+                      "type": "string"
+                    },
+                    "region": {
+                      "location": "path",
+                      "description": "Required The Cloud Dataproc region in which to handle the request.",
+                      "required": true,
+                      "type": "string"
+                    },
+                    "filter": {
+                      "location": "query",
+                      "description": "Optional A filter constraining the clusters to list. Filters are case-sensitive and have the following syntax:field = value AND field = value ...where field is one of status.state, clusterName, or labels.[KEY], and [KEY] is a label key. value can be * to match all values. status.state can be one of the following: ACTIVE, INACTIVE, CREATING, RUNNING, ERROR, DELETING, or UPDATING. ACTIVE contains the CREATING, UPDATING, and RUNNING states. INACTIVE contains the DELETING and ERROR states. clusterName is the name of the cluster provided at creation time. Only the logical AND operator is supported; space-separated items are treated as having an implicit AND operator.Example filter:status.state = ACTIVE AND clusterName = mycluster AND labels.env = staging AND labels.starred = *",
+                      "type": "string"
+                    },
+                    "pageToken": {
+                      "location": "query",
+                      "description": "Optional The standard List page token.",
+                      "type": "string"
+                    },
+                    "pageSize": {
+                      "location": "query",
+                      "description": "Optional The standard List page size.",
+                      "format": "int32",
+                      "type": "integer"
+                    }
+                  },
+                  "scopes": [
+                    "https://www.googleapis.com/auth/cloud-platform"
+                  ]
+                },
+                "create": {
+                  "flatPath": "v1/projects/{projectId}/regions/{region}/clusters",
+                  "id": "dataproc.projects.regions.clusters.create",
+                  "path": "v1/projects/{projectId}/regions/{region}/clusters",
+                  "request": {
+                    "$ref": "Cluster"
+                  },
+                  "description": "Creates a cluster in a project.",
+                  "httpMethod": "POST",
+                  "parameterOrder": [
+                    "projectId",
+                    "region"
+                  ],
+                  "response": {
+                    "$ref": "Operation"
+                  },
+                  "parameters": {
+                    "projectId": {
+                      "required": true,
+                      "type": "string",
+                      "location": "path",
+                      "description": "Required The ID of the Google Cloud Platform project that the cluster belongs to."
+                    },
+                    "region": {
+                      "location": "path",
+                      "description": "Required The Cloud Dataproc region in which to handle the request.",
+                      "required": true,
+                      "type": "string"
+                    }
+                  },
+                  "scopes": [
+                    "https://www.googleapis.com/auth/cloud-platform"
+                  ]
+                },
+                "get": {
+                  "flatPath": "v1/projects/{projectId}/regions/{region}/clusters/{clusterName}",
+                  "path": "v1/projects/{projectId}/regions/{region}/clusters/{clusterName}",
+                  "id": "dataproc.projects.regions.clusters.get",
+                  "description": "Gets the resource representation for a cluster in a project.",
+                  "response": {
+                    "$ref": "Cluster"
+                  },
+                  "parameterOrder": [
+                    "projectId",
+                    "region",
+                    "clusterName"
+                  ],
+                  "httpMethod": "GET",
+                  "scopes": [
+                    "https://www.googleapis.com/auth/cloud-platform"
+                  ],
+                  "parameters": {
+                    "clusterName": {
+                      "required": true,
+                      "type": "string",
+                      "location": "path",
+                      "description": "Required The cluster name."
+                    },
+                    "projectId": {
+                      "required": true,
+                      "type": "string",
+                      "location": "path",
+                      "description": "Required The ID of the Google Cloud Platform project that the cluster belongs to."
+                    },
+                    "region": {
+                      "location": "path",
+                      "description": "Required The Cloud Dataproc region in which to handle the request.",
+                      "required": true,
+                      "type": "string"
+                    }
+                  }
+                },
+                "patch": {
+                  "httpMethod": "PATCH",
+                  "parameterOrder": [
+                    "projectId",
+                    "region",
+                    "clusterName"
+                  ],
+                  "response": {
+                    "$ref": "Operation"
+                  },
+                  "parameters": {
+                    "projectId": {
+                      "location": "path",
+                      "description": "Required The ID of the Google Cloud Platform project the cluster belongs to.",
+                      "required": true,
+                      "type": "string"
+                    },
+                    "region": {
+                      "required": true,
+                      "type": "string",
+                      "location": "path",
+                      "description": "Required The Cloud Dataproc region in which to handle the request."
+                    },
+                    "updateMask": {
+                      "location": "query",
+                      "description": "Required Specifies the path, relative to \u003ccode\u003eCluster\u003c/code\u003e, of the field to update. For example, to change the number of workers in a cluster to 5, the \u003ccode\u003eupdate_mask\u003c/code\u003e parameter would be specified as \u003ccode\u003econfig.worker_config.num_instances\u003c/code\u003e, and the PATCH request body would specify the new value, as follows:\n{\n  \"config\":{\n    \"workerConfig\":{\n      \"numInstances\":\"5\"\n    }\n  }\n}\nSimilarly, to change the number of preemptible workers in a cluster to 5, the \u003ccode\u003eupdate_mask\u003c/code\u003e parameter would be \u003ccode\u003econfig.secondary_worker_config.num_instances\u003c/code\u003e, and the PATCH request body would be set as follows:\n{\n  \"config\":{\n    \"secondaryWorkerConfig\":{\n      \"numInstances\":\"5\"\n    }\n  }\n}\n\u003cstrong\u003eNote:\u003c/strong\u003e Currently, \u003ccode\u003econfig.worker_config.num_instances\u003c/code\u003e and \u003ccode\u003econfig.secondary_worker_config.num_instances\u003c/code\u003e are the only fields that can be updated.",
+                      "format": "google-fieldmask",
+                      "type": "string"
+                    },
+                    "clusterName": {
+                      "location": "path",
+                      "description": "Required The cluster name.",
+                      "required": true,
+                      "type": "string"
+                    }
+                  },
+                  "scopes": [
+                    "https://www.googleapis.com/auth/cloud-platform"
+                  ],
+                  "flatPath": "v1/projects/{projectId}/regions/{region}/clusters/{clusterName}",
+                  "id": "dataproc.projects.regions.clusters.patch",
+                  "path": "v1/projects/{projectId}/regions/{region}/clusters/{clusterName}",
+                  "request": {
+                    "$ref": "Cluster"
+                  },
+                  "description": "Updates a cluster in a project."
+                },
+                "delete": {
+                  "httpMethod": "DELETE",
+                  "parameterOrder": [
+                    "projectId",
+                    "region",
+                    "clusterName"
+                  ],
+                  "response": {
+                    "$ref": "Operation"
+                  },
+                  "parameters": {
+                    "clusterName": {
+                      "required": true,
+                      "type": "string",
+                      "location": "path",
+                      "description": "Required The cluster name."
+                    },
+                    "projectId": {
+                      "location": "path",
+                      "description": "Required The ID of the Google Cloud Platform project that the cluster belongs to.",
+                      "required": true,
+                      "type": "string"
+                    },
+                    "region": {
+                      "location": "path",
+                      "description": "Required The Cloud Dataproc region in which to handle the request.",
+                      "required": true,
+                      "type": "string"
+                    }
+                  },
+                  "scopes": [
+                    "https://www.googleapis.com/auth/cloud-platform"
+                  ],
+                  "flatPath": "v1/projects/{projectId}/regions/{region}/clusters/{clusterName}",
+                  "id": "dataproc.projects.regions.clusters.delete",
+                  "path": "v1/projects/{projectId}/regions/{region}/clusters/{clusterName}",
+                  "description": "Deletes a cluster in a project."
+                },
+                "diagnose": {
+                  "request": {
+                    "$ref": "DiagnoseClusterRequest"
+                  },
+                  "description": "Gets cluster diagnostic information. After the operation completes, the Operation.response field contains DiagnoseClusterOutputLocation.",
+                  "response": {
+                    "$ref": "Operation"
+                  },
+                  "parameterOrder": [
+                    "projectId",
+                    "region",
+                    "clusterName"
+                  ],
+                  "httpMethod": "POST",
+                  "parameters": {
+                    "clusterName": {
+                      "location": "path",
+                      "description": "Required The cluster name.",
+                      "required": true,
+                      "type": "string"
+                    },
+                    "projectId": {
+                      "location": "path",
+                      "description": "Required The ID of the Google Cloud Platform project that the cluster belongs to.",
+                      "required": true,
+                      "type": "string"
                     },
                     "region": {
                       "required": true,
@@ -630,10 +631,9 @@
                   "scopes": [
                     "https://www.googleapis.com/auth/cloud-platform"
                   ],
-                  "flatPath": "v1/projects/{projectId}/regions/{region}/jobs/{jobId}",
-                  "path": "v1/projects/{projectId}/regions/{region}/jobs/{jobId}",
-                  "id": "dataproc.projects.regions.jobs.get",
-                  "description": "Gets the resource representation for a job in a project."
+                  "flatPath": "v1/projects/{projectId}/regions/{region}/clusters/{clusterName}:diagnose",
+                  "path": "v1/projects/{projectId}/regions/{region}/clusters/{clusterName}:diagnose",
+                  "id": "dataproc.projects.regions.clusters.diagnose"
                 }
               }
             }
@@ -643,10 +643,26 @@
     }
   },
   "parameters": {
-    "access_token": {
+    "alt": {
       "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",
-      "description": "OAuth access token."
+      "description": "Data format for response.",
+      "default": "json",
+      "enum": [
+        "json",
+        "media",
+        "proto"
+      ]
+    },
+    "access_token": {
+      "location": "query",
+      "description": "OAuth access token.",
+      "type": "string"
     },
     "key": {
       "location": "query",
@@ -665,9 +681,9 @@
       "description": "Pretty-print response."
     },
     "oauth_token": {
-      "type": "string",
       "location": "query",
-      "description": "OAuth 2.0 token for the current user."
+      "description": "OAuth 2.0 token for the current user.",
+      "type": "string"
     },
     "bearer_token": {
       "type": "string",
@@ -686,9 +702,9 @@
       "description": "Returns response with indentations and line breaks."
     },
     "fields": {
+      "type": "string",
       "location": "query",
-      "description": "Selector specifying which fields to include in a partial response.",
-      "type": "string"
+      "description": "Selector specifying which fields to include in a partial response."
     },
     "uploadType": {
       "location": "query",
@@ -712,35 +728,18 @@
       "type": "string",
       "location": "query",
       "description": "JSONP"
-    },
-    "alt": {
-      "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",
-      "description": "Data format for response.",
-      "default": "json",
-      "enum": [
-        "json",
-        "media",
-        "proto"
-      ]
     }
   },
   "schemas": {
     "PySparkJob": {
-      "description": "A Cloud Dataproc job for running Apache PySpark (https://spark.apache.org/docs/0.9.0/python-programming-guide.html) applications on YARN.",
       "type": "object",
       "properties": {
         "jarFileUris": {
-          "description": "Optional HCFS URIs of jar files to add to the CLASSPATHs of the Python driver and tasks.",
           "type": "array",
           "items": {
             "type": "string"
-          }
+          },
+          "description": "Optional HCFS URIs of jar files to add to the CLASSPATHs of the Python driver and tasks."
         },
         "loggingConfig": {
           "$ref": "LoggingConfig",
@@ -779,26 +778,30 @@
           "description": "Required The HCFS URI of the main Python file to use as the driver. Must be a .py file."
         },
         "archiveUris": {
-          "description": "Optional HCFS URIs of archives to be extracted in the working directory of .jar, .tar, .tar.gz, .tgz, and .zip.",
           "type": "array",
           "items": {
             "type": "string"
-          }
+          },
+          "description": "Optional HCFS URIs of archives to be extracted in the working directory of .jar, .tar, .tar.gz, .tgz, and .zip."
         }
       },
-      "id": "PySparkJob"
+      "id": "PySparkJob",
+      "description": "A Cloud Dataproc job for running Apache PySpark (https://spark.apache.org/docs/0.9.0/python-programming-guide.html) applications on YARN."
     },
     "GceClusterConfig": {
-      "description": "Common config settings for resources of Google Compute Engine cluster instances, applicable to all instances in the cluster.",
       "type": "object",
       "properties": {
+        "subnetworkUri": {
+          "type": "string",
+          "description": "Optional The Google Compute Engine subnetwork to be used for machine communications. Cannot be specified with network_uri. Example: https://www.googleapis.com/compute/v1/projects/[project_id]/regions/us-east1/sub0."
+        },
         "networkUri": {
-          "description": "Optional The Google Compute Engine network to be used for machine communications. Cannot be specified with subnetwork_uri. If neither network_uri nor subnetwork_uri is specified, the \"default\" network of the project is used, if it exists. Cannot be a \"Custom Subnet Network\" (see Using Subnetworks for more information). Example: https://www.googleapis.com/compute/v1/projects/[project_id]/regions/global/default.",
-          "type": "string"
+          "type": "string",
+          "description": "Optional The Google Compute Engine network to be used for machine communications. Cannot be specified with subnetwork_uri. If neither network_uri nor subnetwork_uri is specified, the \"default\" network of the project is used, if it exists. Cannot be a \"Custom Subnet Network\" (see Using Subnetworks for more information). Example: https://www.googleapis.com/compute/v1/projects/[project_id]/regions/global/default."
         },
         "zoneUri": {
-          "description": "Required The zone where the Google Compute Engine cluster will be located. Example: https://www.googleapis.com/compute/v1/projects/[project_id]/zones/[zone].",
-          "type": "string"
+          "type": "string",
+          "description": "Required The zone where the Google Compute Engine cluster will be located. Example: https://www.googleapis.com/compute/v1/projects/[project_id]/zones/[zone]."
         },
         "metadata": {
           "type": "object",
@@ -828,59 +831,58 @@
         "serviceAccount": {
           "description": "Optional The service account of the instances. Defaults to the default Google Compute Engine service account. Custom service accounts need permissions equivalent to the folloing IAM roles:\nroles/logging.logWriter\nroles/storage.objectAdmin(see https://cloud.google.com/compute/docs/access/service-accounts#custom_service_accounts for more information). Example: [account_id]@[project_id].iam.gserviceaccount.com",
           "type": "string"
-        },
-        "subnetworkUri": {
-          "description": "Optional The Google Compute Engine subnetwork to be used for machine communications. Cannot be specified with network_uri. Example: https://www.googleapis.com/compute/v1/projects/[project_id]/regions/us-east1/sub0.",
-          "type": "string"
         }
       },
-      "id": "GceClusterConfig"
-    },
-    "ClusterMetrics": {
-      "description": "Contains cluster daemon metrics, such as HDFS and YARN stats.Beta Feature: This report is available for testing purposes only. It may be changed before final release.",
-      "type": "object",
-      "properties": {
-        "yarnMetrics": {
-          "additionalProperties": {
-            "type": "string",
-            "format": "int64"
-          },
-          "description": "The YARN metrics.",
-          "type": "object"
-        },
-        "hdfsMetrics": {
-          "type": "object",
-          "additionalProperties": {
-            "type": "string",
-            "format": "int64"
-          },
-          "description": "The HDFS metrics."
-        }
-      },
-      "id": "ClusterMetrics"
+      "id": "GceClusterConfig",
+      "description": "Common config settings for resources of Google Compute Engine cluster instances, applicable to all instances in the cluster."
     },
     "AcceleratorConfig": {
       "type": "object",
       "properties": {
-        "acceleratorCount": {
-          "type": "integer",
-          "description": "The number of the accelerator cards of this type exposed to this instance.",
-          "format": "int32"
-        },
         "acceleratorTypeUri": {
-          "type": "string",
-          "description": "Full or partial URI of the accelerator type resource to expose to this instance. See Google Compute Engine AcceleratorTypes( /compute/docs/reference/beta/acceleratorTypes)"
+          "description": "Full or partial URI of the accelerator type resource to expose to this instance. See Google Compute Engine AcceleratorTypes( /compute/docs/reference/beta/acceleratorTypes)",
+          "type": "string"
+        },
+        "acceleratorCount": {
+          "description": "The number of the accelerator cards of this type exposed to this instance.",
+          "format": "int32",
+          "type": "integer"
         }
       },
       "id": "AcceleratorConfig",
       "description": "Specifies the type and number of accelerator cards attached to the instances of an instance group (see GPUs on Compute Engine)."
     },
+    "ClusterMetrics": {
+      "description": "Contains cluster daemon metrics, such as HDFS and YARN stats.Beta Feature: This report is available for testing purposes only. It may be changed before final release.",
+      "type": "object",
+      "properties": {
+        "hdfsMetrics": {
+          "additionalProperties": {
+            "type": "string",
+            "format": "int64"
+          },
+          "description": "The HDFS metrics.",
+          "type": "object"
+        },
+        "yarnMetrics": {
+          "type": "object",
+          "additionalProperties": {
+            "type": "string",
+            "format": "int64"
+          },
+          "description": "The YARN metrics."
+        }
+      },
+      "id": "ClusterMetrics"
+    },
     "LoggingConfig": {
+      "description": "The runtime logging config of the job.",
       "type": "object",
       "properties": {
         "driverLogLevels": {
           "type": "object",
           "additionalProperties": {
+            "type": "string",
             "enum": [
               "LEVEL_UNSPECIFIED",
               "ALL",
@@ -891,27 +893,26 @@
               "ERROR",
               "FATAL",
               "OFF"
-            ],
-            "type": "string"
+            ]
           },
           "description": "The per-package log levels for the driver. This may include \"root\" package name to configure rootLogger. Examples:  'com.google = FATAL', 'root = INFO', 'org.apache = DEBUG'"
         }
       },
-      "id": "LoggingConfig",
-      "description": "The runtime logging config of the job."
+      "id": "LoggingConfig"
     },
     "DiagnoseClusterOutputLocation": {
       "description": "The location where output from diagnostic command can be found.",
       "type": "object",
       "properties": {
         "outputUri": {
-          "type": "string",
-          "description": "Output-only The Google Cloud Storage URI of the diagnostic output. This will be a plain text file with summary of collected diagnostics."
+          "description": "Output-only The Google Cloud Storage URI of the diagnostic output. This will be a plain text file with summary of collected diagnostics.",
+          "type": "string"
         }
       },
       "id": "DiagnoseClusterOutputLocation"
     },
     "Operation": {
+      "description": "This resource represents a long-running operation that is the result of a network API call.",
       "type": "object",
       "properties": {
         "metadata": {
@@ -927,51 +928,50 @@
           "type": "boolean"
         },
         "response": {
-          "type": "object",
           "additionalProperties": {
-            "type": "any",
-            "description": "Properties of the object. Contains field @type with type URL."
+            "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."
+          "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"
         },
         "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 have the format of operations/some/unique/name.",
-          "type": "string"
+          "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 have the format of operations/some/unique/name."
         },
         "error": {
           "$ref": "Status",
           "description": "The error result of the operation in case of failure or cancellation."
         }
       },
-      "id": "Operation",
-      "description": "This resource represents a long-running operation that is the result of a network API call."
+      "id": "Operation"
     },
     "OperationStatus": {
       "type": "object",
       "properties": {
         "state": {
-          "enum": [
-            "UNKNOWN",
-            "PENDING",
-            "RUNNING",
-            "DONE"
-          ],
-          "description": "A message containing the operation state.",
           "type": "string",
           "enumDescriptions": [
             "Unused.",
             "The operation has been created.",
             "The operation is running.",
             "The operation is done; either cancelled or completed."
-          ]
+          ],
+          "enum": [
+            "UNKNOWN",
+            "PENDING",
+            "RUNNING",
+            "DONE"
+          ],
+          "description": "A message containing the operation state."
         },
         "details": {
-          "description": "A message containing any operation metadata details.",
-          "type": "string"
+          "type": "string",
+          "description": "A message containing any operation metadata details."
         },
         "innerState": {
-          "description": "A message containing the detailed operation state.",
-          "type": "string"
+          "type": "string",
+          "description": "A message containing the detailed operation state."
         },
         "stateStartTime": {
           "type": "string",
@@ -983,19 +983,19 @@
       "description": "The status of the operation."
     },
     "JobReference": {
-      "description": "Encapsulates the full scoping used to reference a job.",
       "type": "object",
       "properties": {
         "projectId": {
-          "description": "Required The ID of the Google Cloud Platform project that the job belongs to.",
-          "type": "string"
+          "type": "string",
+          "description": "Required The ID of the Google Cloud Platform project that the job belongs to."
         },
         "jobId": {
-          "type": "string",
-          "description": "Optional The job ID, which must be unique within the project. The job ID is generated by the server upon job submission or provided by the user as a means to perform retries without creating duplicate jobs. The ID must contain only letters (a-z, A-Z), numbers (0-9), underscores (_), or hyphens (-). The maximum length is 100 characters."
+          "description": "Optional The job ID, which must be unique within the project. The job ID is generated by the server upon job submission or provided by the user as a means to perform retries without creating duplicate jobs. The ID must contain only letters (a-z, A-Z), numbers (0-9), underscores (_), or hyphens (-). The maximum length is 100 characters.",
+          "type": "string"
         }
       },
-      "id": "JobReference"
+      "id": "JobReference",
+      "description": "Encapsulates the full scoping used to reference a job."
     },
     "SubmitJobRequest": {
       "type": "object",
@@ -1018,8 +1018,8 @@
           "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": "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": {
           "description": "A list of messages that carry the error details. There will be a common set of message types for APIs to use.",
@@ -1027,8 +1027,8 @@
           "items": {
             "type": "object",
             "additionalProperties": {
-              "type": "any",
-              "description": "Properties of the object. Contains field @type with type URL."
+              "description": "Properties of the object. Contains field @type with type URL.",
+              "type": "any"
             }
           }
         }
@@ -1048,9 +1048,24 @@
       "description": "Job scheduling options.Beta Feature: These options are available for testing purposes only. They may be changed before final release."
     },
     "InstanceGroupConfig": {
-      "description": "Optional The config settings for Google Compute Engine resources in an instance group, such as a master or worker group.",
       "type": "object",
       "properties": {
+        "accelerators": {
+          "type": "array",
+          "items": {
+            "$ref": "AcceleratorConfig"
+          },
+          "description": "Optional The Google Compute Engine accelerator configuration for these instances.Beta Feature: This feature is still under development. It may be changed before final release."
+        },
+        "numInstances": {
+          "type": "integer",
+          "description": "Required The number of VM instances in the instance group. For master instance groups, must be set to 1.",
+          "format": "int32"
+        },
+        "diskConfig": {
+          "$ref": "DiskConfig",
+          "description": "Optional Disk option config settings."
+        },
         "isPreemptible": {
           "type": "boolean",
           "description": "Optional Specifies that this instance group contains preemptible instances."
@@ -1064,52 +1079,37 @@
           "type": "string"
         },
         "imageUri": {
-          "description": "Output-only The Google Compute Engine image resource used for cluster instances. Inferred from SoftwareConfig.image_version.",
-          "type": "string"
+          "type": "string",
+          "description": "Output-only The Google Compute Engine image resource used for cluster instances. Inferred from SoftwareConfig.image_version."
         },
         "instanceNames": {
-          "description": "Optional The list of instance names. Cloud Dataproc derives the names from cluster_name, num_instances, and the instance group if not set by user (recommended practice is to let Cloud Dataproc derive the name).",
           "type": "array",
           "items": {
             "type": "string"
-          }
-        },
-        "accelerators": {
-          "description": "Optional The Google Compute Engine accelerator configuration for these instances.Beta Feature: This feature is still under development. It may be changed before final release.",
-          "type": "array",
-          "items": {
-            "$ref": "AcceleratorConfig"
-          }
-        },
-        "numInstances": {
-          "type": "integer",
-          "description": "Required The number of VM instances in the instance group. For master instance groups, must be set to 1.",
-          "format": "int32"
-        },
-        "diskConfig": {
-          "$ref": "DiskConfig",
-          "description": "Optional Disk option config settings."
+          },
+          "description": "Optional The list of instance names. Cloud Dataproc derives the names from cluster_name, num_instances, and the instance group if not set by user (recommended practice is to let Cloud Dataproc derive the name)."
         }
       },
-      "id": "InstanceGroupConfig"
+      "id": "InstanceGroupConfig",
+      "description": "Optional The config settings for Google Compute Engine resources in an instance group, such as a master or worker group."
     },
     "ListJobsResponse": {
-      "description": "A list of jobs in a project.",
       "type": "object",
       "properties": {
         "nextPageToken": {
-          "type": "string",
-          "description": "Optional This token is included in the response if there are more results to fetch. To fetch additional results, provide this value as the page_token in a subsequent \u003ccode\u003eListJobsRequest\u003c/code\u003e."
+          "description": "Optional This token is included in the response if there are more results to fetch. To fetch additional results, provide this value as the page_token in a subsequent \u003ccode\u003eListJobsRequest\u003c/code\u003e.",
+          "type": "string"
         },
         "jobs": {
-          "description": "Output-only Jobs list.",
           "type": "array",
           "items": {
             "$ref": "Job"
-          }
+          },
+          "description": "Output-only Jobs list."
         }
       },
-      "id": "ListJobsResponse"
+      "id": "ListJobsResponse",
+      "description": "A list of jobs in a project."
     },
     "NodeInitializationAction": {
       "description": "Specifies an executable to run on a fully configured node and a timeout period for executable completion.",
@@ -1137,20 +1137,6 @@
       "description": "A Cloud Dataproc job for running Apache Spark SQL (http://spark.apache.org/sql/) queries.",
       "type": "object",
       "properties": {
-        "scriptVariables": {
-          "type": "object",
-          "additionalProperties": {
-            "type": "string"
-          },
-          "description": "Optional Mapping of query variable names to values (equivalent to the Spark SQL command: SET name=\"value\";)."
-        },
-        "jarFileUris": {
-          "description": "Optional HCFS URIs of jar files to be added to the Spark CLASSPATH.",
-          "type": "array",
-          "items": {
-            "type": "string"
-          }
-        },
         "loggingConfig": {
           "$ref": "LoggingConfig",
           "description": "Optional The runtime log config for job execution."
@@ -1162,13 +1148,27 @@
           },
           "description": "Optional A mapping of property names to values, used to configure Spark SQL's SparkConf. Properties that conflict with values set by the Cloud Dataproc API may be overwritten."
         },
+        "queryFileUri": {
+          "description": "The HCFS URI of the script that contains SQL queries.",
+          "type": "string"
+        },
         "queryList": {
           "$ref": "QueryList",
           "description": "A list of queries."
         },
-        "queryFileUri": {
-          "type": "string",
-          "description": "The HCFS URI of the script that contains SQL queries."
+        "scriptVariables": {
+          "additionalProperties": {
+            "type": "string"
+          },
+          "description": "Optional Mapping of query variable names to values (equivalent to the Spark SQL command: SET name=\"value\";).",
+          "type": "object"
+        },
+        "jarFileUris": {
+          "description": "Optional HCFS URIs of jar files to be added to the Spark CLASSPATH.",
+          "type": "array",
+          "items": {
+            "type": "string"
+          }
         }
       },
       "id": "SparkSqlJob"
@@ -1176,6 +1176,13 @@
     "Cluster": {
       "type": "object",
       "properties": {
+        "labels": {
+          "additionalProperties": {
+            "type": "string"
+          },
+          "description": "Optional The labels to associate with this cluster. Label keys must contain 1 to 63 characters, and must conform to RFC 1035 (https://www.ietf.org/rfc/rfc1035.txt). Label values may be empty, but, if present, must contain 1 to 63 characters, and must conform to RFC 1035 (https://www.ietf.org/rfc/rfc1035.txt). No more than 32 labels can be associated with a cluster.",
+          "type": "object"
+        },
         "metrics": {
           "$ref": "ClusterMetrics",
           "description": "Contains cluster daemon metrics such as HDFS and YARN stats.Beta Feature: This report is available for testing purposes only. It may be changed before final release."
@@ -1184,6 +1191,10 @@
           "$ref": "ClusterStatus",
           "description": "Output-only Cluster status."
         },
+        "config": {
+          "$ref": "ClusterConfig",
+          "description": "Required The cluster config. Note that Cloud Dataproc may set default values, and values may change when clusters are updated."
+        },
         "statusHistory": {
           "description": "Output-only The previous cluster status.",
           "type": "array",
@@ -1191,57 +1202,66 @@
             "$ref": "ClusterStatus"
           }
         },
-        "config": {
-          "$ref": "ClusterConfig",
-          "description": "Required The cluster config. Note that Cloud Dataproc may set default values, and values may change when clusters are updated."
-        },
         "clusterName": {
-          "type": "string",
-          "description": "Required The cluster name. Cluster names within a project must be unique. Names of deleted clusters can be reused."
+          "description": "Required The cluster name. Cluster names within a project must be unique. Names of deleted clusters can be reused.",
+          "type": "string"
         },
         "clusterUuid": {
-          "description": "Output-only A cluster UUID (Unique Universal Identifier). Cloud Dataproc generates this value when it creates the cluster.",
-          "type": "string"
+          "type": "string",
+          "description": "Output-only A cluster UUID (Unique Universal Identifier). Cloud Dataproc generates this value when it creates the cluster."
         },
         "projectId": {
           "type": "string",
           "description": "Required The Google Cloud Platform project ID that the cluster belongs to."
-        },
-        "labels": {
-          "additionalProperties": {
-            "type": "string"
-          },
-          "description": "Optional The labels to associate with this cluster. Label keys must contain 1 to 63 characters, and must conform to RFC 1035 (https://www.ietf.org/rfc/rfc1035.txt). Label values may be empty, but, if present, must contain 1 to 63 characters, and must conform to RFC 1035 (https://www.ietf.org/rfc/rfc1035.txt). No more than 32 labels can be associated with a cluster.",
-          "type": "object"
         }
       },
       "id": "Cluster",
       "description": "Describes the identifying information, config, and status of a cluster of Google Compute Engine instances."
     },
     "ListOperationsResponse": {
-      "description": "The response message for Operations.ListOperations.",
       "type": "object",
       "properties": {
+        "nextPageToken": {
+          "type": "string",
+          "description": "The standard List next-page token."
+        },
         "operations": {
           "description": "A list of operations that matches the specified filter in the request.",
           "type": "array",
           "items": {
             "$ref": "Operation"
           }
-        },
-        "nextPageToken": {
-          "description": "The standard List next-page token.",
-          "type": "string"
         }
       },
-      "id": "ListOperationsResponse"
+      "id": "ListOperationsResponse",
+      "description": "The response message for Operations.ListOperations."
     },
     "OperationMetadata": {
+      "description": "Metadata describing the operation.",
       "type": "object",
       "properties": {
+        "warnings": {
+          "type": "array",
+          "items": {
+            "type": "string"
+          },
+          "description": "Output-only Errors encountered during operation execution."
+        },
+        "insertTime": {
+          "description": "The time that the operation was requested.",
+          "format": "google-datetime",
+          "type": "string"
+        },
+        "statusHistory": {
+          "type": "array",
+          "items": {
+            "$ref": "OperationStatus"
+          },
+          "description": "Output-only Previous operation status."
+        },
         "operationType": {
-          "type": "string",
-          "description": "Output-only The operation type."
+          "description": "Output-only The operation type.",
+          "type": "string"
         },
         "description": {
           "description": "Output-only Short description of operation.",
@@ -1251,25 +1271,25 @@
           "$ref": "OperationStatus",
           "description": "Output-only Current operation status."
         },
+        "details": {
+          "type": "string",
+          "description": "A message containing any operation metadata details."
+        },
         "state": {
-          "enum": [
-            "UNKNOWN",
-            "PENDING",
-            "RUNNING",
-            "DONE"
-          ],
-          "description": "A message containing the operation state.",
           "type": "string",
           "enumDescriptions": [
             "Unused.",
             "The operation has been created.",
             "The operation is currently running.",
             "The operation is done, either cancelled or completed."
-          ]
-        },
-        "details": {
-          "type": "string",
-          "description": "A message containing any operation metadata details."
+          ],
+          "enum": [
+            "UNKNOWN",
+            "PENDING",
+            "RUNNING",
+            "DONE"
+          ],
+          "description": "A message containing the operation state."
         },
         "clusterUuid": {
           "description": "Cluster UUId for the operation.",
@@ -1280,8 +1300,8 @@
           "type": "string"
         },
         "innerState": {
-          "description": "A message containing the detailed operation state.",
-          "type": "string"
+          "type": "string",
+          "description": "A message containing the detailed operation state."
         },
         "endTime": {
           "type": "string",
@@ -1292,47 +1312,11 @@
           "description": "The time that the operation was started by the server.",
           "format": "google-datetime",
           "type": "string"
-        },
-        "warnings": {
-          "description": "Output-only Errors encountered during operation execution.",
-          "type": "array",
-          "items": {
-            "type": "string"
-          }
-        },
-        "insertTime": {
-          "description": "The time that the operation was requested.",
-          "format": "google-datetime",
-          "type": "string"
-        },
-        "statusHistory": {
-          "description": "Output-only Previous operation status.",
-          "type": "array",
-          "items": {
-            "$ref": "OperationStatus"
-          }
         }
       },
-      "id": "OperationMetadata",
-      "description": "Metadata describing the operation."
-    },
-    "JobPlacement": {
-      "type": "object",
-      "properties": {
-        "clusterName": {
-          "description": "Required The name of the cluster where the job will be submitted.",
-          "type": "string"
-        },
-        "clusterUuid": {
-          "description": "Output-only A cluster UUID generated by the Cloud Dataproc service when the job is submitted.",
-          "type": "string"
-        }
-      },
-      "id": "JobPlacement",
-      "description": "Cloud Dataproc job config."
+      "id": "OperationMetadata"
     },
     "SoftwareConfig": {
-      "description": "Specifies the selection and config of software inside the cluster.",
       "type": "object",
       "properties": {
         "imageVersion": {
@@ -1347,24 +1331,90 @@
           "description": "Optional The properties to set on daemon config files.Property keys are specified in prefix:property format, such as core:fs.defaultFS. The following are supported prefixes and their mappings:\ncore: core-site.xml\nhdfs: hdfs-site.xml\nmapred: mapred-site.xml\nyarn: yarn-site.xml\nhive: hive-site.xml\npig: pig.properties\nspark: spark-defaults.conf"
         }
       },
-      "id": "SoftwareConfig"
+      "id": "SoftwareConfig",
+      "description": "Specifies the selection and config of software inside the cluster."
+    },
+    "JobPlacement": {
+      "description": "Cloud Dataproc job config.",
+      "type": "object",
+      "properties": {
+        "clusterName": {
+          "description": "Required The name of the cluster where the job will be submitted.",
+          "type": "string"
+        },
+        "clusterUuid": {
+          "type": "string",
+          "description": "Output-only A cluster UUID generated by the Cloud Dataproc service when the job is submitted."
+        }
+      },
+      "id": "JobPlacement"
+    },
+    "ClusterStatus": {
+      "type": "object",
+      "properties": {
+        "stateStartTime": {
+          "description": "Output-only Time when this state was entered.",
+          "format": "google-datetime",
+          "type": "string"
+        },
+        "substate": {
+          "enum": [
+            "UNSPECIFIED",
+            "UNHEALTHY",
+            "STALE_STATUS"
+          ],
+          "description": "Output-only Additional state information that includes status reported by the agent.",
+          "type": "string",
+          "enumDescriptions": [
+            "",
+            "The cluster is known to be in an unhealthy state (for example, critical daemons are not running or HDFS capacity is exhausted).Applies to RUNNING state.",
+            "The agent-reported status is out of date (may occur if Cloud Dataproc loses communication with Agent).Applies to RUNNING state."
+          ]
+        },
+        "detail": {
+          "description": "Output-only Optional details of cluster's state.",
+          "type": "string"
+        },
+        "state": {
+          "type": "string",
+          "enumDescriptions": [
+            "The cluster state is unknown.",
+            "The cluster is being created and set up. It is not ready for use.",
+            "The cluster is currently running and healthy. It is ready for use.",
+            "The cluster encountered an error. It is not ready for use.",
+            "The cluster is being deleted. It cannot be used.",
+            "The cluster is being updated. It continues to accept and process jobs."
+          ],
+          "enum": [
+            "UNKNOWN",
+            "CREATING",
+            "RUNNING",
+            "ERROR",
+            "DELETING",
+            "UPDATING"
+          ],
+          "description": "Output-only The cluster's state."
+        }
+      },
+      "id": "ClusterStatus",
+      "description": "The status of a cluster and its instances."
     },
     "PigJob": {
       "description": "A Cloud Dataproc job for running Apache Pig (https://pig.apache.org/) queries on YARN.",
       "type": "object",
       "properties": {
         "continueOnFailure": {
-          "type": "boolean",
-          "description": "Optional Whether to continue executing queries if a query fails. The default value is false. Setting to true can be useful when executing independent parallel queries."
+          "description": "Optional Whether to continue executing queries if a query fails. The default value is false. Setting to true can be useful when executing independent parallel queries.",
+          "type": "boolean"
+        },
+        "queryFileUri": {
+          "description": "The HCFS URI of the script that contains the Pig queries.",
+          "type": "string"
         },
         "queryList": {
           "$ref": "QueryList",
           "description": "A list of queries."
         },
-        "queryFileUri": {
-          "type": "string",
-          "description": "The HCFS URI of the script that contains the Pig queries."
-        },
         "jarFileUris": {
           "description": "Optional HCFS URIs of jar files to add to the CLASSPATH of the Pig Client and Hadoop MapReduce (MR) tasks. Can contain Pig UDFs.",
           "type": "array",
@@ -1384,61 +1434,25 @@
           "description": "Optional The runtime log config for job execution."
         },
         "properties": {
-          "type": "object",
           "additionalProperties": {
             "type": "string"
           },
-          "description": "Optional A mapping of property names to values, used to configure Pig. Properties that conflict with values set by the Cloud Dataproc API may be overwritten. Can include properties set in /etc/hadoop/conf/*-site.xml, /etc/pig/conf/pig.properties, and classes in user code."
+          "description": "Optional A mapping of property names to values, used to configure Pig. Properties that conflict with values set by the Cloud Dataproc API may be overwritten. Can include properties set in /etc/hadoop/conf/*-site.xml, /etc/pig/conf/pig.properties, and classes in user code.",
+          "type": "object"
         }
       },
       "id": "PigJob"
     },
-    "ClusterStatus": {
-      "type": "object",
-      "properties": {
-        "stateStartTime": {
-          "type": "string",
-          "description": "Output-only Time when this state was entered.",
-          "format": "google-datetime"
-        },
-        "detail": {
-          "type": "string",
-          "description": "Output-only Optional details of cluster's state."
-        },
-        "state": {
-          "enum": [
-            "UNKNOWN",
-            "CREATING",
-            "RUNNING",
-            "ERROR",
-            "DELETING",
-            "UPDATING"
-          ],
-          "description": "Output-only The cluster's state.",
-          "type": "string",
-          "enumDescriptions": [
-            "The cluster state is unknown.",
-            "The cluster is being created and set up. It is not ready for use.",
-            "The cluster is currently running and healthy. It is ready for use.",
-            "The cluster encountered an error. It is not ready for use.",
-            "The cluster is being deleted. It cannot be used.",
-            "The cluster is being updated. It continues to accept and process jobs."
-          ]
-        }
-      },
-      "id": "ClusterStatus",
-      "description": "The status of a cluster and its instances."
-    },
     "ListClustersResponse": {
       "description": "The list of all clusters in a project.",
       "type": "object",
       "properties": {
         "clusters": {
-          "description": "Output-only The clusters in the project.",
           "type": "array",
           "items": {
             "$ref": "Cluster"
-          }
+          },
+          "description": "Output-only The clusters in the project."
         },
         "nextPageToken": {
           "type": "string",
@@ -1447,64 +1461,54 @@
       },
       "id": "ListClustersResponse"
     },
-    "SparkJob": {
+    "Job": {
       "type": "object",
       "properties": {
-        "loggingConfig": {
-          "$ref": "LoggingConfig",
-          "description": "Optional The runtime log config for job execution."
+        "scheduling": {
+          "$ref": "JobScheduling",
+          "description": "Optional Job scheduling configuration."
         },
-        "properties": {
-          "type": "object",
+        "pigJob": {
+          "$ref": "PigJob",
+          "description": "Job is a Pig job."
+        },
+        "hiveJob": {
+          "$ref": "HiveJob",
+          "description": "Job is a Hive job."
+        },
+        "labels": {
           "additionalProperties": {
             "type": "string"
           },
-          "description": "Optional A mapping of property names to values, used to configure Spark. Properties that conflict with values set by the Cloud Dataproc API may be overwritten. Can include properties set in /etc/spark/conf/spark-defaults.conf and classes in user code."
+          "description": "Optional The labels to associate with this job. Label keys must contain 1 to 63 characters, and must conform to RFC 1035 (https://www.ietf.org/rfc/rfc1035.txt). Label values may be empty, but, if present, must contain 1 to 63 characters, and must conform to RFC 1035 (https://www.ietf.org/rfc/rfc1035.txt). No more than 32 labels can be associated with a job.",
+          "type": "object"
         },
-        "args": {
-          "type": "array",
-          "items": {
-            "type": "string"
-          },
-          "description": "Optional The arguments to pass to the driver. Do not include arguments, such as --conf, that can be set as job properties, since a collision may occur that causes an incorrect job submission."
-        },
-        "fileUris": {
-          "description": "Optional HCFS URIs of files to be copied to the working directory of Spark drivers and distributed tasks. Useful for naively parallel tasks.",
-          "type": "array",
-          "items": {
-            "type": "string"
-          }
-        },
-        "mainClass": {
-          "type": "string",
-          "description": "The name of the driver's main class. The jar file that contains the class must be in the default CLASSPATH or specified in jar_file_uris."
-        },
-        "archiveUris": {
-          "type": "array",
-          "items": {
-            "type": "string"
-          },
-          "description": "Optional HCFS URIs of archives to be extracted in the working directory of Spark drivers and tasks. Supported file types: .jar, .tar, .tar.gz, .tgz, and .zip."
-        },
-        "mainJarFileUri": {
-          "description": "The HCFS URI of the jar file that contains the main class.",
+        "driverOutputResourceUri": {
+          "description": "Output-only A URI pointing to the location of the stdout of the job's driver program.",
           "type": "string"
         },
-        "jarFileUris": {
+        "sparkSqlJob": {
+          "$ref": "SparkSqlJob",
+          "description": "Job is a SparkSql job."
+        },
+        "sparkJob": {
+          "$ref": "SparkJob",
+          "description": "Job is a Spark job."
+        },
+        "statusHistory": {
+          "description": "Output-only The previous job status.",
           "type": "array",
           "items": {
-            "type": "string"
+            "$ref": "JobStatus"
+          }
+        },
+        "yarnApplications": {
+          "type": "array",
+          "items": {
+            "$ref": "YarnApplication"
           },
-          "description": "Optional HCFS URIs of jar files to add to the CLASSPATHs of the Spark driver and tasks."
-        }
-      },
-      "id": "SparkJob",
-      "description": "A Cloud Dataproc job for running Apache Spark (http://spark.apache.org/) applications on YARN."
-    },
-    "Job": {
-      "description": "A Cloud Dataproc job resource.",
-      "type": "object",
-      "properties": {
+          "description": "Output-only The collection of YARN applications spun up by this job.Beta Feature: This report is available for testing purposes only. It may be changed before final release."
+        },
         "pysparkJob": {
           "$ref": "PySparkJob",
           "description": "Job is a Pyspark job."
@@ -1526,60 +1530,92 @@
           "description": "Required Job information, including how, when, and where to run the job."
         },
         "driverControlFilesUri": {
+          "description": "Output-only If present, the location of miscellaneous control files which may be used as part of job setup and handling. If not present, control files may be placed in the same location as driver_output_uri.",
+          "type": "string"
+        }
+      },
+      "id": "Job",
+      "description": "A Cloud Dataproc job resource."
+    },
+    "SparkJob": {
+      "description": "A Cloud Dataproc job for running Apache Spark (http://spark.apache.org/) applications on YARN.",
+      "type": "object",
+      "properties": {
+        "fileUris": {
+          "description": "Optional HCFS URIs of files to be copied to the working directory of Spark drivers and distributed tasks. Useful for naively parallel tasks.",
+          "type": "array",
+          "items": {
+            "type": "string"
+          }
+        },
+        "mainClass": {
+          "description": "The name of the driver's main class. The jar file that contains the class must be in the default CLASSPATH or specified in jar_file_uris.",
+          "type": "string"
+        },
+        "archiveUris": {
+          "type": "array",
+          "items": {
+            "type": "string"
+          },
+          "description": "Optional HCFS URIs of archives to be extracted in the working directory of Spark drivers and tasks. Supported file types: .jar, .tar, .tar.gz, .tgz, and .zip."
+        },
+        "mainJarFileUri": {
           "type": "string",
-          "description": "Output-only If present, the location of miscellaneous control files which may be used as part of job setup and handling. If not present, control files may be placed in the same location as driver_output_uri."
+          "description": "The HCFS URI of the jar file that contains the main class."
         },
-        "scheduling": {
-          "$ref": "JobScheduling",
-          "description": "Optional Job scheduling configuration."
+        "jarFileUris": {
+          "description": "Optional HCFS URIs of jar files to add to the CLASSPATHs of the Spark driver and tasks.",
+          "type": "array",
+          "items": {
+            "type": "string"
+          }
         },
-        "pigJob": {
-          "$ref": "PigJob",
-          "description": "Job is a Pig job."
+        "loggingConfig": {
+          "$ref": "LoggingConfig",
+          "description": "Optional The runtime log config for job execution."
         },
-        "hiveJob": {
-          "$ref": "HiveJob",
-          "description": "Job is a Hive job."
-        },
-        "labels": {
+        "properties": {
           "type": "object",
           "additionalProperties": {
             "type": "string"
           },
-          "description": "Optional The labels to associate with this job. Label keys must contain 1 to 63 characters, and must conform to RFC 1035 (https://www.ietf.org/rfc/rfc1035.txt). Label values may be empty, but, if present, must contain 1 to 63 characters, and must conform to RFC 1035 (https://www.ietf.org/rfc/rfc1035.txt). No more than 32 labels can be associated with a job."
+          "description": "Optional A mapping of property names to values, used to configure Spark. Properties that conflict with values set by the Cloud Dataproc API may be overwritten. Can include properties set in /etc/spark/conf/spark-defaults.conf and classes in user code."
         },
-        "driverOutputResourceUri": {
-          "type": "string",
-          "description": "Output-only A URI pointing to the location of the stdout of the job's driver program."
-        },
-        "sparkSqlJob": {
-          "$ref": "SparkSqlJob",
-          "description": "Job is a SparkSql job."
-        },
-        "sparkJob": {
-          "$ref": "SparkJob",
-          "description": "Job is a Spark job."
-        },
-        "statusHistory": {
-          "description": "Output-only The previous job status.",
+        "args": {
           "type": "array",
           "items": {
-            "$ref": "JobStatus"
-          }
-        },
-        "yarnApplications": {
-          "description": "Output-only The collection of YARN applications spun up by this job.Beta Feature: This report is available for testing purposes only. It may be changed before final release.",
-          "type": "array",
-          "items": {
-            "$ref": "YarnApplication"
-          }
+            "type": "string"
+          },
+          "description": "Optional The arguments to pass to the driver. Do not include arguments, such as --conf, that can be set as job properties, since a collision may occur that causes an incorrect job submission."
         }
       },
-      "id": "Job"
+      "id": "SparkJob"
     },
     "JobStatus": {
+      "description": "Cloud Dataproc job status.",
       "type": "object",
       "properties": {
+        "stateStartTime": {
+          "type": "string",
+          "description": "Output-only The time when this state was entered.",
+          "format": "google-datetime"
+        },
+        "substate": {
+          "enum": [
+            "UNSPECIFIED",
+            "SUBMITTED",
+            "QUEUED",
+            "STALE_STATUS"
+          ],
+          "description": "Output-only Additional state information, which includes status reported by the agent.",
+          "type": "string",
+          "enumDescriptions": [
+            "",
+            "The Job is submitted to the agent.Applies to RUNNING state.",
+            "The Job has been received and is awaiting execution (it may be waiting for a condition to be met). See the \"details\" field for the reason for the delay.Applies to RUNNING state.",
+            "The agent-reported status is out of date, which may be caused by a loss of communication between the agent and Cloud Dataproc. If the agent does not send a timely update, the job will fail.Applies to RUNNING state."
+          ]
+        },
         "state": {
           "type": "string",
           "enumDescriptions": [
@@ -1611,26 +1647,20 @@
         "details": {
           "description": "Output-only Optional job state details, such as an error description if the state is \u003ccode\u003eERROR\u003c/code\u003e.",
           "type": "string"
-        },
-        "stateStartTime": {
-          "description": "Output-only The time when this state was entered.",
-          "format": "google-datetime",
-          "type": "string"
         }
       },
-      "id": "JobStatus",
-      "description": "Cloud Dataproc job status."
+      "id": "JobStatus"
     },
     "ManagedGroupConfig": {
       "type": "object",
       "properties": {
         "instanceGroupManagerName": {
-          "type": "string",
-          "description": "Output-only The name of the Instance Group Manager for this group."
+          "description": "Output-only The name of the Instance Group Manager for this group.",
+          "type": "string"
         },
         "instanceTemplateName": {
-          "type": "string",
-          "description": "Output-only The name of the Instance Template used for the Managed Instance Group."
+          "description": "Output-only The name of the Instance Template used for the Managed Instance Group.",
+          "type": "string"
         }
       },
       "id": "ManagedGroupConfig",
@@ -1645,9 +1675,9 @@
           "type": "string"
         },
         "stateStartTime": {
-          "type": "string",
           "description": "Output-only The time this state was entered.",
-          "format": "google-datetime"
+          "format": "google-datetime",
+          "type": "string"
         },
         "state": {
           "enum": [
@@ -1672,10 +1702,83 @@
       },
       "id": "ClusterOperationStatus"
     },
+    "HadoopJob": {
+      "description": "A Cloud Dataproc job for running Apache Hadoop MapReduce (https://hadoop.apache.org/docs/current/hadoop-mapreduce-client/hadoop-mapreduce-client-core/MapReduceTutorial.html) jobs on Apache Hadoop YARN (https://hadoop.apache.org/docs/r2.7.1/hadoop-yarn/hadoop-yarn-site/YARN.html).",
+      "type": "object",
+      "properties": {
+        "archiveUris": {
+          "description": "Optional HCFS URIs of archives to be extracted in the working directory of Hadoop drivers and tasks. Supported file types: .jar, .tar, .tar.gz, .tgz, or .zip.",
+          "type": "array",
+          "items": {
+            "type": "string"
+          }
+        },
+        "mainJarFileUri": {
+          "description": "The HCFS URI of the jar file containing the main class. Examples:  'gs://foo-bucket/analytics-binaries/extract-useful-metrics-mr.jar'  'hdfs:/tmp/test-samples/custom-wordcount.jar'  'file:///home/usr/lib/hadoop-mapreduce/hadoop-mapreduce-examples.jar'",
+          "type": "string"
+        },
+        "jarFileUris": {
+          "description": "Optional Jar file URIs to add to the CLASSPATHs of the Hadoop driver and tasks.",
+          "type": "array",
+          "items": {
+            "type": "string"
+          }
+        },
+        "loggingConfig": {
+          "$ref": "LoggingConfig",
+          "description": "Optional The runtime log config for job execution."
+        },
+        "properties": {
+          "type": "object",
+          "additionalProperties": {
+            "type": "string"
+          },
+          "description": "Optional A mapping of property names to values, used to configure Hadoop. Properties that conflict with values set by the Cloud Dataproc API may be overwritten. Can include properties set in /etc/hadoop/conf/*-site and classes in user code."
+        },
+        "args": {
+          "description": "Optional The arguments to pass to the driver. Do not include arguments, such as -libjars or -Dfoo=bar, that can be set as job properties, since a collision may occur that causes an incorrect job submission.",
+          "type": "array",
+          "items": {
+            "type": "string"
+          }
+        },
+        "fileUris": {
+          "type": "array",
+          "items": {
+            "type": "string"
+          },
+          "description": "Optional HCFS (Hadoop Compatible Filesystem) URIs of files to be copied to the working directory of Hadoop drivers and distributed tasks. Useful for naively parallel tasks."
+        },
+        "mainClass": {
+          "description": "The name of the driver's main class. The jar file containing the class must be in the default CLASSPATH or specified in jar_file_uris.",
+          "type": "string"
+        }
+      },
+      "id": "HadoopJob"
+    },
+    "QueryList": {
+      "type": "object",
+      "properties": {
+        "queries": {
+          "description": "Required The queries to execute. You do not need to terminate a query with a semicolon. Multiple queries can be specified in one string by separating each with a semicolon. Here is an example of an Cloud Dataproc API snippet that uses a QueryList to specify a HiveJob:\n\"hiveJob\": {\n  \"queryList\": {\n    \"queries\": [\n      \"query1\",\n      \"query2\",\n      \"query3;query4\",\n    ]\n  }\n}\n",
+          "type": "array",
+          "items": {
+            "type": "string"
+          }
+        }
+      },
+      "id": "QueryList",
+      "description": "A list of queries to run on a cluster."
+    },
     "YarnApplication": {
       "description": "A YARN application created by a job. Application information is a subset of \u003ccode\u003eorg.apache.hadoop.yarn.proto.YarnProtos.ApplicationReportProto\u003c/code\u003e.Beta Feature: This report is available for testing purposes only. It may be changed before final release.",
       "type": "object",
       "properties": {
+        "progress": {
+          "type": "number",
+          "description": "Required The numerical progress of the application, from 1 to 100.",
+          "format": "float"
+        },
         "state": {
           "enum": [
             "STATE_UNSPECIFIED",
@@ -1707,85 +1810,12 @@
           "type": "string"
         },
         "trackingUrl": {
-          "description": "Optional The HTTP URL of the ApplicationMaster, HistoryServer, or TimelineServer that provides application-specific information. The URL uses the internal hostname, and requires a proxy server for resolution and, possibly, access.",
-          "type": "string"
-        },
-        "progress": {
-          "description": "Required The numerical progress of the application, from 1 to 100.",
-          "format": "float",
-          "type": "number"
+          "type": "string",
+          "description": "Optional The HTTP URL of the ApplicationMaster, HistoryServer, or TimelineServer that provides application-specific information. The URL uses the internal hostname, and requires a proxy server for resolution and, possibly, access."
         }
       },
       "id": "YarnApplication"
     },
-    "QueryList": {
-      "description": "A list of queries to run on a cluster.",
-      "type": "object",
-      "properties": {
-        "queries": {
-          "description": "Required The queries to execute. You do not need to terminate a query with a semicolon. Multiple queries can be specified in one string by separating each with a semicolon. Here is an example of an Cloud Dataproc API snippet that uses a QueryList to specify a HiveJob:\n\"hiveJob\": {\n  \"queryList\": {\n    \"queries\": [\n      \"query1\",\n      \"query2\",\n      \"query3;query4\",\n    ]\n  }\n}\n",
-          "type": "array",
-          "items": {
-            "type": "string"
-          }
-        }
-      },
-      "id": "QueryList"
-    },
-    "HadoopJob": {
-      "description": "A Cloud Dataproc job for running Apache Hadoop MapReduce (https://hadoop.apache.org/docs/current/hadoop-mapreduce-client/hadoop-mapreduce-client-core/MapReduceTutorial.html) jobs on Apache Hadoop YARN (https://hadoop.apache.org/docs/r2.7.1/hadoop-yarn/hadoop-yarn-site/YARN.html).",
-      "type": "object",
-      "properties": {
-        "mainJarFileUri": {
-          "description": "The HCFS URI of the jar file containing the main class. Examples:  'gs://foo-bucket/analytics-binaries/extract-useful-metrics-mr.jar'  'hdfs:/tmp/test-samples/custom-wordcount.jar'  'file:///home/usr/lib/hadoop-mapreduce/hadoop-mapreduce-examples.jar'",
-          "type": "string"
-        },
-        "jarFileUris": {
-          "type": "array",
-          "items": {
-            "type": "string"
-          },
-          "description": "Optional Jar file URIs to add to the CLASSPATHs of the Hadoop driver and tasks."
-        },
-        "loggingConfig": {
-          "$ref": "LoggingConfig",
-          "description": "Optional The runtime log config for job execution."
-        },
-        "properties": {
-          "additionalProperties": {
-            "type": "string"
-          },
-          "description": "Optional A mapping of property names to values, used to configure Hadoop. Properties that conflict with values set by the Cloud Dataproc API may be overwritten. Can include properties set in /etc/hadoop/conf/*-site and classes in user code.",
-          "type": "object"
-        },
-        "args": {
-          "type": "array",
-          "items": {
-            "type": "string"
-          },
-          "description": "Optional The arguments to pass to the driver. Do not include arguments, such as -libjars or -Dfoo=bar, that can be set as job properties, since a collision may occur that causes an incorrect job submission."
-        },
-        "fileUris": {
-          "description": "Optional HCFS (Hadoop Compatible Filesystem) URIs of files to be copied to the working directory of Hadoop drivers and distributed tasks. Useful for naively parallel tasks.",
-          "type": "array",
-          "items": {
-            "type": "string"
-          }
-        },
-        "mainClass": {
-          "type": "string",
-          "description": "The name of the driver's main class. The jar file containing the class must be in the default CLASSPATH or specified in jar_file_uris."
-        },
-        "archiveUris": {
-          "type": "array",
-          "items": {
-            "type": "string"
-          },
-          "description": "Optional HCFS URIs of archives to be extracted in the working directory of Hadoop drivers and tasks. Supported file types: .jar, .tar, .tar.gz, .tgz, or .zip."
-        }
-      },
-      "id": "HadoopJob"
-    },
     "DiagnoseClusterRequest": {
       "type": "object",
       "properties": {},
@@ -1793,6 +1823,7 @@
       "description": "A request to collect cluster diagnostic information."
     },
     "DiskConfig": {
+      "description": "Specifies the config of disk options for a group of VM instances.",
       "type": "object",
       "properties": {
         "numLocalSsds": {
@@ -1806,18 +1837,26 @@
           "type": "integer"
         }
       },
-      "id": "DiskConfig",
-      "description": "Specifies the config of disk options for a group of VM instances."
+      "id": "DiskConfig"
     },
     "ClusterOperationMetadata": {
+      "description": "Metadata describing the operation.",
       "type": "object",
       "properties": {
+        "operationType": {
+          "type": "string",
+          "description": "Output-only The operation type."
+        },
+        "description": {
+          "description": "Output-only Short description of operation.",
+          "type": "string"
+        },
         "warnings": {
-          "description": "Output-only Errors encountered during operation execution.",
           "type": "array",
           "items": {
             "type": "string"
-          }
+          },
+          "description": "Output-only Errors encountered during operation execution."
         },
         "labels": {
           "additionalProperties": {
@@ -1831,72 +1870,63 @@
           "description": "Output-only Current operation status."
         },
         "statusHistory": {
+          "description": "Output-only The previous operation status.",
           "type": "array",
           "items": {
             "$ref": "ClusterOperationStatus"
-          },
-          "description": "Output-only The previous operation status."
+          }
         },
         "clusterName": {
-          "description": "Output-only Name of the cluster for the operation.",
-          "type": "string"
+          "type": "string",
+          "description": "Output-only Name of the cluster for the operation."
         },
         "clusterUuid": {
-          "type": "string",
-          "description": "Output-only Cluster UUID for the operation."
-        },
-        "operationType": {
-          "type": "string",
-          "description": "Output-only The operation type."
-        },
-        "description": {
-          "description": "Output-only Short description of operation.",
+          "description": "Output-only Cluster UUID for the operation.",
           "type": "string"
         }
       },
-      "id": "ClusterOperationMetadata",
-      "description": "Metadata describing the operation."
+      "id": "ClusterOperationMetadata"
     },
     "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:\nservice Foo {\n  rpc Bar(google.protobuf.Empty) returns (google.protobuf.Empty);\n}\nThe JSON representation for Empty is empty JSON object {}.",
       "type": "object",
       "properties": {},
-      "id": "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:\nservice Foo {\n  rpc Bar(google.protobuf.Empty) returns (google.protobuf.Empty);\n}\nThe JSON representation for Empty is empty JSON object {}."
     },
     "HiveJob": {
       "type": "object",
       "properties": {
-        "continueOnFailure": {
-          "description": "Optional Whether to continue executing queries if a query fails. The default value is false. Setting to true can be useful when executing independent parallel queries.",
-          "type": "boolean"
+        "properties": {
+          "type": "object",
+          "additionalProperties": {
+            "type": "string"
+          },
+          "description": "Optional A mapping of property names and values, used to configure Hive. Properties that conflict with values set by the Cloud Dataproc API may be overwritten. Can include properties set in /etc/hadoop/conf/*-site.xml, /etc/hive/conf/hive-site.xml, and classes in user code."
         },
-        "queryFileUri": {
-          "description": "The HCFS URI of the script that contains Hive queries.",
-          "type": "string"
+        "continueOnFailure": {
+          "type": "boolean",
+          "description": "Optional Whether to continue executing queries if a query fails. The default value is false. Setting to true can be useful when executing independent parallel queries."
         },
         "queryList": {
           "$ref": "QueryList",
           "description": "A list of queries."
         },
+        "queryFileUri": {
+          "type": "string",
+          "description": "The HCFS URI of the script that contains Hive queries."
+        },
         "jarFileUris": {
-          "description": "Optional HCFS URIs of jar files to add to the CLASSPATH of the Hive server and Hadoop MapReduce (MR) tasks. Can contain Hive SerDes and UDFs.",
           "type": "array",
           "items": {
             "type": "string"
-          }
+          },
+          "description": "Optional HCFS URIs of jar files to add to the CLASSPATH of the Hive server and Hadoop MapReduce (MR) tasks. Can contain Hive SerDes and UDFs."
         },
         "scriptVariables": {
-          "type": "object",
           "additionalProperties": {
             "type": "string"
           },
-          "description": "Optional Mapping of query variable names to values (equivalent to the Hive command: SET name=\"value\";)."
-        },
-        "properties": {
-          "additionalProperties": {
-            "type": "string"
-          },
-          "description": "Optional A mapping of property names and values, used to configure Hive. Properties that conflict with values set by the Cloud Dataproc API may be overwritten. Can include properties set in /etc/hadoop/conf/*-site.xml, /etc/hive/conf/hive-site.xml, and classes in user code.",
+          "description": "Optional Mapping of query variable names to values (equivalent to the Hive command: SET name=\"value\";).",
           "type": "object"
         }
       },
@@ -1904,15 +1934,15 @@
       "description": "A Cloud Dataproc job for running Apache Hive (https://hive.apache.org/) queries on YARN."
     },
     "DiagnoseClusterResults": {
+      "description": "The location of diagnostic output.",
       "type": "object",
       "properties": {
         "outputUri": {
-          "description": "Output-only The Google Cloud Storage URI of the diagnostic output. The output report is a plain text file with a summary of collected diagnostics.",
-          "type": "string"
+          "type": "string",
+          "description": "Output-only The Google Cloud Storage URI of the diagnostic output. The output report is a plain text file with a summary of collected diagnostics."
         }
       },
-      "id": "DiagnoseClusterResults",
-      "description": "The location of diagnostic output."
+      "id": "DiagnoseClusterResults"
     },
     "ClusterConfig": {
       "description": "The cluster config.",
@@ -1934,8 +1964,8 @@
           "description": "Optional Commands to execute on each node after config is completed. By default, executables are run on master and all worker nodes. You can test a node's \u003ccode\u003erole\u003c/code\u003e metadata to run an executable on a master or worker node, as shown below using curl (you can also use wget):\nROLE=$(curl -H Metadata-Flavor:Google http://metadata/computeMetadata/v1/instance/attributes/dataproc-role)\nif [[ \"${ROLE}\" == 'Master' ]]; then\n  ... master specific actions ...\nelse\n  ... worker specific actions ...\nfi\n"
         },
         "configBucket": {
-          "description": "Optional A Google Cloud Storage staging bucket used for sharing generated SSH keys and config. If you do not specify a staging bucket, Cloud Dataproc will determine an appropriate Cloud Storage location (US, ASIA, or EU) for your cluster's staging bucket according to the Google Compute Engine zone where your cluster is deployed, and then it will create and manage this project-level, per-location bucket for you.",
-          "type": "string"
+          "type": "string",
+          "description": "Optional A Google Cloud Storage staging bucket used for sharing generated SSH keys and config. If you do not specify a staging bucket, Cloud Dataproc will determine an appropriate Cloud Storage location (US, ASIA, or EU) for your cluster's staging bucket according to the Google Compute Engine zone where your cluster is deployed, and then it will create and manage this project-level, per-location bucket for you."
         },
         "workerConfig": {
           "$ref": "InstanceGroupConfig",
@@ -1953,11 +1983,11 @@
       "id": "ClusterConfig"
     }
   },
+  "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"
   },
-  "protocol": "rest",
   "version": "v1",
   "baseUrl": "https://dataproc.googleapis.com/",
   "auth": {
@@ -1979,7 +2009,7 @@
   "batchPath": "batch",
   "documentationLink": "https://cloud.google.com/dataproc/",
   "id": "dataproc:v1",
-  "revision": "20170228",
+  "revision": "20170321",
   "title": "Google Cloud Dataproc API",
   "ownerName": "Google",
   "discoveryVersion": "v1"
diff --git a/dataproc/v1/dataproc-gen.go b/dataproc/v1/dataproc-gen.go
index 31dd502..aec9b42 100644
--- a/dataproc/v1/dataproc-gen.go
+++ b/dataproc/v1/dataproc-gen.go
@@ -61,10 +61,9 @@
 }
 
 type Service struct {
-	client                    *http.Client
-	BasePath                  string // API endpoint base URL
-	UserAgent                 string // optional additional User-Agent fragment
-	GoogleClientHeaderElement string // client header fragment, for Google use only
+	client    *http.Client
+	BasePath  string // API endpoint base URL
+	UserAgent string // optional additional User-Agent fragment
 
 	Projects *ProjectsService
 }
@@ -76,10 +75,6 @@
 	return googleapi.UserAgent + " " + s.UserAgent
 }
 
-func (s *Service) clientHeader() string {
-	return gensupport.GoogleClientHeader("20170210", s.GoogleClientHeaderElement)
-}
-
 func NewProjectsService(s *Service) *ProjectsService {
 	rs := &ProjectsService{s: s}
 	rs.Regions = NewProjectsRegionsService(s)
@@ -464,6 +459,19 @@
 	// StateStartTime: Output-only Time when this state was entered.
 	StateStartTime string `json:"stateStartTime,omitempty"`
 
+	// Substate: Output-only Additional state information that includes
+	// status reported by the agent.
+	//
+	// Possible values:
+	//   "UNSPECIFIED"
+	//   "UNHEALTHY" - The cluster is known to be in an unhealthy state (for
+	// example, critical daemons are not running or HDFS capacity is
+	// exhausted).Applies to RUNNING state.
+	//   "STALE_STATUS" - The agent-reported status is out of date (may
+	// occur if Cloud Dataproc loses communication with Agent).Applies to
+	// RUNNING state.
+	Substate string `json:"substate,omitempty"`
+
 	// ForceSendFields is a list of field names (e.g. "Detail") to
 	// unconditionally include in API requests. By default, fields with
 	// empty values are omitted from API requests. However, any non-pointer,
@@ -1121,6 +1129,22 @@
 	// StateStartTime: Output-only The time when this state was entered.
 	StateStartTime string `json:"stateStartTime,omitempty"`
 
+	// Substate: Output-only Additional state information, which includes
+	// status reported by the agent.
+	//
+	// Possible values:
+	//   "UNSPECIFIED"
+	//   "SUBMITTED" - The Job is submitted to the agent.Applies to RUNNING
+	// state.
+	//   "QUEUED" - The Job has been received and is awaiting execution (it
+	// may be waiting for a condition to be met). See the "details" field
+	// for the reason for the delay.Applies to RUNNING state.
+	//   "STALE_STATUS" - The agent-reported status is out of date, which
+	// may be caused by a loss of communication between the agent and Cloud
+	// Dataproc. If the agent does not send a timely update, the job will
+	// fail.Applies to RUNNING state.
+	Substate string `json:"substate,omitempty"`
+
 	// ForceSendFields is a list of field names (e.g. "Details") to
 	// unconditionally include in API requests. By default, fields with
 	// empty values are omitted from API requests. However, any non-pointer,
@@ -2078,7 +2102,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	var body io.Reader = nil
 	body, err := googleapi.WithoutDataWrapper.JSONReader(c.cluster)
 	if err != nil {
@@ -2223,7 +2246,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	var body io.Reader = nil
 	c.urlParams_.Set("alt", alt)
 	urls := googleapi.ResolveRelative(c.s.BasePath, "v1/projects/{projectId}/regions/{region}/clusters/{clusterName}")
@@ -2372,7 +2394,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	var body io.Reader = nil
 	body, err := googleapi.WithoutDataWrapper.JSONReader(c.diagnoseclusterrequest)
 	if err != nil {
@@ -2536,7 +2557,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	if c.ifNoneMatch_ != "" {
 		reqHeaders.Set("If-None-Match", c.ifNoneMatch_)
 	}
@@ -2725,7 +2745,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	if c.ifNoneMatch_ != "" {
 		reqHeaders.Set("If-None-Match", c.ifNoneMatch_)
 	}
@@ -2937,7 +2956,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	var body io.Reader = nil
 	body, err := googleapi.WithoutDataWrapper.JSONReader(c.cluster)
 	if err != nil {
@@ -3100,7 +3118,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	var body io.Reader = nil
 	body, err := googleapi.WithoutDataWrapper.JSONReader(c.canceljobrequest)
 	if err != nil {
@@ -3254,7 +3271,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	var body io.Reader = nil
 	c.urlParams_.Set("alt", alt)
 	urls := googleapi.ResolveRelative(c.s.BasePath, "v1/projects/{projectId}/regions/{region}/jobs/{jobId}")
@@ -3410,7 +3426,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	if c.ifNoneMatch_ != "" {
 		reqHeaders.Set("If-None-Match", c.ifNoneMatch_)
 	}
@@ -3617,7 +3632,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	if c.ifNoneMatch_ != "" {
 		reqHeaders.Set("If-None-Match", c.ifNoneMatch_)
 	}
@@ -3823,7 +3837,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	var body io.Reader = nil
 	body, err := googleapi.WithoutDataWrapper.JSONReader(c.job)
 	if err != nil {
@@ -3982,7 +3995,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	var body io.Reader = nil
 	body, err := googleapi.WithoutDataWrapper.JSONReader(c.submitjobrequest)
 	if err != nil {
@@ -4132,7 +4144,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	var body io.Reader = nil
 	c.urlParams_.Set("alt", alt)
 	urls := googleapi.ResolveRelative(c.s.BasePath, "v1/{+name}:cancel")
@@ -4261,7 +4272,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	var body io.Reader = nil
 	c.urlParams_.Set("alt", alt)
 	urls := googleapi.ResolveRelative(c.s.BasePath, "v1/{+name}")
@@ -4400,7 +4410,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	if c.ifNoneMatch_ != "" {
 		reqHeaders.Set("If-None-Match", c.ifNoneMatch_)
 	}
@@ -4565,7 +4574,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	if c.ifNoneMatch_ != "" {
 		reqHeaders.Set("If-None-Match", c.ifNoneMatch_)
 	}
diff --git a/dataproc/v1alpha1/dataproc-api.json b/dataproc/v1alpha1/dataproc-api.json
index fff2896..9acafc9 100644
--- a/dataproc/v1alpha1/dataproc-api.json
+++ b/dataproc/v1alpha1/dataproc-api.json
@@ -1,16 +1,161 @@
 {
+  "version": "v1alpha1",
+  "baseUrl": "https://dataproc.googleapis.com/",
+  "auth": {
+    "oauth2": {
+      "scopes": {
+        "https://www.googleapis.com/auth/cloud-platform": {
+          "description": "View and manage your data across Google Cloud Platform services"
+        }
+      }
+    }
+  },
+  "description": "Manages Hadoop-based clusters and jobs on Google Cloud Platform.",
+  "servicePath": "",
+  "kind": "discovery#restDescription",
+  "rootUrl": "https://dataproc.googleapis.com/",
+  "basePath": "",
+  "ownerDomain": "google.com",
+  "name": "dataproc",
+  "batchPath": "batch",
+  "id": "dataproc:v1alpha1",
+  "documentationLink": "https://cloud.google.com/dataproc/",
+  "revision": "20170321",
   "title": "Google Cloud Dataproc API",
-  "discoveryVersion": "v1",
   "ownerName": "Google",
+  "discoveryVersion": "v1",
   "resources": {
+    "operations": {
+      "methods": {
+        "cancel": {
+          "httpMethod": "POST",
+          "parameterOrder": [
+            "name"
+          ],
+          "response": {
+            "$ref": "Empty"
+          },
+          "parameters": {
+            "name": {
+              "description": "The name of the operation resource to be cancelled.",
+              "required": true,
+              "type": "string",
+              "pattern": "^operations/.+$",
+              "location": "path"
+            }
+          },
+          "scopes": [
+            "https://www.googleapis.com/auth/cloud-platform"
+          ],
+          "flatPath": "v1alpha1/operations/{operationsId}:cancel",
+          "id": "dataproc.operations.cancel",
+          "path": "v1alpha1/{+name}:cancel",
+          "request": {
+            "$ref": "CancelOperationRequest"
+          },
+          "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 may use Operations.GetOperation or other methods to check whether the cancellation succeeded or the operation completed despite cancellation."
+        },
+        "delete": {
+          "id": "dataproc.operations.delete",
+          "path": "v1alpha1/{+name}",
+          "description": "Deletes a long-running operation. It indicates the client is no longer interested in the operation result. It does not cancel the operation.",
+          "httpMethod": "DELETE",
+          "response": {
+            "$ref": "Empty"
+          },
+          "parameterOrder": [
+            "name"
+          ],
+          "parameters": {
+            "name": {
+              "pattern": "^operations/.+$",
+              "location": "path",
+              "description": "The name of the operation resource to be deleted.",
+              "required": true,
+              "type": "string"
+            }
+          },
+          "scopes": [
+            "https://www.googleapis.com/auth/cloud-platform"
+          ],
+          "flatPath": "v1alpha1/operations/{operationsId}"
+        },
+        "get": {
+          "response": {
+            "$ref": "Operation"
+          },
+          "httpMethod": "GET",
+          "parameterOrder": [
+            "name"
+          ],
+          "scopes": [
+            "https://www.googleapis.com/auth/cloud-platform"
+          ],
+          "parameters": {
+            "name": {
+              "pattern": "^operations/.+$",
+              "location": "path",
+              "description": "The operation resource name.",
+              "required": true,
+              "type": "string"
+            }
+          },
+          "flatPath": "v1alpha1/operations/{operationsId}",
+          "path": "v1alpha1/{+name}",
+          "id": "dataproc.operations.get",
+          "description": "Gets the latest state of a long-running operation. Clients may use this method to poll the operation result at intervals as recommended by the API service."
+        },
+        "list": {
+          "path": "v1alpha1/{+name}",
+          "id": "dataproc.operations.list",
+          "description": "Lists operations that match the specified filter in the request. If the server doesn't support this method, it returns google.rpc.Code.UNIMPLEMENTED.",
+          "response": {
+            "$ref": "ListOperationsResponse"
+          },
+          "parameterOrder": [
+            "name"
+          ],
+          "httpMethod": "GET",
+          "parameters": {
+            "name": {
+              "description": "The operation collection name.",
+              "required": true,
+              "type": "string",
+              "pattern": "^operations$",
+              "location": "path"
+            },
+            "pageToken": {
+              "description": "The standard List page token.",
+              "type": "string",
+              "location": "query"
+            },
+            "pageSize": {
+              "description": "The standard List page size.",
+              "format": "int32",
+              "type": "integer",
+              "location": "query"
+            },
+            "filter": {
+              "description": "Required A JSON object that contains filters for the list operation, in the format {\"key1\":\"value1\",\"key2\":\"value2\", ..., }. Possible keys include project_id, cluster_name, and operation_state_matcher.If project_id is set, requests the list of operations that belong to the specified Google Cloud Platform project ID. This key is required.If cluster_name is set, requests the list of operations that were submitted to the specified cluster name. This key is optional.If operation_state_matcher is set, requests the list of operations that match one of the following status options: ALL, ACTIVE, or NON_ACTIVE.",
+              "type": "string",
+              "location": "query"
+            }
+          },
+          "scopes": [
+            "https://www.googleapis.com/auth/cloud-platform"
+          ],
+          "flatPath": "v1alpha1/operations"
+        }
+      }
+    },
     "projects": {
       "resources": {
         "regions": {
           "resources": {
             "clusters": {
               "methods": {
-                "patch": {
-                  "description": "Request to update a cluster in a project.",
+                "create": {
+                  "description": "Request to create a cluster in a project.",
                   "request": {
                     "$ref": "Cluster"
                   },
@@ -19,20 +164,79 @@
                   },
                   "parameterOrder": [
                     "projectId",
+                    "region"
+                  ],
+                  "httpMethod": "POST",
+                  "scopes": [
+                    "https://www.googleapis.com/auth/cloud-platform"
+                  ],
+                  "parameters": {
+                    "projectId": {
+                      "description": "Required The ID of the Google Cloud Platform project that the cluster belongs to.",
+                      "required": true,
+                      "type": "string",
+                      "location": "path"
+                    },
+                    "region": {
+                      "description": "Required The Dataproc region in which to handle the request.",
+                      "required": true,
+                      "type": "string",
+                      "location": "path"
+                    }
+                  },
+                  "flatPath": "v1alpha1/projects/{projectId}/regions/{region}/clusters",
+                  "path": "v1alpha1/projects/{projectId}/regions/{region}/clusters",
+                  "id": "dataproc.projects.regions.clusters.create"
+                },
+                "delete": {
+                  "httpMethod": "DELETE",
+                  "response": {
+                    "$ref": "Operation"
+                  },
+                  "parameterOrder": [
+                    "projectId",
+                    "region",
+                    "clusterName"
+                  ],
+                  "parameters": {
+                    "region": {
+                      "description": "Required The Dataproc region in which to handle the request.",
+                      "required": true,
+                      "type": "string",
+                      "location": "path"
+                    },
+                    "clusterName": {
+                      "location": "path",
+                      "description": "Required The cluster name.",
+                      "required": true,
+                      "type": "string"
+                    },
+                    "projectId": {
+                      "location": "path",
+                      "description": "Required The ID of the Google Cloud Platform project that the cluster belongs to.",
+                      "required": true,
+                      "type": "string"
+                    }
+                  },
+                  "scopes": [
+                    "https://www.googleapis.com/auth/cloud-platform"
+                  ],
+                  "flatPath": "v1alpha1/projects/{projectId}/regions/{region}/clusters/{clusterName}",
+                  "id": "dataproc.projects.regions.clusters.delete",
+                  "path": "v1alpha1/projects/{projectId}/regions/{region}/clusters/{clusterName}",
+                  "description": "Request to delete a cluster in a project."
+                },
+                "patch": {
+                  "response": {
+                    "$ref": "Operation"
+                  },
+                  "parameterOrder": [
+                    "projectId",
                     "region",
                     "clusterName"
                   ],
                   "httpMethod": "PATCH",
-                  "scopes": [
-                    "https://www.googleapis.com/auth/cloud-platform"
-                  ],
                   "parameters": {
-                    "projectId": {
-                      "description": "Required The ID of the Google Cloud Platform project the cluster belongs to.",
-                      "required": true,
-                      "type": "string",
-                      "location": "path"
-                    },
                     "region": {
                       "description": "Required The Dataproc region in which to handle the request.",
                       "required": true,
@@ -46,34 +250,46 @@
                       "location": "query"
                     },
                     "clusterName": {
-                      "location": "path",
                       "description": "Required The cluster name.",
                       "required": true,
-                      "type": "string"
+                      "type": "string",
+                      "location": "path"
+                    },
+                    "projectId": {
+                      "description": "Required The ID of the Google Cloud Platform project the cluster belongs to.",
+                      "required": true,
+                      "type": "string",
+                      "location": "path"
                     }
                   },
+                  "scopes": [
+                    "https://www.googleapis.com/auth/cloud-platform"
+                  ],
                   "flatPath": "v1alpha1/projects/{projectId}/regions/{region}/clusters/{clusterName}",
                   "path": "v1alpha1/projects/{projectId}/regions/{region}/clusters/{clusterName}",
-                  "id": "dataproc.projects.regions.clusters.patch"
+                  "id": "dataproc.projects.regions.clusters.patch",
+                  "request": {
+                    "$ref": "Cluster"
+                  },
+                  "description": "Request to update a cluster in a project."
                 },
                 "get": {
+                  "id": "dataproc.projects.regions.clusters.get",
+                  "path": "v1alpha1/projects/{projectId}/regions/{region}/clusters/{clusterName}",
                   "description": "Request to get the resource representation for a cluster in a project.",
                   "httpMethod": "GET",
+                  "response": {
+                    "$ref": "Cluster"
+                  },
                   "parameterOrder": [
                     "projectId",
                     "region",
                     "clusterName"
                   ],
-                  "response": {
-                    "$ref": "Cluster"
-                  },
+                  "scopes": [
+                    "https://www.googleapis.com/auth/cloud-platform"
+                  ],
                   "parameters": {
-                    "region": {
-                      "location": "path",
-                      "description": "Required The Dataproc region in which to handle the request.",
-                      "required": true,
-                      "type": "string"
-                    },
                     "clusterName": {
                       "location": "path",
                       "description": "Required The cluster name.",
@@ -85,20 +301,20 @@
                       "required": true,
                       "type": "string",
                       "location": "path"
+                    },
+                    "region": {
+                      "description": "Required The Dataproc region in which to handle the request.",
+                      "required": true,
+                      "type": "string",
+                      "location": "path"
                     }
                   },
-                  "scopes": [
-                    "https://www.googleapis.com/auth/cloud-platform"
-                  ],
-                  "flatPath": "v1alpha1/projects/{projectId}/regions/{region}/clusters/{clusterName}",
-                  "id": "dataproc.projects.regions.clusters.get",
-                  "path": "v1alpha1/projects/{projectId}/regions/{region}/clusters/{clusterName}"
+                  "flatPath": "v1alpha1/projects/{projectId}/regions/{region}/clusters/{clusterName}"
                 },
                 "list": {
-                  "id": "dataproc.projects.regions.clusters.list",
                   "path": "v1alpha1/projects/{projectId}/regions/{region}/clusters",
+                  "id": "dataproc.projects.regions.clusters.list",
                   "description": "Request a list of all regions/{region}/clusters in a project.",
-                  "httpMethod": "GET",
                   "response": {
                     "$ref": "ListClustersResponse"
                   },
@@ -106,12 +322,21 @@
                     "projectId",
                     "region"
                   ],
+                  "httpMethod": "GET",
+                  "scopes": [
+                    "https://www.googleapis.com/auth/cloud-platform"
+                  ],
                   "parameters": {
+                    "pageToken": {
+                      "description": "The standard List page token.",
+                      "type": "string",
+                      "location": "query"
+                    },
                     "pageSize": {
-                      "type": "integer",
-                      "location": "query",
                       "description": "The standard List page size.",
-                      "format": "int32"
+                      "format": "int32",
+                      "type": "integer",
+                      "location": "query"
                     },
                     "projectId": {
                       "description": "Required The ID of the Google Cloud Platform project that the cluster belongs to.",
@@ -120,104 +345,28 @@
                       "location": "path"
                     },
                     "region": {
-                      "location": "path",
                       "description": "Required The Dataproc region in which to handle the request.",
                       "required": true,
-                      "type": "string"
+                      "type": "string",
+                      "location": "path"
                     },
                     "filter": {
                       "location": "query",
                       "description": "Optional A filter constraining which clusters to list. Valid filters contain label terms such as: labels.key1 = val1 AND (-labels.k2 = val2 OR labels.k3 = val3)",
                       "type": "string"
-                    },
-                    "pageToken": {
-                      "location": "query",
-                      "description": "The standard List page token.",
-                      "type": "string"
                     }
                   },
-                  "scopes": [
-                    "https://www.googleapis.com/auth/cloud-platform"
-                  ],
                   "flatPath": "v1alpha1/projects/{projectId}/regions/{region}/clusters"
-                },
-                "create": {
-                  "request": {
-                    "$ref": "Cluster"
-                  },
-                  "description": "Request to create a cluster in a project.",
-                  "httpMethod": "POST",
-                  "parameterOrder": [
-                    "projectId",
-                    "region"
-                  ],
-                  "response": {
-                    "$ref": "Operation"
-                  },
-                  "parameters": {
-                    "projectId": {
-                      "description": "Required The ID of the Google Cloud Platform project that the cluster belongs to.",
-                      "required": true,
-                      "type": "string",
-                      "location": "path"
-                    },
-                    "region": {
-                      "location": "path",
-                      "description": "Required The Dataproc region in which to handle the request.",
-                      "required": true,
-                      "type": "string"
-                    }
-                  },
-                  "scopes": [
-                    "https://www.googleapis.com/auth/cloud-platform"
-                  ],
-                  "flatPath": "v1alpha1/projects/{projectId}/regions/{region}/clusters",
-                  "id": "dataproc.projects.regions.clusters.create",
-                  "path": "v1alpha1/projects/{projectId}/regions/{region}/clusters"
-                },
-                "delete": {
-                  "description": "Request to delete a cluster in a project.",
-                  "response": {
-                    "$ref": "Operation"
-                  },
-                  "parameterOrder": [
-                    "projectId",
-                    "region",
-                    "clusterName"
-                  ],
-                  "httpMethod": "DELETE",
-                  "scopes": [
-                    "https://www.googleapis.com/auth/cloud-platform"
-                  ],
-                  "parameters": {
-                    "projectId": {
-                      "location": "path",
-                      "description": "Required The ID of the Google Cloud Platform project that the cluster belongs to.",
-                      "required": true,
-                      "type": "string"
-                    },
-                    "region": {
-                      "description": "Required The Dataproc region in which to handle the request.",
-                      "required": true,
-                      "type": "string",
-                      "location": "path"
-                    },
-                    "clusterName": {
-                      "description": "Required The cluster name.",
-                      "required": true,
-                      "type": "string",
-                      "location": "path"
-                    }
-                  },
-                  "flatPath": "v1alpha1/projects/{projectId}/regions/{region}/clusters/{clusterName}",
-                  "path": "v1alpha1/projects/{projectId}/regions/{region}/clusters/{clusterName}",
-                  "id": "dataproc.projects.regions.clusters.delete"
                 }
               }
             },
             "jobs": {
               "methods": {
                 "submit": {
+                  "description": "Submits a job to a cluster.",
+                  "request": {
+                    "$ref": "SubmitJobRequest"
+                  },
                   "response": {
                     "$ref": "Job"
                   },
@@ -226,44 +375,37 @@
                     "region"
                   ],
                   "httpMethod": "POST",
+                  "scopes": [
+                    "https://www.googleapis.com/auth/cloud-platform"
+                  ],
                   "parameters": {
+                    "region": {
+                      "description": "Required The Dataproc region in which to handle the request.",
+                      "required": true,
+                      "type": "string",
+                      "location": "path"
+                    },
                     "projectId": {
                       "location": "path",
                       "description": "Required The ID of the Google Cloud Platform project that the job belongs to.",
                       "required": true,
                       "type": "string"
-                    },
-                    "region": {
-                      "description": "Required The Dataproc region in which to handle the request.",
-                      "required": true,
-                      "type": "string",
-                      "location": "path"
                     }
                   },
-                  "scopes": [
-                    "https://www.googleapis.com/auth/cloud-platform"
-                  ],
                   "flatPath": "v1alpha1/projects/{projectId}/regions/{region}/jobs:submit",
                   "path": "v1alpha1/projects/{projectId}/regions/{region}/jobs:submit",
-                  "id": "dataproc.projects.regions.jobs.submit",
-                  "request": {
-                    "$ref": "SubmitJobRequest"
-                  },
-                  "description": "Submits a job to a cluster."
+                  "id": "dataproc.projects.regions.jobs.submit"
                 },
                 "delete": {
-                  "httpMethod": "DELETE",
+                  "response": {
+                    "$ref": "Job"
+                  },
                   "parameterOrder": [
                     "projectId",
                     "region",
                     "jobId"
                   ],
-                  "response": {
-                    "$ref": "Job"
-                  },
-                  "scopes": [
-                    "https://www.googleapis.com/auth/cloud-platform"
-                  ],
+                  "httpMethod": "DELETE",
                   "parameters": {
                     "region": {
                       "description": "Required The Dataproc region in which to handle the request.",
@@ -272,10 +414,10 @@
                       "location": "path"
                     },
                     "projectId": {
+                      "location": "path",
                       "description": "Required The ID of the Google Cloud Platform project that the job belongs to.",
                       "required": true,
-                      "type": "string",
-                      "location": "path"
+                      "type": "string"
                     },
                     "jobId": {
                       "description": "Required The job ID.",
@@ -284,33 +426,33 @@
                       "location": "path"
                     }
                   },
+                  "scopes": [
+                    "https://www.googleapis.com/auth/cloud-platform"
+                  ],
                   "flatPath": "v1alpha1/projects/{projectId}/regions/{region}/jobs/{jobId}",
-                  "id": "dataproc.projects.regions.jobs.delete",
                   "path": "v1alpha1/projects/{projectId}/regions/{region}/jobs/{jobId}",
+                  "id": "dataproc.projects.regions.jobs.delete",
                   "description": "Deletes the job from the project. If the job is active, the delete fails, and the response returns FAILED_PRECONDITION."
                 },
                 "list": {
-                  "flatPath": "v1alpha1/projects/{projectId}/regions/{region}/jobs:list",
-                  "path": "v1alpha1/projects/{projectId}/regions/{region}/jobs:list",
-                  "id": "dataproc.projects.regions.jobs.list",
                   "request": {
                     "$ref": "ListJobsRequest"
                   },
                   "description": "Lists regions/{region}/jobs in a project.",
-                  "response": {
-                    "$ref": "ListJobsResponse"
-                  },
+                  "httpMethod": "POST",
                   "parameterOrder": [
                     "projectId",
                     "region"
                   ],
-                  "httpMethod": "POST",
+                  "response": {
+                    "$ref": "ListJobsResponse"
+                  },
                   "parameters": {
                     "region": {
+                      "location": "path",
                       "description": "Required The Dataproc region in which to handle the request.",
                       "required": true,
-                      "type": "string",
-                      "location": "path"
+                      "type": "string"
                     },
                     "projectId": {
                       "description": "Required The ID of the Google Cloud Platform project that the job belongs to.",
@@ -321,25 +463,28 @@
                   },
                   "scopes": [
                     "https://www.googleapis.com/auth/cloud-platform"
-                  ]
+                  ],
+                  "flatPath": "v1alpha1/projects/{projectId}/regions/{region}/jobs:list",
+                  "id": "dataproc.projects.regions.jobs.list",
+                  "path": "v1alpha1/projects/{projectId}/regions/{region}/jobs:list"
                 },
                 "cancel": {
-                  "flatPath": "v1alpha1/projects/{projectId}/regions/{region}/jobs/{jobId}:cancel",
-                  "id": "dataproc.projects.regions.jobs.cancel",
-                  "path": "v1alpha1/projects/{projectId}/regions/{region}/jobs/{jobId}:cancel",
+                  "description": "Starts a job cancellation request. To access the job resource after cancellation, call regions/{region}/jobs:list or regions/{region}/jobs:get.",
                   "request": {
                     "$ref": "CancelJobRequest"
                   },
-                  "description": "Starts a job cancellation request. To access the job resource after cancellation, call regions/{region}/jobs:list or regions/{region}/jobs:get.",
-                  "httpMethod": "POST",
+                  "response": {
+                    "$ref": "Job"
+                  },
                   "parameterOrder": [
                     "projectId",
                     "region",
                     "jobId"
                   ],
-                  "response": {
-                    "$ref": "Job"
-                  },
+                  "httpMethod": "POST",
+                  "scopes": [
+                    "https://www.googleapis.com/auth/cloud-platform"
+                  ],
                   "parameters": {
                     "projectId": {
                       "description": "Required The ID of the Google Cloud Platform project that the job belongs to.",
@@ -360,67 +505,20 @@
                       "type": "string"
                     }
                   },
-                  "scopes": [
-                    "https://www.googleapis.com/auth/cloud-platform"
-                  ]
-                },
-                "patch": {
-                  "path": "v1alpha1/projects/{projectId}/regions/{region}/jobs/{jobId}",
-                  "id": "dataproc.projects.regions.jobs.patch",
-                  "request": {
-                    "$ref": "Job"
-                  },
-                  "description": "Updates a job in a project.",
-                  "response": {
-                    "$ref": "Job"
-                  },
-                  "parameterOrder": [
-                    "projectId",
-                    "region",
-                    "jobId"
-                  ],
-                  "httpMethod": "PATCH",
-                  "parameters": {
-                    "region": {
-                      "location": "path",
-                      "description": "Required The Dataproc region in which to handle the request.",
-                      "required": true,
-                      "type": "string"
-                    },
-                    "updateMask": {
-                      "location": "query",
-                      "description": "Required Specifies the path, relative to \u003ccode\u003eJob\u003c/code\u003e, of the field to update. For example, to update the labels of a Job the \u003ccode\u003eupdate_mask\u003c/code\u003e parameter would be specified as \u003ccode\u003elabels\u003c/code\u003e, and the PATCH request body would specify the new value. \u003cstrong\u003eNote:\u003c/strong\u003e Currently, \u003ccode\u003elabels\u003c/code\u003e is the only field that can be updated.",
-                      "format": "google-fieldmask",
-                      "type": "string"
-                    },
-                    "projectId": {
-                      "required": true,
-                      "type": "string",
-                      "location": "path",
-                      "description": "Required The ID of the Google Cloud Platform project that the job belongs to."
-                    },
-                    "jobId": {
-                      "description": "Required The job ID.",
-                      "required": true,
-                      "type": "string",
-                      "location": "path"
-                    }
-                  },
-                  "scopes": [
-                    "https://www.googleapis.com/auth/cloud-platform"
-                  ],
-                  "flatPath": "v1alpha1/projects/{projectId}/regions/{region}/jobs/{jobId}"
+                  "flatPath": "v1alpha1/projects/{projectId}/regions/{region}/jobs/{jobId}:cancel",
+                  "path": "v1alpha1/projects/{projectId}/regions/{region}/jobs/{jobId}:cancel",
+                  "id": "dataproc.projects.regions.jobs.cancel"
                 },
                 "get": {
                   "response": {
                     "$ref": "Job"
                   },
+                  "httpMethod": "GET",
                   "parameterOrder": [
                     "projectId",
                     "region",
                     "jobId"
                   ],
-                  "httpMethod": "GET",
                   "scopes": [
                     "https://www.googleapis.com/auth/cloud-platform"
                   ],
@@ -448,152 +546,87 @@
                   "path": "v1alpha1/projects/{projectId}/regions/{region}/jobs/{jobId}",
                   "id": "dataproc.projects.regions.jobs.get",
                   "description": "Gets the resource representation for a job in a project."
+                },
+                "patch": {
+                  "httpMethod": "PATCH",
+                  "parameterOrder": [
+                    "projectId",
+                    "region",
+                    "jobId"
+                  ],
+                  "response": {
+                    "$ref": "Job"
+                  },
+                  "scopes": [
+                    "https://www.googleapis.com/auth/cloud-platform"
+                  ],
+                  "parameters": {
+                    "region": {
+                      "location": "path",
+                      "description": "Required The Dataproc region in which to handle the request.",
+                      "required": true,
+                      "type": "string"
+                    },
+                    "updateMask": {
+                      "description": "Required Specifies the path, relative to \u003ccode\u003eJob\u003c/code\u003e, of the field to update. For example, to update the labels of a Job the \u003ccode\u003eupdate_mask\u003c/code\u003e parameter would be specified as \u003ccode\u003elabels\u003c/code\u003e, and the PATCH request body would specify the new value. \u003cstrong\u003eNote:\u003c/strong\u003e Currently, \u003ccode\u003elabels\u003c/code\u003e is the only field that can be updated.",
+                      "format": "google-fieldmask",
+                      "type": "string",
+                      "location": "query"
+                    },
+                    "projectId": {
+                      "description": "Required The ID of the Google Cloud Platform project that the job belongs to.",
+                      "required": true,
+                      "type": "string",
+                      "location": "path"
+                    },
+                    "jobId": {
+                      "description": "Required The job ID.",
+                      "required": true,
+                      "type": "string",
+                      "location": "path"
+                    }
+                  },
+                  "flatPath": "v1alpha1/projects/{projectId}/regions/{region}/jobs/{jobId}",
+                  "id": "dataproc.projects.regions.jobs.patch",
+                  "path": "v1alpha1/projects/{projectId}/regions/{region}/jobs/{jobId}",
+                  "description": "Updates a job in a project.",
+                  "request": {
+                    "$ref": "Job"
+                  }
                 }
               }
             }
           }
         }
       }
-    },
-    "operations": {
-      "methods": {
-        "cancel": {
-          "request": {
-            "$ref": "CancelOperationRequest"
-          },
-          "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 may use Operations.GetOperation or other methods to check whether the cancellation succeeded or the operation completed despite cancellation.",
-          "response": {
-            "$ref": "Empty"
-          },
-          "parameterOrder": [
-            "name"
-          ],
-          "httpMethod": "POST",
-          "parameters": {
-            "name": {
-              "description": "The name of the operation resource to be cancelled.",
-              "required": true,
-              "type": "string",
-              "pattern": "^operations/.+$",
-              "location": "path"
-            }
-          },
-          "scopes": [
-            "https://www.googleapis.com/auth/cloud-platform"
-          ],
-          "flatPath": "v1alpha1/operations/{operationsId}:cancel",
-          "path": "v1alpha1/{+name}:cancel",
-          "id": "dataproc.operations.cancel"
-        },
-        "delete": {
-          "httpMethod": "DELETE",
-          "response": {
-            "$ref": "Empty"
-          },
-          "parameterOrder": [
-            "name"
-          ],
-          "parameters": {
-            "name": {
-              "location": "path",
-              "description": "The name of the operation resource to be deleted.",
-              "required": true,
-              "type": "string",
-              "pattern": "^operations/.+$"
-            }
-          },
-          "scopes": [
-            "https://www.googleapis.com/auth/cloud-platform"
-          ],
-          "flatPath": "v1alpha1/operations/{operationsId}",
-          "id": "dataproc.operations.delete",
-          "path": "v1alpha1/{+name}",
-          "description": "Deletes a long-running operation. It indicates the client is no longer interested in the operation result. It does not cancel the operation."
-        },
-        "get": {
-          "flatPath": "v1alpha1/operations/{operationsId}",
-          "id": "dataproc.operations.get",
-          "path": "v1alpha1/{+name}",
-          "description": "Gets the latest state of a long-running operation. Clients may use this method to poll the operation result at intervals as recommended by the API service.",
-          "httpMethod": "GET",
-          "parameterOrder": [
-            "name"
-          ],
-          "response": {
-            "$ref": "Operation"
-          },
-          "scopes": [
-            "https://www.googleapis.com/auth/cloud-platform"
-          ],
-          "parameters": {
-            "name": {
-              "description": "The operation resource name.",
-              "required": true,
-              "type": "string",
-              "pattern": "^operations/.+$",
-              "location": "path"
-            }
-          }
-        },
-        "list": {
-          "description": "Lists operations that match the specified filter in the request. If the server doesn't support this method, it returns google.rpc.Code.UNIMPLEMENTED.",
-          "httpMethod": "GET",
-          "response": {
-            "$ref": "ListOperationsResponse"
-          },
-          "parameterOrder": [
-            "name"
-          ],
-          "scopes": [
-            "https://www.googleapis.com/auth/cloud-platform"
-          ],
-          "parameters": {
-            "filter": {
-              "location": "query",
-              "description": "Required A JSON object that contains filters for the list operation, in the format {\"key1\":\"value1\",\"key2\":\"value2\", ..., }. Possible keys include project_id, cluster_name, and operation_state_matcher.If project_id is set, requests the list of operations that belong to the specified Google Cloud Platform project ID. This key is required.If cluster_name is set, requests the list of operations that were submitted to the specified cluster name. This key is optional.If operation_state_matcher is set, requests the list of operations that match one of the following status options: ALL, ACTIVE, or NON_ACTIVE.",
-              "type": "string"
-            },
-            "name": {
-              "pattern": "^operations$",
-              "location": "path",
-              "description": "The operation collection name.",
-              "required": true,
-              "type": "string"
-            },
-            "pageToken": {
-              "location": "query",
-              "description": "The standard List page token.",
-              "type": "string"
-            },
-            "pageSize": {
-              "location": "query",
-              "description": "The standard List page size.",
-              "format": "int32",
-              "type": "integer"
-            }
-          },
-          "flatPath": "v1alpha1/operations",
-          "id": "dataproc.operations.list",
-          "path": "v1alpha1/{+name}"
-        }
-      }
     }
   },
   "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.",
+      "type": "string",
+      "location": "query"
+    },
+    "pp": {
+      "location": "query",
+      "description": "Pretty-print response.",
+      "type": "boolean",
+      "default": "true"
+    },
+    "bearer_token": {
+      "description": "OAuth bearer token.",
+      "type": "string",
+      "location": "query"
+    },
     "oauth_token": {
       "location": "query",
       "description": "OAuth 2.0 token for the current user.",
       "type": "string"
     },
-    "bearer_token": {
-      "location": "query",
-      "description": "OAuth bearer token.",
-      "type": "string"
-    },
     "upload_protocol": {
-      "location": "query",
       "description": "Upload protocol for media (e.g. \"raw\", \"multipart\").",
-      "type": "string"
+      "type": "string",
+      "location": "query"
     },
     "prettyPrint": {
       "location": "query",
@@ -601,19 +634,22 @@
       "type": "boolean",
       "default": "true"
     },
+    "fields": {
+      "description": "Selector specifying which fields to include in a partial response.",
+      "type": "string",
+      "location": "query"
+    },
     "uploadType": {
       "location": "query",
       "description": "Legacy upload protocol for media (e.g. \"media\", \"multipart\").",
       "type": "string"
     },
-    "fields": {
+    "callback": {
       "location": "query",
-      "description": "Selector specifying which fields to include in a partial response.",
+      "description": "JSONP",
       "type": "string"
     },
     "$.xgafv": {
-      "description": "V1 error format.",
-      "type": "string",
       "enumDescriptions": [
         "v1 error format",
         "v2 error format"
@@ -622,11 +658,8 @@
       "enum": [
         "1",
         "2"
-      ]
-    },
-    "callback": {
-      "location": "query",
-      "description": "JSONP",
+      ],
+      "description": "V1 error format.",
       "type": "string"
     },
     "alt": {
@@ -646,32 +679,284 @@
       "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"
+      "type": "string",
+      "location": "query"
     },
     "access_token": {
       "location": "query",
       "description": "OAuth access token.",
       "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"
-    },
-    "pp": {
-      "description": "Pretty-print response.",
-      "type": "boolean",
-      "default": "true",
-      "location": "query"
     }
   },
   "schemas": {
-    "GceClusterConfiguration": {
-      "description": "Common configuration settings for resources of Google Compute Engine cluster instances, applicable to all instances in the cluster.",
+    "GceConfiguration": {
+      "description": "Deprecated Common configuration settings for resources of Google Compute Engine cluster instances, applicable to all instances in the cluster.",
       "type": "object",
       "properties": {
+        "networkUri": {
+          "description": "Deprecated The Google Compute Engine network to be used for machine communications. Inbound SSH connections are necessary to complete cluster configuration. Example \"compute.googleapis.com/projects/project_id /zones/us-east1-a/default\".",
+          "type": "string"
+        },
+        "serviceAccountScopes": {
+          "description": "Deprecated The service account scopes included in Google Compute Engine instances. Must include devstorage.full_control to enable the Google Cloud Storage connector. Example \"auth.googleapis.com/compute\" and \"auth.googleapis.com/devstorage.full_control\".",
+          "type": "array",
+          "items": {
+            "type": "string"
+          }
+        },
+        "zoneUri": {
+          "description": "Deprecated The zone where the Google Compute Engine cluster will be located. Example: \"compute.googleapis.com/projects/project_id /zones/us-east1-a\".",
+          "type": "string"
+        },
+        "imageUri": {
+          "description": "Deprecated The Google Compute Engine image resource used for cluster instances. Example: \"compute.googleapis.com/projects/debian-cloud /global/images/backports-debian-7-wheezy-v20140904\".",
+          "type": "string"
+        },
+        "machineTypeUri": {
+          "description": "Deprecated The Google Compute Engine machine type used for cluster instances. Example: \"compute.googleapis.com/projects/project_id /zones/us-east1-a/machineTypes/n1-standard-2\".",
+          "type": "string"
+        }
+      },
+      "id": "GceConfiguration"
+    },
+    "SoftwareConfiguration": {
+      "properties": {
+        "properties": {
+          "additionalProperties": {
+            "type": "string"
+          },
+          "description": "Optional The properties to set on daemon configuration files.Property keys are specified in \"prefix:property\" format, such as \"core:fs.defaultFS\". The following are supported prefixes and their mappings:  core - core-site.xml  hdfs - hdfs-site.xml  mapred - mapred-site.xml  yarn - yarn-site.xml  hive - hive-site.xml  pig - pig.properties  spark - spark-defaults.conf",
+          "type": "object"
+        },
+        "imageVersion": {
+          "description": "Optional The version of software inside the cluster. It must match the regular expression 0-9+.0-9+. If unspecified it will default to latest version.",
+          "type": "string"
+        }
+      },
+      "id": "SoftwareConfiguration",
+      "description": "Specifies the selection and configuration of software inside the cluster.",
+      "type": "object"
+    },
+    "PySparkJob": {
+      "properties": {
+        "pythonFileUris": {
+          "description": "Optional HCFS file URIs of Python files to pass to the PySpark framework. Supported file types: .py, .egg, and .zip.",
+          "type": "array",
+          "items": {
+            "type": "string"
+          }
+        },
+        "mainPythonFileUri": {
+          "description": "Required The Hadoop Compatible Filesystem (HCFS) URI of the main Python file to use as the driver. Must be a .py file.",
+          "type": "string"
+        },
+        "archiveUris": {
+          "description": "Optional HCFS URIs of archives to be extracted in the working directory of .jar, .tar, .tar.gz, .tgz, and .zip.",
+          "type": "array",
+          "items": {
+            "type": "string"
+          }
+        },
+        "jarFileUris": {
+          "description": "Optional HCFS URIs of jar files to add to the CLASSPATHs of the Python driver and tasks.",
+          "type": "array",
+          "items": {
+            "type": "string"
+          }
+        },
+        "loggingConfiguration": {
+          "$ref": "LoggingConfiguration",
+          "description": "Optional The runtime log configuration for job execution."
+        },
+        "properties": {
+          "additionalProperties": {
+            "type": "string"
+          },
+          "description": "Optional A mapping of property names to values, used to configure PySpark. Properties that conflict with values set by the Cloud Dataproc API may be overwritten. Can include properties set in /etc/spark/conf/spark-defaults.conf and classes in user code.",
+          "type": "object"
+        },
+        "args": {
+          "description": "Optional The arguments to pass to the driver. Do not include arguments, such as --conf, that can be set as job properties, since a collision may occur that causes an incorrect job submission.",
+          "type": "array",
+          "items": {
+            "type": "string"
+          }
+        },
+        "fileUris": {
+          "description": "Optional HCFS URIs of files to be copied to the working directory of Python drivers and distributed tasks. Useful for naively parallel tasks.",
+          "type": "array",
+          "items": {
+            "type": "string"
+          }
+        }
+      },
+      "id": "PySparkJob",
+      "description": "A Cloud Dataproc job for running PySpark applications on YARN.",
+      "type": "object"
+    },
+    "LoggingConfiguration": {
+      "description": "The runtime logging configuration of the job.",
+      "type": "object",
+      "properties": {
+        "driverLogLevels": {
+          "additionalProperties": {
+            "enum": [
+              "LEVEL_UNSPECIFIED",
+              "ALL",
+              "TRACE",
+              "DEBUG",
+              "INFO",
+              "WARN",
+              "ERROR",
+              "FATAL",
+              "OFF"
+            ],
+            "type": "string"
+          },
+          "description": "The per-package log levels for the driver. This may include 'root' package name to configure rootLogger. Examples:  com.google = FATAL, root = INFO, org.apache = DEBUG",
+          "type": "object"
+        }
+      },
+      "id": "LoggingConfiguration"
+    },
+    "ClusterConfiguration": {
+      "description": "The cluster configuration.",
+      "type": "object",
+      "properties": {
+        "masterName": {
+          "description": "Deprecated The Master's hostname. Dataproc derives the name from cluster_name if not set by user (recommended practice is to let Dataproc derive the name). Derived master name example: hadoop-m.",
+          "type": "string"
+        },
+        "workers": {
+          "description": "Deprecated The list of worker node names. Dataproc derives the names from cluster_name and num_workers if not set by user (recommended practice is to let Dataproc derive the name). Derived worker node name example: hadoop-w-0.",
+          "type": "array",
+          "items": {
+            "type": "string"
+          }
+        },
+        "workerConfiguration": {
+          "description": "Optional The Google Compute Engine configuration settings for worker instances in a cluster.",
+          "$ref": "InstanceGroupConfiguration"
+        },
+        "initializationActions": {
+          "description": "Optional Commands to execute on each node after configuration is completed. By default, executables are run on master and all worker nodes. You can test a node's \u003ccode\u003erole\u003c/code\u003e metadata to run an executable on a master or worker node, as shown below:\nROLE=$(/usr/share/google/get_metadata_value attributes/role)\nif [[ \"${ROLE}\" == 'Master' ]]; then\n  ... master specific actions ...\nelse\n  ... worker specific actions ...\nfi\n",
+          "type": "array",
+          "items": {
+            "$ref": "NodeInitializationAction"
+          }
+        },
+        "softwareConfiguration": {
+          "description": "Optional The configuration settings for software inside the cluster.",
+          "$ref": "SoftwareConfiguration"
+        },
+        "gceClusterConfiguration": {
+          "$ref": "GceClusterConfiguration",
+          "description": "Optional The shared Google Compute Engine configuration settings for all instances in a cluster."
+        },
+        "configurationBucket": {
+          "description": "Optional A Google Cloud Storage staging bucket used for sharing generated SSH keys and configuration. If you do not specify a staging bucket, Cloud Dataproc will determine an appropriate Cloud Storage location (US, ASIA, or EU) for your cluster's staging bucket according to the Google Compute Engine zone where your cluster is deployed, then it will create and manage this project-level, per-location bucket for you.",
+          "type": "string"
+        },
+        "numWorkers": {
+          "description": "Deprecated The number of worker nodes in the cluster.",
+          "format": "int32",
+          "type": "integer"
+        },
+        "masterDiskConfiguration": {
+          "description": "Deprecated The configuration settings of master node disk options.",
+          "$ref": "DiskConfiguration"
+        },
+        "gceConfiguration": {
+          "$ref": "GceConfiguration",
+          "description": "Deprecated The Google Compute Engine configuration settings for cluster resources."
+        },
+        "workerDiskConfiguration": {
+          "$ref": "DiskConfiguration",
+          "description": "Deprecated The configuration settings of worker node disk options."
+        },
+        "masterConfiguration": {
+          "description": "Optional The Google Compute Engine configuration settings for the master instance in a cluster.",
+          "$ref": "InstanceGroupConfiguration"
+        },
+        "secondaryWorkerConfiguration": {
+          "description": "Optional The Google Compute Engine configuration settings for additional worker instances in a cluster.",
+          "$ref": "InstanceGroupConfiguration"
+        }
+      },
+      "id": "ClusterConfiguration"
+    },
+    "ClusterMetrics": {
+      "description": "Contains cluster daemon metrics, such as HDFS and YARN stats.",
+      "type": "object",
+      "properties": {
+        "yarnMetrics": {
+          "additionalProperties": {
+            "format": "int64",
+            "type": "string"
+          },
+          "description": "The YARN metrics.",
+          "type": "object"
+        },
+        "hdfsMetrics": {
+          "additionalProperties": {
+            "format": "int64",
+            "type": "string"
+          },
+          "description": "The HDFS metrics.",
+          "type": "object"
+        }
+      },
+      "id": "ClusterMetrics"
+    },
+    "InstanceGroupConfiguration": {
+      "properties": {
+        "managedGroupConfiguration": {
+          "$ref": "ManagedGroupConfiguration",
+          "description": "Output-only The configuration for Google Compute Engine Instance Group Manager that manages this group. This is only used for preemptible instance groups."
+        },
+        "instanceNames": {
+          "description": "The list of instance names. Dataproc derives the names from cluster_name, num_instances, and the instance group if not set by user (recommended practice is to let Dataproc derive the name).",
+          "type": "array",
+          "items": {
+            "type": "string"
+          }
+        },
+        "accelerators": {
+          "description": "Optional The Google Compute Engine accelerator configuration for these instances.",
+          "type": "array",
+          "items": {
+            "$ref": "AcceleratorConfiguration"
+          }
+        },
+        "numInstances": {
+          "description": "The number of VM instances in the instance group. For master instance groups, must be set to 1.",
+          "format": "int32",
+          "type": "integer"
+        },
+        "diskConfiguration": {
+          "$ref": "DiskConfiguration",
+          "description": "Disk option configuration settings."
+        },
+        "isPreemptible": {
+          "description": "Specifies that this instance group contains Preemptible Instances.",
+          "type": "boolean"
+        },
+        "imageUri": {
+          "description": "Output-only The Google Compute Engine image resource used for cluster instances. Inferred from SoftwareConfiguration.image_version. Example: \"compute.googleapis.com/projects/debian-cloud /global/images/backports-debian-7-wheezy-v20140904\".",
+          "type": "string"
+        },
+        "machineTypeUri": {
+          "description": "The Google Compute Engine machine type used for cluster instances. Example: \"compute.googleapis.com/projects/project_id /zones/us-east1-a/machineTypes/n1-standard-2\".",
+          "type": "string"
+        }
+      },
+      "id": "InstanceGroupConfiguration",
+      "description": "The configuration settings for Google Compute Engine resources in an instance group, such as a master or worker group.",
+      "type": "object"
+    },
+    "GceClusterConfiguration": {
+      "properties": {
         "metadata": {
           "additionalProperties": {
             "type": "string"
@@ -714,7 +999,9 @@
           "type": "string"
         }
       },
-      "id": "GceClusterConfiguration"
+      "id": "GceClusterConfiguration",
+      "description": "Common configuration settings for resources of Google Compute Engine cluster instances, applicable to all instances in the cluster.",
+      "type": "object"
     },
     "CancelOperationRequest": {
       "description": "The request message for Operations.CancelOperation.",
@@ -723,36 +1010,18 @@
       "id": "CancelOperationRequest"
     },
     "DiagnoseClusterOutputLocation": {
-      "description": "The location where output from diagnostic command can be found.",
-      "type": "object",
       "properties": {
         "outputUri": {
           "description": "Output-only The Google Cloud Storage URI of the diagnostic output. This will be a plain text file with summary of collected diagnostics.",
           "type": "string"
         }
       },
-      "id": "DiagnoseClusterOutputLocation"
+      "id": "DiagnoseClusterOutputLocation",
+      "description": "The location where output from diagnostic command can be found.",
+      "type": "object"
     },
     "Operation": {
-      "description": "An asynchronous operation in a project that runs over a given cluster. Used to track the progress of a user request that is running asynchronously. Examples include creating a cluster, updating a cluster, and deleting a cluster.",
-      "type": "object",
       "properties": {
-        "name": {
-          "description": "The name of the operation resource, in the format projects/project_id/operations/operation_id",
-          "type": "string"
-        },
-        "error": {
-          "description": "The error result of the operation in case of failure.",
-          "$ref": "Status"
-        },
-        "metadata": {
-          "additionalProperties": {
-            "description": "Properties of the object. Contains field @type with type URL.",
-            "type": "any"
-          },
-          "description": "Service-specific metadata associated with the operation.",
-          "type": "object"
-        },
         "done": {
           "description": "Indicates if the operation is done. If true, the operation is complete and the result is available. If false, the operation is still in progress.",
           "type": "boolean"
@@ -764,23 +1033,33 @@
           },
           "description": "The operation response. If the called method returns no data on success, the response is google.protobuf.Empty. If the called method is Get,Create or Update, the response is the resource. For all other methods, the response type is a concatenation of the method name and \"Response\". For example, if the called method is TakeSnapshot(), the response type is TakeSnapshotResponse.",
           "type": "object"
+        },
+        "name": {
+          "description": "The name of the operation resource, in the format projects/project_id/operations/operation_id",
+          "type": "string"
+        },
+        "error": {
+          "$ref": "Status",
+          "description": "The error result of the operation in case of failure."
+        },
+        "metadata": {
+          "additionalProperties": {
+            "description": "Properties of the object. Contains field @type with type URL.",
+            "type": "any"
+          },
+          "description": "Service-specific metadata associated with the operation.",
+          "type": "object"
         }
       },
-      "id": "Operation"
+      "id": "Operation",
+      "description": "An asynchronous operation in a project that runs over a given cluster. Used to track the progress of a user request that is running asynchronously. Examples include creating a cluster, updating a cluster, and deleting a cluster.",
+      "type": "object"
     },
     "OperationStatus": {
-      "id": "OperationStatus",
       "description": "The status of the operation.",
       "type": "object",
       "properties": {
-        "stateStartTime": {
-          "description": "The time this state was entered.",
-          "format": "google-datetime",
-          "type": "string"
-        },
         "state": {
-          "description": "A message containing the operation state.",
-          "type": "string",
           "enumDescriptions": [
             "Unused.",
             "The operation has been created.",
@@ -792,7 +1071,9 @@
             "PENDING",
             "RUNNING",
             "DONE"
-          ]
+          ],
+          "description": "A message containing the operation state.",
+          "type": "string"
         },
         "details": {
           "description": "A message containing any operation metadata details.",
@@ -801,12 +1082,16 @@
         "innerState": {
           "description": "A message containing the detailed operation state.",
           "type": "string"
+        },
+        "stateStartTime": {
+          "description": "The time this state was entered.",
+          "format": "google-datetime",
+          "type": "string"
         }
-      }
+      },
+      "id": "OperationStatus"
     },
     "JobReference": {
-      "description": "Encapsulates the full scoping used to reference a job.",
-      "type": "object",
       "properties": {
         "projectId": {
           "description": "Required The ID of the Google Cloud Platform project that the job belongs to.",
@@ -817,45 +1102,47 @@
           "type": "string"
         }
       },
-      "id": "JobReference"
-    },
-    "SubmitJobRequest": {
-      "properties": {
-        "job": {
-          "$ref": "Job",
-          "description": "Required The job resource."
-        }
-      },
-      "id": "SubmitJobRequest",
-      "description": "A job submission request.",
+      "id": "JobReference",
+      "description": "Encapsulates the full scoping used to reference a job.",
       "type": "object"
     },
-    "Status": {
+    "SubmitJobRequest": {
+      "description": "A job submission request.",
+      "type": "object",
       "properties": {
+        "job": {
+          "description": "Required The job resource.",
+          "$ref": "Job"
+        }
+      },
+      "id": "SubmitJobRequest"
+    },
+    "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). The error model is designed to be:\nSimple to use and understand for most users\nFlexible enough to meet unexpected needsOverviewThe Status message contains three pieces of data: error code, error message, and error details. The error code should be an enum value of google.rpc.Code, but it may accept additional error codes if needed. The error message should be a developer-facing English message that helps developers understand and resolve the error. If a localized user-facing error message is needed, put the localized message in the error details or localize it in the client. The optional error details may contain arbitrary information about the error. There is a predefined set of error detail types in the package google.rpc which can be used for common error conditions.Language mappingThe Status message is the logical representation of the error model, but it is not necessarily the actual wire format. When the Status message is exposed in different client libraries and different wire protocols, it can be mapped differently. For example, it will likely be mapped to some exceptions in Java, but more likely mapped to some error codes in C.Other usesThe error model and the Status message can be used in a variety of environments, either with or without APIs, to provide a consistent developer experience across different environments.Example uses of this error model include:\nPartial errors. If a service needs to return partial errors to the client, it may embed the Status in the normal response to indicate the partial errors.\nWorkflow errors. A typical workflow has multiple steps. Each step may have a Status message for error reporting purpose.\nBatch operations. If a client uses batch request and batch response, the Status message should be used directly inside batch response, one for each error sub-response.\nAsynchronous operations. If an API call embeds asynchronous operation results in its response, the status of those operations should be represented directly using the Status message.\nLogging. If some API errors are stored in logs, the message Status could be used directly after any stripping needed for security/privacy reasons.",
+      "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"
+        },
         "details": {
           "description": "A list of messages that carry the error details. There will be 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"
-            }
+            },
+            "type": "object"
           }
         },
         "code": {
           "description": "The status code, which should be an enum value of google.rpc.Code.",
           "format": "int32",
           "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"
         }
       },
-      "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). The error model is designed to be:\nSimple to use and understand for most users\nFlexible enough to meet unexpected needsOverviewThe Status message contains three pieces of data: error code, error message, and error details. The error code should be an enum value of google.rpc.Code, but it may accept additional error codes if needed. The error message should be a developer-facing English message that helps developers understand and resolve the error. If a localized user-facing error message is needed, put the localized message in the error details or localize it in the client. The optional error details may contain arbitrary information about the error. There is a predefined set of error detail types in the package google.rpc which can be used for common error conditions.Language mappingThe Status message is the logical representation of the error model, but it is not necessarily the actual wire format. When the Status message is exposed in different client libraries and different wire protocols, it can be mapped differently. For example, it will likely be mapped to some exceptions in Java, but more likely mapped to some error codes in C.Other usesThe error model and the Status message can be used in a variety of environments, either with or without APIs, to provide a consistent developer experience across different environments.Example uses of this error model include:\nPartial errors. If a service needs to return partial errors to the client, it may embed the Status in the normal response to indicate the partial errors.\nWorkflow errors. A typical workflow has multiple steps. Each step may have a Status message for error reporting purpose.\nBatch operations. If a client uses batch request and batch response, the Status message should be used directly inside batch response, one for each error sub-response.\nAsynchronous operations. If an API call embeds asynchronous operation results in its response, the status of those operations should be represented directly using the Status message.\nLogging. If some API errors are stored in logs, the message Status could be used directly after any stripping needed for security/privacy reasons.",
-      "type": "object"
+      "id": "Status"
     },
     "JobScheduling": {
       "description": "Job scheduling options.Beta Feature: These options are available for testing purposes only. They may be changed before final release.",
@@ -869,6 +1156,22 @@
       },
       "id": "JobScheduling"
     },
+    "NodeInitializationAction": {
+      "properties": {
+        "executableFile": {
+          "description": "Required Google Cloud Storage URI of executable file.",
+          "type": "string"
+        },
+        "executionTimeout": {
+          "description": "Optional Amount of time executable has to complete. Default is 10 minutes. Cluster creation fails with an explanatory error message (the name of the executable that caused the error and the exceeded timeout period) if the executable is not completed at end of the timeout period.",
+          "format": "google-duration",
+          "type": "string"
+        }
+      },
+      "id": "NodeInitializationAction",
+      "description": "Specifies an executable to run on a fully configured node and a timeout period for executable completion.",
+      "type": "object"
+    },
     "ListJobsResponse": {
       "description": "A response to a request to list jobs in a project.",
       "type": "object",
@@ -887,39 +1190,21 @@
       },
       "id": "ListJobsResponse"
     },
-    "NodeInitializationAction": {
-      "id": "NodeInitializationAction",
-      "description": "Specifies an executable to run on a fully configured node and a timeout period for executable completion.",
-      "type": "object",
-      "properties": {
-        "executionTimeout": {
-          "description": "Optional Amount of time executable has to complete. Default is 10 minutes. Cluster creation fails with an explanatory error message (the name of the executable that caused the error and the exceeded timeout period) if the executable is not completed at end of the timeout period.",
-          "format": "google-duration",
-          "type": "string"
-        },
-        "executableFile": {
-          "description": "Required Google Cloud Storage URI of executable file.",
-          "type": "string"
-        }
-      }
-    },
     "CancelJobRequest": {
-      "description": "A request to cancel a job.",
-      "type": "object",
       "properties": {},
-      "id": "CancelJobRequest"
+      "id": "CancelJobRequest",
+      "description": "A request to cancel a job.",
+      "type": "object"
     },
     "SparkSqlJob": {
-      "description": "A Cloud Dataproc job for running Spark SQL queries.",
-      "type": "object",
       "properties": {
         "queryFileUri": {
-          "type": "string",
-          "description": "The HCFS URI of the script that contains SQL queries."
+          "description": "The HCFS URI of the script that contains SQL queries.",
+          "type": "string"
         },
         "queryList": {
-          "description": "A list of queries.",
-          "$ref": "QueryList"
+          "$ref": "QueryList",
+          "description": "A list of queries."
         },
         "scriptVariables": {
           "additionalProperties": {
@@ -936,47 +1221,49 @@
           }
         },
         "loggingConfiguration": {
-          "$ref": "LoggingConfiguration",
-          "description": "Optional The runtime log configuration for job execution."
+          "description": "Optional The runtime log configuration for job execution.",
+          "$ref": "LoggingConfiguration"
         },
         "properties": {
-          "type": "object",
           "additionalProperties": {
             "type": "string"
           },
-          "description": "Optional A mapping of property names to values, used to configure Spark SQL's SparkConf. Properties that conflict with values set by the Cloud Dataproc API may be overwritten."
+          "description": "Optional A mapping of property names to values, used to configure Spark SQL's SparkConf. Properties that conflict with values set by the Cloud Dataproc API may be overwritten.",
+          "type": "object"
         }
       },
-      "id": "SparkSqlJob"
+      "id": "SparkSqlJob",
+      "description": "A Cloud Dataproc job for running Spark SQL queries.",
+      "type": "object"
     },
     "Cluster": {
       "description": "Describes the identifying information, configuration, and status of a cluster of Google Compute Engine instances.",
       "type": "object",
       "properties": {
         "configuration": {
-          "description": "Required The cluster configuration. It may differ from a user's initial configuration due to Cloud Dataproc setting of default values and updating clusters.",
-          "$ref": "ClusterConfiguration"
+          "$ref": "ClusterConfiguration",
+          "description": "Required The cluster configuration. It may differ from a user's initial configuration due to Cloud Dataproc setting of default values and updating clusters."
+        },
+        "labels": {
+          "additionalProperties": {
+            "type": "string"
+          },
+          "description": "Optional The labels to associate with this cluster.Label keys must be between 1 and 63 characters long, and must conform to the following PCRE regular expression: \\p{Ll}\\p{Lo}{0,62}Label values must be between 1 and 63 characters long, and must conform to the following PCRE regular expression: \\p{Ll}\\p{Lo}\\p{N}_-{0,63}No more than 64 labels can be associated with a given cluster.",
+          "type": "object"
         },
         "createTime": {
           "description": "Output-only The timestamp of cluster creation.",
           "format": "google-datetime",
           "type": "string"
         },
-        "labels": {
-          "description": "Optional The labels to associate with this cluster.Label keys must be between 1 and 63 characters long, and must conform to the following PCRE regular expression: \\p{Ll}\\p{Lo}{0,62}Label values must be between 1 and 63 characters long, and must conform to the following PCRE regular expression: \\p{Ll}\\p{Lo}\\p{N}_-{0,63}No more than 64 labels can be associated with a given cluster.",
-          "type": "object",
-          "additionalProperties": {
-            "type": "string"
-          }
+        "status": {
+          "description": "Output-only Cluster status.",
+          "$ref": "ClusterStatus"
         },
         "metrics": {
           "description": "Contains cluster daemon metrics such as HDFS and YARN stats.",
           "$ref": "ClusterMetrics"
         },
-        "status": {
-          "description": "Output-only Cluster status.",
-          "$ref": "ClusterStatus"
-        },
         "statusHistory": {
           "description": "Output-only Previous cluster statuses.",
           "type": "array",
@@ -984,14 +1271,14 @@
             "$ref": "ClusterStatus"
           }
         },
-        "clusterName": {
-          "description": "Required The cluster name. Cluster names within a project must be unique. Names from deleted clusters can be reused.",
-          "type": "string"
-        },
         "clusterUuid": {
           "description": "Output-only A cluster UUID (Unique Universal Identifier). Cloud Dataproc generates this value when it creates the cluster.",
           "type": "string"
         },
+        "clusterName": {
+          "description": "Required The cluster name. Cluster names within a project must be unique. Names from deleted clusters can be reused.",
+          "type": "string"
+        },
         "projectId": {
           "description": "Required The Google Cloud Platform project ID that the cluster belongs to.",
           "type": "string"
@@ -1003,38 +1290,27 @@
       "description": "The response message for Operations.ListOperations.",
       "type": "object",
       "properties": {
+        "nextPageToken": {
+          "description": "The standard List next-page token.",
+          "type": "string"
+        },
         "operations": {
           "description": "A list of operations that match the specified filter in the request.",
           "type": "array",
           "items": {
             "$ref": "Operation"
           }
-        },
-        "nextPageToken": {
-          "description": "The standard List next-page token.",
-          "type": "string"
         }
       },
       "id": "ListOperationsResponse"
     },
     "OperationMetadata": {
-      "description": "Metadata describing the operation.",
-      "type": "object",
       "properties": {
-        "operationType": {
-          "description": "Output-only The operation type.",
+        "details": {
+          "description": "A message containing any operation metadata details.",
           "type": "string"
         },
-        "description": {
-          "description": "Output-only Short description of operation.",
-          "type": "string"
-        },
-        "status": {
-          "description": "Output-only Current operation status.",
-          "$ref": "OperationStatus"
-        },
         "state": {
-          "type": "string",
           "enumDescriptions": [
             "Unused.",
             "The operation has been created.",
@@ -1047,20 +1323,17 @@
             "RUNNING",
             "DONE"
           ],
-          "description": "A message containing the operation state."
-        },
-        "details": {
-          "description": "A message containing any operation metadata details.",
-          "type": "string"
-        },
-        "clusterUuid": {
-          "description": "Cluster UUId for the operation.",
+          "description": "A message containing the operation state.",
           "type": "string"
         },
         "clusterName": {
           "description": "Name of the cluster for the operation.",
           "type": "string"
         },
+        "clusterUuid": {
+          "description": "Cluster UUId for the operation.",
+          "type": "string"
+        },
         "innerState": {
           "description": "A message containing the detailed operation state.",
           "type": "string"
@@ -1093,9 +1366,23 @@
           "items": {
             "$ref": "OperationStatus"
           }
+        },
+        "operationType": {
+          "description": "Output-only The operation type.",
+          "type": "string"
+        },
+        "description": {
+          "description": "Output-only Short description of operation.",
+          "type": "string"
+        },
+        "status": {
+          "description": "Output-only Current operation status.",
+          "$ref": "OperationStatus"
         }
       },
-      "id": "OperationMetadata"
+      "id": "OperationMetadata",
+      "description": "Metadata describing the operation.",
+      "type": "object"
     },
     "JobPlacement": {
       "description": "Cloud Dataproc job configuration.",
@@ -1112,52 +1399,20 @@
       },
       "id": "JobPlacement"
     },
-    "ClusterStatus": {
-      "description": "The status of a cluster and its instances.",
-      "type": "object",
-      "properties": {
-        "stateStartTime": {
-          "description": "Time when this state was entered.",
-          "format": "google-datetime",
-          "type": "string"
-        },
-        "detail": {
-          "description": "Optional details of cluster's state.",
-          "type": "string"
-        },
-        "state": {
-          "enumDescriptions": [
-            "The cluster state is unknown.",
-            "The cluster is being created and set up. It is not ready for use.",
-            "The cluster is currently running and healthy. It is ready for use.",
-            "The cluster encountered an error. It is not ready for use.",
-            "The cluster is being deleted. It cannot be used.",
-            "The cluster is being updated. It continues to accept and process jobs."
-          ],
-          "enum": [
-            "UNKNOWN",
-            "CREATING",
-            "RUNNING",
-            "ERROR",
-            "DELETING",
-            "UPDATING"
-          ],
-          "description": "The cluster's state.",
-          "type": "string"
-        }
-      },
-      "id": "ClusterStatus"
-    },
     "PigJob": {
       "properties": {
+        "continueOnFailure": {
+          "description": "Optional Whether to continue executing queries if a query fails. The default value is false. Setting to true can be useful when executing independent parallel queries.",
+          "type": "boolean"
+        },
+        "queryList": {
+          "description": "A list of queries.",
+          "$ref": "QueryList"
+        },
         "queryFileUri": {
           "description": "The HCFS URI of the script that contains the Pig queries.",
           "type": "string"
         },
-        "queryList": {
-          "$ref": "QueryList",
-          "description": "A list of queries."
-        },
         "jarFileUris": {
           "description": "Optional HCFS URIs of jar files to add to the CLASSPATH of the Pig Client and Hadoop MapReduce (MR) tasks. Can contain Pig UDFs.",
           "type": "array",
@@ -1177,21 +1432,67 @@
           "$ref": "LoggingConfiguration"
         },
         "properties": {
-          "type": "object",
           "additionalProperties": {
             "type": "string"
           },
-          "description": "Optional A mapping of property names to values, used to configure Pig. Properties that conflict with values set by the Cloud Dataproc API may be overwritten. Can include properties set in /etc/hadoop/conf/*-site.xml, /etc/pig/conf/pig.properties, and classes in user code."
-        },
-        "continueOnFailure": {
-          "description": "Optional Whether to continue executing queries if a query fails. The default value is false. Setting to true can be useful when executing independent parallel queries.",
-          "type": "boolean"
+          "description": "Optional A mapping of property names to values, used to configure Pig. Properties that conflict with values set by the Cloud Dataproc API may be overwritten. Can include properties set in /etc/hadoop/conf/*-site.xml, /etc/pig/conf/pig.properties, and classes in user code.",
+          "type": "object"
         }
       },
       "id": "PigJob",
       "description": "A Cloud Dataproc job for running Pig queries on YARN.",
       "type": "object"
     },
+    "ClusterStatus": {
+      "properties": {
+        "state": {
+          "enum": [
+            "UNKNOWN",
+            "CREATING",
+            "RUNNING",
+            "ERROR",
+            "DELETING",
+            "UPDATING"
+          ],
+          "description": "The cluster's state.",
+          "type": "string",
+          "enumDescriptions": [
+            "The cluster state is unknown.",
+            "The cluster is being created and set up. It is not ready for use.",
+            "The cluster is currently running and healthy. It is ready for use.",
+            "The cluster encountered an error. It is not ready for use.",
+            "The cluster is being deleted. It cannot be used.",
+            "The cluster is being updated. It continues to accept and process jobs."
+          ]
+        },
+        "stateStartTime": {
+          "description": "Time when this state was entered.",
+          "format": "google-datetime",
+          "type": "string"
+        },
+        "substate": {
+          "enum": [
+            "UNSPECIFIED",
+            "UNHEALTHY",
+            "STALE_STATUS"
+          ],
+          "description": "Output-only Additional state information that includes status reported by the agent.",
+          "type": "string",
+          "enumDescriptions": [
+            "",
+            "The cluster is known to be in an unhealthy state (for example, critical daemons are not running or HDFS capacity is exhausted).Applies to RUNNING state.",
+            "The agent-reported status is out of date (may occur if Cloud Dataproc loses communication with Agent).Applies to RUNNING state."
+          ]
+        },
+        "detail": {
+          "description": "Optional details of cluster's state.",
+          "type": "string"
+        }
+      },
+      "id": "ClusterStatus",
+      "description": "The status of a cluster and its instances.",
+      "type": "object"
+    },
     "AcceleratorConfiguration": {
       "description": "Specifies the type and number of accelerator cards attached to the instances of an instance group (see GPUs on Compute Engine).",
       "type": "object",
@@ -1209,6 +1510,8 @@
       "id": "AcceleratorConfiguration"
     },
     "ManagedGroupConfiguration": {
+      "description": "Specifies the resources used to actively manage an instance group.",
+      "type": "object",
       "properties": {
         "instanceGroupManagerName": {
           "description": "Output-only The name of Instance Group Manager managing this group.",
@@ -1219,9 +1522,7 @@
           "type": "string"
         }
       },
-      "id": "ManagedGroupConfiguration",
-      "description": "Specifies the resources used to actively manage an instance group.",
-      "type": "object"
+      "id": "ManagedGroupConfiguration"
     },
     "ListClustersResponse": {
       "description": "The list of all clusters in a project.",
@@ -1241,112 +1542,25 @@
       },
       "id": "ListClustersResponse"
     },
-    "Job": {
-      "description": "A Cloud Dataproc job resource.",
-      "type": "object",
+    "SparkJob": {
       "properties": {
-        "placement": {
-          "$ref": "JobPlacement",
-          "description": "Required Job information, including how, when, and where to run the job."
+        "jarFileUris": {
+          "description": "Optional HCFS URIs of jar files to add to the CLASSPATHs of the Spark driver and tasks.",
+          "type": "array",
+          "items": {
+            "type": "string"
+          }
         },
-        "status": {
-          "$ref": "JobStatus",
-          "description": "Output-only The job status. Additional application-specific status information may be contained in the \u003ccode\u003etype_job\u003c/code\u003e and \u003ccode\u003eyarn_applications\u003c/code\u003e fields."
+        "loggingConfiguration": {
+          "$ref": "LoggingConfiguration",
+          "description": "Optional The runtime log configuration for job execution."
         },
-        "driverControlFilesUri": {
-          "description": "Output-only If present, the location of miscellaneous control files which may be used as part of job setup and handling. If not present, control files may be placed in the same location as driver_output_uri.",
-          "type": "string"
-        },
-        "submittedBy": {
-          "description": "Output-only The email address of the user submitting the job. For jobs submitted on the cluster, the address is \u003ccode\u003eusername@hostname\u003c/code\u003e.",
-          "type": "string"
-        },
-        "scheduling": {
-          "description": "Optional Job scheduling configuration.",
-          "$ref": "JobScheduling"
-        },
-        "pigJob": {
-          "description": "Job is a Pig job.",
-          "$ref": "PigJob"
-        },
-        "driverOutputUri": {
-          "description": "Output-only A URI pointing to the location of the mixed stdout/stderr of the job's driver program&mdash;for example, \u003ccode\u003egs://sysbucket123/foo-cluster/jobid-123/driver/output\u003c/code\u003e.",
-          "type": "string"
-        },
-        "hiveJob": {
-          "$ref": "HiveJob",
-          "description": "Job is a Hive job."
-        },
-        "labels": {
-          "type": "object",
+        "properties": {
           "additionalProperties": {
             "type": "string"
           },
-          "description": "Optional The labels to associate with this job.Label keys must be between 1 and 63 characters long, and must conform to the following regular expression: \\p{Ll}\\p{Lo}{0,62}Label values must be between 1 and 63 characters long, and must conform to the following regular expression: \\p{Ll}\\p{Lo}\\p{N}_-{0,63}No more than 64 labels can be associated with a given job."
-        },
-        "driverOutputResourceUri": {
-          "description": "Output-only A URI pointing to the location of the stdout of the job's driver program.",
-          "type": "string"
-        },
-        "sparkJob": {
-          "description": "Job is a Spark job.",
-          "$ref": "SparkJob"
-        },
-        "sparkSqlJob": {
-          "$ref": "SparkSqlJob",
-          "description": "Job is a SparkSql job."
-        },
-        "statusHistory": {
-          "description": "Output-only The previous job status.",
-          "type": "array",
-          "items": {
-            "$ref": "JobStatus"
-          }
-        },
-        "yarnApplications": {
-          "description": "Output-only The collection of Yarn applications spun up by this job.",
-          "type": "array",
-          "items": {
-            "$ref": "YarnApplication"
-          }
-        },
-        "pysparkJob": {
-          "$ref": "PySparkJob",
-          "description": "Job is a Pyspark job."
-        },
-        "reference": {
-          "$ref": "JobReference",
-          "description": "Optional The fully-qualified reference to the job, which can be used to obtain the equivalent REST path of the job resource. If this property is not specified when a job is created, the server generates a \u003ccode\u003ejob_id\u003c/code\u003e."
-        },
-        "interactive": {
-          "description": "Optional If set to true, then the driver's stdin will be kept open and driver_input_uri will be set to provide a path at which additional input can be sent to the driver.",
-          "type": "boolean"
-        },
-        "driverInputResourceUri": {
-          "description": "Output-only A URI pointing to the location of the stdin of the job's driver program, only set if the job is interactive.",
-          "type": "string"
-        },
-        "hadoopJob": {
-          "$ref": "HadoopJob",
-          "description": "Job is a Hadoop job."
-        }
-      },
-      "id": "Job"
-    },
-    "SparkJob": {
-      "description": "A Cloud Dataproc job for running Spark applications on YARN.",
-      "type": "object",
-      "properties": {
-        "loggingConfiguration": {
-          "description": "Optional The runtime log configuration for job execution.",
-          "$ref": "LoggingConfiguration"
-        },
-        "properties": {
           "description": "Optional A mapping of property names to values, used to configure Spark. Properties that conflict with values set by the Cloud Dataproc API may be overwritten. Can include properties set in /etc/spark/conf/spark-defaults.conf and classes in user code.",
-          "type": "object",
-          "additionalProperties": {
-            "type": "string"
-          }
+          "type": "object"
         },
         "args": {
           "description": "Optional The arguments to pass to the driver. Do not include arguments, such as --conf, that can be set as job properties, since a collision may occur that causes an incorrect job submission.",
@@ -1356,11 +1570,11 @@
           }
         },
         "fileUris": {
+          "description": "Optional HCFS URIs of files to be copied to the working directory of Spark drivers and distributed tasks. Useful for naively parallel tasks.",
           "type": "array",
           "items": {
             "type": "string"
-          },
-          "description": "Optional HCFS URIs of files to be copied to the working directory of Spark drivers and distributed tasks. Useful for naively parallel tasks."
+          }
         },
         "mainClass": {
           "description": "The name of the driver's main class. The jar file that contains the class must be in the default CLASSPATH or specified in jar_file_uris.",
@@ -1376,32 +1590,119 @@
         "mainJarFileUri": {
           "description": "The Hadoop Compatible Filesystem (HCFS) URI of the jar file that contains the main class.",
           "type": "string"
-        },
-        "jarFileUris": {
-          "description": "Optional HCFS URIs of jar files to add to the CLASSPATHs of the Spark driver and tasks.",
-          "type": "array",
-          "items": {
-            "type": "string"
-          }
         }
       },
-      "id": "SparkJob"
+      "id": "SparkJob",
+      "description": "A Cloud Dataproc job for running Spark applications on YARN.",
+      "type": "object"
     },
-    "JobStatus": {
-      "description": "Cloud Dataproc job status.",
+    "Job": {
+      "description": "A Cloud Dataproc job resource.",
       "type": "object",
       "properties": {
-        "startTime": {
-          "description": "The time when the server started the job.",
-          "format": "google-datetime",
+        "interactive": {
+          "description": "Optional If set to true, then the driver's stdin will be kept open and driver_input_uri will be set to provide a path at which additional input can be sent to the driver.",
+          "type": "boolean"
+        },
+        "driverInputResourceUri": {
+          "description": "Output-only A URI pointing to the location of the stdin of the job's driver program, only set if the job is interactive.",
           "type": "string"
         },
-        "insertTime": {
-          "type": "string",
-          "description": "The time of the job request.",
-          "format": "google-datetime"
+        "hadoopJob": {
+          "description": "Job is a Hadoop job.",
+          "$ref": "HadoopJob"
         },
+        "status": {
+          "description": "Output-only The job status. Additional application-specific status information may be contained in the \u003ccode\u003etype_job\u003c/code\u003e and \u003ccode\u003eyarn_applications\u003c/code\u003e fields.",
+          "$ref": "JobStatus"
+        },
+        "placement": {
+          "description": "Required Job information, including how, when, and where to run the job.",
+          "$ref": "JobPlacement"
+        },
+        "driverControlFilesUri": {
+          "description": "Output-only If present, the location of miscellaneous control files which may be used as part of job setup and handling. If not present, control files may be placed in the same location as driver_output_uri.",
+          "type": "string"
+        },
+        "submittedBy": {
+          "description": "Output-only The email address of the user submitting the job. For jobs submitted on the cluster, the address is \u003ccode\u003eusername@hostname\u003c/code\u003e.",
+          "type": "string"
+        },
+        "scheduling": {
+          "description": "Optional Job scheduling configuration.",
+          "$ref": "JobScheduling"
+        },
+        "pigJob": {
+          "$ref": "PigJob",
+          "description": "Job is a Pig job."
+        },
+        "driverOutputUri": {
+          "description": "Output-only A URI pointing to the location of the mixed stdout/stderr of the job's driver program&mdash;for example, \u003ccode\u003egs://sysbucket123/foo-cluster/jobid-123/driver/output\u003c/code\u003e.",
+          "type": "string"
+        },
+        "hiveJob": {
+          "$ref": "HiveJob",
+          "description": "Job is a Hive job."
+        },
+        "labels": {
+          "additionalProperties": {
+            "type": "string"
+          },
+          "description": "Optional The labels to associate with this job.Label keys must be between 1 and 63 characters long, and must conform to the following regular expression: \\p{Ll}\\p{Lo}{0,62}Label values must be between 1 and 63 characters long, and must conform to the following regular expression: \\p{Ll}\\p{Lo}\\p{N}_-{0,63}No more than 64 labels can be associated with a given job.",
+          "type": "object"
+        },
+        "driverOutputResourceUri": {
+          "description": "Output-only A URI pointing to the location of the stdout of the job's driver program.",
+          "type": "string"
+        },
+        "sparkSqlJob": {
+          "description": "Job is a SparkSql job.",
+          "$ref": "SparkSqlJob"
+        },
+        "statusHistory": {
+          "description": "Output-only The previous job status.",
+          "type": "array",
+          "items": {
+            "$ref": "JobStatus"
+          }
+        },
+        "sparkJob": {
+          "description": "Job is a Spark job.",
+          "$ref": "SparkJob"
+        },
+        "yarnApplications": {
+          "description": "Output-only The collection of Yarn applications spun up by this job.",
+          "type": "array",
+          "items": {
+            "$ref": "YarnApplication"
+          }
+        },
+        "pysparkJob": {
+          "$ref": "PySparkJob",
+          "description": "Job is a Pyspark job."
+        },
+        "reference": {
+          "description": "Optional The fully-qualified reference to the job, which can be used to obtain the equivalent REST path of the job resource. If this property is not specified when a job is created, the server generates a \u003ccode\u003ejob_id\u003c/code\u003e.",
+          "$ref": "JobReference"
+        }
+      },
+      "id": "Job"
+    },
+    "JobStatus": {
+      "properties": {
         "state": {
+          "enum": [
+            "STATE_UNSPECIFIED",
+            "PENDING",
+            "SETUP_DONE",
+            "RUNNING",
+            "CANCEL_PENDING",
+            "CANCEL_STARTED",
+            "CANCELLED",
+            "DONE",
+            "ERROR",
+            "ATTEMPT_FAILURE"
+          ],
           "description": "Required A state message specifying the overall job state.",
           "type": "string",
           "enumDescriptions": [
@@ -1415,18 +1716,6 @@
             "The job has completed successfully.",
             "The job has completed, but encountered an error.",
             "Job attempt has failed. The detail field contains failure details for this attempt.Applies to restartable jobs only."
-          ],
-          "enum": [
-            "STATE_UNSPECIFIED",
-            "PENDING",
-            "SETUP_DONE",
-            "RUNNING",
-            "CANCEL_PENDING",
-            "CANCEL_STARTED",
-            "CANCELLED",
-            "DONE",
-            "ERROR",
-            "ATTEMPT_FAILURE"
           ]
         },
         "details": {
@@ -1442,9 +1731,37 @@
           "description": "The time when the job completed.",
           "format": "google-datetime",
           "type": "string"
+        },
+        "startTime": {
+          "description": "The time when the server started the job.",
+          "format": "google-datetime",
+          "type": "string"
+        },
+        "substate": {
+          "enumDescriptions": [
+            "",
+            "The Job is submitted to the agent.Applies to RUNNING state.",
+            "The Job has been received and is awaiting execution (it may be waiting for a condition to be met). See the \"details\" field for the reason for the delay.Applies to RUNNING state.",
+            "The agent-reported status is out of date, which may be caused by a loss of communication between the agent and Cloud Dataproc. If the agent does not send a timely update, the job will fail.Applies to RUNNING state."
+          ],
+          "enum": [
+            "UNSPECIFIED",
+            "SUBMITTED",
+            "QUEUED",
+            "STALE_STATUS"
+          ],
+          "description": "Output-only Additional state information, which includes status reported by the agent.",
+          "type": "string"
+        },
+        "insertTime": {
+          "description": "The time of the job request.",
+          "format": "google-datetime",
+          "type": "string"
         }
       },
-      "id": "JobStatus"
+      "id": "JobStatus",
+      "description": "Cloud Dataproc job status.",
+      "type": "object"
     },
     "DiskConfiguration": {
       "description": "Specifies the configuration of disk options for a group of VM instances.",
@@ -1464,10 +1781,14 @@
       "id": "DiskConfiguration"
     },
     "ClusterOperationStatus": {
-      "description": "The status of the operation.",
-      "type": "object",
       "properties": {
         "state": {
+          "enumDescriptions": [
+            "Unused.",
+            "The operation has been created.",
+            "The operation is running.",
+            "The operation is done; either cancelled or completed."
+          ],
           "enum": [
             "UNKNOWN",
             "PENDING",
@@ -1475,13 +1796,7 @@
             "DONE"
           ],
           "description": "Output-only A message containing the operation state.",
-          "type": "string",
-          "enumDescriptions": [
-            "Unused.",
-            "The operation has been created.",
-            "The operation is running.",
-            "The operation is done; either cancelled or completed."
-          ]
+          "type": "string"
         },
         "details": {
           "description": "Output-onlyA message containing any operation metadata details.",
@@ -1492,81 +1807,19 @@
           "type": "string"
         },
         "stateStartTime": {
-          "type": "string",
           "description": "Output-only The time this state was entered.",
-          "format": "google-datetime"
-        }
-      },
-      "id": "ClusterOperationStatus"
-    },
-    "YarnApplication": {
-      "description": "A YARN application created by a job. Application information is a subset of \u003ccode\u003eorg.apache.hadoop.yarn.proto.YarnProtos.ApplicationReportProto\u003c/code\u003e.",
-      "type": "object",
-      "properties": {
-        "state": {
-          "description": "Required The application state.",
-          "type": "string",
-          "enumDescriptions": [
-            "Status is unspecified.",
-            "Status is NEW.",
-            "Status is NEW_SAVING.",
-            "Status is SUBMITTED.",
-            "Status is ACCEPTED.",
-            "Status is RUNNING.",
-            "Status is FINISHED.",
-            "Status is FAILED.",
-            "Status is KILLED."
-          ],
-          "enum": [
-            "STATE_UNSPECIFIED",
-            "NEW",
-            "NEW_SAVING",
-            "SUBMITTED",
-            "ACCEPTED",
-            "RUNNING",
-            "FINISHED",
-            "FAILED",
-            "KILLED"
-          ]
-        },
-        "name": {
-          "description": "Required The application name.",
+          "format": "google-datetime",
           "type": "string"
-        },
-        "trackingUrl": {
-          "description": "Optional The HTTP URL of the ApplicationMaster, HistoryServer, or TimelineServer that provides application-specific information. The URL uses the internal hostname, and requires a proxy server for resolution and, possibly, access.",
-          "type": "string"
-        },
-        "progress": {
-          "description": "Required The numerical progress of the application, from 1 to 100.",
-          "format": "float",
-          "type": "number"
         }
       },
-      "id": "YarnApplication"
-    },
-    "QueryList": {
-      "description": "A list of queries to run on a cluster.",
-      "type": "object",
-      "properties": {
-        "queries": {
-          "type": "array",
-          "items": {
-            "type": "string"
-          },
-          "description": "Required The queries to execute. You do not need to terminate a query with a semicolon. Multiple queries can be specified in one string by separating each with a semicolon. Here is an example of an Cloud Dataproc API snippet that uses a QueryList to specify a HiveJob:\n\"hiveJob\": {\n  \"queryList\": {\n    \"queries\": [\n      \"query1\",\n      \"query2\",\n      \"query3;query4\",\n    ]\n  }\n}\n"
-        }
-      },
-      "id": "QueryList"
+      "id": "ClusterOperationStatus",
+      "description": "The status of the operation.",
+      "type": "object"
     },
     "HadoopJob": {
       "description": "A Cloud Dataproc job for running Hadoop MapReduce jobs on YARN.",
       "type": "object",
       "properties": {
-        "loggingConfiguration": {
-          "$ref": "LoggingConfiguration",
-          "description": "Optional The runtime log configuration for job execution."
-        },
         "properties": {
           "additionalProperties": {
             "type": "string"
@@ -1609,29 +1862,82 @@
           "items": {
             "type": "string"
           }
+        },
+        "loggingConfiguration": {
+          "description": "Optional The runtime log configuration for job execution.",
+          "$ref": "LoggingConfiguration"
         }
       },
       "id": "HadoopJob"
     },
-    "ClusterOperationMetadata": {
-      "id": "ClusterOperationMetadata",
-      "description": "Metadata describing the operation.",
-      "type": "object",
+    "QueryList": {
       "properties": {
-        "operationType": {
-          "description": "Output-only The operation type.",
-          "type": "string"
-        },
-        "description": {
-          "description": "Output-only Short description of operation.",
-          "type": "string"
-        },
-        "warnings": {
+        "queries": {
+          "description": "Required The queries to execute. You do not need to terminate a query with a semicolon. Multiple queries can be specified in one string by separating each with a semicolon. Here is an example of an Cloud Dataproc API snippet that uses a QueryList to specify a HiveJob:\n\"hiveJob\": {\n  \"queryList\": {\n    \"queries\": [\n      \"query1\",\n      \"query2\",\n      \"query3;query4\",\n    ]\n  }\n}\n",
           "type": "array",
           "items": {
             "type": "string"
-          },
-          "description": "Output-only Errors encountered during operation execution."
+          }
+        }
+      },
+      "id": "QueryList",
+      "description": "A list of queries to run on a cluster.",
+      "type": "object"
+    },
+    "YarnApplication": {
+      "properties": {
+        "state": {
+          "enumDescriptions": [
+            "Status is unspecified.",
+            "Status is NEW.",
+            "Status is NEW_SAVING.",
+            "Status is SUBMITTED.",
+            "Status is ACCEPTED.",
+            "Status is RUNNING.",
+            "Status is FINISHED.",
+            "Status is FAILED.",
+            "Status is KILLED."
+          ],
+          "enum": [
+            "STATE_UNSPECIFIED",
+            "NEW",
+            "NEW_SAVING",
+            "SUBMITTED",
+            "ACCEPTED",
+            "RUNNING",
+            "FINISHED",
+            "FAILED",
+            "KILLED"
+          ],
+          "description": "Required The application state.",
+          "type": "string"
+        },
+        "name": {
+          "description": "Required The application name.",
+          "type": "string"
+        },
+        "trackingUrl": {
+          "description": "Optional The HTTP URL of the ApplicationMaster, HistoryServer, or TimelineServer that provides application-specific information. The URL uses the internal hostname, and requires a proxy server for resolution and, possibly, access.",
+          "type": "string"
+        },
+        "progress": {
+          "description": "Required The numerical progress of the application, from 1 to 100.",
+          "format": "float",
+          "type": "number"
+        }
+      },
+      "id": "YarnApplication",
+      "description": "A YARN application created by a job. Application information is a subset of \u003ccode\u003eorg.apache.hadoop.yarn.proto.YarnProtos.ApplicationReportProto\u003c/code\u003e.",
+      "type": "object"
+    },
+    "ClusterOperationMetadata": {
+      "properties": {
+        "warnings": {
+          "description": "Output-only Errors encountered during operation execution.",
+          "type": "array",
+          "items": {
+            "type": "string"
+          }
         },
         "labels": {
           "additionalProperties": {
@@ -1641,8 +1947,8 @@
           "type": "object"
         },
         "status": {
-          "description": "Output-only Current operation status.",
-          "$ref": "ClusterOperationStatus"
+          "$ref": "ClusterOperationStatus",
+          "description": "Output-only Current operation status."
         },
         "statusHistory": {
           "description": "Output-only The previous operation status.",
@@ -1651,30 +1957,29 @@
             "$ref": "ClusterOperationStatus"
           }
         },
+        "clusterUuid": {
+          "description": "Output-only Cluster UUID for the operation.",
+          "type": "string"
+        },
         "clusterName": {
           "description": "Output-only Name of the cluster for the operation.",
           "type": "string"
         },
-        "clusterUuid": {
-          "description": "Output-only Cluster UUID for the operation.",
+        "operationType": {
+          "description": "Output-only The operation type.",
+          "type": "string"
+        },
+        "description": {
+          "description": "Output-only Short description of operation.",
           "type": "string"
         }
-      }
+      },
+      "id": "ClusterOperationMetadata",
+      "description": "Metadata describing the operation.",
+      "type": "object"
     },
     "HiveJob": {
       "properties": {
-        "continueOnFailure": {
-          "description": "Optional Whether to continue executing queries if a query fails. The default value is false. Setting to true can be useful when executing independent parallel queries.",
-          "type": "boolean"
-        },
-        "queryFileUri": {
-          "description": "The HCFS URI of the script that contains Hive queries.",
-          "type": "string"
-        },
-        "queryList": {
-          "description": "A list of queries.",
-          "$ref": "QueryList"
-        },
         "jarFileUris": {
           "description": "Optional HCFS URIs of jar files to add to the CLASSPATH of the Hive server and Hadoop MapReduce (MR) tasks. Can contain Hive SerDes and UDFs.",
           "type": "array",
@@ -1695,6 +2000,18 @@
           },
           "description": "Optional A mapping of property names and values, used to configure Hive. Properties that conflict with values set by the Cloud Dataproc API may be overwritten. Can include properties set in /etc/hadoop/conf/*-site.xml, /etc/hive/conf/hive-site.xml, and classes in user code.",
           "type": "object"
+        },
+        "continueOnFailure": {
+          "description": "Optional Whether to continue executing queries if a query fails. The default value is false. Setting to true can be useful when executing independent parallel queries.",
+          "type": "boolean"
+        },
+        "queryFileUri": {
+          "description": "The HCFS URI of the script that contains Hive queries.",
+          "type": "string"
+        },
+        "queryList": {
+          "$ref": "QueryList",
+          "description": "A list of queries."
         }
       },
       "id": "HiveJob",
@@ -1708,29 +2025,34 @@
       "id": "Empty"
     },
     "DiagnoseClusterResults": {
-      "description": "The location of diagnostic output.",
-      "type": "object",
       "properties": {
         "outputUri": {
           "description": "Output-only The Google Cloud Storage URI of the diagnostic output. The output report is a plain text file with a summary of collected diagnostics.",
           "type": "string"
         }
       },
-      "id": "DiagnoseClusterResults"
+      "id": "DiagnoseClusterResults",
+      "description": "The location of diagnostic output.",
+      "type": "object"
     },
     "ListJobsRequest": {
-      "id": "ListJobsRequest",
-      "description": "A request to list jobs in a project.",
-      "type": "object",
       "properties": {
+        "pageToken": {
+          "description": "Optional The page token, returned by a previous call, to request the next page of results.",
+          "type": "string"
+        },
+        "clusterName": {
+          "description": "Optional If set, the returned jobs list includes only jobs that were submitted to the named cluster.",
+          "type": "string"
+        },
         "pageSize": {
           "description": "Optional The number of results to return in each response.",
           "format": "int32",
           "type": "integer"
         },
         "filter": {
-          "type": "string",
-          "description": "Optional A filter constraining which jobs to list. Valid filters contain job state and label terms such as: labels.key1 = val1 AND (labels.k2 = val2 OR labels.k3 = val3)"
+          "description": "Optional A filter constraining which jobs to list. Valid filters contain job state and label terms such as: labels.key1 = val1 AND (labels.k2 = val2 OR labels.k3 = val3)",
+          "type": "string"
         },
         "jobStateMatcher": {
           "enumDescriptions": [
@@ -1745,308 +2067,16 @@
           ],
           "description": "Optional Specifies enumerated categories of jobs to list.",
           "type": "string"
-        },
-        "pageToken": {
-          "description": "Optional The page token, returned by a previous call, to request the next page of results.",
-          "type": "string"
-        },
-        "clusterName": {
-          "type": "string",
-          "description": "Optional If set, the returned jobs list includes only jobs that were submitted to the named cluster."
-        }
-      }
-    },
-    "GceConfiguration": {
-      "properties": {
-        "imageUri": {
-          "description": "Deprecated The Google Compute Engine image resource used for cluster instances. Example: \"compute.googleapis.com/projects/debian-cloud /global/images/backports-debian-7-wheezy-v20140904\".",
-          "type": "string"
-        },
-        "machineTypeUri": {
-          "description": "Deprecated The Google Compute Engine machine type used for cluster instances. Example: \"compute.googleapis.com/projects/project_id /zones/us-east1-a/machineTypes/n1-standard-2\".",
-          "type": "string"
-        },
-        "networkUri": {
-          "description": "Deprecated The Google Compute Engine network to be used for machine communications. Inbound SSH connections are necessary to complete cluster configuration. Example \"compute.googleapis.com/projects/project_id /zones/us-east1-a/default\".",
-          "type": "string"
-        },
-        "serviceAccountScopes": {
-          "description": "Deprecated The service account scopes included in Google Compute Engine instances. Must include devstorage.full_control to enable the Google Cloud Storage connector. Example \"auth.googleapis.com/compute\" and \"auth.googleapis.com/devstorage.full_control\".",
-          "type": "array",
-          "items": {
-            "type": "string"
-          }
-        },
-        "zoneUri": {
-          "description": "Deprecated The zone where the Google Compute Engine cluster will be located. Example: \"compute.googleapis.com/projects/project_id /zones/us-east1-a\".",
-          "type": "string"
         }
       },
-      "id": "GceConfiguration",
-      "description": "Deprecated Common configuration settings for resources of Google Compute Engine cluster instances, applicable to all instances in the cluster.",
+      "id": "ListJobsRequest",
+      "description": "A request to list jobs in a project.",
       "type": "object"
-    },
-    "SoftwareConfiguration": {
-      "description": "Specifies the selection and configuration of software inside the cluster.",
-      "type": "object",
-      "properties": {
-        "imageVersion": {
-          "description": "Optional The version of software inside the cluster. It must match the regular expression 0-9+.0-9+. If unspecified it will default to latest version.",
-          "type": "string"
-        },
-        "properties": {
-          "description": "Optional The properties to set on daemon configuration files.Property keys are specified in \"prefix:property\" format, such as \"core:fs.defaultFS\". The following are supported prefixes and their mappings:  core - core-site.xml  hdfs - hdfs-site.xml  mapred - mapred-site.xml  yarn - yarn-site.xml  hive - hive-site.xml  pig - pig.properties  spark - spark-defaults.conf",
-          "type": "object",
-          "additionalProperties": {
-            "type": "string"
-          }
-        }
-      },
-      "id": "SoftwareConfiguration"
-    },
-    "PySparkJob": {
-      "properties": {
-        "fileUris": {
-          "description": "Optional HCFS URIs of files to be copied to the working directory of Python drivers and distributed tasks. Useful for naively parallel tasks.",
-          "type": "array",
-          "items": {
-            "type": "string"
-          }
-        },
-        "pythonFileUris": {
-          "type": "array",
-          "items": {
-            "type": "string"
-          },
-          "description": "Optional HCFS file URIs of Python files to pass to the PySpark framework. Supported file types: .py, .egg, and .zip."
-        },
-        "mainPythonFileUri": {
-          "type": "string",
-          "description": "Required The Hadoop Compatible Filesystem (HCFS) URI of the main Python file to use as the driver. Must be a .py file."
-        },
-        "archiveUris": {
-          "type": "array",
-          "items": {
-            "type": "string"
-          },
-          "description": "Optional HCFS URIs of archives to be extracted in the working directory of .jar, .tar, .tar.gz, .tgz, and .zip."
-        },
-        "jarFileUris": {
-          "description": "Optional HCFS URIs of jar files to add to the CLASSPATHs of the Python driver and tasks.",
-          "type": "array",
-          "items": {
-            "type": "string"
-          }
-        },
-        "loggingConfiguration": {
-          "$ref": "LoggingConfiguration",
-          "description": "Optional The runtime log configuration for job execution."
-        },
-        "properties": {
-          "description": "Optional A mapping of property names to values, used to configure PySpark. Properties that conflict with values set by the Cloud Dataproc API may be overwritten. Can include properties set in /etc/spark/conf/spark-defaults.conf and classes in user code.",
-          "type": "object",
-          "additionalProperties": {
-            "type": "string"
-          }
-        },
-        "args": {
-          "description": "Optional The arguments to pass to the driver. Do not include arguments, such as --conf, that can be set as job properties, since a collision may occur that causes an incorrect job submission.",
-          "type": "array",
-          "items": {
-            "type": "string"
-          }
-        }
-      },
-      "id": "PySparkJob",
-      "description": "A Cloud Dataproc job for running PySpark applications on YARN.",
-      "type": "object"
-    },
-    "LoggingConfiguration": {
-      "properties": {
-        "driverLogLevels": {
-          "additionalProperties": {
-            "type": "string",
-            "enum": [
-              "LEVEL_UNSPECIFIED",
-              "ALL",
-              "TRACE",
-              "DEBUG",
-              "INFO",
-              "WARN",
-              "ERROR",
-              "FATAL",
-              "OFF"
-            ]
-          },
-          "description": "The per-package log levels for the driver. This may include 'root' package name to configure rootLogger. Examples:  com.google = FATAL, root = INFO, org.apache = DEBUG",
-          "type": "object"
-        }
-      },
-      "id": "LoggingConfiguration",
-      "description": "The runtime logging configuration of the job.",
-      "type": "object"
-    },
-    "ClusterConfiguration": {
-      "description": "The cluster configuration.",
-      "type": "object",
-      "properties": {
-        "masterConfiguration": {
-          "description": "Optional The Google Compute Engine configuration settings for the master instance in a cluster.",
-          "$ref": "InstanceGroupConfiguration"
-        },
-        "secondaryWorkerConfiguration": {
-          "$ref": "InstanceGroupConfiguration",
-          "description": "Optional The Google Compute Engine configuration settings for additional worker instances in a cluster."
-        },
-        "masterName": {
-          "description": "Deprecated The Master's hostname. Dataproc derives the name from cluster_name if not set by user (recommended practice is to let Dataproc derive the name). Derived master name example: hadoop-m.",
-          "type": "string"
-        },
-        "workers": {
-          "description": "Deprecated The list of worker node names. Dataproc derives the names from cluster_name and num_workers if not set by user (recommended practice is to let Dataproc derive the name). Derived worker node name example: hadoop-w-0.",
-          "type": "array",
-          "items": {
-            "type": "string"
-          }
-        },
-        "initializationActions": {
-          "description": "Optional Commands to execute on each node after configuration is completed. By default, executables are run on master and all worker nodes. You can test a node's \u003ccode\u003erole\u003c/code\u003e metadata to run an executable on a master or worker node, as shown below:\nROLE=$(/usr/share/google/get_metadata_value attributes/role)\nif [[ \"${ROLE}\" == 'Master' ]]; then\n  ... master specific actions ...\nelse\n  ... worker specific actions ...\nfi\n",
-          "type": "array",
-          "items": {
-            "$ref": "NodeInitializationAction"
-          }
-        },
-        "workerConfiguration": {
-          "description": "Optional The Google Compute Engine configuration settings for worker instances in a cluster.",
-          "$ref": "InstanceGroupConfiguration"
-        },
-        "softwareConfiguration": {
-          "$ref": "SoftwareConfiguration",
-          "description": "Optional The configuration settings for software inside the cluster."
-        },
-        "gceClusterConfiguration": {
-          "$ref": "GceClusterConfiguration",
-          "description": "Optional The shared Google Compute Engine configuration settings for all instances in a cluster."
-        },
-        "configurationBucket": {
-          "description": "Optional A Google Cloud Storage staging bucket used for sharing generated SSH keys and configuration. If you do not specify a staging bucket, Cloud Dataproc will determine an appropriate Cloud Storage location (US, ASIA, or EU) for your cluster's staging bucket according to the Google Compute Engine zone where your cluster is deployed, then it will create and manage this project-level, per-location bucket for you.",
-          "type": "string"
-        },
-        "numWorkers": {
-          "description": "Deprecated The number of worker nodes in the cluster.",
-          "format": "int32",
-          "type": "integer"
-        },
-        "masterDiskConfiguration": {
-          "$ref": "DiskConfiguration",
-          "description": "Deprecated The configuration settings of master node disk options."
-        },
-        "workerDiskConfiguration": {
-          "$ref": "DiskConfiguration",
-          "description": "Deprecated The configuration settings of worker node disk options."
-        },
-        "gceConfiguration": {
-          "description": "Deprecated The Google Compute Engine configuration settings for cluster resources.",
-          "$ref": "GceConfiguration"
-        }
-      },
-      "id": "ClusterConfiguration"
-    },
-    "ClusterMetrics": {
-      "id": "ClusterMetrics",
-      "description": "Contains cluster daemon metrics, such as HDFS and YARN stats.",
-      "type": "object",
-      "properties": {
-        "hdfsMetrics": {
-          "additionalProperties": {
-            "format": "int64",
-            "type": "string"
-          },
-          "description": "The HDFS metrics.",
-          "type": "object"
-        },
-        "yarnMetrics": {
-          "additionalProperties": {
-            "type": "string",
-            "format": "int64"
-          },
-          "description": "The YARN metrics.",
-          "type": "object"
-        }
-      }
-    },
-    "InstanceGroupConfiguration": {
-      "description": "The configuration settings for Google Compute Engine resources in an instance group, such as a master or worker group.",
-      "type": "object",
-      "properties": {
-        "diskConfiguration": {
-          "$ref": "DiskConfiguration",
-          "description": "Disk option configuration settings."
-        },
-        "machineTypeUri": {
-          "description": "The Google Compute Engine machine type used for cluster instances. Example: \"compute.googleapis.com/projects/project_id /zones/us-east1-a/machineTypes/n1-standard-2\".",
-          "type": "string"
-        },
-        "imageUri": {
-          "type": "string",
-          "description": "Output-only The Google Compute Engine image resource used for cluster instances. Inferred from SoftwareConfiguration.image_version. Example: \"compute.googleapis.com/projects/debian-cloud /global/images/backports-debian-7-wheezy-v20140904\"."
-        },
-        "isPreemptible": {
-          "description": "Specifies that this instance group contains Preemptible Instances.",
-          "type": "boolean"
-        },
-        "managedGroupConfiguration": {
-          "description": "Output-only The configuration for Google Compute Engine Instance Group Manager that manages this group. This is only used for preemptible instance groups.",
-          "$ref": "ManagedGroupConfiguration"
-        },
-        "instanceNames": {
-          "description": "The list of instance names. Dataproc derives the names from cluster_name, num_instances, and the instance group if not set by user (recommended practice is to let Dataproc derive the name).",
-          "type": "array",
-          "items": {
-            "type": "string"
-          }
-        },
-        "accelerators": {
-          "description": "Optional The Google Compute Engine accelerator configuration for these instances.",
-          "type": "array",
-          "items": {
-            "$ref": "AcceleratorConfiguration"
-          }
-        },
-        "numInstances": {
-          "description": "The number of VM instances in the instance group. For master instance groups, must be set to 1.",
-          "format": "int32",
-          "type": "integer"
-        }
-      },
-      "id": "InstanceGroupConfiguration"
     }
   },
+  "protocol": "rest",
   "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",
-  "version": "v1alpha1",
-  "baseUrl": "https://dataproc.googleapis.com/",
-  "auth": {
-    "oauth2": {
-      "scopes": {
-        "https://www.googleapis.com/auth/cloud-platform": {
-          "description": "View and manage your data across Google Cloud Platform services"
-        }
-      }
-    }
-  },
-  "kind": "discovery#restDescription",
-  "description": "Manages Hadoop-based clusters and jobs on Google Cloud Platform.",
-  "servicePath": "",
-  "rootUrl": "https://dataproc.googleapis.com/",
-  "basePath": "",
-  "ownerDomain": "google.com",
-  "name": "dataproc",
-  "batchPath": "batch",
-  "id": "dataproc:v1alpha1",
-  "documentationLink": "https://cloud.google.com/dataproc/",
-  "revision": "20170228"
+  }
 }
diff --git a/dataproc/v1alpha1/dataproc-gen.go b/dataproc/v1alpha1/dataproc-gen.go
index 64174de..52f3d6d 100644
--- a/dataproc/v1alpha1/dataproc-gen.go
+++ b/dataproc/v1alpha1/dataproc-gen.go
@@ -62,10 +62,9 @@
 }
 
 type Service struct {
-	client                    *http.Client
-	BasePath                  string // API endpoint base URL
-	UserAgent                 string // optional additional User-Agent fragment
-	GoogleClientHeaderElement string // client header fragment, for Google use only
+	client    *http.Client
+	BasePath  string // API endpoint base URL
+	UserAgent string // optional additional User-Agent fragment
 
 	Operations *OperationsService
 
@@ -79,10 +78,6 @@
 	return googleapi.UserAgent + " " + s.UserAgent
 }
 
-func (s *Service) clientHeader() string {
-	return gensupport.GoogleClientHeader("20170210", s.GoogleClientHeaderElement)
-}
-
 func NewOperationsService(s *Service) *OperationsService {
 	rs := &OperationsService{s: s}
 	return rs
@@ -495,6 +490,19 @@
 	// StateStartTime: Time when this state was entered.
 	StateStartTime string `json:"stateStartTime,omitempty"`
 
+	// Substate: Output-only Additional state information that includes
+	// status reported by the agent.
+	//
+	// Possible values:
+	//   "UNSPECIFIED"
+	//   "UNHEALTHY" - The cluster is known to be in an unhealthy state (for
+	// example, critical daemons are not running or HDFS capacity is
+	// exhausted).Applies to RUNNING state.
+	//   "STALE_STATUS" - The agent-reported status is out of date (may
+	// occur if Cloud Dataproc loses communication with Agent).Applies to
+	// RUNNING state.
+	Substate string `json:"substate,omitempty"`
+
 	// ForceSendFields is a list of field names (e.g. "Detail") to
 	// unconditionally include in API requests. By default, fields with
 	// empty values are omitted from API requests. However, any non-pointer,
@@ -1212,6 +1220,22 @@
 	// StateStartTime: Output-only The time when this state was entered.
 	StateStartTime string `json:"stateStartTime,omitempty"`
 
+	// Substate: Output-only Additional state information, which includes
+	// status reported by the agent.
+	//
+	// Possible values:
+	//   "UNSPECIFIED"
+	//   "SUBMITTED" - The Job is submitted to the agent.Applies to RUNNING
+	// state.
+	//   "QUEUED" - The Job has been received and is awaiting execution (it
+	// may be waiting for a condition to be met). See the "details" field
+	// for the reason for the delay.Applies to RUNNING state.
+	//   "STALE_STATUS" - The agent-reported status is out of date, which
+	// may be caused by a loss of communication between the agent and Cloud
+	// Dataproc. If the agent does not send a timely update, the job will
+	// fail.Applies to RUNNING state.
+	Substate string `json:"substate,omitempty"`
+
 	// ForceSendFields is a list of field names (e.g. "Details") to
 	// unconditionally include in API requests. By default, fields with
 	// empty values are omitted from API requests. However, any non-pointer,
@@ -2211,7 +2235,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	var body io.Reader = nil
 	body, err := googleapi.WithoutDataWrapper.JSONReader(c.canceloperationrequest)
 	if err != nil {
@@ -2347,7 +2370,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	var body io.Reader = nil
 	c.urlParams_.Set("alt", alt)
 	urls := googleapi.ResolveRelative(c.s.BasePath, "v1alpha1/{+name}")
@@ -2486,7 +2508,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	if c.ifNoneMatch_ != "" {
 		reqHeaders.Set("If-None-Match", c.ifNoneMatch_)
 	}
@@ -2658,7 +2679,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	if c.ifNoneMatch_ != "" {
 		reqHeaders.Set("If-None-Match", c.ifNoneMatch_)
 	}
@@ -2828,7 +2848,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	var body io.Reader = nil
 	body, err := googleapi.WithoutDataWrapper.JSONReader(c.cluster)
 	if err != nil {
@@ -2973,7 +2992,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	var body io.Reader = nil
 	c.urlParams_.Set("alt", alt)
 	urls := googleapi.ResolveRelative(c.s.BasePath, "v1alpha1/projects/{projectId}/regions/{region}/clusters/{clusterName}")
@@ -3130,7 +3148,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	if c.ifNoneMatch_ != "" {
 		reqHeaders.Set("If-None-Match", c.ifNoneMatch_)
 	}
@@ -3310,7 +3327,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	if c.ifNoneMatch_ != "" {
 		reqHeaders.Set("If-None-Match", c.ifNoneMatch_)
 	}
@@ -3510,7 +3526,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	var body io.Reader = nil
 	body, err := googleapi.WithoutDataWrapper.JSONReader(c.cluster)
 	if err != nil {
@@ -3673,7 +3688,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	var body io.Reader = nil
 	body, err := googleapi.WithoutDataWrapper.JSONReader(c.canceljobrequest)
 	if err != nil {
@@ -3827,7 +3841,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	var body io.Reader = nil
 	c.urlParams_.Set("alt", alt)
 	urls := googleapi.ResolveRelative(c.s.BasePath, "v1alpha1/projects/{projectId}/regions/{region}/jobs/{jobId}")
@@ -3983,7 +3996,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	if c.ifNoneMatch_ != "" {
 		reqHeaders.Set("If-None-Match", c.ifNoneMatch_)
 	}
@@ -4131,7 +4143,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	var body io.Reader = nil
 	body, err := googleapi.WithoutDataWrapper.JSONReader(c.listjobsrequest)
 	if err != nil {
@@ -4311,7 +4322,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	var body io.Reader = nil
 	body, err := googleapi.WithoutDataWrapper.JSONReader(c.job)
 	if err != nil {
@@ -4470,7 +4480,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	var body io.Reader = nil
 	body, err := googleapi.WithoutDataWrapper.JSONReader(c.submitjobrequest)
 	if err != nil {
diff --git a/dataproc/v1beta1/dataproc-api.json b/dataproc/v1beta1/dataproc-api.json
index b89b9a6..5557535 100644
--- a/dataproc/v1beta1/dataproc-api.json
+++ b/dataproc/v1beta1/dataproc-api.json
@@ -1,202 +1,51 @@
 {
+  "title": "Google Cloud Dataproc API",
+  "ownerName": "Google",
+  "discoveryVersion": "v1",
   "resources": {
-    "operations": {
-      "methods": {
-        "cancel": {
-          "response": {
-            "$ref": "Empty"
-          },
-          "parameterOrder": [
-            "name"
-          ],
-          "httpMethod": "POST",
-          "scopes": [
-            "https://www.googleapis.com/auth/cloud-platform"
-          ],
-          "parameters": {
-            "name": {
-              "description": "The name of the operation resource to be cancelled.",
-              "required": true,
-              "type": "string",
-              "pattern": "^operations/.+$",
-              "location": "path"
-            }
-          },
-          "flatPath": "v1beta1/operations/{operationsId}:cancel",
-          "path": "v1beta1/{+name}:cancel",
-          "id": "dataproc.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.get or other methods to check whether the cancellation succeeded or whether the operation completed despite cancellation.",
-          "request": {
-            "$ref": "CancelOperationRequest"
-          }
-        },
-        "delete": {
-          "httpMethod": "DELETE",
-          "parameterOrder": [
-            "name"
-          ],
-          "response": {
-            "$ref": "Empty"
-          },
-          "parameters": {
-            "name": {
-              "pattern": "^operations/.+$",
-              "location": "path",
-              "description": "The name of the operation resource to be deleted.",
-              "required": true,
-              "type": "string"
-            }
-          },
-          "scopes": [
-            "https://www.googleapis.com/auth/cloud-platform"
-          ],
-          "flatPath": "v1beta1/operations/{operationsId}",
-          "id": "dataproc.operations.delete",
-          "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."
-        },
-        "get": {
-          "path": "v1beta1/{+name}",
-          "id": "dataproc.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.",
-          "response": {
-            "$ref": "Operation"
-          },
-          "parameterOrder": [
-            "name"
-          ],
-          "httpMethod": "GET",
-          "scopes": [
-            "https://www.googleapis.com/auth/cloud-platform"
-          ],
-          "parameters": {
-            "name": {
-              "pattern": "^operations/.+$",
-              "location": "path",
-              "description": "The name of the operation resource.",
-              "required": true,
-              "type": "string"
-            }
-          },
-          "flatPath": "v1beta1/operations/{operationsId}"
-        },
-        "list": {
-          "path": "v1beta1/{+name}",
-          "id": "dataproc.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 below allows API services to override the binding to use different resource name schemes, such as users/*/operations.",
-          "response": {
-            "$ref": "ListOperationsResponse"
-          },
-          "parameterOrder": [
-            "name"
-          ],
-          "httpMethod": "GET",
-          "scopes": [
-            "https://www.googleapis.com/auth/cloud-platform"
-          ],
-          "parameters": {
-            "name": {
-              "pattern": "^operations$",
-              "location": "path",
-              "description": "The name of the operation collection.",
-              "required": true,
-              "type": "string"
-            },
-            "pageToken": {
-              "description": "The standard list page token.",
-              "type": "string",
-              "location": "query"
-            },
-            "pageSize": {
-              "description": "The standard list page size.",
-              "format": "int32",
-              "type": "integer",
-              "location": "query"
-            },
-            "filter": {
-              "description": "The standard list filter.",
-              "type": "string",
-              "location": "query"
-            }
-          },
-          "flatPath": "v1beta1/operations"
-        }
-      }
-    },
     "projects": {
       "resources": {
         "jobs": {
           "methods": {
-            "cancel": {
-              "path": "v1beta1/projects/{projectId}/jobs/{jobId}:cancel",
-              "id": "dataproc.projects.jobs.cancel",
-              "description": "Starts a job cancellation request. To access the job resource after cancellation, call jobs.list or jobs.get.",
-              "request": {
-                "$ref": "CancelJobRequest"
-              },
-              "response": {
-                "$ref": "Job"
-              },
-              "parameterOrder": [
-                "projectId",
-                "jobId"
-              ],
-              "httpMethod": "POST",
-              "scopes": [
-                "https://www.googleapis.com/auth/cloud-platform"
-              ],
-              "parameters": {
-                "projectId": {
-                  "description": "Required The ID of the Google Cloud Platform project that the job belongs to.",
-                  "required": true,
-                  "type": "string",
-                  "location": "path"
-                },
-                "jobId": {
-                  "description": "Required The job ID.",
-                  "required": true,
-                  "type": "string",
-                  "location": "path"
-                }
-              },
-              "flatPath": "v1beta1/projects/{projectId}/jobs/{jobId}:cancel"
-            },
             "get": {
-              "response": {
-                "$ref": "Job"
-              },
-              "httpMethod": "GET",
-              "parameterOrder": [
-                "projectId",
-                "jobId"
-              ],
-              "scopes": [
-                "https://www.googleapis.com/auth/cloud-platform"
-              ],
-              "parameters": {
-                "projectId": {
-                  "description": "Required The ID of the Google Cloud Platform project that the job belongs to.",
-                  "required": true,
-                  "type": "string",
-                  "location": "path"
-                },
-                "jobId": {
-                  "location": "path",
-                  "description": "Required The job ID.",
-                  "required": true,
-                  "type": "string"
-                }
-              },
               "flatPath": "v1beta1/projects/{projectId}/jobs/{jobId}",
               "path": "v1beta1/projects/{projectId}/jobs/{jobId}",
               "id": "dataproc.projects.jobs.get",
-              "description": "Gets the resource representation for a job in a project."
+              "description": "Gets the resource representation for a job in a project.",
+              "response": {
+                "$ref": "Job"
+              },
+              "parameterOrder": [
+                "projectId",
+                "jobId"
+              ],
+              "httpMethod": "GET",
+              "scopes": [
+                "https://www.googleapis.com/auth/cloud-platform"
+              ],
+              "parameters": {
+                "projectId": {
+                  "location": "path",
+                  "description": "Required The ID of the Google Cloud Platform project that the job belongs to.",
+                  "required": true,
+                  "type": "string"
+                },
+                "jobId": {
+                  "description": "Required The job ID.",
+                  "required": true,
+                  "type": "string",
+                  "location": "path"
+                }
+              }
             },
             "patch": {
+              "flatPath": "v1beta1/projects/{projectId}/jobs/{jobId}",
+              "path": "v1beta1/projects/{projectId}/jobs/{jobId}",
+              "id": "dataproc.projects.jobs.patch",
+              "description": "Updates a job in a project.",
               "request": {
                 "$ref": "Job"
               },
-              "description": "Updates a job in a project.",
               "response": {
                 "$ref": "Job"
               },
@@ -205,6 +54,9 @@
                 "jobId"
               ],
               "httpMethod": "PATCH",
+              "scopes": [
+                "https://www.googleapis.com/auth/cloud-platform"
+              ],
               "parameters": {
                 "projectId": {
                   "description": "Required The ID of the Google Cloud Platform project that the job belongs to.",
@@ -224,42 +76,37 @@
                   "format": "google-fieldmask",
                   "type": "string"
                 }
-              },
-              "scopes": [
-                "https://www.googleapis.com/auth/cloud-platform"
-              ],
-              "flatPath": "v1beta1/projects/{projectId}/jobs/{jobId}",
-              "path": "v1beta1/projects/{projectId}/jobs/{jobId}",
-              "id": "dataproc.projects.jobs.patch"
+              }
             },
             "submit": {
-              "response": {
-                "$ref": "Job"
+              "flatPath": "v1beta1/projects/{projectId}/jobs:submit",
+              "id": "dataproc.projects.jobs.submit",
+              "path": "v1beta1/projects/{projectId}/jobs:submit",
+              "request": {
+                "$ref": "SubmitJobRequest"
               },
+              "description": "Submits a job to a cluster.",
+              "httpMethod": "POST",
               "parameterOrder": [
                 "projectId"
               ],
-              "httpMethod": "POST",
-              "scopes": [
-                "https://www.googleapis.com/auth/cloud-platform"
-              ],
+              "response": {
+                "$ref": "Job"
+              },
               "parameters": {
                 "projectId": {
+                  "location": "path",
                   "description": "Required The ID of the Google Cloud Platform project that the job belongs to.",
                   "required": true,
-                  "type": "string",
-                  "location": "path"
+                  "type": "string"
                 }
               },
-              "flatPath": "v1beta1/projects/{projectId}/jobs:submit",
-              "path": "v1beta1/projects/{projectId}/jobs:submit",
-              "id": "dataproc.projects.jobs.submit",
-              "description": "Submits a job to a cluster.",
-              "request": {
-                "$ref": "SubmitJobRequest"
-              }
+              "scopes": [
+                "https://www.googleapis.com/auth/cloud-platform"
+              ]
             },
             "delete": {
+              "description": "Deletes the job from the project. If the job is active, the delete fails, and the response returns FAILED_PRECONDITION.",
               "response": {
                 "$ref": "Empty"
               },
@@ -279,29 +126,31 @@
                   "type": "string"
                 },
                 "jobId": {
-                  "location": "path",
                   "description": "Required The job ID.",
                   "required": true,
-                  "type": "string"
+                  "type": "string",
+                  "location": "path"
                 }
               },
               "flatPath": "v1beta1/projects/{projectId}/jobs/{jobId}",
               "path": "v1beta1/projects/{projectId}/jobs/{jobId}",
-              "id": "dataproc.projects.jobs.delete",
-              "description": "Deletes the job from the project. If the job is active, the delete fails, and the response returns FAILED_PRECONDITION."
+              "id": "dataproc.projects.jobs.delete"
             },
             "list": {
-              "id": "dataproc.projects.jobs.list",
-              "path": "v1beta1/projects/{projectId}/jobs",
-              "description": "Lists jobs in a project.",
               "httpMethod": "GET",
-              "response": {
-                "$ref": "ListJobsResponse"
-              },
               "parameterOrder": [
                 "projectId"
               ],
+              "response": {
+                "$ref": "ListJobsResponse"
+              },
               "parameters": {
+                "pageSize": {
+                  "description": "Optional The number of results to return in each response.",
+                  "format": "int32",
+                  "type": "integer",
+                  "location": "query"
+                },
                 "clusterName": {
                   "location": "query",
                   "description": "Optional If set, the returned jobs list includes only jobs that were submitted to the named cluster.",
@@ -314,9 +163,9 @@
                   "location": "path"
                 },
                 "filter": {
-                  "location": "query",
                   "description": "Optional A filter constraining which jobs to list. Valid filters contain job state and label terms such as: labels.key1 = val1 AND (labels.k2 = val2 OR labels.k3 = val3)",
-                  "type": "string"
+                  "type": "string",
+                  "location": "query"
                 },
                 "jobStateMatcher": {
                   "location": "query",
@@ -332,199 +181,76 @@
                   "description": "Optional The page token, returned by a previous call, to request the next page of results.",
                   "type": "string",
                   "location": "query"
-                },
-                "pageSize": {
-                  "description": "Optional The number of results to return in each response.",
-                  "format": "int32",
-                  "type": "integer",
-                  "location": "query"
                 }
               },
               "scopes": [
                 "https://www.googleapis.com/auth/cloud-platform"
               ],
-              "flatPath": "v1beta1/projects/{projectId}/jobs"
+              "flatPath": "v1beta1/projects/{projectId}/jobs",
+              "id": "dataproc.projects.jobs.list",
+              "path": "v1beta1/projects/{projectId}/jobs",
+              "description": "Lists jobs in a project."
+            },
+            "cancel": {
+              "request": {
+                "$ref": "CancelJobRequest"
+              },
+              "description": "Starts a job cancellation request. To access the job resource after cancellation, call jobs.list or jobs.get.",
+              "response": {
+                "$ref": "Job"
+              },
+              "parameterOrder": [
+                "projectId",
+                "jobId"
+              ],
+              "httpMethod": "POST",
+              "parameters": {
+                "projectId": {
+                  "location": "path",
+                  "description": "Required The ID of the Google Cloud Platform project that the job belongs to.",
+                  "required": true,
+                  "type": "string"
+                },
+                "jobId": {
+                  "description": "Required The job ID.",
+                  "required": true,
+                  "type": "string",
+                  "location": "path"
+                }
+              },
+              "scopes": [
+                "https://www.googleapis.com/auth/cloud-platform"
+              ],
+              "flatPath": "v1beta1/projects/{projectId}/jobs/{jobId}:cancel",
+              "path": "v1beta1/projects/{projectId}/jobs/{jobId}:cancel",
+              "id": "dataproc.projects.jobs.cancel"
             }
           }
         },
         "clusters": {
           "methods": {
-            "create": {
-              "path": "v1beta1/projects/{projectId}/clusters",
-              "id": "dataproc.projects.clusters.create",
-              "request": {
-                "$ref": "Cluster"
-              },
-              "description": "Creates a cluster in a project.",
-              "response": {
-                "$ref": "Operation"
-              },
-              "parameterOrder": [
-                "projectId"
-              ],
-              "httpMethod": "POST",
-              "parameters": {
-                "projectId": {
-                  "description": "Required The ID of the Google Cloud Platform project that the cluster belongs to.",
-                  "required": true,
-                  "type": "string",
-                  "location": "path"
-                }
-              },
-              "scopes": [
-                "https://www.googleapis.com/auth/cloud-platform"
-              ],
-              "flatPath": "v1beta1/projects/{projectId}/clusters"
-            },
-            "patch": {
-              "path": "v1beta1/projects/{projectId}/clusters/{clusterName}",
-              "id": "dataproc.projects.clusters.patch",
-              "request": {
-                "$ref": "Cluster"
-              },
-              "description": "Updates a cluster in a project.",
-              "response": {
-                "$ref": "Operation"
-              },
-              "parameterOrder": [
-                "projectId",
-                "clusterName"
-              ],
-              "httpMethod": "PATCH",
-              "parameters": {
-                "updateMask": {
-                  "description": "Required Specifies the path, relative to \u003ccode\u003eCluster\u003c/code\u003e, of the field to update. For example, to change the number of workers in a cluster to 5, the \u003ccode\u003eupdate_mask\u003c/code\u003e parameter would be specified as \u003ccode\u003econfiguration.worker_configuration.num_instances\u003c/code\u003e, and the PATCH request body would specify the new value, as follows:\n{\n  \"configuration\":{\n    \"workerConfiguration\":{\n      \"numInstances\":\"5\"\n    }\n  }\n}\nSimilarly, to change the number of preemptible workers in a cluster to 5, the \u003ccode\u003eupdate_mask\u003c/code\u003e parameter would be \u003ccode\u003econfig.secondary_worker_config.num_instances\u003c/code\u003e, and the PATCH request body would be set as follows:\n{\n  \"config\":{\n    \"secondaryWorkerConfig\":{\n      \"numInstances\":\"5\"\n    }\n  }\n}\n\u003cstrong\u003eNote:\u003c/strong\u003e Currently, \u003ccode\u003econfig.worker_config.num_instances\u003c/code\u003e and \u003ccode\u003econfig.secondary_worker_config.num_instances\u003c/code\u003e are the only fields that can be updated.",
-                  "format": "google-fieldmask",
-                  "type": "string",
-                  "location": "query"
-                },
-                "clusterName": {
-                  "location": "path",
-                  "description": "Required The cluster name.",
-                  "required": true,
-                  "type": "string"
-                },
-                "projectId": {
-                  "description": "Required The ID of the Google Cloud Platform project the cluster belongs to.",
-                  "required": true,
-                  "type": "string",
-                  "location": "path"
-                }
-              },
-              "scopes": [
-                "https://www.googleapis.com/auth/cloud-platform"
-              ],
-              "flatPath": "v1beta1/projects/{projectId}/clusters/{clusterName}"
-            },
-            "get": {
-              "id": "dataproc.projects.clusters.get",
-              "path": "v1beta1/projects/{projectId}/clusters/{clusterName}",
-              "description": "Gets the resource representation for a cluster in a project.",
-              "httpMethod": "GET",
-              "response": {
-                "$ref": "Cluster"
-              },
-              "parameterOrder": [
-                "projectId",
-                "clusterName"
-              ],
-              "parameters": {
-                "clusterName": {
-                  "description": "Required The cluster name.",
-                  "required": true,
-                  "type": "string",
-                  "location": "path"
-                },
-                "projectId": {
-                  "location": "path",
-                  "description": "Required The ID of the Google Cloud Platform project that the cluster belongs to.",
-                  "required": true,
-                  "type": "string"
-                }
-              },
-              "scopes": [
-                "https://www.googleapis.com/auth/cloud-platform"
-              ],
-              "flatPath": "v1beta1/projects/{projectId}/clusters/{clusterName}"
-            },
-            "diagnose": {
-              "response": {
-                "$ref": "Operation"
-              },
-              "parameterOrder": [
-                "projectId",
-                "clusterName"
-              ],
-              "httpMethod": "POST",
-              "scopes": [
-                "https://www.googleapis.com/auth/cloud-platform"
-              ],
-              "parameters": {
-                "clusterName": {
-                  "location": "path",
-                  "description": "Required The cluster name.",
-                  "required": true,
-                  "type": "string"
-                },
-                "projectId": {
-                  "location": "path",
-                  "description": "Required The ID of the Google Cloud Platform project that the cluster belongs to.",
-                  "required": true,
-                  "type": "string"
-                }
-              },
-              "flatPath": "v1beta1/projects/{projectId}/clusters/{clusterName}:diagnose",
-              "path": "v1beta1/projects/{projectId}/clusters/{clusterName}:diagnose",
-              "id": "dataproc.projects.clusters.diagnose",
-              "description": "Gets cluster diagnostic information. After the operation completes, the Operation.response field contains DiagnoseClusterOutputLocation.",
-              "request": {
-                "$ref": "DiagnoseClusterRequest"
-              }
-            },
-            "delete": {
-              "description": "Deletes a cluster in a project.",
-              "parameterOrder": [
-                "projectId",
-                "clusterName"
-              ],
-              "response": {
-                "$ref": "Operation"
-              },
-              "httpMethod": "DELETE",
-              "parameters": {
-                "clusterName": {
-                  "description": "Required The cluster name.",
-                  "required": true,
-                  "type": "string",
-                  "location": "path"
-                },
-                "projectId": {
-                  "description": "Required The ID of the Google Cloud Platform project that the cluster belongs to.",
-                  "required": true,
-                  "type": "string",
-                  "location": "path"
-                }
-              },
-              "scopes": [
-                "https://www.googleapis.com/auth/cloud-platform"
-              ],
-              "flatPath": "v1beta1/projects/{projectId}/clusters/{clusterName}",
-              "id": "dataproc.projects.clusters.delete",
-              "path": "v1beta1/projects/{projectId}/clusters/{clusterName}"
-            },
             "list": {
-              "httpMethod": "GET",
-              "parameterOrder": [
-                "projectId"
-              ],
+              "description": "Lists all clusters in a project.",
               "response": {
                 "$ref": "ListClustersResponse"
               },
+              "parameterOrder": [
+                "projectId"
+              ],
+              "httpMethod": "GET",
+              "scopes": [
+                "https://www.googleapis.com/auth/cloud-platform"
+              ],
               "parameters": {
+                "filter": {
+                  "description": "Optional A filter constraining which clusters to list. Valid filters contain label terms such as: labels.key1 = val1 AND (-labels.k2 = val2 OR labels.k3 = val3)",
+                  "type": "string",
+                  "location": "query"
+                },
                 "pageToken": {
-                  "location": "query",
                   "description": "The standard List page token.",
-                  "type": "string"
+                  "type": "string",
+                  "location": "query"
                 },
                 "pageSize": {
                   "description": "The standard List page size.",
@@ -533,71 +259,319 @@
                   "location": "query"
                 },
                 "projectId": {
-                  "location": "path",
                   "description": "Required The ID of the Google Cloud Platform project that the cluster belongs to.",
                   "required": true,
-                  "type": "string"
-                },
-                "filter": {
-                  "description": "Optional A filter constraining which clusters to list. Valid filters contain label terms such as: labels.key1 = val1 AND (-labels.k2 = val2 OR labels.k3 = val3)",
                   "type": "string",
-                  "location": "query"
+                  "location": "path"
+                }
+              },
+              "flatPath": "v1beta1/projects/{projectId}/clusters",
+              "path": "v1beta1/projects/{projectId}/clusters",
+              "id": "dataproc.projects.clusters.list"
+            },
+            "create": {
+              "response": {
+                "$ref": "Operation"
+              },
+              "parameterOrder": [
+                "projectId"
+              ],
+              "httpMethod": "POST",
+              "parameters": {
+                "projectId": {
+                  "description": "Required The ID of the Google Cloud Platform project that the cluster belongs to.",
+                  "required": true,
+                  "type": "string",
+                  "location": "path"
                 }
               },
               "scopes": [
                 "https://www.googleapis.com/auth/cloud-platform"
               ],
               "flatPath": "v1beta1/projects/{projectId}/clusters",
-              "id": "dataproc.projects.clusters.list",
               "path": "v1beta1/projects/{projectId}/clusters",
-              "description": "Lists all clusters in a project."
+              "id": "dataproc.projects.clusters.create",
+              "request": {
+                "$ref": "Cluster"
+              },
+              "description": "Creates a cluster in a project."
+            },
+            "patch": {
+              "flatPath": "v1beta1/projects/{projectId}/clusters/{clusterName}",
+              "id": "dataproc.projects.clusters.patch",
+              "path": "v1beta1/projects/{projectId}/clusters/{clusterName}",
+              "description": "Updates a cluster in a project.",
+              "request": {
+                "$ref": "Cluster"
+              },
+              "httpMethod": "PATCH",
+              "parameterOrder": [
+                "projectId",
+                "clusterName"
+              ],
+              "response": {
+                "$ref": "Operation"
+              },
+              "scopes": [
+                "https://www.googleapis.com/auth/cloud-platform"
+              ],
+              "parameters": {
+                "updateMask": {
+                  "location": "query",
+                  "description": "Required Specifies the path, relative to \u003ccode\u003eCluster\u003c/code\u003e, of the field to update. For example, to change the number of workers in a cluster to 5, the \u003ccode\u003eupdate_mask\u003c/code\u003e parameter would be specified as \u003ccode\u003econfiguration.worker_configuration.num_instances\u003c/code\u003e, and the PATCH request body would specify the new value, as follows:\n{\n  \"configuration\":{\n    \"workerConfiguration\":{\n      \"numInstances\":\"5\"\n    }\n  }\n}\nSimilarly, to change the number of preemptible workers in a cluster to 5, the \u003ccode\u003eupdate_mask\u003c/code\u003e parameter would be \u003ccode\u003econfig.secondary_worker_config.num_instances\u003c/code\u003e, and the PATCH request body would be set as follows:\n{\n  \"config\":{\n    \"secondaryWorkerConfig\":{\n      \"numInstances\":\"5\"\n    }\n  }\n}\n\u003cstrong\u003eNote:\u003c/strong\u003e Currently, \u003ccode\u003econfig.worker_config.num_instances\u003c/code\u003e and \u003ccode\u003econfig.secondary_worker_config.num_instances\u003c/code\u003e are the only fields that can be updated.",
+                  "format": "google-fieldmask",
+                  "type": "string"
+                },
+                "clusterName": {
+                  "location": "path",
+                  "description": "Required The cluster name.",
+                  "required": true,
+                  "type": "string"
+                },
+                "projectId": {
+                  "location": "path",
+                  "description": "Required The ID of the Google Cloud Platform project the cluster belongs to.",
+                  "required": true,
+                  "type": "string"
+                }
+              }
+            },
+            "get": {
+              "description": "Gets the resource representation for a cluster in a project.",
+              "response": {
+                "$ref": "Cluster"
+              },
+              "parameterOrder": [
+                "projectId",
+                "clusterName"
+              ],
+              "httpMethod": "GET",
+              "parameters": {
+                "clusterName": {
+                  "description": "Required The cluster name.",
+                  "required": true,
+                  "type": "string",
+                  "location": "path"
+                },
+                "projectId": {
+                  "location": "path",
+                  "description": "Required The ID of the Google Cloud Platform project that the cluster belongs to.",
+                  "required": true,
+                  "type": "string"
+                }
+              },
+              "scopes": [
+                "https://www.googleapis.com/auth/cloud-platform"
+              ],
+              "flatPath": "v1beta1/projects/{projectId}/clusters/{clusterName}",
+              "path": "v1beta1/projects/{projectId}/clusters/{clusterName}",
+              "id": "dataproc.projects.clusters.get"
+            },
+            "delete": {
+              "flatPath": "v1beta1/projects/{projectId}/clusters/{clusterName}",
+              "id": "dataproc.projects.clusters.delete",
+              "path": "v1beta1/projects/{projectId}/clusters/{clusterName}",
+              "description": "Deletes a cluster in a project.",
+              "httpMethod": "DELETE",
+              "parameterOrder": [
+                "projectId",
+                "clusterName"
+              ],
+              "response": {
+                "$ref": "Operation"
+              },
+              "scopes": [
+                "https://www.googleapis.com/auth/cloud-platform"
+              ],
+              "parameters": {
+                "projectId": {
+                  "location": "path",
+                  "description": "Required The ID of the Google Cloud Platform project that the cluster belongs to.",
+                  "required": true,
+                  "type": "string"
+                },
+                "clusterName": {
+                  "description": "Required The cluster name.",
+                  "required": true,
+                  "type": "string",
+                  "location": "path"
+                }
+              }
+            },
+            "diagnose": {
+              "request": {
+                "$ref": "DiagnoseClusterRequest"
+              },
+              "description": "Gets cluster diagnostic information. After the operation completes, the Operation.response field contains DiagnoseClusterOutputLocation.",
+              "httpMethod": "POST",
+              "parameterOrder": [
+                "projectId",
+                "clusterName"
+              ],
+              "response": {
+                "$ref": "Operation"
+              },
+              "parameters": {
+                "projectId": {
+                  "location": "path",
+                  "description": "Required The ID of the Google Cloud Platform project that the cluster belongs to.",
+                  "required": true,
+                  "type": "string"
+                },
+                "clusterName": {
+                  "location": "path",
+                  "description": "Required The cluster name.",
+                  "required": true,
+                  "type": "string"
+                }
+              },
+              "scopes": [
+                "https://www.googleapis.com/auth/cloud-platform"
+              ],
+              "flatPath": "v1beta1/projects/{projectId}/clusters/{clusterName}:diagnose",
+              "id": "dataproc.projects.clusters.diagnose",
+              "path": "v1beta1/projects/{projectId}/clusters/{clusterName}:diagnose"
             }
           }
         }
       }
+    },
+    "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.",
+          "response": {
+            "$ref": "Operation"
+          },
+          "parameterOrder": [
+            "name"
+          ],
+          "httpMethod": "GET",
+          "scopes": [
+            "https://www.googleapis.com/auth/cloud-platform"
+          ],
+          "parameters": {
+            "name": {
+              "description": "The name of the operation resource.",
+              "required": true,
+              "type": "string",
+              "pattern": "^operations/.+$",
+              "location": "path"
+            }
+          },
+          "flatPath": "v1beta1/operations/{operationsId}",
+          "path": "v1beta1/{+name}",
+          "id": "dataproc.operations.get"
+        },
+        "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 below allows API services to override the binding to use different resource name schemes, such as users/*/operations.",
+          "response": {
+            "$ref": "ListOperationsResponse"
+          },
+          "parameterOrder": [
+            "name"
+          ],
+          "httpMethod": "GET",
+          "parameters": {
+            "pageSize": {
+              "description": "The standard list page size.",
+              "format": "int32",
+              "type": "integer",
+              "location": "query"
+            },
+            "filter": {
+              "description": "The standard list filter.",
+              "type": "string",
+              "location": "query"
+            },
+            "name": {
+              "location": "path",
+              "description": "The name of the operation collection.",
+              "required": true,
+              "type": "string",
+              "pattern": "^operations$"
+            },
+            "pageToken": {
+              "location": "query",
+              "description": "The standard list page token.",
+              "type": "string"
+            }
+          },
+          "scopes": [
+            "https://www.googleapis.com/auth/cloud-platform"
+          ],
+          "flatPath": "v1beta1/operations",
+          "path": "v1beta1/{+name}",
+          "id": "dataproc.operations.list"
+        },
+        "cancel": {
+          "response": {
+            "$ref": "Empty"
+          },
+          "parameterOrder": [
+            "name"
+          ],
+          "httpMethod": "POST",
+          "scopes": [
+            "https://www.googleapis.com/auth/cloud-platform"
+          ],
+          "parameters": {
+            "name": {
+              "location": "path",
+              "description": "The name of the operation resource to be cancelled.",
+              "required": true,
+              "type": "string",
+              "pattern": "^operations/.+$"
+            }
+          },
+          "flatPath": "v1beta1/operations/{operationsId}:cancel",
+          "path": "v1beta1/{+name}:cancel",
+          "id": "dataproc.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.get or other methods to check whether the cancellation succeeded or whether the operation completed despite cancellation.",
+          "request": {
+            "$ref": "CancelOperationRequest"
+          }
+        },
+        "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.",
+          "response": {
+            "$ref": "Empty"
+          },
+          "parameterOrder": [
+            "name"
+          ],
+          "httpMethod": "DELETE",
+          "parameters": {
+            "name": {
+              "location": "path",
+              "description": "The name of the operation resource to be deleted.",
+              "required": true,
+              "type": "string",
+              "pattern": "^operations/.+$"
+            }
+          },
+          "scopes": [
+            "https://www.googleapis.com/auth/cloud-platform"
+          ],
+          "flatPath": "v1beta1/operations/{operationsId}",
+          "path": "v1beta1/{+name}",
+          "id": "dataproc.operations.delete"
+        }
+      }
     }
   },
   "parameters": {
-    "quotaUser": {
+    "$.xgafv": {
+      "enumDescriptions": [
+        "v1 error format",
+        "v2 error format"
+      ],
       "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"
-    },
-    "pp": {
-      "location": "query",
-      "description": "Pretty-print response.",
-      "type": "boolean",
-      "default": "true"
-    },
-    "bearer_token": {
-      "location": "query",
-      "description": "OAuth bearer token.",
-      "type": "string"
-    },
-    "oauth_token": {
-      "description": "OAuth 2.0 token for the current user.",
-      "type": "string",
-      "location": "query"
-    },
-    "upload_protocol": {
-      "location": "query",
-      "description": "Upload protocol for media (e.g. \"raw\", \"multipart\").",
-      "type": "string"
-    },
-    "prettyPrint": {
-      "description": "Returns response with indentations and line breaks.",
-      "type": "boolean",
-      "default": "true",
-      "location": "query"
-    },
-    "uploadType": {
-      "location": "query",
-      "description": "Legacy upload protocol for media (e.g. \"media\", \"multipart\").",
-      "type": "string"
-    },
-    "fields": {
-      "location": "query",
-      "description": "Selector specifying which fields to include in a partial response.",
+      "enum": [
+        "1",
+        "2"
+      ],
+      "description": "V1 error format.",
       "type": "string"
     },
     "callback": {
@@ -605,25 +579,7 @@
       "description": "JSONP",
       "type": "string"
     },
-    "$.xgafv": {
-      "enum": [
-        "1",
-        "2"
-      ],
-      "description": "V1 error format.",
-      "type": "string",
-      "enumDescriptions": [
-        "v1 error format",
-        "v2 error format"
-      ],
-      "location": "query"
-    },
     "alt": {
-      "enum": [
-        "json",
-        "media",
-        "proto"
-      ],
       "type": "string",
       "enumDescriptions": [
         "Responses with Content-Type of application/json",
@@ -632,20 +588,841 @@
       ],
       "location": "query",
       "description": "Data format for response.",
-      "default": "json"
+      "default": "json",
+      "enum": [
+        "json",
+        "media",
+        "proto"
+      ]
     },
-    "access_token": {
-      "description": "OAuth access token.",
+    "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"
     },
-    "key": {
+    "access_token": {
       "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.",
+      "description": "OAuth access token.",
+      "type": "string"
+    },
+    "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"
+    },
+    "pp": {
+      "description": "Pretty-print response.",
+      "type": "boolean",
+      "default": "true",
+      "location": "query"
+    },
+    "oauth_token": {
+      "location": "query",
+      "description": "OAuth 2.0 token for the current user.",
+      "type": "string"
+    },
+    "bearer_token": {
+      "location": "query",
+      "description": "OAuth bearer token.",
+      "type": "string"
+    },
+    "upload_protocol": {
+      "description": "Upload protocol for media (e.g. \"raw\", \"multipart\").",
+      "type": "string",
+      "location": "query"
+    },
+    "prettyPrint": {
+      "description": "Returns response with indentations and line breaks.",
+      "type": "boolean",
+      "default": "true",
+      "location": "query"
+    },
+    "fields": {
+      "location": "query",
+      "description": "Selector specifying which fields to include in a partial response.",
+      "type": "string"
+    },
+    "uploadType": {
+      "location": "query",
+      "description": "Legacy upload protocol for media (e.g. \"media\", \"multipart\").",
       "type": "string"
     }
   },
   "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:\nservice Foo {\n  rpc Bar(google.protobuf.Empty) returns (google.protobuf.Empty);\n}\nThe JSON representation for Empty is empty JSON object {}.",
+      "type": "object",
+      "properties": {},
+      "id": "Empty"
+    },
+    "HiveJob": {
+      "description": "A Cloud Dataproc job for running Hive queries on YARN.",
+      "type": "object",
+      "properties": {
+        "continueOnFailure": {
+          "description": "Optional Whether to continue executing queries if a query fails. The default value is false. Setting to true can be useful when executing independent parallel queries.",
+          "type": "boolean"
+        },
+        "queryFileUri": {
+          "description": "The HCFS URI of the script that contains Hive queries.",
+          "type": "string"
+        },
+        "queryList": {
+          "$ref": "QueryList",
+          "description": "A list of queries."
+        },
+        "jarFileUris": {
+          "description": "Optional HCFS URIs of jar files to add to the CLASSPATH of the Hive server and Hadoop MapReduce (MR) tasks. Can contain Hive SerDes and UDFs.",
+          "type": "array",
+          "items": {
+            "type": "string"
+          }
+        },
+        "scriptVariables": {
+          "description": "Optional Mapping of query variable names to values (equivalent to the Hive command: SET name=\"value\";).",
+          "type": "object",
+          "additionalProperties": {
+            "type": "string"
+          }
+        },
+        "properties": {
+          "description": "Optional A mapping of property names and values, used to configure Hive. Properties that conflict with values set by the Cloud Dataproc API may be overwritten. Can include properties set in /etc/hadoop/conf/*-site.xml, /etc/hive/conf/hive-site.xml, and classes in user code.",
+          "type": "object",
+          "additionalProperties": {
+            "type": "string"
+          }
+        }
+      },
+      "id": "HiveJob"
+    },
+    "DiagnoseClusterResults": {
+      "description": "The location of diagnostic output.",
+      "type": "object",
+      "properties": {
+        "outputUri": {
+          "description": "Output-only The Google Cloud Storage URI of the diagnostic output. The output report is a plain text file with a summary of collected diagnostics.",
+          "type": "string"
+        }
+      },
+      "id": "DiagnoseClusterResults"
+    },
+    "SoftwareConfiguration": {
+      "description": "Specifies the selection and configuration of software inside the cluster.",
+      "type": "object",
+      "properties": {
+        "imageVersion": {
+          "description": "Optional The version of software inside the cluster. It must match the regular expression [0-9]+\\.[0-9]+. If unspecified, it defaults to the latest version (see Cloud Dataproc Versioning).",
+          "type": "string"
+        },
+        "properties": {
+          "additionalProperties": {
+            "type": "string"
+          },
+          "description": "Optional The properties to set on daemon configuration files.Property keys are specified in \"prefix:property\" format, such as \"core:fs.defaultFS\". The following are supported prefixes and their mappings:  core - core-site.xml  hdfs - hdfs-site.xml  mapred - mapred-site.xml  yarn - yarn-site.xml  hive - hive-site.xml  pig - pig.properties  spark - spark-defaults.conf",
+          "type": "object"
+        }
+      },
+      "id": "SoftwareConfiguration"
+    },
+    "PySparkJob": {
+      "description": "A Cloud Dataproc job for running PySpark applications on YARN.",
+      "type": "object",
+      "properties": {
+        "jarFileUris": {
+          "description": "Optional HCFS URIs of jar files to add to the CLASSPATHs of the Python driver and tasks.",
+          "type": "array",
+          "items": {
+            "type": "string"
+          }
+        },
+        "loggingConfiguration": {
+          "description": "Optional The runtime log configuration for job execution.",
+          "$ref": "LoggingConfiguration"
+        },
+        "properties": {
+          "description": "Optional A mapping of property names to values, used to configure PySpark. Properties that conflict with values set by the Cloud Dataproc API may be overwritten. Can include properties set in /etc/spark/conf/spark-defaults.conf and classes in user code.",
+          "type": "object",
+          "additionalProperties": {
+            "type": "string"
+          }
+        },
+        "args": {
+          "description": "Optional The arguments to pass to the driver. Do not include arguments, such as --conf, that can be set as job properties, since a collision may occur that causes an incorrect job submission.",
+          "type": "array",
+          "items": {
+            "type": "string"
+          }
+        },
+        "fileUris": {
+          "description": "Optional HCFS URIs of files to be copied to the working directory of Python drivers and distributed tasks. Useful for naively parallel tasks.",
+          "type": "array",
+          "items": {
+            "type": "string"
+          }
+        },
+        "pythonFileUris": {
+          "description": "Optional HCFS file URIs of Python files to pass to the PySpark framework. Supported file types: .py, .egg, and .zip.",
+          "type": "array",
+          "items": {
+            "type": "string"
+          }
+        },
+        "mainPythonFileUri": {
+          "description": "Required The Hadoop Compatible Filesystem (HCFS) URI of the main Python file to use as the driver. Must be a .py file.",
+          "type": "string"
+        },
+        "archiveUris": {
+          "description": "Optional HCFS URIs of archives to be extracted in the working directory of .jar, .tar, .tar.gz, .tgz, and .zip.",
+          "type": "array",
+          "items": {
+            "type": "string"
+          }
+        }
+      },
+      "id": "PySparkJob"
+    },
+    "ClusterMetrics": {
+      "description": "Contains cluster daemon metrics, such as HDFS and YARN stats.",
+      "type": "object",
+      "properties": {
+        "hdfsMetrics": {
+          "additionalProperties": {
+            "format": "int64",
+            "type": "string"
+          },
+          "description": "The HDFS metrics.",
+          "type": "object"
+        },
+        "yarnMetrics": {
+          "additionalProperties": {
+            "format": "int64",
+            "type": "string"
+          },
+          "description": "The YARN metrics.",
+          "type": "object"
+        }
+      },
+      "id": "ClusterMetrics"
+    },
+    "ClusterConfiguration": {
+      "description": "The cluster configuration.",
+      "type": "object",
+      "properties": {
+        "configurationBucket": {
+          "description": "Optional A Google Cloud Storage staging bucket used for sharing generated SSH keys and configuration. If you do not specify a staging bucket, Cloud Dataproc will determine an appropriate Cloud Storage location (US, ASIA, or EU) for your cluster's staging bucket according to the Google Compute Engine zone where your cluster is deployed, and then it will create and manage this project-level, per-location bucket for you.",
+          "type": "string"
+        },
+        "masterConfiguration": {
+          "$ref": "InstanceGroupConfiguration",
+          "description": "Optional The Google Compute Engine configuration settings for the master instance in a cluster."
+        },
+        "secondaryWorkerConfiguration": {
+          "$ref": "InstanceGroupConfiguration",
+          "description": "Optional The Google Compute Engine configuration settings for additional worker instances in a cluster."
+        },
+        "initializationActions": {
+          "description": "Optional Commands to execute on each node after configuration is completed. By default, executables are run on master and all worker nodes. You can test a node's \u003ccode\u003erole\u003c/code\u003e metadata to run an executable on a master or worker node, as shown below:\nROLE=$(/usr/share/google/get_metadata_value attributes/role)\nif [[ \"${ROLE}\" == 'Master' ]]; then\n  ... master specific actions ...\nelse\n  ... worker specific actions ...\nfi\n",
+          "type": "array",
+          "items": {
+            "$ref": "NodeInitializationAction"
+          }
+        },
+        "workerConfiguration": {
+          "$ref": "InstanceGroupConfiguration",
+          "description": "Optional The Google Compute Engine configuration settings for worker instances in a cluster."
+        },
+        "softwareConfiguration": {
+          "$ref": "SoftwareConfiguration",
+          "description": "Optional The configuration settings for software inside the cluster."
+        },
+        "gceClusterConfiguration": {
+          "$ref": "GceClusterConfiguration",
+          "description": "Required The shared Google Compute Engine configuration settings for all instances in a cluster."
+        }
+      },
+      "id": "ClusterConfiguration"
+    },
+    "LoggingConfiguration": {
+      "description": "The runtime logging configuration of the job.",
+      "type": "object",
+      "properties": {
+        "driverLogLevels": {
+          "additionalProperties": {
+            "type": "string",
+            "enum": [
+              "LEVEL_UNSPECIFIED",
+              "ALL",
+              "TRACE",
+              "DEBUG",
+              "INFO",
+              "WARN",
+              "ERROR",
+              "FATAL",
+              "OFF"
+            ]
+          },
+          "description": "The per-package log levels for the driver. This may include \"root\" package name to configure rootLogger. Examples:  'com.google = FATAL', 'root = INFO', 'org.apache = DEBUG'",
+          "type": "object"
+        }
+      },
+      "id": "LoggingConfiguration"
+    },
+    "InstanceGroupConfiguration": {
+      "description": "The configuration settings for Google Compute Engine resources in an instance group, such as a master or worker group.",
+      "type": "object",
+      "properties": {
+        "machineTypeUri": {
+          "description": "The Google Compute Engine machine type used for cluster instances. Example: https://www.googleapis.com/compute/v1/projects/[project_id]/zones/us-east1-a/machineTypes/n1-standard-2.",
+          "type": "string"
+        },
+        "isPreemptible": {
+          "description": "Specifies that this instance group contains Preemptible Instances.",
+          "type": "boolean"
+        },
+        "imageUri": {
+          "description": "Output-only The Google Compute Engine image resource used for cluster instances. Inferred from SoftwareConfiguration.image_version.",
+          "type": "string"
+        },
+        "managedGroupConfiguration": {
+          "$ref": "ManagedGroupConfiguration",
+          "description": "Output-only The configuration for Google Compute Engine Instance Group Manager that manages this group. This is only used for preemptible instance groups."
+        },
+        "instanceNames": {
+          "description": "The list of instance names. Dataproc derives the names from cluster_name, num_instances, and the instance group if not set by user (recommended practice is to let Dataproc derive the name).",
+          "type": "array",
+          "items": {
+            "type": "string"
+          }
+        },
+        "accelerators": {
+          "description": "Optional The Google Compute Engine accelerator configuration for these instances.",
+          "type": "array",
+          "items": {
+            "$ref": "AcceleratorConfiguration"
+          }
+        },
+        "numInstances": {
+          "description": "The number of VM instances in the instance group. For master instance groups, must be set to 1.",
+          "format": "int32",
+          "type": "integer"
+        },
+        "diskConfiguration": {
+          "description": "Disk option configuration settings.",
+          "$ref": "DiskConfiguration"
+        }
+      },
+      "id": "InstanceGroupConfiguration"
+    },
+    "GceClusterConfiguration": {
+      "description": "Common configuration settings for resources of Google Compute Engine cluster instances, applicable to all instances in the cluster.",
+      "type": "object",
+      "properties": {
+        "networkUri": {
+          "description": "The Google Compute Engine network to be used for machine communications. Cannot be specified with subnetwork_uri. If neither network_uri nor subnetwork_uri is specified, the \"default\" network of the project is used, if it exists. Cannot be a \"Custom Subnet Network\" (see https://cloud.google.com/compute/docs/subnetworks for more information). Example: https://www.googleapis.com/compute/v1/projects/[project_id]/regions/global/default.",
+          "type": "string"
+        },
+        "zoneUri": {
+          "description": "Required The zone where the Google Compute Engine cluster will be located. Example: https://www.googleapis.com/compute/v1/projects/[project_id]/zones/[zone].",
+          "type": "string"
+        },
+        "internalIpOnly": {
+          "description": "If true, all instances in the cluser will only have internal IP addresses. By default, clusters are not restricted to internal IP addresses, and will have ephemeral external IP addresses assigned to each instance. This restriction can only be enabled for subnetwork enabled networks, and all off-cluster dependencies must be configured to be accessible without external IP addresses.",
+          "type": "boolean"
+        },
+        "metadata": {
+          "additionalProperties": {
+            "type": "string"
+          },
+          "description": "The Google Compute Engine metadata entries to add to all instances.",
+          "type": "object"
+        },
+        "serviceAccountScopes": {
+          "description": "The URIs of service account scopes to be included in Google Compute Engine instances. The following base set of scopes is always included: - https://www.googleapis.com/auth/cloud.useraccounts.readonly - https://www.googleapis.com/auth/devstorage.read_write - https://www.googleapis.com/auth/logging.write If no scopes are specfied, the following defaults are also provided: - https://www.googleapis.com/auth/bigquery - https://www.googleapis.com/auth/bigtable.admin.table - https://www.googleapis.com/auth/bigtable.data - https://www.googleapis.com/auth/devstorage.full_control",
+          "type": "array",
+          "items": {
+            "type": "string"
+          }
+        },
+        "tags": {
+          "description": "The Google Compute Engine tags to add to all instances.",
+          "type": "array",
+          "items": {
+            "type": "string"
+          }
+        },
+        "serviceAccount": {
+          "description": "Optional The service account of the instances. Defaults to the default Google Compute Engine service account. Custom service accounts need permissions equivalent to the folloing IAM roles:\nroles/logging.logWriter\nroles/storage.objectAdmin(see https://cloud.google.com/compute/docs/access/service-accounts#custom_service_accounts for more information). Example: [account_id]@[project_id].iam.gserviceaccount.com",
+          "type": "string"
+        },
+        "subnetworkUri": {
+          "description": "The Google Compute Engine subnetwork to be used for machine communications. Cannot be specified with network_uri. Example: https://www.googleapis.com/compute/v1/projects/[project_id]/regions/us-east1/sub0.",
+          "type": "string"
+        }
+      },
+      "id": "GceClusterConfiguration"
+    },
+    "CancelOperationRequest": {
+      "description": "The request message for Operations.CancelOperation.",
+      "type": "object",
+      "properties": {},
+      "id": "CancelOperationRequest"
+    },
+    "DiagnoseClusterOutputLocation": {
+      "description": "The location of diagnostic output.",
+      "type": "object",
+      "properties": {
+        "outputUri": {
+          "description": "Output-only The Google Cloud Storage URI of the diagnostic output. This is a plain text file with a summary of collected diagnostics.",
+          "type": "string"
+        }
+      },
+      "id": "DiagnoseClusterOutputLocation"
+    },
+    "Operation": {
+      "description": "This resource represents a long-running operation that is the result of a network API call.",
+      "type": "object",
+      "properties": {
+        "error": {
+          "$ref": "Status",
+          "description": "The error result of the operation in case of failure or cancellation."
+        },
+        "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.",
+          "type": "object",
+          "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"
+        },
+        "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": {
+          "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 have the format of operations/some/unique/name.",
+          "type": "string"
+        }
+      },
+      "id": "Operation"
+    },
+    "OperationStatus": {
+      "description": "The status of the operation.",
+      "type": "object",
+      "properties": {
+        "state": {
+          "enumDescriptions": [
+            "Unused.",
+            "The operation has been created.",
+            "The operation is running.",
+            "The operation is done; either cancelled or completed."
+          ],
+          "enum": [
+            "UNKNOWN",
+            "PENDING",
+            "RUNNING",
+            "DONE"
+          ],
+          "description": "A message containing the operation state.",
+          "type": "string"
+        },
+        "details": {
+          "description": "A message containing any operation metadata details.",
+          "type": "string"
+        },
+        "innerState": {
+          "description": "A message containing the detailed operation state.",
+          "type": "string"
+        },
+        "stateStartTime": {
+          "description": "The time this state was entered.",
+          "format": "google-datetime",
+          "type": "string"
+        }
+      },
+      "id": "OperationStatus"
+    },
+    "JobReference": {
+      "description": "Encapsulates the full scoping used to reference a job.",
+      "type": "object",
+      "properties": {
+        "projectId": {
+          "description": "Required The ID of the Google Cloud Platform project that the job belongs to.",
+          "type": "string"
+        },
+        "jobId": {
+          "description": "Required The job ID, which must be unique within the project. The job ID is generated by the server upon job submission or provided by the user as a means to perform retries without creating duplicate jobs. The ID must contain only letters (a-z, A-Z), numbers (0-9), underscores (_), or hyphens (-). The maximum length is 100 characters.",
+          "type": "string"
+        }
+      },
+      "id": "JobReference"
+    },
+    "SubmitJobRequest": {
+      "description": "A request to submit a job.",
+      "type": "object",
+      "properties": {
+        "job": {
+          "$ref": "Job",
+          "description": "Required The job resource."
+        }
+      },
+      "id": "SubmitJobRequest"
+    },
+    "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). The error model is designed to be:\nSimple to use and understand for most users\nFlexible enough to meet unexpected needsOverviewThe Status message contains three pieces of data: error code, error message, and error details. The error code should be an enum value of google.rpc.Code, but it may accept additional error codes if needed. The error message should be a developer-facing English message that helps developers understand and resolve the error. If a localized user-facing error message is needed, put the localized message in the error details or localize it in the client. The optional error details may contain arbitrary information about the error. There is a predefined set of error detail types in the package google.rpc which can be used for common error conditions.Language mappingThe Status message is the logical representation of the error model, but it is not necessarily the actual wire format. When the Status message is exposed in different client libraries and different wire protocols, it can be mapped differently. For example, it will likely be mapped to some exceptions in Java, but more likely mapped to some error codes in C.Other usesThe error model and the Status message can be used in a variety of environments, either with or without APIs, to provide a consistent developer experience across different environments.Example uses of this error model include:\nPartial errors. If a service needs to return partial errors to the client, it may embed the Status in the normal response to indicate the partial errors.\nWorkflow errors. A typical workflow has multiple steps. Each step may have a Status message for error reporting purpose.\nBatch operations. If a client uses batch request and batch response, the Status message should be used directly inside batch response, one for each error sub-response.\nAsynchronous operations. If an API call embeds asynchronous operation results in its response, the status of those operations should be represented directly using the Status message.\nLogging. If some API errors are stored in logs, the message Status could be used directly after any stripping needed for security/privacy reasons.",
+      "type": "object",
+      "properties": {
+        "code": {
+          "description": "The status code, which should be an enum value of google.rpc.Code.",
+          "format": "int32",
+          "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"
+        },
+        "details": {
+          "description": "A list of messages that carry the error details. There will be 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"
+            }
+          }
+        }
+      },
+      "id": "Status"
+    },
+    "JobScheduling": {
+      "description": "Job scheduling options.Beta Feature: These options are available for testing purposes only. They may be changed before final release.",
+      "type": "object",
+      "properties": {
+        "maxFailuresPerHour": {
+          "description": "Optional Maximum number of times per hour a driver may be restarted as a result of driver terminating with non-zero code before job is reported failed.A job may be reported as thrashing if driver exits with non-zero code 4 times within 10 minute window.Maximum value is 10.",
+          "format": "int32",
+          "type": "integer"
+        }
+      },
+      "id": "JobScheduling"
+    },
+    "ListJobsResponse": {
+      "description": "A list of jobs in a project.",
+      "type": "object",
+      "properties": {
+        "nextPageToken": {
+          "description": "Optional This token is included in the response if there are more results to fetch. To fetch additional results, provide this value as the page_token in a subsequent \u003ccode\u003eListJobsRequest\u003c/code\u003e.",
+          "type": "string"
+        },
+        "jobs": {
+          "description": "Output-only Jobs list.",
+          "type": "array",
+          "items": {
+            "$ref": "Job"
+          }
+        }
+      },
+      "id": "ListJobsResponse"
+    },
+    "NodeInitializationAction": {
+      "description": "Specifies an executable to run on a fully configured node and a timeout period for executable completion.",
+      "type": "object",
+      "properties": {
+        "executionTimeout": {
+          "description": "Optional Amount of time executable has to complete. Default is 10 minutes. Cluster creation fails with an explanatory error message (the name of the executable that caused the error and the exceeded timeout period) if the executable is not completed at end of the timeout period.",
+          "format": "google-duration",
+          "type": "string"
+        },
+        "executableFile": {
+          "description": "Required Google Cloud Storage URI of executable file.",
+          "type": "string"
+        }
+      },
+      "id": "NodeInitializationAction"
+    },
+    "CancelJobRequest": {
+      "description": "A request to cancel a job.",
+      "type": "object",
+      "properties": {},
+      "id": "CancelJobRequest"
+    },
+    "SparkSqlJob": {
+      "description": "A Cloud Dataproc job for running Spark SQL queries.",
+      "type": "object",
+      "properties": {
+        "queryList": {
+          "$ref": "QueryList",
+          "description": "A list of queries."
+        },
+        "queryFileUri": {
+          "description": "The HCFS URI of the script that contains SQL queries.",
+          "type": "string"
+        },
+        "scriptVariables": {
+          "description": "Optional Mapping of query variable names to values (equivalent to the Spark SQL command: SET name=\"value\";).",
+          "type": "object",
+          "additionalProperties": {
+            "type": "string"
+          }
+        },
+        "jarFileUris": {
+          "description": "Optional HCFS URIs of jar files to be added to the Spark CLASSPATH.",
+          "type": "array",
+          "items": {
+            "type": "string"
+          }
+        },
+        "loggingConfiguration": {
+          "$ref": "LoggingConfiguration",
+          "description": "Optional The runtime log configuration for job execution."
+        },
+        "properties": {
+          "description": "Optional A mapping of property names to values, used to configure Spark SQL's SparkConf. Properties that conflict with values set by the Cloud Dataproc API may be overwritten.",
+          "type": "object",
+          "additionalProperties": {
+            "type": "string"
+          }
+        }
+      },
+      "id": "SparkSqlJob"
+    },
+    "Cluster": {
+      "description": "Describes the identifying information, configuration, and status of a cluster of Google Compute Engine instances.",
+      "type": "object",
+      "properties": {
+        "configuration": {
+          "$ref": "ClusterConfiguration",
+          "description": "Required The cluster configuration. Note that Cloud Dataproc may set default values, and values may change when clusters are updated."
+        },
+        "labels": {
+          "description": "Optional The labels to associate with this cluster.Label keys must be between 1 and 63 characters long, and must conform to the following PCRE regular expression: \\p{Ll}\\p{Lo}{0,62}Label values must be between 1 and 63 characters long, and must conform to the following PCRE regular expression: \\p{Ll}\\p{Lo}\\p{N}_-{0,63}No more than 64 labels can be associated with a given cluster.",
+          "type": "object",
+          "additionalProperties": {
+            "type": "string"
+          }
+        },
+        "metrics": {
+          "$ref": "ClusterMetrics",
+          "description": "Contains cluster daemon metrics such as HDFS and YARN stats."
+        },
+        "status": {
+          "$ref": "ClusterStatus",
+          "description": "Output-only Cluster status."
+        },
+        "statusHistory": {
+          "description": "Output-only Previous cluster statuses.",
+          "type": "array",
+          "items": {
+            "$ref": "ClusterStatus"
+          }
+        },
+        "clusterName": {
+          "description": "Required The cluster name. Cluster names within a project must be unique. Names from deleted clusters can be reused.",
+          "type": "string"
+        },
+        "clusterUuid": {
+          "description": "Output-only A cluster UUID (Unique Universal Identifier). Cloud Dataproc generates this value when it creates the cluster.",
+          "type": "string"
+        },
+        "projectId": {
+          "description": "Required The Google Cloud Platform project ID that the cluster belongs to.",
+          "type": "string"
+        }
+      },
+      "id": "Cluster"
+    },
+    "ListOperationsResponse": {
+      "description": "The response message for Operations.ListOperations.",
+      "type": "object",
+      "properties": {
+        "operations": {
+          "description": "A list of operations that matches the specified filter in the request.",
+          "type": "array",
+          "items": {
+            "$ref": "Operation"
+          }
+        },
+        "nextPageToken": {
+          "description": "The standard List next-page token.",
+          "type": "string"
+        }
+      },
+      "id": "ListOperationsResponse"
+    },
+    "OperationMetadata": {
+      "description": "Metadata describing the operation.",
+      "type": "object",
+      "properties": {
+        "status": {
+          "description": "Output-only Current operation status.",
+          "$ref": "OperationStatus"
+        },
+        "statusHistory": {
+          "description": "Output-only Previous operation status.",
+          "type": "array",
+          "items": {
+            "$ref": "OperationStatus"
+          }
+        },
+        "clusterUuid": {
+          "description": "Cluster UUId for the operation.",
+          "type": "string"
+        },
+        "clusterName": {
+          "description": "Name of the cluster for the operation.",
+          "type": "string"
+        },
+        "operationType": {
+          "description": "Output-only The operation type.",
+          "type": "string"
+        },
+        "description": {
+          "description": "Output-only Short description of operation.",
+          "type": "string"
+        },
+        "warnings": {
+          "description": "Output-only Errors encountered during operation execution.",
+          "type": "array",
+          "items": {
+            "type": "string"
+          }
+        }
+      },
+      "id": "OperationMetadata"
+    },
+    "JobPlacement": {
+      "description": "Cloud Dataproc job configuration.",
+      "type": "object",
+      "properties": {
+        "clusterName": {
+          "description": "Required The name of the cluster where the job will be submitted.",
+          "type": "string"
+        },
+        "clusterUuid": {
+          "description": "Output-only A cluster UUID generated by the Dataproc service when the job is submitted.",
+          "type": "string"
+        }
+      },
+      "id": "JobPlacement"
+    },
+    "ClusterStatus": {
+      "description": "The status of a cluster and its instances.",
+      "type": "object",
+      "properties": {
+        "stateStartTime": {
+          "description": "Time when this state was entered.",
+          "format": "google-datetime",
+          "type": "string"
+        },
+        "substate": {
+          "enumDescriptions": [
+            "",
+            "The cluster is known to be in an unhealthy state (for example, critical daemons are not running or HDFS capacity is exhausted).Applies to RUNNING state.",
+            "The agent-reported status is out of date (may occur if Cloud Dataproc loses communication with Agent).Applies to RUNNING state."
+          ],
+          "enum": [
+            "UNSPECIFIED",
+            "UNHEALTHY",
+            "STALE_STATUS"
+          ],
+          "description": "Output-only Additional state information that includes status reported by the agent.",
+          "type": "string"
+        },
+        "detail": {
+          "description": "Optional details of cluster's state.",
+          "type": "string"
+        },
+        "state": {
+          "description": "The cluster's state.",
+          "type": "string",
+          "enumDescriptions": [
+            "The cluster state is unknown.",
+            "The cluster is being created and set up. It is not ready for use.",
+            "The cluster is currently running and healthy. It is ready for use.",
+            "The cluster encountered an error. It is not ready for use.",
+            "The cluster is being deleted. It cannot be used.",
+            "The cluster is being updated. It continues to accept and process jobs."
+          ],
+          "enum": [
+            "UNKNOWN",
+            "CREATING",
+            "RUNNING",
+            "ERROR",
+            "DELETING",
+            "UPDATING"
+          ]
+        }
+      },
+      "id": "ClusterStatus"
+    },
+    "PigJob": {
+      "description": "A Cloud Dataproc job for running Pig queries on YARN.",
+      "type": "object",
+      "properties": {
+        "jarFileUris": {
+          "description": "Optional HCFS URIs of jar files to add to the CLASSPATH of the Pig Client and Hadoop MapReduce (MR) tasks. Can contain Pig UDFs.",
+          "type": "array",
+          "items": {
+            "type": "string"
+          }
+        },
+        "scriptVariables": {
+          "additionalProperties": {
+            "type": "string"
+          },
+          "description": "Optional Mapping of query variable names to values (equivalent to the Pig command: name=[value]).",
+          "type": "object"
+        },
+        "loggingConfiguration": {
+          "description": "Optional The runtime log configuration for job execution.",
+          "$ref": "LoggingConfiguration"
+        },
+        "properties": {
+          "additionalProperties": {
+            "type": "string"
+          },
+          "description": "Optional A mapping of property names to values, used to configure Pig. Properties that conflict with values set by the Cloud Dataproc API may be overwritten. Can include properties set in /etc/hadoop/conf/*-site.xml, /etc/pig/conf/pig.properties, and classes in user code.",
+          "type": "object"
+        },
+        "continueOnFailure": {
+          "description": "Optional Whether to continue executing queries if a query fails. The default value is false. Setting to true can be useful when executing independent parallel queries.",
+          "type": "boolean"
+        },
+        "queryFileUri": {
+          "description": "The HCFS URI of the script that contains the Pig queries.",
+          "type": "string"
+        },
+        "queryList": {
+          "description": "A list of queries.",
+          "$ref": "QueryList"
+        }
+      },
+      "id": "PigJob"
+    },
+    "AcceleratorConfiguration": {
+      "description": "Specifies the type and number of accelerator cards attached to the instances of an instance group (see GPUs on Compute Engine).",
+      "type": "object",
+      "properties": {
+        "acceleratorTypeUri": {
+          "description": "Full or partial URI of the accelerator type resource to expose to this instance. See Google Compute Engine AcceleratorTypes( /compute/docs/reference/beta/acceleratorTypes)",
+          "type": "string"
+        },
+        "acceleratorCount": {
+          "description": "The number of the accelerator cards of this type exposed to this instance.",
+          "format": "int32",
+          "type": "integer"
+        }
+      },
+      "id": "AcceleratorConfiguration"
+    },
     "ListClustersResponse": {
       "description": "The list of all clusters in a project.",
       "type": "object",
@@ -665,6 +1442,8 @@
       "id": "ListClustersResponse"
     },
     "ManagedGroupConfiguration": {
+      "description": "Specifies the resources used to actively manage an instance group.",
+      "type": "object",
       "properties": {
         "instanceGroupManagerName": {
           "description": "Output-only The name of the Instance Group Manager for this group.",
@@ -675,99 +1454,11 @@
           "type": "string"
         }
       },
-      "id": "ManagedGroupConfiguration",
-      "description": "Specifies the resources used to actively manage an instance group.",
-      "type": "object"
-    },
-    "Job": {
-      "description": "A Cloud Dataproc job resource.",
-      "type": "object",
-      "properties": {
-        "hadoopJob": {
-          "description": "Job is a Hadoop job.",
-          "$ref": "HadoopJob"
-        },
-        "placement": {
-          "description": "Required Job information, including how, when, and where to run the job.",
-          "$ref": "JobPlacement"
-        },
-        "status": {
-          "$ref": "JobStatus",
-          "description": "Output-only The job status. Additional application-specific status information may be contained in the \u003ccode\u003etype_job\u003c/code\u003e and \u003ccode\u003eyarn_applications\u003c/code\u003e fields."
-        },
-        "driverControlFilesUri": {
-          "description": "Output-only If present, the location of miscellaneous control files which may be used as part of job setup and handling. If not present, control files may be placed in the same location as driver_output_uri.",
-          "type": "string"
-        },
-        "submittedBy": {
-          "description": "Output-only The email address of the user submitting the job. For jobs submitted on the cluster, the address is \u003ccode\u003eusername@hostname\u003c/code\u003e.",
-          "type": "string"
-        },
-        "scheduling": {
-          "$ref": "JobScheduling",
-          "description": "Optional Job scheduling configuration."
-        },
-        "pigJob": {
-          "$ref": "PigJob",
-          "description": "Job is a Pig job."
-        },
-        "hiveJob": {
-          "description": "Job is a Hive job.",
-          "$ref": "HiveJob"
-        },
-        "labels": {
-          "additionalProperties": {
-            "type": "string"
-          },
-          "description": "Optional The labels to associate with this job.Label keys must be between 1 and 63 characters long, and must conform to the following regular expression: \\p{Ll}\\p{Lo}{0,62}Label values must be between 1 and 63 characters long, and must conform to the following regular expression: \\p{Ll}\\p{Lo}\\p{N}_-{0,63}No more than 64 labels can be associated with a given job.",
-          "type": "object"
-        },
-        "driverOutputResourceUri": {
-          "description": "Output-only A URI pointing to the location of the stdout of the job's driver program.",
-          "type": "string"
-        },
-        "sparkSqlJob": {
-          "$ref": "SparkSqlJob",
-          "description": "Job is a SparkSql job."
-        },
-        "sparkJob": {
-          "$ref": "SparkJob",
-          "description": "Job is a Spark job."
-        },
-        "statusHistory": {
-          "description": "Output-only The previous job status.",
-          "type": "array",
-          "items": {
-            "$ref": "JobStatus"
-          }
-        },
-        "yarnApplications": {
-          "description": "Output-only The collection of YARN applications spun up by this job.",
-          "type": "array",
-          "items": {
-            "$ref": "YarnApplication"
-          }
-        },
-        "pysparkJob": {
-          "$ref": "PySparkJob",
-          "description": "Job is a Pyspark job."
-        },
-        "reference": {
-          "description": "Optional The fully qualified reference to the job, which can be used to obtain the equivalent REST path of the job resource. If this property is not specified when a job is created, the server generates a \u003ccode\u003ejob_id\u003c/code\u003e.",
-          "$ref": "JobReference"
-        },
-        "interactive": {
-          "description": "Optional If set to true, the driver's stdin will be kept open and driver_input_uri will be set to provide a path at which additional input can be sent to the driver.",
-          "type": "boolean"
-        },
-        "driverInputResourceUri": {
-          "description": "Output-only A URI pointing to the location of the stdin of the job's driver program, only set if the job is interactive.",
-          "type": "string"
-        }
-      },
-      "id": "Job"
+      "id": "ManagedGroupConfiguration"
     },
     "SparkJob": {
+      "description": "A Cloud Dataproc job for running Spark applications on YARN.",
+      "type": "object",
       "properties": {
         "jarFileUris": {
           "description": "Optional HCFS URIs of jar files to add to the CLASSPATHs of the Spark driver and tasks.",
@@ -817,53 +1508,95 @@
           "type": "string"
         }
       },
-      "id": "SparkJob",
-      "description": "A Cloud Dataproc job for running Spark applications on YARN.",
-      "type": "object"
+      "id": "SparkJob"
     },
-    "JobStatus": {
+    "Job": {
+      "description": "A Cloud Dataproc job resource.",
+      "type": "object",
       "properties": {
-        "state": {
-          "enum": [
-            "STATE_UNSPECIFIED",
-            "PENDING",
-            "SETUP_DONE",
-            "RUNNING",
-            "CANCEL_PENDING",
-            "CANCEL_STARTED",
-            "CANCELLED",
-            "DONE",
-            "ERROR",
-            "ATTEMPT_FAILURE"
-          ],
-          "description": "Required A state message specifying the overall job state.",
-          "type": "string",
-          "enumDescriptions": [
-            "The job state is unknown.",
-            "The job is pending; it has been submitted, but is not yet running.",
-            "Job has been received by the service and completed initial setup; it will shortly be submitted to the cluster.",
-            "The job is running on the cluster.",
-            "A CancelJob request has been received, but is pending.",
-            "Transient in-flight resources have been canceled, and the request to cancel the running job has been issued to the cluster.",
-            "The job cancelation was successful.",
-            "The job has completed successfully.",
-            "The job has completed, but encountered an error.",
-            "Job attempt has failed. The detail field contains failure details for this attempt.Applies to restartable jobs only."
-          ]
+        "reference": {
+          "$ref": "JobReference",
+          "description": "Optional The fully qualified reference to the job, which can be used to obtain the equivalent REST path of the job resource. If this property is not specified when a job is created, the server generates a \u003ccode\u003ejob_id\u003c/code\u003e."
         },
-        "details": {
-          "description": "Optional Job state details, such as an error description if the state is \u003ccode\u003eERROR\u003c/code\u003e.",
+        "interactive": {
+          "description": "Optional If set to true, the driver's stdin will be kept open and driver_input_uri will be set to provide a path at which additional input can be sent to the driver.",
+          "type": "boolean"
+        },
+        "driverInputResourceUri": {
+          "description": "Output-only A URI pointing to the location of the stdin of the job's driver program, only set if the job is interactive.",
           "type": "string"
         },
-        "stateStartTime": {
-          "description": "Output-only The time when this state was entered.",
-          "format": "google-datetime",
+        "hadoopJob": {
+          "description": "Job is a Hadoop job.",
+          "$ref": "HadoopJob"
+        },
+        "placement": {
+          "description": "Required Job information, including how, when, and where to run the job.",
+          "$ref": "JobPlacement"
+        },
+        "status": {
+          "description": "Output-only The job status. Additional application-specific status information may be contained in the \u003ccode\u003etype_job\u003c/code\u003e and \u003ccode\u003eyarn_applications\u003c/code\u003e fields.",
+          "$ref": "JobStatus"
+        },
+        "driverControlFilesUri": {
+          "description": "Output-only If present, the location of miscellaneous control files which may be used as part of job setup and handling. If not present, control files may be placed in the same location as driver_output_uri.",
           "type": "string"
+        },
+        "submittedBy": {
+          "description": "Output-only The email address of the user submitting the job. For jobs submitted on the cluster, the address is \u003ccode\u003eusername@hostname\u003c/code\u003e.",
+          "type": "string"
+        },
+        "scheduling": {
+          "$ref": "JobScheduling",
+          "description": "Optional Job scheduling configuration."
+        },
+        "pigJob": {
+          "description": "Job is a Pig job.",
+          "$ref": "PigJob"
+        },
+        "hiveJob": {
+          "description": "Job is a Hive job.",
+          "$ref": "HiveJob"
+        },
+        "labels": {
+          "additionalProperties": {
+            "type": "string"
+          },
+          "description": "Optional The labels to associate with this job.Label keys must be between 1 and 63 characters long, and must conform to the following regular expression: \\p{Ll}\\p{Lo}{0,62}Label values must be between 1 and 63 characters long, and must conform to the following regular expression: \\p{Ll}\\p{Lo}\\p{N}_-{0,63}No more than 64 labels can be associated with a given job.",
+          "type": "object"
+        },
+        "driverOutputResourceUri": {
+          "description": "Output-only A URI pointing to the location of the stdout of the job's driver program.",
+          "type": "string"
+        },
+        "statusHistory": {
+          "description": "Output-only The previous job status.",
+          "type": "array",
+          "items": {
+            "$ref": "JobStatus"
+          }
+        },
+        "sparkSqlJob": {
+          "description": "Job is a SparkSql job.",
+          "$ref": "SparkSqlJob"
+        },
+        "sparkJob": {
+          "$ref": "SparkJob",
+          "description": "Job is a Spark job."
+        },
+        "yarnApplications": {
+          "description": "Output-only The collection of YARN applications spun up by this job.",
+          "type": "array",
+          "items": {
+            "$ref": "YarnApplication"
+          }
+        },
+        "pysparkJob": {
+          "$ref": "PySparkJob",
+          "description": "Job is a Pyspark job."
         }
       },
-      "id": "JobStatus",
-      "description": "Cloud Dataproc job status.",
-      "type": "object"
+      "id": "Job"
     },
     "DiskConfiguration": {
       "description": "Specifies the configuration of disk options for a group of VM instances.",
@@ -882,15 +1615,71 @@
       },
       "id": "DiskConfiguration"
     },
-    "ClusterOperationStatus": {
+    "JobStatus": {
+      "description": "Cloud Dataproc job status.",
+      "type": "object",
       "properties": {
         "state": {
-          "enum": [
-            "UNKNOWN",
-            "PENDING",
-            "RUNNING",
-            "DONE"
+          "enumDescriptions": [
+            "The job state is unknown.",
+            "The job is pending; it has been submitted, but is not yet running.",
+            "Job has been received by the service and completed initial setup; it will shortly be submitted to the cluster.",
+            "The job is running on the cluster.",
+            "A CancelJob request has been received, but is pending.",
+            "Transient in-flight resources have been canceled, and the request to cancel the running job has been issued to the cluster.",
+            "The job cancelation was successful.",
+            "The job has completed successfully.",
+            "The job has completed, but encountered an error.",
+            "Job attempt has failed. The detail field contains failure details for this attempt.Applies to restartable jobs only."
           ],
+          "enum": [
+            "STATE_UNSPECIFIED",
+            "PENDING",
+            "SETUP_DONE",
+            "RUNNING",
+            "CANCEL_PENDING",
+            "CANCEL_STARTED",
+            "CANCELLED",
+            "DONE",
+            "ERROR",
+            "ATTEMPT_FAILURE"
+          ],
+          "description": "Required A state message specifying the overall job state.",
+          "type": "string"
+        },
+        "details": {
+          "description": "Optional Job state details, such as an error description if the state is \u003ccode\u003eERROR\u003c/code\u003e.",
+          "type": "string"
+        },
+        "stateStartTime": {
+          "description": "Output-only The time when this state was entered.",
+          "format": "google-datetime",
+          "type": "string"
+        },
+        "substate": {
+          "enumDescriptions": [
+            "",
+            "The Job is submitted to the agent.Applies to RUNNING state.",
+            "The Job has been received and is awaiting execution (it may be waiting for a condition to be met). See the \"details\" field for the reason for the delay.Applies to RUNNING state.",
+            "The agent-reported status is out of date, which may be caused by a loss of communication between the agent and Cloud Dataproc. If the agent does not send a timely update, the job will fail.Applies to RUNNING state."
+          ],
+          "enum": [
+            "UNSPECIFIED",
+            "SUBMITTED",
+            "QUEUED",
+            "STALE_STATUS"
+          ],
+          "description": "Output-only Additional state information, which includes status reported by the agent.",
+          "type": "string"
+        }
+      },
+      "id": "JobStatus"
+    },
+    "ClusterOperationStatus": {
+      "description": "The status of the operation.",
+      "type": "object",
+      "properties": {
+        "state": {
           "description": "Output-only A message containing the operation state.",
           "type": "string",
           "enumDescriptions": [
@@ -898,6 +1687,12 @@
             "The operation has been created.",
             "The operation is running.",
             "The operation is done; either cancelled or completed."
+          ],
+          "enum": [
+            "UNKNOWN",
+            "PENDING",
+            "RUNNING",
+            "DONE"
           ]
         },
         "details": {
@@ -914,23 +1709,72 @@
           "type": "string"
         }
       },
-      "id": "ClusterOperationStatus",
-      "description": "The status of the operation.",
-      "type": "object"
+      "id": "ClusterOperationStatus"
     },
-    "HadoopJob": {
+    "YarnApplication": {
+      "description": "A YARN application created by a job. Application information is a subset of \u003ccode\u003eorg.apache.hadoop.yarn.proto.YarnProtos.ApplicationReportProto\u003c/code\u003e.",
+      "type": "object",
       "properties": {
-        "mainClass": {
-          "description": "The name of the driver's main class. The jar file containing the class must be in the default CLASSPATH or specified in jar_file_uris.",
+        "trackingUrl": {
+          "description": "Optional The HTTP URL of the ApplicationMaster, HistoryServer, or TimelineServer that provides application-specific information. The URL uses the internal hostname, and requires a proxy server for resolution and, possibly, access.",
           "type": "string"
         },
-        "archiveUris": {
-          "description": "Optional HCFS URIs of archives to be extracted in the working directory of Hadoop drivers and tasks. Supported file types: .jar, .tar, .tar.gz, .tgz, or .zip.",
+        "progress": {
+          "description": "Required The numerical progress of the application, from 1 to 100.",
+          "format": "float",
+          "type": "number"
+        },
+        "state": {
+          "description": "Required The application state.",
+          "type": "string",
+          "enumDescriptions": [
+            "Status is unspecified.",
+            "Status is NEW.",
+            "Status is NEW_SAVING.",
+            "Status is SUBMITTED.",
+            "Status is ACCEPTED.",
+            "Status is RUNNING.",
+            "Status is FINISHED.",
+            "Status is FAILED.",
+            "Status is KILLED."
+          ],
+          "enum": [
+            "STATE_UNSPECIFIED",
+            "NEW",
+            "NEW_SAVING",
+            "SUBMITTED",
+            "ACCEPTED",
+            "RUNNING",
+            "FINISHED",
+            "FAILED",
+            "KILLED"
+          ]
+        },
+        "name": {
+          "description": "Required The application name.",
+          "type": "string"
+        }
+      },
+      "id": "YarnApplication"
+    },
+    "QueryList": {
+      "description": "A list of queries to run on a cluster.",
+      "type": "object",
+      "properties": {
+        "queries": {
+          "description": "Required The queries to execute. You do not need to terminate a query with a semicolon. Multiple queries can be specified in one string by separating each with a semicolon. Here is an example of an Cloud Dataproc API snippet that uses a QueryList to specify a HiveJob:\n\"hiveJob\": {\n  \"queryList\": {\n    \"queries\": [\n      \"query1\",\n      \"query2\",\n      \"query3;query4\",\n    ]\n  }\n}\n",
           "type": "array",
           "items": {
             "type": "string"
           }
-        },
+        }
+      },
+      "id": "QueryList"
+    },
+    "HadoopJob": {
+      "description": "A Cloud Dataproc job for running Hadoop MapReduce jobs on YARN.",
+      "type": "object",
+      "properties": {
         "mainJarFileUri": {
           "description": "The Hadoop Compatible Filesystem (HCFS) URI of the jar file containing the main class. Examples:  'gs://foo-bucket/analytics-binaries/extract-useful-metrics-mr.jar'  'hdfs:/tmp/test-samples/custom-wordcount.jar'  'file:///home/usr/lib/hadoop-mapreduce/hadoop-mapreduce-examples.jar'",
           "type": "string"
@@ -966,71 +1810,20 @@
           "items": {
             "type": "string"
           }
-        }
-      },
-      "id": "HadoopJob",
-      "description": "A Cloud Dataproc job for running Hadoop MapReduce jobs on YARN.",
-      "type": "object"
-    },
-    "QueryList": {
-      "description": "A list of queries to run on a cluster.",
-      "type": "object",
-      "properties": {
-        "queries": {
-          "description": "Required The queries to execute. You do not need to terminate a query with a semicolon. Multiple queries can be specified in one string by separating each with a semicolon. Here is an example of an Cloud Dataproc API snippet that uses a QueryList to specify a HiveJob:\n\"hiveJob\": {\n  \"queryList\": {\n    \"queries\": [\n      \"query1\",\n      \"query2\",\n      \"query3;query4\",\n    ]\n  }\n}\n",
+        },
+        "mainClass": {
+          "description": "The name of the driver's main class. The jar file containing the class must be in the default CLASSPATH or specified in jar_file_uris.",
+          "type": "string"
+        },
+        "archiveUris": {
+          "description": "Optional HCFS URIs of archives to be extracted in the working directory of Hadoop drivers and tasks. Supported file types: .jar, .tar, .tar.gz, .tgz, or .zip.",
           "type": "array",
           "items": {
             "type": "string"
           }
         }
       },
-      "id": "QueryList"
-    },
-    "YarnApplication": {
-      "description": "A YARN application created by a job. Application information is a subset of \u003ccode\u003eorg.apache.hadoop.yarn.proto.YarnProtos.ApplicationReportProto\u003c/code\u003e.",
-      "type": "object",
-      "properties": {
-        "state": {
-          "enum": [
-            "STATE_UNSPECIFIED",
-            "NEW",
-            "NEW_SAVING",
-            "SUBMITTED",
-            "ACCEPTED",
-            "RUNNING",
-            "FINISHED",
-            "FAILED",
-            "KILLED"
-          ],
-          "description": "Required The application state.",
-          "type": "string",
-          "enumDescriptions": [
-            "Status is unspecified.",
-            "Status is NEW.",
-            "Status is NEW_SAVING.",
-            "Status is SUBMITTED.",
-            "Status is ACCEPTED.",
-            "Status is RUNNING.",
-            "Status is FINISHED.",
-            "Status is FAILED.",
-            "Status is KILLED."
-          ]
-        },
-        "name": {
-          "description": "Required The application name.",
-          "type": "string"
-        },
-        "trackingUrl": {
-          "description": "Optional The HTTP URL of the ApplicationMaster, HistoryServer, or TimelineServer that provides application-specific information. The URL uses the internal hostname, and requires a proxy server for resolution and, possibly, access.",
-          "type": "string"
-        },
-        "progress": {
-          "description": "Required The numerical progress of the application, from 1 to 100.",
-          "format": "float",
-          "type": "number"
-        }
-      },
-      "id": "YarnApplication"
+      "id": "HadoopJob"
     },
     "DiagnoseClusterRequest": {
       "description": "A request to collect cluster diagnostic information.",
@@ -1039,6 +1832,8 @@
       "id": "DiagnoseClusterRequest"
     },
     "ClusterOperationMetadata": {
+      "description": "Metadata describing the operation.",
+      "type": "object",
       "properties": {
         "operationType": {
           "description": "Output-only The operation type.",
@@ -1063,8 +1858,8 @@
           "type": "object"
         },
         "status": {
-          "$ref": "ClusterOperationStatus",
-          "description": "Output-only Current operation status."
+          "description": "Output-only Current operation status.",
+          "$ref": "ClusterOperationStatus"
         },
         "statusHistory": {
           "description": "Output-only The previous operation status.",
@@ -1073,778 +1868,16 @@
             "$ref": "ClusterOperationStatus"
           }
         },
-        "clusterUuid": {
-          "description": "Output-only Cluster UUID for the operation.",
-          "type": "string"
-        },
         "clusterName": {
           "description": "Output-only Name of the cluster for the operation.",
           "type": "string"
-        }
-      },
-      "id": "ClusterOperationMetadata",
-      "description": "Metadata describing the operation.",
-      "type": "object"
-    },
-    "HiveJob": {
-      "properties": {
-        "properties": {
-          "additionalProperties": {
-            "type": "string"
-          },
-          "description": "Optional A mapping of property names and values, used to configure Hive. Properties that conflict with values set by the Cloud Dataproc API may be overwritten. Can include properties set in /etc/hadoop/conf/*-site.xml, /etc/hive/conf/hive-site.xml, and classes in user code.",
-          "type": "object"
-        },
-        "continueOnFailure": {
-          "description": "Optional Whether to continue executing queries if a query fails. The default value is false. Setting to true can be useful when executing independent parallel queries.",
-          "type": "boolean"
-        },
-        "queryList": {
-          "$ref": "QueryList",
-          "description": "A list of queries."
-        },
-        "queryFileUri": {
-          "description": "The HCFS URI of the script that contains Hive queries.",
-          "type": "string"
-        },
-        "scriptVariables": {
-          "additionalProperties": {
-            "type": "string"
-          },
-          "description": "Optional Mapping of query variable names to values (equivalent to the Hive command: SET name=\"value\";).",
-          "type": "object"
-        },
-        "jarFileUris": {
-          "description": "Optional HCFS URIs of jar files to add to the CLASSPATH of the Hive server and Hadoop MapReduce (MR) tasks. Can contain Hive SerDes and UDFs.",
-          "type": "array",
-          "items": {
-            "type": "string"
-          }
-        }
-      },
-      "id": "HiveJob",
-      "description": "A Cloud Dataproc job for running Hive queries on YARN.",
-      "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:\nservice Foo {\n  rpc Bar(google.protobuf.Empty) returns (google.protobuf.Empty);\n}\nThe JSON representation for Empty is empty JSON object {}.",
-      "type": "object",
-      "properties": {},
-      "id": "Empty"
-    },
-    "DiagnoseClusterResults": {
-      "properties": {
-        "outputUri": {
-          "description": "Output-only The Google Cloud Storage URI of the diagnostic output. The output report is a plain text file with a summary of collected diagnostics.",
-          "type": "string"
-        }
-      },
-      "id": "DiagnoseClusterResults",
-      "description": "The location of diagnostic output.",
-      "type": "object"
-    },
-    "SoftwareConfiguration": {
-      "properties": {
-        "properties": {
-          "additionalProperties": {
-            "type": "string"
-          },
-          "description": "Optional The properties to set on daemon configuration files.Property keys are specified in \"prefix:property\" format, such as \"core:fs.defaultFS\". The following are supported prefixes and their mappings:  core - core-site.xml  hdfs - hdfs-site.xml  mapred - mapred-site.xml  yarn - yarn-site.xml  hive - hive-site.xml  pig - pig.properties  spark - spark-defaults.conf",
-          "type": "object"
-        },
-        "imageVersion": {
-          "description": "Optional The version of software inside the cluster. It must match the regular expression [0-9]+\\.[0-9]+. If unspecified, it defaults to the latest version (see Cloud Dataproc Versioning).",
-          "type": "string"
-        }
-      },
-      "id": "SoftwareConfiguration",
-      "description": "Specifies the selection and configuration of software inside the cluster.",
-      "type": "object"
-    },
-    "PySparkJob": {
-      "description": "A Cloud Dataproc job for running PySpark applications on YARN.",
-      "type": "object",
-      "properties": {
-        "jarFileUris": {
-          "description": "Optional HCFS URIs of jar files to add to the CLASSPATHs of the Python driver and tasks.",
-          "type": "array",
-          "items": {
-            "type": "string"
-          }
-        },
-        "loggingConfiguration": {
-          "$ref": "LoggingConfiguration",
-          "description": "Optional The runtime log configuration for job execution."
-        },
-        "properties": {
-          "additionalProperties": {
-            "type": "string"
-          },
-          "description": "Optional A mapping of property names to values, used to configure PySpark. Properties that conflict with values set by the Cloud Dataproc API may be overwritten. Can include properties set in /etc/spark/conf/spark-defaults.conf and classes in user code.",
-          "type": "object"
-        },
-        "args": {
-          "description": "Optional The arguments to pass to the driver. Do not include arguments, such as --conf, that can be set as job properties, since a collision may occur that causes an incorrect job submission.",
-          "type": "array",
-          "items": {
-            "type": "string"
-          }
-        },
-        "fileUris": {
-          "description": "Optional HCFS URIs of files to be copied to the working directory of Python drivers and distributed tasks. Useful for naively parallel tasks.",
-          "type": "array",
-          "items": {
-            "type": "string"
-          }
-        },
-        "pythonFileUris": {
-          "description": "Optional HCFS file URIs of Python files to pass to the PySpark framework. Supported file types: .py, .egg, and .zip.",
-          "type": "array",
-          "items": {
-            "type": "string"
-          }
-        },
-        "mainPythonFileUri": {
-          "description": "Required The Hadoop Compatible Filesystem (HCFS) URI of the main Python file to use as the driver. Must be a .py file.",
-          "type": "string"
-        },
-        "archiveUris": {
-          "description": "Optional HCFS URIs of archives to be extracted in the working directory of .jar, .tar, .tar.gz, .tgz, and .zip.",
-          "type": "array",
-          "items": {
-            "type": "string"
-          }
-        }
-      },
-      "id": "PySparkJob"
-    },
-    "LoggingConfiguration": {
-      "description": "The runtime logging configuration of the job.",
-      "type": "object",
-      "properties": {
-        "driverLogLevels": {
-          "additionalProperties": {
-            "enum": [
-              "LEVEL_UNSPECIFIED",
-              "ALL",
-              "TRACE",
-              "DEBUG",
-              "INFO",
-              "WARN",
-              "ERROR",
-              "FATAL",
-              "OFF"
-            ],
-            "type": "string"
-          },
-          "description": "The per-package log levels for the driver. This may include \"root\" package name to configure rootLogger. Examples:  'com.google = FATAL', 'root = INFO', 'org.apache = DEBUG'",
-          "type": "object"
-        }
-      },
-      "id": "LoggingConfiguration"
-    },
-    "ClusterConfiguration": {
-      "properties": {
-        "initializationActions": {
-          "description": "Optional Commands to execute on each node after configuration is completed. By default, executables are run on master and all worker nodes. You can test a node's \u003ccode\u003erole\u003c/code\u003e metadata to run an executable on a master or worker node, as shown below:\nROLE=$(/usr/share/google/get_metadata_value attributes/role)\nif [[ \"${ROLE}\" == 'Master' ]]; then\n  ... master specific actions ...\nelse\n  ... worker specific actions ...\nfi\n",
-          "type": "array",
-          "items": {
-            "$ref": "NodeInitializationAction"
-          }
-        },
-        "workerConfiguration": {
-          "description": "Optional The Google Compute Engine configuration settings for worker instances in a cluster.",
-          "$ref": "InstanceGroupConfiguration"
-        },
-        "softwareConfiguration": {
-          "$ref": "SoftwareConfiguration",
-          "description": "Optional The configuration settings for software inside the cluster."
-        },
-        "gceClusterConfiguration": {
-          "description": "Required The shared Google Compute Engine configuration settings for all instances in a cluster.",
-          "$ref": "GceClusterConfiguration"
-        },
-        "configurationBucket": {
-          "description": "Optional A Google Cloud Storage staging bucket used for sharing generated SSH keys and configuration. If you do not specify a staging bucket, Cloud Dataproc will determine an appropriate Cloud Storage location (US, ASIA, or EU) for your cluster's staging bucket according to the Google Compute Engine zone where your cluster is deployed, and then it will create and manage this project-level, per-location bucket for you.",
-          "type": "string"
-        },
-        "masterConfiguration": {
-          "description": "Optional The Google Compute Engine configuration settings for the master instance in a cluster.",
-          "$ref": "InstanceGroupConfiguration"
-        },
-        "secondaryWorkerConfiguration": {
-          "description": "Optional The Google Compute Engine configuration settings for additional worker instances in a cluster.",
-          "$ref": "InstanceGroupConfiguration"
-        }
-      },
-      "id": "ClusterConfiguration",
-      "description": "The cluster configuration.",
-      "type": "object"
-    },
-    "ClusterMetrics": {
-      "description": "Contains cluster daemon metrics, such as HDFS and YARN stats.",
-      "type": "object",
-      "properties": {
-        "yarnMetrics": {
-          "additionalProperties": {
-            "format": "int64",
-            "type": "string"
-          },
-          "description": "The YARN metrics.",
-          "type": "object"
-        },
-        "hdfsMetrics": {
-          "additionalProperties": {
-            "format": "int64",
-            "type": "string"
-          },
-          "description": "The HDFS metrics.",
-          "type": "object"
-        }
-      },
-      "id": "ClusterMetrics"
-    },
-    "InstanceGroupConfiguration": {
-      "properties": {
-        "machineTypeUri": {
-          "description": "The Google Compute Engine machine type used for cluster instances. Example: https://www.googleapis.com/compute/v1/projects/[project_id]/zones/us-east1-a/machineTypes/n1-standard-2.",
-          "type": "string"
-        },
-        "imageUri": {
-          "description": "Output-only The Google Compute Engine image resource used for cluster instances. Inferred from SoftwareConfiguration.image_version.",
-          "type": "string"
-        },
-        "isPreemptible": {
-          "description": "Specifies that this instance group contains Preemptible Instances.",
-          "type": "boolean"
-        },
-        "managedGroupConfiguration": {
-          "description": "Output-only The configuration for Google Compute Engine Instance Group Manager that manages this group. This is only used for preemptible instance groups.",
-          "$ref": "ManagedGroupConfiguration"
-        },
-        "instanceNames": {
-          "description": "The list of instance names. Dataproc derives the names from cluster_name, num_instances, and the instance group if not set by user (recommended practice is to let Dataproc derive the name).",
-          "type": "array",
-          "items": {
-            "type": "string"
-          }
-        },
-        "accelerators": {
-          "description": "Optional The Google Compute Engine accelerator configuration for these instances.",
-          "type": "array",
-          "items": {
-            "$ref": "AcceleratorConfiguration"
-          }
-        },
-        "numInstances": {
-          "description": "The number of VM instances in the instance group. For master instance groups, must be set to 1.",
-          "format": "int32",
-          "type": "integer"
-        },
-        "diskConfiguration": {
-          "description": "Disk option configuration settings.",
-          "$ref": "DiskConfiguration"
-        }
-      },
-      "id": "InstanceGroupConfiguration",
-      "description": "The configuration settings for Google Compute Engine resources in an instance group, such as a master or worker group.",
-      "type": "object"
-    },
-    "GceClusterConfiguration": {
-      "properties": {
-        "subnetworkUri": {
-          "description": "The Google Compute Engine subnetwork to be used for machine communications. Cannot be specified with network_uri. Example: https://www.googleapis.com/compute/v1/projects/[project_id]/regions/us-east1/sub0.",
-          "type": "string"
-        },
-        "networkUri": {
-          "description": "The Google Compute Engine network to be used for machine communications. Cannot be specified with subnetwork_uri. If neither network_uri nor subnetwork_uri is specified, the \"default\" network of the project is used, if it exists. Cannot be a \"Custom Subnet Network\" (see https://cloud.google.com/compute/docs/subnetworks for more information). Example: https://www.googleapis.com/compute/v1/projects/[project_id]/regions/global/default.",
-          "type": "string"
-        },
-        "zoneUri": {
-          "description": "Required The zone where the Google Compute Engine cluster will be located. Example: https://www.googleapis.com/compute/v1/projects/[project_id]/zones/[zone].",
-          "type": "string"
-        },
-        "internalIpOnly": {
-          "description": "If true, all instances in the cluser will only have internal IP addresses. By default, clusters are not restricted to internal IP addresses, and will have ephemeral external IP addresses assigned to each instance. This restriction can only be enabled for subnetwork enabled networks, and all off-cluster dependencies must be configured to be accessible without external IP addresses.",
-          "type": "boolean"
-        },
-        "metadata": {
-          "additionalProperties": {
-            "type": "string"
-          },
-          "description": "The Google Compute Engine metadata entries to add to all instances.",
-          "type": "object"
-        },
-        "serviceAccountScopes": {
-          "description": "The URIs of service account scopes to be included in Google Compute Engine instances. The following base set of scopes is always included: - https://www.googleapis.com/auth/cloud.useraccounts.readonly - https://www.googleapis.com/auth/devstorage.read_write - https://www.googleapis.com/auth/logging.write If no scopes are specfied, the following defaults are also provided: - https://www.googleapis.com/auth/bigquery - https://www.googleapis.com/auth/bigtable.admin.table - https://www.googleapis.com/auth/bigtable.data - https://www.googleapis.com/auth/devstorage.full_control",
-          "type": "array",
-          "items": {
-            "type": "string"
-          }
-        },
-        "tags": {
-          "description": "The Google Compute Engine tags to add to all instances.",
-          "type": "array",
-          "items": {
-            "type": "string"
-          }
-        },
-        "serviceAccount": {
-          "description": "Optional The service account of the instances. Defaults to the default Google Compute Engine service account. Custom service accounts need permissions equivalent to the folloing IAM roles:\nroles/logging.logWriter\nroles/storage.objectAdmin(see https://cloud.google.com/compute/docs/access/service-accounts#custom_service_accounts for more information). Example: [account_id]@[project_id].iam.gserviceaccount.com",
-          "type": "string"
-        }
-      },
-      "id": "GceClusterConfiguration",
-      "description": "Common configuration settings for resources of Google Compute Engine cluster instances, applicable to all instances in the cluster.",
-      "type": "object"
-    },
-    "CancelOperationRequest": {
-      "properties": {},
-      "id": "CancelOperationRequest",
-      "description": "The request message for Operations.CancelOperation.",
-      "type": "object"
-    },
-    "DiagnoseClusterOutputLocation": {
-      "description": "The location of diagnostic output.",
-      "type": "object",
-      "properties": {
-        "outputUri": {
-          "description": "Output-only The Google Cloud Storage URI of the diagnostic output. This is a plain text file with a summary of collected diagnostics.",
-          "type": "string"
-        }
-      },
-      "id": "DiagnoseClusterOutputLocation"
-    },
-    "Operation": {
-      "properties": {
-        "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"
-        },
-        "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 have the format of operations/some/unique/name.",
-          "type": "string"
-        },
-        "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"
-        },
-        "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"
-        }
-      },
-      "id": "Operation",
-      "description": "This resource represents a long-running operation that is the result of a network API call.",
-      "type": "object"
-    },
-    "OperationStatus": {
-      "description": "The status of the operation.",
-      "type": "object",
-      "properties": {
-        "stateStartTime": {
-          "description": "The time this state was entered.",
-          "format": "google-datetime",
-          "type": "string"
-        },
-        "state": {
-          "enum": [
-            "UNKNOWN",
-            "PENDING",
-            "RUNNING",
-            "DONE"
-          ],
-          "description": "A message containing the operation state.",
-          "type": "string",
-          "enumDescriptions": [
-            "Unused.",
-            "The operation has been created.",
-            "The operation is running.",
-            "The operation is done; either cancelled or completed."
-          ]
-        },
-        "details": {
-          "description": "A message containing any operation metadata details.",
-          "type": "string"
-        },
-        "innerState": {
-          "description": "A message containing the detailed operation state.",
-          "type": "string"
-        }
-      },
-      "id": "OperationStatus"
-    },
-    "JobReference": {
-      "properties": {
-        "projectId": {
-          "description": "Required The ID of the Google Cloud Platform project that the job belongs to.",
-          "type": "string"
-        },
-        "jobId": {
-          "description": "Required The job ID, which must be unique within the project. The job ID is generated by the server upon job submission or provided by the user as a means to perform retries without creating duplicate jobs. The ID must contain only letters (a-z, A-Z), numbers (0-9), underscores (_), or hyphens (-). The maximum length is 100 characters.",
-          "type": "string"
-        }
-      },
-      "id": "JobReference",
-      "description": "Encapsulates the full scoping used to reference a job.",
-      "type": "object"
-    },
-    "SubmitJobRequest": {
-      "properties": {
-        "job": {
-          "description": "Required The job resource.",
-          "$ref": "Job"
-        }
-      },
-      "id": "SubmitJobRequest",
-      "description": "A request to submit a job.",
-      "type": "object"
-    },
-    "Status": {
-      "properties": {
-        "details": {
-          "description": "A list of messages that carry the error details. There will be 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"
-            },
-            "type": "object"
-          }
-        },
-        "code": {
-          "description": "The status code, which should be an enum value of google.rpc.Code.",
-          "format": "int32",
-          "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"
-        }
-      },
-      "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). The error model is designed to be:\nSimple to use and understand for most users\nFlexible enough to meet unexpected needsOverviewThe Status message contains three pieces of data: error code, error message, and error details. The error code should be an enum value of google.rpc.Code, but it may accept additional error codes if needed. The error message should be a developer-facing English message that helps developers understand and resolve the error. If a localized user-facing error message is needed, put the localized message in the error details or localize it in the client. The optional error details may contain arbitrary information about the error. There is a predefined set of error detail types in the package google.rpc which can be used for common error conditions.Language mappingThe Status message is the logical representation of the error model, but it is not necessarily the actual wire format. When the Status message is exposed in different client libraries and different wire protocols, it can be mapped differently. For example, it will likely be mapped to some exceptions in Java, but more likely mapped to some error codes in C.Other usesThe error model and the Status message can be used in a variety of environments, either with or without APIs, to provide a consistent developer experience across different environments.Example uses of this error model include:\nPartial errors. If a service needs to return partial errors to the client, it may embed the Status in the normal response to indicate the partial errors.\nWorkflow errors. A typical workflow has multiple steps. Each step may have a Status message for error reporting purpose.\nBatch operations. If a client uses batch request and batch response, the Status message should be used directly inside batch response, one for each error sub-response.\nAsynchronous operations. If an API call embeds asynchronous operation results in its response, the status of those operations should be represented directly using the Status message.\nLogging. If some API errors are stored in logs, the message Status could be used directly after any stripping needed for security/privacy reasons.",
-      "type": "object"
-    },
-    "JobScheduling": {
-      "description": "Job scheduling options.Beta Feature: These options are available for testing purposes only. They may be changed before final release.",
-      "type": "object",
-      "properties": {
-        "maxFailuresPerHour": {
-          "description": "Optional Maximum number of times per hour a driver may be restarted as a result of driver terminating with non-zero code before job is reported failed.A job may be reported as thrashing if driver exits with non-zero code 4 times within 10 minute window.Maximum value is 10.",
-          "format": "int32",
-          "type": "integer"
-        }
-      },
-      "id": "JobScheduling"
-    },
-    "NodeInitializationAction": {
-      "properties": {
-        "executableFile": {
-          "description": "Required Google Cloud Storage URI of executable file.",
-          "type": "string"
-        },
-        "executionTimeout": {
-          "description": "Optional Amount of time executable has to complete. Default is 10 minutes. Cluster creation fails with an explanatory error message (the name of the executable that caused the error and the exceeded timeout period) if the executable is not completed at end of the timeout period.",
-          "format": "google-duration",
-          "type": "string"
-        }
-      },
-      "id": "NodeInitializationAction",
-      "description": "Specifies an executable to run on a fully configured node and a timeout period for executable completion.",
-      "type": "object"
-    },
-    "ListJobsResponse": {
-      "properties": {
-        "nextPageToken": {
-          "description": "Optional This token is included in the response if there are more results to fetch. To fetch additional results, provide this value as the page_token in a subsequent \u003ccode\u003eListJobsRequest\u003c/code\u003e.",
-          "type": "string"
-        },
-        "jobs": {
-          "description": "Output-only Jobs list.",
-          "type": "array",
-          "items": {
-            "$ref": "Job"
-          }
-        }
-      },
-      "id": "ListJobsResponse",
-      "description": "A list of jobs in a project.",
-      "type": "object"
-    },
-    "CancelJobRequest": {
-      "description": "A request to cancel a job.",
-      "type": "object",
-      "properties": {},
-      "id": "CancelJobRequest"
-    },
-    "SparkSqlJob": {
-      "properties": {
-        "queryList": {
-          "description": "A list of queries.",
-          "$ref": "QueryList"
-        },
-        "queryFileUri": {
-          "description": "The HCFS URI of the script that contains SQL queries.",
-          "type": "string"
-        },
-        "scriptVariables": {
-          "additionalProperties": {
-            "type": "string"
-          },
-          "description": "Optional Mapping of query variable names to values (equivalent to the Spark SQL command: SET name=\"value\";).",
-          "type": "object"
-        },
-        "jarFileUris": {
-          "description": "Optional HCFS URIs of jar files to be added to the Spark CLASSPATH.",
-          "type": "array",
-          "items": {
-            "type": "string"
-          }
-        },
-        "loggingConfiguration": {
-          "description": "Optional The runtime log configuration for job execution.",
-          "$ref": "LoggingConfiguration"
-        },
-        "properties": {
-          "additionalProperties": {
-            "type": "string"
-          },
-          "description": "Optional A mapping of property names to values, used to configure Spark SQL's SparkConf. Properties that conflict with values set by the Cloud Dataproc API may be overwritten.",
-          "type": "object"
-        }
-      },
-      "id": "SparkSqlJob",
-      "description": "A Cloud Dataproc job for running Spark SQL queries.",
-      "type": "object"
-    },
-    "Cluster": {
-      "description": "Describes the identifying information, configuration, and status of a cluster of Google Compute Engine instances.",
-      "type": "object",
-      "properties": {
-        "configuration": {
-          "$ref": "ClusterConfiguration",
-          "description": "Required The cluster configuration. Note that Cloud Dataproc may set default values, and values may change when clusters are updated."
-        },
-        "labels": {
-          "additionalProperties": {
-            "type": "string"
-          },
-          "description": "Optional The labels to associate with this cluster.Label keys must be between 1 and 63 characters long, and must conform to the following PCRE regular expression: \\p{Ll}\\p{Lo}{0,62}Label values must be between 1 and 63 characters long, and must conform to the following PCRE regular expression: \\p{Ll}\\p{Lo}\\p{N}_-{0,63}No more than 64 labels can be associated with a given cluster.",
-          "type": "object"
-        },
-        "metrics": {
-          "$ref": "ClusterMetrics",
-          "description": "Contains cluster daemon metrics such as HDFS and YARN stats."
-        },
-        "status": {
-          "description": "Output-only Cluster status.",
-          "$ref": "ClusterStatus"
-        },
-        "statusHistory": {
-          "description": "Output-only Previous cluster statuses.",
-          "type": "array",
-          "items": {
-            "$ref": "ClusterStatus"
-          }
-        },
-        "clusterName": {
-          "description": "Required The cluster name. Cluster names within a project must be unique. Names from deleted clusters can be reused.",
-          "type": "string"
         },
         "clusterUuid": {
-          "description": "Output-only A cluster UUID (Unique Universal Identifier). Cloud Dataproc generates this value when it creates the cluster.",
-          "type": "string"
-        },
-        "projectId": {
-          "description": "Required The Google Cloud Platform project ID that the cluster belongs to.",
+          "description": "Output-only Cluster UUID for the operation.",
           "type": "string"
         }
       },
-      "id": "Cluster"
-    },
-    "ListOperationsResponse": {
-      "description": "The response message for Operations.ListOperations.",
-      "type": "object",
-      "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.",
-          "type": "array",
-          "items": {
-            "$ref": "Operation"
-          }
-        }
-      },
-      "id": "ListOperationsResponse"
-    },
-    "OperationMetadata": {
-      "description": "Metadata describing the operation.",
-      "type": "object",
-      "properties": {
-        "operationType": {
-          "description": "Output-only The operation type.",
-          "type": "string"
-        },
-        "description": {
-          "description": "Output-only Short description of operation.",
-          "type": "string"
-        },
-        "warnings": {
-          "description": "Output-only Errors encountered during operation execution.",
-          "type": "array",
-          "items": {
-            "type": "string"
-          }
-        },
-        "status": {
-          "description": "Output-only Current operation status.",
-          "$ref": "OperationStatus"
-        },
-        "statusHistory": {
-          "description": "Output-only Previous operation status.",
-          "type": "array",
-          "items": {
-            "$ref": "OperationStatus"
-          }
-        },
-        "clusterName": {
-          "description": "Name of the cluster for the operation.",
-          "type": "string"
-        },
-        "clusterUuid": {
-          "description": "Cluster UUId for the operation.",
-          "type": "string"
-        }
-      },
-      "id": "OperationMetadata"
-    },
-    "JobPlacement": {
-      "properties": {
-        "clusterName": {
-          "description": "Required The name of the cluster where the job will be submitted.",
-          "type": "string"
-        },
-        "clusterUuid": {
-          "description": "Output-only A cluster UUID generated by the Dataproc service when the job is submitted.",
-          "type": "string"
-        }
-      },
-      "id": "JobPlacement",
-      "description": "Cloud Dataproc job configuration.",
-      "type": "object"
-    },
-    "PigJob": {
-      "properties": {
-        "continueOnFailure": {
-          "description": "Optional Whether to continue executing queries if a query fails. The default value is false. Setting to true can be useful when executing independent parallel queries.",
-          "type": "boolean"
-        },
-        "queryList": {
-          "$ref": "QueryList",
-          "description": "A list of queries."
-        },
-        "queryFileUri": {
-          "description": "The HCFS URI of the script that contains the Pig queries.",
-          "type": "string"
-        },
-        "jarFileUris": {
-          "description": "Optional HCFS URIs of jar files to add to the CLASSPATH of the Pig Client and Hadoop MapReduce (MR) tasks. Can contain Pig UDFs.",
-          "type": "array",
-          "items": {
-            "type": "string"
-          }
-        },
-        "scriptVariables": {
-          "additionalProperties": {
-            "type": "string"
-          },
-          "description": "Optional Mapping of query variable names to values (equivalent to the Pig command: name=[value]).",
-          "type": "object"
-        },
-        "loggingConfiguration": {
-          "$ref": "LoggingConfiguration",
-          "description": "Optional The runtime log configuration for job execution."
-        },
-        "properties": {
-          "additionalProperties": {
-            "type": "string"
-          },
-          "description": "Optional A mapping of property names to values, used to configure Pig. Properties that conflict with values set by the Cloud Dataproc API may be overwritten. Can include properties set in /etc/hadoop/conf/*-site.xml, /etc/pig/conf/pig.properties, and classes in user code.",
-          "type": "object"
-        }
-      },
-      "id": "PigJob",
-      "description": "A Cloud Dataproc job for running Pig queries on YARN.",
-      "type": "object"
-    },
-    "ClusterStatus": {
-      "properties": {
-        "state": {
-          "enumDescriptions": [
-            "The cluster state is unknown.",
-            "The cluster is being created and set up. It is not ready for use.",
-            "The cluster is currently running and healthy. It is ready for use.",
-            "The cluster encountered an error. It is not ready for use.",
-            "The cluster is being deleted. It cannot be used.",
-            "The cluster is being updated. It continues to accept and process jobs."
-          ],
-          "enum": [
-            "UNKNOWN",
-            "CREATING",
-            "RUNNING",
-            "ERROR",
-            "DELETING",
-            "UPDATING"
-          ],
-          "description": "The cluster's state.",
-          "type": "string"
-        },
-        "stateStartTime": {
-          "description": "Time when this state was entered.",
-          "format": "google-datetime",
-          "type": "string"
-        },
-        "detail": {
-          "description": "Optional details of cluster's state.",
-          "type": "string"
-        }
-      },
-      "id": "ClusterStatus",
-      "description": "The status of a cluster and its instances.",
-      "type": "object"
-    },
-    "AcceleratorConfiguration": {
-      "description": "Specifies the type and number of accelerator cards attached to the instances of an instance group (see GPUs on Compute Engine).",
-      "type": "object",
-      "properties": {
-        "acceleratorCount": {
-          "description": "The number of the accelerator cards of this type exposed to this instance.",
-          "format": "int32",
-          "type": "integer"
-        },
-        "acceleratorTypeUri": {
-          "description": "Full or partial URI of the accelerator type resource to expose to this instance. See Google Compute Engine AcceleratorTypes( /compute/docs/reference/beta/acceleratorTypes)",
-          "type": "string"
-        }
-      },
-      "id": "AcceleratorConfiguration"
+      "id": "ClusterOperationMetadata"
     }
   },
   "icons": {
@@ -1871,10 +1904,7 @@
   "ownerDomain": "google.com",
   "name": "dataproc",
   "batchPath": "batch",
-  "id": "dataproc:v1beta1",
   "documentationLink": "https://cloud.google.com/dataproc/",
-  "revision": "20170228",
-  "title": "Google Cloud Dataproc API",
-  "ownerName": "Google",
-  "discoveryVersion": "v1"
+  "id": "dataproc:v1beta1",
+  "revision": "20170321"
 }
diff --git a/dataproc/v1beta1/dataproc-gen.go b/dataproc/v1beta1/dataproc-gen.go
index db51255..fda917c 100644
--- a/dataproc/v1beta1/dataproc-gen.go
+++ b/dataproc/v1beta1/dataproc-gen.go
@@ -62,10 +62,9 @@
 }
 
 type Service struct {
-	client                    *http.Client
-	BasePath                  string // API endpoint base URL
-	UserAgent                 string // optional additional User-Agent fragment
-	GoogleClientHeaderElement string // client header fragment, for Google use only
+	client    *http.Client
+	BasePath  string // API endpoint base URL
+	UserAgent string // optional additional User-Agent fragment
 
 	Operations *OperationsService
 
@@ -79,10 +78,6 @@
 	return googleapi.UserAgent + " " + s.UserAgent
 }
 
-func (s *Service) clientHeader() string {
-	return gensupport.GoogleClientHeader("20170210", s.GoogleClientHeaderElement)
-}
-
 func NewOperationsService(s *Service) *OperationsService {
 	rs := &OperationsService{s: s}
 	return rs
@@ -454,6 +449,19 @@
 	// StateStartTime: Time when this state was entered.
 	StateStartTime string `json:"stateStartTime,omitempty"`
 
+	// Substate: Output-only Additional state information that includes
+	// status reported by the agent.
+	//
+	// Possible values:
+	//   "UNSPECIFIED"
+	//   "UNHEALTHY" - The cluster is known to be in an unhealthy state (for
+	// example, critical daemons are not running or HDFS capacity is
+	// exhausted).Applies to RUNNING state.
+	//   "STALE_STATUS" - The agent-reported status is out of date (may
+	// occur if Cloud Dataproc loses communication with Agent).Applies to
+	// RUNNING state.
+	Substate string `json:"substate,omitempty"`
+
 	// ForceSendFields is a list of field names (e.g. "Detail") to
 	// unconditionally include in API requests. By default, fields with
 	// empty values are omitted from API requests. However, any non-pointer,
@@ -1107,6 +1115,22 @@
 	// StateStartTime: Output-only The time when this state was entered.
 	StateStartTime string `json:"stateStartTime,omitempty"`
 
+	// Substate: Output-only Additional state information, which includes
+	// status reported by the agent.
+	//
+	// Possible values:
+	//   "UNSPECIFIED"
+	//   "SUBMITTED" - The Job is submitted to the agent.Applies to RUNNING
+	// state.
+	//   "QUEUED" - The Job has been received and is awaiting execution (it
+	// may be waiting for a condition to be met). See the "details" field
+	// for the reason for the delay.Applies to RUNNING state.
+	//   "STALE_STATUS" - The agent-reported status is out of date, which
+	// may be caused by a loss of communication between the agent and Cloud
+	// Dataproc. If the agent does not send a timely update, the job will
+	// fail.Applies to RUNNING state.
+	Substate string `json:"substate,omitempty"`
+
 	// ForceSendFields is a list of field names (e.g. "Details") to
 	// unconditionally include in API requests. By default, fields with
 	// empty values are omitted from API requests. However, any non-pointer,
@@ -2035,7 +2059,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	var body io.Reader = nil
 	body, err := googleapi.WithoutDataWrapper.JSONReader(c.canceloperationrequest)
 	if err != nil {
@@ -2172,7 +2195,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	var body io.Reader = nil
 	c.urlParams_.Set("alt", alt)
 	urls := googleapi.ResolveRelative(c.s.BasePath, "v1beta1/{+name}")
@@ -2311,7 +2333,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	if c.ifNoneMatch_ != "" {
 		reqHeaders.Set("If-None-Match", c.ifNoneMatch_)
 	}
@@ -2476,7 +2497,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	if c.ifNoneMatch_ != "" {
 		reqHeaders.Set("If-None-Match", c.ifNoneMatch_)
 	}
@@ -2644,7 +2664,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	var body io.Reader = nil
 	body, err := googleapi.WithoutDataWrapper.JSONReader(c.cluster)
 	if err != nil {
@@ -2779,7 +2798,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	var body io.Reader = nil
 	c.urlParams_.Set("alt", alt)
 	urls := googleapi.ResolveRelative(c.s.BasePath, "v1beta1/projects/{projectId}/clusters/{clusterName}")
@@ -2918,7 +2936,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	var body io.Reader = nil
 	body, err := googleapi.WithoutDataWrapper.JSONReader(c.diagnoseclusterrequest)
 	if err != nil {
@@ -3072,7 +3089,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	if c.ifNoneMatch_ != "" {
 		reqHeaders.Set("If-None-Match", c.ifNoneMatch_)
 	}
@@ -3242,7 +3258,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	if c.ifNoneMatch_ != "" {
 		reqHeaders.Set("If-None-Match", c.ifNoneMatch_)
 	}
@@ -3444,7 +3459,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	var body io.Reader = nil
 	body, err := googleapi.WithoutDataWrapper.JSONReader(c.cluster)
 	if err != nil {
@@ -3596,7 +3610,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	var body io.Reader = nil
 	body, err := googleapi.WithoutDataWrapper.JSONReader(c.canceljobrequest)
 	if err != nil {
@@ -3740,7 +3753,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	var body io.Reader = nil
 	c.urlParams_.Set("alt", alt)
 	urls := googleapi.ResolveRelative(c.s.BasePath, "v1beta1/projects/{projectId}/jobs/{jobId}")
@@ -3886,7 +3898,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	if c.ifNoneMatch_ != "" {
 		reqHeaders.Set("If-None-Match", c.ifNoneMatch_)
 	}
@@ -4077,7 +4088,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	if c.ifNoneMatch_ != "" {
 		reqHeaders.Set("If-None-Match", c.ifNoneMatch_)
 	}
@@ -4273,7 +4283,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	var body io.Reader = nil
 	body, err := googleapi.WithoutDataWrapper.JSONReader(c.job)
 	if err != nil {
@@ -4422,7 +4431,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	var body io.Reader = nil
 	body, err := googleapi.WithoutDataWrapper.JSONReader(c.submitjobrequest)
 	if err != nil {
diff --git a/datastore/v1/datastore-gen.go b/datastore/v1/datastore-gen.go
index dbcce1b..89f0cdb 100644
--- a/datastore/v1/datastore-gen.go
+++ b/datastore/v1/datastore-gen.go
@@ -64,10 +64,9 @@
 }
 
 type Service struct {
-	client                    *http.Client
-	BasePath                  string // API endpoint base URL
-	UserAgent                 string // optional additional User-Agent fragment
-	GoogleClientHeaderElement string // client header fragment, for Google use only
+	client    *http.Client
+	BasePath  string // API endpoint base URL
+	UserAgent string // optional additional User-Agent fragment
 
 	Projects *ProjectsService
 }
@@ -79,10 +78,6 @@
 	return googleapi.UserAgent + " " + s.UserAgent
 }
 
-func (s *Service) clientHeader() string {
-	return gensupport.GoogleClientHeader("20170210", s.GoogleClientHeaderElement)
-}
-
 func NewProjectsService(s *Service) *ProjectsService {
 	rs := &ProjectsService{s: s}
 	return rs
@@ -1655,7 +1650,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	var body io.Reader = nil
 	body, err := googleapi.WithoutDataWrapper.JSONReader(c.allocateidsrequest)
 	if err != nil {
@@ -1791,7 +1785,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	var body io.Reader = nil
 	body, err := googleapi.WithoutDataWrapper.JSONReader(c.begintransactionrequest)
 	if err != nil {
@@ -1929,7 +1922,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	var body io.Reader = nil
 	body, err := googleapi.WithoutDataWrapper.JSONReader(c.commitrequest)
 	if err != nil {
@@ -2065,7 +2057,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	var body io.Reader = nil
 	body, err := googleapi.WithoutDataWrapper.JSONReader(c.lookuprequest)
 	if err != nil {
@@ -2201,7 +2192,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	var body io.Reader = nil
 	body, err := googleapi.WithoutDataWrapper.JSONReader(c.rollbackrequest)
 	if err != nil {
@@ -2337,7 +2327,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	var body io.Reader = nil
 	body, err := googleapi.WithoutDataWrapper.JSONReader(c.runqueryrequest)
 	if err != nil {
diff --git a/datastore/v1beta1/datastore-gen.go b/datastore/v1beta1/datastore-gen.go
index 97dc43a..f0096ee 100644
--- a/datastore/v1beta1/datastore-gen.go
+++ b/datastore/v1beta1/datastore-gen.go
@@ -67,10 +67,9 @@
 }
 
 type Service struct {
-	client                    *http.Client
-	BasePath                  string // API endpoint base URL
-	UserAgent                 string // optional additional User-Agent fragment
-	GoogleClientHeaderElement string // client header fragment, for Google use only
+	client    *http.Client
+	BasePath  string // API endpoint base URL
+	UserAgent string // optional additional User-Agent fragment
 
 	Datasets *DatasetsService
 }
@@ -82,10 +81,6 @@
 	return googleapi.UserAgent + " " + s.UserAgent
 }
 
-func (s *Service) clientHeader() string {
-	return gensupport.GoogleClientHeader("20170210", s.GoogleClientHeaderElement)
-}
-
 func NewDatasetsService(s *Service) *DatasetsService {
 	rs := &DatasetsService{s: s}
 	return rs
@@ -1467,7 +1462,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	var body io.Reader = nil
 	body, err := googleapi.WithoutDataWrapper.JSONReader(c.allocateidsrequest)
 	if err != nil {
@@ -1603,7 +1597,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	var body io.Reader = nil
 	body, err := googleapi.WithoutDataWrapper.JSONReader(c.begintransactionrequest)
 	if err != nil {
@@ -1740,7 +1733,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	var body io.Reader = nil
 	body, err := googleapi.WithoutDataWrapper.JSONReader(c.blindwriterequest)
 	if err != nil {
@@ -1877,7 +1869,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	var body io.Reader = nil
 	body, err := googleapi.WithoutDataWrapper.JSONReader(c.commitrequest)
 	if err != nil {
@@ -2013,7 +2004,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	var body io.Reader = nil
 	body, err := googleapi.WithoutDataWrapper.JSONReader(c.lookuprequest)
 	if err != nil {
@@ -2149,7 +2139,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	var body io.Reader = nil
 	body, err := googleapi.WithoutDataWrapper.JSONReader(c.rollbackrequest)
 	if err != nil {
@@ -2285,7 +2274,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	var body io.Reader = nil
 	body, err := googleapi.WithoutDataWrapper.JSONReader(c.runqueryrequest)
 	if err != nil {
diff --git a/datastore/v1beta2/datastore-gen.go b/datastore/v1beta2/datastore-gen.go
index 0d572cd..0cc01cc 100644
--- a/datastore/v1beta2/datastore-gen.go
+++ b/datastore/v1beta2/datastore-gen.go
@@ -67,10 +67,9 @@
 }
 
 type Service struct {
-	client                    *http.Client
-	BasePath                  string // API endpoint base URL
-	UserAgent                 string // optional additional User-Agent fragment
-	GoogleClientHeaderElement string // client header fragment, for Google use only
+	client    *http.Client
+	BasePath  string // API endpoint base URL
+	UserAgent string // optional additional User-Agent fragment
 
 	Datasets *DatasetsService
 }
@@ -82,10 +81,6 @@
 	return googleapi.UserAgent + " " + s.UserAgent
 }
 
-func (s *Service) clientHeader() string {
-	return gensupport.GoogleClientHeader("20170210", s.GoogleClientHeaderElement)
-}
-
 func NewDatasetsService(s *Service) *DatasetsService {
 	rs := &DatasetsService{s: s}
 	return rs
@@ -1507,7 +1502,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	var body io.Reader = nil
 	body, err := googleapi.WithoutDataWrapper.JSONReader(c.allocateidsrequest)
 	if err != nil {
@@ -1643,7 +1637,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	var body io.Reader = nil
 	body, err := googleapi.WithoutDataWrapper.JSONReader(c.begintransactionrequest)
 	if err != nil {
@@ -1780,7 +1773,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	var body io.Reader = nil
 	body, err := googleapi.WithoutDataWrapper.JSONReader(c.commitrequest)
 	if err != nil {
@@ -1916,7 +1908,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	var body io.Reader = nil
 	body, err := googleapi.WithoutDataWrapper.JSONReader(c.lookuprequest)
 	if err != nil {
@@ -2052,7 +2043,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	var body io.Reader = nil
 	body, err := googleapi.WithoutDataWrapper.JSONReader(c.rollbackrequest)
 	if err != nil {
@@ -2188,7 +2178,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	var body io.Reader = nil
 	body, err := googleapi.WithoutDataWrapper.JSONReader(c.runqueryrequest)
 	if err != nil {
diff --git a/datastore/v1beta3/datastore-gen.go b/datastore/v1beta3/datastore-gen.go
index 59ecbd5..b73b29f 100644
--- a/datastore/v1beta3/datastore-gen.go
+++ b/datastore/v1beta3/datastore-gen.go
@@ -64,10 +64,9 @@
 }
 
 type Service struct {
-	client                    *http.Client
-	BasePath                  string // API endpoint base URL
-	UserAgent                 string // optional additional User-Agent fragment
-	GoogleClientHeaderElement string // client header fragment, for Google use only
+	client    *http.Client
+	BasePath  string // API endpoint base URL
+	UserAgent string // optional additional User-Agent fragment
 
 	Projects *ProjectsService
 }
@@ -79,10 +78,6 @@
 	return googleapi.UserAgent + " " + s.UserAgent
 }
 
-func (s *Service) clientHeader() string {
-	return gensupport.GoogleClientHeader("20170210", s.GoogleClientHeaderElement)
-}
-
 func NewProjectsService(s *Service) *ProjectsService {
 	rs := &ProjectsService{s: s}
 	return rs
@@ -1657,7 +1652,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	var body io.Reader = nil
 	body, err := googleapi.WithoutDataWrapper.JSONReader(c.allocateidsrequest)
 	if err != nil {
@@ -1793,7 +1787,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	var body io.Reader = nil
 	body, err := googleapi.WithoutDataWrapper.JSONReader(c.begintransactionrequest)
 	if err != nil {
@@ -1931,7 +1924,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	var body io.Reader = nil
 	body, err := googleapi.WithoutDataWrapper.JSONReader(c.commitrequest)
 	if err != nil {
@@ -2067,7 +2059,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	var body io.Reader = nil
 	body, err := googleapi.WithoutDataWrapper.JSONReader(c.lookuprequest)
 	if err != nil {
@@ -2203,7 +2194,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	var body io.Reader = nil
 	body, err := googleapi.WithoutDataWrapper.JSONReader(c.rollbackrequest)
 	if err != nil {
@@ -2339,7 +2329,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	var body io.Reader = nil
 	body, err := googleapi.WithoutDataWrapper.JSONReader(c.runqueryrequest)
 	if err != nil {
diff --git a/deploymentmanager/v0.alpha/deploymentmanager-gen.go b/deploymentmanager/v0.alpha/deploymentmanager-gen.go
index 061f3c4..bb51128 100644
--- a/deploymentmanager/v0.alpha/deploymentmanager-gen.go
+++ b/deploymentmanager/v0.alpha/deploymentmanager-gen.go
@@ -78,10 +78,9 @@
 }
 
 type Service struct {
-	client                    *http.Client
-	BasePath                  string // API endpoint base URL
-	UserAgent                 string // optional additional User-Agent fragment
-	GoogleClientHeaderElement string // client header fragment, for Google use only
+	client    *http.Client
+	BasePath  string // API endpoint base URL
+	UserAgent string // optional additional User-Agent fragment
 
 	CompositeTypes *CompositeTypesService
 
@@ -105,10 +104,6 @@
 	return googleapi.UserAgent + " " + s.UserAgent
 }
 
-func (s *Service) clientHeader() string {
-	return gensupport.GoogleClientHeader("20170210", s.GoogleClientHeaderElement)
-}
-
 func NewCompositeTypesService(s *Service) *CompositeTypesService {
 	rs := &CompositeTypesService{s: s}
 	return rs
@@ -2671,7 +2666,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	var body io.Reader = nil
 	c.urlParams_.Set("alt", alt)
 	urls := googleapi.ResolveRelative(c.s.BasePath, "{project}/global/compositeTypes/{compositeType}")
@@ -2819,7 +2813,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	if c.ifNoneMatch_ != "" {
 		reqHeaders.Set("If-None-Match", c.ifNoneMatch_)
 	}
@@ -2961,7 +2954,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	var body io.Reader = nil
 	body, err := googleapi.WithoutDataWrapper.JSONReader(c.compositetype)
 	if err != nil {
@@ -3174,7 +3166,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	if c.ifNoneMatch_ != "" {
 		reqHeaders.Set("If-None-Match", c.ifNoneMatch_)
 	}
@@ -3354,7 +3345,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	var body io.Reader = nil
 	body, err := googleapi.WithoutDataWrapper.JSONReader(c.compositetype)
 	if err != nil {
@@ -3501,7 +3491,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	var body io.Reader = nil
 	body, err := googleapi.WithoutDataWrapper.JSONReader(c.compositetype)
 	if err != nil {
@@ -3649,7 +3638,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	var body io.Reader = nil
 	body, err := googleapi.WithoutDataWrapper.JSONReader(c.deploymentscancelpreviewrequest)
 	if err != nil {
@@ -3806,7 +3794,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	var body io.Reader = nil
 	c.urlParams_.Set("alt", alt)
 	urls := googleapi.ResolveRelative(c.s.BasePath, "{project}/global/deployments/{deployment}")
@@ -3968,7 +3955,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	if c.ifNoneMatch_ != "" {
 		reqHeaders.Set("If-None-Match", c.ifNoneMatch_)
 	}
@@ -4122,7 +4108,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	if c.ifNoneMatch_ != "" {
 		reqHeaders.Set("If-None-Match", c.ifNoneMatch_)
 	}
@@ -4277,7 +4262,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	var body io.Reader = nil
 	body, err := googleapi.WithoutDataWrapper.JSONReader(c.deployment)
 	if err != nil {
@@ -4495,7 +4479,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	if c.ifNoneMatch_ != "" {
 		reqHeaders.Set("If-None-Match", c.ifNoneMatch_)
 	}
@@ -4713,7 +4696,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	var body io.Reader = nil
 	body, err := googleapi.WithoutDataWrapper.JSONReader(c.deployment2)
 	if err != nil {
@@ -4895,7 +4877,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	var body io.Reader = nil
 	body, err := googleapi.WithoutDataWrapper.JSONReader(c.policy)
 	if err != nil {
@@ -5044,7 +5025,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	var body io.Reader = nil
 	body, err := googleapi.WithoutDataWrapper.JSONReader(c.deploymentsstoprequest)
 	if err != nil {
@@ -5192,7 +5172,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	var body io.Reader = nil
 	body, err := googleapi.WithoutDataWrapper.JSONReader(c.testpermissionsrequest)
 	if err != nil {
@@ -5378,7 +5357,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	var body io.Reader = nil
 	body, err := googleapi.WithoutDataWrapper.JSONReader(c.deployment2)
 	if err != nil {
@@ -5570,7 +5548,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	if c.ifNoneMatch_ != "" {
 		reqHeaders.Set("If-None-Match", c.ifNoneMatch_)
 	}
@@ -5800,7 +5777,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	if c.ifNoneMatch_ != "" {
 		reqHeaders.Set("If-None-Match", c.ifNoneMatch_)
 	}
@@ -5997,7 +5973,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	if c.ifNoneMatch_ != "" {
 		reqHeaders.Set("If-None-Match", c.ifNoneMatch_)
 	}
@@ -6215,7 +6190,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	if c.ifNoneMatch_ != "" {
 		reqHeaders.Set("If-None-Match", c.ifNoneMatch_)
 	}
@@ -6405,7 +6379,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	if c.ifNoneMatch_ != "" {
 		reqHeaders.Set("If-None-Match", c.ifNoneMatch_)
 	}
@@ -6634,7 +6607,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	if c.ifNoneMatch_ != "" {
 		reqHeaders.Set("If-None-Match", c.ifNoneMatch_)
 	}
@@ -6820,7 +6792,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	var body io.Reader = nil
 	c.urlParams_.Set("alt", alt)
 	urls := googleapi.ResolveRelative(c.s.BasePath, "{project}/global/typeProviders/{typeProvider}")
@@ -6968,7 +6939,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	if c.ifNoneMatch_ != "" {
 		reqHeaders.Set("If-None-Match", c.ifNoneMatch_)
 	}
@@ -7123,7 +7093,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	if c.ifNoneMatch_ != "" {
 		reqHeaders.Set("If-None-Match", c.ifNoneMatch_)
 	}
@@ -7273,7 +7242,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	var body io.Reader = nil
 	body, err := googleapi.WithoutDataWrapper.JSONReader(c.typeprovider)
 	if err != nil {
@@ -7486,7 +7454,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	if c.ifNoneMatch_ != "" {
 		reqHeaders.Set("If-None-Match", c.ifNoneMatch_)
 	}
@@ -7742,7 +7709,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	if c.ifNoneMatch_ != "" {
 		reqHeaders.Set("If-None-Match", c.ifNoneMatch_)
 	}
@@ -7930,7 +7896,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	var body io.Reader = nil
 	body, err := googleapi.WithoutDataWrapper.JSONReader(c.typeprovider)
 	if err != nil {
@@ -8077,7 +8042,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	var body io.Reader = nil
 	body, err := googleapi.WithoutDataWrapper.JSONReader(c.typeprovider)
 	if err != nil {
@@ -8222,7 +8186,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	var body io.Reader = nil
 	c.urlParams_.Set("alt", alt)
 	urls := googleapi.ResolveRelative(c.s.BasePath, "{project}/global/types/{type}")
@@ -8370,7 +8333,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	if c.ifNoneMatch_ != "" {
 		reqHeaders.Set("If-None-Match", c.ifNoneMatch_)
 	}
@@ -8512,7 +8474,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	var body io.Reader = nil
 	body, err := googleapi.WithoutDataWrapper.JSONReader(c.type_)
 	if err != nil {
@@ -8725,7 +8686,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	if c.ifNoneMatch_ != "" {
 		reqHeaders.Set("If-None-Match", c.ifNoneMatch_)
 	}
@@ -8904,7 +8864,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	var body io.Reader = nil
 	body, err := googleapi.WithoutDataWrapper.JSONReader(c.type_2)
 	if err != nil {
@@ -9051,7 +9010,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	var body io.Reader = nil
 	body, err := googleapi.WithoutDataWrapper.JSONReader(c.type_2)
 	if err != nil {
diff --git a/deploymentmanager/v2/deploymentmanager-gen.go b/deploymentmanager/v2/deploymentmanager-gen.go
index 2473882..b80d1e9 100644
--- a/deploymentmanager/v2/deploymentmanager-gen.go
+++ b/deploymentmanager/v2/deploymentmanager-gen.go
@@ -76,10 +76,9 @@
 }
 
 type Service struct {
-	client                    *http.Client
-	BasePath                  string // API endpoint base URL
-	UserAgent                 string // optional additional User-Agent fragment
-	GoogleClientHeaderElement string // client header fragment, for Google use only
+	client    *http.Client
+	BasePath  string // API endpoint base URL
+	UserAgent string // optional additional User-Agent fragment
 
 	Deployments *DeploymentsService
 
@@ -99,10 +98,6 @@
 	return googleapi.UserAgent + " " + s.UserAgent
 }
 
-func (s *Service) clientHeader() string {
-	return gensupport.GoogleClientHeader("20170210", s.GoogleClientHeaderElement)
-}
-
 func NewDeploymentsService(s *Service) *DeploymentsService {
 	rs := &DeploymentsService{s: s}
 	return rs
@@ -1929,7 +1924,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	var body io.Reader = nil
 	body, err := googleapi.WithoutDataWrapper.JSONReader(c.deploymentscancelpreviewrequest)
 	if err != nil {
@@ -2086,7 +2080,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	var body io.Reader = nil
 	c.urlParams_.Set("alt", alt)
 	urls := googleapi.ResolveRelative(c.s.BasePath, "{project}/global/deployments/{deployment}")
@@ -2248,7 +2241,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	if c.ifNoneMatch_ != "" {
 		reqHeaders.Set("If-None-Match", c.ifNoneMatch_)
 	}
@@ -2402,7 +2394,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	if c.ifNoneMatch_ != "" {
 		reqHeaders.Set("If-None-Match", c.ifNoneMatch_)
 	}
@@ -2557,7 +2548,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	var body io.Reader = nil
 	body, err := googleapi.WithoutDataWrapper.JSONReader(c.deployment)
 	if err != nil {
@@ -2775,7 +2765,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	if c.ifNoneMatch_ != "" {
 		reqHeaders.Set("If-None-Match", c.ifNoneMatch_)
 	}
@@ -2993,7 +2982,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	var body io.Reader = nil
 	body, err := googleapi.WithoutDataWrapper.JSONReader(c.deployment2)
 	if err != nil {
@@ -3175,7 +3163,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	var body io.Reader = nil
 	body, err := googleapi.WithoutDataWrapper.JSONReader(c.policy)
 	if err != nil {
@@ -3324,7 +3311,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	var body io.Reader = nil
 	body, err := googleapi.WithoutDataWrapper.JSONReader(c.deploymentsstoprequest)
 	if err != nil {
@@ -3472,7 +3458,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	var body io.Reader = nil
 	body, err := googleapi.WithoutDataWrapper.JSONReader(c.testpermissionsrequest)
 	if err != nil {
@@ -3658,7 +3643,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	var body io.Reader = nil
 	body, err := googleapi.WithoutDataWrapper.JSONReader(c.deployment2)
 	if err != nil {
@@ -3850,7 +3834,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	if c.ifNoneMatch_ != "" {
 		reqHeaders.Set("If-None-Match", c.ifNoneMatch_)
 	}
@@ -4080,7 +4063,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	if c.ifNoneMatch_ != "" {
 		reqHeaders.Set("If-None-Match", c.ifNoneMatch_)
 	}
@@ -4277,7 +4259,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	if c.ifNoneMatch_ != "" {
 		reqHeaders.Set("If-None-Match", c.ifNoneMatch_)
 	}
@@ -4495,7 +4476,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	if c.ifNoneMatch_ != "" {
 		reqHeaders.Set("If-None-Match", c.ifNoneMatch_)
 	}
@@ -4685,7 +4665,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	if c.ifNoneMatch_ != "" {
 		reqHeaders.Set("If-None-Match", c.ifNoneMatch_)
 	}
@@ -4914,7 +4893,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	if c.ifNoneMatch_ != "" {
 		reqHeaders.Set("If-None-Match", c.ifNoneMatch_)
 	}
@@ -5177,7 +5155,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	if c.ifNoneMatch_ != "" {
 		reqHeaders.Set("If-None-Match", c.ifNoneMatch_)
 	}
diff --git a/deploymentmanager/v2beta/deploymentmanager-gen.go b/deploymentmanager/v2beta/deploymentmanager-gen.go
index fc2c08a..a6903a1 100644
--- a/deploymentmanager/v2beta/deploymentmanager-gen.go
+++ b/deploymentmanager/v2beta/deploymentmanager-gen.go
@@ -78,10 +78,9 @@
 }
 
 type Service struct {
-	client                    *http.Client
-	BasePath                  string // API endpoint base URL
-	UserAgent                 string // optional additional User-Agent fragment
-	GoogleClientHeaderElement string // client header fragment, for Google use only
+	client    *http.Client
+	BasePath  string // API endpoint base URL
+	UserAgent string // optional additional User-Agent fragment
 
 	CompositeTypes *CompositeTypesService
 
@@ -105,10 +104,6 @@
 	return googleapi.UserAgent + " " + s.UserAgent
 }
 
-func (s *Service) clientHeader() string {
-	return gensupport.GoogleClientHeader("20170210", s.GoogleClientHeaderElement)
-}
-
 func NewCompositeTypesService(s *Service) *CompositeTypesService {
 	rs := &CompositeTypesService{s: s}
 	return rs
@@ -2670,7 +2665,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	var body io.Reader = nil
 	c.urlParams_.Set("alt", alt)
 	urls := googleapi.ResolveRelative(c.s.BasePath, "{project}/global/compositeTypes/{compositeType}")
@@ -2818,7 +2812,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	if c.ifNoneMatch_ != "" {
 		reqHeaders.Set("If-None-Match", c.ifNoneMatch_)
 	}
@@ -2960,7 +2953,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	var body io.Reader = nil
 	body, err := googleapi.WithoutDataWrapper.JSONReader(c.compositetype)
 	if err != nil {
@@ -3173,7 +3165,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	if c.ifNoneMatch_ != "" {
 		reqHeaders.Set("If-None-Match", c.ifNoneMatch_)
 	}
@@ -3353,7 +3344,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	var body io.Reader = nil
 	body, err := googleapi.WithoutDataWrapper.JSONReader(c.compositetype)
 	if err != nil {
@@ -3500,7 +3490,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	var body io.Reader = nil
 	body, err := googleapi.WithoutDataWrapper.JSONReader(c.compositetype)
 	if err != nil {
@@ -3648,7 +3637,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	var body io.Reader = nil
 	body, err := googleapi.WithoutDataWrapper.JSONReader(c.deploymentscancelpreviewrequest)
 	if err != nil {
@@ -3805,7 +3793,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	var body io.Reader = nil
 	c.urlParams_.Set("alt", alt)
 	urls := googleapi.ResolveRelative(c.s.BasePath, "{project}/global/deployments/{deployment}")
@@ -3967,7 +3954,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	if c.ifNoneMatch_ != "" {
 		reqHeaders.Set("If-None-Match", c.ifNoneMatch_)
 	}
@@ -4121,7 +4107,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	if c.ifNoneMatch_ != "" {
 		reqHeaders.Set("If-None-Match", c.ifNoneMatch_)
 	}
@@ -4276,7 +4261,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	var body io.Reader = nil
 	body, err := googleapi.WithoutDataWrapper.JSONReader(c.deployment)
 	if err != nil {
@@ -4494,7 +4478,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	if c.ifNoneMatch_ != "" {
 		reqHeaders.Set("If-None-Match", c.ifNoneMatch_)
 	}
@@ -4712,7 +4695,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	var body io.Reader = nil
 	body, err := googleapi.WithoutDataWrapper.JSONReader(c.deployment2)
 	if err != nil {
@@ -4894,7 +4876,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	var body io.Reader = nil
 	body, err := googleapi.WithoutDataWrapper.JSONReader(c.policy)
 	if err != nil {
@@ -5043,7 +5024,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	var body io.Reader = nil
 	body, err := googleapi.WithoutDataWrapper.JSONReader(c.deploymentsstoprequest)
 	if err != nil {
@@ -5191,7 +5171,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	var body io.Reader = nil
 	body, err := googleapi.WithoutDataWrapper.JSONReader(c.testpermissionsrequest)
 	if err != nil {
@@ -5377,7 +5356,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	var body io.Reader = nil
 	body, err := googleapi.WithoutDataWrapper.JSONReader(c.deployment2)
 	if err != nil {
@@ -5569,7 +5547,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	if c.ifNoneMatch_ != "" {
 		reqHeaders.Set("If-None-Match", c.ifNoneMatch_)
 	}
@@ -5799,7 +5776,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	if c.ifNoneMatch_ != "" {
 		reqHeaders.Set("If-None-Match", c.ifNoneMatch_)
 	}
@@ -5996,7 +5972,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	if c.ifNoneMatch_ != "" {
 		reqHeaders.Set("If-None-Match", c.ifNoneMatch_)
 	}
@@ -6214,7 +6189,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	if c.ifNoneMatch_ != "" {
 		reqHeaders.Set("If-None-Match", c.ifNoneMatch_)
 	}
@@ -6404,7 +6378,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	if c.ifNoneMatch_ != "" {
 		reqHeaders.Set("If-None-Match", c.ifNoneMatch_)
 	}
@@ -6633,7 +6606,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	if c.ifNoneMatch_ != "" {
 		reqHeaders.Set("If-None-Match", c.ifNoneMatch_)
 	}
@@ -6819,7 +6791,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	var body io.Reader = nil
 	c.urlParams_.Set("alt", alt)
 	urls := googleapi.ResolveRelative(c.s.BasePath, "{project}/global/typeProviders/{typeProvider}")
@@ -6967,7 +6938,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	if c.ifNoneMatch_ != "" {
 		reqHeaders.Set("If-None-Match", c.ifNoneMatch_)
 	}
@@ -7122,7 +7092,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	if c.ifNoneMatch_ != "" {
 		reqHeaders.Set("If-None-Match", c.ifNoneMatch_)
 	}
@@ -7272,7 +7241,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	var body io.Reader = nil
 	body, err := googleapi.WithoutDataWrapper.JSONReader(c.typeprovider)
 	if err != nil {
@@ -7485,7 +7453,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	if c.ifNoneMatch_ != "" {
 		reqHeaders.Set("If-None-Match", c.ifNoneMatch_)
 	}
@@ -7741,7 +7708,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	if c.ifNoneMatch_ != "" {
 		reqHeaders.Set("If-None-Match", c.ifNoneMatch_)
 	}
@@ -7929,7 +7895,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	var body io.Reader = nil
 	body, err := googleapi.WithoutDataWrapper.JSONReader(c.typeprovider)
 	if err != nil {
@@ -8076,7 +8041,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	var body io.Reader = nil
 	body, err := googleapi.WithoutDataWrapper.JSONReader(c.typeprovider)
 	if err != nil {
@@ -8298,7 +8262,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	if c.ifNoneMatch_ != "" {
 		reqHeaders.Set("If-None-Match", c.ifNoneMatch_)
 	}
diff --git a/dfareporting/v2.6/dfareporting-gen.go b/dfareporting/v2.6/dfareporting-gen.go
index b90a99c..a3b5a83 100644
--- a/dfareporting/v2.6/dfareporting-gen.go
+++ b/dfareporting/v2.6/dfareporting-gen.go
@@ -126,10 +126,9 @@
 }
 
 type Service struct {
-	client                    *http.Client
-	BasePath                  string // API endpoint base URL
-	UserAgent                 string // optional additional User-Agent fragment
-	GoogleClientHeaderElement string // client header fragment, for Google use only
+	client    *http.Client
+	BasePath  string // API endpoint base URL
+	UserAgent string // optional additional User-Agent fragment
 
 	AccountActiveAdSummaries *AccountActiveAdSummariesService
 
@@ -257,10 +256,6 @@
 	return googleapi.UserAgent + " " + s.UserAgent
 }
 
-func (s *Service) clientHeader() string {
-	return gensupport.GoogleClientHeader("20170210", s.GoogleClientHeaderElement)
-}
-
 func NewAccountActiveAdSummariesService(s *Service) *AccountActiveAdSummariesService {
 	rs := &AccountActiveAdSummariesService{s: s}
 	return rs
@@ -13409,7 +13404,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	if c.ifNoneMatch_ != "" {
 		reqHeaders.Set("If-None-Match", c.ifNoneMatch_)
 	}
@@ -13559,7 +13553,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	if c.ifNoneMatch_ != "" {
 		reqHeaders.Set("If-None-Match", c.ifNoneMatch_)
 	}
@@ -13707,7 +13700,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	if c.ifNoneMatch_ != "" {
 		reqHeaders.Set("If-None-Match", c.ifNoneMatch_)
 	}
@@ -13849,7 +13841,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	if c.ifNoneMatch_ != "" {
 		reqHeaders.Set("If-None-Match", c.ifNoneMatch_)
 	}
@@ -13997,7 +13988,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	if c.ifNoneMatch_ != "" {
 		reqHeaders.Set("If-None-Match", c.ifNoneMatch_)
 	}
@@ -14138,7 +14128,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	if c.ifNoneMatch_ != "" {
 		reqHeaders.Set("If-None-Match", c.ifNoneMatch_)
 	}
@@ -14277,7 +14266,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	var body io.Reader = nil
 	body, err := googleapi.WithoutDataWrapper.JSONReader(c.accountuserprofile)
 	if err != nil {
@@ -14504,7 +14492,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	if c.ifNoneMatch_ != "" {
 		reqHeaders.Set("If-None-Match", c.ifNoneMatch_)
 	}
@@ -14723,7 +14710,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	var body io.Reader = nil
 	body, err := googleapi.WithoutDataWrapper.JSONReader(c.accountuserprofile)
 	if err != nil {
@@ -14866,7 +14852,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	var body io.Reader = nil
 	body, err := googleapi.WithoutDataWrapper.JSONReader(c.accountuserprofile)
 	if err != nil {
@@ -15012,7 +14997,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	if c.ifNoneMatch_ != "" {
 		reqHeaders.Set("If-None-Match", c.ifNoneMatch_)
 	}
@@ -15229,7 +15213,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	if c.ifNoneMatch_ != "" {
 		reqHeaders.Set("If-None-Match", c.ifNoneMatch_)
 	}
@@ -15436,7 +15419,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	var body io.Reader = nil
 	body, err := googleapi.WithoutDataWrapper.JSONReader(c.account)
 	if err != nil {
@@ -15579,7 +15561,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	var body io.Reader = nil
 	body, err := googleapi.WithoutDataWrapper.JSONReader(c.account)
 	if err != nil {
@@ -15725,7 +15706,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	if c.ifNoneMatch_ != "" {
 		reqHeaders.Set("If-None-Match", c.ifNoneMatch_)
 	}
@@ -15864,7 +15844,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	var body io.Reader = nil
 	body, err := googleapi.WithoutDataWrapper.JSONReader(c.ad)
 	if err != nil {
@@ -16275,7 +16254,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	if c.ifNoneMatch_ != "" {
 		reqHeaders.Set("If-None-Match", c.ifNoneMatch_)
 	}
@@ -16663,7 +16641,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	var body io.Reader = nil
 	body, err := googleapi.WithoutDataWrapper.JSONReader(c.ad)
 	if err != nil {
@@ -16806,7 +16783,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	var body io.Reader = nil
 	body, err := googleapi.WithoutDataWrapper.JSONReader(c.ad)
 	if err != nil {
@@ -16941,7 +16917,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	var body io.Reader = nil
 	c.urlParams_.Set("alt", alt)
 	urls := googleapi.ResolveRelative(c.s.BasePath, "userprofiles/{profileId}/advertiserGroups/{id}")
@@ -17060,7 +17035,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	if c.ifNoneMatch_ != "" {
 		reqHeaders.Set("If-None-Match", c.ifNoneMatch_)
 	}
@@ -17199,7 +17173,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	var body io.Reader = nil
 	body, err := googleapi.WithoutDataWrapper.JSONReader(c.advertisergroup)
 	if err != nil {
@@ -17405,7 +17378,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	if c.ifNoneMatch_ != "" {
 		reqHeaders.Set("If-None-Match", c.ifNoneMatch_)
 	}
@@ -17607,7 +17579,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	var body io.Reader = nil
 	body, err := googleapi.WithoutDataWrapper.JSONReader(c.advertisergroup)
 	if err != nil {
@@ -17750,7 +17721,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	var body io.Reader = nil
 	body, err := googleapi.WithoutDataWrapper.JSONReader(c.advertisergroup)
 	if err != nil {
@@ -17896,7 +17866,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	if c.ifNoneMatch_ != "" {
 		reqHeaders.Set("If-None-Match", c.ifNoneMatch_)
 	}
@@ -18035,7 +18004,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	var body io.Reader = nil
 	body, err := googleapi.WithoutDataWrapper.JSONReader(c.advertiser)
 	if err != nil {
@@ -18296,7 +18264,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	if c.ifNoneMatch_ != "" {
 		reqHeaders.Set("If-None-Match", c.ifNoneMatch_)
 	}
@@ -18541,7 +18508,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	var body io.Reader = nil
 	body, err := googleapi.WithoutDataWrapper.JSONReader(c.advertiser)
 	if err != nil {
@@ -18684,7 +18650,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	var body io.Reader = nil
 	body, err := googleapi.WithoutDataWrapper.JSONReader(c.advertiser)
 	if err != nil {
@@ -18828,7 +18793,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	if c.ifNoneMatch_ != "" {
 		reqHeaders.Set("If-None-Match", c.ifNoneMatch_)
 	}
@@ -18962,7 +18926,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	var body io.Reader = nil
 	body, err := googleapi.WithoutDataWrapper.JSONReader(c.campaigncreativeassociation)
 	if err != nil {
@@ -19143,7 +19106,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	if c.ifNoneMatch_ != "" {
 		reqHeaders.Set("If-None-Match", c.ifNoneMatch_)
 	}
@@ -19340,7 +19302,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	if c.ifNoneMatch_ != "" {
 		reqHeaders.Set("If-None-Match", c.ifNoneMatch_)
 	}
@@ -19481,7 +19442,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	var body io.Reader = nil
 	body, err := googleapi.WithoutDataWrapper.JSONReader(c.campaign)
 	if err != nil {
@@ -19765,7 +19725,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	if c.ifNoneMatch_ != "" {
 		reqHeaders.Set("If-None-Match", c.ifNoneMatch_)
 	}
@@ -20010,7 +19969,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	var body io.Reader = nil
 	body, err := googleapi.WithoutDataWrapper.JSONReader(c.campaign)
 	if err != nil {
@@ -20153,7 +20111,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	var body io.Reader = nil
 	body, err := googleapi.WithoutDataWrapper.JSONReader(c.campaign)
 	if err != nil {
@@ -20299,7 +20256,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	if c.ifNoneMatch_ != "" {
 		reqHeaders.Set("If-None-Match", c.ifNoneMatch_)
 	}
@@ -20602,7 +20558,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	if c.ifNoneMatch_ != "" {
 		reqHeaders.Set("If-None-Match", c.ifNoneMatch_)
 	}
@@ -20979,7 +20934,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	if c.ifNoneMatch_ != "" {
 		reqHeaders.Set("If-None-Match", c.ifNoneMatch_)
 	}
@@ -21146,7 +21100,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	if c.ifNoneMatch_ != "" {
 		reqHeaders.Set("If-None-Match", c.ifNoneMatch_)
 	}
@@ -21294,7 +21247,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	if c.ifNoneMatch_ != "" {
 		reqHeaders.Set("If-None-Match", c.ifNoneMatch_)
 	}
@@ -21424,7 +21376,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	var body io.Reader = nil
 	c.urlParams_.Set("alt", alt)
 	urls := googleapi.ResolveRelative(c.s.BasePath, "userprofiles/{profileId}/contentCategories/{id}")
@@ -21543,7 +21494,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	if c.ifNoneMatch_ != "" {
 		reqHeaders.Set("If-None-Match", c.ifNoneMatch_)
 	}
@@ -21682,7 +21632,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	var body io.Reader = nil
 	body, err := googleapi.WithoutDataWrapper.JSONReader(c.contentcategory)
 	if err != nil {
@@ -21888,7 +21837,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	if c.ifNoneMatch_ != "" {
 		reqHeaders.Set("If-None-Match", c.ifNoneMatch_)
 	}
@@ -22090,7 +22038,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	var body io.Reader = nil
 	body, err := googleapi.WithoutDataWrapper.JSONReader(c.contentcategory)
 	if err != nil {
@@ -22233,7 +22180,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	var body io.Reader = nil
 	body, err := googleapi.WithoutDataWrapper.JSONReader(c.contentcategory)
 	if err != nil {
@@ -22368,7 +22314,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	var body io.Reader = nil
 	body, err := googleapi.WithoutDataWrapper.JSONReader(c.conversionsbatchinsertrequest)
 	if err != nil {
@@ -22514,7 +22459,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	if c.ifNoneMatch_ != "" {
 		reqHeaders.Set("If-None-Match", c.ifNoneMatch_)
 	}
@@ -22662,7 +22606,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	if c.ifNoneMatch_ != "" {
 		reqHeaders.Set("If-None-Match", c.ifNoneMatch_)
 	}
@@ -22847,7 +22790,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	var body io.Reader = nil
 	body, err := googleapi.WithoutDataWrapper.JSONReader(c.creativeassetmetadata)
 	if err != nil {
@@ -23058,7 +23000,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	var body io.Reader = nil
 	c.urlParams_.Set("alt", alt)
 	urls := googleapi.ResolveRelative(c.s.BasePath, "userprofiles/{profileId}/creativeFields/{creativeFieldId}/creativeFieldValues/{id}")
@@ -23188,7 +23129,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	if c.ifNoneMatch_ != "" {
 		reqHeaders.Set("If-None-Match", c.ifNoneMatch_)
 	}
@@ -23338,7 +23278,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	var body io.Reader = nil
 	body, err := googleapi.WithoutDataWrapper.JSONReader(c.creativefieldvalue)
 	if err != nil {
@@ -23549,7 +23488,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	if c.ifNoneMatch_ != "" {
 		reqHeaders.Set("If-None-Match", c.ifNoneMatch_)
 	}
@@ -23762,7 +23700,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	var body io.Reader = nil
 	body, err := googleapi.WithoutDataWrapper.JSONReader(c.creativefieldvalue)
 	if err != nil {
@@ -23916,7 +23853,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	var body io.Reader = nil
 	body, err := googleapi.WithoutDataWrapper.JSONReader(c.creativefieldvalue)
 	if err != nil {
@@ -24060,7 +23996,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	var body io.Reader = nil
 	c.urlParams_.Set("alt", alt)
 	urls := googleapi.ResolveRelative(c.s.BasePath, "userprofiles/{profileId}/creativeFields/{id}")
@@ -24179,7 +24114,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	if c.ifNoneMatch_ != "" {
 		reqHeaders.Set("If-None-Match", c.ifNoneMatch_)
 	}
@@ -24318,7 +24252,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	var body io.Reader = nil
 	body, err := googleapi.WithoutDataWrapper.JSONReader(c.creativefield)
 	if err != nil {
@@ -24535,7 +24468,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	if c.ifNoneMatch_ != "" {
 		reqHeaders.Set("If-None-Match", c.ifNoneMatch_)
 	}
@@ -24744,7 +24676,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	var body io.Reader = nil
 	body, err := googleapi.WithoutDataWrapper.JSONReader(c.creativefield)
 	if err != nil {
@@ -24887,7 +24818,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	var body io.Reader = nil
 	body, err := googleapi.WithoutDataWrapper.JSONReader(c.creativefield)
 	if err != nil {
@@ -25033,7 +24963,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	if c.ifNoneMatch_ != "" {
 		reqHeaders.Set("If-None-Match", c.ifNoneMatch_)
 	}
@@ -25172,7 +25101,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	var body io.Reader = nil
 	body, err := googleapi.WithoutDataWrapper.JSONReader(c.creativegroup)
 	if err != nil {
@@ -25396,7 +25324,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	if c.ifNoneMatch_ != "" {
 		reqHeaders.Set("If-None-Match", c.ifNoneMatch_)
 	}
@@ -25611,7 +25538,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	var body io.Reader = nil
 	body, err := googleapi.WithoutDataWrapper.JSONReader(c.creativegroup)
 	if err != nil {
@@ -25754,7 +25680,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	var body io.Reader = nil
 	body, err := googleapi.WithoutDataWrapper.JSONReader(c.creativegroup)
 	if err != nil {
@@ -25900,7 +25825,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	if c.ifNoneMatch_ != "" {
 		reqHeaders.Set("If-None-Match", c.ifNoneMatch_)
 	}
@@ -26039,7 +25963,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	var body io.Reader = nil
 	body, err := googleapi.WithoutDataWrapper.JSONReader(c.creative)
 	if err != nil {
@@ -26357,7 +26280,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	if c.ifNoneMatch_ != "" {
 		reqHeaders.Set("If-None-Match", c.ifNoneMatch_)
 	}
@@ -26673,7 +26595,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	var body io.Reader = nil
 	body, err := googleapi.WithoutDataWrapper.JSONReader(c.creative)
 	if err != nil {
@@ -26816,7 +26737,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	var body io.Reader = nil
 	body, err := googleapi.WithoutDataWrapper.JSONReader(c.creative)
 	if err != nil {
@@ -26966,7 +26886,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	var body io.Reader = nil
 	body, err := googleapi.WithoutDataWrapper.JSONReader(c.dimensionvaluerequest)
 	if err != nil {
@@ -27146,7 +27065,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	if c.ifNoneMatch_ != "" {
 		reqHeaders.Set("If-None-Match", c.ifNoneMatch_)
 	}
@@ -27369,7 +27287,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	if c.ifNoneMatch_ != "" {
 		reqHeaders.Set("If-None-Match", c.ifNoneMatch_)
 	}
@@ -27588,7 +27505,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	if c.ifNoneMatch_ != "" {
 		reqHeaders.Set("If-None-Match", c.ifNoneMatch_)
 	}
@@ -27727,7 +27643,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	var body io.Reader = nil
 	body, err := googleapi.WithoutDataWrapper.JSONReader(c.directorysite)
 	if err != nil {
@@ -27986,7 +27901,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	if c.ifNoneMatch_ != "" {
 		reqHeaders.Set("If-None-Match", c.ifNoneMatch_)
 	}
@@ -28225,7 +28139,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	var body io.Reader = nil
 	c.urlParams_.Set("alt", alt)
 	urls := googleapi.ResolveRelative(c.s.BasePath, "userprofiles/{profileId}/dynamicTargetingKeys/{objectId}")
@@ -28363,7 +28276,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	var body io.Reader = nil
 	body, err := googleapi.WithoutDataWrapper.JSONReader(c.dynamictargetingkey)
 	if err != nil {
@@ -28541,7 +28453,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	if c.ifNoneMatch_ != "" {
 		reqHeaders.Set("If-None-Match", c.ifNoneMatch_)
 	}
@@ -28706,7 +28617,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	var body io.Reader = nil
 	c.urlParams_.Set("alt", alt)
 	urls := googleapi.ResolveRelative(c.s.BasePath, "userprofiles/{profileId}/eventTags/{id}")
@@ -28825,7 +28735,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	if c.ifNoneMatch_ != "" {
 		reqHeaders.Set("If-None-Match", c.ifNoneMatch_)
 	}
@@ -28964,7 +28873,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	var body io.Reader = nil
 	body, err := googleapi.WithoutDataWrapper.JSONReader(c.eventtag)
 	if err != nil {
@@ -29216,7 +29124,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	if c.ifNoneMatch_ != "" {
 		reqHeaders.Set("If-None-Match", c.ifNoneMatch_)
 	}
@@ -29430,7 +29337,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	var body io.Reader = nil
 	body, err := googleapi.WithoutDataWrapper.JSONReader(c.eventtag)
 	if err != nil {
@@ -29573,7 +29479,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	var body io.Reader = nil
 	body, err := googleapi.WithoutDataWrapper.JSONReader(c.eventtag)
 	if err != nil {
@@ -29719,7 +29624,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	if c.ifNoneMatch_ != "" {
 		reqHeaders.Set("If-None-Match", c.ifNoneMatch_)
 	}
@@ -29932,7 +29836,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	if c.ifNoneMatch_ != "" {
 		reqHeaders.Set("If-None-Match", c.ifNoneMatch_)
 	}
@@ -30140,7 +30043,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	var body io.Reader = nil
 	c.urlParams_.Set("alt", alt)
 	urls := googleapi.ResolveRelative(c.s.BasePath, "userprofiles/{profileId}/floodlightActivities/{id}")
@@ -30254,7 +30156,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	var body io.Reader = nil
 	c.urlParams_.Set("alt", alt)
 	urls := googleapi.ResolveRelative(c.s.BasePath, "userprofiles/{profileId}/floodlightActivities/generatetag")
@@ -30399,7 +30300,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	if c.ifNoneMatch_ != "" {
 		reqHeaders.Set("If-None-Match", c.ifNoneMatch_)
 	}
@@ -30538,7 +30438,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	var body io.Reader = nil
 	body, err := googleapi.WithoutDataWrapper.JSONReader(c.floodlightactivity)
 	if err != nil {
@@ -30810,7 +30709,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	if c.ifNoneMatch_ != "" {
 		reqHeaders.Set("If-None-Match", c.ifNoneMatch_)
 	}
@@ -31059,7 +30957,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	var body io.Reader = nil
 	body, err := googleapi.WithoutDataWrapper.JSONReader(c.floodlightactivity)
 	if err != nil {
@@ -31202,7 +31099,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	var body io.Reader = nil
 	body, err := googleapi.WithoutDataWrapper.JSONReader(c.floodlightactivity)
 	if err != nil {
@@ -31348,7 +31244,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	if c.ifNoneMatch_ != "" {
 		reqHeaders.Set("If-None-Match", c.ifNoneMatch_)
 	}
@@ -31487,7 +31382,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	var body io.Reader = nil
 	body, err := googleapi.WithoutDataWrapper.JSONReader(c.floodlightactivitygroup)
 	if err != nil {
@@ -31724,7 +31618,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	if c.ifNoneMatch_ != "" {
 		reqHeaders.Set("If-None-Match", c.ifNoneMatch_)
 	}
@@ -31952,7 +31845,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	var body io.Reader = nil
 	body, err := googleapi.WithoutDataWrapper.JSONReader(c.floodlightactivitygroup)
 	if err != nil {
@@ -32095,7 +31987,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	var body io.Reader = nil
 	body, err := googleapi.WithoutDataWrapper.JSONReader(c.floodlightactivitygroup)
 	if err != nil {
@@ -32241,7 +32132,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	if c.ifNoneMatch_ != "" {
 		reqHeaders.Set("If-None-Match", c.ifNoneMatch_)
 	}
@@ -32402,7 +32292,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	if c.ifNoneMatch_ != "" {
 		reqHeaders.Set("If-None-Match", c.ifNoneMatch_)
 	}
@@ -32542,7 +32431,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	var body io.Reader = nil
 	body, err := googleapi.WithoutDataWrapper.JSONReader(c.floodlightconfiguration)
 	if err != nil {
@@ -32685,7 +32573,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	var body io.Reader = nil
 	body, err := googleapi.WithoutDataWrapper.JSONReader(c.floodlightconfiguration)
 	if err != nil {
@@ -32833,7 +32720,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	if c.ifNoneMatch_ != "" {
 		reqHeaders.Set("If-None-Match", c.ifNoneMatch_)
 	}
@@ -33080,7 +32966,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	if c.ifNoneMatch_ != "" {
 		reqHeaders.Set("If-None-Match", c.ifNoneMatch_)
 	}
@@ -33318,7 +33203,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	var body io.Reader = nil
 	c.urlParams_.Set("alt", alt)
 	urls := googleapi.ResolveRelative(c.s.BasePath, "userprofiles/{profileId}/campaigns/{campaignId}/landingPages/{id}")
@@ -33448,7 +33332,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	if c.ifNoneMatch_ != "" {
 		reqHeaders.Set("If-None-Match", c.ifNoneMatch_)
 	}
@@ -33598,7 +33481,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	var body io.Reader = nil
 	body, err := googleapi.WithoutDataWrapper.JSONReader(c.landingpage)
 	if err != nil {
@@ -33753,7 +33635,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	if c.ifNoneMatch_ != "" {
 		reqHeaders.Set("If-None-Match", c.ifNoneMatch_)
 	}
@@ -33896,7 +33777,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	var body io.Reader = nil
 	body, err := googleapi.WithoutDataWrapper.JSONReader(c.landingpage)
 	if err != nil {
@@ -34050,7 +33930,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	var body io.Reader = nil
 	body, err := googleapi.WithoutDataWrapper.JSONReader(c.landingpage)
 	if err != nil {
@@ -34203,7 +34082,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	if c.ifNoneMatch_ != "" {
 		reqHeaders.Set("If-None-Match", c.ifNoneMatch_)
 	}
@@ -34342,7 +34220,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	if c.ifNoneMatch_ != "" {
 		reqHeaders.Set("If-None-Match", c.ifNoneMatch_)
 	}
@@ -34483,7 +34360,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	if c.ifNoneMatch_ != "" {
 		reqHeaders.Set("If-None-Match", c.ifNoneMatch_)
 	}
@@ -34631,7 +34507,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	if c.ifNoneMatch_ != "" {
 		reqHeaders.Set("If-None-Match", c.ifNoneMatch_)
 	}
@@ -34772,7 +34647,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	if c.ifNoneMatch_ != "" {
 		reqHeaders.Set("If-None-Match", c.ifNoneMatch_)
 	}
@@ -34920,7 +34794,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	if c.ifNoneMatch_ != "" {
 		reqHeaders.Set("If-None-Match", c.ifNoneMatch_)
 	}
@@ -35062,7 +34935,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	if c.ifNoneMatch_ != "" {
 		reqHeaders.Set("If-None-Match", c.ifNoneMatch_)
 	}
@@ -35210,7 +35082,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	if c.ifNoneMatch_ != "" {
 		reqHeaders.Set("If-None-Match", c.ifNoneMatch_)
 	}
@@ -35353,7 +35224,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	if c.ifNoneMatch_ != "" {
 		reqHeaders.Set("If-None-Match", c.ifNoneMatch_)
 	}
@@ -35603,7 +35473,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	if c.ifNoneMatch_ != "" {
 		reqHeaders.Set("If-None-Match", c.ifNoneMatch_)
 	}
@@ -35844,7 +35713,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	if c.ifNoneMatch_ != "" {
 		reqHeaders.Set("If-None-Match", c.ifNoneMatch_)
 	}
@@ -36074,7 +35942,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	if c.ifNoneMatch_ != "" {
 		reqHeaders.Set("If-None-Match", c.ifNoneMatch_)
 	}
@@ -36301,7 +36168,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	if c.ifNoneMatch_ != "" {
 		reqHeaders.Set("If-None-Match", c.ifNoneMatch_)
 	}
@@ -36440,7 +36306,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	var body io.Reader = nil
 	body, err := googleapi.WithoutDataWrapper.JSONReader(c.placementgroup)
 	if err != nil {
@@ -36786,7 +36651,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	if c.ifNoneMatch_ != "" {
 		reqHeaders.Set("If-None-Match", c.ifNoneMatch_)
 	}
@@ -37090,7 +36954,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	var body io.Reader = nil
 	body, err := googleapi.WithoutDataWrapper.JSONReader(c.placementgroup)
 	if err != nil {
@@ -37233,7 +37096,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	var body io.Reader = nil
 	body, err := googleapi.WithoutDataWrapper.JSONReader(c.placementgroup)
 	if err != nil {
@@ -37368,7 +37230,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	var body io.Reader = nil
 	c.urlParams_.Set("alt", alt)
 	urls := googleapi.ResolveRelative(c.s.BasePath, "userprofiles/{profileId}/placementStrategies/{id}")
@@ -37487,7 +37348,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	if c.ifNoneMatch_ != "" {
 		reqHeaders.Set("If-None-Match", c.ifNoneMatch_)
 	}
@@ -37626,7 +37486,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	var body io.Reader = nil
 	body, err := googleapi.WithoutDataWrapper.JSONReader(c.placementstrategy)
 	if err != nil {
@@ -37832,7 +37691,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	if c.ifNoneMatch_ != "" {
 		reqHeaders.Set("If-None-Match", c.ifNoneMatch_)
 	}
@@ -38034,7 +37892,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	var body io.Reader = nil
 	body, err := googleapi.WithoutDataWrapper.JSONReader(c.placementstrategy)
 	if err != nil {
@@ -38177,7 +38034,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	var body io.Reader = nil
 	body, err := googleapi.WithoutDataWrapper.JSONReader(c.placementstrategy)
 	if err != nil {
@@ -38355,7 +38211,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	var body io.Reader = nil
 	c.urlParams_.Set("alt", alt)
 	urls := googleapi.ResolveRelative(c.s.BasePath, "userprofiles/{profileId}/placements/generatetags")
@@ -38552,7 +38407,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	if c.ifNoneMatch_ != "" {
 		reqHeaders.Set("If-None-Match", c.ifNoneMatch_)
 	}
@@ -38691,7 +38545,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	var body io.Reader = nil
 	body, err := googleapi.WithoutDataWrapper.JSONReader(c.placement)
 	if err != nil {
@@ -39072,7 +38925,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	if c.ifNoneMatch_ != "" {
 		reqHeaders.Set("If-None-Match", c.ifNoneMatch_)
 	}
@@ -39410,7 +39262,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	var body io.Reader = nil
 	body, err := googleapi.WithoutDataWrapper.JSONReader(c.placement)
 	if err != nil {
@@ -39553,7 +39404,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	var body io.Reader = nil
 	body, err := googleapi.WithoutDataWrapper.JSONReader(c.placement)
 	if err != nil {
@@ -39699,7 +39549,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	if c.ifNoneMatch_ != "" {
 		reqHeaders.Set("If-None-Match", c.ifNoneMatch_)
 	}
@@ -39847,7 +39696,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	if c.ifNoneMatch_ != "" {
 		reqHeaders.Set("If-None-Match", c.ifNoneMatch_)
 	}
@@ -39988,7 +39836,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	if c.ifNoneMatch_ != "" {
 		reqHeaders.Set("If-None-Match", c.ifNoneMatch_)
 	}
@@ -40135,7 +39982,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	if c.ifNoneMatch_ != "" {
 		reqHeaders.Set("If-None-Match", c.ifNoneMatch_)
 	}
@@ -40276,7 +40122,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	if c.ifNoneMatch_ != "" {
 		reqHeaders.Set("If-None-Match", c.ifNoneMatch_)
 	}
@@ -40496,7 +40341,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	if c.ifNoneMatch_ != "" {
 		reqHeaders.Set("If-None-Match", c.ifNoneMatch_)
 	}
@@ -40712,7 +40556,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	if c.ifNoneMatch_ != "" {
 		reqHeaders.Set("If-None-Match", c.ifNoneMatch_)
 	}
@@ -40853,7 +40696,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	if c.ifNoneMatch_ != "" {
 		reqHeaders.Set("If-None-Match", c.ifNoneMatch_)
 	}
@@ -40994,7 +40836,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	var body io.Reader = nil
 	body, err := googleapi.WithoutDataWrapper.JSONReader(c.remarketinglistshare)
 	if err != nil {
@@ -41137,7 +40978,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	var body io.Reader = nil
 	body, err := googleapi.WithoutDataWrapper.JSONReader(c.remarketinglistshare)
 	if err != nil {
@@ -41283,7 +41123,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	if c.ifNoneMatch_ != "" {
 		reqHeaders.Set("If-None-Match", c.ifNoneMatch_)
 	}
@@ -41422,7 +41261,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	var body io.Reader = nil
 	body, err := googleapi.WithoutDataWrapper.JSONReader(c.remarketinglist)
 	if err != nil {
@@ -41632,7 +41470,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	if c.ifNoneMatch_ != "" {
 		reqHeaders.Set("If-None-Match", c.ifNoneMatch_)
 	}
@@ -41846,7 +41683,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	var body io.Reader = nil
 	body, err := googleapi.WithoutDataWrapper.JSONReader(c.remarketinglist)
 	if err != nil {
@@ -41989,7 +41825,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	var body io.Reader = nil
 	body, err := googleapi.WithoutDataWrapper.JSONReader(c.remarketinglist)
 	if err != nil {
@@ -42124,7 +41959,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	var body io.Reader = nil
 	c.urlParams_.Set("alt", alt)
 	urls := googleapi.ResolveRelative(c.s.BasePath, "userprofiles/{profileId}/reports/{reportId}")
@@ -42243,7 +42077,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	if c.ifNoneMatch_ != "" {
 		reqHeaders.Set("If-None-Match", c.ifNoneMatch_)
 	}
@@ -42382,7 +42215,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	var body io.Reader = nil
 	body, err := googleapi.WithoutDataWrapper.JSONReader(c.report)
 	if err != nil {
@@ -42574,7 +42406,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	if c.ifNoneMatch_ != "" {
 		reqHeaders.Set("If-None-Match", c.ifNoneMatch_)
 	}
@@ -42784,7 +42615,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	var body io.Reader = nil
 	body, err := googleapi.WithoutDataWrapper.JSONReader(c.report)
 	if err != nil {
@@ -42935,7 +42765,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	var body io.Reader = nil
 	c.urlParams_.Set("alt", alt)
 	urls := googleapi.ResolveRelative(c.s.BasePath, "userprofiles/{profileId}/reports/{reportId}/run")
@@ -43078,7 +42907,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	var body io.Reader = nil
 	body, err := googleapi.WithoutDataWrapper.JSONReader(c.report)
 	if err != nil {
@@ -43224,7 +43052,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	var body io.Reader = nil
 	body, err := googleapi.WithoutDataWrapper.JSONReader(c.report)
 	if err != nil {
@@ -43372,7 +43199,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	if c.ifNoneMatch_ != "" {
 		reqHeaders.Set("If-None-Match", c.ifNoneMatch_)
 	}
@@ -43584,7 +43410,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	if c.ifNoneMatch_ != "" {
 		reqHeaders.Set("If-None-Match", c.ifNoneMatch_)
 	}
@@ -43796,7 +43621,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	if c.ifNoneMatch_ != "" {
 		reqHeaders.Set("If-None-Match", c.ifNoneMatch_)
 	}
@@ -43935,7 +43759,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	var body io.Reader = nil
 	body, err := googleapi.WithoutDataWrapper.JSONReader(c.site)
 	if err != nil {
@@ -44213,7 +44036,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	if c.ifNoneMatch_ != "" {
 		reqHeaders.Set("If-None-Match", c.ifNoneMatch_)
 	}
@@ -44465,7 +44287,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	var body io.Reader = nil
 	body, err := googleapi.WithoutDataWrapper.JSONReader(c.site)
 	if err != nil {
@@ -44608,7 +44429,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	var body io.Reader = nil
 	body, err := googleapi.WithoutDataWrapper.JSONReader(c.site)
 	if err != nil {
@@ -44754,7 +44574,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	if c.ifNoneMatch_ != "" {
 		reqHeaders.Set("If-None-Match", c.ifNoneMatch_)
 	}
@@ -44893,7 +44712,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	var body io.Reader = nil
 	body, err := googleapi.WithoutDataWrapper.JSONReader(c.size)
 	if err != nil {
@@ -45069,7 +44887,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	if c.ifNoneMatch_ != "" {
 		reqHeaders.Set("If-None-Match", c.ifNoneMatch_)
 	}
@@ -45234,7 +45051,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	if c.ifNoneMatch_ != "" {
 		reqHeaders.Set("If-None-Match", c.ifNoneMatch_)
 	}
@@ -45373,7 +45189,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	var body io.Reader = nil
 	body, err := googleapi.WithoutDataWrapper.JSONReader(c.subaccount)
 	if err != nil {
@@ -45578,7 +45393,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	if c.ifNoneMatch_ != "" {
 		reqHeaders.Set("If-None-Match", c.ifNoneMatch_)
 	}
@@ -45780,7 +45594,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	var body io.Reader = nil
 	body, err := googleapi.WithoutDataWrapper.JSONReader(c.subaccount)
 	if err != nil {
@@ -45923,7 +45736,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	var body io.Reader = nil
 	body, err := googleapi.WithoutDataWrapper.JSONReader(c.subaccount)
 	if err != nil {
@@ -46069,7 +45881,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	if c.ifNoneMatch_ != "" {
 		reqHeaders.Set("If-None-Match", c.ifNoneMatch_)
 	}
@@ -46275,7 +46086,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	if c.ifNoneMatch_ != "" {
 		reqHeaders.Set("If-None-Match", c.ifNoneMatch_)
 	}
@@ -46493,7 +46303,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	if c.ifNoneMatch_ != "" {
 		reqHeaders.Set("If-None-Match", c.ifNoneMatch_)
 	}
@@ -46632,7 +46441,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	var body io.Reader = nil
 	body, err := googleapi.WithoutDataWrapper.JSONReader(c.targetingtemplate)
 	if err != nil {
@@ -46844,7 +46652,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	if c.ifNoneMatch_ != "" {
 		reqHeaders.Set("If-None-Match", c.ifNoneMatch_)
 	}
@@ -47052,7 +46859,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	var body io.Reader = nil
 	body, err := googleapi.WithoutDataWrapper.JSONReader(c.targetingtemplate)
 	if err != nil {
@@ -47195,7 +47001,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	var body io.Reader = nil
 	body, err := googleapi.WithoutDataWrapper.JSONReader(c.targetingtemplate)
 	if err != nil {
@@ -47339,7 +47144,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	if c.ifNoneMatch_ != "" {
 		reqHeaders.Set("If-None-Match", c.ifNoneMatch_)
 	}
@@ -47477,7 +47281,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	if c.ifNoneMatch_ != "" {
 		reqHeaders.Set("If-None-Match", c.ifNoneMatch_)
 	}
@@ -47604,7 +47407,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	if c.ifNoneMatch_ != "" {
 		reqHeaders.Set("If-None-Match", c.ifNoneMatch_)
 	}
@@ -47752,7 +47554,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	if c.ifNoneMatch_ != "" {
 		reqHeaders.Set("If-None-Match", c.ifNoneMatch_)
 	}
@@ -47894,7 +47695,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	if c.ifNoneMatch_ != "" {
 		reqHeaders.Set("If-None-Match", c.ifNoneMatch_)
 	}
@@ -48053,7 +47853,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	if c.ifNoneMatch_ != "" {
 		reqHeaders.Set("If-None-Match", c.ifNoneMatch_)
 	}
@@ -48190,7 +47989,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	var body io.Reader = nil
 	c.urlParams_.Set("alt", alt)
 	urls := googleapi.ResolveRelative(c.s.BasePath, "userprofiles/{profileId}/userRoles/{id}")
@@ -48309,7 +48107,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	if c.ifNoneMatch_ != "" {
 		reqHeaders.Set("If-None-Match", c.ifNoneMatch_)
 	}
@@ -48448,7 +48245,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	var body io.Reader = nil
 	body, err := googleapi.WithoutDataWrapper.JSONReader(c.userrole)
 	if err != nil {
@@ -48668,7 +48464,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	if c.ifNoneMatch_ != "" {
 		reqHeaders.Set("If-None-Match", c.ifNoneMatch_)
 	}
@@ -48881,7 +48676,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	var body io.Reader = nil
 	body, err := googleapi.WithoutDataWrapper.JSONReader(c.userrole)
 	if err != nil {
@@ -49024,7 +48818,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	var body io.Reader = nil
 	body, err := googleapi.WithoutDataWrapper.JSONReader(c.userrole)
 	if err != nil {
diff --git a/discovery/v1/discovery-gen.go b/discovery/v1/discovery-gen.go
index ae63aff..9192e275 100644
--- a/discovery/v1/discovery-gen.go
+++ b/discovery/v1/discovery-gen.go
@@ -55,10 +55,9 @@
 }
 
 type Service struct {
-	client                    *http.Client
-	BasePath                  string // API endpoint base URL
-	UserAgent                 string // optional additional User-Agent fragment
-	GoogleClientHeaderElement string // client header fragment, for Google use only
+	client    *http.Client
+	BasePath  string // API endpoint base URL
+	UserAgent string // optional additional User-Agent fragment
 
 	Apis *ApisService
 }
@@ -70,10 +69,6 @@
 	return googleapi.UserAgent + " " + s.UserAgent
 }
 
-func (s *Service) clientHeader() string {
-	return gensupport.GoogleClientHeader("20170210", s.GoogleClientHeaderElement)
-}
-
 func NewApisService(s *Service) *ApisService {
 	rs := &ApisService{s: s}
 	return rs
@@ -1010,7 +1005,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	if c.ifNoneMatch_ != "" {
 		reqHeaders.Set("If-None-Match", c.ifNoneMatch_)
 	}
@@ -1165,7 +1159,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	if c.ifNoneMatch_ != "" {
 		reqHeaders.Set("If-None-Match", c.ifNoneMatch_)
 	}
diff --git a/dlp/v2beta1/dlp-api.json b/dlp/v2beta1/dlp-api.json
new file mode 100644
index 0000000..0206371
--- /dev/null
+++ b/dlp/v2beta1/dlp-api.json
@@ -0,0 +1,1101 @@
+{
+  "servicePath": "",
+  "kind": "discovery#restDescription",
+  "description": "The Google Data Loss Prevention API provides methods for detection of privacy-sensitive fragments in text, images, and Google Cloud Platform storage repositories.",
+  "basePath": "",
+  "id": "dlp:v2beta1",
+  "revision": "20170321",
+  "documentationLink": "https://cloud.google.com/dlp/docs/",
+  "discoveryVersion": "v1",
+  "version_module": "True",
+  "schemas": {
+    "Empty": {
+      "properties": {},
+      "id": "Empty",
+      "description": "A generic empty message that you can re-use to avoid defining duplicated\nempty messages in your APIs. A typical example is to use it as the request\nor the response type of an API method. For instance:\n\n    service Foo {\n      rpc Bar(google.protobuf.Empty) returns (google.protobuf.Empty);\n    }\n\nThe JSON representation for `Empty` is empty JSON object `{}`.",
+      "type": "object"
+    },
+    "ListRootCategoriesResponse": {
+      "description": "Response for ListRootCategories request.",
+      "type": "object",
+      "properties": {
+        "categories": {
+          "description": "List of all into type categories supported by the API.",
+          "type": "array",
+          "items": {
+            "$ref": "CategoryDescription"
+          }
+        }
+      },
+      "id": "ListRootCategoriesResponse"
+    },
+    "DatastoreKey": {
+      "properties": {
+        "entityKey": {
+          "$ref": "Key",
+          "description": "Datastore entity key."
+        }
+      },
+      "id": "DatastoreKey",
+      "description": "Record key for a finding in Cloud Datastore.",
+      "type": "object"
+    },
+    "Location": {
+      "description": "Specifies the location of a finding within its source item.",
+      "type": "object",
+      "properties": {
+        "recordKey": {
+          "$ref": "RecordKey",
+          "description": "Key of the finding."
+        },
+        "codepointRange": {
+          "description": "Character offsets within a content item, included when content type\nis a text. Default charset assumed to be UTF-8.",
+          "$ref": "Range"
+        },
+        "fieldId": {
+          "$ref": "FieldId",
+          "description": "Field id of the field containing the finding."
+        },
+        "imageBoxes": {
+          "description": "Location within an image's pixels.",
+          "type": "array",
+          "items": {
+            "$ref": "ImageLocation"
+          }
+        },
+        "byteRange": {
+          "$ref": "Range",
+          "description": "Zero-based byte offsets within a content item."
+        }
+      },
+      "id": "Location"
+    },
+    "ListInspectFindingsResponse": {
+      "properties": {
+        "nextPageToken": {
+          "description": "If not empty, indicates that there may be more results that match the\nrequest; this value should be passed in a new `ListInspectFindingsRequest`.",
+          "type": "string"
+        },
+        "result": {
+          "description": "The results.",
+          "$ref": "InspectResult"
+        }
+      },
+      "id": "ListInspectFindingsResponse",
+      "description": "Response to the ListInspectFindings request.",
+      "type": "object"
+    },
+    "RecordKey": {
+      "properties": {
+        "cloudStorageKey": {
+          "$ref": "CloudStorageKey"
+        },
+        "datastoreKey": {
+          "$ref": "DatastoreKey"
+        }
+      },
+      "id": "RecordKey",
+      "description": "Message for a unique key indicating a record that contains a finding.",
+      "type": "object"
+    },
+    "Finding": {
+      "description": "Container structure describing a single finding within a string or image.",
+      "type": "object",
+      "properties": {
+        "infoType": {
+          "description": "The specific type of info the string might be.",
+          "$ref": "InfoType"
+        },
+        "createTime": {
+          "description": "Timestamp when finding was detected.",
+          "format": "google-datetime",
+          "type": "string"
+        },
+        "quote": {
+          "description": "The specific string that may be potentially sensitive info.",
+          "type": "string"
+        },
+        "location": {
+          "description": "Location of the info found.",
+          "$ref": "Location"
+        },
+        "likelihood": {
+          "enum": [
+            "LIKELIHOOD_UNSPECIFIED",
+            "VERY_UNLIKELY",
+            "UNLIKELY",
+            "POSSIBLE",
+            "LIKELY",
+            "VERY_LIKELY"
+          ],
+          "description": "Estimate of how likely it is that the info_type is correct.",
+          "type": "string",
+          "enumDescriptions": [
+            "Default value; information with all likelihoods will be included.",
+            "Few matching elements.",
+            "",
+            "Some matching elements.",
+            "",
+            "Many matching elements."
+          ]
+        }
+      },
+      "id": "Finding"
+    },
+    "ContentItem": {
+      "properties": {
+        "value": {
+          "description": "String data to inspect or redact.",
+          "type": "string"
+        },
+        "data": {
+          "description": "Content data to inspect or redact.",
+          "format": "byte",
+          "type": "string"
+        },
+        "type": {
+          "description": "Type of the content, as defined in Content-Type HTTP header.\nSupported types are: all \"text\" types, octet streams, PNG images,\nJPEG images.",
+          "type": "string"
+        }
+      },
+      "id": "ContentItem",
+      "description": "Container structure for the content to inspect.",
+      "type": "object"
+    },
+    "InspectContentResponse": {
+      "properties": {
+        "results": {
+          "description": "Each content_item from the request will have a result in this list, in the\nsame order as the request.",
+          "type": "array",
+          "items": {
+            "$ref": "InspectResult"
+          }
+        }
+      },
+      "id": "InspectContentResponse",
+      "description": "Results of inspecting a list of items.",
+      "type": "object"
+    },
+    "CreateInspectOperationRequest": {
+      "properties": {
+        "inspectConfig": {
+          "description": "Configuration for the inspector.",
+          "$ref": "InspectConfig"
+        },
+        "storageConfig": {
+          "$ref": "StorageConfig",
+          "description": "Specification of the data set to process."
+        }
+      },
+      "id": "CreateInspectOperationRequest",
+      "description": "Request for scheduling a scan of a data subset from a Google Platform data\nrepository.",
+      "type": "object"
+    },
+    "FileSet": {
+      "description": "Set of files to scan.",
+      "type": "object",
+      "properties": {
+        "url": {
+          "description": "The url, in the format gs://\u003cbucket\u003e/\u003cpath\u003e. Trailing wildcard in the\npath is allowed.",
+          "type": "string"
+        }
+      },
+      "id": "FileSet"
+    },
+    "ReplaceConfig": {
+      "type": "object",
+      "properties": {
+        "infoType": {
+          "description": "Type of information to replace. Only one ReplaceConfig per info_type\nshould be provided. If ReplaceConfig does not have an info_type, we'll\nmatch it against all info_types that are found but not specified in\nanother ReplaceConfig.",
+          "$ref": "InfoType"
+        },
+        "replaceWith": {
+          "description": "Content replacing sensitive information of given type. Max 256 chars.",
+          "type": "string"
+        }
+      },
+      "id": "ReplaceConfig"
+    },
+    "InfoType": {
+      "properties": {
+        "name": {
+          "description": "Name of the information type, provided by the API call ListInfoTypes.",
+          "type": "string"
+        }
+      },
+      "id": "InfoType",
+      "description": "Type of information detected by the API.",
+      "type": "object"
+    },
+    "InspectConfig": {
+      "properties": {
+        "maxFindings": {
+          "description": "Limit the number of findings per content item.",
+          "format": "int32",
+          "type": "integer"
+        },
+        "infoTypes": {
+          "description": "Restrict what info_types to look for. The values must correspond to\nInfoType values returned by ListInfoTypes or found in documentation.\nEmpty info_types runs all enabled detectors.",
+          "type": "array",
+          "items": {
+            "$ref": "InfoType"
+          }
+        },
+        "excludeTypes": {
+          "description": "When true, exclude type information of the findings.",
+          "type": "boolean"
+        },
+        "includeQuote": {
+          "description": "When true, a contextual quote from the data that triggered a finding will\nbe included in the response; see Finding.quote.",
+          "type": "boolean"
+        },
+        "minLikelihood": {
+          "enumDescriptions": [
+            "Default value; information with all likelihoods will be included.",
+            "Few matching elements.",
+            "",
+            "Some matching elements.",
+            "",
+            "Many matching elements."
+          ],
+          "enum": [
+            "LIKELIHOOD_UNSPECIFIED",
+            "VERY_UNLIKELY",
+            "UNLIKELY",
+            "POSSIBLE",
+            "LIKELY",
+            "VERY_LIKELY"
+          ],
+          "description": "Only return findings equal or above this threshold.",
+          "type": "string"
+        }
+      },
+      "id": "InspectConfig",
+      "description": "Configuration description of the scanning process.\nWhen used with redactContent only info_types and min_likelihood are currently\nused.",
+      "type": "object"
+    },
+    "StorageConfig": {
+      "description": "Shared message indicating Cloud storage type.",
+      "type": "object",
+      "properties": {
+        "cloudStorageOptions": {
+          "description": "Google Cloud Storage options specification.",
+          "$ref": "CloudStorageOptions"
+        },
+        "datastoreOptions": {
+          "description": "Google Cloud Datastore options specification.",
+          "$ref": "DatastoreOptions"
+        }
+      },
+      "id": "StorageConfig"
+    },
+    "RedactContentRequest": {
+      "properties": {
+        "replaceConfigs": {
+          "description": "The strings to replace findings with. Must specify at least one.",
+          "type": "array",
+          "items": {
+            "$ref": "ReplaceConfig"
+          }
+        },
+        "inspectConfig": {
+          "$ref": "InspectConfig",
+          "description": "Configuration for the inspector."
+        },
+        "items": {
+          "description": "The list of items to inspect. Up to 100 are allowed per request.",
+          "type": "array",
+          "items": {
+            "$ref": "ContentItem"
+          }
+        }
+      },
+      "id": "RedactContentRequest",
+      "description": "Request to search for potentially sensitive info in a list of items\nand replace it with a default or provided content.",
+      "type": "object"
+    },
+    "PartitionId": {
+      "properties": {
+        "databaseId": {
+          "description": "If not empty, the ID of the database to which the entities\nbelong.",
+          "type": "string"
+        },
+        "namespaceId": {
+          "description": "If not empty, the ID of the namespace to which the entities belong.",
+          "type": "string"
+        },
+        "projectId": {
+          "description": "The ID of the project to which the entities belong.",
+          "type": "string"
+        }
+      },
+      "id": "PartitionId",
+      "description": "Datastore partition ID.\nA partition ID identifies a grouping of entities. The grouping is always\nby project and namespace, however the namespace ID may be empty.\n\nA partition ID contains several dimensions:\nproject ID and namespace ID.",
+      "type": "object"
+    },
+    "CategoryDescription": {
+      "description": "Info Type Category description.",
+      "type": "object",
+      "properties": {
+        "name": {
+          "description": "Internal name of the category.",
+          "type": "string"
+        },
+        "displayName": {
+          "description": "Human readable form of the category name.",
+          "type": "string"
+        }
+      },
+      "id": "CategoryDescription"
+    },
+    "CancelOperationRequest": {
+      "description": "The request message for Operations.CancelOperation.",
+      "type": "object",
+      "properties": {},
+      "id": "CancelOperationRequest"
+    },
+    "Operation": {
+      "properties": {
+        "done": {
+          "description": "If the value is `false`, it means the operation is still in progress.\nIf true, the operation is completed, and either `error` or `response` is\navailable.",
+          "type": "boolean"
+        },
+        "response": {
+          "additionalProperties": {
+            "description": "Properties of the object. Contains field @type with type URL.",
+            "type": "any"
+          },
+          "description": "This field will contain an `InspectOperationResult` object.",
+          "type": "object"
+        },
+        "name": {
+          "description": "The server-assigned name, The `name` should have the format of `inspect/operations/\u003cidentifier\u003e`.",
+          "type": "string"
+        },
+        "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": "This field will contain an `InspectOperationMetdata` object.",
+          "type": "object"
+        }
+      },
+      "id": "Operation",
+      "description": "This resource represents a long-running operation that is the result of a\nnetwork API call.",
+      "type": "object"
+    },
+    "CloudStorageOptions": {
+      "description": "Options defining a file or a set of files (path ending with *) within\na Google Cloud Storage bucket.",
+      "type": "object",
+      "properties": {
+        "fileSet": {
+          "$ref": "FileSet"
+        }
+      },
+      "id": "CloudStorageOptions"
+    },
+    "PathElement": {
+      "properties": {
+        "id": {
+          "description": "The auto-allocated ID of the entity.\nNever equal to zero. Values less than zero are discouraged and may not\nbe supported in the future.",
+          "format": "int64",
+          "type": "string"
+        },
+        "name": {
+          "description": "The name of the entity.\nA name matching regex `__.*__` is reserved/read-only.\nA name must not be more than 1500 bytes when UTF-8 encoded.\nCannot be `\"\"`.",
+          "type": "string"
+        },
+        "kind": {
+          "description": "The kind of the entity.\nA kind matching regex `__.*__` is reserved/read-only.\nA kind must not contain more than 1500 bytes when UTF-8 encoded.\nCannot be `\"\"`.",
+          "type": "string"
+        }
+      },
+      "id": "PathElement",
+      "description": "A (kind, ID/name) pair used to construct a key path.\n\nIf either name or ID is set, the element is complete.\nIf neither is set, the element is incomplete.",
+      "type": "object"
+    },
+    "InspectResult": {
+      "properties": {
+        "findingsTruncated": {
+          "description": "If true, then this item might have more findings than were returned,\nand the findings returned are an arbitrary subset of all findings.\nThe findings list might be truncated because the input items were too\nlarge, or because the server reached the maximum amount of resources\nallowed for a single API call. For best results, divide the input into\nsmaller batches.",
+          "type": "boolean"
+        },
+        "findings": {
+          "description": "List of findings for an item.",
+          "type": "array",
+          "items": {
+            "$ref": "Finding"
+          }
+        }
+      },
+      "id": "InspectResult",
+      "description": "All the findings for a single scanned item.",
+      "type": "object"
+    },
+    "Status": {
+      "properties": {
+        "message": {
+          "description": "A developer-facing error message, which should be in English. Any\nuser-facing error message should be localized and sent in the\ngoogle.rpc.Status.details field, or localized by the client.",
+          "type": "string"
+        },
+        "details": {
+          "description": "A list of messages that carry the error details.  There will be a\ncommon 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"
+            },
+            "type": "object"
+          }
+        },
+        "code": {
+          "description": "The status code, which should be an enum value of google.rpc.Code.",
+          "format": "int32",
+          "type": "integer"
+        }
+      },
+      "id": "Status",
+      "description": "The `Status` type defines a logical error model that is suitable for different\nprogramming environments, including REST APIs and RPC APIs. It is used by\n[gRPC](https://github.com/grpc). The error model is designed to be:\n\n- Simple to use and understand for most users\n- Flexible enough to meet unexpected needs\n\n# Overview\n\nThe `Status` message contains three pieces of data: error code, error message,\nand error details. The error code should be an enum value of\ngoogle.rpc.Code, but it may accept additional error codes if needed.  The\nerror message should be a developer-facing English message that helps\ndevelopers *understand* and *resolve* the error. If a localized user-facing\nerror message is needed, put the localized message in the error details or\nlocalize it in the client. The optional error details may contain arbitrary\ninformation about the error. There is a predefined set of error detail types\nin the package `google.rpc` which can be used for common error conditions.\n\n# Language mapping\n\nThe `Status` message is the logical representation of the error model, but it\nis not necessarily the actual wire format. When the `Status` message is\nexposed in different client libraries and different wire protocols, it can be\nmapped differently. For example, it will likely be mapped to some exceptions\nin Java, but more likely mapped to some error codes in C.\n\n# Other uses\n\nThe error model and the `Status` message can be used in a variety of\nenvironments, either with or without APIs, to provide a\nconsistent developer experience across different environments.\n\nExample uses of this error model include:\n\n- Partial errors. If a service needs to return partial errors to the client,\n    it may embed the `Status` in the normal response to indicate the partial\n    errors.\n\n- Workflow errors. A typical workflow has multiple steps. Each step may\n    have a `Status` message for error reporting purpose.\n\n- Batch operations. If a client uses batch request and batch response, the\n    `Status` message should be used directly inside batch response, one for\n    each error sub-response.\n\n- Asynchronous operations. If an API call embeds asynchronous operation\n    results in its response, the status of those operations should be\n    represented directly using the `Status` message.\n\n- Logging. If some API errors are stored in logs, the message `Status` could\n    be used directly after any stripping needed for security/privacy reasons.",
+      "type": "object"
+    },
+    "RedactContentResponse": {
+      "properties": {
+        "items": {
+          "description": "The redacted content.",
+          "type": "array",
+          "items": {
+            "$ref": "ContentItem"
+          }
+        }
+      },
+      "id": "RedactContentResponse",
+      "description": "Results of deidentifying a list of items.",
+      "type": "object"
+    },
+    "Range": {
+      "properties": {
+        "start": {
+          "description": "Index of the first character of the range (inclusive).",
+          "format": "int64",
+          "type": "string"
+        },
+        "end": {
+          "description": "Index of the last character of the range (exclusive).",
+          "format": "int64",
+          "type": "string"
+        }
+      },
+      "id": "Range",
+      "description": "Generic half-open interval [start, end)",
+      "type": "object"
+    },
+    "FieldId": {
+      "description": "General identifier of a data field in a storage service.",
+      "type": "object",
+      "properties": {
+        "columnName": {
+          "description": "Column name describing the field.",
+          "type": "string"
+        }
+      },
+      "id": "FieldId"
+    },
+    "KindExpression": {
+      "description": "A representation of a Datastore kind.",
+      "type": "object",
+      "properties": {
+        "name": {
+          "description": "The name of the kind.",
+          "type": "string"
+        }
+      },
+      "id": "KindExpression"
+    },
+    "ListInfoTypesResponse": {
+      "properties": {
+        "infoTypes": {
+          "description": "Set of sensitive info types belonging to a category.",
+          "type": "array",
+          "items": {
+            "$ref": "InfoTypeDescription"
+          }
+        }
+      },
+      "id": "ListInfoTypesResponse",
+      "description": "Response to the ListInfoTypes request.",
+      "type": "object"
+    },
+    "Key": {
+      "properties": {
+        "path": {
+          "description": "The entity path.\nAn entity path consists of one or more elements composed of a kind and a\nstring or numerical identifier, which identify entities. The first\nelement identifies a _root entity_, the second element identifies\na _child_ of the root entity, the third element identifies a child of the\nsecond entity, and so forth. The entities identified by all prefixes of\nthe path are called the element's _ancestors_.\n\nA path can never be empty, and a path can have at most 100 elements.",
+          "type": "array",
+          "items": {
+            "$ref": "PathElement"
+          }
+        },
+        "partitionId": {
+          "$ref": "PartitionId",
+          "description": "Entities are partitioned into subsets, currently identified by a project\nID and namespace ID.\nQueries are scoped to a single partition."
+        }
+      },
+      "id": "Key",
+      "description": "A unique identifier for a Datastore entity.\nIf a key's partition ID or any of its path kinds or names are\nreserved/read-only, the key is reserved/read-only.\nA reserved/read-only key is forbidden in certain documented contexts.",
+      "type": "object"
+    },
+    "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.",
+          "type": "array",
+          "items": {
+            "$ref": "Operation"
+          }
+        }
+      },
+      "id": "ListOperationsResponse",
+      "description": "The response message for Operations.ListOperations.",
+      "type": "object"
+    },
+    "InspectContentRequest": {
+      "properties": {
+        "items": {
+          "description": "The list of items to inspect. Items in a single request are\nconsidered \"related\" unless inspect_config.independent_inputs is true.\nUp to 100 are allowed per request.",
+          "type": "array",
+          "items": {
+            "$ref": "ContentItem"
+          }
+        },
+        "inspectConfig": {
+          "$ref": "InspectConfig",
+          "description": "Configuration for the inspector."
+        }
+      },
+      "id": "InspectContentRequest",
+      "description": "Request to search for potentially sensitive info in a list of items.",
+      "type": "object"
+    },
+    "PropertyReference": {
+      "properties": {
+        "name": {
+          "description": "The name of the property.\nIf name includes \".\"s, it may be interpreted as a property name path.",
+          "type": "string"
+        }
+      },
+      "id": "PropertyReference",
+      "description": "A reference to a property relative to the Datastore kind expressions.",
+      "type": "object"
+    },
+    "Projection": {
+      "properties": {
+        "property": {
+          "description": "The property to project.",
+          "$ref": "PropertyReference"
+        }
+      },
+      "id": "Projection",
+      "description": "A representation of a Datastore property in a projection.",
+      "type": "object"
+    },
+    "InfoTypeDescription": {
+      "description": "Info type description.",
+      "type": "object",
+      "properties": {
+        "name": {
+          "description": "Internal name of the info type.",
+          "type": "string"
+        },
+        "displayName": {
+          "description": "Human readable form of the info type name.",
+          "type": "string"
+        },
+        "categories": {
+          "description": "List of categories this info type belongs to.",
+          "type": "array",
+          "items": {
+            "$ref": "CategoryDescription"
+          }
+        }
+      },
+      "id": "InfoTypeDescription"
+    },
+    "ImageLocation": {
+      "description": "Bounding box encompassing detected text within an image.",
+      "type": "object",
+      "properties": {
+        "width": {
+          "description": "Width of the bounding box in pixels.",
+          "format": "int32",
+          "type": "integer"
+        },
+        "height": {
+          "description": "Height of the bounding box in pixels.",
+          "format": "int32",
+          "type": "integer"
+        },
+        "top": {
+          "description": "Top coordinate of the bounding box. (0,0) is upper left.",
+          "format": "int32",
+          "type": "integer"
+        },
+        "left": {
+          "description": "Left coordinate of the bounding box. (0,0) is upper left.",
+          "format": "int32",
+          "type": "integer"
+        }
+      },
+      "id": "ImageLocation"
+    },
+    "CloudStorageKey": {
+      "properties": {
+        "filePath": {
+          "description": "Path to the file.",
+          "type": "string"
+        },
+        "startOffset": {
+          "description": "Byte offset of the referenced data in the file.",
+          "format": "int64",
+          "type": "string"
+        }
+      },
+      "id": "CloudStorageKey",
+      "description": "Record key for a finding in a Cloud Storage file.",
+      "type": "object"
+    },
+    "DatastoreOptions": {
+      "properties": {
+        "partitionId": {
+          "description": "A partition ID identifies a grouping of entities. The grouping is always\nby project and namespace, however the namespace ID may be empty.",
+          "$ref": "PartitionId"
+        },
+        "kind": {
+          "$ref": "KindExpression",
+          "description": "The kind to process."
+        },
+        "projection": {
+          "description": "Properties to scan. If none are specified, all properties will be scanned\nby default.",
+          "type": "array",
+          "items": {
+            "$ref": "Projection"
+          }
+        }
+      },
+      "id": "DatastoreOptions",
+      "description": "Options defining a data set within Google Cloud Datastore.",
+      "type": "object"
+    }
+  },
+  "protocol": "rest",
+  "icons": {
+    "x16": "http://www.google.com/images/icons/product/search-16.gif",
+    "x32": "http://www.google.com/images/icons/product/search-32.gif"
+  },
+  "canonicalName": "DLP",
+  "auth": {
+    "oauth2": {
+      "scopes": {
+        "https://www.googleapis.com/auth/cloud-platform": {
+          "description": "View and manage your data across Google Cloud Platform services"
+        }
+      }
+    }
+  },
+  "rootUrl": "https://dlp.googleapis.com/",
+  "ownerDomain": "google.com",
+  "name": "dlp",
+  "batchPath": "batch",
+  "title": "DLP API",
+  "ownerName": "Google",
+  "resources": {
+    "inspect": {
+      "resources": {
+        "results": {
+          "resources": {
+            "findings": {
+              "methods": {
+                "list": {
+                  "path": "v2beta1/{+name}/findings",
+                  "id": "dlp.inspect.results.findings.list",
+                  "description": "Returns list of results for given inspect operation result set id.",
+                  "response": {
+                    "$ref": "ListInspectFindingsResponse"
+                  },
+                  "parameterOrder": [
+                    "name"
+                  ],
+                  "httpMethod": "GET",
+                  "parameters": {
+                    "name": {
+                      "description": "Identifier of the results set returned as metadata of\nthe longrunning operation created by a call to CreateInspectOperation.\nShould be in the format of `inspect/results/{id}.",
+                      "required": true,
+                      "type": "string",
+                      "pattern": "^inspect/results/[^/]+$",
+                      "location": "path"
+                    },
+                    "pageToken": {
+                      "description": "The value returned by the last `ListInspectFindingsResponse`; indicates\nthat this is a continuation of a prior `ListInspectFindings` call, and that\nthe system should return the next page of data.",
+                      "type": "string",
+                      "location": "query"
+                    },
+                    "pageSize": {
+                      "description": "Maximum number of results to return.\nIf 0, the implementation will select a reasonable value.",
+                      "format": "int32",
+                      "type": "integer",
+                      "location": "query"
+                    }
+                  },
+                  "scopes": [
+                    "https://www.googleapis.com/auth/cloud-platform"
+                  ],
+                  "flatPath": "v2beta1/inspect/results/{resultsId}/findings"
+                }
+              }
+            }
+          }
+        },
+        "operations": {
+          "methods": {
+            "create": {
+              "response": {
+                "$ref": "Operation"
+              },
+              "parameterOrder": [],
+              "httpMethod": "POST",
+              "scopes": [
+                "https://www.googleapis.com/auth/cloud-platform"
+              ],
+              "parameters": {},
+              "flatPath": "v2beta1/inspect/operations",
+              "path": "v2beta1/inspect/operations",
+              "id": "dlp.inspect.operations.create",
+              "description": "Schedule a job scanning content in a Google Cloud Platform data repository.",
+              "request": {
+                "$ref": "CreateInspectOperationRequest"
+              }
+            },
+            "cancel": {
+              "httpMethod": "POST",
+              "parameterOrder": [
+                "name"
+              ],
+              "response": {
+                "$ref": "Empty"
+              },
+              "scopes": [
+                "https://www.googleapis.com/auth/cloud-platform"
+              ],
+              "parameters": {
+                "name": {
+                  "description": "The name of the operation resource to be cancelled.",
+                  "required": true,
+                  "type": "string",
+                  "pattern": "^inspect/operations/[^/]+$",
+                  "location": "path"
+                }
+              },
+              "flatPath": "v2beta1/inspect/operations/{operationsId}:cancel",
+              "id": "dlp.inspect.operations.cancel",
+              "path": "v2beta1/{+name}:cancel",
+              "description": "Cancels an operation. Use the get method to check whether the cancellation succeeded or whether the operation completed despite cancellation.",
+              "request": {
+                "$ref": "CancelOperationRequest"
+              }
+            },
+            "delete": {
+              "httpMethod": "DELETE",
+              "response": {
+                "$ref": "Empty"
+              },
+              "parameterOrder": [
+                "name"
+              ],
+              "parameters": {
+                "name": {
+                  "description": "The name of the operation resource to be deleted.",
+                  "required": true,
+                  "type": "string",
+                  "pattern": "^inspect/operations/[^/]+$",
+                  "location": "path"
+                }
+              },
+              "scopes": [
+                "https://www.googleapis.com/auth/cloud-platform"
+              ],
+              "flatPath": "v2beta1/inspect/operations/{operationsId}",
+              "id": "dlp.inspect.operations.delete",
+              "path": "v2beta1/{+name}",
+              "description": "This method is not supported and the server returns `UNIMPLEMENTED`."
+            },
+            "list": {
+              "parameterOrder": [
+                "name"
+              ],
+              "httpMethod": "GET",
+              "response": {
+                "$ref": "ListOperationsResponse"
+              },
+              "scopes": [
+                "https://www.googleapis.com/auth/cloud-platform"
+              ],
+              "parameters": {
+                "filter": {
+                  "location": "query",
+                  "description": "This parameter supports filtering by done, ie done=true or done=false.",
+                  "type": "string"
+                },
+                "name": {
+                  "description": "The name of the operation collection.",
+                  "required": true,
+                  "type": "string",
+                  "pattern": "^inspect/operations$",
+                  "location": "path"
+                },
+                "pageToken": {
+                  "location": "query",
+                  "description": "The list page token.",
+                  "type": "string"
+                },
+                "pageSize": {
+                  "location": "query",
+                  "description": "The list page size. The max allowed value is 256 and default is 100.",
+                  "format": "int32",
+                  "type": "integer"
+                }
+              },
+              "flatPath": "v2beta1/inspect/operations",
+              "path": "v2beta1/{+name}",
+              "id": "dlp.inspect.operations.list",
+              "description": "Lists operations that match the specified filter in the request. If the\nserver doesn't support this method, it returns `UNIMPLEMENTED`.\n\nNOTE: the `name` binding below allows API services to override the binding\nto use different resource name schemes, such as `users/*/operations`."
+            },
+            "get": {
+              "id": "dlp.inspect.operations.get",
+              "path": "v2beta1/{+name}",
+              "description": "Gets the latest state of a long-running operation.  Clients can use this\nmethod to poll the operation result at intervals as recommended by the API\nservice.",
+              "httpMethod": "GET",
+              "response": {
+                "$ref": "Operation"
+              },
+              "parameterOrder": [
+                "name"
+              ],
+              "parameters": {
+                "name": {
+                  "pattern": "^inspect/operations/[^/]+$",
+                  "location": "path",
+                  "description": "The name of the operation resource.",
+                  "required": true,
+                  "type": "string"
+                }
+              },
+              "scopes": [
+                "https://www.googleapis.com/auth/cloud-platform"
+              ],
+              "flatPath": "v2beta1/inspect/operations/{operationsId}"
+            }
+          }
+        }
+      }
+    },
+    "content": {
+      "methods": {
+        "inspect": {
+          "httpMethod": "POST",
+          "parameterOrder": [],
+          "response": {
+            "$ref": "InspectContentResponse"
+          },
+          "parameters": {},
+          "scopes": [
+            "https://www.googleapis.com/auth/cloud-platform"
+          ],
+          "flatPath": "v2beta1/content:inspect",
+          "id": "dlp.content.inspect",
+          "path": "v2beta1/content:inspect",
+          "request": {
+            "$ref": "InspectContentRequest"
+          },
+          "description": "Find potentially sensitive info in a list of strings.\nThis method has limits on input size, processing time, and output size."
+        },
+        "redact": {
+          "description": "Redact potentially sensitive info from a list of strings.\nThis method has limits on input size, processing time, and output size.",
+          "request": {
+            "$ref": "RedactContentRequest"
+          },
+          "response": {
+            "$ref": "RedactContentResponse"
+          },
+          "parameterOrder": [],
+          "httpMethod": "POST",
+          "scopes": [
+            "https://www.googleapis.com/auth/cloud-platform"
+          ],
+          "parameters": {},
+          "flatPath": "v2beta1/content:redact",
+          "path": "v2beta1/content:redact",
+          "id": "dlp.content.redact"
+        }
+      }
+    },
+    "rootCategories": {
+      "resources": {
+        "infoTypes": {
+          "methods": {
+            "list": {
+              "response": {
+                "$ref": "ListInfoTypesResponse"
+              },
+              "parameterOrder": [
+                "category"
+              ],
+              "httpMethod": "GET",
+              "scopes": [
+                "https://www.googleapis.com/auth/cloud-platform"
+              ],
+              "parameters": {
+                "category": {
+                  "pattern": "^[^/]+$",
+                  "location": "path",
+                  "description": "Category name as returned by ListRootCategories.",
+                  "required": true,
+                  "type": "string"
+                },
+                "languageCode": {
+                  "description": "Optional BCP-47 language code for localized info type friendly\nnames. If omitted, or if localized strings are not available,\nen-US strings will be returned.",
+                  "type": "string",
+                  "location": "query"
+                }
+              },
+              "flatPath": "v2beta1/rootCategories/{rootCategoriesId}/infoTypes",
+              "path": "v2beta1/rootCategories/{+category}/infoTypes",
+              "id": "dlp.rootCategories.infoTypes.list",
+              "description": "Returns sensitive information types for given category."
+            }
+          }
+        }
+      },
+      "methods": {
+        "list": {
+          "description": "Returns the list of root categories of sensitive information.",
+          "parameterOrder": [],
+          "httpMethod": "GET",
+          "response": {
+            "$ref": "ListRootCategoriesResponse"
+          },
+          "scopes": [
+            "https://www.googleapis.com/auth/cloud-platform"
+          ],
+          "parameters": {
+            "languageCode": {
+              "description": "Optional language code for localized friendly category names.\nIf omitted or if localized strings are not available,\nen-US strings will be returned.",
+              "type": "string",
+              "location": "query"
+            }
+          },
+          "flatPath": "v2beta1/rootCategories",
+          "path": "v2beta1/rootCategories",
+          "id": "dlp.rootCategories.list"
+        }
+      }
+    }
+  },
+  "parameters": {
+    "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"
+    },
+    "access_token": {
+      "location": "query",
+      "description": "OAuth access token.",
+      "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"
+    },
+    "pp": {
+      "location": "query",
+      "description": "Pretty-print response.",
+      "type": "boolean",
+      "default": "true"
+    },
+    "bearer_token": {
+      "location": "query",
+      "description": "OAuth bearer token.",
+      "type": "string"
+    },
+    "oauth_token": {
+      "description": "OAuth 2.0 token for the current user.",
+      "type": "string",
+      "location": "query"
+    },
+    "upload_protocol": {
+      "location": "query",
+      "description": "Upload protocol for media (e.g. \"raw\", \"multipart\").",
+      "type": "string"
+    },
+    "prettyPrint": {
+      "location": "query",
+      "description": "Returns response with indentations and line breaks.",
+      "type": "boolean",
+      "default": "true"
+    },
+    "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.",
+      "type": "string",
+      "location": "query"
+    },
+    "callback": {
+      "location": "query",
+      "description": "JSONP",
+      "type": "string"
+    },
+    "$.xgafv": {
+      "enum": [
+        "1",
+        "2"
+      ],
+      "description": "V1 error format.",
+      "type": "string",
+      "enumDescriptions": [
+        "v1 error format",
+        "v2 error format"
+      ],
+      "location": "query"
+    },
+    "alt": {
+      "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",
+      "description": "Data format for response.",
+      "default": "json"
+    }
+  },
+  "version": "v2beta1",
+  "baseUrl": "https://dlp.googleapis.com/"
+}
diff --git a/dlp/v2beta1/dlp-gen.go b/dlp/v2beta1/dlp-gen.go
new file mode 100644
index 0000000..d973c7b
--- /dev/null
+++ b/dlp/v2beta1/dlp-gen.go
@@ -0,0 +1,3028 @@
+// Package dlp provides access to the DLP API.
+//
+// See https://cloud.google.com/dlp/docs/
+//
+// Usage example:
+//
+//   import "google.golang.org/api/dlp/v2beta1"
+//   ...
+//   dlpService, err := dlp.New(oauthHttpClient)
+package dlp // import "google.golang.org/api/dlp/v2beta1"
+
+import (
+	"bytes"
+	"encoding/json"
+	"errors"
+	"fmt"
+	context "golang.org/x/net/context"
+	ctxhttp "golang.org/x/net/context/ctxhttp"
+	gensupport "google.golang.org/api/gensupport"
+	googleapi "google.golang.org/api/googleapi"
+	"io"
+	"net/http"
+	"net/url"
+	"strconv"
+	"strings"
+)
+
+// Always reference these packages, just in case the auto-generated code
+// below doesn't.
+var _ = bytes.NewBuffer
+var _ = strconv.Itoa
+var _ = fmt.Sprintf
+var _ = json.NewDecoder
+var _ = io.Copy
+var _ = url.Parse
+var _ = gensupport.MarshalJSON
+var _ = googleapi.Version
+var _ = errors.New
+var _ = strings.Replace
+var _ = context.Canceled
+var _ = ctxhttp.Do
+
+const apiId = "dlp:v2beta1"
+const apiName = "dlp"
+const apiVersion = "v2beta1"
+const basePath = "https://dlp.googleapis.com/"
+
+// OAuth2 scopes used by this API.
+const (
+	// View and manage your data across Google Cloud Platform services
+	CloudPlatformScope = "https://www.googleapis.com/auth/cloud-platform"
+)
+
+func New(client *http.Client) (*Service, error) {
+	if client == nil {
+		return nil, errors.New("client is nil")
+	}
+	s := &Service{client: client, BasePath: basePath}
+	s.Content = NewContentService(s)
+	s.Inspect = NewInspectService(s)
+	s.RootCategories = NewRootCategoriesService(s)
+	return s, nil
+}
+
+type Service struct {
+	client    *http.Client
+	BasePath  string // API endpoint base URL
+	UserAgent string // optional additional User-Agent fragment
+
+	Content *ContentService
+
+	Inspect *InspectService
+
+	RootCategories *RootCategoriesService
+}
+
+func (s *Service) userAgent() string {
+	if s.UserAgent == "" {
+		return googleapi.UserAgent
+	}
+	return googleapi.UserAgent + " " + s.UserAgent
+}
+
+func NewContentService(s *Service) *ContentService {
+	rs := &ContentService{s: s}
+	return rs
+}
+
+type ContentService struct {
+	s *Service
+}
+
+func NewInspectService(s *Service) *InspectService {
+	rs := &InspectService{s: s}
+	rs.Operations = NewInspectOperationsService(s)
+	rs.Results = NewInspectResultsService(s)
+	return rs
+}
+
+type InspectService struct {
+	s *Service
+
+	Operations *InspectOperationsService
+
+	Results *InspectResultsService
+}
+
+func NewInspectOperationsService(s *Service) *InspectOperationsService {
+	rs := &InspectOperationsService{s: s}
+	return rs
+}
+
+type InspectOperationsService struct {
+	s *Service
+}
+
+func NewInspectResultsService(s *Service) *InspectResultsService {
+	rs := &InspectResultsService{s: s}
+	rs.Findings = NewInspectResultsFindingsService(s)
+	return rs
+}
+
+type InspectResultsService struct {
+	s *Service
+
+	Findings *InspectResultsFindingsService
+}
+
+func NewInspectResultsFindingsService(s *Service) *InspectResultsFindingsService {
+	rs := &InspectResultsFindingsService{s: s}
+	return rs
+}
+
+type InspectResultsFindingsService struct {
+	s *Service
+}
+
+func NewRootCategoriesService(s *Service) *RootCategoriesService {
+	rs := &RootCategoriesService{s: s}
+	rs.InfoTypes = NewRootCategoriesInfoTypesService(s)
+	return rs
+}
+
+type RootCategoriesService struct {
+	s *Service
+
+	InfoTypes *RootCategoriesInfoTypesService
+}
+
+func NewRootCategoriesInfoTypesService(s *Service) *RootCategoriesInfoTypesService {
+	rs := &RootCategoriesInfoTypesService{s: s}
+	return rs
+}
+
+type RootCategoriesInfoTypesService struct {
+	s *Service
+}
+
+// CancelOperationRequest: The request message for
+// Operations.CancelOperation.
+type CancelOperationRequest struct {
+}
+
+// CategoryDescription: Info Type Category description.
+type CategoryDescription struct {
+	// DisplayName: Human readable form of the category name.
+	DisplayName string `json:"displayName,omitempty"`
+
+	// Name: Internal name of the category.
+	Name string `json:"name,omitempty"`
+
+	// ForceSendFields is a list of field names (e.g. "DisplayName") to
+	// unconditionally include in API requests. By default, fields with
+	// empty values are omitted from API requests. However, any non-pointer,
+	// non-interface field appearing in ForceSendFields will be sent to the
+	// server regardless of whether the field is empty or not. This may be
+	// used to include empty fields in Patch requests.
+	ForceSendFields []string `json:"-"`
+
+	// NullFields is a list of field names (e.g. "DisplayName") to include
+	// in API requests with the JSON null value. By default, fields with
+	// empty values are omitted from API requests. However, any field with
+	// an empty value appearing in NullFields will be sent to the server as
+	// null. It is an error if a field in this list has a non-empty value.
+	// This may be used to include null fields in Patch requests.
+	NullFields []string `json:"-"`
+}
+
+func (s *CategoryDescription) MarshalJSON() ([]byte, error) {
+	type noMethod CategoryDescription
+	raw := noMethod(*s)
+	return gensupport.MarshalJSON(raw, s.ForceSendFields, s.NullFields)
+}
+
+// CloudStorageKey: Record key for a finding in a Cloud Storage file.
+type CloudStorageKey struct {
+	// FilePath: Path to the file.
+	FilePath string `json:"filePath,omitempty"`
+
+	// StartOffset: Byte offset of the referenced data in the file.
+	StartOffset int64 `json:"startOffset,omitempty,string"`
+
+	// ForceSendFields is a list of field names (e.g. "FilePath") to
+	// unconditionally include in API requests. By default, fields with
+	// empty values are omitted from API requests. However, any non-pointer,
+	// non-interface field appearing in ForceSendFields will be sent to the
+	// server regardless of whether the field is empty or not. This may be
+	// used to include empty fields in Patch requests.
+	ForceSendFields []string `json:"-"`
+
+	// NullFields is a list of field names (e.g. "FilePath") to include in
+	// API requests with the JSON null value. By default, fields with empty
+	// values are omitted from API requests. However, any field with an
+	// empty value appearing in NullFields will be sent to the server as
+	// null. It is an error if a field in this list has a non-empty value.
+	// This may be used to include null fields in Patch requests.
+	NullFields []string `json:"-"`
+}
+
+func (s *CloudStorageKey) MarshalJSON() ([]byte, error) {
+	type noMethod CloudStorageKey
+	raw := noMethod(*s)
+	return gensupport.MarshalJSON(raw, s.ForceSendFields, s.NullFields)
+}
+
+// CloudStorageOptions: Options defining a file or a set of files (path
+// ending with *) within
+// a Google Cloud Storage bucket.
+type CloudStorageOptions struct {
+	FileSet *FileSet `json:"fileSet,omitempty"`
+
+	// ForceSendFields is a list of field names (e.g. "FileSet") to
+	// unconditionally include in API requests. By default, fields with
+	// empty values are omitted from API requests. However, any non-pointer,
+	// non-interface field appearing in ForceSendFields will be sent to the
+	// server regardless of whether the field is empty or not. This may be
+	// used to include empty fields in Patch requests.
+	ForceSendFields []string `json:"-"`
+
+	// NullFields is a list of field names (e.g. "FileSet") to include in
+	// API requests with the JSON null value. By default, fields with empty
+	// values are omitted from API requests. However, any field with an
+	// empty value appearing in NullFields will be sent to the server as
+	// null. It is an error if a field in this list has a non-empty value.
+	// This may be used to include null fields in Patch requests.
+	NullFields []string `json:"-"`
+}
+
+func (s *CloudStorageOptions) MarshalJSON() ([]byte, error) {
+	type noMethod CloudStorageOptions
+	raw := noMethod(*s)
+	return gensupport.MarshalJSON(raw, s.ForceSendFields, s.NullFields)
+}
+
+// ContentItem: Container structure for the content to inspect.
+type ContentItem struct {
+	// Data: Content data to inspect or redact.
+	Data string `json:"data,omitempty"`
+
+	// Type: Type of the content, as defined in Content-Type HTTP
+	// header.
+	// Supported types are: all "text" types, octet streams, PNG
+	// images,
+	// JPEG images.
+	Type string `json:"type,omitempty"`
+
+	// Value: String data to inspect or redact.
+	Value string `json:"value,omitempty"`
+
+	// ForceSendFields is a list of field names (e.g. "Data") to
+	// unconditionally include in API requests. By default, fields with
+	// empty values are omitted from API requests. However, any non-pointer,
+	// non-interface field appearing in ForceSendFields will be sent to the
+	// server regardless of whether the field is empty or not. This may be
+	// used to include empty fields in Patch requests.
+	ForceSendFields []string `json:"-"`
+
+	// NullFields is a list of field names (e.g. "Data") to include in API
+	// requests with the JSON null value. By default, fields with empty
+	// values are omitted from API requests. However, any field with an
+	// empty value appearing in NullFields will be sent to the server as
+	// null. It is an error if a field in this list has a non-empty value.
+	// This may be used to include null fields in Patch requests.
+	NullFields []string `json:"-"`
+}
+
+func (s *ContentItem) MarshalJSON() ([]byte, error) {
+	type noMethod ContentItem
+	raw := noMethod(*s)
+	return gensupport.MarshalJSON(raw, s.ForceSendFields, s.NullFields)
+}
+
+// CreateInspectOperationRequest: Request for scheduling a scan of a
+// data subset from a Google Platform data
+// repository.
+type CreateInspectOperationRequest struct {
+	// InspectConfig: Configuration for the inspector.
+	InspectConfig *InspectConfig `json:"inspectConfig,omitempty"`
+
+	// StorageConfig: Specification of the data set to process.
+	StorageConfig *StorageConfig `json:"storageConfig,omitempty"`
+
+	// ForceSendFields is a list of field names (e.g. "InspectConfig") to
+	// unconditionally include in API requests. By default, fields with
+	// empty values are omitted from API requests. However, any non-pointer,
+	// non-interface field appearing in ForceSendFields will be sent to the
+	// server regardless of whether the field is empty or not. This may be
+	// used to include empty fields in Patch requests.
+	ForceSendFields []string `json:"-"`
+
+	// NullFields is a list of field names (e.g. "InspectConfig") to include
+	// in API requests with the JSON null value. By default, fields with
+	// empty values are omitted from API requests. However, any field with
+	// an empty value appearing in NullFields will be sent to the server as
+	// null. It is an error if a field in this list has a non-empty value.
+	// This may be used to include null fields in Patch requests.
+	NullFields []string `json:"-"`
+}
+
+func (s *CreateInspectOperationRequest) MarshalJSON() ([]byte, error) {
+	type noMethod CreateInspectOperationRequest
+	raw := noMethod(*s)
+	return gensupport.MarshalJSON(raw, s.ForceSendFields, s.NullFields)
+}
+
+// DatastoreKey: Record key for a finding in Cloud Datastore.
+type DatastoreKey struct {
+	// EntityKey: Datastore entity key.
+	EntityKey *Key `json:"entityKey,omitempty"`
+
+	// ForceSendFields is a list of field names (e.g. "EntityKey") to
+	// unconditionally include in API requests. By default, fields with
+	// empty values are omitted from API requests. However, any non-pointer,
+	// non-interface field appearing in ForceSendFields will be sent to the
+	// server regardless of whether the field is empty or not. This may be
+	// used to include empty fields in Patch requests.
+	ForceSendFields []string `json:"-"`
+
+	// NullFields is a list of field names (e.g. "EntityKey") to include in
+	// API requests with the JSON null value. By default, fields with empty
+	// values are omitted from API requests. However, any field with an
+	// empty value appearing in NullFields will be sent to the server as
+	// null. It is an error if a field in this list has a non-empty value.
+	// This may be used to include null fields in Patch requests.
+	NullFields []string `json:"-"`
+}
+
+func (s *DatastoreKey) MarshalJSON() ([]byte, error) {
+	type noMethod DatastoreKey
+	raw := noMethod(*s)
+	return gensupport.MarshalJSON(raw, s.ForceSendFields, s.NullFields)
+}
+
+// DatastoreOptions: Options defining a data set within Google Cloud
+// Datastore.
+type DatastoreOptions struct {
+	// Kind: The kind to process.
+	Kind *KindExpression `json:"kind,omitempty"`
+
+	// PartitionId: A partition ID identifies a grouping of entities. The
+	// grouping is always
+	// by project and namespace, however the namespace ID may be empty.
+	PartitionId *PartitionId `json:"partitionId,omitempty"`
+
+	// Projection: Properties to scan. If none are specified, all properties
+	// will be scanned
+	// by default.
+	Projection []*Projection `json:"projection,omitempty"`
+
+	// ForceSendFields is a list of field names (e.g. "Kind") to
+	// unconditionally include in API requests. By default, fields with
+	// empty values are omitted from API requests. However, any non-pointer,
+	// non-interface field appearing in ForceSendFields will be sent to the
+	// server regardless of whether the field is empty or not. This may be
+	// used to include empty fields in Patch requests.
+	ForceSendFields []string `json:"-"`
+
+	// NullFields is a list of field names (e.g. "Kind") to include in API
+	// requests with the JSON null value. By default, fields with empty
+	// values are omitted from API requests. However, any field with an
+	// empty value appearing in NullFields will be sent to the server as
+	// null. It is an error if a field in this list has a non-empty value.
+	// This may be used to include null fields in Patch requests.
+	NullFields []string `json:"-"`
+}
+
+func (s *DatastoreOptions) MarshalJSON() ([]byte, error) {
+	type noMethod DatastoreOptions
+	raw := noMethod(*s)
+	return gensupport.MarshalJSON(raw, s.ForceSendFields, s.NullFields)
+}
+
+// Empty: 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 Empty struct {
+	// ServerResponse contains the HTTP response code and headers from the
+	// server.
+	googleapi.ServerResponse `json:"-"`
+}
+
+// FieldId: General identifier of a data field in a storage service.
+type FieldId struct {
+	// ColumnName: Column name describing the field.
+	ColumnName string `json:"columnName,omitempty"`
+
+	// ForceSendFields is a list of field names (e.g. "ColumnName") to
+	// unconditionally include in API requests. By default, fields with
+	// empty values are omitted from API requests. However, any non-pointer,
+	// non-interface field appearing in ForceSendFields will be sent to the
+	// server regardless of whether the field is empty or not. This may be
+	// used to include empty fields in Patch requests.
+	ForceSendFields []string `json:"-"`
+
+	// NullFields is a list of field names (e.g. "ColumnName") to include in
+	// API requests with the JSON null value. By default, fields with empty
+	// values are omitted from API requests. However, any field with an
+	// empty value appearing in NullFields will be sent to the server as
+	// null. It is an error if a field in this list has a non-empty value.
+	// This may be used to include null fields in Patch requests.
+	NullFields []string `json:"-"`
+}
+
+func (s *FieldId) MarshalJSON() ([]byte, error) {
+	type noMethod FieldId
+	raw := noMethod(*s)
+	return gensupport.MarshalJSON(raw, s.ForceSendFields, s.NullFields)
+}
+
+// FileSet: Set of files to scan.
+type FileSet struct {
+	// Url: The url, in the format gs://<bucket>/<path>. Trailing wildcard
+	// in the
+	// path is allowed.
+	Url string `json:"url,omitempty"`
+
+	// ForceSendFields is a list of field names (e.g. "Url") to
+	// unconditionally include in API requests. By default, fields with
+	// empty values are omitted from API requests. However, any non-pointer,
+	// non-interface field appearing in ForceSendFields will be sent to the
+	// server regardless of whether the field is empty or not. This may be
+	// used to include empty fields in Patch requests.
+	ForceSendFields []string `json:"-"`
+
+	// NullFields is a list of field names (e.g. "Url") to include in API
+	// requests with the JSON null value. By default, fields with empty
+	// values are omitted from API requests. However, any field with an
+	// empty value appearing in NullFields will be sent to the server as
+	// null. It is an error if a field in this list has a non-empty value.
+	// This may be used to include null fields in Patch requests.
+	NullFields []string `json:"-"`
+}
+
+func (s *FileSet) MarshalJSON() ([]byte, error) {
+	type noMethod FileSet
+	raw := noMethod(*s)
+	return gensupport.MarshalJSON(raw, s.ForceSendFields, s.NullFields)
+}
+
+// Finding: Container structure describing a single finding within a
+// string or image.
+type Finding struct {
+	// CreateTime: Timestamp when finding was detected.
+	CreateTime string `json:"createTime,omitempty"`
+
+	// InfoType: The specific type of info the string might be.
+	InfoType *InfoType `json:"infoType,omitempty"`
+
+	// Likelihood: Estimate of how likely it is that the info_type is
+	// correct.
+	//
+	// Possible values:
+	//   "LIKELIHOOD_UNSPECIFIED" - Default value; information with all
+	// likelihoods will be included.
+	//   "VERY_UNLIKELY" - Few matching elements.
+	//   "UNLIKELY"
+	//   "POSSIBLE" - Some matching elements.
+	//   "LIKELY"
+	//   "VERY_LIKELY" - Many matching elements.
+	Likelihood string `json:"likelihood,omitempty"`
+
+	// Location: Location of the info found.
+	Location *Location `json:"location,omitempty"`
+
+	// Quote: The specific string that may be potentially sensitive info.
+	Quote string `json:"quote,omitempty"`
+
+	// ForceSendFields is a list of field names (e.g. "CreateTime") to
+	// unconditionally include in API requests. By default, fields with
+	// empty values are omitted from API requests. However, any non-pointer,
+	// non-interface field appearing in ForceSendFields will be sent to the
+	// server regardless of whether the field is empty or not. This may be
+	// used to include empty fields in Patch requests.
+	ForceSendFields []string `json:"-"`
+
+	// NullFields is a list of field names (e.g. "CreateTime") to include in
+	// API requests with the JSON null value. By default, fields with empty
+	// values are omitted from API requests. However, any field with an
+	// empty value appearing in NullFields will be sent to the server as
+	// null. It is an error if a field in this list has a non-empty value.
+	// This may be used to include null fields in Patch requests.
+	NullFields []string `json:"-"`
+}
+
+func (s *Finding) MarshalJSON() ([]byte, error) {
+	type noMethod Finding
+	raw := noMethod(*s)
+	return gensupport.MarshalJSON(raw, s.ForceSendFields, s.NullFields)
+}
+
+// ImageLocation: Bounding box encompassing detected text within an
+// image.
+type ImageLocation struct {
+	// Height: Height of the bounding box in pixels.
+	Height int64 `json:"height,omitempty"`
+
+	// Left: Left coordinate of the bounding box. (0,0) is upper left.
+	Left int64 `json:"left,omitempty"`
+
+	// Top: Top coordinate of the bounding box. (0,0) is upper left.
+	Top int64 `json:"top,omitempty"`
+
+	// Width: Width of the bounding box in pixels.
+	Width int64 `json:"width,omitempty"`
+
+	// ForceSendFields is a list of field names (e.g. "Height") to
+	// unconditionally include in API requests. By default, fields with
+	// empty values are omitted from API requests. However, any non-pointer,
+	// non-interface field appearing in ForceSendFields will be sent to the
+	// server regardless of whether the field is empty or not. This may be
+	// used to include empty fields in Patch requests.
+	ForceSendFields []string `json:"-"`
+
+	// NullFields is a list of field names (e.g. "Height") to include in API
+	// requests with the JSON null value. By default, fields with empty
+	// values are omitted from API requests. However, any field with an
+	// empty value appearing in NullFields will be sent to the server as
+	// null. It is an error if a field in this list has a non-empty value.
+	// This may be used to include null fields in Patch requests.
+	NullFields []string `json:"-"`
+}
+
+func (s *ImageLocation) MarshalJSON() ([]byte, error) {
+	type noMethod ImageLocation
+	raw := noMethod(*s)
+	return gensupport.MarshalJSON(raw, s.ForceSendFields, s.NullFields)
+}
+
+// InfoType: Type of information detected by the API.
+type InfoType struct {
+	// Name: Name of the information type, provided by the API call
+	// ListInfoTypes.
+	Name string `json:"name,omitempty"`
+
+	// ForceSendFields is a list of field names (e.g. "Name") to
+	// unconditionally include in API requests. By default, fields with
+	// empty values are omitted from API requests. However, any non-pointer,
+	// non-interface field appearing in ForceSendFields will be sent to the
+	// server regardless of whether the field is empty or not. This may be
+	// used to include empty fields in Patch requests.
+	ForceSendFields []string `json:"-"`
+
+	// NullFields is a list of field names (e.g. "Name") to include in API
+	// requests with the JSON null value. By default, fields with empty
+	// values are omitted from API requests. However, any field with an
+	// empty value appearing in NullFields will be sent to the server as
+	// null. It is an error if a field in this list has a non-empty value.
+	// This may be used to include null fields in Patch requests.
+	NullFields []string `json:"-"`
+}
+
+func (s *InfoType) MarshalJSON() ([]byte, error) {
+	type noMethod InfoType
+	raw := noMethod(*s)
+	return gensupport.MarshalJSON(raw, s.ForceSendFields, s.NullFields)
+}
+
+// InfoTypeDescription: Info type description.
+type InfoTypeDescription struct {
+	// Categories: List of categories this info type belongs to.
+	Categories []*CategoryDescription `json:"categories,omitempty"`
+
+	// DisplayName: Human readable form of the info type name.
+	DisplayName string `json:"displayName,omitempty"`
+
+	// Name: Internal name of the info type.
+	Name string `json:"name,omitempty"`
+
+	// ForceSendFields is a list of field names (e.g. "Categories") to
+	// unconditionally include in API requests. By default, fields with
+	// empty values are omitted from API requests. However, any non-pointer,
+	// non-interface field appearing in ForceSendFields will be sent to the
+	// server regardless of whether the field is empty or not. This may be
+	// used to include empty fields in Patch requests.
+	ForceSendFields []string `json:"-"`
+
+	// NullFields is a list of field names (e.g. "Categories") to include in
+	// API requests with the JSON null value. By default, fields with empty
+	// values are omitted from API requests. However, any field with an
+	// empty value appearing in NullFields will be sent to the server as
+	// null. It is an error if a field in this list has a non-empty value.
+	// This may be used to include null fields in Patch requests.
+	NullFields []string `json:"-"`
+}
+
+func (s *InfoTypeDescription) MarshalJSON() ([]byte, error) {
+	type noMethod InfoTypeDescription
+	raw := noMethod(*s)
+	return gensupport.MarshalJSON(raw, s.ForceSendFields, s.NullFields)
+}
+
+// InspectConfig: Configuration description of the scanning
+// process.
+// When used with redactContent only info_types and min_likelihood are
+// currently
+// used.
+type InspectConfig struct {
+	// ExcludeTypes: When true, exclude type information of the findings.
+	ExcludeTypes bool `json:"excludeTypes,omitempty"`
+
+	// IncludeQuote: When true, a contextual quote from the data that
+	// triggered a finding will
+	// be included in the response; see Finding.quote.
+	IncludeQuote bool `json:"includeQuote,omitempty"`
+
+	// InfoTypes: Restrict what info_types to look for. The values must
+	// correspond to
+	// InfoType values returned by ListInfoTypes or found in
+	// documentation.
+	// Empty info_types runs all enabled detectors.
+	InfoTypes []*InfoType `json:"infoTypes,omitempty"`
+
+	// MaxFindings: Limit the number of findings per content item.
+	MaxFindings int64 `json:"maxFindings,omitempty"`
+
+	// MinLikelihood: Only return findings equal or above this threshold.
+	//
+	// Possible values:
+	//   "LIKELIHOOD_UNSPECIFIED" - Default value; information with all
+	// likelihoods will be included.
+	//   "VERY_UNLIKELY" - Few matching elements.
+	//   "UNLIKELY"
+	//   "POSSIBLE" - Some matching elements.
+	//   "LIKELY"
+	//   "VERY_LIKELY" - Many matching elements.
+	MinLikelihood string `json:"minLikelihood,omitempty"`
+
+	// ForceSendFields is a list of field names (e.g. "ExcludeTypes") to
+	// unconditionally include in API requests. By default, fields with
+	// empty values are omitted from API requests. However, any non-pointer,
+	// non-interface field appearing in ForceSendFields will be sent to the
+	// server regardless of whether the field is empty or not. This may be
+	// used to include empty fields in Patch requests.
+	ForceSendFields []string `json:"-"`
+
+	// NullFields is a list of field names (e.g. "ExcludeTypes") to include
+	// in API requests with the JSON null value. By default, fields with
+	// empty values are omitted from API requests. However, any field with
+	// an empty value appearing in NullFields will be sent to the server as
+	// null. It is an error if a field in this list has a non-empty value.
+	// This may be used to include null fields in Patch requests.
+	NullFields []string `json:"-"`
+}
+
+func (s *InspectConfig) MarshalJSON() ([]byte, error) {
+	type noMethod InspectConfig
+	raw := noMethod(*s)
+	return gensupport.MarshalJSON(raw, s.ForceSendFields, s.NullFields)
+}
+
+// InspectContentRequest: Request to search for potentially sensitive
+// info in a list of items.
+type InspectContentRequest struct {
+	// InspectConfig: Configuration for the inspector.
+	InspectConfig *InspectConfig `json:"inspectConfig,omitempty"`
+
+	// Items: The list of items to inspect. Items in a single request
+	// are
+	// considered "related" unless inspect_config.independent_inputs is
+	// true.
+	// Up to 100 are allowed per request.
+	Items []*ContentItem `json:"items,omitempty"`
+
+	// ForceSendFields is a list of field names (e.g. "InspectConfig") to
+	// unconditionally include in API requests. By default, fields with
+	// empty values are omitted from API requests. However, any non-pointer,
+	// non-interface field appearing in ForceSendFields will be sent to the
+	// server regardless of whether the field is empty or not. This may be
+	// used to include empty fields in Patch requests.
+	ForceSendFields []string `json:"-"`
+
+	// NullFields is a list of field names (e.g. "InspectConfig") to include
+	// in API requests with the JSON null value. By default, fields with
+	// empty values are omitted from API requests. However, any field with
+	// an empty value appearing in NullFields will be sent to the server as
+	// null. It is an error if a field in this list has a non-empty value.
+	// This may be used to include null fields in Patch requests.
+	NullFields []string `json:"-"`
+}
+
+func (s *InspectContentRequest) MarshalJSON() ([]byte, error) {
+	type noMethod InspectContentRequest
+	raw := noMethod(*s)
+	return gensupport.MarshalJSON(raw, s.ForceSendFields, s.NullFields)
+}
+
+// InspectContentResponse: Results of inspecting a list of items.
+type InspectContentResponse struct {
+	// Results: Each content_item from the request will have a result in
+	// this list, in the
+	// same order as the request.
+	Results []*InspectResult `json:"results,omitempty"`
+
+	// ServerResponse contains the HTTP response code and headers from the
+	// server.
+	googleapi.ServerResponse `json:"-"`
+
+	// ForceSendFields is a list of field names (e.g. "Results") to
+	// unconditionally include in API requests. By default, fields with
+	// empty values are omitted from API requests. However, any non-pointer,
+	// non-interface field appearing in ForceSendFields will be sent to the
+	// server regardless of whether the field is empty or not. This may be
+	// used to include empty fields in Patch requests.
+	ForceSendFields []string `json:"-"`
+
+	// NullFields is a list of field names (e.g. "Results") to include in
+	// API requests with the JSON null value. By default, fields with empty
+	// values are omitted from API requests. However, any field with an
+	// empty value appearing in NullFields will be sent to the server as
+	// null. It is an error if a field in this list has a non-empty value.
+	// This may be used to include null fields in Patch requests.
+	NullFields []string `json:"-"`
+}
+
+func (s *InspectContentResponse) MarshalJSON() ([]byte, error) {
+	type noMethod InspectContentResponse
+	raw := noMethod(*s)
+	return gensupport.MarshalJSON(raw, s.ForceSendFields, s.NullFields)
+}
+
+// InspectResult: All the findings for a single scanned item.
+type InspectResult struct {
+	// Findings: List of findings for an item.
+	Findings []*Finding `json:"findings,omitempty"`
+
+	// FindingsTruncated: If true, then this item might have more findings
+	// than were returned,
+	// and the findings returned are an arbitrary subset of all
+	// findings.
+	// The findings list might be truncated because the input items were
+	// too
+	// large, or because the server reached the maximum amount of
+	// resources
+	// allowed for a single API call. For best results, divide the input
+	// into
+	// smaller batches.
+	FindingsTruncated bool `json:"findingsTruncated,omitempty"`
+
+	// ForceSendFields is a list of field names (e.g. "Findings") to
+	// unconditionally include in API requests. By default, fields with
+	// empty values are omitted from API requests. However, any non-pointer,
+	// non-interface field appearing in ForceSendFields will be sent to the
+	// server regardless of whether the field is empty or not. This may be
+	// used to include empty fields in Patch requests.
+	ForceSendFields []string `json:"-"`
+
+	// NullFields is a list of field names (e.g. "Findings") to include in
+	// API requests with the JSON null value. By default, fields with empty
+	// values are omitted from API requests. However, any field with an
+	// empty value appearing in NullFields will be sent to the server as
+	// null. It is an error if a field in this list has a non-empty value.
+	// This may be used to include null fields in Patch requests.
+	NullFields []string `json:"-"`
+}
+
+func (s *InspectResult) MarshalJSON() ([]byte, error) {
+	type noMethod InspectResult
+	raw := noMethod(*s)
+	return gensupport.MarshalJSON(raw, s.ForceSendFields, s.NullFields)
+}
+
+// Key: A unique identifier for a Datastore entity.
+// If a key's partition ID or any of its path kinds or names
+// are
+// reserved/read-only, the key is reserved/read-only.
+// A reserved/read-only key is forbidden in certain documented contexts.
+type Key struct {
+	// PartitionId: Entities are partitioned into subsets, currently
+	// identified by a project
+	// ID and namespace ID.
+	// Queries are scoped to a single partition.
+	PartitionId *PartitionId `json:"partitionId,omitempty"`
+
+	// Path: The entity path.
+	// An entity path consists of one or more elements composed of a kind
+	// and a
+	// string or numerical identifier, which identify entities. The
+	// first
+	// element identifies a _root entity_, the second element identifies
+	// a _child_ of the root entity, the third element identifies a child of
+	// the
+	// second entity, and so forth. The entities identified by all prefixes
+	// of
+	// the path are called the element's _ancestors_.
+	//
+	// A path can never be empty, and a path can have at most 100 elements.
+	Path []*PathElement `json:"path,omitempty"`
+
+	// ForceSendFields is a list of field names (e.g. "PartitionId") to
+	// unconditionally include in API requests. By default, fields with
+	// empty values are omitted from API requests. However, any non-pointer,
+	// non-interface field appearing in ForceSendFields will be sent to the
+	// server regardless of whether the field is empty or not. This may be
+	// used to include empty fields in Patch requests.
+	ForceSendFields []string `json:"-"`
+
+	// NullFields is a list of field names (e.g. "PartitionId") to include
+	// in API requests with the JSON null value. By default, fields with
+	// empty values are omitted from API requests. However, any field with
+	// an empty value appearing in NullFields will be sent to the server as
+	// null. It is an error if a field in this list has a non-empty value.
+	// This may be used to include null fields in Patch requests.
+	NullFields []string `json:"-"`
+}
+
+func (s *Key) MarshalJSON() ([]byte, error) {
+	type noMethod Key
+	raw := noMethod(*s)
+	return gensupport.MarshalJSON(raw, s.ForceSendFields, s.NullFields)
+}
+
+// KindExpression: A representation of a Datastore kind.
+type KindExpression struct {
+	// Name: The name of the kind.
+	Name string `json:"name,omitempty"`
+
+	// ForceSendFields is a list of field names (e.g. "Name") to
+	// unconditionally include in API requests. By default, fields with
+	// empty values are omitted from API requests. However, any non-pointer,
+	// non-interface field appearing in ForceSendFields will be sent to the
+	// server regardless of whether the field is empty or not. This may be
+	// used to include empty fields in Patch requests.
+	ForceSendFields []string `json:"-"`
+
+	// NullFields is a list of field names (e.g. "Name") to include in API
+	// requests with the JSON null value. By default, fields with empty
+	// values are omitted from API requests. However, any field with an
+	// empty value appearing in NullFields will be sent to the server as
+	// null. It is an error if a field in this list has a non-empty value.
+	// This may be used to include null fields in Patch requests.
+	NullFields []string `json:"-"`
+}
+
+func (s *KindExpression) MarshalJSON() ([]byte, error) {
+	type noMethod KindExpression
+	raw := noMethod(*s)
+	return gensupport.MarshalJSON(raw, s.ForceSendFields, s.NullFields)
+}
+
+// ListInfoTypesResponse: Response to the ListInfoTypes request.
+type ListInfoTypesResponse struct {
+	// InfoTypes: Set of sensitive info types belonging to a category.
+	InfoTypes []*InfoTypeDescription `json:"infoTypes,omitempty"`
+
+	// ServerResponse contains the HTTP response code and headers from the
+	// server.
+	googleapi.ServerResponse `json:"-"`
+
+	// ForceSendFields is a list of field names (e.g. "InfoTypes") to
+	// unconditionally include in API requests. By default, fields with
+	// empty values are omitted from API requests. However, any non-pointer,
+	// non-interface field appearing in ForceSendFields will be sent to the
+	// server regardless of whether the field is empty or not. This may be
+	// used to include empty fields in Patch requests.
+	ForceSendFields []string `json:"-"`
+
+	// NullFields is a list of field names (e.g. "InfoTypes") to include in
+	// API requests with the JSON null value. By default, fields with empty
+	// values are omitted from API requests. However, any field with an
+	// empty value appearing in NullFields will be sent to the server as
+	// null. It is an error if a field in this list has a non-empty value.
+	// This may be used to include null fields in Patch requests.
+	NullFields []string `json:"-"`
+}
+
+func (s *ListInfoTypesResponse) MarshalJSON() ([]byte, error) {
+	type noMethod ListInfoTypesResponse
+	raw := noMethod(*s)
+	return gensupport.MarshalJSON(raw, s.ForceSendFields, s.NullFields)
+}
+
+// ListInspectFindingsResponse: Response to the ListInspectFindings
+// request.
+type ListInspectFindingsResponse struct {
+	// NextPageToken: If not empty, indicates that there may be more results
+	// that match the
+	// request; this value should be passed in a new
+	// `ListInspectFindingsRequest`.
+	NextPageToken string `json:"nextPageToken,omitempty"`
+
+	// Result: The results.
+	Result *InspectResult `json:"result,omitempty"`
+
+	// ServerResponse contains the HTTP response code and headers from the
+	// server.
+	googleapi.ServerResponse `json:"-"`
+
+	// ForceSendFields is a list of field names (e.g. "NextPageToken") to
+	// unconditionally include in API requests. By default, fields with
+	// empty values are omitted from API requests. However, any non-pointer,
+	// non-interface field appearing in ForceSendFields will be sent to the
+	// server regardless of whether the field is empty or not. This may be
+	// used to include empty fields in Patch requests.
+	ForceSendFields []string `json:"-"`
+
+	// NullFields is a list of field names (e.g. "NextPageToken") to include
+	// in API requests with the JSON null value. By default, fields with
+	// empty values are omitted from API requests. However, any field with
+	// an empty value appearing in NullFields will be sent to the server as
+	// null. It is an error if a field in this list has a non-empty value.
+	// This may be used to include null fields in Patch requests.
+	NullFields []string `json:"-"`
+}
+
+func (s *ListInspectFindingsResponse) MarshalJSON() ([]byte, error) {
+	type noMethod ListInspectFindingsResponse
+	raw := noMethod(*s)
+	return gensupport.MarshalJSON(raw, s.ForceSendFields, s.NullFields)
+}
+
+// ListOperationsResponse: The response message for
+// Operations.ListOperations.
+type ListOperationsResponse struct {
+	// NextPageToken: The standard List next-page token.
+	NextPageToken string `json:"nextPageToken,omitempty"`
+
+	// Operations: A list of operations that matches the specified filter in
+	// the request.
+	Operations []*Operation `json:"operations,omitempty"`
+
+	// ServerResponse contains the HTTP response code and headers from the
+	// server.
+	googleapi.ServerResponse `json:"-"`
+
+	// ForceSendFields is a list of field names (e.g. "NextPageToken") to
+	// unconditionally include in API requests. By default, fields with
+	// empty values are omitted from API requests. However, any non-pointer,
+	// non-interface field appearing in ForceSendFields will be sent to the
+	// server regardless of whether the field is empty or not. This may be
+	// used to include empty fields in Patch requests.
+	ForceSendFields []string `json:"-"`
+
+	// NullFields is a list of field names (e.g. "NextPageToken") to include
+	// in API requests with the JSON null value. By default, fields with
+	// empty values are omitted from API requests. However, any field with
+	// an empty value appearing in NullFields will be sent to the server as
+	// null. It is an error if a field in this list has a non-empty value.
+	// This may be used to include null fields in Patch requests.
+	NullFields []string `json:"-"`
+}
+
+func (s *ListOperationsResponse) MarshalJSON() ([]byte, error) {
+	type noMethod ListOperationsResponse
+	raw := noMethod(*s)
+	return gensupport.MarshalJSON(raw, s.ForceSendFields, s.NullFields)
+}
+
+// ListRootCategoriesResponse: Response for ListRootCategories request.
+type ListRootCategoriesResponse struct {
+	// Categories: List of all into type categories supported by the API.
+	Categories []*CategoryDescription `json:"categories,omitempty"`
+
+	// ServerResponse contains the HTTP response code and headers from the
+	// server.
+	googleapi.ServerResponse `json:"-"`
+
+	// ForceSendFields is a list of field names (e.g. "Categories") to
+	// unconditionally include in API requests. By default, fields with
+	// empty values are omitted from API requests. However, any non-pointer,
+	// non-interface field appearing in ForceSendFields will be sent to the
+	// server regardless of whether the field is empty or not. This may be
+	// used to include empty fields in Patch requests.
+	ForceSendFields []string `json:"-"`
+
+	// NullFields is a list of field names (e.g. "Categories") to include in
+	// API requests with the JSON null value. By default, fields with empty
+	// values are omitted from API requests. However, any field with an
+	// empty value appearing in NullFields will be sent to the server as
+	// null. It is an error if a field in this list has a non-empty value.
+	// This may be used to include null fields in Patch requests.
+	NullFields []string `json:"-"`
+}
+
+func (s *ListRootCategoriesResponse) MarshalJSON() ([]byte, error) {
+	type noMethod ListRootCategoriesResponse
+	raw := noMethod(*s)
+	return gensupport.MarshalJSON(raw, s.ForceSendFields, s.NullFields)
+}
+
+// Location: Specifies the location of a finding within its source item.
+type Location struct {
+	// ByteRange: Zero-based byte offsets within a content item.
+	ByteRange *Range `json:"byteRange,omitempty"`
+
+	// CodepointRange: Character offsets within a content item, included
+	// when content type
+	// is a text. Default charset assumed to be UTF-8.
+	CodepointRange *Range `json:"codepointRange,omitempty"`
+
+	// FieldId: Field id of the field containing the finding.
+	FieldId *FieldId `json:"fieldId,omitempty"`
+
+	// ImageBoxes: Location within an image's pixels.
+	ImageBoxes []*ImageLocation `json:"imageBoxes,omitempty"`
+
+	// RecordKey: Key of the finding.
+	RecordKey *RecordKey `json:"recordKey,omitempty"`
+
+	// ForceSendFields is a list of field names (e.g. "ByteRange") to
+	// unconditionally include in API requests. By default, fields with
+	// empty values are omitted from API requests. However, any non-pointer,
+	// non-interface field appearing in ForceSendFields will be sent to the
+	// server regardless of whether the field is empty or not. This may be
+	// used to include empty fields in Patch requests.
+	ForceSendFields []string `json:"-"`
+
+	// NullFields is a list of field names (e.g. "ByteRange") to include in
+	// API requests with the JSON null value. By default, fields with empty
+	// values are omitted from API requests. However, any field with an
+	// empty value appearing in NullFields will be sent to the server as
+	// null. It is an error if a field in this list has a non-empty value.
+	// This may be used to include null fields in Patch requests.
+	NullFields []string `json:"-"`
+}
+
+func (s *Location) MarshalJSON() ([]byte, error) {
+	type noMethod Location
+	raw := noMethod(*s)
+	return gensupport.MarshalJSON(raw, s.ForceSendFields, s.NullFields)
+}
+
+// Operation: This resource represents a long-running operation that is
+// the result of a
+// network API call.
+type Operation struct {
+	// Done: 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.
+	Done bool `json:"done,omitempty"`
+
+	// Error: The error result of the operation in case of failure or
+	// cancellation.
+	Error *Status `json:"error,omitempty"`
+
+	// Metadata: This field will contain an `InspectOperationMetdata`
+	// object.
+	Metadata googleapi.RawMessage `json:"metadata,omitempty"`
+
+	// Name: The server-assigned name, The `name` should have the format of
+	// `inspect/operations/<identifier>`.
+	Name string `json:"name,omitempty"`
+
+	// Response: This field will contain an `InspectOperationResult` object.
+	Response googleapi.RawMessage `json:"response,omitempty"`
+
+	// ServerResponse contains the HTTP response code and headers from the
+	// server.
+	googleapi.ServerResponse `json:"-"`
+
+	// ForceSendFields is a list of field names (e.g. "Done") to
+	// unconditionally include in API requests. By default, fields with
+	// empty values are omitted from API requests. However, any non-pointer,
+	// non-interface field appearing in ForceSendFields will be sent to the
+	// server regardless of whether the field is empty or not. This may be
+	// used to include empty fields in Patch requests.
+	ForceSendFields []string `json:"-"`
+
+	// NullFields is a list of field names (e.g. "Done") to include in API
+	// requests with the JSON null value. By default, fields with empty
+	// values are omitted from API requests. However, any field with an
+	// empty value appearing in NullFields will be sent to the server as
+	// null. It is an error if a field in this list has a non-empty value.
+	// This may be used to include null fields in Patch requests.
+	NullFields []string `json:"-"`
+}
+
+func (s *Operation) MarshalJSON() ([]byte, error) {
+	type noMethod Operation
+	raw := noMethod(*s)
+	return gensupport.MarshalJSON(raw, s.ForceSendFields, s.NullFields)
+}
+
+// PartitionId: Datastore partition ID.
+// A partition ID identifies a grouping of entities. The grouping is
+// always
+// by project and namespace, however the namespace ID may be empty.
+//
+// A partition ID contains several dimensions:
+// project ID and namespace ID.
+type PartitionId struct {
+	// DatabaseId: If not empty, the ID of the database to which the
+	// entities
+	// belong.
+	DatabaseId string `json:"databaseId,omitempty"`
+
+	// NamespaceId: If not empty, the ID of the namespace to which the
+	// entities belong.
+	NamespaceId string `json:"namespaceId,omitempty"`
+
+	// ProjectId: The ID of the project to which the entities belong.
+	ProjectId string `json:"projectId,omitempty"`
+
+	// ForceSendFields is a list of field names (e.g. "DatabaseId") to
+	// unconditionally include in API requests. By default, fields with
+	// empty values are omitted from API requests. However, any non-pointer,
+	// non-interface field appearing in ForceSendFields will be sent to the
+	// server regardless of whether the field is empty or not. This may be
+	// used to include empty fields in Patch requests.
+	ForceSendFields []string `json:"-"`
+
+	// NullFields is a list of field names (e.g. "DatabaseId") to include in
+	// API requests with the JSON null value. By default, fields with empty
+	// values are omitted from API requests. However, any field with an
+	// empty value appearing in NullFields will be sent to the server as
+	// null. It is an error if a field in this list has a non-empty value.
+	// This may be used to include null fields in Patch requests.
+	NullFields []string `json:"-"`
+}
+
+func (s *PartitionId) MarshalJSON() ([]byte, error) {
+	type noMethod PartitionId
+	raw := noMethod(*s)
+	return gensupport.MarshalJSON(raw, s.ForceSendFields, s.NullFields)
+}
+
+// PathElement: A (kind, ID/name) pair used to construct a key path.
+//
+// If either name or ID is set, the element is complete.
+// If neither is set, the element is incomplete.
+type PathElement struct {
+	// Id: The auto-allocated ID of the entity.
+	// Never equal to zero. Values less than zero are discouraged and may
+	// not
+	// be supported in the future.
+	Id int64 `json:"id,omitempty,string"`
+
+	// Kind: The kind of the entity.
+	// A kind matching regex `__.*__` is reserved/read-only.
+	// A kind must not contain more than 1500 bytes when UTF-8
+	// encoded.
+	// Cannot be "".
+	Kind string `json:"kind,omitempty"`
+
+	// Name: The name of the entity.
+	// A name matching regex `__.*__` is reserved/read-only.
+	// A name must not be more than 1500 bytes when UTF-8 encoded.
+	// Cannot be "".
+	Name string `json:"name,omitempty"`
+
+	// ForceSendFields is a list of field names (e.g. "Id") to
+	// unconditionally include in API requests. By default, fields with
+	// empty values are omitted from API requests. However, any non-pointer,
+	// non-interface field appearing in ForceSendFields will be sent to the
+	// server regardless of whether the field is empty or not. This may be
+	// used to include empty fields in Patch requests.
+	ForceSendFields []string `json:"-"`
+
+	// NullFields is a list of field names (e.g. "Id") to include in API
+	// requests with the JSON null value. By default, fields with empty
+	// values are omitted from API requests. However, any field with an
+	// empty value appearing in NullFields will be sent to the server as
+	// null. It is an error if a field in this list has a non-empty value.
+	// This may be used to include null fields in Patch requests.
+	NullFields []string `json:"-"`
+}
+
+func (s *PathElement) MarshalJSON() ([]byte, error) {
+	type noMethod PathElement
+	raw := noMethod(*s)
+	return gensupport.MarshalJSON(raw, s.ForceSendFields, s.NullFields)
+}
+
+// Projection: A representation of a Datastore property in a projection.
+type Projection struct {
+	// Property: The property to project.
+	Property *PropertyReference `json:"property,omitempty"`
+
+	// ForceSendFields is a list of field names (e.g. "Property") to
+	// unconditionally include in API requests. By default, fields with
+	// empty values are omitted from API requests. However, any non-pointer,
+	// non-interface field appearing in ForceSendFields will be sent to the
+	// server regardless of whether the field is empty or not. This may be
+	// used to include empty fields in Patch requests.
+	ForceSendFields []string `json:"-"`
+
+	// NullFields is a list of field names (e.g. "Property") to include in
+	// API requests with the JSON null value. By default, fields with empty
+	// values are omitted from API requests. However, any field with an
+	// empty value appearing in NullFields will be sent to the server as
+	// null. It is an error if a field in this list has a non-empty value.
+	// This may be used to include null fields in Patch requests.
+	NullFields []string `json:"-"`
+}
+
+func (s *Projection) MarshalJSON() ([]byte, error) {
+	type noMethod Projection
+	raw := noMethod(*s)
+	return gensupport.MarshalJSON(raw, s.ForceSendFields, s.NullFields)
+}
+
+// PropertyReference: A reference to a property relative to the
+// Datastore kind expressions.
+type PropertyReference struct {
+	// Name: The name of the property.
+	// If name includes "."s, it may be interpreted as a property name path.
+	Name string `json:"name,omitempty"`
+
+	// ForceSendFields is a list of field names (e.g. "Name") to
+	// unconditionally include in API requests. By default, fields with
+	// empty values are omitted from API requests. However, any non-pointer,
+	// non-interface field appearing in ForceSendFields will be sent to the
+	// server regardless of whether the field is empty or not. This may be
+	// used to include empty fields in Patch requests.
+	ForceSendFields []string `json:"-"`
+
+	// NullFields is a list of field names (e.g. "Name") to include in API
+	// requests with the JSON null value. By default, fields with empty
+	// values are omitted from API requests. However, any field with an
+	// empty value appearing in NullFields will be sent to the server as
+	// null. It is an error if a field in this list has a non-empty value.
+	// This may be used to include null fields in Patch requests.
+	NullFields []string `json:"-"`
+}
+
+func (s *PropertyReference) MarshalJSON() ([]byte, error) {
+	type noMethod PropertyReference
+	raw := noMethod(*s)
+	return gensupport.MarshalJSON(raw, s.ForceSendFields, s.NullFields)
+}
+
+// Range: Generic half-open interval [start, end)
+type Range struct {
+	// End: Index of the last character of the range (exclusive).
+	End int64 `json:"end,omitempty,string"`
+
+	// Start: Index of the first character of the range (inclusive).
+	Start int64 `json:"start,omitempty,string"`
+
+	// ForceSendFields is a list of field names (e.g. "End") to
+	// unconditionally include in API requests. By default, fields with
+	// empty values are omitted from API requests. However, any non-pointer,
+	// non-interface field appearing in ForceSendFields will be sent to the
+	// server regardless of whether the field is empty or not. This may be
+	// used to include empty fields in Patch requests.
+	ForceSendFields []string `json:"-"`
+
+	// NullFields is a list of field names (e.g. "End") to include in API
+	// requests with the JSON null value. By default, fields with empty
+	// values are omitted from API requests. However, any field with an
+	// empty value appearing in NullFields will be sent to the server as
+	// null. It is an error if a field in this list has a non-empty value.
+	// This may be used to include null fields in Patch requests.
+	NullFields []string `json:"-"`
+}
+
+func (s *Range) MarshalJSON() ([]byte, error) {
+	type noMethod Range
+	raw := noMethod(*s)
+	return gensupport.MarshalJSON(raw, s.ForceSendFields, s.NullFields)
+}
+
+// RecordKey: Message for a unique key indicating a record that contains
+// a finding.
+type RecordKey struct {
+	CloudStorageKey *CloudStorageKey `json:"cloudStorageKey,omitempty"`
+
+	DatastoreKey *DatastoreKey `json:"datastoreKey,omitempty"`
+
+	// ForceSendFields is a list of field names (e.g. "CloudStorageKey") to
+	// unconditionally include in API requests. By default, fields with
+	// empty values are omitted from API requests. However, any non-pointer,
+	// non-interface field appearing in ForceSendFields will be sent to the
+	// server regardless of whether the field is empty or not. This may be
+	// used to include empty fields in Patch requests.
+	ForceSendFields []string `json:"-"`
+
+	// NullFields is a list of field names (e.g. "CloudStorageKey") to
+	// include in API requests with the JSON null value. By default, fields
+	// with empty values are omitted from API requests. However, any field
+	// with an empty value appearing in NullFields will be sent to the
+	// server as null. It is an error if a field in this list has a
+	// non-empty value. This may be used to include null fields in Patch
+	// requests.
+	NullFields []string `json:"-"`
+}
+
+func (s *RecordKey) MarshalJSON() ([]byte, error) {
+	type noMethod RecordKey
+	raw := noMethod(*s)
+	return gensupport.MarshalJSON(raw, s.ForceSendFields, s.NullFields)
+}
+
+// RedactContentRequest: Request to search for potentially sensitive
+// info in a list of items
+// and replace it with a default or provided content.
+type RedactContentRequest struct {
+	// InspectConfig: Configuration for the inspector.
+	InspectConfig *InspectConfig `json:"inspectConfig,omitempty"`
+
+	// Items: The list of items to inspect. Up to 100 are allowed per
+	// request.
+	Items []*ContentItem `json:"items,omitempty"`
+
+	// ReplaceConfigs: The strings to replace findings with. Must specify at
+	// least one.
+	ReplaceConfigs []*ReplaceConfig `json:"replaceConfigs,omitempty"`
+
+	// ForceSendFields is a list of field names (e.g. "InspectConfig") to
+	// unconditionally include in API requests. By default, fields with
+	// empty values are omitted from API requests. However, any non-pointer,
+	// non-interface field appearing in ForceSendFields will be sent to the
+	// server regardless of whether the field is empty or not. This may be
+	// used to include empty fields in Patch requests.
+	ForceSendFields []string `json:"-"`
+
+	// NullFields is a list of field names (e.g. "InspectConfig") to include
+	// in API requests with the JSON null value. By default, fields with
+	// empty values are omitted from API requests. However, any field with
+	// an empty value appearing in NullFields will be sent to the server as
+	// null. It is an error if a field in this list has a non-empty value.
+	// This may be used to include null fields in Patch requests.
+	NullFields []string `json:"-"`
+}
+
+func (s *RedactContentRequest) MarshalJSON() ([]byte, error) {
+	type noMethod RedactContentRequest
+	raw := noMethod(*s)
+	return gensupport.MarshalJSON(raw, s.ForceSendFields, s.NullFields)
+}
+
+// RedactContentResponse: Results of deidentifying a list of items.
+type RedactContentResponse struct {
+	// Items: The redacted content.
+	Items []*ContentItem `json:"items,omitempty"`
+
+	// ServerResponse contains the HTTP response code and headers from the
+	// server.
+	googleapi.ServerResponse `json:"-"`
+
+	// ForceSendFields is a list of field names (e.g. "Items") to
+	// unconditionally include in API requests. By default, fields with
+	// empty values are omitted from API requests. However, any non-pointer,
+	// non-interface field appearing in ForceSendFields will be sent to the
+	// server regardless of whether the field is empty or not. This may be
+	// used to include empty fields in Patch requests.
+	ForceSendFields []string `json:"-"`
+
+	// NullFields is a list of field names (e.g. "Items") to include in API
+	// requests with the JSON null value. By default, fields with empty
+	// values are omitted from API requests. However, any field with an
+	// empty value appearing in NullFields will be sent to the server as
+	// null. It is an error if a field in this list has a non-empty value.
+	// This may be used to include null fields in Patch requests.
+	NullFields []string `json:"-"`
+}
+
+func (s *RedactContentResponse) MarshalJSON() ([]byte, error) {
+	type noMethod RedactContentResponse
+	raw := noMethod(*s)
+	return gensupport.MarshalJSON(raw, s.ForceSendFields, s.NullFields)
+}
+
+type ReplaceConfig struct {
+	// InfoType: Type of information to replace. Only one ReplaceConfig per
+	// info_type
+	// should be provided. If ReplaceConfig does not have an info_type,
+	// we'll
+	// match it against all info_types that are found but not specified
+	// in
+	// another ReplaceConfig.
+	InfoType *InfoType `json:"infoType,omitempty"`
+
+	// ReplaceWith: Content replacing sensitive information of given type.
+	// Max 256 chars.
+	ReplaceWith string `json:"replaceWith,omitempty"`
+
+	// ForceSendFields is a list of field names (e.g. "InfoType") to
+	// unconditionally include in API requests. By default, fields with
+	// empty values are omitted from API requests. However, any non-pointer,
+	// non-interface field appearing in ForceSendFields will be sent to the
+	// server regardless of whether the field is empty or not. This may be
+	// used to include empty fields in Patch requests.
+	ForceSendFields []string `json:"-"`
+
+	// NullFields is a list of field names (e.g. "InfoType") to include in
+	// API requests with the JSON null value. By default, fields with empty
+	// values are omitted from API requests. However, any field with an
+	// empty value appearing in NullFields will be sent to the server as
+	// null. It is an error if a field in this list has a non-empty value.
+	// This may be used to include null fields in Patch requests.
+	NullFields []string `json:"-"`
+}
+
+func (s *ReplaceConfig) MarshalJSON() ([]byte, error) {
+	type noMethod ReplaceConfig
+	raw := noMethod(*s)
+	return gensupport.MarshalJSON(raw, s.ForceSendFields, s.NullFields)
+}
+
+// Status: 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). The error model is designed to
+// be:
+//
+// - Simple to use and understand for most users
+// - Flexible enough to meet unexpected needs
+//
+// # Overview
+//
+// The `Status` message contains three pieces of data: error code, error
+// message,
+// and error details. The error code should be an enum value
+// of
+// google.rpc.Code, but it may accept additional error codes if needed.
+// The
+// error message should be a developer-facing English message that
+// helps
+// developers *understand* and *resolve* the error. If a localized
+// user-facing
+// error message is needed, put the localized message in the error
+// details or
+// localize it in the client. The optional error details may contain
+// arbitrary
+// information about the error. There is a predefined set of error
+// detail types
+// in the package `google.rpc` which can be used for common error
+// conditions.
+//
+// # Language mapping
+//
+// The `Status` message is the logical representation of the error
+// model, but it
+// is not necessarily the actual wire format. When the `Status` message
+// is
+// exposed in different client libraries and different wire protocols,
+// it can be
+// mapped differently. For example, it will likely be mapped to some
+// exceptions
+// in Java, but more likely mapped to some error codes in C.
+//
+// # Other uses
+//
+// The error model and the `Status` message can be used in a variety
+// of
+// environments, either with or without APIs, to provide a
+// consistent developer experience across different
+// environments.
+//
+// Example uses of this error model include:
+//
+// - Partial errors. If a service needs to return partial errors to the
+// client,
+//     it may embed the `Status` in the normal response to indicate the
+// partial
+//     errors.
+//
+// - Workflow errors. A typical workflow has multiple steps. Each step
+// may
+//     have a `Status` message for error reporting purpose.
+//
+// - Batch operations. If a client uses batch request and batch
+// response, the
+//     `Status` message should be used directly inside batch response,
+// one for
+//     each error sub-response.
+//
+// - Asynchronous operations. If an API call embeds asynchronous
+// operation
+//     results in its response, the status of those operations should
+// be
+//     represented directly using the `Status` message.
+//
+// - Logging. If some API errors are stored in logs, the message
+// `Status` could
+//     be used directly after any stripping needed for security/privacy
+// reasons.
+type Status struct {
+	// Code: The status code, which should be an enum value of
+	// google.rpc.Code.
+	Code int64 `json:"code,omitempty"`
+
+	// Details: A list of messages that carry the error details.  There will
+	// be a
+	// common set of message types for APIs to use.
+	Details []googleapi.RawMessage `json:"details,omitempty"`
+
+	// Message: 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.
+	Message string `json:"message,omitempty"`
+
+	// ForceSendFields is a list of field names (e.g. "Code") to
+	// unconditionally include in API requests. By default, fields with
+	// empty values are omitted from API requests. However, any non-pointer,
+	// non-interface field appearing in ForceSendFields will be sent to the
+	// server regardless of whether the field is empty or not. This may be
+	// used to include empty fields in Patch requests.
+	ForceSendFields []string `json:"-"`
+
+	// NullFields is a list of field names (e.g. "Code") to include in API
+	// requests with the JSON null value. By default, fields with empty
+	// values are omitted from API requests. However, any field with an
+	// empty value appearing in NullFields will be sent to the server as
+	// null. It is an error if a field in this list has a non-empty value.
+	// This may be used to include null fields in Patch requests.
+	NullFields []string `json:"-"`
+}
+
+func (s *Status) MarshalJSON() ([]byte, error) {
+	type noMethod Status
+	raw := noMethod(*s)
+	return gensupport.MarshalJSON(raw, s.ForceSendFields, s.NullFields)
+}
+
+// StorageConfig: Shared message indicating Cloud storage type.
+type StorageConfig struct {
+	// CloudStorageOptions: Google Cloud Storage options specification.
+	CloudStorageOptions *CloudStorageOptions `json:"cloudStorageOptions,omitempty"`
+
+	// DatastoreOptions: Google Cloud Datastore options specification.
+	DatastoreOptions *DatastoreOptions `json:"datastoreOptions,omitempty"`
+
+	// ForceSendFields is a list of field names (e.g. "CloudStorageOptions")
+	// to unconditionally include in API requests. By default, fields with
+	// empty values are omitted from API requests. However, any non-pointer,
+	// non-interface field appearing in ForceSendFields will be sent to the
+	// server regardless of whether the field is empty or not. This may be
+	// used to include empty fields in Patch requests.
+	ForceSendFields []string `json:"-"`
+
+	// NullFields is a list of field names (e.g. "CloudStorageOptions") to
+	// include in API requests with the JSON null value. By default, fields
+	// with empty values are omitted from API requests. However, any field
+	// with an empty value appearing in NullFields will be sent to the
+	// server as null. It is an error if a field in this list has a
+	// non-empty value. This may be used to include null fields in Patch
+	// requests.
+	NullFields []string `json:"-"`
+}
+
+func (s *StorageConfig) MarshalJSON() ([]byte, error) {
+	type noMethod StorageConfig
+	raw := noMethod(*s)
+	return gensupport.MarshalJSON(raw, s.ForceSendFields, s.NullFields)
+}
+
+// method id "dlp.content.inspect":
+
+type ContentInspectCall struct {
+	s                     *Service
+	inspectcontentrequest *InspectContentRequest
+	urlParams_            gensupport.URLParams
+	ctx_                  context.Context
+	header_               http.Header
+}
+
+// Inspect: Find potentially sensitive info in a list of strings.
+// This method has limits on input size, processing time, and output
+// size.
+func (r *ContentService) Inspect(inspectcontentrequest *InspectContentRequest) *ContentInspectCall {
+	c := &ContentInspectCall{s: r.s, urlParams_: make(gensupport.URLParams)}
+	c.inspectcontentrequest = inspectcontentrequest
+	return c
+}
+
+// Fields allows partial responses to be retrieved. See
+// https://developers.google.com/gdata/docs/2.0/basics#PartialResponse
+// for more information.
+func (c *ContentInspectCall) Fields(s ...googleapi.Field) *ContentInspectCall {
+	c.urlParams_.Set("fields", googleapi.CombineFields(s))
+	return c
+}
+
+// Context sets the context to be used in this call's Do method. Any
+// pending HTTP request will be aborted if the provided context is
+// canceled.
+func (c *ContentInspectCall) Context(ctx context.Context) *ContentInspectCall {
+	c.ctx_ = ctx
+	return c
+}
+
+// Header returns an http.Header that can be modified by the caller to
+// add HTTP headers to the request.
+func (c *ContentInspectCall) Header() http.Header {
+	if c.header_ == nil {
+		c.header_ = make(http.Header)
+	}
+	return c.header_
+}
+
+func (c *ContentInspectCall) doRequest(alt string) (*http.Response, error) {
+	reqHeaders := make(http.Header)
+	for k, v := range c.header_ {
+		reqHeaders[k] = v
+	}
+	reqHeaders.Set("User-Agent", c.s.userAgent())
+	var body io.Reader = nil
+	body, err := googleapi.WithoutDataWrapper.JSONReader(c.inspectcontentrequest)
+	if err != nil {
+		return nil, err
+	}
+	reqHeaders.Set("Content-Type", "application/json")
+	c.urlParams_.Set("alt", alt)
+	urls := googleapi.ResolveRelative(c.s.BasePath, "v2beta1/content:inspect")
+	urls += "?" + c.urlParams_.Encode()
+	req, _ := http.NewRequest("POST", urls, body)
+	req.Header = reqHeaders
+	return gensupport.SendRequest(c.ctx_, c.s.client, req)
+}
+
+// Do executes the "dlp.content.inspect" call.
+// Exactly one of *InspectContentResponse or error will be non-nil. Any
+// non-2xx status code is an error. Response headers are in either
+// *InspectContentResponse.ServerResponse.Header or (if a response was
+// returned at all) in error.(*googleapi.Error).Header. Use
+// googleapi.IsNotModified to check whether the returned error was
+// because http.StatusNotModified was returned.
+func (c *ContentInspectCall) Do(opts ...googleapi.CallOption) (*InspectContentResponse, error) {
+	gensupport.SetOptions(c.urlParams_, opts...)
+	res, err := c.doRequest("json")
+	if res != nil && res.StatusCode == http.StatusNotModified {
+		if res.Body != nil {
+			res.Body.Close()
+		}
+		return nil, &googleapi.Error{
+			Code:   res.StatusCode,
+			Header: res.Header,
+		}
+	}
+	if err != nil {
+		return nil, err
+	}
+	defer googleapi.CloseBody(res)
+	if err := googleapi.CheckResponse(res); err != nil {
+		return nil, err
+	}
+	ret := &InspectContentResponse{
+		ServerResponse: googleapi.ServerResponse{
+			Header:         res.Header,
+			HTTPStatusCode: res.StatusCode,
+		},
+	}
+	target := &ret
+	if err := json.NewDecoder(res.Body).Decode(target); err != nil {
+		return nil, err
+	}
+	return ret, nil
+	// {
+	//   "description": "Find potentially sensitive info in a list of strings.\nThis method has limits on input size, processing time, and output size.",
+	//   "flatPath": "v2beta1/content:inspect",
+	//   "httpMethod": "POST",
+	//   "id": "dlp.content.inspect",
+	//   "parameterOrder": [],
+	//   "parameters": {},
+	//   "path": "v2beta1/content:inspect",
+	//   "request": {
+	//     "$ref": "InspectContentRequest"
+	//   },
+	//   "response": {
+	//     "$ref": "InspectContentResponse"
+	//   },
+	//   "scopes": [
+	//     "https://www.googleapis.com/auth/cloud-platform"
+	//   ]
+	// }
+
+}
+
+// method id "dlp.content.redact":
+
+type ContentRedactCall struct {
+	s                    *Service
+	redactcontentrequest *RedactContentRequest
+	urlParams_           gensupport.URLParams
+	ctx_                 context.Context
+	header_              http.Header
+}
+
+// Redact: Redact potentially sensitive info from a list of
+// strings.
+// This method has limits on input size, processing time, and output
+// size.
+func (r *ContentService) Redact(redactcontentrequest *RedactContentRequest) *ContentRedactCall {
+	c := &ContentRedactCall{s: r.s, urlParams_: make(gensupport.URLParams)}
+	c.redactcontentrequest = redactcontentrequest
+	return c
+}
+
+// Fields allows partial responses to be retrieved. See
+// https://developers.google.com/gdata/docs/2.0/basics#PartialResponse
+// for more information.
+func (c *ContentRedactCall) Fields(s ...googleapi.Field) *ContentRedactCall {
+	c.urlParams_.Set("fields", googleapi.CombineFields(s))
+	return c
+}
+
+// Context sets the context to be used in this call's Do method. Any
+// pending HTTP request will be aborted if the provided context is
+// canceled.
+func (c *ContentRedactCall) Context(ctx context.Context) *ContentRedactCall {
+	c.ctx_ = ctx
+	return c
+}
+
+// Header returns an http.Header that can be modified by the caller to
+// add HTTP headers to the request.
+func (c *ContentRedactCall) Header() http.Header {
+	if c.header_ == nil {
+		c.header_ = make(http.Header)
+	}
+	return c.header_
+}
+
+func (c *ContentRedactCall) doRequest(alt string) (*http.Response, error) {
+	reqHeaders := make(http.Header)
+	for k, v := range c.header_ {
+		reqHeaders[k] = v
+	}
+	reqHeaders.Set("User-Agent", c.s.userAgent())
+	var body io.Reader = nil
+	body, err := googleapi.WithoutDataWrapper.JSONReader(c.redactcontentrequest)
+	if err != nil {
+		return nil, err
+	}
+	reqHeaders.Set("Content-Type", "application/json")
+	c.urlParams_.Set("alt", alt)
+	urls := googleapi.ResolveRelative(c.s.BasePath, "v2beta1/content:redact")
+	urls += "?" + c.urlParams_.Encode()
+	req, _ := http.NewRequest("POST", urls, body)
+	req.Header = reqHeaders
+	return gensupport.SendRequest(c.ctx_, c.s.client, req)
+}
+
+// Do executes the "dlp.content.redact" call.
+// Exactly one of *RedactContentResponse or error will be non-nil. Any
+// non-2xx status code is an error. Response headers are in either
+// *RedactContentResponse.ServerResponse.Header or (if a response was
+// returned at all) in error.(*googleapi.Error).Header. Use
+// googleapi.IsNotModified to check whether the returned error was
+// because http.StatusNotModified was returned.
+func (c *ContentRedactCall) Do(opts ...googleapi.CallOption) (*RedactContentResponse, error) {
+	gensupport.SetOptions(c.urlParams_, opts...)
+	res, err := c.doRequest("json")
+	if res != nil && res.StatusCode == http.StatusNotModified {
+		if res.Body != nil {
+			res.Body.Close()
+		}
+		return nil, &googleapi.Error{
+			Code:   res.StatusCode,
+			Header: res.Header,
+		}
+	}
+	if err != nil {
+		return nil, err
+	}
+	defer googleapi.CloseBody(res)
+	if err := googleapi.CheckResponse(res); err != nil {
+		return nil, err
+	}
+	ret := &RedactContentResponse{
+		ServerResponse: googleapi.ServerResponse{
+			Header:         res.Header,
+			HTTPStatusCode: res.StatusCode,
+		},
+	}
+	target := &ret
+	if err := json.NewDecoder(res.Body).Decode(target); err != nil {
+		return nil, err
+	}
+	return ret, nil
+	// {
+	//   "description": "Redact potentially sensitive info from a list of strings.\nThis method has limits on input size, processing time, and output size.",
+	//   "flatPath": "v2beta1/content:redact",
+	//   "httpMethod": "POST",
+	//   "id": "dlp.content.redact",
+	//   "parameterOrder": [],
+	//   "parameters": {},
+	//   "path": "v2beta1/content:redact",
+	//   "request": {
+	//     "$ref": "RedactContentRequest"
+	//   },
+	//   "response": {
+	//     "$ref": "RedactContentResponse"
+	//   },
+	//   "scopes": [
+	//     "https://www.googleapis.com/auth/cloud-platform"
+	//   ]
+	// }
+
+}
+
+// method id "dlp.inspect.operations.cancel":
+
+type InspectOperationsCancelCall struct {
+	s                      *Service
+	name                   string
+	canceloperationrequest *CancelOperationRequest
+	urlParams_             gensupport.URLParams
+	ctx_                   context.Context
+	header_                http.Header
+}
+
+// Cancel: Cancels an operation. Use the get method to check whether the
+// cancellation succeeded or whether the operation completed despite
+// cancellation.
+func (r *InspectOperationsService) Cancel(name string, canceloperationrequest *CancelOperationRequest) *InspectOperationsCancelCall {
+	c := &InspectOperationsCancelCall{s: r.s, urlParams_: make(gensupport.URLParams)}
+	c.name = name
+	c.canceloperationrequest = canceloperationrequest
+	return c
+}
+
+// Fields allows partial responses to be retrieved. See
+// https://developers.google.com/gdata/docs/2.0/basics#PartialResponse
+// for more information.
+func (c *InspectOperationsCancelCall) Fields(s ...googleapi.Field) *InspectOperationsCancelCall {
+	c.urlParams_.Set("fields", googleapi.CombineFields(s))
+	return c
+}
+
+// Context sets the context to be used in this call's Do method. Any
+// pending HTTP request will be aborted if the provided context is
+// canceled.
+func (c *InspectOperationsCancelCall) Context(ctx context.Context) *InspectOperationsCancelCall {
+	c.ctx_ = ctx
+	return c
+}
+
+// Header returns an http.Header that can be modified by the caller to
+// add HTTP headers to the request.
+func (c *InspectOperationsCancelCall) Header() http.Header {
+	if c.header_ == nil {
+		c.header_ = make(http.Header)
+	}
+	return c.header_
+}
+
+func (c *InspectOperationsCancelCall) doRequest(alt string) (*http.Response, error) {
+	reqHeaders := make(http.Header)
+	for k, v := range c.header_ {
+		reqHeaders[k] = v
+	}
+	reqHeaders.Set("User-Agent", c.s.userAgent())
+	var body io.Reader = nil
+	body, err := googleapi.WithoutDataWrapper.JSONReader(c.canceloperationrequest)
+	if err != nil {
+		return nil, err
+	}
+	reqHeaders.Set("Content-Type", "application/json")
+	c.urlParams_.Set("alt", alt)
+	urls := googleapi.ResolveRelative(c.s.BasePath, "v2beta1/{+name}:cancel")
+	urls += "?" + c.urlParams_.Encode()
+	req, _ := http.NewRequest("POST", urls, body)
+	req.Header = reqHeaders
+	googleapi.Expand(req.URL, map[string]string{
+		"name": c.name,
+	})
+	return gensupport.SendRequest(c.ctx_, c.s.client, req)
+}
+
+// Do executes the "dlp.inspect.operations.cancel" call.
+// Exactly one of *Empty or error will be non-nil. Any non-2xx status
+// code is an error. Response headers are in either
+// *Empty.ServerResponse.Header or (if a response was returned at all)
+// in error.(*googleapi.Error).Header. Use googleapi.IsNotModified to
+// check whether the returned error was because http.StatusNotModified
+// was returned.
+func (c *InspectOperationsCancelCall) Do(opts ...googleapi.CallOption) (*Empty, error) {
+	gensupport.SetOptions(c.urlParams_, opts...)
+	res, err := c.doRequest("json")
+	if res != nil && res.StatusCode == http.StatusNotModified {
+		if res.Body != nil {
+			res.Body.Close()
+		}
+		return nil, &googleapi.Error{
+			Code:   res.StatusCode,
+			Header: res.Header,
+		}
+	}
+	if err != nil {
+		return nil, err
+	}
+	defer googleapi.CloseBody(res)
+	if err := googleapi.CheckResponse(res); err != nil {
+		return nil, err
+	}
+	ret := &Empty{
+		ServerResponse: googleapi.ServerResponse{
+			Header:         res.Header,
+			HTTPStatusCode: res.StatusCode,
+		},
+	}
+	target := &ret
+	if err := json.NewDecoder(res.Body).Decode(target); err != nil {
+		return nil, err
+	}
+	return ret, nil
+	// {
+	//   "description": "Cancels an operation. Use the get method to check whether the cancellation succeeded or whether the operation completed despite cancellation.",
+	//   "flatPath": "v2beta1/inspect/operations/{operationsId}:cancel",
+	//   "httpMethod": "POST",
+	//   "id": "dlp.inspect.operations.cancel",
+	//   "parameterOrder": [
+	//     "name"
+	//   ],
+	//   "parameters": {
+	//     "name": {
+	//       "description": "The name of the operation resource to be cancelled.",
+	//       "location": "path",
+	//       "pattern": "^inspect/operations/[^/]+$",
+	//       "required": true,
+	//       "type": "string"
+	//     }
+	//   },
+	//   "path": "v2beta1/{+name}:cancel",
+	//   "request": {
+	//     "$ref": "CancelOperationRequest"
+	//   },
+	//   "response": {
+	//     "$ref": "Empty"
+	//   },
+	//   "scopes": [
+	//     "https://www.googleapis.com/auth/cloud-platform"
+	//   ]
+	// }
+
+}
+
+// method id "dlp.inspect.operations.create":
+
+type InspectOperationsCreateCall struct {
+	s                             *Service
+	createinspectoperationrequest *CreateInspectOperationRequest
+	urlParams_                    gensupport.URLParams
+	ctx_                          context.Context
+	header_                       http.Header
+}
+
+// Create: Schedule a job scanning content in a Google Cloud Platform
+// data repository.
+func (r *InspectOperationsService) Create(createinspectoperationrequest *CreateInspectOperationRequest) *InspectOperationsCreateCall {
+	c := &InspectOperationsCreateCall{s: r.s, urlParams_: make(gensupport.URLParams)}
+	c.createinspectoperationrequest = createinspectoperationrequest
+	return c
+}
+
+// Fields allows partial responses to be retrieved. See
+// https://developers.google.com/gdata/docs/2.0/basics#PartialResponse
+// for more information.
+func (c *InspectOperationsCreateCall) Fields(s ...googleapi.Field) *InspectOperationsCreateCall {
+	c.urlParams_.Set("fields", googleapi.CombineFields(s))
+	return c
+}
+
+// Context sets the context to be used in this call's Do method. Any
+// pending HTTP request will be aborted if the provided context is
+// canceled.
+func (c *InspectOperationsCreateCall) Context(ctx context.Context) *InspectOperationsCreateCall {
+	c.ctx_ = ctx
+	return c
+}
+
+// Header returns an http.Header that can be modified by the caller to
+// add HTTP headers to the request.
+func (c *InspectOperationsCreateCall) Header() http.Header {
+	if c.header_ == nil {
+		c.header_ = make(http.Header)
+	}
+	return c.header_
+}
+
+func (c *InspectOperationsCreateCall) doRequest(alt string) (*http.Response, error) {
+	reqHeaders := make(http.Header)
+	for k, v := range c.header_ {
+		reqHeaders[k] = v
+	}
+	reqHeaders.Set("User-Agent", c.s.userAgent())
+	var body io.Reader = nil
+	body, err := googleapi.WithoutDataWrapper.JSONReader(c.createinspectoperationrequest)
+	if err != nil {
+		return nil, err
+	}
+	reqHeaders.Set("Content-Type", "application/json")
+	c.urlParams_.Set("alt", alt)
+	urls := googleapi.ResolveRelative(c.s.BasePath, "v2beta1/inspect/operations")
+	urls += "?" + c.urlParams_.Encode()
+	req, _ := http.NewRequest("POST", urls, body)
+	req.Header = reqHeaders
+	return gensupport.SendRequest(c.ctx_, c.s.client, req)
+}
+
+// Do executes the "dlp.inspect.operations.create" call.
+// Exactly one of *Operation or error will be non-nil. Any non-2xx
+// status code is an error. Response headers are in either
+// *Operation.ServerResponse.Header or (if a response was returned at
+// all) in error.(*googleapi.Error).Header. Use googleapi.IsNotModified
+// to check whether the returned error was because
+// http.StatusNotModified was returned.
+func (c *InspectOperationsCreateCall) Do(opts ...googleapi.CallOption) (*Operation, error) {
+	gensupport.SetOptions(c.urlParams_, opts...)
+	res, err := c.doRequest("json")
+	if res != nil && res.StatusCode == http.StatusNotModified {
+		if res.Body != nil {
+			res.Body.Close()
+		}
+		return nil, &googleapi.Error{
+			Code:   res.StatusCode,
+			Header: res.Header,
+		}
+	}
+	if err != nil {
+		return nil, err
+	}
+	defer googleapi.CloseBody(res)
+	if err := googleapi.CheckResponse(res); err != nil {
+		return nil, err
+	}
+	ret := &Operation{
+		ServerResponse: googleapi.ServerResponse{
+			Header:         res.Header,
+			HTTPStatusCode: res.StatusCode,
+		},
+	}
+	target := &ret
+	if err := json.NewDecoder(res.Body).Decode(target); err != nil {
+		return nil, err
+	}
+	return ret, nil
+	// {
+	//   "description": "Schedule a job scanning content in a Google Cloud Platform data repository.",
+	//   "flatPath": "v2beta1/inspect/operations",
+	//   "httpMethod": "POST",
+	//   "id": "dlp.inspect.operations.create",
+	//   "parameterOrder": [],
+	//   "parameters": {},
+	//   "path": "v2beta1/inspect/operations",
+	//   "request": {
+	//     "$ref": "CreateInspectOperationRequest"
+	//   },
+	//   "response": {
+	//     "$ref": "Operation"
+	//   },
+	//   "scopes": [
+	//     "https://www.googleapis.com/auth/cloud-platform"
+	//   ]
+	// }
+
+}
+
+// method id "dlp.inspect.operations.delete":
+
+type InspectOperationsDeleteCall struct {
+	s          *Service
+	name       string
+	urlParams_ gensupport.URLParams
+	ctx_       context.Context
+	header_    http.Header
+}
+
+// Delete: This method is not supported and the server returns
+// `UNIMPLEMENTED`.
+func (r *InspectOperationsService) Delete(name string) *InspectOperationsDeleteCall {
+	c := &InspectOperationsDeleteCall{s: r.s, urlParams_: make(gensupport.URLParams)}
+	c.name = name
+	return c
+}
+
+// Fields allows partial responses to be retrieved. See
+// https://developers.google.com/gdata/docs/2.0/basics#PartialResponse
+// for more information.
+func (c *InspectOperationsDeleteCall) Fields(s ...googleapi.Field) *InspectOperationsDeleteCall {
+	c.urlParams_.Set("fields", googleapi.CombineFields(s))
+	return c
+}
+
+// Context sets the context to be used in this call's Do method. Any
+// pending HTTP request will be aborted if the provided context is
+// canceled.
+func (c *InspectOperationsDeleteCall) Context(ctx context.Context) *InspectOperationsDeleteCall {
+	c.ctx_ = ctx
+	return c
+}
+
+// Header returns an http.Header that can be modified by the caller to
+// add HTTP headers to the request.
+func (c *InspectOperationsDeleteCall) Header() http.Header {
+	if c.header_ == nil {
+		c.header_ = make(http.Header)
+	}
+	return c.header_
+}
+
+func (c *InspectOperationsDeleteCall) doRequest(alt string) (*http.Response, error) {
+	reqHeaders := make(http.Header)
+	for k, v := range c.header_ {
+		reqHeaders[k] = v
+	}
+	reqHeaders.Set("User-Agent", c.s.userAgent())
+	var body io.Reader = nil
+	c.urlParams_.Set("alt", alt)
+	urls := googleapi.ResolveRelative(c.s.BasePath, "v2beta1/{+name}")
+	urls += "?" + c.urlParams_.Encode()
+	req, _ := http.NewRequest("DELETE", urls, body)
+	req.Header = reqHeaders
+	googleapi.Expand(req.URL, map[string]string{
+		"name": c.name,
+	})
+	return gensupport.SendRequest(c.ctx_, c.s.client, req)
+}
+
+// Do executes the "dlp.inspect.operations.delete" call.
+// Exactly one of *Empty or error will be non-nil. Any non-2xx status
+// code is an error. Response headers are in either
+// *Empty.ServerResponse.Header or (if a response was returned at all)
+// in error.(*googleapi.Error).Header. Use googleapi.IsNotModified to
+// check whether the returned error was because http.StatusNotModified
+// was returned.
+func (c *InspectOperationsDeleteCall) Do(opts ...googleapi.CallOption) (*Empty, error) {
+	gensupport.SetOptions(c.urlParams_, opts...)
+	res, err := c.doRequest("json")
+	if res != nil && res.StatusCode == http.StatusNotModified {
+		if res.Body != nil {
+			res.Body.Close()
+		}
+		return nil, &googleapi.Error{
+			Code:   res.StatusCode,
+			Header: res.Header,
+		}
+	}
+	if err != nil {
+		return nil, err
+	}
+	defer googleapi.CloseBody(res)
+	if err := googleapi.CheckResponse(res); err != nil {
+		return nil, err
+	}
+	ret := &Empty{
+		ServerResponse: googleapi.ServerResponse{
+			Header:         res.Header,
+			HTTPStatusCode: res.StatusCode,
+		},
+	}
+	target := &ret
+	if err := json.NewDecoder(res.Body).Decode(target); err != nil {
+		return nil, err
+	}
+	return ret, nil
+	// {
+	//   "description": "This method is not supported and the server returns `UNIMPLEMENTED`.",
+	//   "flatPath": "v2beta1/inspect/operations/{operationsId}",
+	//   "httpMethod": "DELETE",
+	//   "id": "dlp.inspect.operations.delete",
+	//   "parameterOrder": [
+	//     "name"
+	//   ],
+	//   "parameters": {
+	//     "name": {
+	//       "description": "The name of the operation resource to be deleted.",
+	//       "location": "path",
+	//       "pattern": "^inspect/operations/[^/]+$",
+	//       "required": true,
+	//       "type": "string"
+	//     }
+	//   },
+	//   "path": "v2beta1/{+name}",
+	//   "response": {
+	//     "$ref": "Empty"
+	//   },
+	//   "scopes": [
+	//     "https://www.googleapis.com/auth/cloud-platform"
+	//   ]
+	// }
+
+}
+
+// method id "dlp.inspect.operations.get":
+
+type InspectOperationsGetCall struct {
+	s            *Service
+	name         string
+	urlParams_   gensupport.URLParams
+	ifNoneMatch_ string
+	ctx_         context.Context
+	header_      http.Header
+}
+
+// Get: 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.
+func (r *InspectOperationsService) Get(name string) *InspectOperationsGetCall {
+	c := &InspectOperationsGetCall{s: r.s, urlParams_: make(gensupport.URLParams)}
+	c.name = name
+	return c
+}
+
+// Fields allows partial responses to be retrieved. See
+// https://developers.google.com/gdata/docs/2.0/basics#PartialResponse
+// for more information.
+func (c *InspectOperationsGetCall) Fields(s ...googleapi.Field) *InspectOperationsGetCall {
+	c.urlParams_.Set("fields", googleapi.CombineFields(s))
+	return c
+}
+
+// IfNoneMatch sets the optional parameter which makes the operation
+// fail if the object's ETag matches the given value. This is useful for
+// getting updates only after the object has changed since the last
+// request. Use googleapi.IsNotModified to check whether the response
+// error from Do is the result of In-None-Match.
+func (c *InspectOperationsGetCall) IfNoneMatch(entityTag string) *InspectOperationsGetCall {
+	c.ifNoneMatch_ = entityTag
+	return c
+}
+
+// Context sets the context to be used in this call's Do method. Any
+// pending HTTP request will be aborted if the provided context is
+// canceled.
+func (c *InspectOperationsGetCall) Context(ctx context.Context) *InspectOperationsGetCall {
+	c.ctx_ = ctx
+	return c
+}
+
+// Header returns an http.Header that can be modified by the caller to
+// add HTTP headers to the request.
+func (c *InspectOperationsGetCall) Header() http.Header {
+	if c.header_ == nil {
+		c.header_ = make(http.Header)
+	}
+	return c.header_
+}
+
+func (c *InspectOperationsGetCall) doRequest(alt string) (*http.Response, error) {
+	reqHeaders := make(http.Header)
+	for k, v := range c.header_ {
+		reqHeaders[k] = v
+	}
+	reqHeaders.Set("User-Agent", c.s.userAgent())
+	if c.ifNoneMatch_ != "" {
+		reqHeaders.Set("If-None-Match", c.ifNoneMatch_)
+	}
+	var body io.Reader = nil
+	c.urlParams_.Set("alt", alt)
+	urls := googleapi.ResolveRelative(c.s.BasePath, "v2beta1/{+name}")
+	urls += "?" + c.urlParams_.Encode()
+	req, _ := http.NewRequest("GET", urls, body)
+	req.Header = reqHeaders
+	googleapi.Expand(req.URL, map[string]string{
+		"name": c.name,
+	})
+	return gensupport.SendRequest(c.ctx_, c.s.client, req)
+}
+
+// Do executes the "dlp.inspect.operations.get" call.
+// Exactly one of *Operation or error will be non-nil. Any non-2xx
+// status code is an error. Response headers are in either
+// *Operation.ServerResponse.Header or (if a response was returned at
+// all) in error.(*googleapi.Error).Header. Use googleapi.IsNotModified
+// to check whether the returned error was because
+// http.StatusNotModified was returned.
+func (c *InspectOperationsGetCall) Do(opts ...googleapi.CallOption) (*Operation, error) {
+	gensupport.SetOptions(c.urlParams_, opts...)
+	res, err := c.doRequest("json")
+	if res != nil && res.StatusCode == http.StatusNotModified {
+		if res.Body != nil {
+			res.Body.Close()
+		}
+		return nil, &googleapi.Error{
+			Code:   res.StatusCode,
+			Header: res.Header,
+		}
+	}
+	if err != nil {
+		return nil, err
+	}
+	defer googleapi.CloseBody(res)
+	if err := googleapi.CheckResponse(res); err != nil {
+		return nil, err
+	}
+	ret := &Operation{
+		ServerResponse: googleapi.ServerResponse{
+			Header:         res.Header,
+			HTTPStatusCode: res.StatusCode,
+		},
+	}
+	target := &ret
+	if err := json.NewDecoder(res.Body).Decode(target); err != nil {
+		return nil, err
+	}
+	return ret, nil
+	// {
+	//   "description": "Gets the latest state of a long-running operation.  Clients can use this\nmethod to poll the operation result at intervals as recommended by the API\nservice.",
+	//   "flatPath": "v2beta1/inspect/operations/{operationsId}",
+	//   "httpMethod": "GET",
+	//   "id": "dlp.inspect.operations.get",
+	//   "parameterOrder": [
+	//     "name"
+	//   ],
+	//   "parameters": {
+	//     "name": {
+	//       "description": "The name of the operation resource.",
+	//       "location": "path",
+	//       "pattern": "^inspect/operations/[^/]+$",
+	//       "required": true,
+	//       "type": "string"
+	//     }
+	//   },
+	//   "path": "v2beta1/{+name}",
+	//   "response": {
+	//     "$ref": "Operation"
+	//   },
+	//   "scopes": [
+	//     "https://www.googleapis.com/auth/cloud-platform"
+	//   ]
+	// }
+
+}
+
+// method id "dlp.inspect.operations.list":
+
+type InspectOperationsListCall struct {
+	s            *Service
+	name         string
+	urlParams_   gensupport.URLParams
+	ifNoneMatch_ string
+	ctx_         context.Context
+	header_      http.Header
+}
+
+// List: 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 below allows API services to override the
+// binding
+// to use different resource name schemes, such as `users/*/operations`.
+func (r *InspectOperationsService) List(name string) *InspectOperationsListCall {
+	c := &InspectOperationsListCall{s: r.s, urlParams_: make(gensupport.URLParams)}
+	c.name = name
+	return c
+}
+
+// Filter sets the optional parameter "filter": This parameter supports
+// filtering by done, ie done=true or done=false.
+func (c *InspectOperationsListCall) Filter(filter string) *InspectOperationsListCall {
+	c.urlParams_.Set("filter", filter)
+	return c
+}
+
+// PageSize sets the optional parameter "pageSize": The list page size.
+// The max allowed value is 256 and default is 100.
+func (c *InspectOperationsListCall) PageSize(pageSize int64) *InspectOperationsListCall {
+	c.urlParams_.Set("pageSize", fmt.Sprint(pageSize))
+	return c
+}
+
+// PageToken sets the optional parameter "pageToken": The list page
+// token.
+func (c *InspectOperationsListCall) PageToken(pageToken string) *InspectOperationsListCall {
+	c.urlParams_.Set("pageToken", pageToken)
+	return c
+}
+
+// Fields allows partial responses to be retrieved. See
+// https://developers.google.com/gdata/docs/2.0/basics#PartialResponse
+// for more information.
+func (c *InspectOperationsListCall) Fields(s ...googleapi.Field) *InspectOperationsListCall {
+	c.urlParams_.Set("fields", googleapi.CombineFields(s))
+	return c
+}
+
+// IfNoneMatch sets the optional parameter which makes the operation
+// fail if the object's ETag matches the given value. This is useful for
+// getting updates only after the object has changed since the last
+// request. Use googleapi.IsNotModified to check whether the response
+// error from Do is the result of In-None-Match.
+func (c *InspectOperationsListCall) IfNoneMatch(entityTag string) *InspectOperationsListCall {
+	c.ifNoneMatch_ = entityTag
+	return c
+}
+
+// Context sets the context to be used in this call's Do method. Any
+// pending HTTP request will be aborted if the provided context is
+// canceled.
+func (c *InspectOperationsListCall) Context(ctx context.Context) *InspectOperationsListCall {
+	c.ctx_ = ctx
+	return c
+}
+
+// Header returns an http.Header that can be modified by the caller to
+// add HTTP headers to the request.
+func (c *InspectOperationsListCall) Header() http.Header {
+	if c.header_ == nil {
+		c.header_ = make(http.Header)
+	}
+	return c.header_
+}
+
+func (c *InspectOperationsListCall) doRequest(alt string) (*http.Response, error) {
+	reqHeaders := make(http.Header)
+	for k, v := range c.header_ {
+		reqHeaders[k] = v
+	}
+	reqHeaders.Set("User-Agent", c.s.userAgent())
+	if c.ifNoneMatch_ != "" {
+		reqHeaders.Set("If-None-Match", c.ifNoneMatch_)
+	}
+	var body io.Reader = nil
+	c.urlParams_.Set("alt", alt)
+	urls := googleapi.ResolveRelative(c.s.BasePath, "v2beta1/{+name}")
+	urls += "?" + c.urlParams_.Encode()
+	req, _ := http.NewRequest("GET", urls, body)
+	req.Header = reqHeaders
+	googleapi.Expand(req.URL, map[string]string{
+		"name": c.name,
+	})
+	return gensupport.SendRequest(c.ctx_, c.s.client, req)
+}
+
+// Do executes the "dlp.inspect.operations.list" call.
+// Exactly one of *ListOperationsResponse or error will be non-nil. Any
+// non-2xx status code is an error. Response headers are in either
+// *ListOperationsResponse.ServerResponse.Header or (if a response was
+// returned at all) in error.(*googleapi.Error).Header. Use
+// googleapi.IsNotModified to check whether the returned error was
+// because http.StatusNotModified was returned.
+func (c *InspectOperationsListCall) Do(opts ...googleapi.CallOption) (*ListOperationsResponse, error) {
+	gensupport.SetOptions(c.urlParams_, opts...)
+	res, err := c.doRequest("json")
+	if res != nil && res.StatusCode == http.StatusNotModified {
+		if res.Body != nil {
+			res.Body.Close()
+		}
+		return nil, &googleapi.Error{
+			Code:   res.StatusCode,
+			Header: res.Header,
+		}
+	}
+	if err != nil {
+		return nil, err
+	}
+	defer googleapi.CloseBody(res)
+	if err := googleapi.CheckResponse(res); err != nil {
+		return nil, err
+	}
+	ret := &ListOperationsResponse{
+		ServerResponse: googleapi.ServerResponse{
+			Header:         res.Header,
+			HTTPStatusCode: res.StatusCode,
+		},
+	}
+	target := &ret
+	if err := json.NewDecoder(res.Body).Decode(target); err != nil {
+		return nil, err
+	}
+	return ret, nil
+	// {
+	//   "description": "Lists operations that match the specified filter in the request. If the\nserver doesn't support this method, it returns `UNIMPLEMENTED`.\n\nNOTE: the `name` binding below allows API services to override the binding\nto use different resource name schemes, such as `users/*/operations`.",
+	//   "flatPath": "v2beta1/inspect/operations",
+	//   "httpMethod": "GET",
+	//   "id": "dlp.inspect.operations.list",
+	//   "parameterOrder": [
+	//     "name"
+	//   ],
+	//   "parameters": {
+	//     "filter": {
+	//       "description": "This parameter supports filtering by done, ie done=true or done=false.",
+	//       "location": "query",
+	//       "type": "string"
+	//     },
+	//     "name": {
+	//       "description": "The name of the operation collection.",
+	//       "location": "path",
+	//       "pattern": "^inspect/operations$",
+	//       "required": true,
+	//       "type": "string"
+	//     },
+	//     "pageSize": {
+	//       "description": "The list page size. The max allowed value is 256 and default is 100.",
+	//       "format": "int32",
+	//       "location": "query",
+	//       "type": "integer"
+	//     },
+	//     "pageToken": {
+	//       "description": "The list page token.",
+	//       "location": "query",
+	//       "type": "string"
+	//     }
+	//   },
+	//   "path": "v2beta1/{+name}",
+	//   "response": {
+	//     "$ref": "ListOperationsResponse"
+	//   },
+	//   "scopes": [
+	//     "https://www.googleapis.com/auth/cloud-platform"
+	//   ]
+	// }
+
+}
+
+// Pages invokes f for each page of results.
+// A non-nil error returned from f will halt the iteration.
+// The provided context supersedes any context provided to the Context method.
+func (c *InspectOperationsListCall) Pages(ctx context.Context, f func(*ListOperationsResponse) error) error {
+	c.ctx_ = ctx
+	defer c.PageToken(c.urlParams_.Get("pageToken")) // reset paging to original point
+	for {
+		x, err := c.Do()
+		if err != nil {
+			return err
+		}
+		if err := f(x); err != nil {
+			return err
+		}
+		if x.NextPageToken == "" {
+			return nil
+		}
+		c.PageToken(x.NextPageToken)
+	}
+}
+
+// method id "dlp.inspect.results.findings.list":
+
+type InspectResultsFindingsListCall struct {
+	s            *Service
+	name         string
+	urlParams_   gensupport.URLParams
+	ifNoneMatch_ string
+	ctx_         context.Context
+	header_      http.Header
+}
+
+// List: Returns list of results for given inspect operation result set
+// id.
+func (r *InspectResultsFindingsService) List(name string) *InspectResultsFindingsListCall {
+	c := &InspectResultsFindingsListCall{s: r.s, urlParams_: make(gensupport.URLParams)}
+	c.name = name
+	return c
+}
+
+// PageSize sets the optional parameter "pageSize": Maximum number of
+// results to return.
+// If 0, the implementation will select a reasonable value.
+func (c *InspectResultsFindingsListCall) PageSize(pageSize int64) *InspectResultsFindingsListCall {
+	c.urlParams_.Set("pageSize", fmt.Sprint(pageSize))
+	return c
+}
+
+// PageToken sets the optional parameter "pageToken": The value returned
+// by the last `ListInspectFindingsResponse`; indicates
+// that this is a continuation of a prior `ListInspectFindings` call,
+// and that
+// the system should return the next page of data.
+func (c *InspectResultsFindingsListCall) PageToken(pageToken string) *InspectResultsFindingsListCall {
+	c.urlParams_.Set("pageToken", pageToken)
+	return c
+}
+
+// Fields allows partial responses to be retrieved. See
+// https://developers.google.com/gdata/docs/2.0/basics#PartialResponse
+// for more information.
+func (c *InspectResultsFindingsListCall) Fields(s ...googleapi.Field) *InspectResultsFindingsListCall {
+	c.urlParams_.Set("fields", googleapi.CombineFields(s))
+	return c
+}
+
+// IfNoneMatch sets the optional parameter which makes the operation
+// fail if the object's ETag matches the given value. This is useful for
+// getting updates only after the object has changed since the last
+// request. Use googleapi.IsNotModified to check whether the response
+// error from Do is the result of In-None-Match.
+func (c *InspectResultsFindingsListCall) IfNoneMatch(entityTag string) *InspectResultsFindingsListCall {
+	c.ifNoneMatch_ = entityTag
+	return c
+}
+
+// Context sets the context to be used in this call's Do method. Any
+// pending HTTP request will be aborted if the provided context is
+// canceled.
+func (c *InspectResultsFindingsListCall) Context(ctx context.Context) *InspectResultsFindingsListCall {
+	c.ctx_ = ctx
+	return c
+}
+
+// Header returns an http.Header that can be modified by the caller to
+// add HTTP headers to the request.
+func (c *InspectResultsFindingsListCall) Header() http.Header {
+	if c.header_ == nil {
+		c.header_ = make(http.Header)
+	}
+	return c.header_
+}
+
+func (c *InspectResultsFindingsListCall) doRequest(alt string) (*http.Response, error) {
+	reqHeaders := make(http.Header)
+	for k, v := range c.header_ {
+		reqHeaders[k] = v
+	}
+	reqHeaders.Set("User-Agent", c.s.userAgent())
+	if c.ifNoneMatch_ != "" {
+		reqHeaders.Set("If-None-Match", c.ifNoneMatch_)
+	}
+	var body io.Reader = nil
+	c.urlParams_.Set("alt", alt)
+	urls := googleapi.ResolveRelative(c.s.BasePath, "v2beta1/{+name}/findings")
+	urls += "?" + c.urlParams_.Encode()
+	req, _ := http.NewRequest("GET", urls, body)
+	req.Header = reqHeaders
+	googleapi.Expand(req.URL, map[string]string{
+		"name": c.name,
+	})
+	return gensupport.SendRequest(c.ctx_, c.s.client, req)
+}
+
+// Do executes the "dlp.inspect.results.findings.list" call.
+// Exactly one of *ListInspectFindingsResponse or error will be non-nil.
+// Any non-2xx status code is an error. Response headers are in either
+// *ListInspectFindingsResponse.ServerResponse.Header or (if a response
+// was returned at all) in error.(*googleapi.Error).Header. Use
+// googleapi.IsNotModified to check whether the returned error was
+// because http.StatusNotModified was returned.
+func (c *InspectResultsFindingsListCall) Do(opts ...googleapi.CallOption) (*ListInspectFindingsResponse, error) {
+	gensupport.SetOptions(c.urlParams_, opts...)
+	res, err := c.doRequest("json")
+	if res != nil && res.StatusCode == http.StatusNotModified {
+		if res.Body != nil {
+			res.Body.Close()
+		}
+		return nil, &googleapi.Error{
+			Code:   res.StatusCode,
+			Header: res.Header,
+		}
+	}
+	if err != nil {
+		return nil, err
+	}
+	defer googleapi.CloseBody(res)
+	if err := googleapi.CheckResponse(res); err != nil {
+		return nil, err
+	}
+	ret := &ListInspectFindingsResponse{
+		ServerResponse: googleapi.ServerResponse{
+			Header:         res.Header,
+			HTTPStatusCode: res.StatusCode,
+		},
+	}
+	target := &ret
+	if err := json.NewDecoder(res.Body).Decode(target); err != nil {
+		return nil, err
+	}
+	return ret, nil
+	// {
+	//   "description": "Returns list of results for given inspect operation result set id.",
+	//   "flatPath": "v2beta1/inspect/results/{resultsId}/findings",
+	//   "httpMethod": "GET",
+	//   "id": "dlp.inspect.results.findings.list",
+	//   "parameterOrder": [
+	//     "name"
+	//   ],
+	//   "parameters": {
+	//     "name": {
+	//       "description": "Identifier of the results set returned as metadata of\nthe longrunning operation created by a call to CreateInspectOperation.\nShould be in the format of `inspect/results/{id}.",
+	//       "location": "path",
+	//       "pattern": "^inspect/results/[^/]+$",
+	//       "required": true,
+	//       "type": "string"
+	//     },
+	//     "pageSize": {
+	//       "description": "Maximum number of results to return.\nIf 0, the implementation will select a reasonable value.",
+	//       "format": "int32",
+	//       "location": "query",
+	//       "type": "integer"
+	//     },
+	//     "pageToken": {
+	//       "description": "The value returned by the last `ListInspectFindingsResponse`; indicates\nthat this is a continuation of a prior `ListInspectFindings` call, and that\nthe system should return the next page of data.",
+	//       "location": "query",
+	//       "type": "string"
+	//     }
+	//   },
+	//   "path": "v2beta1/{+name}/findings",
+	//   "response": {
+	//     "$ref": "ListInspectFindingsResponse"
+	//   },
+	//   "scopes": [
+	//     "https://www.googleapis.com/auth/cloud-platform"
+	//   ]
+	// }
+
+}
+
+// Pages invokes f for each page of results.
+// A non-nil error returned from f will halt the iteration.
+// The provided context supersedes any context provided to the Context method.
+func (c *InspectResultsFindingsListCall) Pages(ctx context.Context, f func(*ListInspectFindingsResponse) error) error {
+	c.ctx_ = ctx
+	defer c.PageToken(c.urlParams_.Get("pageToken")) // reset paging to original point
+	for {
+		x, err := c.Do()
+		if err != nil {
+			return err
+		}
+		if err := f(x); err != nil {
+			return err
+		}
+		if x.NextPageToken == "" {
+			return nil
+		}
+		c.PageToken(x.NextPageToken)
+	}
+}
+
+// method id "dlp.rootCategories.list":
+
+type RootCategoriesListCall struct {
+	s            *Service
+	urlParams_   gensupport.URLParams
+	ifNoneMatch_ string
+	ctx_         context.Context
+	header_      http.Header
+}
+
+// List: Returns the list of root categories of sensitive information.
+func (r *RootCategoriesService) List() *RootCategoriesListCall {
+	c := &RootCategoriesListCall{s: r.s, urlParams_: make(gensupport.URLParams)}
+	return c
+}
+
+// LanguageCode sets the optional parameter "languageCode": Optional
+// language code for localized friendly category names.
+// If omitted or if localized strings are not available,
+// en-US strings will be returned.
+func (c *RootCategoriesListCall) LanguageCode(languageCode string) *RootCategoriesListCall {
+	c.urlParams_.Set("languageCode", languageCode)
+	return c
+}
+
+// Fields allows partial responses to be retrieved. See
+// https://developers.google.com/gdata/docs/2.0/basics#PartialResponse
+// for more information.
+func (c *RootCategoriesListCall) Fields(s ...googleapi.Field) *RootCategoriesListCall {
+	c.urlParams_.Set("fields", googleapi.CombineFields(s))
+	return c
+}
+
+// IfNoneMatch sets the optional parameter which makes the operation
+// fail if the object's ETag matches the given value. This is useful for
+// getting updates only after the object has changed since the last
+// request. Use googleapi.IsNotModified to check whether the response
+// error from Do is the result of In-None-Match.
+func (c *RootCategoriesListCall) IfNoneMatch(entityTag string) *RootCategoriesListCall {
+	c.ifNoneMatch_ = entityTag
+	return c
+}
+
+// Context sets the context to be used in this call's Do method. Any
+// pending HTTP request will be aborted if the provided context is
+// canceled.
+func (c *RootCategoriesListCall) Context(ctx context.Context) *RootCategoriesListCall {
+	c.ctx_ = ctx
+	return c
+}
+
+// Header returns an http.Header that can be modified by the caller to
+// add HTTP headers to the request.
+func (c *RootCategoriesListCall) Header() http.Header {
+	if c.header_ == nil {
+		c.header_ = make(http.Header)
+	}
+	return c.header_
+}
+
+func (c *RootCategoriesListCall) doRequest(alt string) (*http.Response, error) {
+	reqHeaders := make(http.Header)
+	for k, v := range c.header_ {
+		reqHeaders[k] = v
+	}
+	reqHeaders.Set("User-Agent", c.s.userAgent())
+	if c.ifNoneMatch_ != "" {
+		reqHeaders.Set("If-None-Match", c.ifNoneMatch_)
+	}
+	var body io.Reader = nil
+	c.urlParams_.Set("alt", alt)
+	urls := googleapi.ResolveRelative(c.s.BasePath, "v2beta1/rootCategories")
+	urls += "?" + c.urlParams_.Encode()
+	req, _ := http.NewRequest("GET", urls, body)
+	req.Header = reqHeaders
+	return gensupport.SendRequest(c.ctx_, c.s.client, req)
+}
+
+// Do executes the "dlp.rootCategories.list" call.
+// Exactly one of *ListRootCategoriesResponse or error will be non-nil.
+// Any non-2xx status code is an error. Response headers are in either
+// *ListRootCategoriesResponse.ServerResponse.Header or (if a response
+// was returned at all) in error.(*googleapi.Error).Header. Use
+// googleapi.IsNotModified to check whether the returned error was
+// because http.StatusNotModified was returned.
+func (c *RootCategoriesListCall) Do(opts ...googleapi.CallOption) (*ListRootCategoriesResponse, error) {
+	gensupport.SetOptions(c.urlParams_, opts...)
+	res, err := c.doRequest("json")
+	if res != nil && res.StatusCode == http.StatusNotModified {
+		if res.Body != nil {
+			res.Body.Close()
+		}
+		return nil, &googleapi.Error{
+			Code:   res.StatusCode,
+			Header: res.Header,
+		}
+	}
+	if err != nil {
+		return nil, err
+	}
+	defer googleapi.CloseBody(res)
+	if err := googleapi.CheckResponse(res); err != nil {
+		return nil, err
+	}
+	ret := &ListRootCategoriesResponse{
+		ServerResponse: googleapi.ServerResponse{
+			Header:         res.Header,
+			HTTPStatusCode: res.StatusCode,
+		},
+	}
+	target := &ret
+	if err := json.NewDecoder(res.Body).Decode(target); err != nil {
+		return nil, err
+	}
+	return ret, nil
+	// {
+	//   "description": "Returns the list of root categories of sensitive information.",
+	//   "flatPath": "v2beta1/rootCategories",
+	//   "httpMethod": "GET",
+	//   "id": "dlp.rootCategories.list",
+	//   "parameterOrder": [],
+	//   "parameters": {
+	//     "languageCode": {
+	//       "description": "Optional language code for localized friendly category names.\nIf omitted or if localized strings are not available,\nen-US strings will be returned.",
+	//       "location": "query",
+	//       "type": "string"
+	//     }
+	//   },
+	//   "path": "v2beta1/rootCategories",
+	//   "response": {
+	//     "$ref": "ListRootCategoriesResponse"
+	//   },
+	//   "scopes": [
+	//     "https://www.googleapis.com/auth/cloud-platform"
+	//   ]
+	// }
+
+}
+
+// method id "dlp.rootCategories.infoTypes.list":
+
+type RootCategoriesInfoTypesListCall struct {
+	s            *Service
+	category     string
+	urlParams_   gensupport.URLParams
+	ifNoneMatch_ string
+	ctx_         context.Context
+	header_      http.Header
+}
+
+// List: Returns sensitive information types for given category.
+func (r *RootCategoriesInfoTypesService) List(category string) *RootCategoriesInfoTypesListCall {
+	c := &RootCategoriesInfoTypesListCall{s: r.s, urlParams_: make(gensupport.URLParams)}
+	c.category = category
+	return c
+}
+
+// LanguageCode sets the optional parameter "languageCode": Optional
+// BCP-47 language code for localized info type friendly
+// names. If omitted, or if localized strings are not available,
+// en-US strings will be returned.
+func (c *RootCategoriesInfoTypesListCall) LanguageCode(languageCode string) *RootCategoriesInfoTypesListCall {
+	c.urlParams_.Set("languageCode", languageCode)
+	return c
+}
+
+// Fields allows partial responses to be retrieved. See
+// https://developers.google.com/gdata/docs/2.0/basics#PartialResponse
+// for more information.
+func (c *RootCategoriesInfoTypesListCall) Fields(s ...googleapi.Field) *RootCategoriesInfoTypesListCall {
+	c.urlParams_.Set("fields", googleapi.CombineFields(s))
+	return c
+}
+
+// IfNoneMatch sets the optional parameter which makes the operation
+// fail if the object's ETag matches the given value. This is useful for
+// getting updates only after the object has changed since the last
+// request. Use googleapi.IsNotModified to check whether the response
+// error from Do is the result of In-None-Match.
+func (c *RootCategoriesInfoTypesListCall) IfNoneMatch(entityTag string) *RootCategoriesInfoTypesListCall {
+	c.ifNoneMatch_ = entityTag
+	return c
+}
+
+// Context sets the context to be used in this call's Do method. Any
+// pending HTTP request will be aborted if the provided context is
+// canceled.
+func (c *RootCategoriesInfoTypesListCall) Context(ctx context.Context) *RootCategoriesInfoTypesListCall {
+	c.ctx_ = ctx
+	return c
+}
+
+// Header returns an http.Header that can be modified by the caller to
+// add HTTP headers to the request.
+func (c *RootCategoriesInfoTypesListCall) Header() http.Header {
+	if c.header_ == nil {
+		c.header_ = make(http.Header)
+	}
+	return c.header_
+}
+
+func (c *RootCategoriesInfoTypesListCall) doRequest(alt string) (*http.Response, error) {
+	reqHeaders := make(http.Header)
+	for k, v := range c.header_ {
+		reqHeaders[k] = v
+	}
+	reqHeaders.Set("User-Agent", c.s.userAgent())
+	if c.ifNoneMatch_ != "" {
+		reqHeaders.Set("If-None-Match", c.ifNoneMatch_)
+	}
+	var body io.Reader = nil
+	c.urlParams_.Set("alt", alt)
+	urls := googleapi.ResolveRelative(c.s.BasePath, "v2beta1/rootCategories/{+category}/infoTypes")
+	urls += "?" + c.urlParams_.Encode()
+	req, _ := http.NewRequest("GET", urls, body)
+	req.Header = reqHeaders
+	googleapi.Expand(req.URL, map[string]string{
+		"category": c.category,
+	})
+	return gensupport.SendRequest(c.ctx_, c.s.client, req)
+}
+
+// Do executes the "dlp.rootCategories.infoTypes.list" call.
+// Exactly one of *ListInfoTypesResponse or error will be non-nil. Any
+// non-2xx status code is an error. Response headers are in either
+// *ListInfoTypesResponse.ServerResponse.Header or (if a response was
+// returned at all) in error.(*googleapi.Error).Header. Use
+// googleapi.IsNotModified to check whether the returned error was
+// because http.StatusNotModified was returned.
+func (c *RootCategoriesInfoTypesListCall) Do(opts ...googleapi.CallOption) (*ListInfoTypesResponse, error) {
+	gensupport.SetOptions(c.urlParams_, opts...)
+	res, err := c.doRequest("json")
+	if res != nil && res.StatusCode == http.StatusNotModified {
+		if res.Body != nil {
+			res.Body.Close()
+		}
+		return nil, &googleapi.Error{
+			Code:   res.StatusCode,
+			Header: res.Header,
+		}
+	}
+	if err != nil {
+		return nil, err
+	}
+	defer googleapi.CloseBody(res)
+	if err := googleapi.CheckResponse(res); err != nil {
+		return nil, err
+	}
+	ret := &ListInfoTypesResponse{
+		ServerResponse: googleapi.ServerResponse{
+			Header:         res.Header,
+			HTTPStatusCode: res.StatusCode,
+		},
+	}
+	target := &ret
+	if err := json.NewDecoder(res.Body).Decode(target); err != nil {
+		return nil, err
+	}
+	return ret, nil
+	// {
+	//   "description": "Returns sensitive information types for given category.",
+	//   "flatPath": "v2beta1/rootCategories/{rootCategoriesId}/infoTypes",
+	//   "httpMethod": "GET",
+	//   "id": "dlp.rootCategories.infoTypes.list",
+	//   "parameterOrder": [
+	//     "category"
+	//   ],
+	//   "parameters": {
+	//     "category": {
+	//       "description": "Category name as returned by ListRootCategories.",
+	//       "location": "path",
+	//       "pattern": "^[^/]+$",
+	//       "required": true,
+	//       "type": "string"
+	//     },
+	//     "languageCode": {
+	//       "description": "Optional BCP-47 language code for localized info type friendly\nnames. If omitted, or if localized strings are not available,\nen-US strings will be returned.",
+	//       "location": "query",
+	//       "type": "string"
+	//     }
+	//   },
+	//   "path": "v2beta1/rootCategories/{+category}/infoTypes",
+	//   "response": {
+	//     "$ref": "ListInfoTypesResponse"
+	//   },
+	//   "scopes": [
+	//     "https://www.googleapis.com/auth/cloud-platform"
+	//   ]
+	// }
+
+}
diff --git a/dns/v1/dns-gen.go b/dns/v1/dns-gen.go
index 675111a..fa66410 100644
--- a/dns/v1/dns-gen.go
+++ b/dns/v1/dns-gen.go
@@ -73,10 +73,9 @@
 }
 
 type Service struct {
-	client                    *http.Client
-	BasePath                  string // API endpoint base URL
-	UserAgent                 string // optional additional User-Agent fragment
-	GoogleClientHeaderElement string // client header fragment, for Google use only
+	client    *http.Client
+	BasePath  string // API endpoint base URL
+	UserAgent string // optional additional User-Agent fragment
 
 	Changes *ChangesService
 
@@ -94,10 +93,6 @@
 	return googleapi.UserAgent + " " + s.UserAgent
 }
 
-func (s *Service) clientHeader() string {
-	return gensupport.GoogleClientHeader("20170210", s.GoogleClientHeaderElement)
-}
-
 func NewChangesService(s *Service) *ChangesService {
 	rs := &ChangesService{s: s}
 	return rs
@@ -593,7 +588,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	var body io.Reader = nil
 	body, err := googleapi.WithoutDataWrapper.JSONReader(c.change)
 	if err != nil {
@@ -749,7 +743,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	if c.ifNoneMatch_ != "" {
 		reqHeaders.Set("If-None-Match", c.ifNoneMatch_)
 	}
@@ -941,7 +934,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	if c.ifNoneMatch_ != "" {
 		reqHeaders.Set("If-None-Match", c.ifNoneMatch_)
 	}
@@ -1130,7 +1122,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	var body io.Reader = nil
 	body, err := googleapi.WithoutDataWrapper.JSONReader(c.managedzone)
 	if err != nil {
@@ -1265,7 +1256,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	var body io.Reader = nil
 	c.urlParams_.Set("alt", alt)
 	urls := googleapi.ResolveRelative(c.s.BasePath, "{project}/managedZones/{managedZone}")
@@ -1383,7 +1373,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	if c.ifNoneMatch_ != "" {
 		reqHeaders.Set("If-None-Match", c.ifNoneMatch_)
 	}
@@ -1556,7 +1545,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	if c.ifNoneMatch_ != "" {
 		reqHeaders.Set("If-None-Match", c.ifNoneMatch_)
 	}
@@ -1734,7 +1722,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	if c.ifNoneMatch_ != "" {
 		reqHeaders.Set("If-None-Match", c.ifNoneMatch_)
 	}
@@ -1909,7 +1896,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	if c.ifNoneMatch_ != "" {
 		reqHeaders.Set("If-None-Match", c.ifNoneMatch_)
 	}
diff --git a/dns/v2beta1/dns-gen.go b/dns/v2beta1/dns-gen.go
index 1443855..303d5c4 100644
--- a/dns/v2beta1/dns-gen.go
+++ b/dns/v2beta1/dns-gen.go
@@ -75,10 +75,9 @@
 }
 
 type Service struct {
-	client                    *http.Client
-	BasePath                  string // API endpoint base URL
-	UserAgent                 string // optional additional User-Agent fragment
-	GoogleClientHeaderElement string // client header fragment, for Google use only
+	client    *http.Client
+	BasePath  string // API endpoint base URL
+	UserAgent string // optional additional User-Agent fragment
 
 	Changes *ChangesService
 
@@ -100,10 +99,6 @@
 	return googleapi.UserAgent + " " + s.UserAgent
 }
 
-func (s *Service) clientHeader() string {
-	return gensupport.GoogleClientHeader("20170210", s.GoogleClientHeaderElement)
-}
-
 func NewChangesService(s *Service) *ChangesService {
 	rs := &ChangesService{s: s}
 	return rs
@@ -1181,7 +1176,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	var body io.Reader = nil
 	body, err := googleapi.WithoutDataWrapper.JSONReader(c.change)
 	if err != nil {
@@ -1351,7 +1345,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	if c.ifNoneMatch_ != "" {
 		reqHeaders.Set("If-None-Match", c.ifNoneMatch_)
 	}
@@ -1548,7 +1541,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	if c.ifNoneMatch_ != "" {
 		reqHeaders.Set("If-None-Match", c.ifNoneMatch_)
 	}
@@ -1768,7 +1760,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	if c.ifNoneMatch_ != "" {
 		reqHeaders.Set("If-None-Match", c.ifNoneMatch_)
 	}
@@ -1962,7 +1953,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	if c.ifNoneMatch_ != "" {
 		reqHeaders.Set("If-None-Match", c.ifNoneMatch_)
 	}
@@ -2161,7 +2151,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	if c.ifNoneMatch_ != "" {
 		reqHeaders.Set("If-None-Match", c.ifNoneMatch_)
 	}
@@ -2352,7 +2341,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	if c.ifNoneMatch_ != "" {
 		reqHeaders.Set("If-None-Match", c.ifNoneMatch_)
 	}
@@ -2548,7 +2536,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	var body io.Reader = nil
 	body, err := googleapi.WithoutDataWrapper.JSONReader(c.managedzone)
 	if err != nil {
@@ -2697,7 +2684,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	var body io.Reader = nil
 	c.urlParams_.Set("alt", alt)
 	urls := googleapi.ResolveRelative(c.s.BasePath, "{project}/managedZones/{managedZone}")
@@ -2857,7 +2843,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	if c.ifNoneMatch_ != "" {
 		reqHeaders.Set("If-None-Match", c.ifNoneMatch_)
 	}
@@ -3035,7 +3020,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	if c.ifNoneMatch_ != "" {
 		reqHeaders.Set("If-None-Match", c.ifNoneMatch_)
 	}
@@ -3216,7 +3200,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	var body io.Reader = nil
 	body, err := googleapi.WithoutDataWrapper.JSONReader(c.managedzone)
 	if err != nil {
@@ -3375,7 +3358,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	var body io.Reader = nil
 	body, err := googleapi.WithoutDataWrapper.JSONReader(c.managedzone)
 	if err != nil {
@@ -3541,7 +3523,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	if c.ifNoneMatch_ != "" {
 		reqHeaders.Set("If-None-Match", c.ifNoneMatch_)
 	}
@@ -3721,7 +3702,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	if c.ifNoneMatch_ != "" {
 		reqHeaders.Set("If-None-Match", c.ifNoneMatch_)
 	}
diff --git a/doubleclickbidmanager/v1/doubleclickbidmanager-gen.go b/doubleclickbidmanager/v1/doubleclickbidmanager-gen.go
index 9ff4742..183c422 100644
--- a/doubleclickbidmanager/v1/doubleclickbidmanager-gen.go
+++ b/doubleclickbidmanager/v1/doubleclickbidmanager-gen.go
@@ -58,10 +58,9 @@
 }
 
 type Service struct {
-	client                    *http.Client
-	BasePath                  string // API endpoint base URL
-	UserAgent                 string // optional additional User-Agent fragment
-	GoogleClientHeaderElement string // client header fragment, for Google use only
+	client    *http.Client
+	BasePath  string // API endpoint base URL
+	UserAgent string // optional additional User-Agent fragment
 
 	Lineitems *LineitemsService
 
@@ -79,10 +78,6 @@
 	return googleapi.UserAgent + " " + s.UserAgent
 }
 
-func (s *Service) clientHeader() string {
-	return gensupport.GoogleClientHeader("20170210", s.GoogleClientHeaderElement)
-}
-
 func NewLineitemsService(s *Service) *LineitemsService {
 	rs := &LineitemsService{s: s}
 	return rs
@@ -1683,7 +1678,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	var body io.Reader = nil
 	body, err := googleapi.WithoutDataWrapper.JSONReader(c.downloadlineitemsrequest)
 	if err != nil {
@@ -1798,7 +1792,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	var body io.Reader = nil
 	body, err := googleapi.WithoutDataWrapper.JSONReader(c.uploadlineitemsrequest)
 	if err != nil {
@@ -1913,7 +1906,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	var body io.Reader = nil
 	body, err := googleapi.WithoutDataWrapper.JSONReader(c.query)
 	if err != nil {
@@ -2029,7 +2021,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	var body io.Reader = nil
 	c.urlParams_.Set("alt", alt)
 	urls := googleapi.ResolveRelative(c.s.BasePath, "query/{queryId}")
@@ -2134,7 +2125,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	if c.ifNoneMatch_ != "" {
 		reqHeaders.Set("If-None-Match", c.ifNoneMatch_)
 	}
@@ -2268,7 +2258,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	if c.ifNoneMatch_ != "" {
 		reqHeaders.Set("If-None-Match", c.ifNoneMatch_)
 	}
@@ -2380,7 +2369,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	var body io.Reader = nil
 	body, err := googleapi.WithoutDataWrapper.JSONReader(c.runqueryrequest)
 	if err != nil {
@@ -2493,7 +2481,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	if c.ifNoneMatch_ != "" {
 		reqHeaders.Set("If-None-Match", c.ifNoneMatch_)
 	}
@@ -2618,7 +2605,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	var body io.Reader = nil
 	body, err := googleapi.WithoutDataWrapper.JSONReader(c.downloadrequest)
 	if err != nil {
diff --git a/doubleclicksearch/v2/doubleclicksearch-gen.go b/doubleclicksearch/v2/doubleclicksearch-gen.go
index 16e571f..01c8494 100644
--- a/doubleclicksearch/v2/doubleclicksearch-gen.go
+++ b/doubleclicksearch/v2/doubleclicksearch-gen.go
@@ -63,10 +63,9 @@
 }
 
 type Service struct {
-	client                    *http.Client
-	BasePath                  string // API endpoint base URL
-	UserAgent                 string // optional additional User-Agent fragment
-	GoogleClientHeaderElement string // client header fragment, for Google use only
+	client    *http.Client
+	BasePath  string // API endpoint base URL
+	UserAgent string // optional additional User-Agent fragment
 
 	Conversion *ConversionService
 
@@ -82,10 +81,6 @@
 	return googleapi.UserAgent + " " + s.UserAgent
 }
 
-func (s *Service) clientHeader() string {
-	return gensupport.GoogleClientHeader("20170210", s.GoogleClientHeaderElement)
-}
-
 func NewConversionService(s *Service) *ConversionService {
 	rs := &ConversionService{s: s}
 	return rs
@@ -1104,7 +1099,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	if c.ifNoneMatch_ != "" {
 		reqHeaders.Set("If-None-Match", c.ifNoneMatch_)
 	}
@@ -1312,7 +1306,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	var body io.Reader = nil
 	body, err := googleapi.WithoutDataWrapper.JSONReader(c.conversionlist)
 	if err != nil {
@@ -1438,7 +1431,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	var body io.Reader = nil
 	body, err := googleapi.WithoutDataWrapper.JSONReader(c.conversionlist)
 	if err != nil {
@@ -1622,7 +1614,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	var body io.Reader = nil
 	body, err := googleapi.WithoutDataWrapper.JSONReader(c.conversionlist)
 	if err != nil {
@@ -1741,7 +1732,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	var body io.Reader = nil
 	body, err := googleapi.WithoutDataWrapper.JSONReader(c.updateavailabilityrequest)
 	if err != nil {
@@ -1860,7 +1850,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	var body io.Reader = nil
 	body, err := googleapi.WithoutDataWrapper.JSONReader(c.reportrequest)
 	if err != nil {
@@ -1990,7 +1979,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	if c.ifNoneMatch_ != "" {
 		reqHeaders.Set("If-None-Match", c.ifNoneMatch_)
 	}
@@ -2130,7 +2118,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	if c.ifNoneMatch_ != "" {
 		reqHeaders.Set("If-None-Match", c.ifNoneMatch_)
 	}
@@ -2257,7 +2244,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	var body io.Reader = nil
 	body, err := googleapi.WithoutDataWrapper.JSONReader(c.reportrequest)
 	if err != nil {
@@ -2389,7 +2375,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	if c.ifNoneMatch_ != "" {
 		reqHeaders.Set("If-None-Match", c.ifNoneMatch_)
 	}
diff --git a/drive/v2/drive-gen.go b/drive/v2/drive-gen.go
index 7f69502..9cdc440 100644
--- a/drive/v2/drive-gen.go
+++ b/drive/v2/drive-gen.go
@@ -99,10 +99,9 @@
 }
 
 type Service struct {
-	client                    *http.Client
-	BasePath                  string // API endpoint base URL
-	UserAgent                 string // optional additional User-Agent fragment
-	GoogleClientHeaderElement string // client header fragment, for Google use only
+	client    *http.Client
+	BasePath  string // API endpoint base URL
+	UserAgent string // optional additional User-Agent fragment
 
 	About *AboutService
 
@@ -140,10 +139,6 @@
 	return googleapi.UserAgent + " " + s.UserAgent
 }
 
-func (s *Service) clientHeader() string {
-	return gensupport.GoogleClientHeader("20170210", s.GoogleClientHeaderElement)
-}
-
 func NewAboutService(s *Service) *AboutService {
 	rs := &AboutService{s: s}
 	return rs
@@ -3104,7 +3099,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	if c.ifNoneMatch_ != "" {
 		reqHeaders.Set("If-None-Match", c.ifNoneMatch_)
 	}
@@ -3255,7 +3249,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	if c.ifNoneMatch_ != "" {
 		reqHeaders.Set("If-None-Match", c.ifNoneMatch_)
 	}
@@ -3427,7 +3420,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	if c.ifNoneMatch_ != "" {
 		reqHeaders.Set("If-None-Match", c.ifNoneMatch_)
 	}
@@ -3584,7 +3576,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	if c.ifNoneMatch_ != "" {
 		reqHeaders.Set("If-None-Match", c.ifNoneMatch_)
 	}
@@ -3754,7 +3745,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	if c.ifNoneMatch_ != "" {
 		reqHeaders.Set("If-None-Match", c.ifNoneMatch_)
 	}
@@ -3978,7 +3968,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	if c.ifNoneMatch_ != "" {
 		reqHeaders.Set("If-None-Match", c.ifNoneMatch_)
 	}
@@ -4263,7 +4252,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	var body io.Reader = nil
 	body, err := googleapi.WithoutDataWrapper.JSONReader(c.channel)
 	if err != nil {
@@ -4451,7 +4439,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	var body io.Reader = nil
 	body, err := googleapi.WithoutDataWrapper.JSONReader(c.channel)
 	if err != nil {
@@ -4551,7 +4538,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	var body io.Reader = nil
 	c.urlParams_.Set("alt", alt)
 	urls := googleapi.ResolveRelative(c.s.BasePath, "files/{folderId}/children/{childId}")
@@ -4669,7 +4655,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	if c.ifNoneMatch_ != "" {
 		reqHeaders.Set("If-None-Match", c.ifNoneMatch_)
 	}
@@ -4819,7 +4804,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	var body io.Reader = nil
 	body, err := googleapi.WithoutDataWrapper.JSONReader(c.childreference)
 	if err != nil {
@@ -5005,7 +4989,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	if c.ifNoneMatch_ != "" {
 		reqHeaders.Set("If-None-Match", c.ifNoneMatch_)
 	}
@@ -5184,7 +5167,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	var body io.Reader = nil
 	c.urlParams_.Set("alt", alt)
 	urls := googleapi.ResolveRelative(c.s.BasePath, "files/{fileId}/comments/{commentId}")
@@ -5310,7 +5292,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	if c.ifNoneMatch_ != "" {
 		reqHeaders.Set("If-None-Match", c.ifNoneMatch_)
 	}
@@ -5455,7 +5436,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	var body io.Reader = nil
 	body, err := googleapi.WithoutDataWrapper.JSONReader(c.comment)
 	if err != nil {
@@ -5631,7 +5611,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	if c.ifNoneMatch_ != "" {
 		reqHeaders.Set("If-None-Match", c.ifNoneMatch_)
 	}
@@ -5811,7 +5790,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	var body io.Reader = nil
 	body, err := googleapi.WithoutDataWrapper.JSONReader(c.comment)
 	if err != nil {
@@ -5956,7 +5934,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	var body io.Reader = nil
 	body, err := googleapi.WithoutDataWrapper.JSONReader(c.comment)
 	if err != nil {
@@ -6162,7 +6139,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	var body io.Reader = nil
 	body, err := googleapi.WithoutDataWrapper.JSONReader(c.file)
 	if err != nil {
@@ -6360,7 +6336,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	var body io.Reader = nil
 	c.urlParams_.Set("alt", alt)
 	urls := googleapi.ResolveRelative(c.s.BasePath, "files/{fileId}")
@@ -6462,7 +6437,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	var body io.Reader = nil
 	c.urlParams_.Set("alt", alt)
 	urls := googleapi.ResolveRelative(c.s.BasePath, "files/trash")
@@ -6557,7 +6531,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	if c.ifNoneMatch_ != "" {
 		reqHeaders.Set("If-None-Match", c.ifNoneMatch_)
 	}
@@ -6707,7 +6680,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	if c.ifNoneMatch_ != "" {
 		reqHeaders.Set("If-None-Match", c.ifNoneMatch_)
 	}
@@ -6892,7 +6864,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	if c.ifNoneMatch_ != "" {
 		reqHeaders.Set("If-None-Match", c.ifNoneMatch_)
 	}
@@ -7203,7 +7174,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	var body io.Reader = nil
 	body, err := googleapi.WithoutDataWrapper.JSONReader(c.file)
 	if err != nil {
@@ -7558,7 +7528,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	if c.ifNoneMatch_ != "" {
 		reqHeaders.Set("If-None-Match", c.ifNoneMatch_)
 	}
@@ -7898,7 +7867,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	var body io.Reader = nil
 	body, err := googleapi.WithoutDataWrapper.JSONReader(c.file)
 	if err != nil {
@@ -8136,7 +8104,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	var body io.Reader = nil
 	c.urlParams_.Set("alt", alt)
 	urls := googleapi.ResolveRelative(c.s.BasePath, "files/{fileId}/touch")
@@ -8279,7 +8246,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	var body io.Reader = nil
 	c.urlParams_.Set("alt", alt)
 	urls := googleapi.ResolveRelative(c.s.BasePath, "files/{fileId}/trash")
@@ -8419,7 +8385,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	var body io.Reader = nil
 	c.urlParams_.Set("alt", alt)
 	urls := googleapi.ResolveRelative(c.s.BasePath, "files/{fileId}/untrash")
@@ -8725,7 +8690,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	var body io.Reader = nil
 	body, err := googleapi.WithoutDataWrapper.JSONReader(c.file)
 	if err != nil {
@@ -9065,7 +9029,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	var body io.Reader = nil
 	body, err := googleapi.WithoutDataWrapper.JSONReader(c.channel)
 	if err != nil {
@@ -9261,7 +9224,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	var body io.Reader = nil
 	c.urlParams_.Set("alt", alt)
 	urls := googleapi.ResolveRelative(c.s.BasePath, "files/{fileId}/parents/{parentId}")
@@ -9379,7 +9341,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	if c.ifNoneMatch_ != "" {
 		reqHeaders.Set("If-None-Match", c.ifNoneMatch_)
 	}
@@ -9529,7 +9490,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	var body io.Reader = nil
 	body, err := googleapi.WithoutDataWrapper.JSONReader(c.parentreference)
 	if err != nil {
@@ -9680,7 +9640,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	if c.ifNoneMatch_ != "" {
 		reqHeaders.Set("If-None-Match", c.ifNoneMatch_)
 	}
@@ -9822,7 +9781,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	var body io.Reader = nil
 	c.urlParams_.Set("alt", alt)
 	urls := googleapi.ResolveRelative(c.s.BasePath, "files/{fileId}/permissions/{permissionId}")
@@ -9953,7 +9911,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	if c.ifNoneMatch_ != "" {
 		reqHeaders.Set("If-None-Match", c.ifNoneMatch_)
 	}
@@ -10110,7 +10067,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	if c.ifNoneMatch_ != "" {
 		reqHeaders.Set("If-None-Match", c.ifNoneMatch_)
 	}
@@ -10269,7 +10225,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	var body io.Reader = nil
 	body, err := googleapi.WithoutDataWrapper.JSONReader(c.permission)
 	if err != nil {
@@ -10454,7 +10409,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	if c.ifNoneMatch_ != "" {
 		reqHeaders.Set("If-None-Match", c.ifNoneMatch_)
 	}
@@ -10652,7 +10606,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	var body io.Reader = nil
 	body, err := googleapi.WithoutDataWrapper.JSONReader(c.permission)
 	if err != nil {
@@ -10837,7 +10790,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	var body io.Reader = nil
 	body, err := googleapi.WithoutDataWrapper.JSONReader(c.permission)
 	if err != nil {
@@ -11005,7 +10957,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	var body io.Reader = nil
 	c.urlParams_.Set("alt", alt)
 	urls := googleapi.ResolveRelative(c.s.BasePath, "files/{fileId}/properties/{propertyKey}")
@@ -11138,7 +11089,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	if c.ifNoneMatch_ != "" {
 		reqHeaders.Set("If-None-Match", c.ifNoneMatch_)
 	}
@@ -11288,7 +11238,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	var body io.Reader = nil
 	body, err := googleapi.WithoutDataWrapper.JSONReader(c.property)
 	if err != nil {
@@ -11434,7 +11383,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	if c.ifNoneMatch_ != "" {
 		reqHeaders.Set("If-None-Match", c.ifNoneMatch_)
 	}
@@ -11579,7 +11527,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	var body io.Reader = nil
 	body, err := googleapi.WithoutDataWrapper.JSONReader(c.property)
 	if err != nil {
@@ -11739,7 +11686,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	var body io.Reader = nil
 	body, err := googleapi.WithoutDataWrapper.JSONReader(c.property)
 	if err != nil {
@@ -11909,7 +11855,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	if c.ifNoneMatch_ != "" {
 		reqHeaders.Set("If-None-Match", c.ifNoneMatch_)
 	}
@@ -12099,7 +12044,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	var body io.Reader = nil
 	c.urlParams_.Set("alt", alt)
 	urls := googleapi.ResolveRelative(c.s.BasePath, "files/{fileId}/realtime")
@@ -12270,7 +12214,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	var body io.Reader = nil
 	c.urlParams_.Set("alt", alt)
 	urls := googleapi.ResolveRelative(c.s.BasePath, "files/{fileId}/comments/{commentId}/replies/{replyId}")
@@ -12405,7 +12348,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	if c.ifNoneMatch_ != "" {
 		reqHeaders.Set("If-None-Match", c.ifNoneMatch_)
 	}
@@ -12560,7 +12502,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	var body io.Reader = nil
 	body, err := googleapi.WithoutDataWrapper.JSONReader(c.commentreply)
 	if err != nil {
@@ -12738,7 +12679,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	if c.ifNoneMatch_ != "" {
 		reqHeaders.Set("If-None-Match", c.ifNoneMatch_)
 	}
@@ -12923,7 +12863,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	var body io.Reader = nil
 	body, err := googleapi.WithoutDataWrapper.JSONReader(c.commentreply)
 	if err != nil {
@@ -13078,7 +13017,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	var body io.Reader = nil
 	body, err := googleapi.WithoutDataWrapper.JSONReader(c.commentreply)
 	if err != nil {
@@ -13229,7 +13167,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	var body io.Reader = nil
 	c.urlParams_.Set("alt", alt)
 	urls := googleapi.ResolveRelative(c.s.BasePath, "files/{fileId}/revisions/{revisionId}")
@@ -13348,7 +13285,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	if c.ifNoneMatch_ != "" {
 		reqHeaders.Set("If-None-Match", c.ifNoneMatch_)
 	}
@@ -13515,7 +13451,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	if c.ifNoneMatch_ != "" {
 		reqHeaders.Set("If-None-Match", c.ifNoneMatch_)
 	}
@@ -13687,7 +13622,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	var body io.Reader = nil
 	body, err := googleapi.WithoutDataWrapper.JSONReader(c.revision)
 	if err != nil {
@@ -13833,7 +13767,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	var body io.Reader = nil
 	body, err := googleapi.WithoutDataWrapper.JSONReader(c.revision)
 	if err != nil {
@@ -13976,7 +13909,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	var body io.Reader = nil
 	c.urlParams_.Set("alt", alt)
 	urls := googleapi.ResolveRelative(c.s.BasePath, "teamdrives/{teamDriveId}")
@@ -14083,7 +14015,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	if c.ifNoneMatch_ != "" {
 		reqHeaders.Set("If-None-Match", c.ifNoneMatch_)
 	}
@@ -14212,7 +14143,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	var body io.Reader = nil
 	body, err := googleapi.WithoutDataWrapper.JSONReader(c.teamdrive)
 	if err != nil {
@@ -14364,7 +14294,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	if c.ifNoneMatch_ != "" {
 		reqHeaders.Set("If-None-Match", c.ifNoneMatch_)
 	}
@@ -14517,7 +14446,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	var body io.Reader = nil
 	body, err := googleapi.WithoutDataWrapper.JSONReader(c.teamdrive)
 	if err != nil {
diff --git a/drive/v3/drive-gen.go b/drive/v3/drive-gen.go
index bb02738..5a6a519 100644
--- a/drive/v3/drive-gen.go
+++ b/drive/v3/drive-gen.go
@@ -91,10 +91,9 @@
 }
 
 type Service struct {
-	client                    *http.Client
-	BasePath                  string // API endpoint base URL
-	UserAgent                 string // optional additional User-Agent fragment
-	GoogleClientHeaderElement string // client header fragment, for Google use only
+	client    *http.Client
+	BasePath  string // API endpoint base URL
+	UserAgent string // optional additional User-Agent fragment
 
 	About *AboutService
 
@@ -122,10 +121,6 @@
 	return googleapi.UserAgent + " " + s.UserAgent
 }
 
-func (s *Service) clientHeader() string {
-	return gensupport.GoogleClientHeader("20170210", s.GoogleClientHeaderElement)
-}
-
 func NewAboutService(s *Service) *AboutService {
 	rs := &AboutService{s: s}
 	return rs
@@ -2054,7 +2049,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	if c.ifNoneMatch_ != "" {
 		reqHeaders.Set("If-None-Match", c.ifNoneMatch_)
 	}
@@ -2198,7 +2192,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	if c.ifNoneMatch_ != "" {
 		reqHeaders.Set("If-None-Match", c.ifNoneMatch_)
 	}
@@ -2407,7 +2400,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	if c.ifNoneMatch_ != "" {
 		reqHeaders.Set("If-None-Match", c.ifNoneMatch_)
 	}
@@ -2656,7 +2648,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	var body io.Reader = nil
 	body, err := googleapi.WithoutDataWrapper.JSONReader(c.channel)
 	if err != nil {
@@ -2843,7 +2834,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	var body io.Reader = nil
 	body, err := googleapi.WithoutDataWrapper.JSONReader(c.channel)
 	if err != nil {
@@ -2942,7 +2932,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	var body io.Reader = nil
 	body, err := googleapi.WithoutDataWrapper.JSONReader(c.comment)
 	if err != nil {
@@ -3077,7 +3066,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	var body io.Reader = nil
 	c.urlParams_.Set("alt", alt)
 	urls := googleapi.ResolveRelative(c.s.BasePath, "files/{fileId}/comments/{commentId}")
@@ -3203,7 +3191,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	if c.ifNoneMatch_ != "" {
 		reqHeaders.Set("If-None-Match", c.ifNoneMatch_)
 	}
@@ -3388,7 +3375,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	if c.ifNoneMatch_ != "" {
 		reqHeaders.Set("If-None-Match", c.ifNoneMatch_)
 	}
@@ -3567,7 +3553,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	var body io.Reader = nil
 	body, err := googleapi.WithoutDataWrapper.JSONReader(c.comment)
 	if err != nil {
@@ -3745,7 +3730,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	var body io.Reader = nil
 	body, err := googleapi.WithoutDataWrapper.JSONReader(c.file)
 	if err != nil {
@@ -3998,7 +3982,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	var body io.Reader = nil
 	body, err := googleapi.WithoutDataWrapper.JSONReader(c.file)
 	if err != nil {
@@ -4225,7 +4208,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	var body io.Reader = nil
 	c.urlParams_.Set("alt", alt)
 	urls := googleapi.ResolveRelative(c.s.BasePath, "files/{fileId}")
@@ -4327,7 +4309,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	var body io.Reader = nil
 	c.urlParams_.Set("alt", alt)
 	urls := googleapi.ResolveRelative(c.s.BasePath, "files/trash")
@@ -4422,7 +4403,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	if c.ifNoneMatch_ != "" {
 		reqHeaders.Set("If-None-Match", c.ifNoneMatch_)
 	}
@@ -4572,7 +4552,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	if c.ifNoneMatch_ != "" {
 		reqHeaders.Set("If-None-Match", c.ifNoneMatch_)
 	}
@@ -4731,7 +4710,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	if c.ifNoneMatch_ != "" {
 		reqHeaders.Set("If-None-Match", c.ifNoneMatch_)
 	}
@@ -4992,7 +4970,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	if c.ifNoneMatch_ != "" {
 		reqHeaders.Set("If-None-Match", c.ifNoneMatch_)
 	}
@@ -5300,7 +5277,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	var body io.Reader = nil
 	body, err := googleapi.WithoutDataWrapper.JSONReader(c.file)
 	if err != nil {
@@ -5552,7 +5528,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	var body io.Reader = nil
 	body, err := googleapi.WithoutDataWrapper.JSONReader(c.channel)
 	if err != nil {
@@ -5757,7 +5732,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	var body io.Reader = nil
 	body, err := googleapi.WithoutDataWrapper.JSONReader(c.permission)
 	if err != nil {
@@ -5921,7 +5895,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	var body io.Reader = nil
 	c.urlParams_.Set("alt", alt)
 	urls := googleapi.ResolveRelative(c.s.BasePath, "files/{fileId}/permissions/{permissionId}")
@@ -6052,7 +6025,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	if c.ifNoneMatch_ != "" {
 		reqHeaders.Set("If-None-Match", c.ifNoneMatch_)
 	}
@@ -6233,7 +6205,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	if c.ifNoneMatch_ != "" {
 		reqHeaders.Set("If-None-Match", c.ifNoneMatch_)
 	}
@@ -6432,7 +6403,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	var body io.Reader = nil
 	body, err := googleapi.WithoutDataWrapper.JSONReader(c.permission)
 	if err != nil {
@@ -6595,7 +6565,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	var body io.Reader = nil
 	body, err := googleapi.WithoutDataWrapper.JSONReader(c.reply)
 	if err != nil {
@@ -6740,7 +6709,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	var body io.Reader = nil
 	c.urlParams_.Set("alt", alt)
 	urls := googleapi.ResolveRelative(c.s.BasePath, "files/{fileId}/comments/{commentId}/replies/{replyId}")
@@ -6876,7 +6844,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	if c.ifNoneMatch_ != "" {
 		reqHeaders.Set("If-None-Match", c.ifNoneMatch_)
 	}
@@ -7063,7 +7030,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	if c.ifNoneMatch_ != "" {
 		reqHeaders.Set("If-None-Match", c.ifNoneMatch_)
 	}
@@ -7247,7 +7213,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	var body io.Reader = nil
 	body, err := googleapi.WithoutDataWrapper.JSONReader(c.reply)
 	if err != nil {
@@ -7399,7 +7364,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	var body io.Reader = nil
 	c.urlParams_.Set("alt", alt)
 	urls := googleapi.ResolveRelative(c.s.BasePath, "files/{fileId}/revisions/{revisionId}")
@@ -7527,7 +7491,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	if c.ifNoneMatch_ != "" {
 		reqHeaders.Set("If-None-Match", c.ifNoneMatch_)
 	}
@@ -7718,7 +7681,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	if c.ifNoneMatch_ != "" {
 		reqHeaders.Set("If-None-Match", c.ifNoneMatch_)
 	}
@@ -7890,7 +7852,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	var body io.Reader = nil
 	body, err := googleapi.WithoutDataWrapper.JSONReader(c.revision)
 	if err != nil {
@@ -8033,7 +7994,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	var body io.Reader = nil
 	body, err := googleapi.WithoutDataWrapper.JSONReader(c.teamdrive)
 	if err != nil {
@@ -8163,7 +8123,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	var body io.Reader = nil
 	c.urlParams_.Set("alt", alt)
 	urls := googleapi.ResolveRelative(c.s.BasePath, "teamdrives/{teamDriveId}")
@@ -8270,7 +8229,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	if c.ifNoneMatch_ != "" {
 		reqHeaders.Set("If-None-Match", c.ifNoneMatch_)
 	}
@@ -8421,7 +8379,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	if c.ifNoneMatch_ != "" {
 		reqHeaders.Set("If-None-Match", c.ifNoneMatch_)
 	}
@@ -8574,7 +8531,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	var body io.Reader = nil
 	body, err := googleapi.WithoutDataWrapper.JSONReader(c.teamdrive)
 	if err != nil {
diff --git a/firebasedynamiclinks/v1/firebasedynamiclinks-api.json b/firebasedynamiclinks/v1/firebasedynamiclinks-api.json
index 184e0b8..ca6eb5d 100644
--- a/firebasedynamiclinks/v1/firebasedynamiclinks-api.json
+++ b/firebasedynamiclinks/v1/firebasedynamiclinks-api.json
@@ -1,5 +1,220 @@
 {
+  "canonicalName": "Firebase Dynamic Links",
+  "auth": {
+    "oauth2": {
+      "scopes": {
+        "https://www.googleapis.com/auth/firebase": {
+          "description": "View and administer all your Firebase data and settings"
+        }
+      }
+    }
+  },
+  "rootUrl": "https://firebasedynamiclinks.googleapis.com/",
+  "ownerDomain": "google.com",
+  "name": "firebasedynamiclinks",
+  "batchPath": "batch",
+  "title": "Firebase Dynamic Links API",
+  "ownerName": "Google",
+  "resources": {
+    "shortLinks": {
+      "methods": {
+        "create": {
+          "flatPath": "v1/shortLinks",
+          "id": "firebasedynamiclinks.shortLinks.create",
+          "path": "v1/shortLinks",
+          "description": "Creates a short Dynamic Link given either a valid long Dynamic Link or\ndetails such as Dynamic Link domain, Android and iOS app information.\nThe created short Dynamic Link will not expire.\n\nRepeated calls with the same long Dynamic Link or Dynamic Link information\nwill produce the same short Dynamic Link.\n\nThe Dynamic Link domain in the request must be owned by requester's\nFirebase project.",
+          "request": {
+            "$ref": "CreateShortDynamicLinkRequest"
+          },
+          "httpMethod": "POST",
+          "parameterOrder": [],
+          "response": {
+            "$ref": "CreateShortDynamicLinkResponse"
+          },
+          "scopes": [
+            "https://www.googleapis.com/auth/firebase"
+          ],
+          "parameters": {}
+        }
+      }
+    }
+  },
+  "parameters": {
+    "pp": {
+      "location": "query",
+      "description": "Pretty-print response.",
+      "type": "boolean",
+      "default": "true"
+    },
+    "oauth_token": {
+      "location": "query",
+      "description": "OAuth 2.0 token for the current user.",
+      "type": "string"
+    },
+    "bearer_token": {
+      "location": "query",
+      "description": "OAuth bearer token.",
+      "type": "string"
+    },
+    "upload_protocol": {
+      "description": "Upload protocol for media (e.g. \"raw\", \"multipart\").",
+      "type": "string",
+      "location": "query"
+    },
+    "prettyPrint": {
+      "location": "query",
+      "description": "Returns response with indentations and line breaks.",
+      "type": "boolean",
+      "default": "true"
+    },
+    "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\").",
+      "type": "string",
+      "location": "query"
+    },
+    "$.xgafv": {
+      "description": "V1 error format.",
+      "type": "string",
+      "enumDescriptions": [
+        "v1 error format",
+        "v2 error format"
+      ],
+      "location": "query",
+      "enum": [
+        "1",
+        "2"
+      ]
+    },
+    "callback": {
+      "description": "JSONP",
+      "type": "string",
+      "location": "query"
+    },
+    "alt": {
+      "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",
+      "description": "Data format for response.",
+      "default": "json",
+      "enum": [
+        "json",
+        "media",
+        "proto"
+      ]
+    },
+    "access_token": {
+      "location": "query",
+      "description": "OAuth access token.",
+      "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"
+    },
+    "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"
+    }
+  },
+  "version": "v1",
+  "baseUrl": "https://firebasedynamiclinks.googleapis.com/",
+  "kind": "discovery#restDescription",
+  "description": "Firebase Dynamic Links API enables third party developers to programmatically create and manage Dynamic Links.",
+  "servicePath": "",
+  "basePath": "",
+  "id": "firebasedynamiclinks:v1",
+  "documentationLink": "https://firebase.google.com/docs/dynamic-links/",
+  "revision": "20170323",
+  "discoveryVersion": "v1",
+  "version_module": "True",
   "schemas": {
+    "NavigationInfo": {
+      "description": "Information of navigation behavior.",
+      "type": "object",
+      "properties": {
+        "enableForcedRedirect": {
+          "description": "If this option is on, FDL click will be forced to redirect rather than\nshow an interstitial page.",
+          "type": "boolean"
+        }
+      },
+      "id": "NavigationInfo"
+    },
+    "IosInfo": {
+      "description": "iOS related attributes to the Dynamic Link..",
+      "type": "object",
+      "properties": {
+        "iosIpadFallbackLink": {
+          "description": "If specified, this overrides the ios_fallback_link value on iPads.",
+          "type": "string"
+        },
+        "iosIpadBundleId": {
+          "description": "iPad bundle ID of the app.",
+          "type": "string"
+        },
+        "iosCustomScheme": {
+          "description": "Custom (destination) scheme to use for iOS. By default, we’ll use the\nbundle ID as the custom scheme. Developer can override this behavior using\nthis param.",
+          "type": "string"
+        },
+        "iosBundleId": {
+          "description": "iOS bundle ID of the app.",
+          "type": "string"
+        },
+        "iosFallbackLink": {
+          "description": "Link to open on iOS if the app is not installed.",
+          "type": "string"
+        },
+        "iosAppStoreId": {
+          "description": "iOS App Store ID.",
+          "type": "string"
+        }
+      },
+      "id": "IosInfo"
+    },
+    "AnalyticsInfo": {
+      "description": "Tracking parameters supported by Dynamic Link.",
+      "type": "object",
+      "properties": {
+        "itunesConnectAnalytics": {
+          "description": "iTunes Connect App Analytics.",
+          "$ref": "ITunesConnectAnalytics"
+        },
+        "googlePlayAnalytics": {
+          "$ref": "GooglePlayAnalytics",
+          "description": "Google Play Campaign Measurements."
+        }
+      },
+      "id": "AnalyticsInfo"
+    },
+    "CreateShortDynamicLinkRequest": {
+      "description": "Request to create a short Dynamic Link.",
+      "type": "object",
+      "properties": {
+        "dynamicLinkInfo": {
+          "$ref": "DynamicLinkInfo",
+          "description": "Information about the Dynamic Link to be shortened.\n[Learn more](https://firebase.google.com/docs/dynamic-links/android#create-a-dynamic-link-programmatically)."
+        },
+        "longDynamicLink": {
+          "description": "Full long Dynamic Link URL with desired query parameters specified.\nFor example,\n\"https://sample.app.goo.gl/?link=http://www.google.com&apn=com.sample\",\n[Learn more](https://firebase.google.com/docs/dynamic-links/android#create-a-dynamic-link-programmatically).",
+          "type": "string"
+        },
+        "suffix": {
+          "$ref": "Suffix",
+          "description": "Short Dynamic Link suffix. Optional."
+        }
+      },
+      "id": "CreateShortDynamicLinkRequest"
+    },
     "CreateShortDynamicLinkResponse": {
       "description": "Response to create a short Dynamic Link.",
       "type": "object",
@@ -27,6 +242,8 @@
       "type": "object",
       "properties": {
         "option": {
+          "description": "Suffix option.",
+          "type": "string",
           "enumDescriptions": [
             "The suffix option is not specified, performs as NOT_GUESSABLE .",
             "Short Dynamic Link suffix is a base62 [0-9A-Za-z] encoded string of\na random generated 96 bit random number, which has a length of 17 chars.\nFor example, \"nlAR8U4SlKRZw1cb2\".\nIt prevents other people from guessing and crawling short Dynamic Links\nthat contain personal identifiable information.",
@@ -36,9 +253,7 @@
             "OPTION_UNSPECIFIED",
             "UNGUESSABLE",
             "SHORT"
-          ],
-          "description": "Suffix option.",
-          "type": "string"
+          ]
         }
       },
       "id": "Suffix"
@@ -47,10 +262,6 @@
       "description": "Parameters for Google Play Campaign Measurements.\n[Learn more](https://developers.google.com/analytics/devguides/collection/android/v4/campaigns#campaign-params)",
       "type": "object",
       "properties": {
-        "utmContent": {
-          "description": "Campaign content; used for A/B testing and content-targeted ads to\ndifferentiate ads or links that point to the same URL.",
-          "type": "string"
-        },
         "utmMedium": {
           "description": "Campaign medium; used to identify a medium such as email or cost-per-click.",
           "type": "string"
@@ -70,6 +281,10 @@
         "gclid": {
           "description": "[AdWords autotagging parameter](https://support.google.com/analytics/answer/1033981?hl=en);\nused to measure Google AdWords ads. This value is generated dynamically\nand should never be modified.",
           "type": "string"
+        },
+        "utmContent": {
+          "description": "Campaign content; used for A/B testing and content-targeted ads to\ndifferentiate ads or links that point to the same URL.",
+          "type": "string"
         }
       },
       "id": "GooglePlayAnalytics"
@@ -78,17 +293,9 @@
       "description": "Information about a Dynamic Link.",
       "type": "object",
       "properties": {
-        "androidInfo": {
-          "$ref": "AndroidInfo",
-          "description": "Android related information. See Android related parameters in the\n[documentation](https://firebase.google.com/docs/dynamic-links/android#create-a-dynamic-link-programmatically)."
-        },
-        "navigationInfo": {
-          "description": "Information of navigation behavior of a Firebase Dynamic Links.",
-          "$ref": "NavigationInfo"
-        },
         "analyticsInfo": {
-          "description": "Parameters used for tracking. See all tracking parameters in the\n[documentation](https://firebase.google.com/docs/dynamic-links/android#create-a-dynamic-link-programmatically).",
-          "$ref": "AnalyticsInfo"
+          "$ref": "AnalyticsInfo",
+          "description": "Parameters used for tracking. See all tracking parameters in the\n[documentation](https://firebase.google.com/docs/dynamic-links/android#create-a-dynamic-link-programmatically)."
         },
         "dynamicLinkDomain": {
           "description": "Dynamic Links domain that the project owns, e.g. abcd.app.goo.gl\n[Learn more](https://firebase.google.com/docs/dynamic-links/android#set-up-firebase-and-the-dynamic-links-sdk)\non how to set up Dynamic Link domain associated with your Firebase project.\n\nRequired.",
@@ -99,12 +306,20 @@
           "type": "string"
         },
         "iosInfo": {
-          "$ref": "IosInfo",
-          "description": "iOS related information. See iOS related parameters in the\n[documentation](https://firebase.google.com/docs/dynamic-links/ios#create-a-dynamic-link-programmatically)."
+          "description": "iOS related information. See iOS related parameters in the\n[documentation](https://firebase.google.com/docs/dynamic-links/ios#create-a-dynamic-link-programmatically).",
+          "$ref": "IosInfo"
         },
         "socialMetaTagInfo": {
           "description": "Parameters for social meta tag params.\nUsed to set meta tag data for link previews on social sites.",
           "$ref": "SocialMetaTagInfo"
+        },
+        "androidInfo": {
+          "description": "Android related information. See Android related parameters in the\n[documentation](https://firebase.google.com/docs/dynamic-links/android#create-a-dynamic-link-programmatically).",
+          "$ref": "AndroidInfo"
+        },
+        "navigationInfo": {
+          "$ref": "NavigationInfo",
+          "description": "Information of navigation behavior of a Firebase Dynamic Links."
         }
       },
       "id": "DynamicLinkInfo"
@@ -160,6 +375,8 @@
           "type": "string"
         },
         "warningCode": {
+          "description": "The warning code.",
+          "type": "string",
           "enumDescriptions": [
             "Unknown code.",
             "The Android package does not match any in developer's DevConsole project.",
@@ -221,9 +438,7 @@
             "LINK_LENGTH_TOO_LONG",
             "LINK_WITH_FRAGMENTS",
             "NOT_MATCHING_IOS_BUNDLE_ID_AND_STORE_ID"
-          ],
-          "description": "The warning code.",
-          "type": "string"
+          ]
         }
       },
       "id": "DynamicLinkWarning"
@@ -232,14 +447,6 @@
       "description": "Android related attributes to the Dynamic Link.",
       "type": "object",
       "properties": {
-        "androidLink": {
-          "description": "If specified, this overrides the ‘link’ parameter on Android.",
-          "type": "string"
-        },
-        "androidFallbackLink": {
-          "description": "Link to open on Android if the app is not installed.",
-          "type": "string"
-        },
         "androidPackageName": {
           "description": "Android package name of the app.",
           "type": "string"
@@ -247,229 +454,22 @@
         "androidMinPackageVersionCode": {
           "description": "Minimum version code for the Android app. If the installed app’s version\ncode is lower, then the user is taken to the Play Store.",
           "type": "string"
+        },
+        "androidLink": {
+          "description": "If specified, this overrides the ‘link’ parameter on Android.",
+          "type": "string"
+        },
+        "androidFallbackLink": {
+          "description": "Link to open on Android if the app is not installed.",
+          "type": "string"
         }
       },
       "id": "AndroidInfo"
-    },
-    "NavigationInfo": {
-      "description": "Information of navigation behavior.",
-      "type": "object",
-      "properties": {
-        "enableForcedRedirect": {
-          "description": "If this option is on, FDL click will be forced to redirect rather than\nshow an interstitial page.",
-          "type": "boolean"
-        }
-      },
-      "id": "NavigationInfo"
-    },
-    "IosInfo": {
-      "description": "iOS related attributes to the Dynamic Link..",
-      "type": "object",
-      "properties": {
-        "iosFallbackLink": {
-          "description": "Link to open on iOS if the app is not installed.",
-          "type": "string"
-        },
-        "iosAppStoreId": {
-          "description": "iOS App Store ID.",
-          "type": "string"
-        },
-        "iosIpadFallbackLink": {
-          "description": "If specified, this overrides the ios_fallback_link value on iPads.",
-          "type": "string"
-        },
-        "iosIpadBundleId": {
-          "description": "iPad bundle ID of the app.",
-          "type": "string"
-        },
-        "iosCustomScheme": {
-          "description": "Custom (destination) scheme to use for iOS. By default, we’ll use the\nbundle ID as the custom scheme. Developer can override this behavior using\nthis param.",
-          "type": "string"
-        },
-        "iosBundleId": {
-          "description": "iOS bundle ID of the app.",
-          "type": "string"
-        }
-      },
-      "id": "IosInfo"
-    },
-    "AnalyticsInfo": {
-      "description": "Tracking parameters supported by Dynamic Link.",
-      "type": "object",
-      "properties": {
-        "itunesConnectAnalytics": {
-          "description": "iTunes Connect App Analytics.",
-          "$ref": "ITunesConnectAnalytics"
-        },
-        "googlePlayAnalytics": {
-          "$ref": "GooglePlayAnalytics",
-          "description": "Google Play Campaign Measurements."
-        }
-      },
-      "id": "AnalyticsInfo"
-    },
-    "CreateShortDynamicLinkRequest": {
-      "description": "Request to create a short Dynamic Link.",
-      "type": "object",
-      "properties": {
-        "suffix": {
-          "$ref": "Suffix",
-          "description": "Short Dynamic Link suffix. Optional."
-        },
-        "dynamicLinkInfo": {
-          "$ref": "DynamicLinkInfo",
-          "description": "Information about the Dynamic Link to be shortened.\n[Learn more](https://firebase.google.com/docs/dynamic-links/android#create-a-dynamic-link-programmatically)."
-        },
-        "longDynamicLink": {
-          "description": "Full long Dynamic Link URL with desired query parameters specified.\nFor example,\n\"https://sample.app.goo.gl/?link=http://www.google.com&apn=com.sample\",\n[Learn more](https://firebase.google.com/docs/dynamic-links/android#create-a-dynamic-link-programmatically).",
-          "type": "string"
-        }
-      },
-      "id": "CreateShortDynamicLinkRequest"
     }
   },
   "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",
-  "canonicalName": "Firebase Dynamic Links",
-  "auth": {
-    "oauth2": {
-      "scopes": {
-        "https://www.googleapis.com/auth/firebase": {
-          "description": "View and administer all your Firebase data and settings"
-        }
-      }
-    }
-  },
-  "rootUrl": "https://firebasedynamiclinks.googleapis.com/",
-  "ownerDomain": "google.com",
-  "name": "firebasedynamiclinks",
-  "batchPath": "batch",
-  "title": "Firebase Dynamic Links API",
-  "ownerName": "Google",
-  "resources": {
-    "shortLinks": {
-      "methods": {
-        "create": {
-          "description": "Creates a short Dynamic Link given either a valid long Dynamic Link or\ndetails such as Dynamic Link domain, Android and iOS app information.\nThe created short Dynamic Link will not expire.\n\nRepeated calls with the same long Dynamic Link or Dynamic Link information\nwill produce the same short Dynamic Link.\n\nThe Dynamic Link domain in the request must be owned by requester's\nFirebase project.",
-          "request": {
-            "$ref": "CreateShortDynamicLinkRequest"
-          },
-          "httpMethod": "POST",
-          "parameterOrder": [],
-          "response": {
-            "$ref": "CreateShortDynamicLinkResponse"
-          },
-          "scopes": [
-            "https://www.googleapis.com/auth/firebase"
-          ],
-          "parameters": {},
-          "flatPath": "v1/shortLinks",
-          "id": "firebasedynamiclinks.shortLinks.create",
-          "path": "v1/shortLinks"
-        }
-      }
-    }
-  },
-  "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"
-    },
-    "pp": {
-      "description": "Pretty-print response.",
-      "type": "boolean",
-      "default": "true",
-      "location": "query"
-    },
-    "oauth_token": {
-      "description": "OAuth 2.0 token for the current user.",
-      "type": "string",
-      "location": "query"
-    },
-    "bearer_token": {
-      "description": "OAuth bearer token.",
-      "type": "string",
-      "location": "query"
-    },
-    "upload_protocol": {
-      "description": "Upload protocol for media (e.g. \"raw\", \"multipart\").",
-      "type": "string",
-      "location": "query"
-    },
-    "prettyPrint": {
-      "description": "Returns response with indentations and line breaks.",
-      "type": "boolean",
-      "default": "true",
-      "location": "query"
-    },
-    "fields": {
-      "description": "Selector specifying which fields to include in a partial response.",
-      "type": "string",
-      "location": "query"
-    },
-    "uploadType": {
-      "location": "query",
-      "description": "Legacy upload protocol for media (e.g. \"media\", \"multipart\").",
-      "type": "string"
-    },
-    "$.xgafv": {
-      "enumDescriptions": [
-        "v1 error format",
-        "v2 error format"
-      ],
-      "location": "query",
-      "enum": [
-        "1",
-        "2"
-      ],
-      "description": "V1 error format.",
-      "type": "string"
-    },
-    "callback": {
-      "description": "JSONP",
-      "type": "string",
-      "location": "query"
-    },
-    "alt": {
-      "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",
-      "description": "Data format for response.",
-      "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"
-    },
-    "access_token": {
-      "description": "OAuth access token.",
-      "type": "string",
-      "location": "query"
-    }
-  },
-  "version": "v1",
-  "baseUrl": "https://firebasedynamiclinks.googleapis.com/",
-  "description": "Firebase Dynamic Links API enables third party developers to programmatically create and manage Dynamic Links.",
-  "servicePath": "",
-  "kind": "discovery#restDescription",
-  "basePath": "",
-  "id": "firebasedynamiclinks:v1",
-  "documentationLink": "https://firebase.google.com/docs/dynamic-links/",
-  "revision": "20170309",
-  "discoveryVersion": "v1",
-  "version_module": "True"
+  "protocol": "rest"
 }
diff --git a/firebasedynamiclinks/v1/firebasedynamiclinks-gen.go b/firebasedynamiclinks/v1/firebasedynamiclinks-gen.go
index 8849f31..e953dc5 100644
--- a/firebasedynamiclinks/v1/firebasedynamiclinks-gen.go
+++ b/firebasedynamiclinks/v1/firebasedynamiclinks-gen.go
@@ -61,10 +61,9 @@
 }
 
 type Service struct {
-	client                    *http.Client
-	BasePath                  string // API endpoint base URL
-	UserAgent                 string // optional additional User-Agent fragment
-	GoogleClientHeaderElement string // client header fragment, for Google use only
+	client    *http.Client
+	BasePath  string // API endpoint base URL
+	UserAgent string // optional additional User-Agent fragment
 
 	ShortLinks *ShortLinksService
 }
@@ -76,10 +75,6 @@
 	return googleapi.UserAgent + " " + s.UserAgent
 }
 
-func (s *Service) clientHeader() string {
-	return gensupport.GoogleClientHeader("20170210", s.GoogleClientHeaderElement)
-}
-
 func NewShortLinksService(s *Service) *ShortLinksService {
 	rs := &ShortLinksService{s: s}
 	return rs
@@ -732,7 +727,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	var body io.Reader = nil
 	body, err := googleapi.WithoutDataWrapper.JSONReader(c.createshortdynamiclinkrequest)
 	if err != nil {
diff --git a/firebaserules/v1/firebaserules-api.json b/firebaserules/v1/firebaserules-api.json
index f899f9f..746a69b 100644
--- a/firebaserules/v1/firebaserules-api.json
+++ b/firebaserules/v1/firebaserules-api.json
@@ -1,49 +1,50 @@
 {
+  "ownerName": "Google",
   "resources": {
     "projects": {
       "methods": {
         "test": {
-          "httpMethod": "POST",
-          "parameterOrder": [
-            "name"
-          ],
           "response": {
             "$ref": "TestRulesetResponse"
           },
-          "parameters": {
-            "name": {
-              "location": "path",
-              "description": "Name of the project.\n\nFormat: `projects/{project_id}`",
-              "required": true,
-              "type": "string",
-              "pattern": "^projects/.+$"
-            }
-          },
+          "parameterOrder": [
+            "name"
+          ],
+          "httpMethod": "POST",
           "scopes": [
             "https://www.googleapis.com/auth/cloud-platform",
             "https://www.googleapis.com/auth/firebase",
             "https://www.googleapis.com/auth/firebase.readonly"
           ],
+          "parameters": {
+            "name": {
+              "location": "path",
+              "description": "Tests may either provide `source` or a `Ruleset` resource name.\n\nFor tests against `source`, the resource name must refer to the project:\nFormat: `projects/{project_id}`\n\nFor tests against a `Ruleset`, this must be the `Ruleset` resource name:\nFormat: `projects/{project_id}/rulesets/{ruleset_id}`",
+              "required": true,
+              "type": "string",
+              "pattern": "^projects/.+$"
+            }
+          },
           "flatPath": "v1/projects/{projectsId}:test",
-          "id": "firebaserules.projects.test",
           "path": "v1/{+name}:test",
+          "id": "firebaserules.projects.test",
+          "description": "Test `Source` for syntactic and semantic correctness. Issues present, if\nany, will be returned to the caller with a description, severity, and\nsource location.\n\nThe test method may be executed with `Source` or a `Ruleset` name.\nPassing `Source` is useful for unit testing new rules. Passing a `Ruleset`\nname is useful for regression testing an existing rule.\n\nThe following is an example of `Source` that permits users to upload images\nto a bucket bearing their user id and matching the correct metadata:\n\n_*Example*_\n\n    // Users are allowed to subscribe and unsubscribe to the blog.\n    service firebase.storage {\n      match /users/{userId}/images/{imageName} {\n          allow write: if userId == request.auth.uid\n              && (imageName.matches('*.png$')\n              || imageName.matches('*.jpg$'))\n              && resource.mimeType.matches('^image/')\n      }\n    }",
           "request": {
             "$ref": "TestRulesetRequest"
-          },
-          "description": "Test `Source` for syntactic and semantic correctness. Issues present in the\nrules, if any, will be returned to the caller with a description, severity,\nand source location.\n\nThe test method will typically be executed with a developer provided\n`Source`, but if regression testing is desired, this method may be\nexecuted against a `Ruleset` resource name and the `Source` will be\nretrieved from the persisted `Ruleset`.\n\nThe following is an example of `Source` that permits users to upload images\nto a bucket bearing their user id and matching the correct metadata:\n\n_*Example*_\n\n    // Users are allowed to subscribe and unsubscribe to the blog.\n    service firebase.storage {\n      match /users/{userId}/images/{imageName} {\n          allow write: if userId == request.userId\n              && (imageName.endsWith('.png') || imageName.endsWith('.jpg'))\n              && resource.mimeType.startsWith('image/')\n      }\n    }"
+          }
         }
       },
       "resources": {
         "rulesets": {
           "methods": {
             "get": {
+              "httpMethod": "GET",
               "response": {
                 "$ref": "Ruleset"
               },
               "parameterOrder": [
                 "name"
               ],
-              "httpMethod": "GET",
               "scopes": [
                 "https://www.googleapis.com/auth/cloud-platform",
                 "https://www.googleapis.com/auth/firebase",
@@ -59,36 +60,44 @@
                 }
               },
               "flatPath": "v1/projects/{projectsId}/rulesets/{rulesetsId}",
-              "path": "v1/{+name}",
               "id": "firebaserules.projects.rulesets.get",
+              "path": "v1/{+name}",
               "description": "Get a `Ruleset` by name including the full `Source` contents."
             },
             "list": {
-              "response": {
-                "$ref": "ListRulesetsResponse"
-              },
+              "id": "firebaserules.projects.rulesets.list",
+              "path": "v1/{+name}/rulesets",
+              "description": "List `Ruleset` metadata only and optionally filter the results by `Ruleset`\nname.\n\nThe full `Source` contents of a `Ruleset` may be retrieved with\nGetRuleset.",
+              "httpMethod": "GET",
               "parameterOrder": [
                 "name"
               ],
-              "httpMethod": "GET",
+              "response": {
+                "$ref": "ListRulesetsResponse"
+              },
               "parameters": {
-                "pageSize": {
-                  "description": "Page size to load. Maximum of 100. Defaults to 10.\nNote: `page_size` is just a hint and the service may choose to load less\nthan `page_size` due to the size of the output. To traverse all of the\nreleases, caller should iterate until the `page_token` is empty.",
-                  "format": "int32",
-                  "type": "integer",
-                  "location": "query"
+                "filter": {
+                  "location": "query",
+                  "description": "`Ruleset` filter. The list method supports filters with restrictions on\n`Ruleset.name`.\n\nFilters on `Ruleset.create_time` should use the `date` function which\nparses strings that conform to the RFC 3339 date/time specifications.\n\nExample: `create_time \u003e date(\"2017-01-01\") AND name=UUID-*`",
+                  "type": "string"
                 },
                 "name": {
+                  "pattern": "^projects/[^/]+$",
+                  "location": "path",
                   "description": "Resource name for the project.\n\nFormat: `projects/{project_id}`",
                   "required": true,
-                  "type": "string",
-                  "pattern": "^projects/[^/]+$",
-                  "location": "path"
+                  "type": "string"
                 },
                 "pageToken": {
+                  "location": "query",
                   "description": "Next page token for loading the next batch of `Ruleset` instances.",
-                  "type": "string",
-                  "location": "query"
+                  "type": "string"
+                },
+                "pageSize": {
+                  "type": "integer",
+                  "location": "query",
+                  "description": "Page size to load. Maximum of 100. Defaults to 10.\nNote: `page_size` is just a hint and the service may choose to load less\nthan `page_size` due to the size of the output. To traverse all of the\nreleases, caller should iterate until the `page_token` is empty.",
+                  "format": "int32"
                 }
               },
               "scopes": [
@@ -96,30 +105,23 @@
                 "https://www.googleapis.com/auth/firebase",
                 "https://www.googleapis.com/auth/firebase.readonly"
               ],
-              "flatPath": "v1/projects/{projectsId}/rulesets",
-              "path": "v1/{+name}/rulesets",
-              "id": "firebaserules.projects.rulesets.list",
-              "description": "List `Ruleset` metadata only and optionally filter the results by Ruleset\nname.\n\nThe full `Source` contents of a `Ruleset` may be retrieved with\nGetRuleset."
+              "flatPath": "v1/projects/{projectsId}/rulesets"
             },
             "create": {
-              "request": {
-                "$ref": "Ruleset"
-              },
-              "description": "Create a `Ruleset` from `Source`.\n\nThe `Ruleset` is given a unique generated name which is returned to the\ncaller. `Source` containing syntactic or semantics errors will result in an\nerror response indicating the first error encountered. For a detailed view\nof `Source` issues, use TestRuleset.",
-              "httpMethod": "POST",
-              "parameterOrder": [
-                "name"
-              ],
               "response": {
                 "$ref": "Ruleset"
               },
+              "parameterOrder": [
+                "name"
+              ],
+              "httpMethod": "POST",
               "parameters": {
                 "name": {
-                  "description": "Resource name for Project which owns this `Ruleset`.\n\nFormat: `projects/{project_id}`",
                   "required": true,
                   "type": "string",
                   "pattern": "^projects/[^/]+$",
-                  "location": "path"
+                  "location": "path",
+                  "description": "Resource name for Project which owns this `Ruleset`.\n\nFormat: `projects/{project_id}`"
                 }
               },
               "scopes": [
@@ -127,8 +129,12 @@
                 "https://www.googleapis.com/auth/firebase"
               ],
               "flatPath": "v1/projects/{projectsId}/rulesets",
+              "path": "v1/{+name}/rulesets",
               "id": "firebaserules.projects.rulesets.create",
-              "path": "v1/{+name}/rulesets"
+              "request": {
+                "$ref": "Ruleset"
+              },
+              "description": "Create a `Ruleset` from `Source`.\n\nThe `Ruleset` is given a unique generated name which is returned to the\ncaller. `Source` containing syntactic or semantics errors will result in an\nerror response indicating the first error encountered. For a detailed view\nof `Source` issues, use TestRuleset."
             },
             "delete": {
               "description": "Delete a `Ruleset` by resource name.\n\nIf the `Ruleset` is referenced by a `Release` the operation will fail.",
@@ -139,10 +145,6 @@
                 "name"
               ],
               "httpMethod": "DELETE",
-              "scopes": [
-                "https://www.googleapis.com/auth/cloud-platform",
-                "https://www.googleapis.com/auth/firebase"
-              ],
               "parameters": {
                 "name": {
                   "description": "Resource name for the ruleset to delete.\n\nFormat: `projects/{project_id}/rulesets/{ruleset_id}`",
@@ -152,6 +154,10 @@
                   "location": "path"
                 }
               },
+              "scopes": [
+                "https://www.googleapis.com/auth/cloud-platform",
+                "https://www.googleapis.com/auth/firebase"
+              ],
               "flatPath": "v1/projects/{projectsId}/rulesets/{rulesetsId}",
               "path": "v1/{+name}",
               "id": "firebaserules.projects.rulesets.delete"
@@ -162,59 +168,61 @@
           "methods": {
             "delete": {
               "description": "Delete a `Release` by resource name.",
-              "httpMethod": "DELETE",
-              "parameterOrder": [
-                "name"
-              ],
               "response": {
                 "$ref": "Empty"
               },
-              "parameters": {
-                "name": {
-                  "description": "Resource name for the `Release` to delete.\n\nFormat: `projects/{project_id}/releases/{release_id}`",
-                  "required": true,
-                  "type": "string",
-                  "pattern": "^projects/[^/]+/releases/.+$",
-                  "location": "path"
-                }
-              },
+              "parameterOrder": [
+                "name"
+              ],
+              "httpMethod": "DELETE",
               "scopes": [
                 "https://www.googleapis.com/auth/cloud-platform",
                 "https://www.googleapis.com/auth/firebase"
               ],
+              "parameters": {
+                "name": {
+                  "location": "path",
+                  "description": "Resource name for the `Release` to delete.\n\nFormat: `projects/{project_id}/releases/{release_id}`",
+                  "required": true,
+                  "type": "string",
+                  "pattern": "^projects/[^/]+/releases/.+$"
+                }
+              },
               "flatPath": "v1/projects/{projectsId}/releases/{releasesId}",
-              "id": "firebaserules.projects.releases.delete",
-              "path": "v1/{+name}"
+              "path": "v1/{+name}",
+              "id": "firebaserules.projects.releases.delete"
             },
             "get": {
               "flatPath": "v1/projects/{projectsId}/releases/{releasesId}",
-              "id": "firebaserules.projects.releases.get",
               "path": "v1/{+name}",
+              "id": "firebaserules.projects.releases.get",
               "description": "Get a `Release` by name.",
-              "httpMethod": "GET",
               "response": {
                 "$ref": "Release"
               },
               "parameterOrder": [
                 "name"
               ],
-              "scopes": [
-                "https://www.googleapis.com/auth/cloud-platform",
-                "https://www.googleapis.com/auth/firebase",
-                "https://www.googleapis.com/auth/firebase.readonly"
-              ],
+              "httpMethod": "GET",
               "parameters": {
                 "name": {
-                  "description": "Resource name of the `Release`.\n\n\nFormat: `projects/{project_id}/releases/{release_id}`",
+                  "description": "Resource name of the `Release`.\n\nFormat: `projects/{project_id}/releases/{release_id}`",
                   "required": true,
                   "type": "string",
                   "pattern": "^projects/[^/]+/releases/.+$",
                   "location": "path"
                 }
-              }
+              },
+              "scopes": [
+                "https://www.googleapis.com/auth/cloud-platform",
+                "https://www.googleapis.com/auth/firebase",
+                "https://www.googleapis.com/auth/firebase.readonly"
+              ]
             },
             "list": {
-              "description": "List the `Release` values for a project. This list may optionally be\nfiltered by `Release` name or `Ruleset` id or both.",
+              "id": "firebaserules.projects.releases.list",
+              "path": "v1/{+name}/releases",
+              "description": "List the `Release` values for a project. This list may optionally be\nfiltered by `Release` name, `Ruleset` name, `TestSuite` name, or any\ncombination thereof.",
               "httpMethod": "GET",
               "parameterOrder": [
                 "name"
@@ -228,11 +236,6 @@
                 "https://www.googleapis.com/auth/firebase.readonly"
               ],
               "parameters": {
-                "filter": {
-                  "description": "`Release` filter. The list method supports filters with restrictions on the\n`Release` `name` and also on the `Ruleset` `ruleset_name`.\n\nExample 1) A filter of 'name=prod*' might return `Release`s with names\nwithin 'projects/foo' prefixed with 'prod':\n\nName                          | Ruleset Name\n------------------------------|-------------\nprojects/foo/releases/prod    | projects/foo/rulesets/uuid1234\nprojects/foo/releases/prod/v1 | projects/foo/rulesets/uuid1234\nprojects/foo/releases/prod/v2 | projects/foo/rulesets/uuid8888\n\nExample 2) A filter of `name=prod* ruleset_name=uuid1234` would return only\n`Release` instances for 'projects/foo' with names prefixed with 'prod'\nreferring to the same `Ruleset` name of 'uuid1234':\n\nName                          | Ruleset Name\n------------------------------|-------------\nprojects/foo/releases/prod    | projects/foo/rulesets/1234\nprojects/foo/releases/prod/v1 | projects/foo/rulesets/1234\n\nIn the examples, the filter parameters refer to the search filters for\nrelease and ruleset names are relative to the project releases and rulesets\ncollections. Fully qualified prefixed may also be used. e.g.\n`name=projects/foo/releases/prod* ruleset_name=projects/foo/rulesets/uuid1`",
-                  "type": "string",
-                  "location": "query"
-                },
                 "name": {
                   "description": "Resource name for the project.\n\nFormat: `projects/{project_id}`",
                   "required": true,
@@ -241,55 +244,54 @@
                   "location": "path"
                 },
                 "pageToken": {
+                  "type": "string",
                   "location": "query",
-                  "description": "Next page token for the next batch of `Release` instances.",
-                  "type": "string"
+                  "description": "Next page token for the next batch of `Release` instances."
                 },
                 "pageSize": {
-                  "description": "Page size to load. Maximum of 100. Defaults to 10.\nNote: `page_size` is just a hint and the service may choose to load less\nthan `page_size` due to the size of the output. To traverse all of the\nreleases, caller should iterate until the `page_token` is empty.",
+                  "description": "Page size to load. Maximum of 100. Defaults to 10.\nNote: `page_size` is just a hint and the service may choose to load fewer\nthan `page_size` results due to the size of the output. To traverse all of\nthe releases, the caller should iterate until the `page_token` on the\nresponse is empty.",
                   "format": "int32",
                   "type": "integer",
                   "location": "query"
+                },
+                "filter": {
+                  "description": "`Release` filter. The list method supports filters with restrictions on the\n`Release.name`, `Release.ruleset_name`, and `Release.test_suite_name`.\n\nExample 1: A filter of 'name=prod*' might return `Release`s with names\nwithin 'projects/foo' prefixed with 'prod':\n\nName                          | Ruleset Name\n------------------------------|-------------\nprojects/foo/releases/prod    | projects/foo/rulesets/uuid1234\nprojects/foo/releases/prod/v1 | projects/foo/rulesets/uuid1234\nprojects/foo/releases/prod/v2 | projects/foo/rulesets/uuid8888\n\nExample 2: A filter of `name=prod* ruleset_name=uuid1234` would return only\n`Release` instances for 'projects/foo' with names prefixed with 'prod'\nreferring to the same `Ruleset` name of 'uuid1234':\n\nName                          | Ruleset Name\n------------------------------|-------------\nprojects/foo/releases/prod    | projects/foo/rulesets/1234\nprojects/foo/releases/prod/v1 | projects/foo/rulesets/1234\n\nIn the examples, the filter parameters refer to the search filters are\nrelative to the project. Fully qualified prefixed may also be used. e.g.\n`test_suite_name=projects/foo/testsuites/uuid1`",
+                  "type": "string",
+                  "location": "query"
                 }
               },
-              "flatPath": "v1/projects/{projectsId}/releases",
-              "id": "firebaserules.projects.releases.list",
-              "path": "v1/{+name}/releases"
+              "flatPath": "v1/projects/{projectsId}/releases"
             },
             "update": {
+              "description": "Update a `Release`.\n\nOnly updates to the `ruleset_name` and `test_suite_name` fields will be\nhonored. `Release` rename is not supported. To create a `Release` use the\nCreateRelease method.",
               "request": {
                 "$ref": "Release"
               },
-              "description": "Update a `Release`.\n\nOnly updates to the `ruleset_name` field will be honored. `Release` rename\nis not supported. To create a `Release` use the CreateRelease method\ninstead.",
-              "response": {
-                "$ref": "Release"
-              },
+              "httpMethod": "PUT",
               "parameterOrder": [
                 "name"
               ],
-              "httpMethod": "PUT",
-              "parameters": {
-                "name": {
-                  "description": "Resource name for the `Release`.\n\n`Release` names may be structured `app1/prod/v2` or flat `app1_prod_v2`\nwhich affords developers a great deal of flexibility in mapping the name\nto the style that best fits their existing development practices. For\nexample, a name could refer to an environment, an app, a version, or some\ncombination of three.\n\nIn the table below, for the project name `projects/foo`, the following\nrelative release paths show how flat and structured names might be chosen\nto match a desired development / deployment strategy.\n\nUse Case     | Flat Name           | Structured Name\n-------------|---------------------|----------------\nEnvironments | releases/qa         | releases/qa\nApps         | releases/app1_qa    | releases/app1/qa\nVersions     | releases/app1_v2_qa | releases/app1/v2/qa\n\nThe delimiter between the release name path elements can be almost anything\nand it should work equally well with the release name list filter, but in\nmany ways the structured paths provide a clearer picture of the\nrelationship between `Release` instances.\n\nFormat: `projects/{project_id}/releases/{release_id}`",
-                  "required": true,
-                  "type": "string",
-                  "pattern": "^projects/[^/]+/releases/.+$",
-                  "location": "path"
-                }
+              "response": {
+                "$ref": "Release"
               },
               "scopes": [
                 "https://www.googleapis.com/auth/cloud-platform",
                 "https://www.googleapis.com/auth/firebase"
               ],
+              "parameters": {
+                "name": {
+                  "pattern": "^projects/[^/]+/releases/.+$",
+                  "location": "path",
+                  "description": "Resource name for the `Release`.\n\n`Release` names may be structured `app1/prod/v2` or flat `app1_prod_v2`\nwhich affords developers a great deal of flexibility in mapping the name\nto the style that best fits their existing development practices. For\nexample, a name could refer to an environment, an app, a version, or some\ncombination of three.\n\nIn the table below, for the project name `projects/foo`, the following\nrelative release paths show how flat and structured names might be chosen\nto match a desired development / deployment strategy.\n\nUse Case     | Flat Name           | Structured Name\n-------------|---------------------|----------------\nEnvironments | releases/qa         | releases/qa\nApps         | releases/app1_qa    | releases/app1/qa\nVersions     | releases/app1_v2_qa | releases/app1/v2/qa\n\nThe delimiter between the release name path elements can be almost anything\nand it should work equally well with the release name list filter, but in\nmany ways the structured paths provide a clearer picture of the\nrelationship between `Release` instances.\n\nFormat: `projects/{project_id}/releases/{release_id}`",
+                  "required": true,
+                  "type": "string"
+                }
+              },
               "flatPath": "v1/projects/{projectsId}/releases/{releasesId}",
-              "path": "v1/{+name}",
-              "id": "firebaserules.projects.releases.update"
+              "id": "firebaserules.projects.releases.update",
+              "path": "v1/{+name}"
             },
             "create": {
-              "request": {
-                "$ref": "Release"
-              },
-              "description": "Create a `Release`.\n\nRelease names should reflect the developer's deployment practices. For\nexample, the release name may include the environment name, application\nname, application version, or any other name meaningful to the developer.\nOnce a `Release` refers to a `Ruleset`, the rules can be enforced by\nFirebase Rules-enabled services.\n\nMore than one `Release` may be 'live' concurrently. Consider the following\nthree `Release` names for `projects/foo` and the `Ruleset` to which they\nrefer.\n\nRelease Name                    | Ruleset Name\n--------------------------------|-------------\nprojects/foo/releases/prod      | projects/foo/rulesets/uuid123\nprojects/foo/releases/prod/beta | projects/foo/rulesets/uuid123\nprojects/foo/releases/prod/v23  | projects/foo/rulesets/uuid456\n\nThe table reflects the `Ruleset` rollout in progress. The `prod` and\n`prod/beta` releases refer to the same `Ruleset`. However, `prod/v23`\nrefers to a new `Ruleset`. The `Ruleset` reference for a `Release` may be\nupdated using the UpdateRelease method, and the custom `Release` name\nmay be referenced by specifying the `X-Firebase-Rules-Release-Name` header.",
               "response": {
                 "$ref": "Release"
               },
@@ -297,22 +299,26 @@
                 "name"
               ],
               "httpMethod": "POST",
-              "parameters": {
-                "name": {
-                  "location": "path",
-                  "description": "Resource name for the project which owns this `Release`.\n\nFormat: `projects/{project_id}`",
-                  "required": true,
-                  "type": "string",
-                  "pattern": "^projects/[^/]+$"
-                }
-              },
               "scopes": [
                 "https://www.googleapis.com/auth/cloud-platform",
                 "https://www.googleapis.com/auth/firebase"
               ],
+              "parameters": {
+                "name": {
+                  "description": "Resource name for the project which owns this `Release`.\n\nFormat: `projects/{project_id}`",
+                  "required": true,
+                  "type": "string",
+                  "pattern": "^projects/[^/]+$",
+                  "location": "path"
+                }
+              },
               "flatPath": "v1/projects/{projectsId}/releases",
               "path": "v1/{+name}/releases",
-              "id": "firebaserules.projects.releases.create"
+              "id": "firebaserules.projects.releases.create",
+              "description": "Create a `Release`.\n\nRelease names should reflect the developer's deployment practices. For\nexample, the release name may include the environment name, application\nname, application version, or any other name meaningful to the developer.\nOnce a `Release` refers to a `Ruleset`, the rules can be enforced by\nFirebase Rules-enabled services.\n\nMore than one `Release` may be 'live' concurrently. Consider the following\nthree `Release` names for `projects/foo` and the `Ruleset` to which they\nrefer.\n\nRelease Name                    | Ruleset Name\n--------------------------------|-------------\nprojects/foo/releases/prod      | projects/foo/rulesets/uuid123\nprojects/foo/releases/prod/beta | projects/foo/rulesets/uuid123\nprojects/foo/releases/prod/v23  | projects/foo/rulesets/uuid456\n\nThe table reflects the `Ruleset` rollout in progress. The `prod` and\n`prod/beta` releases refer to the same `Ruleset`. However, `prod/v23`\nrefers to a new `Ruleset`. The `Ruleset` reference for a `Release` may be\nupdated using the UpdateRelease method.",
+              "request": {
+                "$ref": "Release"
+              }
             }
           }
         }
@@ -320,25 +326,78 @@
     }
   },
   "parameters": {
-    "$.xgafv": {
-      "description": "V1 error format.",
-      "type": "string",
-      "enumDescriptions": [
-        "v1 error format",
-        "v2 error format"
-      ],
+    "access_token": {
       "location": "query",
-      "enum": [
-        "1",
-        "2"
-      ]
+      "description": "OAuth access token.",
+      "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"
+    },
+    "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."
+    },
+    "pp": {
+      "location": "query",
+      "description": "Pretty-print response.",
+      "type": "boolean",
+      "default": "true"
+    },
+    "bearer_token": {
+      "location": "query",
+      "description": "OAuth bearer token.",
+      "type": "string"
+    },
+    "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"
+    },
+    "prettyPrint": {
+      "description": "Returns response with indentations and line breaks.",
+      "type": "boolean",
+      "default": "true",
+      "location": "query"
+    },
+    "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\").",
+      "type": "string",
+      "location": "query"
     },
     "callback": {
       "location": "query",
       "description": "JSONP",
       "type": "string"
     },
+    "$.xgafv": {
+      "location": "query",
+      "enum": [
+        "1",
+        "2"
+      ],
+      "description": "V1 error format.",
+      "type": "string",
+      "enumDescriptions": [
+        "v1 error format",
+        "v2 error format"
+      ]
+    },
     "alt": {
+      "type": "string",
       "enumDescriptions": [
         "Responses with Content-Type of application/json",
         "Media download with context-dependent Content-Type",
@@ -351,79 +410,155 @@
         "json",
         "media",
         "proto"
-      ],
-      "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"
-    },
-    "access_token": {
-      "description": "OAuth access token.",
-      "type": "string",
-      "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"
-    },
-    "pp": {
-      "location": "query",
-      "description": "Pretty-print response.",
-      "type": "boolean",
-      "default": "true"
-    },
-    "oauth_token": {
-      "location": "query",
-      "description": "OAuth 2.0 token for the current user.",
-      "type": "string"
-    },
-    "bearer_token": {
-      "description": "OAuth bearer token.",
-      "type": "string",
-      "location": "query"
-    },
-    "upload_protocol": {
-      "location": "query",
-      "description": "Upload protocol for media (e.g. \"raw\", \"multipart\").",
-      "type": "string"
-    },
-    "prettyPrint": {
-      "location": "query",
-      "description": "Returns response with indentations and line breaks.",
-      "type": "boolean",
-      "default": "true"
-    },
-    "fields": {
-      "description": "Selector specifying which fields to include in a partial response.",
-      "type": "string",
-      "location": "query"
-    },
-    "uploadType": {
-      "location": "query",
-      "description": "Legacy upload protocol for media (e.g. \"media\", \"multipart\").",
-      "type": "string"
+      ]
     }
   },
   "version": "v1",
   "baseUrl": "https://firebaserules.googleapis.com/",
-  "servicePath": "",
-  "description": "Creates and manages rules that determine when a Firebase Rules-enabled service should permit a request.\n",
   "kind": "discovery#restDescription",
+  "description": "Creates and manages rules that determine when a Firebase Rules-enabled service should permit a request.\n",
+  "servicePath": "",
   "basePath": "",
-  "id": "firebaserules:v1",
+  "revision": "20170314",
   "documentationLink": "https://firebase.google.com/docs/storage/security",
-  "revision": "20170210",
+  "id": "firebaserules:v1",
   "discoveryVersion": "v1",
   "version_module": "True",
   "schemas": {
-    "Empty": {
-      "description": "A generic empty message that you can re-use to avoid defining duplicated\nempty messages in your APIs. A typical example is to use it as the request\nor the response type of an API method. For instance:\n\n    service Foo {\n      rpc Bar(google.protobuf.Empty) returns (google.protobuf.Empty);\n    }\n\nThe JSON representation for `Empty` is empty JSON object `{}`.",
+    "Source": {
+      "id": "Source",
+      "description": "`Source` is one or more `File` messages comprising a logical set of rules.",
       "type": "object",
-      "properties": {},
-      "id": "Empty"
+      "properties": {
+        "files": {
+          "description": "`File` set constituting the `Source` bundle.",
+          "type": "array",
+          "items": {
+            "$ref": "File"
+          }
+        }
+      }
+    },
+    "SourcePosition": {
+      "description": "Position in the `Source` content including its line, column number, and an\nindex of the `File` in the `Source` message. Used for debug purposes.",
+      "type": "object",
+      "properties": {
+        "line": {
+          "description": "Line number of the source fragment. 1-based.",
+          "format": "int32",
+          "type": "integer"
+        },
+        "column": {
+          "description": "First column on the source line associated with the source fragment.",
+          "format": "int32",
+          "type": "integer"
+        },
+        "fileName": {
+          "type": "string",
+          "description": "Name of the `File`."
+        }
+      },
+      "id": "SourcePosition"
+    },
+    "Issue": {
+      "description": "Issues include warnings, errors, and deprecation notices.",
+      "type": "object",
+      "properties": {
+        "sourcePosition": {
+          "$ref": "SourcePosition",
+          "description": "Position of the issue in the `Source`."
+        },
+        "severity": {
+          "enum": [
+            "SEVERITY_UNSPECIFIED",
+            "DEPRECATION",
+            "WARNING",
+            "ERROR"
+          ],
+          "description": "The severity of the issue.",
+          "type": "string",
+          "enumDescriptions": [
+            "An unspecified severity.",
+            "Deprecation issue for statements and method that may no longer be\nsupported or maintained.",
+            "Warnings such as: unused variables.",
+            "Errors such as: unmatched curly braces or variable redefinition."
+          ]
+        },
+        "description": {
+          "description": "Short error description.",
+          "type": "string"
+        }
+      },
+      "id": "Issue"
+    },
+    "TestRulesetRequest": {
+      "description": "The request for FirebaseRulesService.TestRuleset.",
+      "type": "object",
+      "properties": {
+        "source": {
+          "$ref": "Source",
+          "description": "Optional `Source` to be checked for correctness.\n\nThis field must not be set when the resource name refers to a `Ruleset`."
+        }
+      },
+      "id": "TestRulesetRequest"
+    },
+    "Ruleset": {
+      "description": "`Ruleset` is an immutable copy of `Source` with a globally unique identifier\nand a creation time.",
+      "type": "object",
+      "properties": {
+        "source": {
+          "$ref": "Source",
+          "description": "`Source` for the `Ruleset`."
+        },
+        "createTime": {
+          "description": "Time the `Ruleset` was created.\nOutput only.",
+          "format": "google-datetime",
+          "type": "string"
+        },
+        "name": {
+          "description": "Name of the `Ruleset`. The ruleset_id is auto generated by the service.\nFormat: `projects/{project_id}/rulesets/{ruleset_id}`\nOutput only.",
+          "type": "string"
+        }
+      },
+      "id": "Ruleset"
+    },
+    "FunctionCall": {
+      "type": "object",
+      "properties": {
+        "function": {
+          "description": "Name of the function invoked.",
+          "type": "string"
+        },
+        "args": {
+          "description": "The arguments that were provided to the function.",
+          "type": "array",
+          "items": {
+            "type": "any"
+          }
+        }
+      },
+      "id": "FunctionCall",
+      "description": "Represents a service-defined function call that was invoked during test\nexecution."
+    },
+    "File": {
+      "properties": {
+        "name": {
+          "description": "File name.",
+          "type": "string"
+        },
+        "content": {
+          "description": "Textual Content.",
+          "type": "string"
+        },
+        "fingerprint": {
+          "description": "Fingerprint (e.g. github sha) associated with the `File`.",
+          "format": "byte",
+          "type": "string"
+        }
+      },
+      "id": "File",
+      "description": "`File` containing source content.",
+      "type": "object"
     },
     "ListReleasesResponse": {
       "description": "The response for FirebaseRulesService.ListReleases.",
@@ -443,37 +578,17 @@
       },
       "id": "ListReleasesResponse"
     },
-    "File": {
-      "description": "`File` containing source content.",
-      "type": "object",
-      "properties": {
-        "content": {
-          "description": "Textual Content.",
-          "type": "string"
-        },
-        "fingerprint": {
-          "description": "Fingerprint (e.g. github sha) associated with the `File`.",
-          "format": "byte",
-          "type": "string"
-        },
-        "name": {
-          "description": "File name.",
-          "type": "string"
-        }
-      },
-      "id": "File"
-    },
     "Release": {
       "description": "`Release` is a named reference to a `Ruleset`. Once a `Release` refers to a\n`Ruleset`, rules-enabled services will be able to enforce the `Ruleset`.",
       "type": "object",
       "properties": {
         "createTime": {
-          "description": "Time the release was created.\n@OutputOnly",
+          "description": "Time the release was created.\nOutput only.",
           "format": "google-datetime",
           "type": "string"
         },
         "updateTime": {
-          "description": "Time the release was updated.\n@OutputOnly",
+          "description": "Time the release was updated.\nOutput only.",
           "format": "google-datetime",
           "type": "string"
         },
@@ -482,16 +597,21 @@
           "type": "string"
         },
         "rulesetName": {
-          "description": "Name of the `Ruleset` referred to by this `Release`. The `Ruleset` must\nexist the `Release` to be created.",
-          "type": "string"
+          "type": "string",
+          "description": "Name of the `Ruleset` referred to by this `Release`. The `Ruleset` must\nexist the `Release` to be created."
         }
       },
       "id": "Release"
     },
     "TestRulesetResponse": {
-      "description": "The response for FirebaseRulesService.TestRuleset.",
-      "type": "object",
       "properties": {
+        "testResults": {
+          "description": "The set of test results given the test cases in the `TestSuite`.\nThe results will appear in the same order as the test cases appear in the\n`TestSuite`.",
+          "type": "array",
+          "items": {
+            "$ref": "TestResult"
+          }
+        },
         "issues": {
           "description": "Syntactic and semantic `Source` issues of varying severity. Issues of\n`ERROR` severity will prevent tests from executing.",
           "type": "array",
@@ -500,130 +620,80 @@
           }
         }
       },
-      "id": "TestRulesetResponse"
+      "id": "TestRulesetResponse",
+      "description": "The response for FirebaseRulesService.TestRuleset.",
+      "type": "object"
     },
     "ListRulesetsResponse": {
-      "description": "The response for FirebaseRulesService.ListRulesets",
-      "type": "object",
       "properties": {
-        "nextPageToken": {
-          "description": "The pagination token to retrieve the next page of results. If the value is\nempty, no further results remain.",
-          "type": "string"
-        },
         "rulesets": {
           "description": "List of `Ruleset` instances.",
           "type": "array",
           "items": {
             "$ref": "Ruleset"
           }
+        },
+        "nextPageToken": {
+          "description": "The pagination token to retrieve the next page of results. If the value is\nempty, no further results remain.",
+          "type": "string"
         }
       },
-      "id": "ListRulesetsResponse"
+      "id": "ListRulesetsResponse",
+      "description": "The response for FirebaseRulesService.ListRulesets.",
+      "type": "object"
     },
-    "Source": {
-      "description": "`Source` is one or more `File` messages comprising a logical set of rules.",
+    "TestResult": {
+      "description": "Test result message containing the state of the test as well as a\ndescription and source position for test failures.",
       "type": "object",
       "properties": {
-        "files": {
-          "description": "`File` set constituting the `Source` bundle.",
+        "functionCalls": {
+          "description": "The set of function calls made to service-defined methods.\n\nFunction calls are included in the order in which they are encountered\nduring evaluation, are provided for both mocked and unmocked functions,\nand included on the response regardless of the test `state`.",
           "type": "array",
           "items": {
-            "$ref": "File"
+            "$ref": "FunctionCall"
           }
-        }
-      },
-      "id": "Source"
-    },
-    "SourcePosition": {
-      "description": "Position in the `Source` content including its line, column number, and an\nindex of the `File` in the `Source` message. Used for debug purposes.",
-      "type": "object",
-      "properties": {
-        "column": {
-          "description": "First column on the source line associated with the source fragment.",
-          "format": "int32",
-          "type": "integer"
         },
-        "fileName": {
-          "description": "Name of the `File`.",
-          "type": "string"
-        },
-        "line": {
-          "description": "Line number of the source fragment. 1-based.",
-          "format": "int32",
-          "type": "integer"
-        }
-      },
-      "id": "SourcePosition"
-    },
-    "Issue": {
-      "description": "Issues include warnings, errors, and deprecation notices.",
-      "type": "object",
-      "properties": {
-        "sourcePosition": {
-          "$ref": "SourcePosition",
-          "description": "Position of the issue in the `Source`."
-        },
-        "severity": {
+        "state": {
+          "description": "State of the test.",
+          "type": "string",
           "enumDescriptions": [
-            "An unspecified severity.",
-            "Deprecation issue for statements and method that may no longer be\nsupported or maintained.",
-            "Warnings such as: unused variables.",
-            "Errors such as: unmatched curly braces or variable redefinition."
+            "Test state is not set.",
+            "Test is a success.",
+            "Test is a failure."
           ],
           "enum": [
-            "SEVERITY_UNSPECIFIED",
-            "DEPRECATION",
-            "WARNING",
-            "ERROR"
-          ],
-          "description": "The severity of the issue.",
-          "type": "string"
+            "STATE_UNSPECIFIED",
+            "SUCCESS",
+            "FAILURE"
+          ]
         },
-        "description": {
-          "description": "Short error description.",
-          "type": "string"
+        "debugMessages": {
+          "description": "Debug messages related to test execution issues encountered during\nevaluation.\n\nDebug messages may be related to too many or too few invocations of\nfunction mocks or to runtime errors that occur during evaluation.\n\nFor example: ```Unable to read variable [name: \"resource\"]```",
+          "type": "array",
+          "items": {
+            "type": "string"
+          }
+        },
+        "errorPosition": {
+          "$ref": "SourcePosition",
+          "description": "Position in the `Source` or `Ruleset` where the principle runtime error\noccurs.\n\nEvaluation of an expression may result in an error. Rules are deny by\ndefault, so a `DENY` expectation when an error is generated is valid.\nWhen there is a `DENY` with an error, the `SourcePosition` is returned.\n\nE.g. `error_position { line: 19 column: 37 }`"
         }
       },
-      "id": "Issue"
+      "id": "TestResult"
     },
-    "Ruleset": {
-      "description": "`Ruleset` is an immutable copy of `Source` with a globally unique identifier\nand a creation time.",
+    "Empty": {
+      "description": "A generic empty message that you can re-use to avoid defining duplicated\nempty messages in your APIs. A typical example is to use it as the request\nor the response type of an API method. For instance:\n\n    service Foo {\n      rpc Bar(google.protobuf.Empty) returns (google.protobuf.Empty);\n    }\n\nThe JSON representation for `Empty` is empty JSON object `{}`.",
       "type": "object",
-      "properties": {
-        "createTime": {
-          "description": "Time the `Ruleset` was created.\n@OutputOnly",
-          "format": "google-datetime",
-          "type": "string"
-        },
-        "name": {
-          "description": "Name of the `Ruleset`. The ruleset_id is auto generated by the service.\nFormat: `projects/{project_id}/rulesets/{ruleset_id}`\n@OutputOnly",
-          "type": "string"
-        },
-        "source": {
-          "$ref": "Source",
-          "description": "`Source` for the `Ruleset`."
-        }
-      },
-      "id": "Ruleset"
-    },
-    "TestRulesetRequest": {
-      "description": "The request for FirebaseRulesService.TestRuleset.",
-      "type": "object",
-      "properties": {
-        "source": {
-          "$ref": "Source",
-          "description": "`Source` to be checked for correctness."
-        }
-      },
-      "id": "TestRulesetRequest"
+      "properties": {},
+      "id": "Empty"
     }
   },
-  "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",
-  "canonicalName": "Firebase Rules API",
+  "icons": {
+    "x16": "http://www.google.com/images/icons/product/search-16.gif",
+    "x32": "http://www.google.com/images/icons/product/search-32.gif"
+  },
+  "canonicalName": "Firebase Rules",
   "auth": {
     "oauth2": {
       "scopes": {
@@ -643,6 +713,5 @@
   "ownerDomain": "google.com",
   "name": "firebaserules",
   "batchPath": "batch",
-  "title": "Firebase Rules API",
-  "ownerName": "Google"
+  "title": "Firebase Rules API"
 }
diff --git a/firebaserules/v1/firebaserules-gen.go b/firebaserules/v1/firebaserules-gen.go
index 494eac4..b7802b1 100644
--- a/firebaserules/v1/firebaserules-gen.go
+++ b/firebaserules/v1/firebaserules-gen.go
@@ -67,10 +67,9 @@
 }
 
 type Service struct {
-	client                    *http.Client
-	BasePath                  string // API endpoint base URL
-	UserAgent                 string // optional additional User-Agent fragment
-	GoogleClientHeaderElement string // client header fragment, for Google use only
+	client    *http.Client
+	BasePath  string // API endpoint base URL
+	UserAgent string // optional additional User-Agent fragment
 
 	Projects *ProjectsService
 }
@@ -82,10 +81,6 @@
 	return googleapi.UserAgent + " " + s.UserAgent
 }
 
-func (s *Service) clientHeader() string {
-	return gensupport.GoogleClientHeader("20170210", s.GoogleClientHeaderElement)
-}
-
 func NewProjectsService(s *Service) *ProjectsService {
 	rs := &ProjectsService{s: s}
 	rs.Releases = NewProjectsReleasesService(s)
@@ -172,6 +167,39 @@
 	return gensupport.MarshalJSON(raw, s.ForceSendFields, s.NullFields)
 }
 
+// FunctionCall: Represents a service-defined function call that was
+// invoked during test
+// execution.
+type FunctionCall struct {
+	// Args: The arguments that were provided to the function.
+	Args []interface{} `json:"args,omitempty"`
+
+	// Function: Name of the function invoked.
+	Function string `json:"function,omitempty"`
+
+	// ForceSendFields is a list of field names (e.g. "Args") to
+	// unconditionally include in API requests. By default, fields with
+	// empty values are omitted from API requests. However, any non-pointer,
+	// non-interface field appearing in ForceSendFields will be sent to the
+	// server regardless of whether the field is empty or not. This may be
+	// used to include empty fields in Patch requests.
+	ForceSendFields []string `json:"-"`
+
+	// NullFields is a list of field names (e.g. "Args") to include in API
+	// requests with the JSON null value. By default, fields with empty
+	// values are omitted from API requests. However, any field with an
+	// empty value appearing in NullFields will be sent to the server as
+	// null. It is an error if a field in this list has a non-empty value.
+	// This may be used to include null fields in Patch requests.
+	NullFields []string `json:"-"`
+}
+
+func (s *FunctionCall) MarshalJSON() ([]byte, error) {
+	type noMethod FunctionCall
+	raw := noMethod(*s)
+	return gensupport.MarshalJSON(raw, s.ForceSendFields, s.NullFields)
+}
+
 // Issue: Issues include warnings, errors, and deprecation notices.
 type Issue struct {
 	// Description: Short error description.
@@ -254,7 +282,7 @@
 }
 
 // ListRulesetsResponse: The response for
-// FirebaseRulesService.ListRulesets
+// FirebaseRulesService.ListRulesets.
 type ListRulesetsResponse struct {
 	// NextPageToken: The pagination token to retrieve the next page of
 	// results. If the value is
@@ -297,7 +325,7 @@
 // `Ruleset`.
 type Release struct {
 	// CreateTime: Time the release was created.
-	// @OutputOnly
+	// Output only.
 	CreateTime string `json:"createTime,omitempty"`
 
 	// Name: Resource name for the `Release`.
@@ -343,7 +371,7 @@
 	RulesetName string `json:"rulesetName,omitempty"`
 
 	// UpdateTime: Time the release was updated.
-	// @OutputOnly
+	// Output only.
 	UpdateTime string `json:"updateTime,omitempty"`
 
 	// ServerResponse contains the HTTP response code and headers from the
@@ -378,13 +406,13 @@
 // and a creation time.
 type Ruleset struct {
 	// CreateTime: Time the `Ruleset` was created.
-	// @OutputOnly
+	// Output only.
 	CreateTime string `json:"createTime,omitempty"`
 
 	// Name: Name of the `Ruleset`. The ruleset_id is auto generated by the
 	// service.
 	// Format: `projects/{project_id}/rulesets/{ruleset_id}`
-	// @OutputOnly
+	// Output only.
 	Name string `json:"name,omitempty"`
 
 	// Source: `Source` for the `Ruleset`.
@@ -483,9 +511,83 @@
 	return gensupport.MarshalJSON(raw, s.ForceSendFields, s.NullFields)
 }
 
+// TestResult: Test result message containing the state of the test as
+// well as a
+// description and source position for test failures.
+type TestResult struct {
+	// DebugMessages: Debug messages related to test execution issues
+	// encountered during
+	// evaluation.
+	//
+	// Debug messages may be related to too many or too few invocations
+	// of
+	// function mocks or to runtime errors that occur during
+	// evaluation.
+	//
+	// For example: ```Unable to read variable [name: "resource"]```
+	DebugMessages []string `json:"debugMessages,omitempty"`
+
+	// ErrorPosition: Position in the `Source` or `Ruleset` where the
+	// principle runtime error
+	// occurs.
+	//
+	// Evaluation of an expression may result in an error. Rules are deny
+	// by
+	// default, so a `DENY` expectation when an error is generated is
+	// valid.
+	// When there is a `DENY` with an error, the `SourcePosition` is
+	// returned.
+	//
+	// E.g. `error_position { line: 19 column: 37 }`
+	ErrorPosition *SourcePosition `json:"errorPosition,omitempty"`
+
+	// FunctionCalls: The set of function calls made to service-defined
+	// methods.
+	//
+	// Function calls are included in the order in which they are
+	// encountered
+	// during evaluation, are provided for both mocked and unmocked
+	// functions,
+	// and included on the response regardless of the test `state`.
+	FunctionCalls []*FunctionCall `json:"functionCalls,omitempty"`
+
+	// State: State of the test.
+	//
+	// Possible values:
+	//   "STATE_UNSPECIFIED" - Test state is not set.
+	//   "SUCCESS" - Test is a success.
+	//   "FAILURE" - Test is a failure.
+	State string `json:"state,omitempty"`
+
+	// ForceSendFields is a list of field names (e.g. "DebugMessages") to
+	// unconditionally include in API requests. By default, fields with
+	// empty values are omitted from API requests. However, any non-pointer,
+	// non-interface field appearing in ForceSendFields will be sent to the
+	// server regardless of whether the field is empty or not. This may be
+	// used to include empty fields in Patch requests.
+	ForceSendFields []string `json:"-"`
+
+	// NullFields is a list of field names (e.g. "DebugMessages") to include
+	// in API requests with the JSON null value. By default, fields with
+	// empty values are omitted from API requests. However, any field with
+	// an empty value appearing in NullFields will be sent to the server as
+	// null. It is an error if a field in this list has a non-empty value.
+	// This may be used to include null fields in Patch requests.
+	NullFields []string `json:"-"`
+}
+
+func (s *TestResult) MarshalJSON() ([]byte, error) {
+	type noMethod TestResult
+	raw := noMethod(*s)
+	return gensupport.MarshalJSON(raw, s.ForceSendFields, s.NullFields)
+}
+
 // TestRulesetRequest: The request for FirebaseRulesService.TestRuleset.
 type TestRulesetRequest struct {
-	// Source: `Source` to be checked for correctness.
+	// Source: Optional `Source` to be checked for correctness.
+	//
+	// This field must not be set when the resource name refers to a
+	// `Ruleset`.
 	Source *Source `json:"source,omitempty"`
 
 	// ForceSendFields is a list of field names (e.g. "Source") to
@@ -519,6 +621,13 @@
 	// `ERROR` severity will prevent tests from executing.
 	Issues []*Issue `json:"issues,omitempty"`
 
+	// TestResults: The set of test results given the test cases in the
+	// `TestSuite`.
+	// The results will appear in the same order as the test cases appear in
+	// the
+	// `TestSuite`.
+	TestResults []*TestResult `json:"testResults,omitempty"`
+
 	// ServerResponse contains the HTTP response code and headers from the
 	// server.
 	googleapi.ServerResponse `json:"-"`
@@ -558,18 +667,16 @@
 }
 
 // Test: Test `Source` for syntactic and semantic correctness. Issues
-// present in the
-// rules, if any, will be returned to the caller with a description,
-// severity,
-// and source location.
+// present, if
+// any, will be returned to the caller with a description, severity,
+// and
+// source location.
 //
-// The test method will typically be executed with a developer
-// provided
-// `Source`, but if regression testing is desired, this method may
-// be
-// executed against a `Ruleset` resource name and the `Source` will
-// be
-// retrieved from the persisted `Ruleset`.
+// The test method may be executed with `Source` or a `Ruleset`
+// name.
+// Passing `Source` is useful for unit testing new rules. Passing a
+// `Ruleset`
+// name is useful for regression testing an existing rule.
 //
 // The following is an example of `Source` that permits users to upload
 // images
@@ -581,10 +688,10 @@
 //     // Users are allowed to subscribe and unsubscribe to the blog.
 //     service firebase.storage {
 //       match /users/{userId}/images/{imageName} {
-//           allow write: if userId == request.userId
-//               && (imageName.endsWith('.png') ||
-// imageName.endsWith('.jpg'))
-//               && resource.mimeType.startsWith('image/')
+//           allow write: if userId == request.auth.uid
+//               && (imageName.matches('*.png$')
+//               || imageName.matches('*.jpg$'))
+//               && resource.mimeType.matches('^image/')
 //       }
 //     }
 func (r *ProjectsService) Test(name string, testrulesetrequest *TestRulesetRequest) *ProjectsTestCall {
@@ -625,7 +732,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	var body io.Reader = nil
 	body, err := googleapi.WithoutDataWrapper.JSONReader(c.testrulesetrequest)
 	if err != nil {
@@ -681,7 +787,7 @@
 	}
 	return ret, nil
 	// {
-	//   "description": "Test `Source` for syntactic and semantic correctness. Issues present in the\nrules, if any, will be returned to the caller with a description, severity,\nand source location.\n\nThe test method will typically be executed with a developer provided\n`Source`, but if regression testing is desired, this method may be\nexecuted against a `Ruleset` resource name and the `Source` will be\nretrieved from the persisted `Ruleset`.\n\nThe following is an example of `Source` that permits users to upload images\nto a bucket bearing their user id and matching the correct metadata:\n\n_*Example*_\n\n    // Users are allowed to subscribe and unsubscribe to the blog.\n    service firebase.storage {\n      match /users/{userId}/images/{imageName} {\n          allow write: if userId == request.userId\n              \u0026\u0026 (imageName.endsWith('.png') || imageName.endsWith('.jpg'))\n              \u0026\u0026 resource.mimeType.startsWith('image/')\n      }\n    }",
+	//   "description": "Test `Source` for syntactic and semantic correctness. Issues present, if\nany, will be returned to the caller with a description, severity, and\nsource location.\n\nThe test method may be executed with `Source` or a `Ruleset` name.\nPassing `Source` is useful for unit testing new rules. Passing a `Ruleset`\nname is useful for regression testing an existing rule.\n\nThe following is an example of `Source` that permits users to upload images\nto a bucket bearing their user id and matching the correct metadata:\n\n_*Example*_\n\n    // Users are allowed to subscribe and unsubscribe to the blog.\n    service firebase.storage {\n      match /users/{userId}/images/{imageName} {\n          allow write: if userId == request.auth.uid\n              \u0026\u0026 (imageName.matches('*.png$')\n              || imageName.matches('*.jpg$'))\n              \u0026\u0026 resource.mimeType.matches('^image/')\n      }\n    }",
 	//   "flatPath": "v1/projects/{projectsId}:test",
 	//   "httpMethod": "POST",
 	//   "id": "firebaserules.projects.test",
@@ -690,7 +796,7 @@
 	//   ],
 	//   "parameters": {
 	//     "name": {
-	//       "description": "Name of the project.\n\nFormat: `projects/{project_id}`",
+	//       "description": "Tests may either provide `source` or a `Ruleset` resource name.\n\nFor tests against `source`, the resource name must refer to the project:\nFormat: `projects/{project_id}`\n\nFor tests against a `Ruleset`, this must be the `Ruleset` resource name:\nFormat: `projects/{project_id}/rulesets/{ruleset_id}`",
 	//       "location": "path",
 	//       "pattern": "^projects/.+$",
 	//       "required": true,
@@ -758,10 +864,7 @@
 // `prod/v23`
 // refers to a new `Ruleset`. The `Ruleset` reference for a `Release`
 // may be
-// updated using the UpdateRelease method, and the custom `Release`
-// name
-// may be referenced by specifying the `X-Firebase-Rules-Release-Name`
-// header.
+// updated using the UpdateRelease method.
 func (r *ProjectsReleasesService) Create(name string, release *Release) *ProjectsReleasesCreateCall {
 	c := &ProjectsReleasesCreateCall{s: r.s, urlParams_: make(gensupport.URLParams)}
 	c.name = name
@@ -800,7 +903,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	var body io.Reader = nil
 	body, err := googleapi.WithoutDataWrapper.JSONReader(c.release)
 	if err != nil {
@@ -856,7 +958,7 @@
 	}
 	return ret, nil
 	// {
-	//   "description": "Create a `Release`.\n\nRelease names should reflect the developer's deployment practices. For\nexample, the release name may include the environment name, application\nname, application version, or any other name meaningful to the developer.\nOnce a `Release` refers to a `Ruleset`, the rules can be enforced by\nFirebase Rules-enabled services.\n\nMore than one `Release` may be 'live' concurrently. Consider the following\nthree `Release` names for `projects/foo` and the `Ruleset` to which they\nrefer.\n\nRelease Name                    | Ruleset Name\n--------------------------------|-------------\nprojects/foo/releases/prod      | projects/foo/rulesets/uuid123\nprojects/foo/releases/prod/beta | projects/foo/rulesets/uuid123\nprojects/foo/releases/prod/v23  | projects/foo/rulesets/uuid456\n\nThe table reflects the `Ruleset` rollout in progress. The `prod` and\n`prod/beta` releases refer to the same `Ruleset`. However, `prod/v23`\nrefers to a new `Ruleset`. The `Ruleset` reference for a `Release` may be\nupdated using the UpdateRelease method, and the custom `Release` name\nmay be referenced by specifying the `X-Firebase-Rules-Release-Name` header.",
+	//   "description": "Create a `Release`.\n\nRelease names should reflect the developer's deployment practices. For\nexample, the release name may include the environment name, application\nname, application version, or any other name meaningful to the developer.\nOnce a `Release` refers to a `Ruleset`, the rules can be enforced by\nFirebase Rules-enabled services.\n\nMore than one `Release` may be 'live' concurrently. Consider the following\nthree `Release` names for `projects/foo` and the `Ruleset` to which they\nrefer.\n\nRelease Name                    | Ruleset Name\n--------------------------------|-------------\nprojects/foo/releases/prod      | projects/foo/rulesets/uuid123\nprojects/foo/releases/prod/beta | projects/foo/rulesets/uuid123\nprojects/foo/releases/prod/v23  | projects/foo/rulesets/uuid456\n\nThe table reflects the `Ruleset` rollout in progress. The `prod` and\n`prod/beta` releases refer to the same `Ruleset`. However, `prod/v23`\nrefers to a new `Ruleset`. The `Ruleset` reference for a `Release` may be\nupdated using the UpdateRelease method.",
 	//   "flatPath": "v1/projects/{projectsId}/releases",
 	//   "httpMethod": "POST",
 	//   "id": "firebaserules.projects.releases.create",
@@ -935,7 +1037,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	var body io.Reader = nil
 	c.urlParams_.Set("alt", alt)
 	urls := googleapi.ResolveRelative(c.s.BasePath, "v1/{+name}")
@@ -1073,7 +1174,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	if c.ifNoneMatch_ != "" {
 		reqHeaders.Set("If-None-Match", c.ifNoneMatch_)
 	}
@@ -1136,7 +1236,7 @@
 	//   ],
 	//   "parameters": {
 	//     "name": {
-	//       "description": "Resource name of the `Release`.\n\n\nFormat: `projects/{project_id}/releases/{release_id}`",
+	//       "description": "Resource name of the `Release`.\n\nFormat: `projects/{project_id}/releases/{release_id}`",
 	//       "location": "path",
 	//       "pattern": "^projects/[^/]+/releases/.+$",
 	//       "required": true,
@@ -1169,7 +1269,9 @@
 
 // List: List the `Release` values for a project. This list may
 // optionally be
-// filtered by `Release` name or `Ruleset` id or both.
+// filtered by `Release` name, `Ruleset` name, `TestSuite` name, or
+// any
+// combination thereof.
 func (r *ProjectsReleasesService) List(name string) *ProjectsReleasesListCall {
 	c := &ProjectsReleasesListCall{s: r.s, urlParams_: make(gensupport.URLParams)}
 	c.name = name
@@ -1178,9 +1280,10 @@
 
 // Filter sets the optional parameter "filter": `Release` filter. The
 // list method supports filters with restrictions on the
-// `Release` `name` and also on the `Ruleset` `ruleset_name`.
+// `Release.name`, `Release.ruleset_name`, and
+// `Release.test_suite_name`.
 //
-// Example 1) A filter of 'name=prod*' might return `Release`s with
+// Example 1: A filter of 'name=prod*' might return `Release`s with
 // names
 // within 'projects/foo' prefixed with 'prod':
 //
@@ -1195,7 +1298,7 @@
 // projects/foo/releases/prod/v2 |
 // projects/foo/rulesets/uuid8888
 //
-// Example 2) A filter of `name=prod* ruleset_name=uuid1234` would
+// Example 2: A filter of `name=prod* ruleset_name=uuid1234` would
 // return only
 // `Release` instances for 'projects/foo' with names prefixed with
 // 'prod'
@@ -1209,13 +1312,10 @@
 // projects/foo/releases/prod/v1 | projects/foo/rulesets/1234
 //
 // In the examples, the filter parameters refer to the search filters
-// for
-// release and ruleset names are relative to the project releases and
-// rulesets
-// collections. Fully qualified prefixed may also be used.
+// are
+// relative to the project. Fully qualified prefixed may also be used.
 // e.g.
-// `name=projects/foo/releases/prod*
-// ruleset_name=projects/foo/rulesets/uuid1`
+// `test_suite_name=projects/foo/testsuites/uuid1`
 func (c *ProjectsReleasesListCall) Filter(filter string) *ProjectsReleasesListCall {
 	c.urlParams_.Set("filter", filter)
 	return c
@@ -1224,10 +1324,12 @@
 // PageSize sets the optional parameter "pageSize": Page size to load.
 // Maximum of 100. Defaults to 10.
 // Note: `page_size` is just a hint and the service may choose to load
-// less
-// than `page_size` due to the size of the output. To traverse all of
+// fewer
+// than `page_size` results due to the size of the output. To traverse
+// all of
+// the releases, the caller should iterate until the `page_token` on
 // the
-// releases, caller should iterate until the `page_token` is empty.
+// response is empty.
 func (c *ProjectsReleasesListCall) PageSize(pageSize int64) *ProjectsReleasesListCall {
 	c.urlParams_.Set("pageSize", fmt.Sprint(pageSize))
 	return c
@@ -1281,7 +1383,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	if c.ifNoneMatch_ != "" {
 		reqHeaders.Set("If-None-Match", c.ifNoneMatch_)
 	}
@@ -1335,7 +1436,7 @@
 	}
 	return ret, nil
 	// {
-	//   "description": "List the `Release` values for a project. This list may optionally be\nfiltered by `Release` name or `Ruleset` id or both.",
+	//   "description": "List the `Release` values for a project. This list may optionally be\nfiltered by `Release` name, `Ruleset` name, `TestSuite` name, or any\ncombination thereof.",
 	//   "flatPath": "v1/projects/{projectsId}/releases",
 	//   "httpMethod": "GET",
 	//   "id": "firebaserules.projects.releases.list",
@@ -1344,7 +1445,7 @@
 	//   ],
 	//   "parameters": {
 	//     "filter": {
-	//       "description": "`Release` filter. The list method supports filters with restrictions on the\n`Release` `name` and also on the `Ruleset` `ruleset_name`.\n\nExample 1) A filter of 'name=prod*' might return `Release`s with names\nwithin 'projects/foo' prefixed with 'prod':\n\nName                          | Ruleset Name\n------------------------------|-------------\nprojects/foo/releases/prod    | projects/foo/rulesets/uuid1234\nprojects/foo/releases/prod/v1 | projects/foo/rulesets/uuid1234\nprojects/foo/releases/prod/v2 | projects/foo/rulesets/uuid8888\n\nExample 2) A filter of `name=prod* ruleset_name=uuid1234` would return only\n`Release` instances for 'projects/foo' with names prefixed with 'prod'\nreferring to the same `Ruleset` name of 'uuid1234':\n\nName                          | Ruleset Name\n------------------------------|-------------\nprojects/foo/releases/prod    | projects/foo/rulesets/1234\nprojects/foo/releases/prod/v1 | projects/foo/rulesets/1234\n\nIn the examples, the filter parameters refer to the search filters for\nrelease and ruleset names are relative to the project releases and rulesets\ncollections. Fully qualified prefixed may also be used. e.g.\n`name=projects/foo/releases/prod* ruleset_name=projects/foo/rulesets/uuid1`",
+	//       "description": "`Release` filter. The list method supports filters with restrictions on the\n`Release.name`, `Release.ruleset_name`, and `Release.test_suite_name`.\n\nExample 1: A filter of 'name=prod*' might return `Release`s with names\nwithin 'projects/foo' prefixed with 'prod':\n\nName                          | Ruleset Name\n------------------------------|-------------\nprojects/foo/releases/prod    | projects/foo/rulesets/uuid1234\nprojects/foo/releases/prod/v1 | projects/foo/rulesets/uuid1234\nprojects/foo/releases/prod/v2 | projects/foo/rulesets/uuid8888\n\nExample 2: A filter of `name=prod* ruleset_name=uuid1234` would return only\n`Release` instances for 'projects/foo' with names prefixed with 'prod'\nreferring to the same `Ruleset` name of 'uuid1234':\n\nName                          | Ruleset Name\n------------------------------|-------------\nprojects/foo/releases/prod    | projects/foo/rulesets/1234\nprojects/foo/releases/prod/v1 | projects/foo/rulesets/1234\n\nIn the examples, the filter parameters refer to the search filters are\nrelative to the project. Fully qualified prefixed may also be used. e.g.\n`test_suite_name=projects/foo/testsuites/uuid1`",
 	//       "location": "query",
 	//       "type": "string"
 	//     },
@@ -1356,7 +1457,7 @@
 	//       "type": "string"
 	//     },
 	//     "pageSize": {
-	//       "description": "Page size to load. Maximum of 100. Defaults to 10.\nNote: `page_size` is just a hint and the service may choose to load less\nthan `page_size` due to the size of the output. To traverse all of the\nreleases, caller should iterate until the `page_token` is empty.",
+	//       "description": "Page size to load. Maximum of 100. Defaults to 10.\nNote: `page_size` is just a hint and the service may choose to load fewer\nthan `page_size` results due to the size of the output. To traverse all of\nthe releases, the caller should iterate until the `page_token` on the\nresponse is empty.",
 	//       "format": "int32",
 	//       "location": "query",
 	//       "type": "integer"
@@ -1414,11 +1515,11 @@
 
 // Update: Update a `Release`.
 //
-// Only updates to the `ruleset_name` field will be honored. `Release`
-// rename
-// is not supported. To create a `Release` use the CreateRelease
-// method
-// instead.
+// Only updates to the `ruleset_name` and `test_suite_name` fields will
+// be
+// honored. `Release` rename is not supported. To create a `Release` use
+// the
+// CreateRelease method.
 func (r *ProjectsReleasesService) Update(name string, release *Release) *ProjectsReleasesUpdateCall {
 	c := &ProjectsReleasesUpdateCall{s: r.s, urlParams_: make(gensupport.URLParams)}
 	c.name = name
@@ -1457,7 +1558,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	var body io.Reader = nil
 	body, err := googleapi.WithoutDataWrapper.JSONReader(c.release)
 	if err != nil {
@@ -1513,7 +1613,7 @@
 	}
 	return ret, nil
 	// {
-	//   "description": "Update a `Release`.\n\nOnly updates to the `ruleset_name` field will be honored. `Release` rename\nis not supported. To create a `Release` use the CreateRelease method\ninstead.",
+	//   "description": "Update a `Release`.\n\nOnly updates to the `ruleset_name` and `test_suite_name` fields will be\nhonored. `Release` rename is not supported. To create a `Release` use the\nCreateRelease method.",
 	//   "flatPath": "v1/projects/{projectsId}/releases/{releasesId}",
 	//   "httpMethod": "PUT",
 	//   "id": "firebaserules.projects.releases.update",
@@ -1602,7 +1702,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	var body io.Reader = nil
 	body, err := googleapi.WithoutDataWrapper.JSONReader(c.ruleset)
 	if err != nil {
@@ -1740,7 +1839,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	var body io.Reader = nil
 	c.urlParams_.Set("alt", alt)
 	urls := googleapi.ResolveRelative(c.s.BasePath, "v1/{+name}")
@@ -1878,7 +1976,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	if c.ifNoneMatch_ != "" {
 		reqHeaders.Set("If-None-Match", c.ifNoneMatch_)
 	}
@@ -1973,7 +2070,7 @@
 }
 
 // List: List `Ruleset` metadata only and optionally filter the results
-// by Ruleset
+// by `Ruleset`
 // name.
 //
 // The full `Source` contents of a `Ruleset` may be retrieved
@@ -1985,6 +2082,22 @@
 	return c
 }
 
+// Filter sets the optional parameter "filter": `Ruleset` filter. The
+// list method supports filters with restrictions
+// on
+// `Ruleset.name`.
+//
+// Filters on `Ruleset.create_time` should use the `date` function
+// which
+// parses strings that conform to the RFC 3339 date/time
+// specifications.
+//
+// Example: `create_time > date("2017-01-01") AND name=UUID-*`
+func (c *ProjectsRulesetsListCall) Filter(filter string) *ProjectsRulesetsListCall {
+	c.urlParams_.Set("filter", filter)
+	return c
+}
+
 // PageSize sets the optional parameter "pageSize": Page size to load.
 // Maximum of 100. Defaults to 10.
 // Note: `page_size` is just a hint and the service may choose to load
@@ -2045,7 +2158,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	if c.ifNoneMatch_ != "" {
 		reqHeaders.Set("If-None-Match", c.ifNoneMatch_)
 	}
@@ -2099,7 +2211,7 @@
 	}
 	return ret, nil
 	// {
-	//   "description": "List `Ruleset` metadata only and optionally filter the results by Ruleset\nname.\n\nThe full `Source` contents of a `Ruleset` may be retrieved with\nGetRuleset.",
+	//   "description": "List `Ruleset` metadata only and optionally filter the results by `Ruleset`\nname.\n\nThe full `Source` contents of a `Ruleset` may be retrieved with\nGetRuleset.",
 	//   "flatPath": "v1/projects/{projectsId}/rulesets",
 	//   "httpMethod": "GET",
 	//   "id": "firebaserules.projects.rulesets.list",
@@ -2107,6 +2219,11 @@
 	//     "name"
 	//   ],
 	//   "parameters": {
+	//     "filter": {
+	//       "description": "`Ruleset` filter. The list method supports filters with restrictions on\n`Ruleset.name`.\n\nFilters on `Ruleset.create_time` should use the `date` function which\nparses strings that conform to the RFC 3339 date/time specifications.\n\nExample: `create_time \u003e date(\"2017-01-01\") AND name=UUID-*`",
+	//       "location": "query",
+	//       "type": "string"
+	//     },
 	//     "name": {
 	//       "description": "Resource name for the project.\n\nFormat: `projects/{project_id}`",
 	//       "location": "path",
diff --git a/fitness/v1/fitness-gen.go b/fitness/v1/fitness-gen.go
index 71ff5e9..f33c29e 100644
--- a/fitness/v1/fitness-gen.go
+++ b/fitness/v1/fitness-gen.go
@@ -112,10 +112,9 @@
 }
 
 type Service struct {
-	client                    *http.Client
-	BasePath                  string // API endpoint base URL
-	UserAgent                 string // optional additional User-Agent fragment
-	GoogleClientHeaderElement string // client header fragment, for Google use only
+	client    *http.Client
+	BasePath  string // API endpoint base URL
+	UserAgent string // optional additional User-Agent fragment
 
 	Users *UsersService
 }
@@ -127,10 +126,6 @@
 	return googleapi.UserAgent + " " + s.UserAgent
 }
 
-func (s *Service) clientHeader() string {
-	return gensupport.GoogleClientHeader("20170210", s.GoogleClientHeaderElement)
-}
-
 func NewUsersService(s *Service) *UsersService {
 	rs := &UsersService{s: s}
 	rs.DataSources = NewUsersDataSourcesService(s)
@@ -1323,7 +1318,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	var body io.Reader = nil
 	body, err := googleapi.WithoutDataWrapper.JSONReader(c.datasource)
 	if err != nil {
@@ -1466,7 +1460,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	var body io.Reader = nil
 	c.urlParams_.Set("alt", alt)
 	urls := googleapi.ResolveRelative(c.s.BasePath, "{userId}/dataSources/{dataSourceId}")
@@ -1619,7 +1612,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	if c.ifNoneMatch_ != "" {
 		reqHeaders.Set("If-None-Match", c.ifNoneMatch_)
 	}
@@ -1793,7 +1785,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	if c.ifNoneMatch_ != "" {
 		reqHeaders.Set("If-None-Match", c.ifNoneMatch_)
 	}
@@ -1952,7 +1943,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	var body io.Reader = nil
 	body, err := googleapi.WithoutDataWrapper.JSONReader(c.datasource)
 	if err != nil {
@@ -2108,7 +2098,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	var body io.Reader = nil
 	body, err := googleapi.WithoutDataWrapper.JSONReader(c.datasource)
 	if err != nil {
@@ -2280,7 +2269,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	var body io.Reader = nil
 	c.urlParams_.Set("alt", alt)
 	urls := googleapi.ResolveRelative(c.s.BasePath, "{userId}/dataSources/{dataSourceId}/datasets/{datasetId}")
@@ -2451,7 +2439,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	if c.ifNoneMatch_ != "" {
 		reqHeaders.Set("If-None-Match", c.ifNoneMatch_)
 	}
@@ -2662,7 +2649,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	var body io.Reader = nil
 	body, err := googleapi.WithoutDataWrapper.JSONReader(c.dataset)
 	if err != nil {
@@ -2850,7 +2836,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	var body io.Reader = nil
 	body, err := googleapi.WithoutDataWrapper.JSONReader(c.aggregaterequest)
 	if err != nil {
@@ -3008,7 +2993,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	var body io.Reader = nil
 	c.urlParams_.Set("alt", alt)
 	urls := googleapi.ResolveRelative(c.s.BasePath, "{userId}/sessions/{sessionId}")
@@ -3163,7 +3147,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	if c.ifNoneMatch_ != "" {
 		reqHeaders.Set("If-None-Match", c.ifNoneMatch_)
 	}
@@ -3359,7 +3342,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	var body io.Reader = nil
 	body, err := googleapi.WithoutDataWrapper.JSONReader(c.session)
 	if err != nil {
diff --git a/fusiontables/v1/fusiontables-gen.go b/fusiontables/v1/fusiontables-gen.go
index 8fa1ee6..c242c94 100644
--- a/fusiontables/v1/fusiontables-gen.go
+++ b/fusiontables/v1/fusiontables-gen.go
@@ -69,10 +69,9 @@
 }
 
 type Service struct {
-	client                    *http.Client
-	BasePath                  string // API endpoint base URL
-	UserAgent                 string // optional additional User-Agent fragment
-	GoogleClientHeaderElement string // client header fragment, for Google use only
+	client    *http.Client
+	BasePath  string // API endpoint base URL
+	UserAgent string // optional additional User-Agent fragment
 
 	Column *ColumnService
 
@@ -94,10 +93,6 @@
 	return googleapi.UserAgent + " " + s.UserAgent
 }
 
-func (s *Service) clientHeader() string {
-	return gensupport.GoogleClientHeader("20170210", s.GoogleClientHeaderElement)
-}
-
 func NewColumnService(s *Service) *ColumnService {
 	rs := &ColumnService{s: s}
 	return rs
@@ -1286,7 +1281,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	var body io.Reader = nil
 	c.urlParams_.Set("alt", alt)
 	urls := googleapi.ResolveRelative(c.s.BasePath, "tables/{tableId}/columns/{columnId}")
@@ -1403,7 +1397,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	if c.ifNoneMatch_ != "" {
 		reqHeaders.Set("If-None-Match", c.ifNoneMatch_)
 	}
@@ -1541,7 +1534,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	var body io.Reader = nil
 	body, err := googleapi.WithoutDataWrapper.JSONReader(c.column)
 	if err != nil {
@@ -1698,7 +1690,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	if c.ifNoneMatch_ != "" {
 		reqHeaders.Set("If-None-Match", c.ifNoneMatch_)
 	}
@@ -1864,7 +1855,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	var body io.Reader = nil
 	body, err := googleapi.WithoutDataWrapper.JSONReader(c.column)
 	if err != nil {
@@ -2008,7 +1998,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	var body io.Reader = nil
 	body, err := googleapi.WithoutDataWrapper.JSONReader(c.column)
 	if err != nil {
@@ -2163,7 +2152,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	var body io.Reader = nil
 	c.urlParams_.Set("alt", alt)
 	urls := googleapi.ResolveRelative(c.s.BasePath, "query")
@@ -2338,7 +2326,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	if c.ifNoneMatch_ != "" {
 		reqHeaders.Set("If-None-Match", c.ifNoneMatch_)
 	}
@@ -2493,7 +2480,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	var body io.Reader = nil
 	c.urlParams_.Set("alt", alt)
 	urls := googleapi.ResolveRelative(c.s.BasePath, "tables/{tableId}/styles/{styleId}")
@@ -2611,7 +2597,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	if c.ifNoneMatch_ != "" {
 		reqHeaders.Set("If-None-Match", c.ifNoneMatch_)
 	}
@@ -2750,7 +2735,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	var body io.Reader = nil
 	body, err := googleapi.WithoutDataWrapper.JSONReader(c.stylesetting)
 	if err != nil {
@@ -2907,7 +2891,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	if c.ifNoneMatch_ != "" {
 		reqHeaders.Set("If-None-Match", c.ifNoneMatch_)
 	}
@@ -3073,7 +3056,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	var body io.Reader = nil
 	body, err := googleapi.WithoutDataWrapper.JSONReader(c.stylesetting)
 	if err != nil {
@@ -3218,7 +3200,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	var body io.Reader = nil
 	body, err := googleapi.WithoutDataWrapper.JSONReader(c.stylesetting)
 	if err != nil {
@@ -3366,7 +3347,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	var body io.Reader = nil
 	c.urlParams_.Set("alt", alt)
 	urls := googleapi.ResolveRelative(c.s.BasePath, "tables/{tableId}/copy")
@@ -3496,7 +3476,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	var body io.Reader = nil
 	c.urlParams_.Set("alt", alt)
 	urls := googleapi.ResolveRelative(c.s.BasePath, "tables/{tableId}")
@@ -3603,7 +3582,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	if c.ifNoneMatch_ != "" {
 		reqHeaders.Set("If-None-Match", c.ifNoneMatch_)
 	}
@@ -3829,7 +3807,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	var body io.Reader = nil
 	c.urlParams_.Set("alt", alt)
 	urls := googleapi.ResolveRelative(c.s.BasePath, "tables/{tableId}/import")
@@ -4113,7 +4090,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	var body io.Reader = nil
 	c.urlParams_.Set("alt", alt)
 	urls := googleapi.ResolveRelative(c.s.BasePath, "tables/import")
@@ -4309,7 +4285,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	var body io.Reader = nil
 	body, err := googleapi.WithoutDataWrapper.JSONReader(c.table)
 	if err != nil {
@@ -4450,7 +4425,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	if c.ifNoneMatch_ != "" {
 		reqHeaders.Set("If-None-Match", c.ifNoneMatch_)
 	}
@@ -4612,7 +4586,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	var body io.Reader = nil
 	body, err := googleapi.WithoutDataWrapper.JSONReader(c.table)
 	if err != nil {
@@ -4761,7 +4734,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	var body io.Reader = nil
 	body, err := googleapi.WithoutDataWrapper.JSONReader(c.table)
 	if err != nil {
@@ -4900,7 +4872,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	var body io.Reader = nil
 	c.urlParams_.Set("alt", alt)
 	urls := googleapi.ResolveRelative(c.s.BasePath, "tables/{tableId}/tasks/{taskId}")
@@ -5016,7 +4987,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	if c.ifNoneMatch_ != "" {
 		reqHeaders.Set("If-None-Match", c.ifNoneMatch_)
 	}
@@ -5181,7 +5151,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	if c.ifNoneMatch_ != "" {
 		reqHeaders.Set("If-None-Match", c.ifNoneMatch_)
 	}
@@ -5348,7 +5317,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	var body io.Reader = nil
 	c.urlParams_.Set("alt", alt)
 	urls := googleapi.ResolveRelative(c.s.BasePath, "tables/{tableId}/templates/{templateId}")
@@ -5466,7 +5434,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	if c.ifNoneMatch_ != "" {
 		reqHeaders.Set("If-None-Match", c.ifNoneMatch_)
 	}
@@ -5605,7 +5572,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	var body io.Reader = nil
 	body, err := googleapi.WithoutDataWrapper.JSONReader(c.template)
 	if err != nil {
@@ -5762,7 +5728,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	if c.ifNoneMatch_ != "" {
 		reqHeaders.Set("If-None-Match", c.ifNoneMatch_)
 	}
@@ -5928,7 +5893,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	var body io.Reader = nil
 	body, err := googleapi.WithoutDataWrapper.JSONReader(c.template)
 	if err != nil {
@@ -6073,7 +6037,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	var body io.Reader = nil
 	body, err := googleapi.WithoutDataWrapper.JSONReader(c.template)
 	if err != nil {
diff --git a/fusiontables/v2/fusiontables-gen.go b/fusiontables/v2/fusiontables-gen.go
index e429a1b..3d47880 100644
--- a/fusiontables/v2/fusiontables-gen.go
+++ b/fusiontables/v2/fusiontables-gen.go
@@ -69,10 +69,9 @@
 }
 
 type Service struct {
-	client                    *http.Client
-	BasePath                  string // API endpoint base URL
-	UserAgent                 string // optional additional User-Agent fragment
-	GoogleClientHeaderElement string // client header fragment, for Google use only
+	client    *http.Client
+	BasePath  string // API endpoint base URL
+	UserAgent string // optional additional User-Agent fragment
 
 	Column *ColumnService
 
@@ -94,10 +93,6 @@
 	return googleapi.UserAgent + " " + s.UserAgent
 }
 
-func (s *Service) clientHeader() string {
-	return gensupport.GoogleClientHeader("20170210", s.GoogleClientHeaderElement)
-}
-
 func NewColumnService(s *Service) *ColumnService {
 	rs := &ColumnService{s: s}
 	return rs
@@ -1344,7 +1339,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	var body io.Reader = nil
 	c.urlParams_.Set("alt", alt)
 	urls := googleapi.ResolveRelative(c.s.BasePath, "tables/{tableId}/columns/{columnId}")
@@ -1461,7 +1455,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	if c.ifNoneMatch_ != "" {
 		reqHeaders.Set("If-None-Match", c.ifNoneMatch_)
 	}
@@ -1599,7 +1592,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	var body io.Reader = nil
 	body, err := googleapi.WithoutDataWrapper.JSONReader(c.column)
 	if err != nil {
@@ -1756,7 +1748,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	if c.ifNoneMatch_ != "" {
 		reqHeaders.Set("If-None-Match", c.ifNoneMatch_)
 	}
@@ -1922,7 +1913,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	var body io.Reader = nil
 	body, err := googleapi.WithoutDataWrapper.JSONReader(c.column)
 	if err != nil {
@@ -2066,7 +2056,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	var body io.Reader = nil
 	body, err := googleapi.WithoutDataWrapper.JSONReader(c.column)
 	if err != nil {
@@ -2227,7 +2216,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	var body io.Reader = nil
 	c.urlParams_.Set("alt", alt)
 	urls := googleapi.ResolveRelative(c.s.BasePath, "query")
@@ -2405,7 +2393,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	if c.ifNoneMatch_ != "" {
 		reqHeaders.Set("If-None-Match", c.ifNoneMatch_)
 	}
@@ -2560,7 +2547,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	var body io.Reader = nil
 	c.urlParams_.Set("alt", alt)
 	urls := googleapi.ResolveRelative(c.s.BasePath, "tables/{tableId}/styles/{styleId}")
@@ -2678,7 +2664,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	if c.ifNoneMatch_ != "" {
 		reqHeaders.Set("If-None-Match", c.ifNoneMatch_)
 	}
@@ -2817,7 +2802,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	var body io.Reader = nil
 	body, err := googleapi.WithoutDataWrapper.JSONReader(c.stylesetting)
 	if err != nil {
@@ -2974,7 +2958,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	if c.ifNoneMatch_ != "" {
 		reqHeaders.Set("If-None-Match", c.ifNoneMatch_)
 	}
@@ -3140,7 +3123,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	var body io.Reader = nil
 	body, err := googleapi.WithoutDataWrapper.JSONReader(c.stylesetting)
 	if err != nil {
@@ -3285,7 +3267,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	var body io.Reader = nil
 	body, err := googleapi.WithoutDataWrapper.JSONReader(c.stylesetting)
 	if err != nil {
@@ -3433,7 +3414,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	var body io.Reader = nil
 	c.urlParams_.Set("alt", alt)
 	urls := googleapi.ResolveRelative(c.s.BasePath, "tables/{tableId}/copy")
@@ -3563,7 +3543,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	var body io.Reader = nil
 	c.urlParams_.Set("alt", alt)
 	urls := googleapi.ResolveRelative(c.s.BasePath, "tables/{tableId}")
@@ -3670,7 +3649,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	if c.ifNoneMatch_ != "" {
 		reqHeaders.Set("If-None-Match", c.ifNoneMatch_)
 	}
@@ -3891,7 +3869,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	var body io.Reader = nil
 	c.urlParams_.Set("alt", alt)
 	urls := googleapi.ResolveRelative(c.s.BasePath, "tables/{tableId}/import")
@@ -4175,7 +4152,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	var body io.Reader = nil
 	c.urlParams_.Set("alt", alt)
 	urls := googleapi.ResolveRelative(c.s.BasePath, "tables/import")
@@ -4371,7 +4347,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	var body io.Reader = nil
 	body, err := googleapi.WithoutDataWrapper.JSONReader(c.table)
 	if err != nil {
@@ -4512,7 +4487,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	if c.ifNoneMatch_ != "" {
 		reqHeaders.Set("If-None-Match", c.ifNoneMatch_)
 	}
@@ -4674,7 +4648,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	var body io.Reader = nil
 	body, err := googleapi.WithoutDataWrapper.JSONReader(c.table)
 	if err != nil {
@@ -4907,7 +4880,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	var body io.Reader = nil
 	c.urlParams_.Set("alt", alt)
 	urls := googleapi.ResolveRelative(c.s.BasePath, "tables/{tableId}/replace")
@@ -5135,7 +5107,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	var body io.Reader = nil
 	body, err := googleapi.WithoutDataWrapper.JSONReader(c.table)
 	if err != nil {
@@ -5275,7 +5246,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	var body io.Reader = nil
 	c.urlParams_.Set("alt", alt)
 	urls := googleapi.ResolveRelative(c.s.BasePath, "tables/{tableId}/tasks/{taskId}")
@@ -5392,7 +5362,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	if c.ifNoneMatch_ != "" {
 		reqHeaders.Set("If-None-Match", c.ifNoneMatch_)
 	}
@@ -5560,7 +5529,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	if c.ifNoneMatch_ != "" {
 		reqHeaders.Set("If-None-Match", c.ifNoneMatch_)
 	}
@@ -5729,7 +5697,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	var body io.Reader = nil
 	c.urlParams_.Set("alt", alt)
 	urls := googleapi.ResolveRelative(c.s.BasePath, "tables/{tableId}/templates/{templateId}")
@@ -5847,7 +5814,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	if c.ifNoneMatch_ != "" {
 		reqHeaders.Set("If-None-Match", c.ifNoneMatch_)
 	}
@@ -5986,7 +5952,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	var body io.Reader = nil
 	body, err := googleapi.WithoutDataWrapper.JSONReader(c.template)
 	if err != nil {
@@ -6143,7 +6108,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	if c.ifNoneMatch_ != "" {
 		reqHeaders.Set("If-None-Match", c.ifNoneMatch_)
 	}
@@ -6309,7 +6273,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	var body io.Reader = nil
 	body, err := googleapi.WithoutDataWrapper.JSONReader(c.template)
 	if err != nil {
@@ -6454,7 +6417,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	var body io.Reader = nil
 	body, err := googleapi.WithoutDataWrapper.JSONReader(c.template)
 	if err != nil {
diff --git a/games/v1/games-gen.go b/games/v1/games-gen.go
index fcf798c..83064f1 100644
--- a/games/v1/games-gen.go
+++ b/games/v1/games-gen.go
@@ -82,10 +82,9 @@
 }
 
 type Service struct {
-	client                    *http.Client
-	BasePath                  string // API endpoint base URL
-	UserAgent                 string // optional additional User-Agent fragment
-	GoogleClientHeaderElement string // client header fragment, for Google use only
+	client    *http.Client
+	BasePath  string // API endpoint base URL
+	UserAgent string // optional additional User-Agent fragment
 
 	AchievementDefinitions *AchievementDefinitionsService
 
@@ -125,10 +124,6 @@
 	return googleapi.UserAgent + " " + s.UserAgent
 }
 
-func (s *Service) clientHeader() string {
-	return gensupport.GoogleClientHeader("20170210", s.GoogleClientHeaderElement)
-}
-
 func NewAchievementDefinitionsService(s *Service) *AchievementDefinitionsService {
 	rs := &AchievementDefinitionsService{s: s}
 	return rs
@@ -5122,7 +5117,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	if c.ifNoneMatch_ != "" {
 		reqHeaders.Set("If-None-Match", c.ifNoneMatch_)
 	}
@@ -5302,7 +5296,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	var body io.Reader = nil
 	c.urlParams_.Set("alt", alt)
 	urls := googleapi.ResolveRelative(c.s.BasePath, "achievements/{achievementId}/increment")
@@ -5504,7 +5497,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	if c.ifNoneMatch_ != "" {
 		reqHeaders.Set("If-None-Match", c.ifNoneMatch_)
 	}
@@ -5702,7 +5694,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	var body io.Reader = nil
 	c.urlParams_.Set("alt", alt)
 	urls := googleapi.ResolveRelative(c.s.BasePath, "achievements/{achievementId}/reveal")
@@ -5844,7 +5835,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	var body io.Reader = nil
 	c.urlParams_.Set("alt", alt)
 	urls := googleapi.ResolveRelative(c.s.BasePath, "achievements/{achievementId}/setStepsAtLeast")
@@ -5993,7 +5983,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	var body io.Reader = nil
 	c.urlParams_.Set("alt", alt)
 	urls := googleapi.ResolveRelative(c.s.BasePath, "achievements/{achievementId}/unlock")
@@ -6132,7 +6121,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	var body io.Reader = nil
 	body, err := googleapi.WithoutDataWrapper.JSONReader(c.achievementupdatemultiplerequest)
 	if err != nil {
@@ -6301,7 +6289,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	if c.ifNoneMatch_ != "" {
 		reqHeaders.Set("If-None-Match", c.ifNoneMatch_)
 	}
@@ -6461,7 +6448,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	var body io.Reader = nil
 	c.urlParams_.Set("alt", alt)
 	urls := googleapi.ResolveRelative(c.s.BasePath, "applications/played")
@@ -6572,7 +6558,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	if c.ifNoneMatch_ != "" {
 		reqHeaders.Set("If-None-Match", c.ifNoneMatch_)
 	}
@@ -6746,7 +6731,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	if c.ifNoneMatch_ != "" {
 		reqHeaders.Set("If-None-Match", c.ifNoneMatch_)
 	}
@@ -6947,7 +6931,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	if c.ifNoneMatch_ != "" {
 		reqHeaders.Set("If-None-Match", c.ifNoneMatch_)
 	}
@@ -7123,7 +7106,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	var body io.Reader = nil
 	body, err := googleapi.WithoutDataWrapper.JSONReader(c.eventrecordrequest)
 	if err != nil {
@@ -7280,7 +7262,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	if c.ifNoneMatch_ != "" {
 		reqHeaders.Set("If-None-Match", c.ifNoneMatch_)
 	}
@@ -7458,7 +7439,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	if c.ifNoneMatch_ != "" {
 		reqHeaders.Set("If-None-Match", c.ifNoneMatch_)
 	}
@@ -7636,7 +7616,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	if c.ifNoneMatch_ != "" {
 		reqHeaders.Set("If-None-Match", c.ifNoneMatch_)
 	}
@@ -7802,7 +7781,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	if c.ifNoneMatch_ != "" {
 		reqHeaders.Set("If-None-Match", c.ifNoneMatch_)
 	}
@@ -8015,7 +7993,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	if c.ifNoneMatch_ != "" {
 		reqHeaders.Set("If-None-Match", c.ifNoneMatch_)
 	}
@@ -8196,7 +8173,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	if c.ifNoneMatch_ != "" {
 		reqHeaders.Set("If-None-Match", c.ifNoneMatch_)
 	}
@@ -8389,7 +8365,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	var body io.Reader = nil
 	body, err := googleapi.WithoutDataWrapper.JSONReader(c.pushtokenid)
 	if err != nil {
@@ -8495,7 +8470,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	var body io.Reader = nil
 	body, err := googleapi.WithoutDataWrapper.JSONReader(c.pushtoken)
 	if err != nil {
@@ -8606,7 +8580,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	var body io.Reader = nil
 	c.urlParams_.Set("alt", alt)
 	urls := googleapi.ResolveRelative(c.s.BasePath, "quests/{questId}/milestones/{milestoneId}/claim")
@@ -8740,7 +8713,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	var body io.Reader = nil
 	c.urlParams_.Set("alt", alt)
 	urls := googleapi.ResolveRelative(c.s.BasePath, "quests/{questId}/accept")
@@ -8919,7 +8891,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	if c.ifNoneMatch_ != "" {
 		reqHeaders.Set("If-None-Match", c.ifNoneMatch_)
 	}
@@ -9109,7 +9080,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	if c.ifNoneMatch_ != "" {
 		reqHeaders.Set("If-None-Match", c.ifNoneMatch_)
 	}
@@ -9255,7 +9225,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	var body io.Reader = nil
 	body, err := googleapi.WithoutDataWrapper.JSONReader(c.roomcreaterequest)
 	if err != nil {
@@ -9402,7 +9371,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	var body io.Reader = nil
 	c.urlParams_.Set("alt", alt)
 	urls := googleapi.ResolveRelative(c.s.BasePath, "rooms/{roomId}/decline")
@@ -9546,7 +9514,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	var body io.Reader = nil
 	c.urlParams_.Set("alt", alt)
 	urls := googleapi.ResolveRelative(c.s.BasePath, "rooms/{roomId}/dismiss")
@@ -9674,7 +9641,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	if c.ifNoneMatch_ != "" {
 		reqHeaders.Set("If-None-Match", c.ifNoneMatch_)
 	}
@@ -9830,7 +9796,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	var body io.Reader = nil
 	body, err := googleapi.WithoutDataWrapper.JSONReader(c.roomjoinrequest)
 	if err != nil {
@@ -9991,7 +9956,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	var body io.Reader = nil
 	body, err := googleapi.WithoutDataWrapper.JSONReader(c.roomleaverequest)
 	if err != nil {
@@ -10174,7 +10138,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	if c.ifNoneMatch_ != "" {
 		reqHeaders.Set("If-None-Match", c.ifNoneMatch_)
 	}
@@ -10353,7 +10316,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	var body io.Reader = nil
 	body, err := googleapi.WithoutDataWrapper.JSONReader(c.roomp2pstatuses)
 	if err != nil {
@@ -10561,7 +10523,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	if c.ifNoneMatch_ != "" {
 		reqHeaders.Set("If-None-Match", c.ifNoneMatch_)
 	}
@@ -10822,7 +10783,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	if c.ifNoneMatch_ != "" {
 		reqHeaders.Set("If-None-Match", c.ifNoneMatch_)
 	}
@@ -11093,7 +11053,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	if c.ifNoneMatch_ != "" {
 		reqHeaders.Set("If-None-Match", c.ifNoneMatch_)
 	}
@@ -11336,7 +11295,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	var body io.Reader = nil
 	c.urlParams_.Set("alt", alt)
 	urls := googleapi.ResolveRelative(c.s.BasePath, "leaderboards/{leaderboardId}/scores")
@@ -11500,7 +11458,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	var body io.Reader = nil
 	body, err := googleapi.WithoutDataWrapper.JSONReader(c.playerscoresubmissionlist)
 	if err != nil {
@@ -11657,7 +11614,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	if c.ifNoneMatch_ != "" {
 		reqHeaders.Set("If-None-Match", c.ifNoneMatch_)
 	}
@@ -11839,7 +11795,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	if c.ifNoneMatch_ != "" {
 		reqHeaders.Set("If-None-Match", c.ifNoneMatch_)
 	}
@@ -12020,7 +11975,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	var body io.Reader = nil
 	c.urlParams_.Set("alt", alt)
 	urls := googleapi.ResolveRelative(c.s.BasePath, "turnbasedmatches/{matchId}/cancel")
@@ -12137,7 +12091,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	var body io.Reader = nil
 	body, err := googleapi.WithoutDataWrapper.JSONReader(c.turnbasedmatchcreaterequest)
 	if err != nil {
@@ -12283,7 +12236,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	var body io.Reader = nil
 	c.urlParams_.Set("alt", alt)
 	urls := googleapi.ResolveRelative(c.s.BasePath, "turnbasedmatches/{matchId}/decline")
@@ -12428,7 +12380,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	var body io.Reader = nil
 	c.urlParams_.Set("alt", alt)
 	urls := googleapi.ResolveRelative(c.s.BasePath, "turnbasedmatches/{matchId}/dismiss")
@@ -12549,7 +12500,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	var body io.Reader = nil
 	body, err := googleapi.WithoutDataWrapper.JSONReader(c.turnbasedmatchresults)
 	if err != nil {
@@ -12725,7 +12675,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	if c.ifNoneMatch_ != "" {
 		reqHeaders.Set("If-None-Match", c.ifNoneMatch_)
 	}
@@ -12883,7 +12832,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	var body io.Reader = nil
 	c.urlParams_.Set("alt", alt)
 	urls := googleapi.ResolveRelative(c.s.BasePath, "turnbasedmatches/{matchId}/join")
@@ -13034,7 +12982,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	var body io.Reader = nil
 	c.urlParams_.Set("alt", alt)
 	urls := googleapi.ResolveRelative(c.s.BasePath, "turnbasedmatches/{matchId}/leave")
@@ -13196,7 +13143,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	var body io.Reader = nil
 	c.urlParams_.Set("alt", alt)
 	urls := googleapi.ResolveRelative(c.s.BasePath, "turnbasedmatches/{matchId}/leaveTurn")
@@ -13404,7 +13350,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	if c.ifNoneMatch_ != "" {
 		reqHeaders.Set("If-None-Match", c.ifNoneMatch_)
 	}
@@ -13604,7 +13549,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	var body io.Reader = nil
 	c.urlParams_.Set("alt", alt)
 	urls := googleapi.ResolveRelative(c.s.BasePath, "turnbasedmatches/{matchId}/rematch")
@@ -13808,7 +13752,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	if c.ifNoneMatch_ != "" {
 		reqHeaders.Set("If-None-Match", c.ifNoneMatch_)
 	}
@@ -13998,7 +13941,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	var body io.Reader = nil
 	body, err := googleapi.WithoutDataWrapper.JSONReader(c.turnbasedmatchturn)
 	if err != nil {
diff --git a/gamesconfiguration/v1configuration/gamesconfiguration-gen.go b/gamesconfiguration/v1configuration/gamesconfiguration-gen.go
index 6420515..9aa15d1 100644
--- a/gamesconfiguration/v1configuration/gamesconfiguration-gen.go
+++ b/gamesconfiguration/v1configuration/gamesconfiguration-gen.go
@@ -63,10 +63,9 @@
 }
 
 type Service struct {
-	client                    *http.Client
-	BasePath                  string // API endpoint base URL
-	UserAgent                 string // optional additional User-Agent fragment
-	GoogleClientHeaderElement string // client header fragment, for Google use only
+	client    *http.Client
+	BasePath  string // API endpoint base URL
+	UserAgent string // optional additional User-Agent fragment
 
 	AchievementConfigurations *AchievementConfigurationsService
 
@@ -82,10 +81,6 @@
 	return googleapi.UserAgent + " " + s.UserAgent
 }
 
-func (s *Service) clientHeader() string {
-	return gensupport.GoogleClientHeader("20170210", s.GoogleClientHeaderElement)
-}
-
 func NewAchievementConfigurationsService(s *Service) *AchievementConfigurationsService {
 	rs := &AchievementConfigurationsService{s: s}
 	return rs
@@ -667,7 +662,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	var body io.Reader = nil
 	c.urlParams_.Set("alt", alt)
 	urls := googleapi.ResolveRelative(c.s.BasePath, "achievements/{achievementId}")
@@ -775,7 +769,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	if c.ifNoneMatch_ != "" {
 		reqHeaders.Set("If-None-Match", c.ifNoneMatch_)
 	}
@@ -904,7 +897,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	var body io.Reader = nil
 	body, err := googleapi.WithoutDataWrapper.JSONReader(c.achievementconfiguration)
 	if err != nil {
@@ -1064,7 +1056,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	if c.ifNoneMatch_ != "" {
 		reqHeaders.Set("If-None-Match", c.ifNoneMatch_)
 	}
@@ -1229,7 +1220,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	var body io.Reader = nil
 	body, err := googleapi.WithoutDataWrapper.JSONReader(c.achievementconfiguration)
 	if err != nil {
@@ -1364,7 +1354,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	var body io.Reader = nil
 	body, err := googleapi.WithoutDataWrapper.JSONReader(c.achievementconfiguration)
 	if err != nil {
@@ -1552,7 +1541,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	var body io.Reader = nil
 	c.urlParams_.Set("alt", alt)
 	urls := googleapi.ResolveRelative(c.s.BasePath, "images/{resourceId}/imageType/{imageType}")
@@ -1757,7 +1745,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	var body io.Reader = nil
 	c.urlParams_.Set("alt", alt)
 	urls := googleapi.ResolveRelative(c.s.BasePath, "leaderboards/{leaderboardId}")
@@ -1865,7 +1852,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	if c.ifNoneMatch_ != "" {
 		reqHeaders.Set("If-None-Match", c.ifNoneMatch_)
 	}
@@ -1994,7 +1980,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	var body io.Reader = nil
 	body, err := googleapi.WithoutDataWrapper.JSONReader(c.leaderboardconfiguration)
 	if err != nil {
@@ -2154,7 +2139,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	if c.ifNoneMatch_ != "" {
 		reqHeaders.Set("If-None-Match", c.ifNoneMatch_)
 	}
@@ -2319,7 +2303,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	var body io.Reader = nil
 	body, err := googleapi.WithoutDataWrapper.JSONReader(c.leaderboardconfiguration)
 	if err != nil {
@@ -2454,7 +2437,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	var body io.Reader = nil
 	body, err := googleapi.WithoutDataWrapper.JSONReader(c.leaderboardconfiguration)
 	if err != nil {
diff --git a/gamesmanagement/v1management/gamesmanagement-gen.go b/gamesmanagement/v1management/gamesmanagement-gen.go
index fe4fadd..d8ce087 100644
--- a/gamesmanagement/v1management/gamesmanagement-gen.go
+++ b/gamesmanagement/v1management/gamesmanagement-gen.go
@@ -72,10 +72,9 @@
 }
 
 type Service struct {
-	client                    *http.Client
-	BasePath                  string // API endpoint base URL
-	UserAgent                 string // optional additional User-Agent fragment
-	GoogleClientHeaderElement string // client header fragment, for Google use only
+	client    *http.Client
+	BasePath  string // API endpoint base URL
+	UserAgent string // optional additional User-Agent fragment
 
 	Achievements *AchievementsService
 
@@ -101,10 +100,6 @@
 	return googleapi.UserAgent + " " + s.UserAgent
 }
 
-func (s *Service) clientHeader() string {
-	return gensupport.GoogleClientHeader("20170210", s.GoogleClientHeaderElement)
-}
-
 func NewAchievementsService(s *Service) *AchievementsService {
 	rs := &AchievementsService{s: s}
 	return rs
@@ -859,7 +854,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	var body io.Reader = nil
 	c.urlParams_.Set("alt", alt)
 	urls := googleapi.ResolveRelative(c.s.BasePath, "achievements/{achievementId}/reset")
@@ -984,7 +978,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	var body io.Reader = nil
 	c.urlParams_.Set("alt", alt)
 	urls := googleapi.ResolveRelative(c.s.BasePath, "achievements/reset")
@@ -1095,7 +1088,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	var body io.Reader = nil
 	c.urlParams_.Set("alt", alt)
 	urls := googleapi.ResolveRelative(c.s.BasePath, "achievements/resetAllForAllPlayers")
@@ -1180,7 +1172,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	var body io.Reader = nil
 	c.urlParams_.Set("alt", alt)
 	urls := googleapi.ResolveRelative(c.s.BasePath, "achievements/{achievementId}/resetForAllPlayers")
@@ -1279,7 +1270,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	var body io.Reader = nil
 	body, err := googleapi.WithoutDataWrapper.JSONReader(c.achievementresetmultipleforallrequest)
 	if err != nil {
@@ -1399,7 +1389,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	if c.ifNoneMatch_ != "" {
 		reqHeaders.Set("If-None-Match", c.ifNoneMatch_)
 	}
@@ -1564,7 +1553,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	var body io.Reader = nil
 	c.urlParams_.Set("alt", alt)
 	urls := googleapi.ResolveRelative(c.s.BasePath, "events/{eventId}/reset")
@@ -1662,7 +1650,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	var body io.Reader = nil
 	c.urlParams_.Set("alt", alt)
 	urls := googleapi.ResolveRelative(c.s.BasePath, "events/reset")
@@ -1745,7 +1732,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	var body io.Reader = nil
 	c.urlParams_.Set("alt", alt)
 	urls := googleapi.ResolveRelative(c.s.BasePath, "events/resetAllForAllPlayers")
@@ -1831,7 +1817,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	var body io.Reader = nil
 	c.urlParams_.Set("alt", alt)
 	urls := googleapi.ResolveRelative(c.s.BasePath, "events/{eventId}/resetForAllPlayers")
@@ -1931,7 +1916,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	var body io.Reader = nil
 	body, err := googleapi.WithoutDataWrapper.JSONReader(c.eventsresetmultipleforallrequest)
 	if err != nil {
@@ -2026,7 +2010,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	var body io.Reader = nil
 	c.urlParams_.Set("alt", alt)
 	urls := googleapi.ResolveRelative(c.s.BasePath, "applications/{applicationId}/players/hidden/{playerId}")
@@ -2135,7 +2118,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	var body io.Reader = nil
 	c.urlParams_.Set("alt", alt)
 	urls := googleapi.ResolveRelative(c.s.BasePath, "applications/{applicationId}/players/hidden/{playerId}")
@@ -2242,7 +2224,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	var body io.Reader = nil
 	c.urlParams_.Set("alt", alt)
 	urls := googleapi.ResolveRelative(c.s.BasePath, "quests/{questId}/reset")
@@ -2339,7 +2320,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	var body io.Reader = nil
 	c.urlParams_.Set("alt", alt)
 	urls := googleapi.ResolveRelative(c.s.BasePath, "quests/reset")
@@ -2421,7 +2401,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	var body io.Reader = nil
 	c.urlParams_.Set("alt", alt)
 	urls := googleapi.ResolveRelative(c.s.BasePath, "quests/resetAllForAllPlayers")
@@ -2506,7 +2485,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	var body io.Reader = nil
 	c.urlParams_.Set("alt", alt)
 	urls := googleapi.ResolveRelative(c.s.BasePath, "quests/{questId}/resetForAllPlayers")
@@ -2605,7 +2583,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	var body io.Reader = nil
 	body, err := googleapi.WithoutDataWrapper.JSONReader(c.questsresetmultipleforallrequest)
 	if err != nil {
@@ -2696,7 +2673,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	var body io.Reader = nil
 	c.urlParams_.Set("alt", alt)
 	urls := googleapi.ResolveRelative(c.s.BasePath, "rooms/reset")
@@ -2779,7 +2755,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	var body io.Reader = nil
 	c.urlParams_.Set("alt", alt)
 	urls := googleapi.ResolveRelative(c.s.BasePath, "rooms/resetForAllPlayers")
@@ -2864,7 +2839,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	var body io.Reader = nil
 	c.urlParams_.Set("alt", alt)
 	urls := googleapi.ResolveRelative(c.s.BasePath, "leaderboards/{leaderboardId}/scores/reset")
@@ -2989,7 +2963,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	var body io.Reader = nil
 	c.urlParams_.Set("alt", alt)
 	urls := googleapi.ResolveRelative(c.s.BasePath, "scores/reset")
@@ -3100,7 +3073,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	var body io.Reader = nil
 	c.urlParams_.Set("alt", alt)
 	urls := googleapi.ResolveRelative(c.s.BasePath, "scores/resetAllForAllPlayers")
@@ -3185,7 +3157,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	var body io.Reader = nil
 	c.urlParams_.Set("alt", alt)
 	urls := googleapi.ResolveRelative(c.s.BasePath, "leaderboards/{leaderboardId}/scores/resetForAllPlayers")
@@ -3285,7 +3256,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	var body io.Reader = nil
 	body, err := googleapi.WithoutDataWrapper.JSONReader(c.scoresresetmultipleforallrequest)
 	if err != nil {
@@ -3375,7 +3345,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	var body io.Reader = nil
 	c.urlParams_.Set("alt", alt)
 	urls := googleapi.ResolveRelative(c.s.BasePath, "turnbasedmatches/reset")
@@ -3459,7 +3428,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	var body io.Reader = nil
 	c.urlParams_.Set("alt", alt)
 	urls := googleapi.ResolveRelative(c.s.BasePath, "turnbasedmatches/resetForAllPlayers")
diff --git a/genomics/v1/genomics-api.json b/genomics/v1/genomics-api.json
index ea9de5d..25034ca 100644
--- a/genomics/v1/genomics-api.json
+++ b/genomics/v1/genomics-api.json
@@ -1,75 +1,479 @@
 {
-  "documentationLink": "https://cloud.google.com/genomics",
-  "revision": "20170309",
-  "id": "genomics:v1",
-  "title": "Genomics API",
   "ownerName": "Google",
   "discoveryVersion": "v1",
   "resources": {
-    "readgroupsets": {
+    "annotations": {
       "methods": {
-        "export": {
-          "description": "Exports a read group set to a BAM file in Google Cloud Storage.\n\nFor the definitions of read group sets and other genomics resources, see\n[Fundamentals of Google\nGenomics](https://cloud.google.com/genomics/fundamentals-of-google-genomics)\n\nNote that currently there may be some differences between exported BAM\nfiles and the original BAM file at the time of import. See\nImportReadGroupSets\nfor caveats.",
-          "request": {
-            "$ref": "ExportReadGroupSetRequest"
-          },
+        "delete": {
+          "description": "Deletes an annotation. Caller must have WRITE permission for\nthe associated annotation set.",
           "response": {
-            "$ref": "Operation"
+            "$ref": "Empty"
           },
           "parameterOrder": [
-            "readGroupSetId"
+            "annotationId"
           ],
-          "httpMethod": "POST",
+          "httpMethod": "DELETE",
           "scopes": [
             "https://www.googleapis.com/auth/cloud-platform",
-            "https://www.googleapis.com/auth/devstorage.read_write",
             "https://www.googleapis.com/auth/genomics"
           ],
           "parameters": {
-            "readGroupSetId": {
-              "description": "Required. The ID of the read group set to export. The caller must have\nREAD access to this read group set.",
+            "annotationId": {
+              "location": "path",
+              "description": "The ID of the annotation to be deleted.",
+              "required": true,
+              "type": "string"
+            }
+          },
+          "flatPath": "v1/annotations/{annotationId}",
+          "path": "v1/annotations/{annotationId}",
+          "id": "genomics.annotations.delete"
+        },
+        "create": {
+          "description": "Creates a new annotation. Caller must have WRITE permission\nfor the associated annotation set.\n\nThe following fields are required:\n\n* annotationSetId\n* referenceName or\n  referenceId\n\n### Transcripts\n\nFor annotations of type TRANSCRIPT, the following fields of\ntranscript must be provided:\n\n* exons.start\n* exons.end\n\nAll other fields may be optionally specified, unless documented as being\nserver-generated (for example, the `id` field). The annotated\nrange must be no longer than 100Mbp (mega base pairs). See the\nAnnotation resource\nfor additional restrictions on each field.",
+          "request": {
+            "$ref": "Annotation"
+          },
+          "response": {
+            "$ref": "Annotation"
+          },
+          "parameterOrder": [],
+          "httpMethod": "POST",
+          "scopes": [
+            "https://www.googleapis.com/auth/cloud-platform",
+            "https://www.googleapis.com/auth/genomics"
+          ],
+          "parameters": {},
+          "flatPath": "v1/annotations",
+          "path": "v1/annotations",
+          "id": "genomics.annotations.create"
+        },
+        "batchCreate": {
+          "request": {
+            "$ref": "BatchCreateAnnotationsRequest"
+          },
+          "description": "Creates one or more new annotations atomically. All annotations must\nbelong to the same annotation set. Caller must have WRITE\npermission for this annotation set. For optimal performance, batch\npositionally adjacent annotations together.\n\nIf the request has a systemic issue, such as an attempt to write to\nan inaccessible annotation set, the entire RPC will fail accordingly. For\nlesser data issues, when possible an error will be isolated to the\ncorresponding batch entry in the response; the remaining well formed\nannotations will be created normally.\n\nFor details on the requirements for each individual annotation resource,\nsee\nCreateAnnotation.",
+          "response": {
+            "$ref": "BatchCreateAnnotationsResponse"
+          },
+          "parameterOrder": [],
+          "httpMethod": "POST",
+          "parameters": {},
+          "scopes": [
+            "https://www.googleapis.com/auth/cloud-platform",
+            "https://www.googleapis.com/auth/genomics"
+          ],
+          "flatPath": "v1/annotations:batchCreate",
+          "path": "v1/annotations:batchCreate",
+          "id": "genomics.annotations.batchCreate"
+        },
+        "search": {
+          "flatPath": "v1/annotations/search",
+          "path": "v1/annotations/search",
+          "id": "genomics.annotations.search",
+          "request": {
+            "$ref": "SearchAnnotationsRequest"
+          },
+          "description": "Searches for annotations that match the given criteria. Results are\nordered by genomic coordinate (by reference sequence, then position).\nAnnotations with equivalent genomic coordinates are returned in an\nunspecified order. This order is consistent, such that two queries for the\nsame content (regardless of page size) yield annotations in the same order\nacross their respective streams of paginated responses. Caller must have\nREAD permission for the queried annotation sets.",
+          "response": {
+            "$ref": "SearchAnnotationsResponse"
+          },
+          "parameterOrder": [],
+          "httpMethod": "POST",
+          "parameters": {},
+          "scopes": [
+            "https://www.googleapis.com/auth/cloud-platform",
+            "https://www.googleapis.com/auth/genomics",
+            "https://www.googleapis.com/auth/genomics.readonly"
+          ]
+        },
+        "get": {
+          "flatPath": "v1/annotations/{annotationId}",
+          "id": "genomics.annotations.get",
+          "path": "v1/annotations/{annotationId}",
+          "description": "Gets an annotation. Caller must have READ permission\nfor the associated annotation set.",
+          "httpMethod": "GET",
+          "parameterOrder": [
+            "annotationId"
+          ],
+          "response": {
+            "$ref": "Annotation"
+          },
+          "scopes": [
+            "https://www.googleapis.com/auth/cloud-platform",
+            "https://www.googleapis.com/auth/genomics",
+            "https://www.googleapis.com/auth/genomics.readonly"
+          ],
+          "parameters": {
+            "annotationId": {
+              "description": "The ID of the annotation to be retrieved.",
+              "required": true,
+              "type": "string",
+              "location": "path"
+            }
+          }
+        },
+        "update": {
+          "flatPath": "v1/annotations/{annotationId}",
+          "path": "v1/annotations/{annotationId}",
+          "id": "genomics.annotations.update",
+          "description": "Updates an annotation. Caller must have\nWRITE permission for the associated dataset.",
+          "request": {
+            "$ref": "Annotation"
+          },
+          "response": {
+            "$ref": "Annotation"
+          },
+          "parameterOrder": [
+            "annotationId"
+          ],
+          "httpMethod": "PUT",
+          "scopes": [
+            "https://www.googleapis.com/auth/cloud-platform",
+            "https://www.googleapis.com/auth/genomics"
+          ],
+          "parameters": {
+            "updateMask": {
+              "location": "query",
+              "description": "An optional mask specifying which fields to update. Mutable fields are\nname,\nvariant,\ntranscript, and\ninfo. If unspecified, all mutable\nfields will be updated.",
+              "format": "google-fieldmask",
+              "type": "string"
+            },
+            "annotationId": {
+              "description": "The ID of the annotation to be updated.",
+              "required": true,
+              "type": "string",
+              "location": "path"
+            }
+          }
+        }
+      }
+    },
+    "variantsets": {
+      "methods": {
+        "delete": {
+          "response": {
+            "$ref": "Empty"
+          },
+          "parameterOrder": [
+            "variantSetId"
+          ],
+          "httpMethod": "DELETE",
+          "scopes": [
+            "https://www.googleapis.com/auth/cloud-platform",
+            "https://www.googleapis.com/auth/genomics"
+          ],
+          "parameters": {
+            "variantSetId": {
+              "description": "The ID of the variant set to be deleted.",
               "required": true,
               "type": "string",
               "location": "path"
             }
           },
-          "flatPath": "v1/readgroupsets/{readGroupSetId}:export",
-          "path": "v1/readgroupsets/{readGroupSetId}:export",
-          "id": "genomics.readgroupsets.export"
+          "flatPath": "v1/variantsets/{variantSetId}",
+          "path": "v1/variantsets/{variantSetId}",
+          "id": "genomics.variantsets.delete",
+          "description": "Deletes a variant set including all variants, call sets, and calls within.\nThis is not reversible.\n\nFor the definitions of variant sets and other genomics resources, see\n[Fundamentals of Google\nGenomics](https://cloud.google.com/genomics/fundamentals-of-google-genomics)"
+        },
+        "create": {
+          "flatPath": "v1/variantsets",
+          "path": "v1/variantsets",
+          "id": "genomics.variantsets.create",
+          "description": "Creates a new variant set.\n\nFor the definitions of variant sets and other genomics resources, see\n[Fundamentals of Google\nGenomics](https://cloud.google.com/genomics/fundamentals-of-google-genomics)\n\nThe provided variant set must have a valid `datasetId` set - all other\nfields are optional. Note that the `id` field will be ignored, as this is\nassigned by the server.",
+          "request": {
+            "$ref": "VariantSet"
+          },
+          "response": {
+            "$ref": "VariantSet"
+          },
+          "parameterOrder": [],
+          "httpMethod": "POST",
+          "scopes": [
+            "https://www.googleapis.com/auth/cloud-platform",
+            "https://www.googleapis.com/auth/genomics"
+          ],
+          "parameters": {}
+        },
+        "export": {
+          "flatPath": "v1/variantsets/{variantSetId}:export",
+          "id": "genomics.variantsets.export",
+          "path": "v1/variantsets/{variantSetId}:export",
+          "description": "Exports variant set data to an external destination.\n\nFor the definitions of variant sets and other genomics resources, see\n[Fundamentals of Google\nGenomics](https://cloud.google.com/genomics/fundamentals-of-google-genomics)",
+          "request": {
+            "$ref": "ExportVariantSetRequest"
+          },
+          "httpMethod": "POST",
+          "parameterOrder": [
+            "variantSetId"
+          ],
+          "response": {
+            "$ref": "Operation"
+          },
+          "scopes": [
+            "https://www.googleapis.com/auth/bigquery",
+            "https://www.googleapis.com/auth/cloud-platform",
+            "https://www.googleapis.com/auth/genomics"
+          ],
+          "parameters": {
+            "variantSetId": {
+              "location": "path",
+              "description": "Required. The ID of the variant set that contains variant data which\nshould be exported. The caller must have READ access to this variant set.",
+              "required": true,
+              "type": "string"
+            }
+          }
         },
         "search": {
+          "httpMethod": "POST",
+          "parameterOrder": [],
+          "response": {
+            "$ref": "SearchVariantSetsResponse"
+          },
+          "scopes": [
+            "https://www.googleapis.com/auth/cloud-platform",
+            "https://www.googleapis.com/auth/genomics",
+            "https://www.googleapis.com/auth/genomics.readonly"
+          ],
+          "parameters": {},
+          "flatPath": "v1/variantsets/search",
+          "id": "genomics.variantsets.search",
+          "path": "v1/variantsets/search",
+          "description": "Returns a list of all variant sets matching search criteria.\n\nFor the definitions of variant sets and other genomics resources, see\n[Fundamentals of Google\nGenomics](https://cloud.google.com/genomics/fundamentals-of-google-genomics)\n\nImplements\n[GlobalAllianceApi.searchVariantSets](https://github.com/ga4gh/schemas/blob/v0.5.1/src/main/resources/avro/variantmethods.avdl#L49).",
+          "request": {
+            "$ref": "SearchVariantSetsRequest"
+          }
+        },
+        "get": {
+          "description": "Gets a variant set by ID.\n\nFor the definitions of variant sets and other genomics resources, see\n[Fundamentals of Google\nGenomics](https://cloud.google.com/genomics/fundamentals-of-google-genomics)",
+          "parameterOrder": [
+            "variantSetId"
+          ],
+          "response": {
+            "$ref": "VariantSet"
+          },
+          "httpMethod": "GET",
+          "parameters": {
+            "variantSetId": {
+              "description": "Required. The ID of the variant set.",
+              "required": true,
+              "type": "string",
+              "location": "path"
+            }
+          },
+          "scopes": [
+            "https://www.googleapis.com/auth/cloud-platform",
+            "https://www.googleapis.com/auth/genomics",
+            "https://www.googleapis.com/auth/genomics.readonly"
+          ],
+          "flatPath": "v1/variantsets/{variantSetId}",
+          "path": "v1/variantsets/{variantSetId}",
+          "id": "genomics.variantsets.get"
+        },
+        "patch": {
+          "description": "Updates a variant set using patch semantics.\n\nFor the definitions of variant sets and other genomics resources, see\n[Fundamentals of Google\nGenomics](https://cloud.google.com/genomics/fundamentals-of-google-genomics)",
+          "request": {
+            "$ref": "VariantSet"
+          },
+          "httpMethod": "PATCH",
+          "parameterOrder": [
+            "variantSetId"
+          ],
+          "response": {
+            "$ref": "VariantSet"
+          },
+          "scopes": [
+            "https://www.googleapis.com/auth/cloud-platform",
+            "https://www.googleapis.com/auth/genomics"
+          ],
+          "parameters": {
+            "updateMask": {
+              "location": "query",
+              "description": "An optional mask specifying which fields to update. Supported fields:\n\n* metadata.\n* name.\n* description.\n\nLeaving `updateMask` unset is equivalent to specifying all mutable\nfields.",
+              "format": "google-fieldmask",
+              "type": "string"
+            },
+            "variantSetId": {
+              "description": "The ID of the variant to be updated (must already exist).",
+              "required": true,
+              "type": "string",
+              "location": "path"
+            }
+          },
+          "flatPath": "v1/variantsets/{variantSetId}",
+          "id": "genomics.variantsets.patch",
+          "path": "v1/variantsets/{variantSetId}"
+        }
+      }
+    },
+    "operations": {
+      "methods": {
+        "cancel": {
+          "flatPath": "v1/operations/{operationsId}:cancel",
+          "id": "genomics.operations.cancel",
+          "path": "v1/{+name}:cancel",
+          "request": {
+            "$ref": "CancelOperationRequest"
+          },
+          "description": "Starts asynchronous cancellation on a long-running operation. The server makes a best effort to cancel the operation, but success is not guaranteed. Clients may use Operations.GetOperation or Operations.ListOperations to check whether the cancellation succeeded or the operation completed despite cancellation.",
+          "httpMethod": "POST",
+          "parameterOrder": [
+            "name"
+          ],
+          "response": {
+            "$ref": "Empty"
+          },
+          "parameters": {
+            "name": {
+              "description": "The name of the operation resource to be cancelled.",
+              "required": true,
+              "type": "string",
+              "pattern": "^operations/.+$",
+              "location": "path"
+            }
+          },
+          "scopes": [
+            "https://www.googleapis.com/auth/cloud-platform",
+            "https://www.googleapis.com/auth/genomics"
+          ]
+        },
+        "list": {
+          "httpMethod": "GET",
+          "parameterOrder": [
+            "name"
+          ],
+          "response": {
+            "$ref": "ListOperationsResponse"
+          },
+          "parameters": {
+            "filter": {
+              "description": "A string for filtering Operations.\nThe following filter fields are supported&#58;\n\n* projectId&#58; Required. Corresponds to\n  OperationMetadata.projectId.\n* createTime&#58; The time this job was created, in seconds from the\n  [epoch](http://en.wikipedia.org/wiki/Unix_time). Can use `\u003e=` and/or `\u003c=`\n  operators.\n* status&#58; Can be `RUNNING`, `SUCCESS`, `FAILURE`, or `CANCELED`. Only\n  one status may be specified.\n* labels.key where key is a label key.\n\nExamples&#58;\n\n* `projectId = my-project AND createTime \u003e= 1432140000`\n* `projectId = my-project AND createTime \u003e= 1432140000 AND createTime \u003c= 1432150000 AND status = RUNNING`\n* `projectId = my-project AND labels.color = *`\n* `projectId = my-project AND labels.color = red`",
+              "type": "string",
+              "location": "query"
+            },
+            "name": {
+              "location": "path",
+              "description": "The name of the operation collection.",
+              "required": true,
+              "type": "string",
+              "pattern": "^operations$"
+            },
+            "pageToken": {
+              "location": "query",
+              "description": "The standard list page token.",
+              "type": "string"
+            },
+            "pageSize": {
+              "location": "query",
+              "description": "The maximum number of results to return. If unspecified, defaults to\n256. The maximum value is 2048.",
+              "format": "int32",
+              "type": "integer"
+            }
+          },
+          "scopes": [
+            "https://www.googleapis.com/auth/cloud-platform",
+            "https://www.googleapis.com/auth/genomics"
+          ],
+          "flatPath": "v1/operations",
+          "id": "genomics.operations.list",
+          "path": "v1/{+name}",
+          "description": "Lists operations that match the specified filter in the request."
+        },
+        "get": {
+          "flatPath": "v1/operations/{operationsId}",
+          "id": "genomics.operations.get",
+          "path": "v1/{+name}",
+          "description": "Gets the latest state of a long-running operation.  Clients can use this\nmethod to poll the operation result at intervals as recommended by the API\nservice.",
+          "httpMethod": "GET",
+          "parameterOrder": [
+            "name"
+          ],
+          "response": {
+            "$ref": "Operation"
+          },
+          "scopes": [
+            "https://www.googleapis.com/auth/cloud-platform",
+            "https://www.googleapis.com/auth/genomics"
+          ],
+          "parameters": {
+            "name": {
+              "description": "The name of the operation resource.",
+              "required": true,
+              "type": "string",
+              "pattern": "^operations/.+$",
+              "location": "path"
+            }
+          }
+        }
+      }
+    },
+    "referencesets": {
+      "methods": {
+        "search": {
+          "request": {
+            "$ref": "SearchReferenceSetsRequest"
+          },
+          "description": "Searches for reference sets which match the given criteria.\n\nFor the definitions of references and other genomics resources, see\n[Fundamentals of Google\nGenomics](https://cloud.google.com/genomics/fundamentals-of-google-genomics)\n\nImplements\n[GlobalAllianceApi.searchReferenceSets](https://github.com/ga4gh/schemas/blob/v0.5.1/src/main/resources/avro/referencemethods.avdl#L71)",
+          "httpMethod": "POST",
+          "parameterOrder": [],
+          "response": {
+            "$ref": "SearchReferenceSetsResponse"
+          },
           "parameters": {},
           "scopes": [
             "https://www.googleapis.com/auth/cloud-platform",
             "https://www.googleapis.com/auth/genomics",
             "https://www.googleapis.com/auth/genomics.readonly"
           ],
-          "flatPath": "v1/readgroupsets/search",
-          "id": "genomics.readgroupsets.search",
-          "path": "v1/readgroupsets/search",
-          "request": {
-            "$ref": "SearchReadGroupSetsRequest"
-          },
-          "description": "Searches for read group sets matching the criteria.\n\nFor the definitions of read group sets and other genomics resources, see\n[Fundamentals of Google\nGenomics](https://cloud.google.com/genomics/fundamentals-of-google-genomics)\n\nImplements\n[GlobalAllianceApi.searchReadGroupSets](https://github.com/ga4gh/schemas/blob/v0.5.1/src/main/resources/avro/readmethods.avdl#L135).",
-          "httpMethod": "POST",
-          "parameterOrder": [],
-          "response": {
-            "$ref": "SearchReadGroupSetsResponse"
-          }
+          "flatPath": "v1/referencesets/search",
+          "id": "genomics.referencesets.search",
+          "path": "v1/referencesets/search"
         },
-        "patch": {
+        "get": {
+          "description": "Gets a reference set.\n\nFor the definitions of references and other genomics resources, see\n[Fundamentals of Google\nGenomics](https://cloud.google.com/genomics/fundamentals-of-google-genomics)\n\nImplements\n[GlobalAllianceApi.getReferenceSet](https://github.com/ga4gh/schemas/blob/v0.5.1/src/main/resources/avro/referencemethods.avdl#L83).",
+          "response": {
+            "$ref": "ReferenceSet"
+          },
+          "parameterOrder": [
+            "referenceSetId"
+          ],
+          "httpMethod": "GET",
+          "scopes": [
+            "https://www.googleapis.com/auth/cloud-platform",
+            "https://www.googleapis.com/auth/genomics",
+            "https://www.googleapis.com/auth/genomics.readonly"
+          ],
           "parameters": {
-            "readGroupSetId": {
-              "description": "The ID of the read group set to be updated. The caller must have WRITE\npermissions to the dataset associated with this read group set.",
+            "referenceSetId": {
+              "description": "The ID of the reference set.",
               "required": true,
               "type": "string",
               "location": "path"
-            },
-            "updateMask": {
-              "location": "query",
-              "description": "An optional mask specifying which fields to update. Supported fields:\n\n* name.\n* referenceSetId.\n\nLeaving `updateMask` unset is equivalent to specifying all mutable\nfields.",
-              "format": "google-fieldmask",
-              "type": "string"
+            }
+          },
+          "flatPath": "v1/referencesets/{referenceSetId}",
+          "path": "v1/referencesets/{referenceSetId}",
+          "id": "genomics.referencesets.get"
+        }
+      }
+    },
+    "readgroupsets": {
+      "methods": {
+        "delete": {
+          "description": "Deletes a read group set.\n\nFor the definitions of read group sets and other genomics resources, see\n[Fundamentals of Google\nGenomics](https://cloud.google.com/genomics/fundamentals-of-google-genomics)",
+          "response": {
+            "$ref": "Empty"
+          },
+          "parameterOrder": [
+            "readGroupSetId"
+          ],
+          "httpMethod": "DELETE",
+          "parameters": {
+            "readGroupSetId": {
+              "description": "The ID of the read group set to be deleted. The caller must have WRITE\npermissions to the dataset associated with this read group set.",
+              "required": true,
+              "type": "string",
+              "location": "path"
             }
           },
           "scopes": [
@@ -77,31 +481,90 @@
             "https://www.googleapis.com/auth/genomics"
           ],
           "flatPath": "v1/readgroupsets/{readGroupSetId}",
-          "id": "genomics.readgroupsets.patch",
           "path": "v1/readgroupsets/{readGroupSetId}",
+          "id": "genomics.readgroupsets.delete"
+        },
+        "import": {
+          "description": "Creates read group sets by asynchronously importing the provided\ninformation.\n\nFor the definitions of read group sets and other genomics resources, see\n[Fundamentals of Google\nGenomics](https://cloud.google.com/genomics/fundamentals-of-google-genomics)\n\nThe caller must have WRITE permissions to the dataset.\n\n## Notes on [BAM](https://samtools.github.io/hts-specs/SAMv1.pdf) import\n\n- Tags will be converted to strings - tag types are not preserved\n- Comments (`@CO`) in the input file header will not be preserved\n- Original header order of references (`@SQ`) will not be preserved\n- Any reverse stranded unmapped reads will be reverse complemented, and\ntheir qualities (also the \"BQ\" and \"OQ\" tags, if any) will be reversed\n- Unmapped reads will be stripped of positional information (reference name\nand position)",
           "request": {
-            "$ref": "ReadGroupSet"
+            "$ref": "ImportReadGroupSetsRequest"
           },
-          "description": "Updates a read group set.\n\nFor the definitions of read group sets and other genomics resources, see\n[Fundamentals of Google\nGenomics](https://cloud.google.com/genomics/fundamentals-of-google-genomics)\n\nThis method supports patch semantics.",
-          "httpMethod": "PATCH",
+          "httpMethod": "POST",
+          "parameterOrder": [],
+          "response": {
+            "$ref": "Operation"
+          },
+          "scopes": [
+            "https://www.googleapis.com/auth/cloud-platform",
+            "https://www.googleapis.com/auth/devstorage.read_write",
+            "https://www.googleapis.com/auth/genomics"
+          ],
+          "parameters": {},
+          "flatPath": "v1/readgroupsets:import",
+          "id": "genomics.readgroupsets.import",
+          "path": "v1/readgroupsets:import"
+        },
+        "export": {
+          "request": {
+            "$ref": "ExportReadGroupSetRequest"
+          },
+          "description": "Exports a read group set to a BAM file in Google Cloud Storage.\n\nFor the definitions of read group sets and other genomics resources, see\n[Fundamentals of Google\nGenomics](https://cloud.google.com/genomics/fundamentals-of-google-genomics)\n\nNote that currently there may be some differences between exported BAM\nfiles and the original BAM file at the time of import. See\nImportReadGroupSets\nfor caveats.",
+          "response": {
+            "$ref": "Operation"
+          },
           "parameterOrder": [
             "readGroupSetId"
           ],
+          "httpMethod": "POST",
+          "parameters": {
+            "readGroupSetId": {
+              "location": "path",
+              "description": "Required. The ID of the read group set to export. The caller must have\nREAD access to this read group set.",
+              "required": true,
+              "type": "string"
+            }
+          },
+          "scopes": [
+            "https://www.googleapis.com/auth/cloud-platform",
+            "https://www.googleapis.com/auth/devstorage.read_write",
+            "https://www.googleapis.com/auth/genomics"
+          ],
+          "flatPath": "v1/readgroupsets/{readGroupSetId}:export",
+          "path": "v1/readgroupsets/{readGroupSetId}:export",
+          "id": "genomics.readgroupsets.export"
+        },
+        "search": {
+          "request": {
+            "$ref": "SearchReadGroupSetsRequest"
+          },
+          "description": "Searches for read group sets matching the criteria.\n\nFor the definitions of read group sets and other genomics resources, see\n[Fundamentals of Google\nGenomics](https://cloud.google.com/genomics/fundamentals-of-google-genomics)\n\nImplements\n[GlobalAllianceApi.searchReadGroupSets](https://github.com/ga4gh/schemas/blob/v0.5.1/src/main/resources/avro/readmethods.avdl#L135).",
           "response": {
-            "$ref": "ReadGroupSet"
-          }
+            "$ref": "SearchReadGroupSetsResponse"
+          },
+          "parameterOrder": [],
+          "httpMethod": "POST",
+          "parameters": {},
+          "scopes": [
+            "https://www.googleapis.com/auth/cloud-platform",
+            "https://www.googleapis.com/auth/genomics",
+            "https://www.googleapis.com/auth/genomics.readonly"
+          ],
+          "flatPath": "v1/readgroupsets/search",
+          "path": "v1/readgroupsets/search",
+          "id": "genomics.readgroupsets.search"
         },
         "get": {
+          "flatPath": "v1/readgroupsets/{readGroupSetId}",
           "id": "genomics.readgroupsets.get",
           "path": "v1/readgroupsets/{readGroupSetId}",
           "description": "Gets a read group set by ID.\n\nFor the definitions of read group sets and other genomics resources, see\n[Fundamentals of Google\nGenomics](https://cloud.google.com/genomics/fundamentals-of-google-genomics)",
-          "response": {
-            "$ref": "ReadGroupSet"
-          },
           "httpMethod": "GET",
           "parameterOrder": [
             "readGroupSetId"
           ],
+          "response": {
+            "$ref": "ReadGroupSet"
+          },
           "scopes": [
             "https://www.googleapis.com/auth/cloud-platform",
             "https://www.googleapis.com/auth/genomics",
@@ -114,76 +577,66 @@
               "required": true,
               "type": "string"
             }
-          },
-          "flatPath": "v1/readgroupsets/{readGroupSetId}"
+          }
         },
-        "import": {
+        "patch": {
           "request": {
-            "$ref": "ImportReadGroupSetsRequest"
+            "$ref": "ReadGroupSet"
           },
-          "description": "Creates read group sets by asynchronously importing the provided\ninformation.\n\nFor the definitions of read group sets and other genomics resources, see\n[Fundamentals of Google\nGenomics](https://cloud.google.com/genomics/fundamentals-of-google-genomics)\n\nThe caller must have WRITE permissions to the dataset.\n\n## Notes on [BAM](https://samtools.github.io/hts-specs/SAMv1.pdf) import\n\n- Tags will be converted to strings - tag types are not preserved\n- Comments (`@CO`) in the input file header will not be preserved\n- Original header order of references (`@SQ`) will not be preserved\n- Any reverse stranded unmapped reads will be reverse complemented, and\ntheir qualities (also the \"BQ\" and \"OQ\" tags, if any) will be reversed\n- Unmapped reads will be stripped of positional information (reference name\nand position)",
-          "response": {
-            "$ref": "Operation"
-          },
-          "parameterOrder": [],
-          "httpMethod": "POST",
-          "parameters": {},
-          "scopes": [
-            "https://www.googleapis.com/auth/cloud-platform",
-            "https://www.googleapis.com/auth/devstorage.read_write",
-            "https://www.googleapis.com/auth/genomics"
-          ],
-          "flatPath": "v1/readgroupsets:import",
-          "path": "v1/readgroupsets:import",
-          "id": "genomics.readgroupsets.import"
-        },
-        "delete": {
-          "httpMethod": "DELETE",
+          "description": "Updates a read group set.\n\nFor the definitions of read group sets and other genomics resources, see\n[Fundamentals of Google\nGenomics](https://cloud.google.com/genomics/fundamentals-of-google-genomics)\n\nThis method supports patch semantics.",
+          "httpMethod": "PATCH",
           "parameterOrder": [
             "readGroupSetId"
           ],
           "response": {
-            "$ref": "Empty"
+            "$ref": "ReadGroupSet"
+          },
+          "parameters": {
+            "updateMask": {
+              "description": "An optional mask specifying which fields to update. Supported fields:\n\n* name.\n* referenceSetId.\n\nLeaving `updateMask` unset is equivalent to specifying all mutable\nfields.",
+              "format": "google-fieldmask",
+              "type": "string",
+              "location": "query"
+            },
+            "readGroupSetId": {
+              "location": "path",
+              "description": "The ID of the read group set to be updated. The caller must have WRITE\npermissions to the dataset associated with this read group set.",
+              "required": true,
+              "type": "string"
+            }
           },
           "scopes": [
             "https://www.googleapis.com/auth/cloud-platform",
             "https://www.googleapis.com/auth/genomics"
           ],
-          "parameters": {
-            "readGroupSetId": {
-              "location": "path",
-              "description": "The ID of the read group set to be deleted. The caller must have WRITE\npermissions to the dataset associated with this read group set.",
-              "required": true,
-              "type": "string"
-            }
-          },
           "flatPath": "v1/readgroupsets/{readGroupSetId}",
-          "id": "genomics.readgroupsets.delete",
-          "path": "v1/readgroupsets/{readGroupSetId}",
-          "description": "Deletes a read group set.\n\nFor the definitions of read group sets and other genomics resources, see\n[Fundamentals of Google\nGenomics](https://cloud.google.com/genomics/fundamentals-of-google-genomics)"
+          "id": "genomics.readgroupsets.patch",
+          "path": "v1/readgroupsets/{readGroupSetId}"
         }
       },
       "resources": {
         "coveragebuckets": {
           "methods": {
             "list": {
+              "description": "Lists fixed width coverage buckets for a read group set, each of which\ncorrespond to a range of a reference sequence. Each bucket summarizes\ncoverage information across its corresponding genomic range.\n\nFor the definitions of read group sets and other genomics resources, see\n[Fundamentals of Google\nGenomics](https://cloud.google.com/genomics/fundamentals-of-google-genomics)\n\nCoverage is defined as the number of reads which are aligned to a given\nbase in the reference sequence. Coverage buckets are available at several\nprecomputed bucket widths, enabling retrieval of various coverage 'zoom\nlevels'. The caller must have READ permissions for the target read group\nset.",
               "parameterOrder": [
                 "readGroupSetId"
               ],
-              "httpMethod": "GET",
               "response": {
                 "$ref": "ListCoverageBucketsResponse"
               },
-              "scopes": [
-                "https://www.googleapis.com/auth/cloud-platform",
-                "https://www.googleapis.com/auth/genomics",
-                "https://www.googleapis.com/auth/genomics.readonly"
-              ],
+              "httpMethod": "GET",
               "parameters": {
+                "end": {
+                  "location": "query",
+                  "description": "The end position of the range on the reference, 0-based exclusive. If\nspecified, `referenceName` must also be specified. If unset or 0, defaults\nto the length of the reference.",
+                  "format": "int64",
+                  "type": "string"
+                },
                 "pageToken": {
+                  "location": "query",
                   "description": "The continuation token, which is used to page through large result sets.\nTo get the next page of results, set this parameter to the value of\n`nextPageToken` from the previous response.",
-                  "type": "string",
-                  "location": "query"
+                  "type": "string"
                 },
                 "pageSize": {
                   "description": "The maximum number of results to return in a single page. If unspecified,\ndefaults to 1024. The maximum value is 2048.",
@@ -192,10 +645,16 @@
                   "location": "query"
                 },
                 "start": {
-                  "location": "query",
                   "description": "The start position of the range on the reference, 0-based inclusive. If\nspecified, `referenceName` must also be specified. Defaults to 0.",
                   "format": "int64",
-                  "type": "string"
+                  "type": "string",
+                  "location": "query"
+                },
+                "targetBucketWidth": {
+                  "description": "The desired width of each reported coverage bucket in base pairs. This\nwill be rounded down to the nearest precomputed bucket width; the value\nof which is returned as `bucketWidth` in the response. Defaults\nto infinity (each bucket spans an entire reference sequence) or the length\nof the target range, if specified. The smallest precomputed\n`bucketWidth` is currently 2048 base pairs; this is subject to\nchange.",
+                  "format": "int64",
+                  "type": "string",
+                  "location": "query"
                 },
                 "readGroupSetId": {
                   "description": "Required. The ID of the read group set over which coverage is requested.",
@@ -203,28 +662,20 @@
                   "type": "string",
                   "location": "path"
                 },
-                "targetBucketWidth": {
-                  "location": "query",
-                  "description": "The desired width of each reported coverage bucket in base pairs. This\nwill be rounded down to the nearest precomputed bucket width; the value\nof which is returned as `bucketWidth` in the response. Defaults\nto infinity (each bucket spans an entire reference sequence) or the length\nof the target range, if specified. The smallest precomputed\n`bucketWidth` is currently 2048 base pairs; this is subject to\nchange.",
-                  "format": "int64",
-                  "type": "string"
-                },
                 "referenceName": {
                   "location": "query",
                   "description": "The name of the reference to query, within the reference set associated\nwith this query. Optional.",
                   "type": "string"
-                },
-                "end": {
-                  "description": "The end position of the range on the reference, 0-based exclusive. If\nspecified, `referenceName` must also be specified. If unset or 0, defaults\nto the length of the reference.",
-                  "format": "int64",
-                  "type": "string",
-                  "location": "query"
                 }
               },
+              "scopes": [
+                "https://www.googleapis.com/auth/cloud-platform",
+                "https://www.googleapis.com/auth/genomics",
+                "https://www.googleapis.com/auth/genomics.readonly"
+              ],
               "flatPath": "v1/readgroupsets/{readGroupSetId}/coveragebuckets",
               "path": "v1/readgroupsets/{readGroupSetId}/coveragebuckets",
-              "id": "genomics.readgroupsets.coveragebuckets.list",
-              "description": "Lists fixed width coverage buckets for a read group set, each of which\ncorrespond to a range of a reference sequence. Each bucket summarizes\ncoverage information across its corresponding genomic range.\n\nFor the definitions of read group sets and other genomics resources, see\n[Fundamentals of Google\nGenomics](https://cloud.google.com/genomics/fundamentals-of-google-genomics)\n\nCoverage is defined as the number of reads which are aligned to a given\nbase in the reference sequence. Coverage buckets are available at several\nprecomputed bucket widths, enabling retrieval of various coverage 'zoom\nlevels'. The caller must have READ permissions for the target read group\nset."
+              "id": "genomics.readgroupsets.coveragebuckets.list"
             }
           }
         }
@@ -233,55 +684,34 @@
     "reads": {
       "methods": {
         "search": {
-          "httpMethod": "POST",
-          "parameterOrder": [],
+          "description": "Gets a list of reads for one or more read group sets.\n\nFor the definitions of read group sets and other genomics resources, see\n[Fundamentals of Google\nGenomics](https://cloud.google.com/genomics/fundamentals-of-google-genomics)\n\nReads search operates over a genomic coordinate space of reference sequence\n& position defined over the reference sequences to which the requested\nread group sets are aligned.\n\nIf a target positional range is specified, search returns all reads whose\nalignment to the reference genome overlap the range. A query which\nspecifies only read group set IDs yields all reads in those read group\nsets, including unmapped reads.\n\nAll reads returned (including reads on subsequent pages) are ordered by\ngenomic coordinate (by reference sequence, then position). Reads with\nequivalent genomic coordinates are returned in an unspecified order. This\norder is consistent, such that two queries for the same content (regardless\nof page size) yield reads in the same order across their respective streams\nof paginated responses.\n\nImplements\n[GlobalAllianceApi.searchReads](https://github.com/ga4gh/schemas/blob/v0.5.1/src/main/resources/avro/readmethods.avdl#L85).",
+          "request": {
+            "$ref": "SearchReadsRequest"
+          },
           "response": {
             "$ref": "SearchReadsResponse"
           },
-          "parameters": {},
+          "parameterOrder": [],
+          "httpMethod": "POST",
           "scopes": [
             "https://www.googleapis.com/auth/cloud-platform",
             "https://www.googleapis.com/auth/genomics",
             "https://www.googleapis.com/auth/genomics.readonly"
           ],
+          "parameters": {},
           "flatPath": "v1/reads/search",
-          "id": "genomics.reads.search",
           "path": "v1/reads/search",
-          "request": {
-            "$ref": "SearchReadsRequest"
-          },
-          "description": "Gets a list of reads for one or more read group sets.\n\nFor the definitions of read group sets and other genomics resources, see\n[Fundamentals of Google\nGenomics](https://cloud.google.com/genomics/fundamentals-of-google-genomics)\n\nReads search operates over a genomic coordinate space of reference sequence\n& position defined over the reference sequences to which the requested\nread group sets are aligned.\n\nIf a target positional range is specified, search returns all reads whose\nalignment to the reference genome overlap the range. A query which\nspecifies only read group set IDs yields all reads in those read group\nsets, including unmapped reads.\n\nAll reads returned (including reads on subsequent pages) are ordered by\ngenomic coordinate (by reference sequence, then position). Reads with\nequivalent genomic coordinates are returned in an unspecified order. This\norder is consistent, such that two queries for the same content (regardless\nof page size) yield reads in the same order across their respective streams\nof paginated responses.\n\nImplements\n[GlobalAllianceApi.searchReads](https://github.com/ga4gh/schemas/blob/v0.5.1/src/main/resources/avro/readmethods.avdl#L85)."
+          "id": "genomics.reads.search"
         }
       }
     },
     "callsets": {
       "methods": {
-        "delete": {
-          "response": {
-            "$ref": "Empty"
-          },
-          "httpMethod": "DELETE",
-          "parameterOrder": [
-            "callSetId"
-          ],
-          "scopes": [
-            "https://www.googleapis.com/auth/cloud-platform",
-            "https://www.googleapis.com/auth/genomics"
-          ],
-          "parameters": {
-            "callSetId": {
-              "description": "The ID of the call set to be deleted.",
-              "required": true,
-              "type": "string",
-              "location": "path"
-            }
-          },
-          "flatPath": "v1/callsets/{callSetId}",
-          "id": "genomics.callsets.delete",
-          "path": "v1/callsets/{callSetId}",
-          "description": "Deletes a call set.\n\nFor the definitions of call sets and other genomics resources, see\n[Fundamentals of Google\nGenomics](https://cloud.google.com/genomics/fundamentals-of-google-genomics)"
-        },
         "search": {
+          "description": "Gets a list of call sets matching the criteria.\n\nFor the definitions of call sets and other genomics resources, see\n[Fundamentals of Google\nGenomics](https://cloud.google.com/genomics/fundamentals-of-google-genomics)\n\nImplements\n[GlobalAllianceApi.searchCallSets](https://github.com/ga4gh/schemas/blob/v0.5.1/src/main/resources/avro/variantmethods.avdl#L178).",
+          "request": {
+            "$ref": "SearchCallSetsRequest"
+          },
           "httpMethod": "POST",
           "parameterOrder": [],
           "response": {
@@ -295,30 +725,20 @@
           "parameters": {},
           "flatPath": "v1/callsets/search",
           "id": "genomics.callsets.search",
-          "path": "v1/callsets/search",
-          "description": "Gets a list of call sets matching the criteria.\n\nFor the definitions of call sets and other genomics resources, see\n[Fundamentals of Google\nGenomics](https://cloud.google.com/genomics/fundamentals-of-google-genomics)\n\nImplements\n[GlobalAllianceApi.searchCallSets](https://github.com/ga4gh/schemas/blob/v0.5.1/src/main/resources/avro/variantmethods.avdl#L178).",
-          "request": {
-            "$ref": "SearchCallSetsRequest"
-          }
+          "path": "v1/callsets/search"
         },
         "patch": {
-          "path": "v1/callsets/{callSetId}",
-          "id": "genomics.callsets.patch",
-          "description": "Updates a call set.\n\nFor the definitions of call sets and other genomics resources, see\n[Fundamentals of Google\nGenomics](https://cloud.google.com/genomics/fundamentals-of-google-genomics)\n\nThis method supports patch semantics.",
           "request": {
             "$ref": "CallSet"
           },
-          "response": {
-            "$ref": "CallSet"
-          },
+          "description": "Updates a call set.\n\nFor the definitions of call sets and other genomics resources, see\n[Fundamentals of Google\nGenomics](https://cloud.google.com/genomics/fundamentals-of-google-genomics)\n\nThis method supports patch semantics.",
+          "httpMethod": "PATCH",
           "parameterOrder": [
             "callSetId"
           ],
-          "httpMethod": "PATCH",
-          "scopes": [
-            "https://www.googleapis.com/auth/cloud-platform",
-            "https://www.googleapis.com/auth/genomics"
-          ],
+          "response": {
+            "$ref": "CallSet"
+          },
           "parameters": {
             "updateMask": {
               "description": "An optional mask specifying which fields to update. At this time, the only\nmutable field is name. The only\nacceptable value is \"name\". If unspecified, all mutable fields will be\nupdated.",
@@ -333,25 +753,28 @@
               "type": "string"
             }
           },
-          "flatPath": "v1/callsets/{callSetId}"
+          "scopes": [
+            "https://www.googleapis.com/auth/cloud-platform",
+            "https://www.googleapis.com/auth/genomics"
+          ],
+          "flatPath": "v1/callsets/{callSetId}",
+          "id": "genomics.callsets.patch",
+          "path": "v1/callsets/{callSetId}"
         },
         "get": {
-          "path": "v1/callsets/{callSetId}",
-          "id": "genomics.callsets.get",
-          "description": "Gets a call set by ID.\n\nFor the definitions of call sets and other genomics resources, see\n[Fundamentals of Google\nGenomics](https://cloud.google.com/genomics/fundamentals-of-google-genomics)",
+          "httpMethod": "GET",
           "parameterOrder": [
             "callSetId"
           ],
           "response": {
             "$ref": "CallSet"
           },
-          "httpMethod": "GET",
           "parameters": {
             "callSetId": {
+              "location": "path",
               "description": "The ID of the call set.",
               "required": true,
-              "type": "string",
-              "location": "path"
+              "type": "string"
             }
           },
           "scopes": [
@@ -359,18 +782,172 @@
             "https://www.googleapis.com/auth/genomics",
             "https://www.googleapis.com/auth/genomics.readonly"
           ],
-          "flatPath": "v1/callsets/{callSetId}"
+          "flatPath": "v1/callsets/{callSetId}",
+          "id": "genomics.callsets.get",
+          "path": "v1/callsets/{callSetId}",
+          "description": "Gets a call set by ID.\n\nFor the definitions of call sets and other genomics resources, see\n[Fundamentals of Google\nGenomics](https://cloud.google.com/genomics/fundamentals-of-google-genomics)"
         },
         "create": {
-          "path": "v1/callsets",
+          "flatPath": "v1/callsets",
           "id": "genomics.callsets.create",
-          "description": "Creates a new call set.\n\nFor the definitions of call sets and other genomics resources, see\n[Fundamentals of Google\nGenomics](https://cloud.google.com/genomics/fundamentals-of-google-genomics)",
+          "path": "v1/callsets",
           "request": {
             "$ref": "CallSet"
           },
+          "description": "Creates a new call set.\n\nFor the definitions of call sets and other genomics resources, see\n[Fundamentals of Google\nGenomics](https://cloud.google.com/genomics/fundamentals-of-google-genomics)",
+          "httpMethod": "POST",
+          "parameterOrder": [],
           "response": {
             "$ref": "CallSet"
           },
+          "parameters": {},
+          "scopes": [
+            "https://www.googleapis.com/auth/cloud-platform",
+            "https://www.googleapis.com/auth/genomics"
+          ]
+        },
+        "delete": {
+          "description": "Deletes a call set.\n\nFor the definitions of call sets and other genomics resources, see\n[Fundamentals of Google\nGenomics](https://cloud.google.com/genomics/fundamentals-of-google-genomics)",
+          "response": {
+            "$ref": "Empty"
+          },
+          "parameterOrder": [
+            "callSetId"
+          ],
+          "httpMethod": "DELETE",
+          "scopes": [
+            "https://www.googleapis.com/auth/cloud-platform",
+            "https://www.googleapis.com/auth/genomics"
+          ],
+          "parameters": {
+            "callSetId": {
+              "description": "The ID of the call set to be deleted.",
+              "required": true,
+              "type": "string",
+              "location": "path"
+            }
+          },
+          "flatPath": "v1/callsets/{callSetId}",
+          "path": "v1/callsets/{callSetId}",
+          "id": "genomics.callsets.delete"
+        }
+      }
+    },
+    "annotationsets": {
+      "methods": {
+        "delete": {
+          "flatPath": "v1/annotationsets/{annotationSetId}",
+          "path": "v1/annotationsets/{annotationSetId}",
+          "id": "genomics.annotationsets.delete",
+          "description": "Deletes an annotation set. Caller must have WRITE permission\nfor the associated annotation set.",
+          "response": {
+            "$ref": "Empty"
+          },
+          "parameterOrder": [
+            "annotationSetId"
+          ],
+          "httpMethod": "DELETE",
+          "parameters": {
+            "annotationSetId": {
+              "location": "path",
+              "description": "The ID of the annotation set to be deleted.",
+              "required": true,
+              "type": "string"
+            }
+          },
+          "scopes": [
+            "https://www.googleapis.com/auth/cloud-platform",
+            "https://www.googleapis.com/auth/genomics"
+          ]
+        },
+        "search": {
+          "response": {
+            "$ref": "SearchAnnotationSetsResponse"
+          },
+          "parameterOrder": [],
+          "httpMethod": "POST",
+          "parameters": {},
+          "scopes": [
+            "https://www.googleapis.com/auth/cloud-platform",
+            "https://www.googleapis.com/auth/genomics",
+            "https://www.googleapis.com/auth/genomics.readonly"
+          ],
+          "flatPath": "v1/annotationsets/search",
+          "path": "v1/annotationsets/search",
+          "id": "genomics.annotationsets.search",
+          "request": {
+            "$ref": "SearchAnnotationSetsRequest"
+          },
+          "description": "Searches for annotation sets that match the given criteria. Annotation sets\nare returned in an unspecified order. This order is consistent, such that\ntwo queries for the same content (regardless of page size) yield annotation\nsets in the same order across their respective streams of paginated\nresponses. Caller must have READ permission for the queried datasets."
+        },
+        "get": {
+          "description": "Gets an annotation set. Caller must have READ permission for\nthe associated dataset.",
+          "response": {
+            "$ref": "AnnotationSet"
+          },
+          "parameterOrder": [
+            "annotationSetId"
+          ],
+          "httpMethod": "GET",
+          "scopes": [
+            "https://www.googleapis.com/auth/cloud-platform",
+            "https://www.googleapis.com/auth/genomics",
+            "https://www.googleapis.com/auth/genomics.readonly"
+          ],
+          "parameters": {
+            "annotationSetId": {
+              "location": "path",
+              "description": "The ID of the annotation set to be retrieved.",
+              "required": true,
+              "type": "string"
+            }
+          },
+          "flatPath": "v1/annotationsets/{annotationSetId}",
+          "path": "v1/annotationsets/{annotationSetId}",
+          "id": "genomics.annotationsets.get"
+        },
+        "update": {
+          "request": {
+            "$ref": "AnnotationSet"
+          },
+          "description": "Updates an annotation set. The update must respect all mutability\nrestrictions and other invariants described on the annotation set resource.\nCaller must have WRITE permission for the associated dataset.",
+          "httpMethod": "PUT",
+          "parameterOrder": [
+            "annotationSetId"
+          ],
+          "response": {
+            "$ref": "AnnotationSet"
+          },
+          "parameters": {
+            "updateMask": {
+              "location": "query",
+              "description": "An optional mask specifying which fields to update. Mutable fields are\nname,\nsource_uri, and\ninfo. If unspecified, all\nmutable fields will be updated.",
+              "format": "google-fieldmask",
+              "type": "string"
+            },
+            "annotationSetId": {
+              "location": "path",
+              "description": "The ID of the annotation set to be updated.",
+              "required": true,
+              "type": "string"
+            }
+          },
+          "scopes": [
+            "https://www.googleapis.com/auth/cloud-platform",
+            "https://www.googleapis.com/auth/genomics"
+          ],
+          "flatPath": "v1/annotationsets/{annotationSetId}",
+          "id": "genomics.annotationsets.update",
+          "path": "v1/annotationsets/{annotationSetId}"
+        },
+        "create": {
+          "description": "Creates a new annotation set. Caller must have WRITE permission for the\nassociated dataset.\n\nThe following fields are required:\n\n  * datasetId\n  * referenceSetId\n\nAll other fields may be optionally specified, unless documented as being\nserver-generated (for example, the `id` field).",
+          "request": {
+            "$ref": "AnnotationSet"
+          },
+          "response": {
+            "$ref": "AnnotationSet"
+          },
           "parameterOrder": [],
           "httpMethod": "POST",
           "scopes": [
@@ -378,41 +955,95 @@
             "https://www.googleapis.com/auth/genomics"
           ],
           "parameters": {},
-          "flatPath": "v1/callsets"
+          "flatPath": "v1/annotationsets",
+          "path": "v1/annotationsets",
+          "id": "genomics.annotationsets.create"
         }
       }
     },
     "variants": {
       "methods": {
-        "merge": {
-          "id": "genomics.variants.merge",
-          "path": "v1/variants:merge",
-          "description": "Merges the given variants with existing variants.\n\nFor the definitions of variants and other genomics resources, see\n[Fundamentals of Google\nGenomics](https://cloud.google.com/genomics/fundamentals-of-google-genomics)\n\nEach variant will be\nmerged with an existing variant that matches its reference sequence,\nstart, end, reference bases, and alternative bases. If no such variant\nexists, a new one will be created.\n\nWhen variants are merged, the call information from the new variant\nis added to the existing variant. Variant info fields are merged as\nspecified in the\ninfoMergeConfig\nfield of the MergeVariantsRequest.\n\nPlease exercise caution when using this method!  It is easy to introduce\nmistakes in existing variants and difficult to back out of them.  For\nexample,\nsuppose you were trying to merge a new variant with an existing one and\nboth\nvariants contain calls that belong to callsets with the same callset ID.\n\n    // Existing variant - irrelevant fields trimmed for clarity\n    {\n        \"variantSetId\": \"10473108253681171589\",\n        \"referenceName\": \"1\",\n        \"start\": \"10582\",\n        \"referenceBases\": \"G\",\n        \"alternateBases\": [\n            \"A\"\n        ],\n        \"calls\": [\n            {\n                \"callSetId\": \"10473108253681171589-0\",\n                \"callSetName\": \"CALLSET0\",\n                \"genotype\": [\n                    0,\n                    1\n                ],\n            }\n        ]\n    }\n\n    // New variant with conflicting call information\n    {\n        \"variantSetId\": \"10473108253681171589\",\n        \"referenceName\": \"1\",\n        \"start\": \"10582\",\n        \"referenceBases\": \"G\",\n        \"alternateBases\": [\n            \"A\"\n        ],\n        \"calls\": [\n            {\n                \"callSetId\": \"10473108253681171589-0\",\n                \"callSetName\": \"CALLSET0\",\n                \"genotype\": [\n                    1,\n                    1\n                ],\n            }\n        ]\n    }\n\nThe resulting merged variant would overwrite the existing calls with those\nfrom the new variant:\n\n    {\n        \"variantSetId\": \"10473108253681171589\",\n        \"referenceName\": \"1\",\n        \"start\": \"10582\",\n        \"referenceBases\": \"G\",\n        \"alternateBases\": [\n            \"A\"\n        ],\n        \"calls\": [\n            {\n                \"callSetId\": \"10473108253681171589-0\",\n                \"callSetName\": \"CALLSET0\",\n                \"genotype\": [\n                    1,\n                    1\n                ],\n            }\n        ]\n    }\n\nThis may be the desired outcome, but it is up to the user to determine if\nif that is indeed the case.",
-          "request": {
-            "$ref": "MergeVariantsRequest"
-          },
-          "httpMethod": "POST",
-          "parameterOrder": [],
+        "search": {
           "response": {
-            "$ref": "Empty"
+            "$ref": "SearchVariantsResponse"
           },
+          "parameterOrder": [],
+          "httpMethod": "POST",
+          "scopes": [
+            "https://www.googleapis.com/auth/cloud-platform",
+            "https://www.googleapis.com/auth/genomics",
+            "https://www.googleapis.com/auth/genomics.readonly"
+          ],
+          "parameters": {},
+          "flatPath": "v1/variants/search",
+          "path": "v1/variants/search",
+          "id": "genomics.variants.search",
+          "description": "Gets a list of variants matching the criteria.\n\nFor the definitions of variants and other genomics resources, see\n[Fundamentals of Google\nGenomics](https://cloud.google.com/genomics/fundamentals-of-google-genomics)\n\nImplements\n[GlobalAllianceApi.searchVariants](https://github.com/ga4gh/schemas/blob/v0.5.1/src/main/resources/avro/variantmethods.avdl#L126).",
+          "request": {
+            "$ref": "SearchVariantsRequest"
+          }
+        },
+        "patch": {
+          "description": "Updates a variant.\n\nFor the definitions of variants and other genomics resources, see\n[Fundamentals of Google\nGenomics](https://cloud.google.com/genomics/fundamentals-of-google-genomics)\n\nThis method supports patch semantics. Returns the modified variant without\nits calls.",
+          "request": {
+            "$ref": "Variant"
+          },
+          "response": {
+            "$ref": "Variant"
+          },
+          "parameterOrder": [
+            "variantId"
+          ],
+          "httpMethod": "PATCH",
           "scopes": [
             "https://www.googleapis.com/auth/cloud-platform",
             "https://www.googleapis.com/auth/genomics"
           ],
-          "parameters": {},
-          "flatPath": "v1/variants:merge"
+          "parameters": {
+            "variantId": {
+              "location": "path",
+              "description": "The ID of the variant to be updated.",
+              "required": true,
+              "type": "string"
+            },
+            "updateMask": {
+              "description": "An optional mask specifying which fields to update. At this time, mutable\nfields are names and\ninfo. Acceptable values are \"names\" and\n\"info\". If unspecified, all mutable fields will be updated.",
+              "format": "google-fieldmask",
+              "type": "string",
+              "location": "query"
+            }
+          },
+          "flatPath": "v1/variants/{variantId}",
+          "path": "v1/variants/{variantId}",
+          "id": "genomics.variants.patch"
+        },
+        "get": {
+          "response": {
+            "$ref": "Variant"
+          },
+          "parameterOrder": [
+            "variantId"
+          ],
+          "httpMethod": "GET",
+          "parameters": {
+            "variantId": {
+              "location": "path",
+              "description": "The ID of the variant.",
+              "required": true,
+              "type": "string"
+            }
+          },
+          "scopes": [
+            "https://www.googleapis.com/auth/cloud-platform",
+            "https://www.googleapis.com/auth/genomics",
+            "https://www.googleapis.com/auth/genomics.readonly"
+          ],
+          "flatPath": "v1/variants/{variantId}",
+          "path": "v1/variants/{variantId}",
+          "id": "genomics.variants.get",
+          "description": "Gets a variant by ID.\n\nFor the definitions of variants and other genomics resources, see\n[Fundamentals of Google\nGenomics](https://cloud.google.com/genomics/fundamentals-of-google-genomics)"
         },
         "import": {
-          "scopes": [
-            "https://www.googleapis.com/auth/cloud-platform",
-            "https://www.googleapis.com/auth/devstorage.read_write",
-            "https://www.googleapis.com/auth/genomics"
-          ],
-          "parameters": {},
-          "flatPath": "v1/variants:import",
-          "id": "genomics.variants.import",
-          "path": "v1/variants:import",
           "description": "Creates variant data by asynchronously importing the provided information.\n\nFor the definitions of variant sets and other genomics resources, see\n[Fundamentals of Google\nGenomics](https://cloud.google.com/genomics/fundamentals-of-google-genomics)\n\nThe variants for import will be merged with any existing variant that\nmatches its reference sequence, start, end, reference bases, and\nalternative bases. If no such variant exists, a new one will be created.\n\nWhen variants are merged, the call information from the new variant\nis added to the existing variant, and Variant info fields are merged\nas specified in\ninfoMergeConfig.\nAs a special case, for single-sample VCF files, QUAL and FILTER fields will\nbe moved to the call level; these are sometimes interpreted in a\ncall-specific context.\nImported VCF headers are appended to the metadata already in a variant set.",
           "request": {
             "$ref": "ImportVariantsRequest"
@@ -421,7 +1052,16 @@
           "parameterOrder": [],
           "response": {
             "$ref": "Operation"
-          }
+          },
+          "scopes": [
+            "https://www.googleapis.com/auth/cloud-platform",
+            "https://www.googleapis.com/auth/devstorage.read_write",
+            "https://www.googleapis.com/auth/genomics"
+          ],
+          "parameters": {},
+          "flatPath": "v1/variants:import",
+          "id": "genomics.variants.import",
+          "path": "v1/variants:import"
         },
         "delete": {
           "httpMethod": "DELETE",
@@ -448,247 +1088,54 @@
           "path": "v1/variants/{variantId}",
           "description": "Deletes a variant.\n\nFor the definitions of variants and other genomics resources, see\n[Fundamentals of Google\nGenomics](https://cloud.google.com/genomics/fundamentals-of-google-genomics)"
         },
+        "merge": {
+          "flatPath": "v1/variants:merge",
+          "id": "genomics.variants.merge",
+          "path": "v1/variants:merge",
+          "request": {
+            "$ref": "MergeVariantsRequest"
+          },
+          "description": "Merges the given variants with existing variants.\n\nFor the definitions of variants and other genomics resources, see\n[Fundamentals of Google\nGenomics](https://cloud.google.com/genomics/fundamentals-of-google-genomics)\n\nEach variant will be\nmerged with an existing variant that matches its reference sequence,\nstart, end, reference bases, and alternative bases. If no such variant\nexists, a new one will be created.\n\nWhen variants are merged, the call information from the new variant\nis added to the existing variant. Variant info fields are merged as\nspecified in the\ninfoMergeConfig\nfield of the MergeVariantsRequest.\n\nPlease exercise caution when using this method!  It is easy to introduce\nmistakes in existing variants and difficult to back out of them.  For\nexample,\nsuppose you were trying to merge a new variant with an existing one and\nboth\nvariants contain calls that belong to callsets with the same callset ID.\n\n    // Existing variant - irrelevant fields trimmed for clarity\n    {\n        \"variantSetId\": \"10473108253681171589\",\n        \"referenceName\": \"1\",\n        \"start\": \"10582\",\n        \"referenceBases\": \"G\",\n        \"alternateBases\": [\n            \"A\"\n        ],\n        \"calls\": [\n            {\n                \"callSetId\": \"10473108253681171589-0\",\n                \"callSetName\": \"CALLSET0\",\n                \"genotype\": [\n                    0,\n                    1\n                ],\n            }\n        ]\n    }\n\n    // New variant with conflicting call information\n    {\n        \"variantSetId\": \"10473108253681171589\",\n        \"referenceName\": \"1\",\n        \"start\": \"10582\",\n        \"referenceBases\": \"G\",\n        \"alternateBases\": [\n            \"A\"\n        ],\n        \"calls\": [\n            {\n                \"callSetId\": \"10473108253681171589-0\",\n                \"callSetName\": \"CALLSET0\",\n                \"genotype\": [\n                    1,\n                    1\n                ],\n            }\n        ]\n    }\n\nThe resulting merged variant would overwrite the existing calls with those\nfrom the new variant:\n\n    {\n        \"variantSetId\": \"10473108253681171589\",\n        \"referenceName\": \"1\",\n        \"start\": \"10582\",\n        \"referenceBases\": \"G\",\n        \"alternateBases\": [\n            \"A\"\n        ],\n        \"calls\": [\n            {\n                \"callSetId\": \"10473108253681171589-0\",\n                \"callSetName\": \"CALLSET0\",\n                \"genotype\": [\n                    1,\n                    1\n                ],\n            }\n        ]\n    }\n\nThis may be the desired outcome, but it is up to the user to determine if\nif that is indeed the case.",
+          "httpMethod": "POST",
+          "parameterOrder": [],
+          "response": {
+            "$ref": "Empty"
+          },
+          "parameters": {},
+          "scopes": [
+            "https://www.googleapis.com/auth/cloud-platform",
+            "https://www.googleapis.com/auth/genomics"
+          ]
+        },
         "create": {
-          "id": "genomics.variants.create",
-          "path": "v1/variants",
           "request": {
             "$ref": "Variant"
           },
           "description": "Creates a new variant.\n\nFor the definitions of variants and other genomics resources, see\n[Fundamentals of Google\nGenomics](https://cloud.google.com/genomics/fundamentals-of-google-genomics)",
-          "httpMethod": "POST",
-          "parameterOrder": [],
           "response": {
             "$ref": "Variant"
           },
+          "parameterOrder": [],
+          "httpMethod": "POST",
           "parameters": {},
           "scopes": [
             "https://www.googleapis.com/auth/cloud-platform",
             "https://www.googleapis.com/auth/genomics"
           ],
-          "flatPath": "v1/variants"
-        },
-        "search": {
-          "parameters": {},
-          "scopes": [
-            "https://www.googleapis.com/auth/cloud-platform",
-            "https://www.googleapis.com/auth/genomics",
-            "https://www.googleapis.com/auth/genomics.readonly"
-          ],
-          "flatPath": "v1/variants/search",
-          "id": "genomics.variants.search",
-          "path": "v1/variants/search",
-          "request": {
-            "$ref": "SearchVariantsRequest"
-          },
-          "description": "Gets a list of variants matching the criteria.\n\nFor the definitions of variants and other genomics resources, see\n[Fundamentals of Google\nGenomics](https://cloud.google.com/genomics/fundamentals-of-google-genomics)\n\nImplements\n[GlobalAllianceApi.searchVariants](https://github.com/ga4gh/schemas/blob/v0.5.1/src/main/resources/avro/variantmethods.avdl#L126).",
-          "httpMethod": "POST",
-          "parameterOrder": [],
-          "response": {
-            "$ref": "SearchVariantsResponse"
-          }
-        },
-        "patch": {
-          "parameters": {
-            "variantId": {
-              "description": "The ID of the variant to be updated.",
-              "required": true,
-              "type": "string",
-              "location": "path"
-            },
-            "updateMask": {
-              "description": "An optional mask specifying which fields to update. At this time, mutable\nfields are names and\ninfo. Acceptable values are \"names\" and\n\"info\". If unspecified, all mutable fields will be updated.",
-              "format": "google-fieldmask",
-              "type": "string",
-              "location": "query"
-            }
-          },
-          "scopes": [
-            "https://www.googleapis.com/auth/cloud-platform",
-            "https://www.googleapis.com/auth/genomics"
-          ],
-          "flatPath": "v1/variants/{variantId}",
-          "id": "genomics.variants.patch",
-          "path": "v1/variants/{variantId}",
-          "request": {
-            "$ref": "Variant"
-          },
-          "description": "Updates a variant.\n\nFor the definitions of variants and other genomics resources, see\n[Fundamentals of Google\nGenomics](https://cloud.google.com/genomics/fundamentals-of-google-genomics)\n\nThis method supports patch semantics. Returns the modified variant without\nits calls.",
-          "httpMethod": "PATCH",
-          "parameterOrder": [
-            "variantId"
-          ],
-          "response": {
-            "$ref": "Variant"
-          }
-        },
-        "get": {
-          "description": "Gets a variant by ID.\n\nFor the definitions of variants and other genomics resources, see\n[Fundamentals of Google\nGenomics](https://cloud.google.com/genomics/fundamentals-of-google-genomics)",
-          "httpMethod": "GET",
-          "parameterOrder": [
-            "variantId"
-          ],
-          "response": {
-            "$ref": "Variant"
-          },
-          "parameters": {
-            "variantId": {
-              "description": "The ID of the variant.",
-              "required": true,
-              "type": "string",
-              "location": "path"
-            }
-          },
-          "scopes": [
-            "https://www.googleapis.com/auth/cloud-platform",
-            "https://www.googleapis.com/auth/genomics",
-            "https://www.googleapis.com/auth/genomics.readonly"
-          ],
-          "flatPath": "v1/variants/{variantId}",
-          "id": "genomics.variants.get",
-          "path": "v1/variants/{variantId}"
-        }
-      }
-    },
-    "annotationsets": {
-      "methods": {
-        "delete": {
-          "id": "genomics.annotationsets.delete",
-          "path": "v1/annotationsets/{annotationSetId}",
-          "description": "Deletes an annotation set. Caller must have WRITE permission\nfor the associated annotation set.",
-          "httpMethod": "DELETE",
-          "response": {
-            "$ref": "Empty"
-          },
-          "parameterOrder": [
-            "annotationSetId"
-          ],
-          "scopes": [
-            "https://www.googleapis.com/auth/cloud-platform",
-            "https://www.googleapis.com/auth/genomics"
-          ],
-          "parameters": {
-            "annotationSetId": {
-              "location": "path",
-              "description": "The ID of the annotation set to be deleted.",
-              "required": true,
-              "type": "string"
-            }
-          },
-          "flatPath": "v1/annotationsets/{annotationSetId}"
-        },
-        "search": {
-          "request": {
-            "$ref": "SearchAnnotationSetsRequest"
-          },
-          "description": "Searches for annotation sets that match the given criteria. Annotation sets\nare returned in an unspecified order. This order is consistent, such that\ntwo queries for the same content (regardless of page size) yield annotation\nsets in the same order across their respective streams of paginated\nresponses. Caller must have READ permission for the queried datasets.",
-          "httpMethod": "POST",
-          "parameterOrder": [],
-          "response": {
-            "$ref": "SearchAnnotationSetsResponse"
-          },
-          "parameters": {},
-          "scopes": [
-            "https://www.googleapis.com/auth/cloud-platform",
-            "https://www.googleapis.com/auth/genomics",
-            "https://www.googleapis.com/auth/genomics.readonly"
-          ],
-          "flatPath": "v1/annotationsets/search",
-          "id": "genomics.annotationsets.search",
-          "path": "v1/annotationsets/search"
-        },
-        "get": {
-          "path": "v1/annotationsets/{annotationSetId}",
-          "id": "genomics.annotationsets.get",
-          "description": "Gets an annotation set. Caller must have READ permission for\nthe associated dataset.",
-          "response": {
-            "$ref": "AnnotationSet"
-          },
-          "parameterOrder": [
-            "annotationSetId"
-          ],
-          "httpMethod": "GET",
-          "parameters": {
-            "annotationSetId": {
-              "location": "path",
-              "description": "The ID of the annotation set to be retrieved.",
-              "required": true,
-              "type": "string"
-            }
-          },
-          "scopes": [
-            "https://www.googleapis.com/auth/cloud-platform",
-            "https://www.googleapis.com/auth/genomics",
-            "https://www.googleapis.com/auth/genomics.readonly"
-          ],
-          "flatPath": "v1/annotationsets/{annotationSetId}"
-        },
-        "update": {
-          "description": "Updates an annotation set. The update must respect all mutability\nrestrictions and other invariants described on the annotation set resource.\nCaller must have WRITE permission for the associated dataset.",
-          "request": {
-            "$ref": "AnnotationSet"
-          },
-          "httpMethod": "PUT",
-          "parameterOrder": [
-            "annotationSetId"
-          ],
-          "response": {
-            "$ref": "AnnotationSet"
-          },
-          "scopes": [
-            "https://www.googleapis.com/auth/cloud-platform",
-            "https://www.googleapis.com/auth/genomics"
-          ],
-          "parameters": {
-            "updateMask": {
-              "location": "query",
-              "description": "An optional mask specifying which fields to update. Mutable fields are\nname,\nsource_uri, and\ninfo. If unspecified, all\nmutable fields will be updated.",
-              "format": "google-fieldmask",
-              "type": "string"
-            },
-            "annotationSetId": {
-              "location": "path",
-              "description": "The ID of the annotation set to be updated.",
-              "required": true,
-              "type": "string"
-            }
-          },
-          "flatPath": "v1/annotationsets/{annotationSetId}",
-          "id": "genomics.annotationsets.update",
-          "path": "v1/annotationsets/{annotationSetId}"
-        },
-        "create": {
-          "description": "Creates a new annotation set. Caller must have WRITE permission for the\nassociated dataset.\n\nThe following fields are required:\n\n  * datasetId\n  * referenceSetId\n\nAll other fields may be optionally specified, unless documented as being\nserver-generated (for example, the `id` field).",
-          "request": {
-            "$ref": "AnnotationSet"
-          },
-          "httpMethod": "POST",
-          "parameterOrder": [],
-          "response": {
-            "$ref": "AnnotationSet"
-          },
-          "scopes": [
-            "https://www.googleapis.com/auth/cloud-platform",
-            "https://www.googleapis.com/auth/genomics"
-          ],
-          "parameters": {},
-          "flatPath": "v1/annotationsets",
-          "id": "genomics.annotationsets.create",
-          "path": "v1/annotationsets"
+          "flatPath": "v1/variants",
+          "path": "v1/variants",
+          "id": "genomics.variants.create"
         }
       }
     },
     "references": {
       "methods": {
         "search": {
-          "description": "Searches for references which match the given criteria.\n\nFor the definitions of references and other genomics resources, see\n[Fundamentals of Google\nGenomics](https://cloud.google.com/genomics/fundamentals-of-google-genomics)\n\nImplements\n[GlobalAllianceApi.searchReferences](https://github.com/ga4gh/schemas/blob/v0.5.1/src/main/resources/avro/referencemethods.avdl#L146).",
-          "request": {
-            "$ref": "SearchReferencesRequest"
-          },
-          "httpMethod": "POST",
-          "parameterOrder": [],
           "response": {
             "$ref": "SearchReferencesResponse"
           },
+          "parameterOrder": [],
+          "httpMethod": "POST",
           "scopes": [
             "https://www.googleapis.com/auth/cloud-platform",
             "https://www.googleapis.com/auth/genomics",
@@ -696,20 +1143,26 @@
           ],
           "parameters": {},
           "flatPath": "v1/references/search",
+          "path": "v1/references/search",
           "id": "genomics.references.search",
-          "path": "v1/references/search"
+          "description": "Searches for references which match the given criteria.\n\nFor the definitions of references and other genomics resources, see\n[Fundamentals of Google\nGenomics](https://cloud.google.com/genomics/fundamentals-of-google-genomics)\n\nImplements\n[GlobalAllianceApi.searchReferences](https://github.com/ga4gh/schemas/blob/v0.5.1/src/main/resources/avro/referencemethods.avdl#L146).",
+          "request": {
+            "$ref": "SearchReferencesRequest"
+          }
         },
         "get": {
-          "id": "genomics.references.get",
-          "path": "v1/references/{referenceId}",
-          "description": "Gets a reference.\n\nFor the definitions of references and other genomics resources, see\n[Fundamentals of Google\nGenomics](https://cloud.google.com/genomics/fundamentals-of-google-genomics)\n\nImplements\n[GlobalAllianceApi.getReference](https://github.com/ga4gh/schemas/blob/v0.5.1/src/main/resources/avro/referencemethods.avdl#L158).",
-          "httpMethod": "GET",
-          "parameterOrder": [
-            "referenceId"
-          ],
           "response": {
             "$ref": "Reference"
           },
+          "parameterOrder": [
+            "referenceId"
+          ],
+          "httpMethod": "GET",
+          "scopes": [
+            "https://www.googleapis.com/auth/cloud-platform",
+            "https://www.googleapis.com/auth/genomics",
+            "https://www.googleapis.com/auth/genomics.readonly"
+          ],
           "parameters": {
             "referenceId": {
               "location": "path",
@@ -718,12 +1171,10 @@
               "type": "string"
             }
           },
-          "scopes": [
-            "https://www.googleapis.com/auth/cloud-platform",
-            "https://www.googleapis.com/auth/genomics",
-            "https://www.googleapis.com/auth/genomics.readonly"
-          ],
-          "flatPath": "v1/references/{referenceId}"
+          "flatPath": "v1/references/{referenceId}",
+          "path": "v1/references/{referenceId}",
+          "id": "genomics.references.get",
+          "description": "Gets a reference.\n\nFor the definitions of references and other genomics resources, see\n[Fundamentals of Google\nGenomics](https://cloud.google.com/genomics/fundamentals-of-google-genomics)\n\nImplements\n[GlobalAllianceApi.getReference](https://github.com/ga4gh/schemas/blob/v0.5.1/src/main/resources/avro/referencemethods.avdl#L158)."
         }
       },
       "resources": {
@@ -738,16 +1189,17 @@
               "response": {
                 "$ref": "ListBasesResponse"
               },
-              "scopes": [
-                "https://www.googleapis.com/auth/cloud-platform",
-                "https://www.googleapis.com/auth/genomics",
-                "https://www.googleapis.com/auth/genomics.readonly"
-              ],
               "parameters": {
+                "end": {
+                  "location": "query",
+                  "description": "The end position (0-based, exclusive) of this query. Defaults to the length\nof this reference.",
+                  "format": "int64",
+                  "type": "string"
+                },
                 "pageToken": {
+                  "location": "query",
                   "description": "The continuation token, which is used to page through large result sets.\nTo get the next page of results, set this parameter to the value of\n`nextPageToken` from the previous response.",
-                  "type": "string",
-                  "location": "query"
+                  "type": "string"
                 },
                 "pageSize": {
                   "location": "query",
@@ -756,24 +1208,23 @@
                   "type": "integer"
                 },
                 "start": {
+                  "location": "query",
                   "description": "The start position (0-based) of this query. Defaults to 0.",
                   "format": "int64",
-                  "type": "string",
-                  "location": "query"
+                  "type": "string"
                 },
                 "referenceId": {
                   "location": "path",
                   "description": "The ID of the reference.",
                   "required": true,
                   "type": "string"
-                },
-                "end": {
-                  "location": "query",
-                  "description": "The end position (0-based, exclusive) of this query. Defaults to the length\nof this reference.",
-                  "format": "int64",
-                  "type": "string"
                 }
               },
+              "scopes": [
+                "https://www.googleapis.com/auth/cloud-platform",
+                "https://www.googleapis.com/auth/genomics",
+                "https://www.googleapis.com/auth/genomics.readonly"
+              ],
               "flatPath": "v1/references/{referenceId}/bases",
               "id": "genomics.references.bases.list",
               "path": "v1/references/{referenceId}/bases"
@@ -785,10 +1236,6 @@
     "datasets": {
       "methods": {
         "getIamPolicy": {
-          "request": {
-            "$ref": "GetIamPolicyRequest"
-          },
-          "description": "Gets the access control policy for the dataset. This is empty if the\npolicy or resource does not exist.\n\nSee \u003ca href=\"/iam/docs/managing-policies#getting_a_policy\"\u003eGetting a\nPolicy\u003c/a\u003e for more information.\n\nFor the definitions of datasets and other genomics resources, see\n[Fundamentals of Google\nGenomics](https://cloud.google.com/genomics/fundamentals-of-google-genomics)",
           "response": {
             "$ref": "Policy"
           },
@@ -798,11 +1245,11 @@
           "httpMethod": "POST",
           "parameters": {
             "resource": {
+              "location": "path",
               "description": "REQUIRED: The resource for which policy is being specified. Format is\n`datasets/\u003cdataset ID\u003e`.",
               "required": true,
               "type": "string",
-              "pattern": "^datasets/[^/]+$",
-              "location": "path"
+              "pattern": "^datasets/[^/]+$"
             }
           },
           "scopes": [
@@ -811,21 +1258,48 @@
           ],
           "flatPath": "v1/datasets/{datasetsId}:getIamPolicy",
           "path": "v1/{+resource}:getIamPolicy",
-          "id": "genomics.datasets.getIamPolicy"
+          "id": "genomics.datasets.getIamPolicy",
+          "request": {
+            "$ref": "GetIamPolicyRequest"
+          },
+          "description": "Gets the access control policy for the dataset. This is empty if the\npolicy or resource does not exist.\n\nSee \u003ca href=\"/iam/docs/managing-policies#getting_a_policy\"\u003eGetting a\nPolicy\u003c/a\u003e for more information.\n\nFor the definitions of datasets and other genomics resources, see\n[Fundamentals of Google\nGenomics](https://cloud.google.com/genomics/fundamentals-of-google-genomics)"
         },
-        "get": {
+        "undelete": {
+          "flatPath": "v1/datasets/{datasetId}:undelete",
+          "path": "v1/datasets/{datasetId}:undelete",
+          "id": "genomics.datasets.undelete",
+          "request": {
+            "$ref": "UndeleteDatasetRequest"
+          },
+          "description": "Undeletes a dataset by restoring a dataset which was deleted via this API.\n\nFor the definitions of datasets and other genomics resources, see\n[Fundamentals of Google\nGenomics](https://cloud.google.com/genomics/fundamentals-of-google-genomics)\n\nThis operation is only possible for a week after the deletion occurred.",
           "response": {
             "$ref": "Dataset"
           },
           "parameterOrder": [
             "datasetId"
           ],
-          "httpMethod": "GET",
+          "httpMethod": "POST",
+          "parameters": {
+            "datasetId": {
+              "description": "The ID of the dataset to be undeleted.",
+              "required": true,
+              "type": "string",
+              "location": "path"
+            }
+          },
           "scopes": [
             "https://www.googleapis.com/auth/cloud-platform",
-            "https://www.googleapis.com/auth/genomics",
-            "https://www.googleapis.com/auth/genomics.readonly"
+            "https://www.googleapis.com/auth/genomics"
+          ]
+        },
+        "get": {
+          "httpMethod": "GET",
+          "parameterOrder": [
+            "datasetId"
           ],
+          "response": {
+            "$ref": "Dataset"
+          },
           "parameters": {
             "datasetId": {
               "location": "path",
@@ -834,87 +1308,35 @@
               "type": "string"
             }
           },
+          "scopes": [
+            "https://www.googleapis.com/auth/cloud-platform",
+            "https://www.googleapis.com/auth/genomics",
+            "https://www.googleapis.com/auth/genomics.readonly"
+          ],
           "flatPath": "v1/datasets/{datasetId}",
-          "path": "v1/datasets/{datasetId}",
           "id": "genomics.datasets.get",
+          "path": "v1/datasets/{datasetId}",
           "description": "Gets a dataset by ID.\n\nFor the definitions of datasets and other genomics resources, see\n[Fundamentals of Google\nGenomics](https://cloud.google.com/genomics/fundamentals-of-google-genomics)"
         },
         "patch": {
-          "id": "genomics.datasets.patch",
-          "path": "v1/datasets/{datasetId}",
-          "request": {
-            "$ref": "Dataset"
-          },
-          "description": "Updates a dataset.\n\nFor the definitions of datasets and other genomics resources, see\n[Fundamentals of Google\nGenomics](https://cloud.google.com/genomics/fundamentals-of-google-genomics)\n\nThis method supports patch semantics.",
-          "httpMethod": "PATCH",
-          "parameterOrder": [
-            "datasetId"
-          ],
           "response": {
             "$ref": "Dataset"
           },
+          "parameterOrder": [
+            "datasetId"
+          ],
+          "httpMethod": "PATCH",
           "parameters": {
-            "datasetId": {
-              "location": "path",
-              "description": "The ID of the dataset to be updated.",
-              "required": true,
-              "type": "string"
-            },
             "updateMask": {
               "location": "query",
               "description": "An optional mask specifying which fields to update. At this time, the only\nmutable field is name. The only\nacceptable value is \"name\". If unspecified, all mutable fields will be\nupdated.",
               "format": "google-fieldmask",
               "type": "string"
-            }
-          },
-          "scopes": [
-            "https://www.googleapis.com/auth/cloud-platform",
-            "https://www.googleapis.com/auth/genomics"
-          ],
-          "flatPath": "v1/datasets/{datasetId}"
-        },
-        "undelete": {
-          "scopes": [
-            "https://www.googleapis.com/auth/cloud-platform",
-            "https://www.googleapis.com/auth/genomics"
-          ],
-          "parameters": {
+            },
             "datasetId": {
-              "location": "path",
-              "description": "The ID of the dataset to be undeleted.",
-              "required": true,
-              "type": "string"
-            }
-          },
-          "flatPath": "v1/datasets/{datasetId}:undelete",
-          "path": "v1/datasets/{datasetId}:undelete",
-          "id": "genomics.datasets.undelete",
-          "description": "Undeletes a dataset by restoring a dataset which was deleted via this API.\n\nFor the definitions of datasets and other genomics resources, see\n[Fundamentals of Google\nGenomics](https://cloud.google.com/genomics/fundamentals-of-google-genomics)\n\nThis operation is only possible for a week after the deletion occurred.",
-          "request": {
-            "$ref": "UndeleteDatasetRequest"
-          },
-          "response": {
-            "$ref": "Dataset"
-          },
-          "parameterOrder": [
-            "datasetId"
-          ],
-          "httpMethod": "POST"
-        },
-        "testIamPermissions": {
-          "httpMethod": "POST",
-          "parameterOrder": [
-            "resource"
-          ],
-          "response": {
-            "$ref": "TestIamPermissionsResponse"
-          },
-          "parameters": {
-            "resource": {
-              "description": "REQUIRED: The resource for which policy is being specified. Format is\n`datasets/\u003cdataset ID\u003e`.",
+              "description": "The ID of the dataset to be updated.",
               "required": true,
               "type": "string",
-              "pattern": "^datasets/[^/]+$",
               "location": "path"
             }
           },
@@ -922,17 +1344,44 @@
             "https://www.googleapis.com/auth/cloud-platform",
             "https://www.googleapis.com/auth/genomics"
           ],
+          "flatPath": "v1/datasets/{datasetId}",
+          "path": "v1/datasets/{datasetId}",
+          "id": "genomics.datasets.patch",
+          "request": {
+            "$ref": "Dataset"
+          },
+          "description": "Updates a dataset.\n\nFor the definitions of datasets and other genomics resources, see\n[Fundamentals of Google\nGenomics](https://cloud.google.com/genomics/fundamentals-of-google-genomics)\n\nThis method supports patch semantics."
+        },
+        "testIamPermissions": {
           "flatPath": "v1/datasets/{datasetsId}:testIamPermissions",
-          "id": "genomics.datasets.testIamPermissions",
           "path": "v1/{+resource}:testIamPermissions",
+          "id": "genomics.datasets.testIamPermissions",
           "request": {
             "$ref": "TestIamPermissionsRequest"
           },
-          "description": "Returns permissions that a caller has on the specified resource.\nSee \u003ca href=\"/iam/docs/managing-policies#testing_permissions\"\u003eTesting\nPermissions\u003c/a\u003e for more information.\n\nFor the definitions of datasets and other genomics resources, see\n[Fundamentals of Google\nGenomics](https://cloud.google.com/genomics/fundamentals-of-google-genomics)"
+          "description": "Returns permissions that a caller has on the specified resource.\nSee \u003ca href=\"/iam/docs/managing-policies#testing_permissions\"\u003eTesting\nPermissions\u003c/a\u003e for more information.\n\nFor the definitions of datasets and other genomics resources, see\n[Fundamentals of Google\nGenomics](https://cloud.google.com/genomics/fundamentals-of-google-genomics)",
+          "response": {
+            "$ref": "TestIamPermissionsResponse"
+          },
+          "parameterOrder": [
+            "resource"
+          ],
+          "httpMethod": "POST",
+          "parameters": {
+            "resource": {
+              "location": "path",
+              "description": "REQUIRED: The resource for which policy is being specified. Format is\n`datasets/\u003cdataset ID\u003e`.",
+              "required": true,
+              "type": "string",
+              "pattern": "^datasets/[^/]+$"
+            }
+          },
+          "scopes": [
+            "https://www.googleapis.com/auth/cloud-platform",
+            "https://www.googleapis.com/auth/genomics"
+          ]
         },
         "delete": {
-          "path": "v1/datasets/{datasetId}",
-          "id": "genomics.datasets.delete",
           "description": "Deletes a dataset and all of its contents (all read group sets,\nreference sets, variant sets, call sets, annotation sets, etc.)\nThis is reversible (up to one week after the deletion) via\nthe\ndatasets.undelete\noperation.\n\nFor the definitions of datasets and other genomics resources, see\n[Fundamentals of Google\nGenomics](https://cloud.google.com/genomics/fundamentals-of-google-genomics)",
           "response": {
             "$ref": "Empty"
@@ -953,36 +1402,38 @@
             "https://www.googleapis.com/auth/cloud-platform",
             "https://www.googleapis.com/auth/genomics"
           ],
-          "flatPath": "v1/datasets/{datasetId}"
+          "flatPath": "v1/datasets/{datasetId}",
+          "path": "v1/datasets/{datasetId}",
+          "id": "genomics.datasets.delete"
         },
         "list": {
           "description": "Lists datasets within a project.\n\nFor the definitions of datasets and other genomics resources, see\n[Fundamentals of Google\nGenomics](https://cloud.google.com/genomics/fundamentals-of-google-genomics)",
           "response": {
             "$ref": "ListDatasetsResponse"
           },
-          "httpMethod": "GET",
           "parameterOrder": [],
+          "httpMethod": "GET",
           "scopes": [
             "https://www.googleapis.com/auth/cloud-platform",
             "https://www.googleapis.com/auth/genomics",
             "https://www.googleapis.com/auth/genomics.readonly"
           ],
           "parameters": {
-            "pageToken": {
-              "location": "query",
-              "description": "The continuation token, which is used to page through large result sets.\nTo get the next page of results, set this parameter to the value of\n`nextPageToken` from the previous response.",
-              "type": "string"
-            },
             "pageSize": {
+              "location": "query",
               "description": "The maximum number of results to return in a single page. If unspecified,\ndefaults to 50. The maximum value is 1024.",
               "format": "int32",
-              "type": "integer",
-              "location": "query"
+              "type": "integer"
             },
             "projectId": {
               "location": "query",
               "description": "Required. The Google Cloud project ID to list datasets for.",
               "type": "string"
+            },
+            "pageToken": {
+              "description": "The continuation token, which is used to page through large result sets.\nTo get the next page of results, set this parameter to the value of\n`nextPageToken` from the previous response.",
+              "type": "string",
+              "location": "query"
             }
           },
           "flatPath": "v1/datasets",
@@ -990,12 +1441,6 @@
           "id": "genomics.datasets.list"
         },
         "create": {
-          "id": "genomics.datasets.create",
-          "path": "v1/datasets",
-          "request": {
-            "$ref": "Dataset"
-          },
-          "description": "Creates a new dataset.\n\nFor the definitions of datasets and other genomics resources, see\n[Fundamentals of Google\nGenomics](https://cloud.google.com/genomics/fundamentals-of-google-genomics)",
           "httpMethod": "POST",
           "parameterOrder": [],
           "response": {
@@ -1006,23 +1451,29 @@
             "https://www.googleapis.com/auth/cloud-platform",
             "https://www.googleapis.com/auth/genomics"
           ],
-          "flatPath": "v1/datasets"
+          "flatPath": "v1/datasets",
+          "id": "genomics.datasets.create",
+          "path": "v1/datasets",
+          "request": {
+            "$ref": "Dataset"
+          },
+          "description": "Creates a new dataset.\n\nFor the definitions of datasets and other genomics resources, see\n[Fundamentals of Google\nGenomics](https://cloud.google.com/genomics/fundamentals-of-google-genomics)"
         },
         "setIamPolicy": {
-          "response": {
-            "$ref": "Policy"
-          },
+          "httpMethod": "POST",
           "parameterOrder": [
             "resource"
           ],
-          "httpMethod": "POST",
+          "response": {
+            "$ref": "Policy"
+          },
           "parameters": {
             "resource": {
+              "location": "path",
               "description": "REQUIRED: The resource for which policy is being specified. Format is\n`datasets/\u003cdataset ID\u003e`.",
               "required": true,
               "type": "string",
-              "pattern": "^datasets/[^/]+$",
-              "location": "path"
+              "pattern": "^datasets/[^/]+$"
             }
           },
           "scopes": [
@@ -1030,497 +1481,31 @@
             "https://www.googleapis.com/auth/genomics"
           ],
           "flatPath": "v1/datasets/{datasetsId}:setIamPolicy",
-          "path": "v1/{+resource}:setIamPolicy",
           "id": "genomics.datasets.setIamPolicy",
+          "path": "v1/{+resource}:setIamPolicy",
           "request": {
             "$ref": "SetIamPolicyRequest"
           },
           "description": "Sets the access control policy on the specified dataset. Replaces any\nexisting policy.\n\nFor the definitions of datasets and other genomics resources, see\n[Fundamentals of Google\nGenomics](https://cloud.google.com/genomics/fundamentals-of-google-genomics)\n\nSee \u003ca href=\"/iam/docs/managing-policies#setting_a_policy\"\u003eSetting a\nPolicy\u003c/a\u003e for more information."
         }
       }
-    },
-    "annotations": {
-      "methods": {
-        "delete": {
-          "parameterOrder": [
-            "annotationId"
-          ],
-          "response": {
-            "$ref": "Empty"
-          },
-          "httpMethod": "DELETE",
-          "parameters": {
-            "annotationId": {
-              "location": "path",
-              "description": "The ID of the annotation to be deleted.",
-              "required": true,
-              "type": "string"
-            }
-          },
-          "scopes": [
-            "https://www.googleapis.com/auth/cloud-platform",
-            "https://www.googleapis.com/auth/genomics"
-          ],
-          "flatPath": "v1/annotations/{annotationId}",
-          "path": "v1/annotations/{annotationId}",
-          "id": "genomics.annotations.delete",
-          "description": "Deletes an annotation. Caller must have WRITE permission for\nthe associated annotation set."
-        },
-        "create": {
-          "parameters": {},
-          "scopes": [
-            "https://www.googleapis.com/auth/cloud-platform",
-            "https://www.googleapis.com/auth/genomics"
-          ],
-          "flatPath": "v1/annotations",
-          "path": "v1/annotations",
-          "id": "genomics.annotations.create",
-          "request": {
-            "$ref": "Annotation"
-          },
-          "description": "Creates a new annotation. Caller must have WRITE permission\nfor the associated annotation set.\n\nThe following fields are required:\n\n* annotationSetId\n* referenceName or\n  referenceId\n\n### Transcripts\n\nFor annotations of type TRANSCRIPT, the following fields of\ntranscript must be provided:\n\n* exons.start\n* exons.end\n\nAll other fields may be optionally specified, unless documented as being\nserver-generated (for example, the `id` field). The annotated\nrange must be no longer than 100Mbp (mega base pairs). See the\nAnnotation resource\nfor additional restrictions on each field.",
-          "response": {
-            "$ref": "Annotation"
-          },
-          "parameterOrder": [],
-          "httpMethod": "POST"
-        },
-        "batchCreate": {
-          "description": "Creates one or more new annotations atomically. All annotations must\nbelong to the same annotation set. Caller must have WRITE\npermission for this annotation set. For optimal performance, batch\npositionally adjacent annotations together.\n\nIf the request has a systemic issue, such as an attempt to write to\nan inaccessible annotation set, the entire RPC will fail accordingly. For\nlesser data issues, when possible an error will be isolated to the\ncorresponding batch entry in the response; the remaining well formed\nannotations will be created normally.\n\nFor details on the requirements for each individual annotation resource,\nsee\nCreateAnnotation.",
-          "request": {
-            "$ref": "BatchCreateAnnotationsRequest"
-          },
-          "response": {
-            "$ref": "BatchCreateAnnotationsResponse"
-          },
-          "parameterOrder": [],
-          "httpMethod": "POST",
-          "scopes": [
-            "https://www.googleapis.com/auth/cloud-platform",
-            "https://www.googleapis.com/auth/genomics"
-          ],
-          "parameters": {},
-          "flatPath": "v1/annotations:batchCreate",
-          "path": "v1/annotations:batchCreate",
-          "id": "genomics.annotations.batchCreate"
-        },
-        "search": {
-          "id": "genomics.annotations.search",
-          "path": "v1/annotations/search",
-          "request": {
-            "$ref": "SearchAnnotationsRequest"
-          },
-          "description": "Searches for annotations that match the given criteria. Results are\nordered by genomic coordinate (by reference sequence, then position).\nAnnotations with equivalent genomic coordinates are returned in an\nunspecified order. This order is consistent, such that two queries for the\nsame content (regardless of page size) yield annotations in the same order\nacross their respective streams of paginated responses. Caller must have\nREAD permission for the queried annotation sets.",
-          "httpMethod": "POST",
-          "parameterOrder": [],
-          "response": {
-            "$ref": "SearchAnnotationsResponse"
-          },
-          "parameters": {},
-          "scopes": [
-            "https://www.googleapis.com/auth/cloud-platform",
-            "https://www.googleapis.com/auth/genomics",
-            "https://www.googleapis.com/auth/genomics.readonly"
-          ],
-          "flatPath": "v1/annotations/search"
-        },
-        "get": {
-          "id": "genomics.annotations.get",
-          "path": "v1/annotations/{annotationId}",
-          "description": "Gets an annotation. Caller must have READ permission\nfor the associated annotation set.",
-          "httpMethod": "GET",
-          "parameterOrder": [
-            "annotationId"
-          ],
-          "response": {
-            "$ref": "Annotation"
-          },
-          "parameters": {
-            "annotationId": {
-              "location": "path",
-              "description": "The ID of the annotation to be retrieved.",
-              "required": true,
-              "type": "string"
-            }
-          },
-          "scopes": [
-            "https://www.googleapis.com/auth/cloud-platform",
-            "https://www.googleapis.com/auth/genomics",
-            "https://www.googleapis.com/auth/genomics.readonly"
-          ],
-          "flatPath": "v1/annotations/{annotationId}"
-        },
-        "update": {
-          "path": "v1/annotations/{annotationId}",
-          "id": "genomics.annotations.update",
-          "description": "Updates an annotation. Caller must have\nWRITE permission for the associated dataset.",
-          "request": {
-            "$ref": "Annotation"
-          },
-          "response": {
-            "$ref": "Annotation"
-          },
-          "parameterOrder": [
-            "annotationId"
-          ],
-          "httpMethod": "PUT",
-          "scopes": [
-            "https://www.googleapis.com/auth/cloud-platform",
-            "https://www.googleapis.com/auth/genomics"
-          ],
-          "parameters": {
-            "updateMask": {
-              "description": "An optional mask specifying which fields to update. Mutable fields are\nname,\nvariant,\ntranscript, and\ninfo. If unspecified, all mutable\nfields will be updated.",
-              "format": "google-fieldmask",
-              "type": "string",
-              "location": "query"
-            },
-            "annotationId": {
-              "description": "The ID of the annotation to be updated.",
-              "required": true,
-              "type": "string",
-              "location": "path"
-            }
-          },
-          "flatPath": "v1/annotations/{annotationId}"
-        }
-      }
-    },
-    "variantsets": {
-      "methods": {
-        "delete": {
-          "path": "v1/variantsets/{variantSetId}",
-          "id": "genomics.variantsets.delete",
-          "description": "Deletes a variant set including all variants, call sets, and calls within.\nThis is not reversible.\n\nFor the definitions of variant sets and other genomics resources, see\n[Fundamentals of Google\nGenomics](https://cloud.google.com/genomics/fundamentals-of-google-genomics)",
-          "response": {
-            "$ref": "Empty"
-          },
-          "parameterOrder": [
-            "variantSetId"
-          ],
-          "httpMethod": "DELETE",
-          "parameters": {
-            "variantSetId": {
-              "location": "path",
-              "description": "The ID of the variant set to be deleted.",
-              "required": true,
-              "type": "string"
-            }
-          },
-          "scopes": [
-            "https://www.googleapis.com/auth/cloud-platform",
-            "https://www.googleapis.com/auth/genomics"
-          ],
-          "flatPath": "v1/variantsets/{variantSetId}"
-        },
-        "create": {
-          "description": "Creates a new variant set.\n\nFor the definitions of variant sets and other genomics resources, see\n[Fundamentals of Google\nGenomics](https://cloud.google.com/genomics/fundamentals-of-google-genomics)\n\nThe provided variant set must have a valid `datasetId` set - all other\nfields are optional. Note that the `id` field will be ignored, as this is\nassigned by the server.",
-          "request": {
-            "$ref": "VariantSet"
-          },
-          "response": {
-            "$ref": "VariantSet"
-          },
-          "parameterOrder": [],
-          "httpMethod": "POST",
-          "scopes": [
-            "https://www.googleapis.com/auth/cloud-platform",
-            "https://www.googleapis.com/auth/genomics"
-          ],
-          "parameters": {},
-          "flatPath": "v1/variantsets",
-          "path": "v1/variantsets",
-          "id": "genomics.variantsets.create"
-        },
-        "export": {
-          "parameters": {
-            "variantSetId": {
-              "location": "path",
-              "description": "Required. The ID of the variant set that contains variant data which\nshould be exported. The caller must have READ access to this variant set.",
-              "required": true,
-              "type": "string"
-            }
-          },
-          "scopes": [
-            "https://www.googleapis.com/auth/bigquery",
-            "https://www.googleapis.com/auth/cloud-platform",
-            "https://www.googleapis.com/auth/genomics"
-          ],
-          "flatPath": "v1/variantsets/{variantSetId}:export",
-          "id": "genomics.variantsets.export",
-          "path": "v1/variantsets/{variantSetId}:export",
-          "request": {
-            "$ref": "ExportVariantSetRequest"
-          },
-          "description": "Exports variant set data to an external destination.\n\nFor the definitions of variant sets and other genomics resources, see\n[Fundamentals of Google\nGenomics](https://cloud.google.com/genomics/fundamentals-of-google-genomics)",
-          "httpMethod": "POST",
-          "parameterOrder": [
-            "variantSetId"
-          ],
-          "response": {
-            "$ref": "Operation"
-          }
-        },
-        "search": {
-          "path": "v1/variantsets/search",
-          "id": "genomics.variantsets.search",
-          "request": {
-            "$ref": "SearchVariantSetsRequest"
-          },
-          "description": "Returns a list of all variant sets matching search criteria.\n\nFor the definitions of variant sets and other genomics resources, see\n[Fundamentals of Google\nGenomics](https://cloud.google.com/genomics/fundamentals-of-google-genomics)\n\nImplements\n[GlobalAllianceApi.searchVariantSets](https://github.com/ga4gh/schemas/blob/v0.5.1/src/main/resources/avro/variantmethods.avdl#L49).",
-          "response": {
-            "$ref": "SearchVariantSetsResponse"
-          },
-          "parameterOrder": [],
-          "httpMethod": "POST",
-          "parameters": {},
-          "scopes": [
-            "https://www.googleapis.com/auth/cloud-platform",
-            "https://www.googleapis.com/auth/genomics",
-            "https://www.googleapis.com/auth/genomics.readonly"
-          ],
-          "flatPath": "v1/variantsets/search"
-        },
-        "get": {
-          "parameters": {
-            "variantSetId": {
-              "description": "Required. The ID of the variant set.",
-              "required": true,
-              "type": "string",
-              "location": "path"
-            }
-          },
-          "scopes": [
-            "https://www.googleapis.com/auth/cloud-platform",
-            "https://www.googleapis.com/auth/genomics",
-            "https://www.googleapis.com/auth/genomics.readonly"
-          ],
-          "flatPath": "v1/variantsets/{variantSetId}",
-          "path": "v1/variantsets/{variantSetId}",
-          "id": "genomics.variantsets.get",
-          "description": "Gets a variant set by ID.\n\nFor the definitions of variant sets and other genomics resources, see\n[Fundamentals of Google\nGenomics](https://cloud.google.com/genomics/fundamentals-of-google-genomics)",
-          "parameterOrder": [
-            "variantSetId"
-          ],
-          "httpMethod": "GET",
-          "response": {
-            "$ref": "VariantSet"
-          }
-        },
-        "patch": {
-          "description": "Updates a variant set using patch semantics.\n\nFor the definitions of variant sets and other genomics resources, see\n[Fundamentals of Google\nGenomics](https://cloud.google.com/genomics/fundamentals-of-google-genomics)",
-          "request": {
-            "$ref": "VariantSet"
-          },
-          "response": {
-            "$ref": "VariantSet"
-          },
-          "parameterOrder": [
-            "variantSetId"
-          ],
-          "httpMethod": "PATCH",
-          "scopes": [
-            "https://www.googleapis.com/auth/cloud-platform",
-            "https://www.googleapis.com/auth/genomics"
-          ],
-          "parameters": {
-            "updateMask": {
-              "location": "query",
-              "description": "An optional mask specifying which fields to update. Supported fields:\n\n* metadata.\n* name.\n* description.\n\nLeaving `updateMask` unset is equivalent to specifying all mutable\nfields.",
-              "format": "google-fieldmask",
-              "type": "string"
-            },
-            "variantSetId": {
-              "location": "path",
-              "description": "The ID of the variant to be updated (must already exist).",
-              "required": true,
-              "type": "string"
-            }
-          },
-          "flatPath": "v1/variantsets/{variantSetId}",
-          "path": "v1/variantsets/{variantSetId}",
-          "id": "genomics.variantsets.patch"
-        }
-      }
-    },
-    "operations": {
-      "methods": {
-        "cancel": {
-          "id": "genomics.operations.cancel",
-          "path": "v1/{+name}: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. Clients may use Operations.GetOperation or Operations.ListOperations to check whether the cancellation succeeded or the operation completed despite cancellation.",
-          "request": {
-            "$ref": "CancelOperationRequest"
-          },
-          "httpMethod": "POST",
-          "parameterOrder": [
-            "name"
-          ],
-          "response": {
-            "$ref": "Empty"
-          },
-          "scopes": [
-            "https://www.googleapis.com/auth/cloud-platform",
-            "https://www.googleapis.com/auth/genomics"
-          ],
-          "parameters": {
-            "name": {
-              "pattern": "^operations/.+$",
-              "location": "path",
-              "description": "The name of the operation resource to be cancelled.",
-              "required": true,
-              "type": "string"
-            }
-          },
-          "flatPath": "v1/operations/{operationsId}:cancel"
-        },
-        "list": {
-          "httpMethod": "GET",
-          "response": {
-            "$ref": "ListOperationsResponse"
-          },
-          "parameterOrder": [
-            "name"
-          ],
-          "scopes": [
-            "https://www.googleapis.com/auth/cloud-platform",
-            "https://www.googleapis.com/auth/genomics"
-          ],
-          "parameters": {
-            "filter": {
-              "location": "query",
-              "description": "A string for filtering Operations.\nThe following filter fields are supported&#58;\n\n* projectId&#58; Required. Corresponds to\n  OperationMetadata.projectId.\n* createTime&#58; The time this job was created, in seconds from the\n  [epoch](http://en.wikipedia.org/wiki/Unix_time). Can use `\u003e=` and/or `\u003c=`\n  operators.\n* status&#58; Can be `RUNNING`, `SUCCESS`, `FAILURE`, or `CANCELED`. Only\n  one status may be specified.\n* labels.key where key is a label key.\n\nExamples&#58;\n\n* `projectId = my-project AND createTime \u003e= 1432140000`\n* `projectId = my-project AND createTime \u003e= 1432140000 AND createTime \u003c= 1432150000 AND status = RUNNING`\n* `projectId = my-project AND labels.color = *`\n* `projectId = my-project AND labels.color = red`",
-              "type": "string"
-            },
-            "name": {
-              "pattern": "^operations$",
-              "location": "path",
-              "description": "The name of the operation collection.",
-              "required": true,
-              "type": "string"
-            },
-            "pageToken": {
-              "description": "The standard list page token.",
-              "type": "string",
-              "location": "query"
-            },
-            "pageSize": {
-              "description": "The maximum number of results to return. If unspecified, defaults to\n256. The maximum value is 2048.",
-              "format": "int32",
-              "type": "integer",
-              "location": "query"
-            }
-          },
-          "flatPath": "v1/operations",
-          "id": "genomics.operations.list",
-          "path": "v1/{+name}",
-          "description": "Lists operations that match the specified filter in the request."
-        },
-        "get": {
-          "description": "Gets the latest state of a long-running operation.  Clients can use this\nmethod to poll the operation result at intervals as recommended by the API\nservice.",
-          "httpMethod": "GET",
-          "parameterOrder": [
-            "name"
-          ],
-          "response": {
-            "$ref": "Operation"
-          },
-          "parameters": {
-            "name": {
-              "pattern": "^operations/.+$",
-              "location": "path",
-              "description": "The name of the operation resource.",
-              "required": true,
-              "type": "string"
-            }
-          },
-          "scopes": [
-            "https://www.googleapis.com/auth/cloud-platform",
-            "https://www.googleapis.com/auth/genomics"
-          ],
-          "flatPath": "v1/operations/{operationsId}",
-          "id": "genomics.operations.get",
-          "path": "v1/{+name}"
-        }
-      }
-    },
-    "referencesets": {
-      "methods": {
-        "search": {
-          "description": "Searches for reference sets which match the given criteria.\n\nFor the definitions of references and other genomics resources, see\n[Fundamentals of Google\nGenomics](https://cloud.google.com/genomics/fundamentals-of-google-genomics)\n\nImplements\n[GlobalAllianceApi.searchReferenceSets](https://github.com/ga4gh/schemas/blob/v0.5.1/src/main/resources/avro/referencemethods.avdl#L71)",
-          "request": {
-            "$ref": "SearchReferenceSetsRequest"
-          },
-          "response": {
-            "$ref": "SearchReferenceSetsResponse"
-          },
-          "parameterOrder": [],
-          "httpMethod": "POST",
-          "scopes": [
-            "https://www.googleapis.com/auth/cloud-platform",
-            "https://www.googleapis.com/auth/genomics",
-            "https://www.googleapis.com/auth/genomics.readonly"
-          ],
-          "parameters": {},
-          "flatPath": "v1/referencesets/search",
-          "path": "v1/referencesets/search",
-          "id": "genomics.referencesets.search"
-        },
-        "get": {
-          "path": "v1/referencesets/{referenceSetId}",
-          "id": "genomics.referencesets.get",
-          "description": "Gets a reference set.\n\nFor the definitions of references and other genomics resources, see\n[Fundamentals of Google\nGenomics](https://cloud.google.com/genomics/fundamentals-of-google-genomics)\n\nImplements\n[GlobalAllianceApi.getReferenceSet](https://github.com/ga4gh/schemas/blob/v0.5.1/src/main/resources/avro/referencemethods.avdl#L83).",
-          "parameterOrder": [
-            "referenceSetId"
-          ],
-          "httpMethod": "GET",
-          "response": {
-            "$ref": "ReferenceSet"
-          },
-          "scopes": [
-            "https://www.googleapis.com/auth/cloud-platform",
-            "https://www.googleapis.com/auth/genomics",
-            "https://www.googleapis.com/auth/genomics.readonly"
-          ],
-          "parameters": {
-            "referenceSetId": {
-              "location": "path",
-              "description": "The ID of the reference set.",
-              "required": true,
-              "type": "string"
-            }
-          },
-          "flatPath": "v1/referencesets/{referenceSetId}"
-        }
-      }
     }
   },
   "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.",
-      "type": "string",
-      "location": "query"
-    },
-    "pp": {
-      "description": "Pretty-print response.",
-      "type": "boolean",
-      "default": "true",
-      "location": "query"
-    },
     "oauth_token": {
       "description": "OAuth 2.0 token for the current user.",
       "type": "string",
       "location": "query"
     },
     "bearer_token": {
+      "location": "query",
       "description": "OAuth bearer token.",
-      "type": "string",
-      "location": "query"
+      "type": "string"
     },
     "upload_protocol": {
+      "location": "query",
       "description": "Upload protocol for media (e.g. \"raw\", \"multipart\").",
-      "type": "string",
-      "location": "query"
+      "type": "string"
     },
     "prettyPrint": {
       "description": "Returns response with indentations and line breaks.",
@@ -1538,14 +1523,7 @@
       "description": "Legacy upload protocol for media (e.g. \"media\", \"multipart\").",
       "type": "string"
     },
-    "callback": {
-      "location": "query",
-      "description": "JSONP",
-      "type": "string"
-    },
     "$.xgafv": {
-      "description": "V1 error format.",
-      "type": "string",
       "enumDescriptions": [
         "v1 error format",
         "v2 error format"
@@ -1554,45 +1532,295 @@
       "enum": [
         "1",
         "2"
-      ]
+      ],
+      "description": "V1 error format.",
+      "type": "string"
+    },
+    "callback": {
+      "description": "JSONP",
+      "type": "string",
+      "location": "query"
     },
     "alt": {
-      "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",
       "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"
     },
     "access_token": {
-      "location": "query",
       "description": "OAuth access token.",
-      "type": "string"
+      "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"
+    },
+    "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"
+    },
+    "pp": {
+      "location": "query",
+      "description": "Pretty-print response.",
+      "type": "boolean",
+      "default": "true"
     }
   },
   "schemas": {
+    "OperationEvent": {
+      "description": "An event that occurred during an Operation.",
+      "type": "object",
+      "properties": {
+        "description": {
+          "description": "Required description of event.",
+          "type": "string"
+        },
+        "endTime": {
+          "description": "Optional time of when event finished. An event can have a start time and no\nfinish time. If an event has a finish time, there must be a start time.",
+          "format": "google-datetime",
+          "type": "string"
+        },
+        "startTime": {
+          "description": "Optional time of when event started.",
+          "format": "google-datetime",
+          "type": "string"
+        }
+      },
+      "id": "OperationEvent"
+    },
+    "CodingSequence": {
+      "type": "object",
+      "properties": {
+        "start": {
+          "description": "The start of the coding sequence on this annotation's reference sequence,\n0-based inclusive. Note that this position is relative to the reference\nstart, and *not* the containing annotation start.",
+          "format": "int64",
+          "type": "string"
+        },
+        "end": {
+          "description": "The end of the coding sequence on this annotation's reference sequence,\n0-based exclusive. Note that this position is relative to the reference\nstart, and *not* the containing annotation start.",
+          "format": "int64",
+          "type": "string"
+        }
+      },
+      "id": "CodingSequence"
+    },
+    "TestIamPermissionsResponse": {
+      "description": "Response message for `TestIamPermissions` method.",
+      "type": "object",
+      "properties": {
+        "permissions": {
+          "description": "A subset of `TestPermissionsRequest.permissions` that the caller is\nallowed.",
+          "type": "array",
+          "items": {
+            "type": "string"
+          }
+        }
+      },
+      "id": "TestIamPermissionsResponse"
+    },
+    "GetIamPolicyRequest": {
+      "description": "Request message for `GetIamPolicy` method.",
+      "type": "object",
+      "properties": {},
+      "id": "GetIamPolicyRequest"
+    },
+    "SearchReferencesResponse": {
+      "type": "object",
+      "properties": {
+        "references": {
+          "description": "The matching references.",
+          "type": "array",
+          "items": {
+            "$ref": "Reference"
+          }
+        },
+        "nextPageToken": {
+          "description": "The continuation token, which is used to page through large result sets.\nProvide this value in a subsequent request to return the next page of\nresults. This field will be empty if there aren't any additional results.",
+          "type": "string"
+        }
+      },
+      "id": "SearchReferencesResponse"
+    },
+    "SearchAnnotationSetsRequest": {
+      "type": "object",
+      "properties": {
+        "pageToken": {
+          "description": "The continuation token, which is used to page through large result sets.\nTo get the next page of results, set this parameter to the value of\n`nextPageToken` from the previous response.",
+          "type": "string"
+        },
+        "pageSize": {
+          "description": "The maximum number of results to return in a single page. If unspecified,\ndefaults to 128. The maximum value is 1024.",
+          "format": "int32",
+          "type": "integer"
+        },
+        "datasetIds": {
+          "description": "Required. The dataset IDs to search within. Caller must have `READ` access\nto these datasets.",
+          "type": "array",
+          "items": {
+            "type": "string"
+          }
+        },
+        "types": {
+          "description": "If specified, only annotation sets that have any of these types are\nreturned.",
+          "type": "array",
+          "items": {
+            "enum": [
+              "ANNOTATION_TYPE_UNSPECIFIED",
+              "GENERIC",
+              "VARIANT",
+              "GENE",
+              "TRANSCRIPT"
+            ],
+            "type": "string"
+          },
+          "enumDescriptions": [
+            "",
+            "A `GENERIC` annotation type should be used when no other annotation\ntype will suffice. This represents an untyped annotation of the reference\ngenome.",
+            "A `VARIANT` annotation type.",
+            "A `GENE` annotation type represents the existence of a gene at the\nassociated reference coordinates. The start coordinate is typically the\ngene's transcription start site and the end is typically the end of the\ngene's last exon.",
+            "A `TRANSCRIPT` annotation type represents the assertion that a\nparticular region of the reference genome may be transcribed as RNA."
+          ]
+        },
+        "name": {
+          "description": "Only return annotations sets for which a substring of the name matches this\nstring (case insensitive).",
+          "type": "string"
+        },
+        "referenceSetId": {
+          "description": "If specified, only annotation sets associated with the given reference set\nare returned.",
+          "type": "string"
+        }
+      },
+      "id": "SearchAnnotationSetsRequest"
+    },
+    "SearchReadGroupSetsResponse": {
+      "description": "The read group set search response.",
+      "type": "object",
+      "properties": {
+        "readGroupSets": {
+          "description": "The list of matching read group sets.",
+          "type": "array",
+          "items": {
+            "$ref": "ReadGroupSet"
+          }
+        },
+        "nextPageToken": {
+          "description": "The continuation token, which is used to page through large result sets.\nProvide this value in a subsequent request to return the next page of\nresults. This field will be empty if there aren't any additional results.",
+          "type": "string"
+        }
+      },
+      "id": "SearchReadGroupSetsResponse"
+    },
+    "SearchReferencesRequest": {
+      "type": "object",
+      "properties": {
+        "md5checksums": {
+          "description": "If present, return references for which the\nmd5checksum matches exactly.",
+          "type": "array",
+          "items": {
+            "type": "string"
+          }
+        },
+        "accessions": {
+          "description": "If present, return references for which a prefix of any of\nsourceAccessions match\nany of these strings. Accession numbers typically have a main number and a\nversion, for example `GCF_000001405.26`.",
+          "type": "array",
+          "items": {
+            "type": "string"
+          }
+        },
+        "pageToken": {
+          "description": "The continuation token, which is used to page through large result sets.\nTo get the next page of results, set this parameter to the value of\n`nextPageToken` from the previous response.",
+          "type": "string"
+        },
+        "referenceSetId": {
+          "description": "If present, return only references which belong to this reference set.",
+          "type": "string"
+        },
+        "pageSize": {
+          "description": "The maximum number of results to return in a single page. If unspecified,\ndefaults to 1024. The maximum value is 4096.",
+          "format": "int32",
+          "type": "integer"
+        }
+      },
+      "id": "SearchReferencesRequest"
+    },
+    "LinearAlignment": {
+      "description": "A linear alignment can be represented by one CIGAR string. Describes the\nmapped position and local alignment of the read to the reference.",
+      "type": "object",
+      "properties": {
+        "position": {
+          "$ref": "Position",
+          "description": "The position of this alignment."
+        },
+        "cigar": {
+          "description": "Represents the local alignment of this sequence (alignment matches, indels,\netc) against the reference.",
+          "type": "array",
+          "items": {
+            "$ref": "CigarUnit"
+          }
+        },
+        "mappingQuality": {
+          "description": "The mapping quality of this alignment. Represents how likely\nthe read maps to this position as opposed to other locations.\n\nSpecifically, this is -10 log10 Pr(mapping position is wrong), rounded to\nthe nearest integer.",
+          "format": "int32",
+          "type": "integer"
+        }
+      },
+      "id": "LinearAlignment"
+    },
+    "Dataset": {
+      "description": "A Dataset is a collection of genomic data.\n\nFor more genomics resource definitions, see [Fundamentals of Google\nGenomics](https://cloud.google.com/genomics/fundamentals-of-google-genomics)",
+      "type": "object",
+      "properties": {
+        "createTime": {
+          "description": "The time this dataset was created, in seconds from the epoch.",
+          "format": "google-datetime",
+          "type": "string"
+        },
+        "name": {
+          "description": "The dataset name.",
+          "type": "string"
+        },
+        "projectId": {
+          "description": "The Google Cloud project ID that this dataset belongs to.",
+          "type": "string"
+        },
+        "id": {
+          "description": "The server-generated dataset ID, unique across all datasets.",
+          "type": "string"
+        }
+      },
+      "id": "Dataset"
+    },
+    "ImportVariantsResponse": {
+      "description": "The variant data import response.",
+      "type": "object",
+      "properties": {
+        "callSetIds": {
+          "description": "IDs of the call sets created during the import.",
+          "type": "array",
+          "items": {
+            "type": "string"
+          }
+        }
+      },
+      "id": "ImportVariantsResponse"
+    },
     "ReadGroup": {
-      "id": "ReadGroup",
       "description": "A read group is all the data that's processed the same way by the sequencer.",
       "type": "object",
       "properties": {
-        "datasetId": {
-          "description": "The dataset to which this read group belongs.",
-          "type": "string"
-        },
         "experiment": {
           "description": "The experiment used to generate this read group.",
           "$ref": "Experiment"
@@ -1638,8 +1866,13 @@
         "sampleId": {
           "description": "A client-supplied sample identifier for the reads in this read group.",
           "type": "string"
+        },
+        "datasetId": {
+          "description": "The dataset to which this read group belongs.",
+          "type": "string"
         }
-      }
+      },
+      "id": "ReadGroup"
     },
     "ReadGroupSet": {
       "description": "A read group set is a logical collection of read groups, which are\ncollections of reads produced by a sequencer. A read group set typically\nmodels reads corresponding to one sample, sequenced one way, and aligned one\nway.\n\n* A read group set belongs to one dataset.\n* A read group belongs to one read group set.\n* A read belongs to one read group.\n\nFor more genomics resource definitions, see [Fundamentals of Google\nGenomics](https://cloud.google.com/genomics/fundamentals-of-google-genomics)",
@@ -1649,6 +1882,10 @@
           "description": "The dataset to which this read group set belongs.",
           "type": "string"
         },
+        "filename": {
+          "description": "The filename of the original source file for this read group set, if any.",
+          "type": "string"
+        },
         "readGroups": {
           "description": "The read groups in this set. There are typically 1-10 read groups in a read\ngroup set.",
           "type": "array",
@@ -1656,10 +1893,6 @@
             "$ref": "ReadGroup"
           }
         },
-        "filename": {
-          "description": "The filename of the original source file for this read group set, if any.",
-          "type": "string"
-        },
         "name": {
           "description": "The read group set name. By default this will be initialized to the sample\nname of the sequenced data contained in this set.",
           "type": "string"
@@ -1669,14 +1902,14 @@
           "type": "string"
         },
         "info": {
+          "description": "A map of additional read group set information.",
+          "type": "object",
           "additionalProperties": {
             "type": "array",
             "items": {
               "type": "any"
             }
-          },
-          "description": "A map of additional read group set information.",
-          "type": "object"
+          }
         },
         "id": {
           "description": "The server-generated read group set ID, unique for all read group sets.",
@@ -1713,12 +1946,12 @@
       "type": "object",
       "properties": {
         "status": {
-          "description": "The creation status.",
-          "$ref": "Status"
+          "$ref": "Status",
+          "description": "The creation status."
         },
         "annotation": {
-          "$ref": "Annotation",
-          "description": "The created annotation, if creation was successful."
+          "description": "The created annotation, if creation was successful.",
+          "$ref": "Annotation"
         }
       },
       "id": "Entry"
@@ -1727,10 +1960,6 @@
       "description": "An abstraction for referring to a genomic position, in relation to some\nalready known reference. For now, represents a genomic position as a\nreference name, a base number on that reference (0-based), and a\ndetermination of forward or reverse strand.",
       "type": "object",
       "properties": {
-        "reverseStrand": {
-          "description": "Whether this position is on the reverse strand, as opposed to the forward\nstrand.",
-          "type": "boolean"
-        },
         "position": {
           "description": "The 0-based offset from the start of the forward strand for that reference.",
           "format": "int64",
@@ -1739,12 +1968,15 @@
         "referenceName": {
           "description": "The name of the reference in whatever reference set is being used.",
           "type": "string"
+        },
+        "reverseStrand": {
+          "description": "Whether this position is on the reverse strand, as opposed to the forward\nstrand.",
+          "type": "boolean"
         }
       },
       "id": "Position"
     },
     "SearchReferenceSetsResponse": {
-      "id": "SearchReferenceSetsResponse",
       "type": "object",
       "properties": {
         "referenceSets": {
@@ -1758,10 +1990,10 @@
           "description": "The continuation token, which is used to page through large result sets.\nProvide this value in a subsequent request to return the next page of\nresults. This field will be empty if there aren't any additional results.",
           "type": "string"
         }
-      }
+      },
+      "id": "SearchReferenceSetsResponse"
     },
     "SearchCallSetsRequest": {
-      "id": "SearchCallSetsRequest",
       "description": "The call set search request.",
       "type": "object",
       "properties": {
@@ -1785,24 +2017,13 @@
             "type": "string"
           }
         }
-      }
+      },
+      "id": "SearchCallSetsRequest"
     },
     "ImportReadGroupSetsRequest": {
-      "id": "ImportReadGroupSetsRequest",
       "description": "The read group set import request.",
       "type": "object",
       "properties": {
-        "datasetId": {
-          "description": "Required. The ID of the dataset these read group sets will belong to. The\ncaller must have WRITE permissions to this dataset.",
-          "type": "string"
-        },
-        "sourceUris": {
-          "description": "A list of URIs pointing at [BAM\nfiles](https://samtools.github.io/hts-specs/SAMv1.pdf)\nin Google Cloud Storage.\nThose URIs can include wildcards (*), but do not add or remove\nmatching files before import has completed.\n\nNote that Google Cloud Storage object listing is only eventually\nconsistent: files added may be not be immediately visible to\neveryone. Thus, if using a wildcard it is preferable not to start\nthe import immediately after the files are created.",
-          "type": "array",
-          "items": {
-            "type": "string"
-          }
-        },
         "referenceSetId": {
           "description": "The reference set to which the imported read group sets are aligned to, if\nany. The reference names of this reference set must be a superset of those\nfound in the imported file headers. If no reference set id is provided, a\nbest effort is made to associate with a matching reference set.",
           "type": "string"
@@ -1820,8 +2041,20 @@
             "PER_FILE_PER_SAMPLE",
             "MERGE_ALL"
           ]
+        },
+        "datasetId": {
+          "description": "Required. The ID of the dataset these read group sets will belong to. The\ncaller must have WRITE permissions to this dataset.",
+          "type": "string"
+        },
+        "sourceUris": {
+          "description": "A list of URIs pointing at [BAM\nfiles](https://samtools.github.io/hts-specs/SAMv1.pdf)\nin Google Cloud Storage.\nThose URIs can include wildcards (*), but do not add or remove\nmatching files before import has completed.\n\nNote that Google Cloud Storage object listing is only eventually\nconsistent: files added may be not be immediately visible to\neveryone. Thus, if using a wildcard it is preferable not to start\nthe import immediately after the files are created.",
+          "type": "array",
+          "items": {
+            "type": "string"
+          }
         }
-      }
+      },
+      "id": "ImportReadGroupSetsRequest"
     },
     "Policy": {
       "description": "Defines an Identity and Access Management (IAM) policy. It is used to\nspecify access control policies for Cloud Platform resources.\n\n\nA `Policy` consists of a list of `bindings`. A `Binding` binds a list of\n`members` to a `role`, where the members can be user accounts, Google groups,\nGoogle domains, and service accounts. A `role` is a named list of permissions\ndefined by IAM.\n\n**Example**\n\n    {\n      \"bindings\": [\n        {\n          \"role\": \"roles/owner\",\n          \"members\": [\n            \"user:mike@example.com\",\n            \"group:admins@example.com\",\n            \"domain:google.com\",\n            \"serviceAccount:my-other-app@appspot.gserviceaccount.com\",\n          ]\n        },\n        {\n          \"role\": \"roles/viewer\",\n          \"members\": [\"user:sean@example.com\"]\n        }\n      ]\n    }\n\nFor a description of IAM and its features, see the\n[IAM developer's guide](https://cloud.google.com/iam).",
@@ -1847,11 +2080,106 @@
       },
       "id": "Policy"
     },
+    "SearchReadsRequest": {
+      "description": "The read search request.",
+      "type": "object",
+      "properties": {
+        "referenceName": {
+          "description": "The reference sequence name, for example `chr1`, `1`, or `chrX`. If set to\n`*`, only unmapped reads are returned. If unspecified, all reads (mapped\nand unmapped) are returned.",
+          "type": "string"
+        },
+        "readGroupSetIds": {
+          "description": "The IDs of the read groups sets within which to search for reads. All\nspecified read group sets must be aligned against a common set of reference\nsequences; this defines the genomic coordinates for the query. Must specify\none of `readGroupSetIds` or `readGroupIds`.",
+          "type": "array",
+          "items": {
+            "type": "string"
+          }
+        },
+        "readGroupIds": {
+          "description": "The IDs of the read groups within which to search for reads. All specified\nread groups must belong to the same read group sets. Must specify one of\n`readGroupSetIds` or `readGroupIds`.",
+          "type": "array",
+          "items": {
+            "type": "string"
+          }
+        },
+        "end": {
+          "description": "The end position of the range on the reference, 0-based exclusive. If\nspecified, `referenceName` must also be specified.",
+          "format": "int64",
+          "type": "string"
+        },
+        "pageToken": {
+          "description": "The continuation token, which is used to page through large result sets.\nTo get the next page of results, set this parameter to the value of\n`nextPageToken` from the previous response.",
+          "type": "string"
+        },
+        "pageSize": {
+          "description": "The maximum number of results to return in a single page. If unspecified,\ndefaults to 256. The maximum value is 2048.",
+          "format": "int32",
+          "type": "integer"
+        },
+        "start": {
+          "description": "The start position of the range on the reference, 0-based inclusive. If\nspecified, `referenceName` must also be specified.",
+          "format": "int64",
+          "type": "string"
+        }
+      },
+      "id": "SearchReadsRequest"
+    },
+    "CancelOperationRequest": {
+      "description": "The request message for Operations.CancelOperation.",
+      "type": "object",
+      "properties": {},
+      "id": "CancelOperationRequest"
+    },
     "Annotation": {
-      "id": "Annotation",
       "description": "An annotation describes a region of reference genome. The value of an\nannotation may be one of several canonical types, supplemented by arbitrary\ninfo tags. An annotation is not inherently associated with a specific\nsample or individual (though a client could choose to use annotations in\nthis way). Example canonical annotation types are `GENE` and\n`VARIANT`.",
       "type": "object",
       "properties": {
+        "referenceName": {
+          "description": "The display name corresponding to the reference specified by\n`referenceId`, for example `chr1`, `1`, or `chrX`.",
+          "type": "string"
+        },
+        "type": {
+          "enumDescriptions": [
+            "",
+            "A `GENERIC` annotation type should be used when no other annotation\ntype will suffice. This represents an untyped annotation of the reference\ngenome.",
+            "A `VARIANT` annotation type.",
+            "A `GENE` annotation type represents the existence of a gene at the\nassociated reference coordinates. The start coordinate is typically the\ngene's transcription start site and the end is typically the end of the\ngene's last exon.",
+            "A `TRANSCRIPT` annotation type represents the assertion that a\nparticular region of the reference genome may be transcribed as RNA."
+          ],
+          "enum": [
+            "ANNOTATION_TYPE_UNSPECIFIED",
+            "GENERIC",
+            "VARIANT",
+            "GENE",
+            "TRANSCRIPT"
+          ],
+          "description": "The data type for this annotation. Must match the containing annotation\nset's type.",
+          "type": "string"
+        },
+        "info": {
+          "description": "A map of additional read alignment information. This must be of the form\nmap\u003cstring, string[]\u003e (string key mapping to a list of string values).",
+          "type": "object",
+          "additionalProperties": {
+            "type": "array",
+            "items": {
+              "type": "any"
+            }
+          }
+        },
+        "end": {
+          "description": "The end position of the range on the reference, 0-based exclusive.",
+          "format": "int64",
+          "type": "string"
+        },
+        "transcript": {
+          "$ref": "Transcript",
+          "description": "A transcript value represents the assertion that a particular region of\nthe reference genome may be transcribed as RNA. An alternative splicing\npattern would be represented as a separate transcript object. This field\nis only set for annotations of type `TRANSCRIPT`."
+        },
+        "start": {
+          "description": "The start position of the range on the reference, 0-based inclusive.",
+          "format": "int64",
+          "type": "string"
+        },
         "annotationSetId": {
           "description": "The annotation set to which this annotation belongs.",
           "type": "string"
@@ -1875,136 +2203,25 @@
         "reverseStrand": {
           "description": "Whether this range refers to the reverse strand, as opposed to the forward\nstrand. Note that regardless of this field, the start/end position of the\nrange always refer to the forward strand.",
           "type": "boolean"
-        },
-        "referenceName": {
-          "description": "The display name corresponding to the reference specified by\n`referenceId`, for example `chr1`, `1`, or `chrX`.",
-          "type": "string"
-        },
-        "info": {
-          "additionalProperties": {
-            "type": "array",
-            "items": {
-              "type": "any"
-            }
-          },
-          "description": "A map of additional read alignment information. This must be of the form\nmap\u003cstring, string[]\u003e (string key mapping to a list of string values).",
-          "type": "object"
-        },
-        "type": {
-          "enumDescriptions": [
-            "",
-            "A `GENERIC` annotation type should be used when no other annotation\ntype will suffice. This represents an untyped annotation of the reference\ngenome.",
-            "A `VARIANT` annotation type.",
-            "A `GENE` annotation type represents the existence of a gene at the\nassociated reference coordinates. The start coordinate is typically the\ngene's transcription start site and the end is typically the end of the\ngene's last exon.",
-            "A `TRANSCRIPT` annotation type represents the assertion that a\nparticular region of the reference genome may be transcribed as RNA."
-          ],
-          "enum": [
-            "ANNOTATION_TYPE_UNSPECIFIED",
-            "GENERIC",
-            "VARIANT",
-            "GENE",
-            "TRANSCRIPT"
-          ],
-          "description": "The data type for this annotation. Must match the containing annotation\nset's type.",
-          "type": "string"
-        },
-        "end": {
-          "description": "The end position of the range on the reference, 0-based exclusive.",
-          "format": "int64",
-          "type": "string"
-        },
-        "transcript": {
-          "description": "A transcript value represents the assertion that a particular region of\nthe reference genome may be transcribed as RNA. An alternative splicing\npattern would be represented as a separate transcript object. This field\nis only set for annotations of type `TRANSCRIPT`.",
-          "$ref": "Transcript"
-        },
-        "start": {
-          "description": "The start position of the range on the reference, 0-based inclusive.",
-          "format": "int64",
-          "type": "string"
-        }
-      }
-    },
-    "CancelOperationRequest": {
-      "description": "The request message for Operations.CancelOperation.",
-      "type": "object",
-      "properties": {},
-      "id": "CancelOperationRequest"
-    },
-    "SearchReadsRequest": {
-      "id": "SearchReadsRequest",
-      "description": "The read search request.",
-      "type": "object",
-      "properties": {
-        "pageToken": {
-          "description": "The continuation token, which is used to page through large result sets.\nTo get the next page of results, set this parameter to the value of\n`nextPageToken` from the previous response.",
-          "type": "string"
-        },
-        "pageSize": {
-          "description": "The maximum number of results to return in a single page. If unspecified,\ndefaults to 256. The maximum value is 2048.",
-          "format": "int32",
-          "type": "integer"
-        },
-        "start": {
-          "description": "The start position of the range on the reference, 0-based inclusive. If\nspecified, `referenceName` must also be specified.",
-          "format": "int64",
-          "type": "string"
-        },
-        "referenceName": {
-          "description": "The reference sequence name, for example `chr1`, `1`, or `chrX`. If set to\n`*`, only unmapped reads are returned. If unspecified, all reads (mapped\nand unmapped) are returned.",
-          "type": "string"
-        },
-        "readGroupSetIds": {
-          "description": "The IDs of the read groups sets within which to search for reads. All\nspecified read group sets must be aligned against a common set of reference\nsequences; this defines the genomic coordinates for the query. Must specify\none of `readGroupSetIds` or `readGroupIds`.",
-          "type": "array",
-          "items": {
-            "type": "string"
-          }
-        },
-        "readGroupIds": {
-          "description": "The IDs of the read groups within which to search for reads. All specified\nread groups must belong to the same read group sets. Must specify one of\n`readGroupSetIds` or `readGroupIds`.",
-          "type": "array",
-          "items": {
-            "type": "string"
-          }
-        },
-        "end": {
-          "description": "The end position of the range on the reference, 0-based exclusive. If\nspecified, `referenceName` must also be specified.",
-          "format": "int64",
-          "type": "string"
-        }
-      }
-    },
-    "RuntimeMetadata": {
-      "description": "Runtime metadata that will be populated in the\nruntimeMetadata\nfield of the Operation associated with a RunPipeline execution.",
-      "type": "object",
-      "properties": {
-        "computeEngine": {
-          "$ref": "ComputeEngine",
-          "description": "Execution information specific to Google Compute Engine."
         }
       },
-      "id": "RuntimeMetadata"
+      "id": "Annotation"
     },
     "Operation": {
-      "id": "Operation",
       "description": "This resource represents a long-running operation that is the result of a\nnetwork API call.",
       "type": "object",
       "properties": {
-        "name": {
-          "description": "The server-assigned name, which is only unique within the same service that originally returns it. For example&#58; `operations/CJHU7Oi_ChDrveSpBRjfuL-qzoWAgEw`",
-          "type": "string"
-        },
         "error": {
           "description": "The error result of the operation in case of failure or cancellation.",
           "$ref": "Status"
         },
         "metadata": {
-          "description": "An OperationMetadata object. This will always be returned with the Operation.",
-          "type": "object",
           "additionalProperties": {
             "description": "Properties of the object. Contains field @type with type URL.",
             "type": "any"
-          }
+          },
+          "description": "An OperationMetadata object. This will always be returned with the Operation.",
+          "type": "object"
         },
         "done": {
           "description": "If the value is `false`, it means the operation is still in progress.\nIf true, the operation is completed, and either `error` or `response` is\navailable.",
@@ -2017,8 +2234,24 @@
           },
           "description": "If importing ReadGroupSets, an ImportReadGroupSetsResponse is returned. If importing Variants, an ImportVariantsResponse is returned. For pipelines and exports, an empty response is returned.",
           "type": "object"
+        },
+        "name": {
+          "description": "The server-assigned name, which is only unique within the same service that originally returns it. For example&#58; `operations/CJHU7Oi_ChDrveSpBRjfuL-qzoWAgEw`",
+          "type": "string"
         }
-      }
+      },
+      "id": "Operation"
+    },
+    "RuntimeMetadata": {
+      "description": "Runtime metadata that will be populated in the\nruntimeMetadata\nfield of the Operation associated with a RunPipeline execution.",
+      "type": "object",
+      "properties": {
+        "computeEngine": {
+          "$ref": "ComputeEngine",
+          "description": "Execution information specific to Google Compute Engine."
+        }
+      },
+      "id": "RuntimeMetadata"
     },
     "ImportReadGroupSetsResponse": {
       "description": "The read group set import response.",
@@ -2035,31 +2268,22 @@
       "id": "ImportReadGroupSetsResponse"
     },
     "VariantCall": {
-      "id": "VariantCall",
       "description": "A call represents the determination of genotype with respect to a particular\nvariant. It may include associated information such as quality and phasing.\nFor example, a call might assign a probability of 0.32 to the occurrence of\na SNP named rs1234 in a call set with the name NA12345.",
       "type": "object",
       "properties": {
-        "genotype": {
-          "description": "The genotype of this variant call. Each value represents either the value\nof the `referenceBases` field or a 1-based index into\n`alternateBases`. If a variant had a `referenceBases`\nvalue of `T` and an `alternateBases`\nvalue of `[\"A\", \"C\"]`, and the `genotype` was\n`[2, 1]`, that would mean the call\nrepresented the heterozygous value `CA` for this variant.\nIf the `genotype` was instead `[0, 1]`, the\nrepresented value would be `TA`. Ordering of the\ngenotype values is important if the `phaseset` is present.\nIf a genotype is not called (that is, a `.` is present in the\nGT string) -1 is returned.",
-          "type": "array",
-          "items": {
-            "format": "int32",
-            "type": "integer"
-          }
-        },
         "phaseset": {
           "description": "If this field is present, this variant call's genotype ordering implies\nthe phase of the bases and is consistent with any other variant calls in\nthe same reference sequence which have the same phaseset value.\nWhen importing data from VCF, if the genotype data was phased but no\nphase set was specified this field will be set to `*`.",
           "type": "string"
         },
         "info": {
+          "description": "A map of additional variant call information. This must be of the form\nmap\u003cstring, string[]\u003e (string key mapping to a list of string values).",
+          "type": "object",
           "additionalProperties": {
             "type": "array",
             "items": {
               "type": "any"
             }
-          },
-          "description": "A map of additional variant call information. This must be of the form\nmap\u003cstring, string[]\u003e (string key mapping to a list of string values).",
-          "type": "object"
+          }
         },
         "callSetName": {
           "description": "The name of the call set this variant call belongs to.",
@@ -2076,8 +2300,17 @@
         "callSetId": {
           "description": "The ID of the call set this variant call belongs to.",
           "type": "string"
+        },
+        "genotype": {
+          "description": "The genotype of this variant call. Each value represents either the value\nof the `referenceBases` field or a 1-based index into\n`alternateBases`. If a variant had a `referenceBases`\nvalue of `T` and an `alternateBases`\nvalue of `[\"A\", \"C\"]`, and the `genotype` was\n`[2, 1]`, that would mean the call\nrepresented the heterozygous value `CA` for this variant.\nIf the `genotype` was instead `[0, 1]`, the\nrepresented value would be `TA`. Ordering of the\ngenotype values is important if the `phaseset` is present.\nIf a genotype is not called (that is, a `.` is present in the\nGT string) -1 is returned.",
+          "type": "array",
+          "items": {
+            "format": "int32",
+            "type": "integer"
+          }
         }
-      }
+      },
+      "id": "VariantCall"
     },
     "SearchVariantsResponse": {
       "description": "The variant search response.",
@@ -2098,7 +2331,6 @@
       "id": "SearchVariantsResponse"
     },
     "ListBasesResponse": {
-      "id": "ListBasesResponse",
       "type": "object",
       "properties": {
         "offset": {
@@ -2114,13 +2346,18 @@
           "description": "A substring of the bases that make up this reference.",
           "type": "string"
         }
-      }
+      },
+      "id": "ListBasesResponse"
     },
     "Status": {
-      "id": "Status",
       "description": "The `Status` type defines a logical error model that is suitable for different\nprogramming environments, including REST APIs and RPC APIs. It is used by\n[gRPC](https://github.com/grpc). The error model is designed to be:\n\n- Simple to use and understand for most users\n- Flexible enough to meet unexpected needs\n\n# Overview\n\nThe `Status` message contains three pieces of data: error code, error message,\nand error details. The error code should be an enum value of\ngoogle.rpc.Code, but it may accept additional error codes if needed.  The\nerror message should be a developer-facing English message that helps\ndevelopers *understand* and *resolve* the error. If a localized user-facing\nerror message is needed, put the localized message in the error details or\nlocalize it in the client. The optional error details may contain arbitrary\ninformation about the error. There is a predefined set of error detail types\nin the package `google.rpc` which can be used for common error conditions.\n\n# Language mapping\n\nThe `Status` message is the logical representation of the error model, but it\nis not necessarily the actual wire format. When the `Status` message is\nexposed in different client libraries and different wire protocols, it can be\nmapped differently. For example, it will likely be mapped to some exceptions\nin Java, but more likely mapped to some error codes in C.\n\n# Other uses\n\nThe error model and the `Status` message can be used in a variety of\nenvironments, either with or without APIs, to provide a\nconsistent developer experience across different environments.\n\nExample uses of this error model include:\n\n- Partial errors. If a service needs to return partial errors to the client,\n    it may embed the `Status` in the normal response to indicate the partial\n    errors.\n\n- Workflow errors. A typical workflow has multiple steps. Each step may\n    have a `Status` message for error reporting purpose.\n\n- Batch operations. If a client uses batch request and batch response, the\n    `Status` message should be used directly inside batch response, one for\n    each error sub-response.\n\n- Asynchronous operations. If an API call embeds asynchronous operation\n    results in its response, the status of those operations should be\n    represented directly using the `Status` message.\n\n- Logging. If some API errors are stored in logs, the message `Status` could\n    be used directly after any stripping needed for security/privacy reasons.",
       "type": "object",
       "properties": {
+        "code": {
+          "description": "The status code, which should be an enum value of google.rpc.Code.",
+          "format": "int32",
+          "type": "integer"
+        },
         "message": {
           "description": "A developer-facing error message, which should be in English. Any\nuser-facing error message should be localized and sent in the\ngoogle.rpc.Status.details field, or localized by the client.",
           "type": "string"
@@ -2129,22 +2366,17 @@
           "description": "A list of messages that carry the error details.  There will be a\ncommon 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"
-            },
-            "type": "object"
+            }
           }
-        },
-        "code": {
-          "description": "The status code, which should be an enum value of google.rpc.Code.",
-          "format": "int32",
-          "type": "integer"
         }
-      }
+      },
+      "id": "Status"
     },
     "Binding": {
-      "id": "Binding",
       "description": "Associates `members` with a `role`.",
       "type": "object",
       "properties": {
@@ -2159,17 +2391,23 @@
           "description": "Role that is assigned to `members`.\nFor example, `roles/viewer`, `roles/editor`, or `roles/owner`.\nRequired",
           "type": "string"
         }
-      }
+      },
+      "id": "Binding"
     },
     "UndeleteDatasetRequest": {
-      "id": "UndeleteDatasetRequest",
       "type": "object",
-      "properties": {}
+      "properties": {},
+      "id": "UndeleteDatasetRequest"
     },
     "Range": {
       "description": "A 0-based half-open genomic coordinate range for search requests.",
       "type": "object",
       "properties": {
+        "start": {
+          "description": "The start position of the range on the reference, 0-based inclusive.",
+          "format": "int64",
+          "type": "string"
+        },
         "end": {
           "description": "The end position of the range on the reference, 0-based exclusive.",
           "format": "int64",
@@ -2178,11 +2416,6 @@
         "referenceName": {
           "description": "The reference sequence name, for example `chr1`,\n`1`, or `chrX`.",
           "type": "string"
-        },
-        "start": {
-          "description": "The start position of the range on the reference, 0-based inclusive.",
-          "format": "int64",
-          "type": "string"
         }
       },
       "id": "Range"
@@ -2191,6 +2424,14 @@
       "description": "A variant set is a collection of call sets and variants. It contains summary\nstatistics of those contents. A variant set belongs to a dataset.\n\nFor more genomics resource definitions, see [Fundamentals of Google\nGenomics](https://cloud.google.com/genomics/fundamentals-of-google-genomics)",
       "type": "object",
       "properties": {
+        "description": {
+          "description": "A textual description of this variant set.",
+          "type": "string"
+        },
+        "datasetId": {
+          "description": "The dataset to which this variant set belongs.",
+          "type": "string"
+        },
         "name": {
           "description": "User-specified, mutable name.",
           "type": "string"
@@ -2216,14 +2457,6 @@
         "id": {
           "description": "The server-generated variant set ID, unique across all variant sets.",
           "type": "string"
-        },
-        "description": {
-          "description": "A textual description of this variant set.",
-          "type": "string"
-        },
-        "datasetId": {
-          "description": "The dataset to which this variant set belongs.",
-          "type": "string"
         }
       },
       "id": "VariantSet"
@@ -2276,22 +2509,9 @@
       "id": "SearchCallSetsResponse"
     },
     "Variant": {
-      "id": "Variant",
       "description": "A variant represents a change in DNA sequence relative to a reference\nsequence. For example, a variant could represent a SNP or an insertion.\nVariants belong to a variant set.\n\nFor more genomics resource definitions, see [Fundamentals of Google\nGenomics](https://cloud.google.com/genomics/fundamentals-of-google-genomics)\n\nEach of the calls on a variant represent a determination of genotype with\nrespect to that variant. For example, a call might assign probability of 0.32\nto the occurrence of a SNP named rs1234 in a sample named NA12345. A call\nbelongs to a call set, which contains related calls typically from one\nsample.",
       "type": "object",
       "properties": {
-        "id": {
-          "description": "The server-generated variant ID, unique across all variants.",
-          "type": "string"
-        },
-        "variantSetId": {
-          "description": "The ID of the variant set this variant belongs to.",
-          "type": "string"
-        },
-        "referenceName": {
-          "description": "The reference on which this variant occurs.\n(such as `chr20` or `X`)",
-          "type": "string"
-        },
         "info": {
           "additionalProperties": {
             "type": "array",
@@ -2353,31 +2573,60 @@
           "description": "A measure of how likely this variant is to be real.\nA higher value is better.",
           "format": "double",
           "type": "number"
+        },
+        "id": {
+          "description": "The server-generated variant ID, unique across all variants.",
+          "type": "string"
+        },
+        "variantSetId": {
+          "description": "The ID of the variant set this variant belongs to.",
+          "type": "string"
+        },
+        "referenceName": {
+          "description": "The reference on which this variant occurs.\n(such as `chr20` or `X`)",
+          "type": "string"
         }
-      }
+      },
+      "id": "Variant"
     },
     "ListOperationsResponse": {
-      "id": "ListOperationsResponse",
       "description": "The response message for Operations.ListOperations.",
       "type": "object",
       "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.",
           "type": "array",
           "items": {
             "$ref": "Operation"
           }
-        },
-        "nextPageToken": {
-          "description": "The standard List next-page token.",
-          "type": "string"
         }
-      }
+      },
+      "id": "ListOperationsResponse"
     },
     "OperationMetadata": {
       "description": "Metadata describing an Operation.",
       "type": "object",
       "properties": {
+        "request": {
+          "additionalProperties": {
+            "description": "Properties of the object. Contains field @type with type URL.",
+            "type": "any"
+          },
+          "description": "The original request that started the operation. Note that this will be in\ncurrent version of the API. If the operation was started with v1beta2 API\nand a GetOperation is performed on v1 API, a v1 request will be returned.",
+          "type": "object"
+        },
+        "runtimeMetadata": {
+          "description": "Runtime metadata on this Operation.",
+          "type": "object",
+          "additionalProperties": {
+            "description": "Properties of the object. Contains field @type with type URL.",
+            "type": "any"
+          }
+        },
         "labels": {
           "description": "Optionally provided by the caller when submitting the request that creates\nthe operation.",
           "type": "object",
@@ -2414,22 +2663,6 @@
           "description": "The time at which the job began to run.",
           "format": "google-datetime",
           "type": "string"
-        },
-        "request": {
-          "additionalProperties": {
-            "description": "Properties of the object. Contains field @type with type URL.",
-            "type": "any"
-          },
-          "description": "The original request that started the operation. Note that this will be in\ncurrent version of the API. If the operation was started with v1beta2 API\nand a GetOperation is performed on v1 API, a v1 request will be returned.",
-          "type": "object"
-        },
-        "runtimeMetadata": {
-          "additionalProperties": {
-            "description": "Properties of the object. Contains field @type with type URL.",
-            "type": "any"
-          },
-          "description": "Runtime metadata on this Operation.",
-          "type": "object"
         }
       },
       "id": "OperationMetadata"
@@ -2438,15 +2671,20 @@
       "description": "The variant search request.",
       "type": "object",
       "properties": {
-        "maxCalls": {
-          "description": "The maximum number of calls to return in a single page. Note that this\nlimit may be exceeded in the event that a matching variant contains more\ncalls than the requested maximum. If unspecified, defaults to 5000. The\nmaximum value is 10000.",
-          "format": "int32",
-          "type": "integer"
+        "end": {
+          "description": "The end of the window, 0-based exclusive. If unspecified or 0, defaults to\nthe length of the reference.",
+          "format": "int64",
+          "type": "string"
         },
         "pageToken": {
           "description": "The continuation token, which is used to page through large result sets.\nTo get the next page of results, set this parameter to the value of\n`nextPageToken` from the previous response.",
           "type": "string"
         },
+        "maxCalls": {
+          "description": "The maximum number of calls to return in a single page. Note that this\nlimit may be exceeded in the event that a matching variant contains more\ncalls than the requested maximum. If unspecified, defaults to 5000. The\nmaximum value is 10000.",
+          "format": "int32",
+          "type": "integer"
+        },
         "pageSize": {
           "description": "The maximum number of variants to return in a single page. If unspecified,\ndefaults to 5000. The maximum value is 10000.",
           "format": "int32",
@@ -2459,15 +2697,15 @@
             "type": "string"
           }
         },
+        "variantName": {
+          "description": "Only return variants which have exactly this name.",
+          "type": "string"
+        },
         "start": {
           "description": "The beginning of the window (0-based, inclusive) for which\noverlapping variants should be returned. If unspecified, defaults to 0.",
           "format": "int64",
           "type": "string"
         },
-        "variantName": {
-          "description": "Only return variants which have exactly this name.",
-          "type": "string"
-        },
         "referenceName": {
           "description": "Required. Only return variants in this reference sequence.",
           "type": "string"
@@ -2478,20 +2716,19 @@
           "items": {
             "type": "string"
           }
-        },
-        "end": {
-          "description": "The end of the window, 0-based exclusive. If unspecified or 0, defaults to\nthe length of the reference.",
-          "format": "int64",
-          "type": "string"
         }
       },
       "id": "SearchVariantsRequest"
     },
     "SearchReadGroupSetsRequest": {
-      "id": "SearchReadGroupSetsRequest",
       "description": "The read group set search request.",
       "type": "object",
       "properties": {
+        "pageSize": {
+          "description": "The maximum number of results to return in a single page. If unspecified,\ndefaults to 256. The maximum value is 1024.",
+          "format": "int32",
+          "type": "integer"
+        },
         "datasetIds": {
           "description": "Restricts this query to read group sets within the given datasets. At least\none ID must be provided.",
           "type": "array",
@@ -2506,16 +2743,11 @@
         "pageToken": {
           "description": "The continuation token, which is used to page through large result sets.\nTo get the next page of results, set this parameter to the value of\n`nextPageToken` from the previous response.",
           "type": "string"
-        },
-        "pageSize": {
-          "description": "The maximum number of results to return in a single page. If unspecified,\ndefaults to 256. The maximum value is 1024.",
-          "format": "int32",
-          "type": "integer"
         }
-      }
+      },
+      "id": "SearchReadGroupSetsRequest"
     },
     "SearchAnnotationsResponse": {
-      "id": "SearchAnnotationsResponse",
       "type": "object",
       "properties": {
         "nextPageToken": {
@@ -2529,10 +2761,10 @@
             "$ref": "Annotation"
           }
         }
-      }
+      },
+      "id": "SearchAnnotationsResponse"
     },
     "SearchReadsResponse": {
-      "id": "SearchReadsResponse",
       "description": "The read search response.",
       "type": "object",
       "properties": {
@@ -2547,11 +2779,16 @@
           "description": "The continuation token, which is used to page through large result sets.\nProvide this value in a subsequent request to return the next page of\nresults. This field will be empty if there aren't any additional results.",
           "type": "string"
         }
-      }
+      },
+      "id": "SearchReadsResponse"
     },
     "ClinicalCondition": {
       "type": "object",
       "properties": {
+        "omimId": {
+          "description": "The OMIM id for this condition.\nSearch for these IDs at http://omim.org/",
+          "type": "string"
+        },
         "externalIds": {
           "description": "The set of external IDs for this condition.",
           "type": "array",
@@ -2569,16 +2806,11 @@
           "items": {
             "type": "string"
           }
-        },
-        "omimId": {
-          "description": "The OMIM id for this condition.\nSearch for these IDs at http://omim.org/",
-          "type": "string"
         }
       },
       "id": "ClinicalCondition"
     },
     "Program": {
-      "id": "Program",
       "type": "object",
       "properties": {
         "name": {
@@ -2601,10 +2833,10 @@
           "description": "The version of the program run.",
           "type": "string"
         }
-      }
+      },
+      "id": "Program"
     },
     "CoverageBucket": {
-      "id": "CoverageBucket",
       "description": "A bucket over which read coverage has been precomputed. A bucket corresponds\nto a specific range of the reference sequence.",
       "type": "object",
       "properties": {
@@ -2617,7 +2849,8 @@
           "$ref": "Range",
           "description": "The genomic coordinate range spanned by this bucket."
         }
-      }
+      },
+      "id": "CoverageBucket"
     },
     "ComputeEngine": {
       "description": "Describes a Compute Engine resource that is being managed by a running\npipeline.",
@@ -2646,115 +2879,18 @@
       "id": "ComputeEngine"
     },
     "ExternalId": {
-      "id": "ExternalId",
       "type": "object",
       "properties": {
-        "sourceName": {
-          "description": "The name of the source of this data.",
-          "type": "string"
-        },
         "id": {
           "description": "The id used by the source of this data.",
           "type": "string"
-        }
-      }
-    },
-    "Reference": {
-      "description": "A reference is a canonical assembled DNA sequence, intended to act as a\nreference coordinate space for other genomic annotations. A single reference\nmight represent the human chromosome 1 or mitochandrial DNA, for instance. A\nreference belongs to one or more reference sets.\n\nFor more genomics resource definitions, see [Fundamentals of Google\nGenomics](https://cloud.google.com/genomics/fundamentals-of-google-genomics)",
-      "type": "object",
-      "properties": {
-        "sourceAccessions": {
-          "description": "All known corresponding accession IDs in INSDC (GenBank/ENA/DDBJ) ideally\nwith a version number, for example `GCF_000001405.26`.",
-          "type": "array",
-          "items": {
-            "type": "string"
-          }
         },
-        "ncbiTaxonId": {
-          "description": "ID from http://www.ncbi.nlm.nih.gov/taxonomy. For example, 9606 for human.",
-          "format": "int32",
-          "type": "integer"
-        },
-        "sourceUri": {
-          "description": "The URI from which the sequence was obtained. Typically specifies a FASTA\nformat file.",
-          "type": "string"
-        },
-        "name": {
-          "description": "The name of this reference, for example `22`.",
-          "type": "string"
-        },
-        "md5checksum": {
-          "description": "MD5 of the upper-case sequence excluding all whitespace characters (this\nis equivalent to SQ:M5 in SAM). This value is represented in lower case\nhexadecimal format.",
-          "type": "string"
-        },
-        "id": {
-          "description": "The server-generated reference ID, unique across all references.",
-          "type": "string"
-        },
-        "length": {
-          "description": "The length of this reference's sequence.",
-          "format": "int64",
+        "sourceName": {
+          "description": "The name of the source of this data.",
           "type": "string"
         }
       },
-      "id": "Reference"
-    },
-    "VariantSetMetadata": {
-      "id": "VariantSetMetadata",
-      "description": "Metadata describes a single piece of variant call metadata.\nThese data include a top level key and either a single value string (value)\nor a list of key-value pairs (info.)\nValue and info are mutually exclusive.",
-      "type": "object",
-      "properties": {
-        "number": {
-          "description": "The number of values that can be included in a field described by this\nmetadata.",
-          "type": "string"
-        },
-        "id": {
-          "description": "User-provided ID field, not enforced by this API.\nTwo or more pieces of structured metadata with identical\nid and key fields are considered equivalent.",
-          "type": "string"
-        },
-        "value": {
-          "description": "The value field for simple metadata",
-          "type": "string"
-        },
-        "key": {
-          "description": "The top-level key.",
-          "type": "string"
-        },
-        "description": {
-          "description": "A textual description of this metadata.",
-          "type": "string"
-        },
-        "info": {
-          "additionalProperties": {
-            "type": "array",
-            "items": {
-              "type": "any"
-            }
-          },
-          "description": "Remaining structured metadata key-value pairs. This must be of the form\nmap\u003cstring, string[]\u003e (string key mapping to a list of string values).",
-          "type": "object"
-        },
-        "type": {
-          "description": "The type of data. Possible types include: Integer, Float,\nFlag, Character, and String.",
-          "type": "string",
-          "enumDescriptions": [
-            "",
-            "",
-            "",
-            "",
-            "",
-            ""
-          ],
-          "enum": [
-            "TYPE_UNSPECIFIED",
-            "INTEGER",
-            "FLOAT",
-            "FLAG",
-            "CHARACTER",
-            "STRING"
-          ]
-        }
-      }
+      "id": "ExternalId"
     },
     "SearchVariantSetsRequest": {
       "description": "The search variant sets request.",
@@ -2779,9 +2915,113 @@
       },
       "id": "SearchVariantSetsRequest"
     },
+    "VariantSetMetadata": {
+      "description": "Metadata describes a single piece of variant call metadata.\nThese data include a top level key and either a single value string (value)\nor a list of key-value pairs (info.)\nValue and info are mutually exclusive.",
+      "type": "object",
+      "properties": {
+        "description": {
+          "description": "A textual description of this metadata.",
+          "type": "string"
+        },
+        "info": {
+          "description": "Remaining structured metadata key-value pairs. This must be of the form\nmap\u003cstring, string[]\u003e (string key mapping to a list of string values).",
+          "type": "object",
+          "additionalProperties": {
+            "type": "array",
+            "items": {
+              "type": "any"
+            }
+          }
+        },
+        "type": {
+          "description": "The type of data. Possible types include: Integer, Float,\nFlag, Character, and String.",
+          "type": "string",
+          "enumDescriptions": [
+            "",
+            "",
+            "",
+            "",
+            "",
+            ""
+          ],
+          "enum": [
+            "TYPE_UNSPECIFIED",
+            "INTEGER",
+            "FLOAT",
+            "FLAG",
+            "CHARACTER",
+            "STRING"
+          ]
+        },
+        "number": {
+          "description": "The number of values that can be included in a field described by this\nmetadata.",
+          "type": "string"
+        },
+        "id": {
+          "description": "User-provided ID field, not enforced by this API.\nTwo or more pieces of structured metadata with identical\nid and key fields are considered equivalent.",
+          "type": "string"
+        },
+        "value": {
+          "description": "The value field for simple metadata",
+          "type": "string"
+        },
+        "key": {
+          "description": "The top-level key.",
+          "type": "string"
+        }
+      },
+      "id": "VariantSetMetadata"
+    },
+    "Reference": {
+      "description": "A reference is a canonical assembled DNA sequence, intended to act as a\nreference coordinate space for other genomic annotations. A single reference\nmight represent the human chromosome 1 or mitochandrial DNA, for instance. A\nreference belongs to one or more reference sets.\n\nFor more genomics resource definitions, see [Fundamentals of Google\nGenomics](https://cloud.google.com/genomics/fundamentals-of-google-genomics)",
+      "type": "object",
+      "properties": {
+        "name": {
+          "description": "The name of this reference, for example `22`.",
+          "type": "string"
+        },
+        "md5checksum": {
+          "description": "MD5 of the upper-case sequence excluding all whitespace characters (this\nis equivalent to SQ:M5 in SAM). This value is represented in lower case\nhexadecimal format.",
+          "type": "string"
+        },
+        "id": {
+          "description": "The server-generated reference ID, unique across all references.",
+          "type": "string"
+        },
+        "length": {
+          "description": "The length of this reference's sequence.",
+          "format": "int64",
+          "type": "string"
+        },
+        "sourceAccessions": {
+          "description": "All known corresponding accession IDs in INSDC (GenBank/ENA/DDBJ) ideally\nwith a version number, for example `GCF_000001405.26`.",
+          "type": "array",
+          "items": {
+            "type": "string"
+          }
+        },
+        "ncbiTaxonId": {
+          "description": "ID from http://www.ncbi.nlm.nih.gov/taxonomy. For example, 9606 for human.",
+          "format": "int32",
+          "type": "integer"
+        },
+        "sourceUri": {
+          "description": "The URI from which the sequence was obtained. Typically specifies a FASTA\nformat file.",
+          "type": "string"
+        }
+      },
+      "id": "Reference"
+    },
     "SearchReferenceSetsRequest": {
       "type": "object",
       "properties": {
+        "md5checksums": {
+          "description": "If present, return reference sets for which the\nmd5checksum matches exactly.",
+          "type": "array",
+          "items": {
+            "type": "string"
+          }
+        },
         "accessions": {
           "description": "If present, return reference sets for which a prefix of any of\nsourceAccessions\nmatch any of these strings. Accession numbers typically have a main number\nand a version, for example `NC_000001.11`.",
           "type": "array",
@@ -2801,13 +3041,6 @@
         "assemblyId": {
           "description": "If present, return reference sets for which a substring of their\n`assemblyId` matches this string (case insensitive).",
           "type": "string"
-        },
-        "md5checksums": {
-          "description": "If present, return reference sets for which the\nmd5checksum matches exactly.",
-          "type": "array",
-          "items": {
-            "type": "string"
-          }
         }
       },
       "id": "SearchReferenceSetsRequest"
@@ -2817,8 +3050,8 @@
       "type": "object",
       "properties": {
         "policy": {
-          "$ref": "Policy",
-          "description": "REQUIRED: The complete policy to be applied to the `resource`. The size of\nthe policy is limited to a few 10s of KB. An empty policy is a\nvalid policy but certain Cloud Platform services (such as Projects)\nmight reject them."
+          "description": "REQUIRED: The complete policy to be applied to the `resource`. The size of\nthe policy is limited to a few 10s of KB. An empty policy is a\nvalid policy but certain Cloud Platform services (such as Projects)\nmight reject them.",
+          "$ref": "Policy"
         }
       },
       "id": "SetIamPolicyRequest"
@@ -2837,12 +3070,12 @@
           "description": "A mapping between info field keys and the InfoMergeOperations to\nbe performed on them.",
           "type": "object",
           "additionalProperties": {
+            "type": "string",
             "enum": [
               "INFO_MERGE_OPERATION_UNSPECIFIED",
               "IGNORE_NEW",
               "MOVE_TO_CALLS"
-            ],
-            "type": "string"
+            ]
           }
         },
         "variantSetId": {
@@ -2856,17 +3089,9 @@
       "description": "A read alignment describes a linear alignment of a string of DNA to a\nreference sequence, in addition to metadata\nabout the fragment (the molecule of DNA sequenced) and the read (the bases\nwhich were read by the sequencer). A read is equivalent to a line in a SAM\nfile. A read belongs to exactly one read group and exactly one\nread group set.\n\nFor more genomics resource definitions, see [Fundamentals of Google\nGenomics](https://cloud.google.com/genomics/fundamentals-of-google-genomics)\n\n### Reverse-stranded reads\n\nMapped reads (reads having a non-null `alignment`) can be aligned to either\nthe forward or the reverse strand of their associated reference. Strandedness\nof a mapped read is encoded by `alignment.position.reverseStrand`.\n\nIf we consider the reference to be a forward-stranded coordinate space of\n`[0, reference.length)` with `0` as the left-most position and\n`reference.length` as the right-most position, reads are always aligned left\nto right. That is, `alignment.position.position` always refers to the\nleft-most reference coordinate and `alignment.cigar` describes the alignment\nof this read to the reference from left to right. All per-base fields such as\n`alignedSequence` and `alignedQuality` share this same left-to-right\norientation; this is true of reads which are aligned to either strand. For\nreverse-stranded reads, this means that `alignedSequence` is the reverse\ncomplement of the bases that were originally reported by the sequencing\nmachine.\n\n### Generating a reference-aligned sequence string\n\nWhen interacting with mapped reads, it's often useful to produce a string\nrepresenting the local alignment of the read to reference. The following\npseudocode demonstrates one way of doing this:\n\n    out = \"\"\n    offset = 0\n    for c in read.alignment.cigar {\n      switch c.operation {\n      case \"ALIGNMENT_MATCH\", \"SEQUENCE_MATCH\", \"SEQUENCE_MISMATCH\":\n        out += read.alignedSequence[offset:offset+c.operationLength]\n        offset += c.operationLength\n        break\n      case \"CLIP_SOFT\", \"INSERT\":\n        offset += c.operationLength\n        break\n      case \"PAD\":\n        out += repeat(\"*\", c.operationLength)\n        break\n      case \"DELETE\":\n        out += repeat(\"-\", c.operationLength)\n        break\n      case \"SKIP\":\n        out += repeat(\" \", c.operationLength)\n        break\n      case \"CLIP_HARD\":\n        break\n      }\n    }\n    return out\n\n### Converting to SAM's CIGAR string\n\nThe following pseudocode generates a SAM CIGAR string from the\n`cigar` field. Note that this is a lossy conversion\n(`cigar.referenceSequence` is lost).\n\n    cigarMap = {\n      \"ALIGNMENT_MATCH\": \"M\",\n      \"INSERT\": \"I\",\n      \"DELETE\": \"D\",\n      \"SKIP\": \"N\",\n      \"CLIP_SOFT\": \"S\",\n      \"CLIP_HARD\": \"H\",\n      \"PAD\": \"P\",\n      \"SEQUENCE_MATCH\": \"=\",\n      \"SEQUENCE_MISMATCH\": \"X\",\n    }\n    cigarStr = \"\"\n    for c in read.alignment.cigar {\n      cigarStr += c.operationLength + cigarMap[c.operation]\n    }\n    return cigarStr",
       "type": "object",
       "properties": {
-        "readGroupId": {
-          "description": "The ID of the read group this read belongs to. A read belongs to exactly\none read group. This is a server-generated ID which is distinct from SAM's\nRG tag (for that value, see\nReadGroup.name).",
-          "type": "string"
-        },
-        "alignedSequence": {
-          "description": "The bases of the read sequence contained in this alignment record,\n**without CIGAR operations applied** (equivalent to SEQ in SAM).\n`alignedSequence` and `alignedQuality` may be\nshorter than the full read sequence and quality. This will occur if the\nalignment is part of a chimeric alignment, or if the read was trimmed. When\nthis occurs, the CIGAR for this read will begin/end with a hard clip\noperator that will indicate the length of the excised sequence.",
-          "type": "string"
-        },
         "nextMatePosition": {
-          "description": "The mapping of the primary alignment of the\n`(readNumber+1)%numberReads` read in the fragment. It replaces\nmate position and mate strand in SAM.",
-          "$ref": "Position"
+          "$ref": "Position",
+          "description": "The mapping of the primary alignment of the\n`(readNumber+1)%numberReads` read in the fragment. It replaces\nmate position and mate strand in SAM."
         },
         "info": {
           "additionalProperties": {
@@ -2936,6 +3161,14 @@
           "description": "The read number in sequencing. 0-based and less than numberReads. This\nfield replaces SAM flag 0x40 and 0x80.",
           "format": "int32",
           "type": "integer"
+        },
+        "readGroupId": {
+          "description": "The ID of the read group this read belongs to. A read belongs to exactly\none read group. This is a server-generated ID which is distinct from SAM's\nRG tag (for that value, see\nReadGroup.name).",
+          "type": "string"
+        },
+        "alignedSequence": {
+          "description": "The bases of the read sequence contained in this alignment record,\n**without CIGAR operations applied** (equivalent to SEQ in SAM).\n`alignedSequence` and `alignedQuality` may be\nshorter than the full read sequence and quality. This will occur if the\nalignment is part of a chimeric alignment, or if the read was trimmed. When\nthis occurs, the CIGAR for this read will begin/end with a hard clip\noperator that will indicate the length of the excised sequence.",
+          "type": "string"
         }
       },
       "id": "Read"
@@ -2961,7 +3194,17 @@
       "description": "A single CIGAR operation.",
       "type": "object",
       "properties": {
+        "referenceSequence": {
+          "description": "`referenceSequence` is only used at mismatches\n(`SEQUENCE_MISMATCH`) and deletions (`DELETE`).\nFilling this field replaces SAM's MD tag. If the relevant information is\nnot available, this field is unset.",
+          "type": "string"
+        },
+        "operationLength": {
+          "description": "The number of genomic bases that the operation runs for. Required.",
+          "format": "int64",
+          "type": "string"
+        },
         "operation": {
+          "type": "string",
           "enumDescriptions": [
             "",
             "An alignment match indicates that a sequence can be aligned to the\nreference without evidence of an INDEL. Unlike the\n`SEQUENCE_MATCH` and `SEQUENCE_MISMATCH` operators,\nthe `ALIGNMENT_MATCH` operator does not indicate whether the\nreference and read sequences are an exact match. This operator is\nequivalent to SAM's `M`.",
@@ -2985,17 +3228,7 @@
             "PAD",
             "SEQUENCE_MATCH",
             "SEQUENCE_MISMATCH"
-          ],
-          "type": "string"
-        },
-        "referenceSequence": {
-          "description": "`referenceSequence` is only used at mismatches\n(`SEQUENCE_MISMATCH`) and deletions (`DELETE`).\nFilling this field replaces SAM's MD tag. If the relevant information is\nnot available, this field is unset.",
-          "type": "string"
-        },
-        "operationLength": {
-          "description": "The number of genomic bases that the operation runs for. Required.",
-          "format": "int64",
-          "type": "string"
+          ]
         }
       },
       "id": "CigarUnit"
@@ -3004,12 +3237,23 @@
       "description": "A reference set is a set of references which typically comprise a reference\nassembly for a species, such as `GRCh38` which is representative\nof the human genome. A reference set defines a common coordinate space for\ncomparing reference-aligned experimental data. A reference set contains 1 or\nmore references.\n\nFor more genomics resource definitions, see [Fundamentals of Google\nGenomics](https://cloud.google.com/genomics/fundamentals-of-google-genomics)",
       "type": "object",
       "properties": {
-        "id": {
-          "description": "The server-generated reference set ID, unique across all reference sets.",
+        "referenceIds": {
+          "description": "The IDs of the reference objects that are part of this set.\n`Reference.md5checksum` must be unique within this set.",
+          "type": "array",
+          "items": {
+            "type": "string"
+          }
+        },
+        "md5checksum": {
+          "description": "Order-independent MD5 checksum which identifies this reference set. The\nchecksum is computed by sorting all lower case hexidecimal string\n`reference.md5checksum` (for all reference in this set) in\nascending lexicographic order, concatenating, and taking the MD5 of that\nvalue. The resulting value is represented in lower case hexadecimal format.",
           "type": "string"
         },
-        "description": {
-          "description": "Free text description of this reference set.",
+        "assemblyId": {
+          "description": "Public id of this reference set, such as `GRCh37`.",
+          "type": "string"
+        },
+        "id": {
+          "description": "The server-generated reference set ID, unique across all reference sets.",
           "type": "string"
         },
         "sourceAccessions": {
@@ -3019,6 +3263,10 @@
             "type": "string"
           }
         },
+        "description": {
+          "description": "Free text description of this reference set.",
+          "type": "string"
+        },
         "ncbiTaxonId": {
           "description": "ID from http://www.ncbi.nlm.nih.gov/taxonomy (for example, 9606 for human)\nindicating the species which this reference set is intended to model. Note\nthat contained references may specify a different `ncbiTaxonId`, as\nassemblies may contain reference sequences which do not belong to the\nmodeled species, for example EBV in a human reference genome.",
           "format": "int32",
@@ -3027,21 +3275,6 @@
         "sourceUri": {
           "description": "The URI from which the references were obtained.",
           "type": "string"
-        },
-        "referenceIds": {
-          "description": "The IDs of the reference objects that are part of this set.\n`Reference.md5checksum` must be unique within this set.",
-          "type": "array",
-          "items": {
-            "type": "string"
-          }
-        },
-        "assemblyId": {
-          "description": "Public id of this reference set, such as `GRCh37`.",
-          "type": "string"
-        },
-        "md5checksum": {
-          "description": "Order-independent MD5 checksum which identifies this reference set. The\nchecksum is computed by sorting all lower case hexidecimal string\n`reference.md5checksum` (for all reference in this set) in\nascending lexicographic order, concatenating, and taking the MD5 of that\nvalue. The resulting value is represented in lower case hexadecimal format.",
-          "type": "string"
         }
       },
       "id": "ReferenceSet"
@@ -3050,10 +3283,6 @@
       "description": "A transcript represents the assertion that a particular region of the\nreference genome may be transcribed as RNA.",
       "type": "object",
       "properties": {
-        "geneId": {
-          "description": "The annotation ID of the gene from which this transcript is transcribed.",
-          "type": "string"
-        },
         "exons": {
           "description": "The \u003ca href=\"http://en.wikipedia.org/wiki/Exon\"\u003eexons\u003c/a\u003e that compose\nthis transcript. This field should be unset for genomes where transcript\nsplicing does not occur, for example prokaryotes.\n\nIntrons are regions of the transcript that are not included in the\nspliced RNA product. Though not explicitly modeled here, intron ranges can\nbe deduced; all regions of this transcript that are not exons are introns.\n\nExonic sequences do not necessarily code for a translational product\n(amino acids). Only the regions of exons bounded by the\ncodingSequence correspond\nto coding DNA sequence.\n\nExons are ordered by start position and may not overlap.",
           "type": "array",
@@ -3064,6 +3293,10 @@
         "codingSequence": {
           "$ref": "CodingSequence",
           "description": "The range of the coding sequence for this transcript, if any. To determine\nthe exact ranges of coding sequence, intersect this range with those of the\nexons, if any. If there are any\nexons, the\ncodingSequence must start\nand end within them.\n\nNote that in some cases, the reference genome will not exactly match the\nobserved mRNA transcript e.g. due to variance in the source genome from\nreference. In these cases,\nexon.frame will not necessarily\nmatch the expected reference reading frame and coding exon reference bases\ncannot necessarily be concatenated to produce the original transcript mRNA."
+        },
+        "geneId": {
+          "description": "The annotation ID of the gene from which this transcript is transcribed.",
+          "type": "string"
         }
       },
       "id": "Transcript"
@@ -3072,14 +3305,14 @@
       "description": "An annotation set is a logical grouping of annotations that share consistent\ntype information and provenance. Examples of annotation sets include 'all\ngenes from refseq', and 'all variant annotations from ClinVar'.",
       "type": "object",
       "properties": {
-        "sourceUri": {
-          "description": "The source URI describing the file from which this annotation set was\ngenerated, if any.",
-          "type": "string"
-        },
         "datasetId": {
           "description": "The dataset to which this annotation set belongs.",
           "type": "string"
         },
+        "sourceUri": {
+          "description": "The source URI describing the file from which this annotation set was\ngenerated, if any.",
+          "type": "string"
+        },
         "name": {
           "description": "The display name for this annotation set.",
           "type": "string"
@@ -3088,17 +3321,9 @@
           "description": "The ID of the reference set that defines the coordinate space for this\nset's annotations.",
           "type": "string"
         },
-        "info": {
-          "additionalProperties": {
-            "type": "array",
-            "items": {
-              "type": "any"
-            }
-          },
-          "description": "A map of additional read alignment information. This must be of the form\nmap\u003cstring, string[]\u003e (string key mapping to a list of string values).",
-          "type": "object"
-        },
         "type": {
+          "description": "The type of annotations contained within this set.",
+          "type": "string",
           "enumDescriptions": [
             "",
             "A `GENERIC` annotation type should be used when no other annotation\ntype will suffice. This represents an untyped annotation of the reference\ngenome.",
@@ -3112,9 +3337,17 @@
             "VARIANT",
             "GENE",
             "TRANSCRIPT"
-          ],
-          "description": "The type of annotations contained within this set.",
-          "type": "string"
+          ]
+        },
+        "info": {
+          "additionalProperties": {
+            "type": "array",
+            "items": {
+              "type": "any"
+            }
+          },
+          "description": "A map of additional read alignment information. This must be of the form\nmap\u003cstring, string[]\u003e (string key mapping to a list of string values).",
+          "type": "object"
         },
         "id": {
           "description": "The server-generated annotation set ID, unique across all annotation sets.",
@@ -3126,10 +3359,6 @@
     "Experiment": {
       "type": "object",
       "properties": {
-        "sequencingCenter": {
-          "description": "The sequencing center used as part of this experiment.",
-          "type": "string"
-        },
         "platformUnit": {
           "description": "The platform unit used as part of this experiment, for example\nflowcell-barcode.lane for Illumina or slide for SOLiD. Corresponds to the\n@RG PU field in the SAM spec.",
           "type": "string"
@@ -3141,12 +3370,15 @@
         "instrumentModel": {
           "description": "The instrument model used as part of this experiment. This maps to\nsequencing technology in the SAM spec.",
           "type": "string"
+        },
+        "sequencingCenter": {
+          "description": "The sequencing center used as part of this experiment.",
+          "type": "string"
         }
       },
       "id": "Experiment"
     },
     "ListDatasetsResponse": {
-      "id": "ListDatasetsResponse",
       "description": "The dataset list response.",
       "type": "object",
       "properties": {
@@ -3161,10 +3393,10 @@
           "description": "The continuation token, which is used to page through large result sets.\nProvide this value in a subsequent request to return the next page of\nresults. This field will be empty if there aren't any additional results.",
           "type": "string"
         }
-      }
+      },
+      "id": "ListDatasetsResponse"
     },
     "TestIamPermissionsRequest": {
-      "id": "TestIamPermissionsRequest",
       "description": "Request message for `TestIamPermissions` method.",
       "type": "object",
       "properties": {
@@ -3175,13 +3407,38 @@
             "type": "string"
           }
         }
-      }
+      },
+      "id": "TestIamPermissionsRequest"
+    },
+    "Exon": {
+      "type": "object",
+      "properties": {
+        "end": {
+          "description": "The end position of the exon on this annotation's reference sequence,\n0-based exclusive. Note that this is relative to the reference start, and\n*not* the containing annotation start.",
+          "format": "int64",
+          "type": "string"
+        },
+        "frame": {
+          "description": "The frame of this exon. Contains a value of 0, 1, or 2, which indicates\nthe offset of the first coding base of the exon within the reading frame\nof the coding DNA sequence, if any. This field is dependent on the\nstrandedness of this annotation (see\nAnnotation.reverse_strand).\nFor forward stranded annotations, this offset is relative to the\nexon.start. For reverse\nstrand annotations, this offset is relative to the\nexon.end `- 1`.\n\nUnset if this exon does not intersect the coding sequence. Upon creation\nof a transcript, the frame must be populated for all or none of the\ncoding exons.",
+          "format": "int32",
+          "type": "integer"
+        },
+        "start": {
+          "description": "The start position of the exon on this annotation's reference sequence,\n0-based inclusive. Note that this is relative to the reference start, and\n**not** the containing annotation start.",
+          "format": "int64",
+          "type": "string"
+        }
+      },
+      "id": "Exon"
     },
     "ExportReadGroupSetRequest": {
-      "id": "ExportReadGroupSetRequest",
       "description": "The read group set export request.",
       "type": "object",
       "properties": {
+        "projectId": {
+          "description": "Required. The Google Cloud project ID that owns this\nexport. The caller must have WRITE access to this project.",
+          "type": "string"
+        },
         "exportUri": {
           "description": "Required. A Google Cloud Storage URI for the exported BAM file.\nThe currently authenticated user must have write access to the new file.\nAn error will be returned if the URI already contains data.",
           "type": "string"
@@ -3192,33 +3449,9 @@
           "items": {
             "type": "string"
           }
-        },
-        "projectId": {
-          "description": "Required. The Google Cloud project ID that owns this\nexport. The caller must have WRITE access to this project.",
-          "type": "string"
         }
-      }
-    },
-    "Exon": {
-      "id": "Exon",
-      "type": "object",
-      "properties": {
-        "start": {
-          "description": "The start position of the exon on this annotation's reference sequence,\n0-based inclusive. Note that this is relative to the reference start, and\n**not** the containing annotation start.",
-          "format": "int64",
-          "type": "string"
-        },
-        "end": {
-          "description": "The end position of the exon on this annotation's reference sequence,\n0-based exclusive. Note that this is relative to the reference start, and\n*not* the containing annotation start.",
-          "format": "int64",
-          "type": "string"
-        },
-        "frame": {
-          "description": "The frame of this exon. Contains a value of 0, 1, or 2, which indicates\nthe offset of the first coding base of the exon within the reading frame\nof the coding DNA sequence, if any. This field is dependent on the\nstrandedness of this annotation (see\nAnnotation.reverse_strand).\nFor forward stranded annotations, this offset is relative to the\nexon.start. For reverse\nstrand annotations, this offset is relative to the\nexon.end `- 1`.\n\nUnset if this exon does not intersect the coding sequence. Upon creation\nof a transcript, the frame must be populated for all or none of the\ncoding exons.",
-          "format": "int32",
-          "type": "integer"
-        }
-      }
+      },
+      "id": "ExportReadGroupSetRequest"
     },
     "CallSet": {
       "description": "A call set is a collection of variant calls, typically for one sample. It\nbelongs to a variant set.\n\nFor more genomics resource definitions, see [Fundamentals of Google\nGenomics](https://cloud.google.com/genomics/fundamentals-of-google-genomics)",
@@ -3262,38 +3495,37 @@
       "id": "CallSet"
     },
     "SearchAnnotationSetsResponse": {
-      "id": "SearchAnnotationSetsResponse",
       "type": "object",
       "properties": {
+        "nextPageToken": {
+          "description": "The continuation token, which is used to page through large result sets.\nProvide this value in a subsequent request to return the next page of\nresults. This field will be empty if there aren't any additional results.",
+          "type": "string"
+        },
         "annotationSets": {
           "description": "The matching annotation sets.",
           "type": "array",
           "items": {
             "$ref": "AnnotationSet"
           }
-        },
-        "nextPageToken": {
-          "description": "The continuation token, which is used to page through large result sets.\nProvide this value in a subsequent request to return the next page of\nresults. This field will be empty if there aren't any additional results.",
-          "type": "string"
         }
-      }
+      },
+      "id": "SearchAnnotationSetsResponse"
     },
     "ImportVariantsRequest": {
-      "id": "ImportVariantsRequest",
       "description": "The variant data import request.",
       "type": "object",
       "properties": {
         "infoMergeConfig": {
+          "description": "A mapping between info field keys and the InfoMergeOperations to\nbe performed on them. This is plumbed down to the MergeVariantRequests\ngenerated by the resulting import job.",
+          "type": "object",
           "additionalProperties": {
+            "type": "string",
             "enum": [
               "INFO_MERGE_OPERATION_UNSPECIFIED",
               "IGNORE_NEW",
               "MOVE_TO_CALLS"
-            ],
-            "type": "string"
-          },
-          "description": "A mapping between info field keys and the InfoMergeOperations to\nbe performed on them. This is plumbed down to the MergeVariantRequests\ngenerated by the resulting import job.",
-          "type": "object"
+            ]
+          }
         },
         "variantSetId": {
           "description": "Required. The variant set to which variant data should be imported.",
@@ -3311,6 +3543,8 @@
           "type": "boolean"
         },
         "format": {
+          "description": "The format of the variant data being imported. If unspecified, defaults to\nto `VCF`.",
+          "type": "string",
           "enumDescriptions": [
             "",
             "VCF (Variant Call Format). The VCF files may be gzip compressed. gVCF is\nalso supported.",
@@ -3320,37 +3554,45 @@
             "FORMAT_UNSPECIFIED",
             "FORMAT_VCF",
             "FORMAT_COMPLETE_GENOMICS"
-          ],
-          "description": "The format of the variant data being imported. If unspecified, defaults to\nto `VCF`.",
-          "type": "string"
-        }
-      }
-    },
-    "ListCoverageBucketsResponse": {
-      "type": "object",
-      "properties": {
-        "nextPageToken": {
-          "description": "The continuation token, which is used to page through large result sets.\nProvide this value in a subsequent request to return the next page of\nresults. This field will be empty if there aren't any additional results.",
-          "type": "string"
-        },
-        "bucketWidth": {
-          "description": "The length of each coverage bucket in base pairs. Note that buckets at the\nend of a reference sequence may be shorter. This value is omitted if the\nbucket width is infinity (the default behaviour, with no range or\n`targetBucketWidth`).",
-          "format": "int64",
-          "type": "string"
-        },
-        "coverageBuckets": {
-          "description": "The coverage buckets. The list of buckets is sparse; a bucket with 0\noverlapping reads is not returned. A bucket never crosses more than one\nreference sequence. Each bucket has width `bucketWidth`, unless\nits end is the end of the reference sequence.",
-          "type": "array",
-          "items": {
-            "$ref": "CoverageBucket"
-          }
+          ]
         }
       },
-      "id": "ListCoverageBucketsResponse"
+      "id": "ImportVariantsRequest"
     },
     "VariantAnnotation": {
       "type": "object",
       "properties": {
+        "transcriptIds": {
+          "description": "Google annotation IDs of the transcripts affected by this variant. These\nshould be provided when the variant is created.",
+          "type": "array",
+          "items": {
+            "type": "string"
+          }
+        },
+        "type": {
+          "enumDescriptions": [
+            "",
+            "`TYPE_OTHER` should be used when no other Type will suffice.\nFurther explanation of the variant type may be included in the\ninfo field.",
+            "`INSERTION` indicates an insertion.",
+            "`DELETION` indicates a deletion.",
+            "`SUBSTITUTION` indicates a block substitution of\ntwo or more nucleotides.",
+            "`SNP` indicates a single nucleotide polymorphism.",
+            "`STRUCTURAL` indicates a large structural variant,\nincluding chromosomal fusions, inversions, etc.",
+            "`CNV` indicates a variation in copy number."
+          ],
+          "enum": [
+            "TYPE_UNSPECIFIED",
+            "TYPE_OTHER",
+            "INSERTION",
+            "DELETION",
+            "SUBSTITUTION",
+            "SNP",
+            "STRUCTURAL",
+            "CNV"
+          ],
+          "description": "Type has been adapted from ClinVar's list of variant types.",
+          "type": "string"
+        },
         "alternateBases": {
           "description": "The alternate allele for this variant. If multiple alternate alleles\nexist at this location, create a separate variant for each one, as they\nmay represent distinct conditions.",
           "type": "string"
@@ -3360,6 +3602,8 @@
           "type": "string"
         },
         "clinicalSignificance": {
+          "description": "Describes the clinical significance of a variant.\nIt is adapted from the ClinVar controlled vocabulary for clinical\nsignificance described at:\nhttp://www.ncbi.nlm.nih.gov/clinvar/docs/clinsig/",
+          "type": "string",
           "enumDescriptions": [
             "",
             "`OTHER` should be used when no other clinical significance\nvalue will suffice.",
@@ -3391,9 +3635,7 @@
             "ASSOCIATION",
             "PROTECTIVE",
             "MULTIPLE_REPORTED"
-          ],
-          "description": "Describes the clinical significance of a variant.\nIt is adapted from the ClinVar controlled vocabulary for clinical\nsignificance described at:\nhttp://www.ncbi.nlm.nih.gov/clinvar/docs/clinsig/",
-          "type": "string"
+          ]
         },
         "conditions": {
           "description": "The set of conditions associated with this variant.\nA condition describes the way a variant influences human health.",
@@ -3427,41 +3669,32 @@
             "STOP_LOSS",
             "SPLICE_SITE_DISRUPTION"
           ]
-        },
-        "transcriptIds": {
-          "description": "Google annotation IDs of the transcripts affected by this variant. These\nshould be provided when the variant is created.",
-          "type": "array",
-          "items": {
-            "type": "string"
-          }
-        },
-        "type": {
-          "enumDescriptions": [
-            "",
-            "`TYPE_OTHER` should be used when no other Type will suffice.\nFurther explanation of the variant type may be included in the\ninfo field.",
-            "`INSERTION` indicates an insertion.",
-            "`DELETION` indicates a deletion.",
-            "`SUBSTITUTION` indicates a block substitution of\ntwo or more nucleotides.",
-            "`SNP` indicates a single nucleotide polymorphism.",
-            "`STRUCTURAL` indicates a large structural variant,\nincluding chromosomal fusions, inversions, etc.",
-            "`CNV` indicates a variation in copy number."
-          ],
-          "enum": [
-            "TYPE_UNSPECIFIED",
-            "TYPE_OTHER",
-            "INSERTION",
-            "DELETION",
-            "SUBSTITUTION",
-            "SNP",
-            "STRUCTURAL",
-            "CNV"
-          ],
-          "description": "Type has been adapted from ClinVar's list of variant types.",
-          "type": "string"
         }
       },
       "id": "VariantAnnotation"
     },
+    "ListCoverageBucketsResponse": {
+      "type": "object",
+      "properties": {
+        "coverageBuckets": {
+          "description": "The coverage buckets. The list of buckets is sparse; a bucket with 0\noverlapping reads is not returned. A bucket never crosses more than one\nreference sequence. Each bucket has width `bucketWidth`, unless\nits end is the end of the reference sequence.",
+          "type": "array",
+          "items": {
+            "$ref": "CoverageBucket"
+          }
+        },
+        "nextPageToken": {
+          "description": "The continuation token, which is used to page through large result sets.\nProvide this value in a subsequent request to return the next page of\nresults. This field will be empty if there aren't any additional results.",
+          "type": "string"
+        },
+        "bucketWidth": {
+          "description": "The length of each coverage bucket in base pairs. Note that buckets at the\nend of a reference sequence may be shorter. This value is omitted if the\nbucket width is infinity (the default behaviour, with no range or\n`targetBucketWidth`).",
+          "format": "int64",
+          "type": "string"
+        }
+      },
+      "id": "ListCoverageBucketsResponse"
+    },
     "ExportVariantSetRequest": {
       "description": "The variant data export request.",
       "type": "object",
@@ -3501,13 +3734,8 @@
       "id": "ExportVariantSetRequest"
     },
     "SearchAnnotationsRequest": {
-      "id": "SearchAnnotationsRequest",
       "type": "object",
       "properties": {
-        "referenceId": {
-          "description": "The ID of the reference to query.",
-          "type": "string"
-        },
         "end": {
           "description": "The end position of the range on the reference, 0-based exclusive. If\nreferenceId or\nreferenceName\nmust be specified, Defaults to the length of the reference.",
           "format": "int64",
@@ -3537,250 +3765,18 @@
         "referenceName": {
           "description": "The name of the reference to query, within the reference set associated\nwith this query.",
           "type": "string"
-        }
-      }
-    },
-    "OperationEvent": {
-      "id": "OperationEvent",
-      "description": "An event that occurred during an Operation.",
-      "type": "object",
-      "properties": {
-        "endTime": {
-          "description": "Optional time of when event finished. An event can have a start time and no\nfinish time. If an event has a finish time, there must be a start time.",
-          "format": "google-datetime",
-          "type": "string"
         },
-        "startTime": {
-          "description": "Optional time of when event started.",
-          "format": "google-datetime",
-          "type": "string"
-        },
-        "description": {
-          "description": "Required description of event.",
-          "type": "string"
-        }
-      }
-    },
-    "CodingSequence": {
-      "id": "CodingSequence",
-      "type": "object",
-      "properties": {
-        "start": {
-          "description": "The start of the coding sequence on this annotation's reference sequence,\n0-based inclusive. Note that this position is relative to the reference\nstart, and *not* the containing annotation start.",
-          "format": "int64",
-          "type": "string"
-        },
-        "end": {
-          "description": "The end of the coding sequence on this annotation's reference sequence,\n0-based exclusive. Note that this position is relative to the reference\nstart, and *not* the containing annotation start.",
-          "format": "int64",
-          "type": "string"
-        }
-      }
-    },
-    "SearchReferencesResponse": {
-      "id": "SearchReferencesResponse",
-      "type": "object",
-      "properties": {
-        "references": {
-          "description": "The matching references.",
-          "type": "array",
-          "items": {
-            "$ref": "Reference"
-          }
-        },
-        "nextPageToken": {
-          "description": "The continuation token, which is used to page through large result sets.\nProvide this value in a subsequent request to return the next page of\nresults. This field will be empty if there aren't any additional results.",
-          "type": "string"
-        }
-      }
-    },
-    "GetIamPolicyRequest": {
-      "id": "GetIamPolicyRequest",
-      "description": "Request message for `GetIamPolicy` method.",
-      "type": "object",
-      "properties": {}
-    },
-    "TestIamPermissionsResponse": {
-      "description": "Response message for `TestIamPermissions` method.",
-      "type": "object",
-      "properties": {
-        "permissions": {
-          "description": "A subset of `TestPermissionsRequest.permissions` that the caller is\nallowed.",
-          "type": "array",
-          "items": {
-            "type": "string"
-          }
-        }
-      },
-      "id": "TestIamPermissionsResponse"
-    },
-    "SearchAnnotationSetsRequest": {
-      "id": "SearchAnnotationSetsRequest",
-      "type": "object",
-      "properties": {
-        "name": {
-          "description": "Only return annotations sets for which a substring of the name matches this\nstring (case insensitive).",
-          "type": "string"
-        },
-        "referenceSetId": {
-          "description": "If specified, only annotation sets associated with the given reference set\nare returned.",
-          "type": "string"
-        },
-        "pageToken": {
-          "description": "The continuation token, which is used to page through large result sets.\nTo get the next page of results, set this parameter to the value of\n`nextPageToken` from the previous response.",
-          "type": "string"
-        },
-        "pageSize": {
-          "description": "The maximum number of results to return in a single page. If unspecified,\ndefaults to 128. The maximum value is 1024.",
-          "format": "int32",
-          "type": "integer"
-        },
-        "datasetIds": {
-          "description": "Required. The dataset IDs to search within. Caller must have `READ` access\nto these datasets.",
-          "type": "array",
-          "items": {
-            "type": "string"
-          }
-        },
-        "types": {
-          "description": "If specified, only annotation sets that have any of these types are\nreturned.",
-          "type": "array",
-          "items": {
-            "enum": [
-              "ANNOTATION_TYPE_UNSPECIFIED",
-              "GENERIC",
-              "VARIANT",
-              "GENE",
-              "TRANSCRIPT"
-            ],
-            "type": "string"
-          },
-          "enumDescriptions": [
-            "",
-            "A `GENERIC` annotation type should be used when no other annotation\ntype will suffice. This represents an untyped annotation of the reference\ngenome.",
-            "A `VARIANT` annotation type.",
-            "A `GENE` annotation type represents the existence of a gene at the\nassociated reference coordinates. The start coordinate is typically the\ngene's transcription start site and the end is typically the end of the\ngene's last exon.",
-            "A `TRANSCRIPT` annotation type represents the assertion that a\nparticular region of the reference genome may be transcribed as RNA."
-          ]
-        }
-      }
-    },
-    "SearchReadGroupSetsResponse": {
-      "description": "The read group set search response.",
-      "type": "object",
-      "properties": {
-        "readGroupSets": {
-          "description": "The list of matching read group sets.",
-          "type": "array",
-          "items": {
-            "$ref": "ReadGroupSet"
-          }
-        },
-        "nextPageToken": {
-          "description": "The continuation token, which is used to page through large result sets.\nProvide this value in a subsequent request to return the next page of\nresults. This field will be empty if there aren't any additional results.",
+        "referenceId": {
+          "description": "The ID of the reference to query.",
           "type": "string"
         }
       },
-      "id": "SearchReadGroupSetsResponse"
-    },
-    "SearchReferencesRequest": {
-      "type": "object",
-      "properties": {
-        "md5checksums": {
-          "description": "If present, return references for which the\nmd5checksum matches exactly.",
-          "type": "array",
-          "items": {
-            "type": "string"
-          }
-        },
-        "accessions": {
-          "description": "If present, return references for which a prefix of any of\nsourceAccessions match\nany of these strings. Accession numbers typically have a main number and a\nversion, for example `GCF_000001405.26`.",
-          "type": "array",
-          "items": {
-            "type": "string"
-          }
-        },
-        "pageToken": {
-          "description": "The continuation token, which is used to page through large result sets.\nTo get the next page of results, set this parameter to the value of\n`nextPageToken` from the previous response.",
-          "type": "string"
-        },
-        "referenceSetId": {
-          "description": "If present, return only references which belong to this reference set.",
-          "type": "string"
-        },
-        "pageSize": {
-          "description": "The maximum number of results to return in a single page. If unspecified,\ndefaults to 1024. The maximum value is 4096.",
-          "format": "int32",
-          "type": "integer"
-        }
-      },
-      "id": "SearchReferencesRequest"
-    },
-    "LinearAlignment": {
-      "description": "A linear alignment can be represented by one CIGAR string. Describes the\nmapped position and local alignment of the read to the reference.",
-      "type": "object",
-      "properties": {
-        "position": {
-          "description": "The position of this alignment.",
-          "$ref": "Position"
-        },
-        "cigar": {
-          "description": "Represents the local alignment of this sequence (alignment matches, indels,\netc) against the reference.",
-          "type": "array",
-          "items": {
-            "$ref": "CigarUnit"
-          }
-        },
-        "mappingQuality": {
-          "description": "The mapping quality of this alignment. Represents how likely\nthe read maps to this position as opposed to other locations.\n\nSpecifically, this is -10 log10 Pr(mapping position is wrong), rounded to\nthe nearest integer.",
-          "format": "int32",
-          "type": "integer"
-        }
-      },
-      "id": "LinearAlignment"
-    },
-    "Dataset": {
-      "description": "A Dataset is a collection of genomic data.\n\nFor more genomics resource definitions, see [Fundamentals of Google\nGenomics](https://cloud.google.com/genomics/fundamentals-of-google-genomics)",
-      "type": "object",
-      "properties": {
-        "id": {
-          "description": "The server-generated dataset ID, unique across all datasets.",
-          "type": "string"
-        },
-        "createTime": {
-          "description": "The time this dataset was created, in seconds from the epoch.",
-          "format": "google-datetime",
-          "type": "string"
-        },
-        "name": {
-          "description": "The dataset name.",
-          "type": "string"
-        },
-        "projectId": {
-          "description": "The Google Cloud project ID that this dataset belongs to.",
-          "type": "string"
-        }
-      },
-      "id": "Dataset"
-    },
-    "ImportVariantsResponse": {
-      "id": "ImportVariantsResponse",
-      "description": "The variant data import response.",
-      "type": "object",
-      "properties": {
-        "callSetIds": {
-          "description": "IDs of the call sets created during the import.",
-          "type": "array",
-          "items": {
-            "type": "string"
-          }
-        }
-      }
+      "id": "SearchAnnotationsRequest"
     }
   },
   "icons": {
-    "x16": "http://www.google.com/images/icons/product/search-16.gif",
-    "x32": "http://www.google.com/images/icons/product/search-32.gif"
+    "x32": "http://www.google.com/images/icons/product/search-32.gif",
+    "x16": "http://www.google.com/images/icons/product/search-16.gif"
   },
   "protocol": "rest",
   "version": "v1",
@@ -3788,12 +3784,6 @@
   "auth": {
     "oauth2": {
       "scopes": {
-        "https://www.googleapis.com/auth/bigquery": {
-          "description": "View and manage your data in Google BigQuery"
-        },
-        "https://www.googleapis.com/auth/devstorage.read_write": {
-          "description": "Manage your data in Google Cloud Storage"
-        },
         "https://www.googleapis.com/auth/cloud-platform": {
           "description": "View and manage your data across Google Cloud Platform services"
         },
@@ -3802,16 +3792,26 @@
         },
         "https://www.googleapis.com/auth/genomics": {
           "description": "View and manage Genomics data"
+        },
+        "https://www.googleapis.com/auth/bigquery": {
+          "description": "View and manage your data in Google BigQuery"
+        },
+        "https://www.googleapis.com/auth/devstorage.read_write": {
+          "description": "Manage your data in Google Cloud Storage"
         }
       }
     }
   },
   "kind": "discovery#restDescription",
-  "description": "Upload, process, query, and search Genomics data in the cloud.",
   "servicePath": "",
+  "description": "Upload, process, query, and search Genomics data in the cloud.",
   "rootUrl": "https://genomics.googleapis.com/",
   "basePath": "",
   "ownerDomain": "google.com",
   "name": "genomics",
-  "batchPath": "batch"
+  "batchPath": "batch",
+  "revision": "20170322",
+  "documentationLink": "https://cloud.google.com/genomics",
+  "id": "genomics:v1",
+  "title": "Genomics API"
 }
diff --git a/genomics/v1/genomics-gen.go b/genomics/v1/genomics-gen.go
index e85c53d..35780f1 100644
--- a/genomics/v1/genomics-gen.go
+++ b/genomics/v1/genomics-gen.go
@@ -83,10 +83,9 @@
 }
 
 type Service struct {
-	client                    *http.Client
-	BasePath                  string // API endpoint base URL
-	UserAgent                 string // optional additional User-Agent fragment
-	GoogleClientHeaderElement string // client header fragment, for Google use only
+	client    *http.Client
+	BasePath  string // API endpoint base URL
+	UserAgent string // optional additional User-Agent fragment
 
 	Annotations *AnnotationsService
 
@@ -118,10 +117,6 @@
 	return googleapi.UserAgent + " " + s.UserAgent
 }
 
-func (s *Service) clientHeader() string {
-	return gensupport.GoogleClientHeader("20170210", s.GoogleClientHeaderElement)
-}
-
 func NewAnnotationsService(s *Service) *AnnotationsService {
 	rs := &AnnotationsService{s: s}
 	return rs
@@ -4482,7 +4477,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	var body io.Reader = nil
 	body, err := googleapi.WithoutDataWrapper.JSONReader(c.batchcreateannotationsrequest)
 	if err != nil {
@@ -4629,7 +4623,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	var body io.Reader = nil
 	body, err := googleapi.WithoutDataWrapper.JSONReader(c.annotation)
 	if err != nil {
@@ -4753,7 +4746,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	var body io.Reader = nil
 	c.urlParams_.Set("alt", alt)
 	urls := googleapi.ResolveRelative(c.s.BasePath, "v1/annotations/{annotationId}")
@@ -4891,7 +4883,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	if c.ifNoneMatch_ != "" {
 		reqHeaders.Set("If-None-Match", c.ifNoneMatch_)
 	}
@@ -5033,7 +5024,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	var body io.Reader = nil
 	body, err := googleapi.WithoutDataWrapper.JSONReader(c.searchannotationsrequest)
 	if err != nil {
@@ -5193,7 +5183,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	var body io.Reader = nil
 	body, err := googleapi.WithoutDataWrapper.JSONReader(c.annotation)
 	if err != nil {
@@ -5344,7 +5333,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	var body io.Reader = nil
 	body, err := googleapi.WithoutDataWrapper.JSONReader(c.annotationset)
 	if err != nil {
@@ -5468,7 +5456,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	var body io.Reader = nil
 	c.urlParams_.Set("alt", alt)
 	urls := googleapi.ResolveRelative(c.s.BasePath, "v1/annotationsets/{annotationSetId}")
@@ -5606,7 +5593,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	if c.ifNoneMatch_ != "" {
 		reqHeaders.Set("If-None-Match", c.ifNoneMatch_)
 	}
@@ -5744,7 +5730,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	var body io.Reader = nil
 	body, err := googleapi.WithoutDataWrapper.JSONReader(c.searchannotationsetsrequest)
 	if err != nil {
@@ -5906,7 +5891,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	var body io.Reader = nil
 	body, err := googleapi.WithoutDataWrapper.JSONReader(c.annotationset)
 	if err != nil {
@@ -6053,7 +6037,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	var body io.Reader = nil
 	body, err := googleapi.WithoutDataWrapper.JSONReader(c.callset)
 	if err != nil {
@@ -6182,7 +6165,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	var body io.Reader = nil
 	c.urlParams_.Set("alt", alt)
 	urls := googleapi.ResolveRelative(c.s.BasePath, "v1/callsets/{callSetId}")
@@ -6326,7 +6308,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	if c.ifNoneMatch_ != "" {
 		reqHeaders.Set("If-None-Match", c.ifNoneMatch_)
 	}
@@ -6478,7 +6459,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	var body io.Reader = nil
 	body, err := googleapi.WithoutDataWrapper.JSONReader(c.callset)
 	if err != nil {
@@ -6630,7 +6610,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	var body io.Reader = nil
 	body, err := googleapi.WithoutDataWrapper.JSONReader(c.searchcallsetsrequest)
 	if err != nil {
@@ -6781,7 +6760,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	var body io.Reader = nil
 	body, err := googleapi.WithoutDataWrapper.JSONReader(c.dataset)
 	if err != nil {
@@ -6917,7 +6895,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	var body io.Reader = nil
 	c.urlParams_.Set("alt", alt)
 	urls := googleapi.ResolveRelative(c.s.BasePath, "v1/datasets/{datasetId}")
@@ -7061,7 +7038,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	if c.ifNoneMatch_ != "" {
 		reqHeaders.Set("If-None-Match", c.ifNoneMatch_)
 	}
@@ -7206,7 +7182,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	var body io.Reader = nil
 	body, err := googleapi.WithoutDataWrapper.JSONReader(c.getiampolicyrequest)
 	if err != nil {
@@ -7382,7 +7357,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	if c.ifNoneMatch_ != "" {
 		reqHeaders.Set("If-None-Match", c.ifNoneMatch_)
 	}
@@ -7560,7 +7534,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	var body io.Reader = nil
 	body, err := googleapi.WithoutDataWrapper.JSONReader(c.dataset)
 	if err != nil {
@@ -7715,7 +7688,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	var body io.Reader = nil
 	body, err := googleapi.WithoutDataWrapper.JSONReader(c.setiampolicyrequest)
 	if err != nil {
@@ -7864,7 +7836,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	var body io.Reader = nil
 	body, err := googleapi.WithoutDataWrapper.JSONReader(c.testiampermissionsrequest)
 	if err != nil {
@@ -8012,7 +7983,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	var body io.Reader = nil
 	body, err := googleapi.WithoutDataWrapper.JSONReader(c.undeletedatasetrequest)
 	if err != nil {
@@ -8152,7 +8122,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	var body io.Reader = nil
 	body, err := googleapi.WithoutDataWrapper.JSONReader(c.canceloperationrequest)
 	if err != nil {
@@ -8302,7 +8271,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	if c.ifNoneMatch_ != "" {
 		reqHeaders.Set("If-None-Match", c.ifNoneMatch_)
 	}
@@ -8486,7 +8454,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	if c.ifNoneMatch_ != "" {
 		reqHeaders.Set("If-None-Match", c.ifNoneMatch_)
 	}
@@ -8660,7 +8627,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	var body io.Reader = nil
 	c.urlParams_.Set("alt", alt)
 	urls := googleapi.ResolveRelative(c.s.BasePath, "v1/readgroupsets/{readGroupSetId}")
@@ -8803,7 +8769,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	var body io.Reader = nil
 	body, err := googleapi.WithoutDataWrapper.JSONReader(c.exportreadgroupsetrequest)
 	if err != nil {
@@ -8956,7 +8921,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	if c.ifNoneMatch_ != "" {
 		reqHeaders.Set("If-None-Match", c.ifNoneMatch_)
 	}
@@ -9111,7 +9075,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	var body io.Reader = nil
 	body, err := googleapi.WithoutDataWrapper.JSONReader(c.importreadgroupsetsrequest)
 	if err != nil {
@@ -9259,7 +9222,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	var body io.Reader = nil
 	body, err := googleapi.WithoutDataWrapper.JSONReader(c.readgroupset)
 	if err != nil {
@@ -9411,7 +9373,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	var body io.Reader = nil
 	body, err := googleapi.WithoutDataWrapper.JSONReader(c.searchreadgroupsetsrequest)
 	if err != nil {
@@ -9649,7 +9610,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	if c.ifNoneMatch_ != "" {
 		reqHeaders.Set("If-None-Match", c.ifNoneMatch_)
 	}
@@ -9873,7 +9833,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	var body io.Reader = nil
 	body, err := googleapi.WithoutDataWrapper.JSONReader(c.searchreadsrequest)
 	if err != nil {
@@ -10040,7 +9999,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	if c.ifNoneMatch_ != "" {
 		reqHeaders.Set("If-None-Match", c.ifNoneMatch_)
 	}
@@ -10182,7 +10140,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	var body io.Reader = nil
 	body, err := googleapi.WithoutDataWrapper.JSONReader(c.searchreferencesrequest)
 	if err != nil {
@@ -10385,7 +10342,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	if c.ifNoneMatch_ != "" {
 		reqHeaders.Set("If-None-Match", c.ifNoneMatch_)
 	}
@@ -10582,7 +10538,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	if c.ifNoneMatch_ != "" {
 		reqHeaders.Set("If-None-Match", c.ifNoneMatch_)
 	}
@@ -10725,7 +10680,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	var body io.Reader = nil
 	body, err := googleapi.WithoutDataWrapper.JSONReader(c.searchreferencesetsrequest)
 	if err != nil {
@@ -10876,7 +10830,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	var body io.Reader = nil
 	body, err := googleapi.WithoutDataWrapper.JSONReader(c.variant)
 	if err != nil {
@@ -11005,7 +10958,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	var body io.Reader = nil
 	c.urlParams_.Set("alt", alt)
 	urls := googleapi.ResolveRelative(c.s.BasePath, "v1/variants/{variantId}")
@@ -11149,7 +11101,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	if c.ifNoneMatch_ != "" {
 		reqHeaders.Set("If-None-Match", c.ifNoneMatch_)
 	}
@@ -11308,7 +11259,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	var body io.Reader = nil
 	body, err := googleapi.WithoutDataWrapper.JSONReader(c.importvariantsrequest)
 	if err != nil {
@@ -11534,7 +11484,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	var body io.Reader = nil
 	body, err := googleapi.WithoutDataWrapper.JSONReader(c.mergevariantsrequest)
 	if err != nil {
@@ -11679,7 +11628,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	var body io.Reader = nil
 	body, err := googleapi.WithoutDataWrapper.JSONReader(c.variant)
 	if err != nil {
@@ -11831,7 +11779,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	var body io.Reader = nil
 	body, err := googleapi.WithoutDataWrapper.JSONReader(c.searchvariantsrequest)
 	if err != nil {
@@ -11988,7 +11935,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	var body io.Reader = nil
 	body, err := googleapi.WithoutDataWrapper.JSONReader(c.variantset)
 	if err != nil {
@@ -12119,7 +12065,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	var body io.Reader = nil
 	c.urlParams_.Set("alt", alt)
 	urls := googleapi.ResolveRelative(c.s.BasePath, "v1/variantsets/{variantSetId}")
@@ -12254,7 +12199,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	var body io.Reader = nil
 	body, err := googleapi.WithoutDataWrapper.JSONReader(c.exportvariantsetrequest)
 	if err != nil {
@@ -12407,7 +12351,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	if c.ifNoneMatch_ != "" {
 		reqHeaders.Set("If-None-Match", c.ifNoneMatch_)
 	}
@@ -12561,7 +12504,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	var body io.Reader = nil
 	body, err := googleapi.WithoutDataWrapper.JSONReader(c.variantset)
 	if err != nil {
@@ -12714,7 +12656,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	var body io.Reader = nil
 	body, err := googleapi.WithoutDataWrapper.JSONReader(c.searchvariantsetsrequest)
 	if err != nil {
diff --git a/genomics/v1alpha2/genomics-api.json b/genomics/v1alpha2/genomics-api.json
index 47f22f8..8530bec 100644
--- a/genomics/v1alpha2/genomics-api.json
+++ b/genomics/v1alpha2/genomics-api.json
@@ -1,134 +1,56 @@
 {
+  "version": "v1alpha2",
+  "baseUrl": "https://genomics.googleapis.com/",
+  "auth": {
+    "oauth2": {
+      "scopes": {
+        "https://www.googleapis.com/auth/compute": {
+          "description": "View and manage your Google Compute Engine resources"
+        },
+        "https://www.googleapis.com/auth/cloud-platform": {
+          "description": "View and manage your data across Google Cloud Platform services"
+        },
+        "https://www.googleapis.com/auth/genomics": {
+          "description": "View and manage Genomics data"
+        }
+      }
+    }
+  },
+  "description": "Upload, process, query, and search Genomics data in the cloud.",
+  "servicePath": "",
+  "kind": "discovery#restDescription",
+  "rootUrl": "https://genomics.googleapis.com/",
+  "basePath": "",
+  "ownerDomain": "google.com",
+  "name": "genomics",
+  "batchPath": "batch",
+  "documentationLink": "https://cloud.google.com/genomics",
+  "revision": "20170322",
+  "id": "genomics:v1alpha2",
+  "title": "Genomics API",
+  "discoveryVersion": "v1",
+  "ownerName": "Google",
   "resources": {
     "pipelines": {
       "methods": {
-        "setOperationStatus": {
-          "httpMethod": "PUT",
-          "parameterOrder": [],
-          "response": {
-            "$ref": "Empty"
-          },
-          "parameters": {},
-          "scopes": [
-            "https://www.googleapis.com/auth/cloud-platform",
-            "https://www.googleapis.com/auth/genomics"
-          ],
-          "flatPath": "v1alpha2/pipelines:setOperationStatus",
-          "id": "genomics.pipelines.setOperationStatus",
-          "path": "v1alpha2/pipelines:setOperationStatus",
-          "request": {
-            "$ref": "SetOperationStatusRequest"
-          },
-          "description": "Sets status of a given operation. Any new timestamps (as determined by\ndescription) are appended to TimestampEvents. Should only be called by VMs\ncreated by the Pipelines Service and not by end users."
-        },
-        "getControllerConfig": {
-          "httpMethod": "GET",
-          "response": {
-            "$ref": "ControllerConfig"
-          },
-          "parameterOrder": [],
-          "parameters": {
-            "operationId": {
-              "description": "The operation to retrieve controller configuration for.",
-              "type": "string",
-              "location": "query"
-            },
-            "validationToken": {
-              "location": "query",
-              "format": "uint64",
-              "type": "string"
-            }
-          },
-          "scopes": [
-            "https://www.googleapis.com/auth/cloud-platform",
-            "https://www.googleapis.com/auth/genomics"
-          ],
-          "flatPath": "v1alpha2/pipelines:getControllerConfig",
-          "id": "genomics.pipelines.getControllerConfig",
-          "path": "v1alpha2/pipelines:getControllerConfig",
-          "description": "Gets controller configuration information. Should only be called\nby VMs created by the Pipelines Service and not by end users."
-        },
-        "delete": {
-          "httpMethod": "DELETE",
-          "response": {
-            "$ref": "Empty"
-          },
-          "parameterOrder": [
-            "pipelineId"
-          ],
-          "parameters": {
-            "pipelineId": {
-              "location": "path",
-              "description": "Caller must have WRITE access to the project in which this pipeline\nis defined.",
-              "required": true,
-              "type": "string"
-            }
-          },
-          "scopes": [
-            "https://www.googleapis.com/auth/cloud-platform",
-            "https://www.googleapis.com/auth/genomics"
-          ],
-          "flatPath": "v1alpha2/pipelines/{pipelineId}",
-          "id": "genomics.pipelines.delete",
-          "path": "v1alpha2/pipelines/{pipelineId}",
-          "description": "Deletes a pipeline based on ID.\n\nCaller must have WRITE permission to the project."
-        },
-        "list": {
-          "description": "Lists pipelines.\n\nCaller must have READ permission to the project.",
-          "httpMethod": "GET",
-          "response": {
-            "$ref": "ListPipelinesResponse"
-          },
-          "parameterOrder": [],
-          "scopes": [
-            "https://www.googleapis.com/auth/cloud-platform",
-            "https://www.googleapis.com/auth/genomics"
-          ],
-          "parameters": {
-            "namePrefix": {
-              "location": "query",
-              "description": "Pipelines with names that match this prefix should be\nreturned.  If unspecified, all pipelines in the project, up to\n`pageSize`, will be returned.",
-              "type": "string"
-            },
-            "pageToken": {
-              "description": "Token to use to indicate where to start getting results.\nIf unspecified, returns the first page of results.",
-              "type": "string",
-              "location": "query"
-            },
-            "pageSize": {
-              "description": "Number of pipelines to return at once. Defaults to 256, and max\nis 2048.",
-              "format": "int32",
-              "type": "integer",
-              "location": "query"
-            },
-            "projectId": {
-              "description": "Required. The name of the project to search for pipelines. Caller\nmust have READ access to this project.",
-              "type": "string",
-              "location": "query"
-            }
-          },
-          "flatPath": "v1alpha2/pipelines",
-          "id": "genomics.pipelines.list",
-          "path": "v1alpha2/pipelines"
-        },
         "create": {
-          "id": "genomics.pipelines.create",
-          "path": "v1alpha2/pipelines",
           "request": {
             "$ref": "Pipeline"
           },
           "description": "Creates a pipeline that can be run later. Create takes a Pipeline that\nhas all fields other than `pipelineId` populated, and then returns\nthe same pipeline with `pipelineId` populated. This id can be used\nto run the pipeline.\n\nCaller must have WRITE permission to the project.",
-          "httpMethod": "POST",
-          "parameterOrder": [],
           "response": {
             "$ref": "Pipeline"
           },
+          "parameterOrder": [],
+          "httpMethod": "POST",
           "parameters": {},
           "scopes": [
             "https://www.googleapis.com/auth/cloud-platform",
             "https://www.googleapis.com/auth/genomics"
           ],
-          "flatPath": "v1alpha2/pipelines"
+          "flatPath": "v1alpha2/pipelines",
+          "path": "v1alpha2/pipelines",
+          "id": "genomics.pipelines.create"
         },
         "run": {
           "httpMethod": "POST",
@@ -151,13 +73,13 @@
           }
         },
         "get": {
+          "httpMethod": "GET",
           "response": {
             "$ref": "Pipeline"
           },
           "parameterOrder": [
             "pipelineId"
           ],
-          "httpMethod": "GET",
           "parameters": {
             "pipelineId": {
               "location": "path",
@@ -171,9 +93,118 @@
             "https://www.googleapis.com/auth/genomics"
           ],
           "flatPath": "v1alpha2/pipelines/{pipelineId}",
-          "path": "v1alpha2/pipelines/{pipelineId}",
           "id": "genomics.pipelines.get",
+          "path": "v1alpha2/pipelines/{pipelineId}",
           "description": "Retrieves a pipeline based on ID.\n\nCaller must have READ permission to the project."
+        },
+        "setOperationStatus": {
+          "path": "v1alpha2/pipelines:setOperationStatus",
+          "id": "genomics.pipelines.setOperationStatus",
+          "description": "Sets status of a given operation. Any new timestamps (as determined by\ndescription) are appended to TimestampEvents. Should only be called by VMs\ncreated by the Pipelines Service and not by end users.",
+          "request": {
+            "$ref": "SetOperationStatusRequest"
+          },
+          "response": {
+            "$ref": "Empty"
+          },
+          "parameterOrder": [],
+          "httpMethod": "PUT",
+          "scopes": [
+            "https://www.googleapis.com/auth/cloud-platform",
+            "https://www.googleapis.com/auth/genomics"
+          ],
+          "parameters": {},
+          "flatPath": "v1alpha2/pipelines:setOperationStatus"
+        },
+        "delete": {
+          "path": "v1alpha2/pipelines/{pipelineId}",
+          "id": "genomics.pipelines.delete",
+          "description": "Deletes a pipeline based on ID.\n\nCaller must have WRITE permission to the project.",
+          "response": {
+            "$ref": "Empty"
+          },
+          "parameterOrder": [
+            "pipelineId"
+          ],
+          "httpMethod": "DELETE",
+          "scopes": [
+            "https://www.googleapis.com/auth/cloud-platform",
+            "https://www.googleapis.com/auth/genomics"
+          ],
+          "parameters": {
+            "pipelineId": {
+              "description": "Caller must have WRITE access to the project in which this pipeline\nis defined.",
+              "required": true,
+              "type": "string",
+              "location": "path"
+            }
+          },
+          "flatPath": "v1alpha2/pipelines/{pipelineId}"
+        },
+        "getControllerConfig": {
+          "description": "Gets controller configuration information. Should only be called\nby VMs created by the Pipelines Service and not by end users.",
+          "response": {
+            "$ref": "ControllerConfig"
+          },
+          "parameterOrder": [],
+          "httpMethod": "GET",
+          "scopes": [
+            "https://www.googleapis.com/auth/cloud-platform",
+            "https://www.googleapis.com/auth/genomics"
+          ],
+          "parameters": {
+            "operationId": {
+              "description": "The operation to retrieve controller configuration for.",
+              "type": "string",
+              "location": "query"
+            },
+            "validationToken": {
+              "location": "query",
+              "format": "uint64",
+              "type": "string"
+            }
+          },
+          "flatPath": "v1alpha2/pipelines:getControllerConfig",
+          "path": "v1alpha2/pipelines:getControllerConfig",
+          "id": "genomics.pipelines.getControllerConfig"
+        },
+        "list": {
+          "httpMethod": "GET",
+          "response": {
+            "$ref": "ListPipelinesResponse"
+          },
+          "parameterOrder": [],
+          "parameters": {
+            "namePrefix": {
+              "location": "query",
+              "description": "Pipelines with names that match this prefix should be\nreturned.  If unspecified, all pipelines in the project, up to\n`pageSize`, will be returned.",
+              "type": "string"
+            },
+            "pageToken": {
+              "description": "Token to use to indicate where to start getting results.\nIf unspecified, returns the first page of results.",
+              "type": "string",
+              "location": "query"
+            },
+            "pageSize": {
+              "location": "query",
+              "description": "Number of pipelines to return at once. Defaults to 256, and max\nis 2048.",
+              "format": "int32",
+              "type": "integer"
+            },
+            "projectId": {
+              "location": "query",
+              "description": "Required. The name of the project to search for pipelines. Caller\nmust have READ access to this project.",
+              "type": "string"
+            }
+          },
+          "scopes": [
+            "https://www.googleapis.com/auth/cloud-platform",
+            "https://www.googleapis.com/auth/genomics"
+          ],
+          "flatPath": "v1alpha2/pipelines",
+          "id": "genomics.pipelines.list",
+          "path": "v1alpha2/pipelines",
+          "description": "Lists pipelines.\n\nCaller must have READ permission to the project."
         }
       }
     },
@@ -187,10 +218,6 @@
             "name"
           ],
           "httpMethod": "POST",
-          "scopes": [
-            "https://www.googleapis.com/auth/cloud-platform",
-            "https://www.googleapis.com/auth/genomics"
-          ],
           "parameters": {
             "name": {
               "pattern": "^operations/.+$",
@@ -200,37 +227,39 @@
               "type": "string"
             }
           },
+          "scopes": [
+            "https://www.googleapis.com/auth/cloud-platform",
+            "https://www.googleapis.com/auth/genomics"
+          ],
           "flatPath": "v1alpha2/operations/{operationsId}:cancel",
           "path": "v1alpha2/{+name}:cancel",
           "id": "genomics.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. Clients may use Operations.GetOperation or Operations.ListOperations to check whether the cancellation succeeded or the operation completed despite cancellation.",
           "request": {
             "$ref": "CancelOperationRequest"
-          }
+          },
+          "description": "Starts asynchronous cancellation on a long-running operation. The server makes a best effort to cancel the operation, but success is not guaranteed. Clients may use Operations.GetOperation or Operations.ListOperations to check whether the cancellation succeeded or the operation completed despite cancellation."
         },
         "list": {
-          "id": "genomics.operations.list",
-          "path": "v1alpha2/{+name}",
           "description": "Lists operations that match the specified filter in the request.",
-          "httpMethod": "GET",
           "response": {
             "$ref": "ListOperationsResponse"
           },
           "parameterOrder": [
             "name"
           ],
+          "httpMethod": "GET",
           "parameters": {
             "filter": {
+              "location": "query",
               "description": "A string for filtering Operations.\nThe following filter fields are supported&#58;\n\n* projectId&#58; Required. Corresponds to\n  OperationMetadata.projectId.\n* createTime&#58; The time this job was created, in seconds from the\n  [epoch](http://en.wikipedia.org/wiki/Unix_time). Can use `\u003e=` and/or `\u003c=`\n  operators.\n* status&#58; Can be `RUNNING`, `SUCCESS`, `FAILURE`, or `CANCELED`. Only\n  one status may be specified.\n* labels.key where key is a label key.\n\nExamples&#58;\n\n* `projectId = my-project AND createTime \u003e= 1432140000`\n* `projectId = my-project AND createTime \u003e= 1432140000 AND createTime \u003c= 1432150000 AND status = RUNNING`\n* `projectId = my-project AND labels.color = *`\n* `projectId = my-project AND labels.color = red`",
-              "type": "string",
-              "location": "query"
+              "type": "string"
             },
             "name": {
-              "pattern": "^operations$",
-              "location": "path",
               "description": "The name of the operation collection.",
               "required": true,
-              "type": "string"
+              "type": "string",
+              "pattern": "^operations$",
+              "location": "path"
             },
             "pageToken": {
               "location": "query",
@@ -238,77 +267,106 @@
               "type": "string"
             },
             "pageSize": {
-              "location": "query",
               "description": "The maximum number of results to return. If unspecified, defaults to\n256. The maximum value is 2048.",
               "format": "int32",
-              "type": "integer"
+              "type": "integer",
+              "location": "query"
             }
           },
           "scopes": [
             "https://www.googleapis.com/auth/cloud-platform",
             "https://www.googleapis.com/auth/genomics"
           ],
-          "flatPath": "v1alpha2/operations"
+          "flatPath": "v1alpha2/operations",
+          "path": "v1alpha2/{+name}",
+          "id": "genomics.operations.list"
         },
         "get": {
-          "description": "Gets the latest state of a long-running operation.  Clients can use this\nmethod to poll the operation result at intervals as recommended by the API\nservice.",
-          "httpMethod": "GET",
           "response": {
             "$ref": "Operation"
           },
           "parameterOrder": [
             "name"
           ],
-          "parameters": {
-            "name": {
-              "description": "The name of the operation resource.",
-              "required": true,
-              "type": "string",
-              "pattern": "^operations/.+$",
-              "location": "path"
-            }
-          },
+          "httpMethod": "GET",
           "scopes": [
             "https://www.googleapis.com/auth/cloud-platform",
             "https://www.googleapis.com/auth/genomics"
           ],
+          "parameters": {
+            "name": {
+              "pattern": "^operations/.+$",
+              "location": "path",
+              "description": "The name of the operation resource.",
+              "required": true,
+              "type": "string"
+            }
+          },
           "flatPath": "v1alpha2/operations/{operationsId}",
+          "path": "v1alpha2/{+name}",
           "id": "genomics.operations.get",
-          "path": "v1alpha2/{+name}"
+          "description": "Gets the latest state of a long-running operation.  Clients can use this\nmethod to poll the operation result at intervals as recommended by the API\nservice."
         }
       }
     }
   },
   "parameters": {
+    "oauth_token": {
+      "location": "query",
+      "description": "OAuth 2.0 token for the current user.",
+      "type": "string"
+    },
+    "bearer_token": {
+      "description": "OAuth bearer token.",
+      "type": "string",
+      "location": "query"
+    },
+    "upload_protocol": {
+      "location": "query",
+      "description": "Upload protocol for media (e.g. \"raw\", \"multipart\").",
+      "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"
+    },
     "fields": {
       "description": "Selector specifying which fields to include in a partial response.",
       "type": "string",
       "location": "query"
     },
-    "uploadType": {
-      "location": "query",
-      "description": "Legacy upload protocol for media (e.g. \"media\", \"multipart\").",
-      "type": "string"
-    },
     "$.xgafv": {
-      "enumDescriptions": [
-        "v1 error format",
-        "v2 error format"
-      ],
-      "location": "query",
       "enum": [
         "1",
         "2"
       ],
       "description": "V1 error format.",
-      "type": "string"
+      "type": "string",
+      "enumDescriptions": [
+        "v1 error format",
+        "v2 error format"
+      ],
+      "location": "query"
     },
     "callback": {
-      "location": "query",
       "description": "JSONP",
-      "type": "string"
+      "type": "string",
+      "location": "query"
     },
     "alt": {
+      "enum": [
+        "json",
+        "media",
+        "proto"
+      ],
+      "type": "string",
       "enumDescriptions": [
         "Responses with Content-Type of application/json",
         "Media download with context-dependent Content-Type",
@@ -316,13 +374,7 @@
       ],
       "location": "query",
       "description": "Data format for response.",
-      "default": "json",
-      "enum": [
-        "json",
-        "media",
-        "proto"
-      ],
-      "type": "string"
+      "default": "json"
     },
     "access_token": {
       "location": "query",
@@ -330,9 +382,9 @@
       "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"
+      "type": "string",
+      "location": "query"
     },
     "quotaUser": {
       "location": "query",
@@ -340,31 +392,10 @@
       "type": "string"
     },
     "pp": {
+      "location": "query",
       "description": "Pretty-print response.",
       "type": "boolean",
-      "default": "true",
-      "location": "query"
-    },
-    "oauth_token": {
-      "location": "query",
-      "description": "OAuth 2.0 token for the current user.",
-      "type": "string"
-    },
-    "bearer_token": {
-      "location": "query",
-      "description": "OAuth bearer token.",
-      "type": "string"
-    },
-    "upload_protocol": {
-      "description": "Upload protocol for media (e.g. \"raw\", \"multipart\").",
-      "type": "string",
-      "location": "query"
-    },
-    "prettyPrint": {
-      "description": "Returns response with indentations and line breaks.",
-      "type": "boolean",
-      "default": "true",
-      "location": "query"
+      "default": "true"
     }
   },
   "schemas": {
@@ -392,42 +423,55 @@
       "id": "PipelineParameter"
     },
     "LoggingOptions": {
-      "description": "The logging options for the pipeline run.",
-      "type": "object",
       "properties": {
         "gcsPath": {
           "description": "The location in Google Cloud Storage to which the pipeline logs\nwill be copied. Can be specified as a fully qualified directory\npath, in which case logs will be output with a unique identifier\nas the filename in that directory, or as a fully specified path,\nwhich must end in `.log`, in which case that path will be\nused, and the user must ensure that logs are not\noverwritten. Stdout and stderr logs from the run are also\ngenerated and output as `-stdout.log` and `-stderr.log`.",
           "type": "string"
         }
       },
-      "id": "LoggingOptions"
+      "id": "LoggingOptions",
+      "description": "The logging options for the pipeline run.",
+      "type": "object"
     },
     "RunPipelineRequest": {
       "description": "The request to run a pipeline. If `pipelineId` is specified, it\nrefers to a saved pipeline created with CreatePipeline and set as\nthe `pipelineId` of the returned Pipeline object. If\n`ephemeralPipeline` is specified, that pipeline is run once\nwith the given args and not saved. It is an error to specify both\n`pipelineId` and `ephemeralPipeline`. `pipelineArgs`\nmust be specified.",
       "type": "object",
       "properties": {
+        "ephemeralPipeline": {
+          "$ref": "Pipeline",
+          "description": "A new pipeline object to run once and then delete."
+        },
         "pipelineArgs": {
-          "description": "The arguments to use when running this pipeline.",
-          "$ref": "RunPipelineArgs"
+          "$ref": "RunPipelineArgs",
+          "description": "The arguments to use when running this pipeline."
         },
         "pipelineId": {
           "description": "The already created pipeline to run.",
           "type": "string"
-        },
-        "ephemeralPipeline": {
-          "description": "A new pipeline object to run once and then delete.",
-          "$ref": "Pipeline"
         }
       },
       "id": "RunPipelineRequest"
     },
     "CancelOperationRequest": {
-      "properties": {},
-      "id": "CancelOperationRequest",
       "description": "The request message for Operations.CancelOperation.",
-      "type": "object"
+      "type": "object",
+      "properties": {},
+      "id": "CancelOperationRequest"
+    },
+    "RuntimeMetadata": {
+      "description": "Runtime metadata that will be populated in the\nruntimeMetadata\nfield of the Operation associated with a RunPipeline execution.",
+      "type": "object",
+      "properties": {
+        "computeEngine": {
+          "$ref": "ComputeEngine",
+          "description": "Execution information specific to Google Compute Engine."
+        }
+      },
+      "id": "RuntimeMetadata"
     },
     "Operation": {
+      "description": "This resource represents a long-running operation that is the result of a\nnetwork API call.",
+      "type": "object",
       "properties": {
         "done": {
           "description": "If the value is `false`, it means the operation is still in progress.\nIf true, the operation is completed, and either `error` or `response` is\navailable.",
@@ -458,20 +502,7 @@
           "type": "object"
         }
       },
-      "id": "Operation",
-      "description": "This resource represents a long-running operation that is the result of a\nnetwork API call.",
-      "type": "object"
-    },
-    "RuntimeMetadata": {
-      "description": "Runtime metadata that will be populated in the\nruntimeMetadata\nfield of the Operation associated with a RunPipeline execution.",
-      "type": "object",
-      "properties": {
-        "computeEngine": {
-          "$ref": "ComputeEngine",
-          "description": "Execution information specific to Google Compute Engine."
-        }
-      },
-      "id": "RuntimeMetadata"
+      "id": "Operation"
     },
     "ImportReadGroupSetsResponse": {
       "description": "The read group set import response.",
@@ -532,50 +563,6 @@
       "description": "A Google Cloud Service Account.",
       "type": "object"
     },
-    "PipelineResources": {
-      "properties": {
-        "minimumRamGb": {
-          "description": "The minimum amount of RAM to use. Defaults to 3.75 (GB)",
-          "format": "double",
-          "type": "number"
-        },
-        "preemptible": {
-          "description": "Whether to use preemptible VMs. Defaults to `false`. In order to use this,\nmust be true for both create time and run time. Cannot be true at run time\nif false at create time.",
-          "type": "boolean"
-        },
-        "zones": {
-          "description": "List of Google Compute Engine availability zones to which resource\ncreation will restricted. If empty, any zone may be chosen.",
-          "type": "array",
-          "items": {
-            "type": "string"
-          }
-        },
-        "minimumCpuCores": {
-          "description": "The minimum number of cores to use. Defaults to 1.",
-          "format": "int32",
-          "type": "integer"
-        },
-        "noAddress": {
-          "description": "Whether to assign an external IP to the instance. This is an experimental\nfeature that may go away. Defaults to false.\nCorresponds to `--no_address` flag for [gcloud compute instances create]\n(https://cloud.google.com/sdk/gcloud/reference/compute/instances/create).\nIn order to use this, must be true for both create time and run time.\nCannot be true at run time if false at create time. If you need to ssh into\na private IP VM for debugging, you can ssh to a public VM and then ssh into\nthe private VM's Internal IP.  If noAddress is set, this pipeline run may\nonly load docker images from Google Container Registry and not Docker Hub.\nBefore using this, you must\n[configure access to Google services from internal IPs](https://cloud.google.com/compute/docs/configure-private-google-access#configuring_access_to_google_services_from_internal_ips).",
-          "type": "boolean"
-        },
-        "disks": {
-          "description": "Disks to attach.",
-          "type": "array",
-          "items": {
-            "$ref": "Disk"
-          }
-        },
-        "bootDiskSizeGb": {
-          "description": "The size of the boot disk. Defaults to 10 (GB).",
-          "format": "int32",
-          "type": "integer"
-        }
-      },
-      "id": "PipelineResources",
-      "description": "The system resources for the pipeline run.",
-      "type": "object"
-    },
     "Pipeline": {
       "properties": {
         "outputParameters": {
@@ -586,8 +573,8 @@
           }
         },
         "docker": {
-          "description": "Specifies the docker run information.",
-          "$ref": "DockerExecutor"
+          "$ref": "DockerExecutor",
+          "description": "Specifies the docker run information."
         },
         "description": {
           "description": "User-specified description.",
@@ -621,19 +608,73 @@
       "description": "The pipeline object. Represents a transformation from a set of input\nparameters to a set of output parameters. The transformation is defined\nas a docker image and command to run within that image. Each pipeline\nis run on a Google Compute Engine VM. A pipeline can be created with the\n`create` method and then later run with the `run` method, or a pipeline can\nbe defined and run all at once with the `run` method.",
       "type": "object"
     },
-    "ControllerConfig": {
-      "description": "Stores the information that the controller will fetch from the\nserver in order to run. Should only be used by VMs created by the\nPipelines Service and not by end users.",
+    "PipelineResources": {
+      "properties": {
+        "bootDiskSizeGb": {
+          "description": "The size of the boot disk. Defaults to 10 (GB).",
+          "format": "int32",
+          "type": "integer"
+        },
+        "preemptible": {
+          "description": "Whether to use preemptible VMs. Defaults to `false`. In order to use this,\nmust be true for both create time and run time. Cannot be true at run time\nif false at create time.",
+          "type": "boolean"
+        },
+        "minimumRamGb": {
+          "description": "The minimum amount of RAM to use. Defaults to 3.75 (GB)",
+          "format": "double",
+          "type": "number"
+        },
+        "zones": {
+          "description": "List of Google Compute Engine availability zones to which resource\ncreation will restricted. If empty, any zone may be chosen.",
+          "type": "array",
+          "items": {
+            "type": "string"
+          }
+        },
+        "minimumCpuCores": {
+          "description": "The minimum number of cores to use. Defaults to 1.",
+          "format": "int32",
+          "type": "integer"
+        },
+        "noAddress": {
+          "description": "Whether to assign an external IP to the instance. This is an experimental\nfeature that may go away. Defaults to false.\nCorresponds to `--no_address` flag for [gcloud compute instances create]\n(https://cloud.google.com/sdk/gcloud/reference/compute/instances/create).\nIn order to use this, must be true for both create time and run time.\nCannot be true at run time if false at create time. If you need to ssh into\na private IP VM for debugging, you can ssh to a public VM and then ssh into\nthe private VM's Internal IP.  If noAddress is set, this pipeline run may\nonly load docker images from Google Container Registry and not Docker Hub.\nBefore using this, you must\n[configure access to Google services from internal IPs](https://cloud.google.com/compute/docs/configure-private-google-access#configuring_access_to_google_services_from_internal_ips).",
+          "type": "boolean"
+        },
+        "disks": {
+          "description": "Disks to attach.",
+          "type": "array",
+          "items": {
+            "$ref": "Disk"
+          }
+        }
+      },
+      "id": "PipelineResources",
+      "description": "The system resources for the pipeline run.",
+      "type": "object"
+    },
+    "OperationEvent": {
+      "description": "An event that occurred during an Operation.",
       "type": "object",
       "properties": {
-        "vars": {
-          "additionalProperties": {
-            "type": "string"
-          },
-          "type": "object"
-        },
-        "image": {
+        "startTime": {
+          "description": "Optional time of when event started.",
+          "format": "google-datetime",
           "type": "string"
         },
+        "description": {
+          "description": "Required description of event.",
+          "type": "string"
+        },
+        "endTime": {
+          "description": "Optional time of when event finished. An event can have a start time and no\nfinish time. If an event has a finish time, there must be a start time.",
+          "format": "google-datetime",
+          "type": "string"
+        }
+      },
+      "id": "OperationEvent"
+    },
+    "ControllerConfig": {
+      "properties": {
         "gcsLogPath": {
           "type": "string"
         },
@@ -660,46 +701,22 @@
         },
         "cmd": {
           "type": "string"
-        }
-      },
-      "id": "ControllerConfig"
-    },
-    "OperationEvent": {
-      "description": "An event that occurred during an Operation.",
-      "type": "object",
-      "properties": {
-        "startTime": {
-          "description": "Optional time of when event started.",
-          "format": "google-datetime",
-          "type": "string"
         },
-        "description": {
-          "description": "Required description of event.",
-          "type": "string"
-        },
-        "endTime": {
-          "description": "Optional time of when event finished. An event can have a start time and no\nfinish time. If an event has a finish time, there must be a start time.",
-          "format": "google-datetime",
-          "type": "string"
-        }
-      },
-      "id": "OperationEvent"
-    },
-    "RepeatedString": {
-      "type": "object",
-      "properties": {
-        "values": {
-          "type": "array",
-          "items": {
+        "vars": {
+          "additionalProperties": {
             "type": "string"
-          }
+          },
+          "type": "object"
+        },
+        "image": {
+          "type": "string"
         }
       },
-      "id": "RepeatedString"
+      "id": "ControllerConfig",
+      "description": "Stores the information that the controller will fetch from the\nserver in order to run. Should only be used by VMs created by the\nPipelines Service and not by end users.",
+      "type": "object"
     },
     "ListOperationsResponse": {
-      "description": "The response message for Operations.ListOperations.",
-      "type": "object",
       "properties": {
         "nextPageToken": {
           "description": "The standard List next-page token.",
@@ -713,30 +730,26 @@
           }
         }
       },
-      "id": "ListOperationsResponse"
+      "id": "ListOperationsResponse",
+      "description": "The response message for Operations.ListOperations.",
+      "type": "object"
     },
-    "OperationMetadata": {
+    "RepeatedString": {
       "properties": {
-        "projectId": {
-          "description": "The Google Cloud Project in which the job is scoped.",
-          "type": "string"
-        },
-        "clientId": {
-          "description": "This field is deprecated. Use `labels` instead. Optionally provided by the\ncaller when submitting the request that creates the operation.",
-          "type": "string"
-        },
-        "endTime": {
-          "description": "The time at which the job stopped running.",
-          "format": "google-datetime",
-          "type": "string"
-        },
-        "events": {
-          "description": "Optional event messages that were generated during the job's execution.\nThis also contains any warnings that were generated during import\nor export.",
+        "values": {
           "type": "array",
           "items": {
-            "$ref": "OperationEvent"
+            "type": "string"
           }
-        },
+        }
+      },
+      "id": "RepeatedString",
+      "type": "object"
+    },
+    "OperationMetadata": {
+      "description": "Metadata describing an Operation.",
+      "type": "object",
+      "properties": {
         "startTime": {
           "description": "The time at which the job began to run.",
           "format": "google-datetime",
@@ -769,29 +782,29 @@
           "description": "The time at which the job was submitted to the Genomics service.",
           "format": "google-datetime",
           "type": "string"
-        }
-      },
-      "id": "OperationMetadata",
-      "description": "Metadata describing an Operation.",
-      "type": "object"
-    },
-    "ListPipelinesResponse": {
-      "properties": {
-        "nextPageToken": {
-          "description": "The token to use to get the next page of results.",
+        },
+        "projectId": {
+          "description": "The Google Cloud Project in which the job is scoped.",
           "type": "string"
         },
-        "pipelines": {
-          "description": "The matched pipelines.",
+        "clientId": {
+          "description": "This field is deprecated. Use `labels` instead. Optionally provided by the\ncaller when submitting the request that creates the operation.",
+          "type": "string"
+        },
+        "endTime": {
+          "description": "The time at which the job stopped running.",
+          "format": "google-datetime",
+          "type": "string"
+        },
+        "events": {
+          "description": "Optional event messages that were generated during the job's execution.\nThis also contains any warnings that were generated during import\nor export.",
           "type": "array",
           "items": {
-            "$ref": "Pipeline"
+            "$ref": "OperationEvent"
           }
         }
       },
-      "id": "ListPipelinesResponse",
-      "description": "The response of ListPipelines. Contains at most `pageSize`\npipelines. If it contains `pageSize` pipelines, and more pipelines\nexist, then `nextPageToken` will be populated and should be\nused as the `pageToken` argument to a subsequent ListPipelines\nrequest.",
-      "type": "object"
+      "id": "OperationMetadata"
     },
     "RunPipelineArgs": {
       "properties": {
@@ -800,8 +813,8 @@
           "type": "string"
         },
         "serviceAccount": {
-          "$ref": "ServiceAccount",
-          "description": "The Google Cloud Service Account that will be used to access data and\nservices. By default, the compute service account associated with\n`projectId` is used."
+          "description": "The Google Cloud Service Account that will be used to access data and\nservices. By default, the compute service account associated with\n`projectId` is used.",
+          "$ref": "ServiceAccount"
         },
         "inputs": {
           "additionalProperties": {
@@ -827,8 +840,8 @@
           "type": "string"
         },
         "resources": {
-          "description": "Specifies resource requirements/overrides for the pipeline run.",
-          "$ref": "PipelineResources"
+          "$ref": "PipelineResources",
+          "description": "Specifies resource requirements/overrides for the pipeline run."
         },
         "outputs": {
           "additionalProperties": {
@@ -846,28 +859,27 @@
       "description": "The pipeline run arguments.",
       "type": "object"
     },
+    "ListPipelinesResponse": {
+      "properties": {
+        "nextPageToken": {
+          "description": "The token to use to get the next page of results.",
+          "type": "string"
+        },
+        "pipelines": {
+          "description": "The matched pipelines.",
+          "type": "array",
+          "items": {
+            "$ref": "Pipeline"
+          }
+        }
+      },
+      "id": "ListPipelinesResponse",
+      "description": "The response of ListPipelines. Contains at most `pageSize`\npipelines. If it contains `pageSize` pipelines, and more pipelines\nexist, then `nextPageToken` will be populated and should be\nused as the `pageToken` argument to a subsequent ListPipelines\nrequest.",
+      "type": "object"
+    },
     "SetOperationStatusRequest": {
       "properties": {
         "errorCode": {
-          "enumDescriptions": [
-            "Not an error; returned on success\n\nHTTP Mapping: 200 OK",
-            "The operation was cancelled, typically by the caller.\n\nHTTP Mapping: 499 Client Closed Request",
-            "Unknown error.  For example, this error may be returned when\na `Status` value received from another address space belongs to\nan error space that is not known in this address space.  Also\nerrors raised by APIs that do not return enough error information\nmay be converted to this error.\n\nHTTP Mapping: 500 Internal Server Error",
-            "The client specified an invalid argument.  Note that this differs\nfrom `FAILED_PRECONDITION`.  `INVALID_ARGUMENT` indicates arguments\nthat are problematic regardless of the state of the system\n(e.g., a malformed file name).\n\nHTTP Mapping: 400 Bad Request",
-            "The deadline expired before the operation could complete. For operations\nthat change the state of the system, this error may be returned\neven if the operation has completed successfully.  For example, a\nsuccessful response from a server could have been delayed long\nenough for the deadline to expire.\n\nHTTP Mapping: 504 Gateway Timeout",
-            "Some requested entity (e.g., file or directory) was not found.\n\nNote to server developers: if a request is denied for an entire class\nof users, such as gradual feature rollout or undocumented whitelist,\n`NOT_FOUND` may be used. If a request is denied for some users within\na class of users, such as user-based access control, `PERMISSION_DENIED`\nmust be used.\n\nHTTP Mapping: 404 Not Found",
-            "The entity that a client attempted to create (e.g., file or directory)\nalready exists.\n\nHTTP Mapping: 409 Conflict",
-            "The caller does not have permission to execute the specified\noperation. `PERMISSION_DENIED` must not be used for rejections\ncaused by exhausting some resource (use `RESOURCE_EXHAUSTED`\ninstead for those errors). `PERMISSION_DENIED` must not be\nused if the caller can not be identified (use `UNAUTHENTICATED`\ninstead for those errors). This error code does not imply the\nrequest is valid or the requested entity exists or satisfies\nother pre-conditions.\n\nHTTP Mapping: 403 Forbidden",
-            "The request does not have valid authentication credentials for the\noperation.\n\nHTTP Mapping: 401 Unauthorized",
-            "Some resource has been exhausted, perhaps a per-user quota, or\nperhaps the entire file system is out of space.\n\nHTTP Mapping: 429 Too Many Requests",
-            "The operation was rejected because the system is not in a state\nrequired for the operation's execution.  For example, the directory\nto be deleted is non-empty, an rmdir operation is applied to\na non-directory, etc.\n\nService implementors can use the following guidelines to decide\nbetween `FAILED_PRECONDITION`, `ABORTED`, and `UNAVAILABLE`:\n (a) Use `UNAVAILABLE` if the client can retry just the failing call.\n (b) Use `ABORTED` if the client should retry at a higher level\n     (e.g., when a client-specified test-and-set fails, indicating the\n     client should restart a read-modify-write sequence).\n (c) Use `FAILED_PRECONDITION` if the client should not retry until\n     the system state has been explicitly fixed.  E.g., if an \"rmdir\"\n     fails because the directory is non-empty, `FAILED_PRECONDITION`\n     should be returned since the client should not retry unless\n     the files are deleted from the directory.\n\nHTTP Mapping: 400 Bad Request",
-            "The operation was aborted, typically due to a concurrency issue such as\na sequencer check failure or transaction abort.\n\nSee the guidelines above for deciding between `FAILED_PRECONDITION`,\n`ABORTED`, and `UNAVAILABLE`.\n\nHTTP Mapping: 409 Conflict",
-            "The operation was attempted past the valid range.  E.g., seeking or\nreading past end-of-file.\n\nUnlike `INVALID_ARGUMENT`, this error indicates a problem that may\nbe fixed if the system state changes. For example, a 32-bit file\nsystem will generate `INVALID_ARGUMENT` if asked to read at an\noffset that is not in the range [0,2^32-1], but it will generate\n`OUT_OF_RANGE` if asked to read from an offset past the current\nfile size.\n\nThere is a fair bit of overlap between `FAILED_PRECONDITION` and\n`OUT_OF_RANGE`.  We recommend using `OUT_OF_RANGE` (the more specific\nerror) when it applies so that callers who are iterating through\na space can easily look for an `OUT_OF_RANGE` error to detect when\nthey are done.\n\nHTTP Mapping: 400 Bad Request",
-            "The operation is not implemented or is not supported/enabled in this\nservice.\n\nHTTP Mapping: 501 Not Implemented",
-            "Internal errors.  This means that some invariants expected by the\nunderlying system have been broken.  This error code is reserved\nfor serious errors.\n\nHTTP Mapping: 500 Internal Server Error",
-            "The service is currently unavailable.  This is most likely a\ntransient condition, which can be corrected by retrying with\na backoff.\n\nSee the guidelines above for deciding between `FAILED_PRECONDITION`,\n`ABORTED`, and `UNAVAILABLE`.\n\nHTTP Mapping: 503 Service Unavailable",
-            "Unrecoverable data loss or corruption.\n\nHTTP Mapping: 500 Internal Server Error"
-          ],
           "enum": [
             "OK",
             "CANCELLED",
@@ -887,7 +899,26 @@
             "UNAVAILABLE",
             "DATA_LOSS"
           ],
-          "type": "string"
+          "type": "string",
+          "enumDescriptions": [
+            "Not an error; returned on success\n\nHTTP Mapping: 200 OK",
+            "The operation was cancelled, typically by the caller.\n\nHTTP Mapping: 499 Client Closed Request",
+            "Unknown error.  For example, this error may be returned when\na `Status` value received from another address space belongs to\nan error space that is not known in this address space.  Also\nerrors raised by APIs that do not return enough error information\nmay be converted to this error.\n\nHTTP Mapping: 500 Internal Server Error",
+            "The client specified an invalid argument.  Note that this differs\nfrom `FAILED_PRECONDITION`.  `INVALID_ARGUMENT` indicates arguments\nthat are problematic regardless of the state of the system\n(e.g., a malformed file name).\n\nHTTP Mapping: 400 Bad Request",
+            "The deadline expired before the operation could complete. For operations\nthat change the state of the system, this error may be returned\neven if the operation has completed successfully.  For example, a\nsuccessful response from a server could have been delayed long\nenough for the deadline to expire.\n\nHTTP Mapping: 504 Gateway Timeout",
+            "Some requested entity (e.g., file or directory) was not found.\n\nNote to server developers: if a request is denied for an entire class\nof users, such as gradual feature rollout or undocumented whitelist,\n`NOT_FOUND` may be used. If a request is denied for some users within\na class of users, such as user-based access control, `PERMISSION_DENIED`\nmust be used.\n\nHTTP Mapping: 404 Not Found",
+            "The entity that a client attempted to create (e.g., file or directory)\nalready exists.\n\nHTTP Mapping: 409 Conflict",
+            "The caller does not have permission to execute the specified\noperation. `PERMISSION_DENIED` must not be used for rejections\ncaused by exhausting some resource (use `RESOURCE_EXHAUSTED`\ninstead for those errors). `PERMISSION_DENIED` must not be\nused if the caller can not be identified (use `UNAUTHENTICATED`\ninstead for those errors). This error code does not imply the\nrequest is valid or the requested entity exists or satisfies\nother pre-conditions.\n\nHTTP Mapping: 403 Forbidden",
+            "The request does not have valid authentication credentials for the\noperation.\n\nHTTP Mapping: 401 Unauthorized",
+            "Some resource has been exhausted, perhaps a per-user quota, or\nperhaps the entire file system is out of space.\n\nHTTP Mapping: 429 Too Many Requests",
+            "The operation was rejected because the system is not in a state\nrequired for the operation's execution.  For example, the directory\nto be deleted is non-empty, an rmdir operation is applied to\na non-directory, etc.\n\nService implementors can use the following guidelines to decide\nbetween `FAILED_PRECONDITION`, `ABORTED`, and `UNAVAILABLE`:\n (a) Use `UNAVAILABLE` if the client can retry just the failing call.\n (b) Use `ABORTED` if the client should retry at a higher level\n     (e.g., when a client-specified test-and-set fails, indicating the\n     client should restart a read-modify-write sequence).\n (c) Use `FAILED_PRECONDITION` if the client should not retry until\n     the system state has been explicitly fixed.  E.g., if an \"rmdir\"\n     fails because the directory is non-empty, `FAILED_PRECONDITION`\n     should be returned since the client should not retry unless\n     the files are deleted from the directory.\n\nHTTP Mapping: 400 Bad Request",
+            "The operation was aborted, typically due to a concurrency issue such as\na sequencer check failure or transaction abort.\n\nSee the guidelines above for deciding between `FAILED_PRECONDITION`,\n`ABORTED`, and `UNAVAILABLE`.\n\nHTTP Mapping: 409 Conflict",
+            "The operation was attempted past the valid range.  E.g., seeking or\nreading past end-of-file.\n\nUnlike `INVALID_ARGUMENT`, this error indicates a problem that may\nbe fixed if the system state changes. For example, a 32-bit file\nsystem will generate `INVALID_ARGUMENT` if asked to read at an\noffset that is not in the range [0,2^32-1], but it will generate\n`OUT_OF_RANGE` if asked to read from an offset past the current\nfile size.\n\nThere is a fair bit of overlap between `FAILED_PRECONDITION` and\n`OUT_OF_RANGE`.  We recommend using `OUT_OF_RANGE` (the more specific\nerror) when it applies so that callers who are iterating through\na space can easily look for an `OUT_OF_RANGE` error to detect when\nthey are done.\n\nHTTP Mapping: 400 Bad Request",
+            "The operation is not implemented or is not supported/enabled in this\nservice.\n\nHTTP Mapping: 501 Not Implemented",
+            "Internal errors.  This means that some invariants expected by the\nunderlying system have been broken.  This error code is reserved\nfor serious errors.\n\nHTTP Mapping: 500 Internal Server Error",
+            "The service is currently unavailable.  This is most likely a\ntransient condition, which can be corrected by retrying with\na backoff.\n\nSee the guidelines above for deciding between `FAILED_PRECONDITION`,\n`ABORTED`, and `UNAVAILABLE`.\n\nHTTP Mapping: 503 Service Unavailable",
+            "Unrecoverable data loss or corruption.\n\nHTTP Mapping: 500 Internal Server Error"
+          ]
         },
         "timestampEvents": {
           "type": "array",
@@ -911,13 +942,7 @@
       "type": "object"
     },
     "ComputeEngine": {
-      "description": "Describes a Compute Engine resource that is being managed by a running\npipeline.",
-      "type": "object",
       "properties": {
-        "zone": {
-          "description": "The availability zone in which the instance resides.",
-          "type": "string"
-        },
         "machineType": {
           "description": "The machine type of the instance.",
           "type": "string"
@@ -932,13 +957,17 @@
         "instanceName": {
           "description": "The instance on which the operation is running.",
           "type": "string"
+        },
+        "zone": {
+          "description": "The availability zone in which the instance resides.",
+          "type": "string"
         }
       },
-      "id": "ComputeEngine"
+      "id": "ComputeEngine",
+      "description": "Describes a Compute Engine resource that is being managed by a running\npipeline.",
+      "type": "object"
     },
     "ImportVariantsResponse": {
-      "description": "The variant data import response.",
-      "type": "object",
       "properties": {
         "callSetIds": {
           "description": "IDs of the call sets created during the import.",
@@ -948,42 +977,42 @@
           }
         }
       },
-      "id": "ImportVariantsResponse"
+      "id": "ImportVariantsResponse",
+      "description": "The variant data import response.",
+      "type": "object"
     },
     "TimestampEvent": {
+      "description": "Stores the list of events and times they occured for major events in job\nexecution.",
+      "type": "object",
       "properties": {
+        "description": {
+          "description": "String indicating the type of event",
+          "type": "string"
+        },
         "timestamp": {
           "description": "The time this event occured.",
           "format": "google-datetime",
           "type": "string"
-        },
-        "description": {
-          "description": "String indicating the type of event",
-          "type": "string"
         }
       },
-      "id": "TimestampEvent",
-      "description": "Stores the list of events and times they occured for major events in job\nexecution.",
-      "type": "object"
+      "id": "TimestampEvent"
     },
     "LocalCopy": {
-      "description": "LocalCopy defines how a remote file should be copied to and from the VM.",
-      "type": "object",
       "properties": {
-        "path": {
-          "description": "Required. The path within the user's docker container where\nthis input should be localized to and from, relative to the specified\ndisk's mount point. For example: file.txt,",
-          "type": "string"
-        },
         "disk": {
           "description": "Required. The name of the disk where this parameter is\nlocated. Can be the name of one of the disks specified in the\nResources field, or \"boot\", which represents the Docker\ninstance's boot disk and has a mount point of `/`.",
           "type": "string"
+        },
+        "path": {
+          "description": "Required. The path within the user's docker container where\nthis input should be localized to and from, relative to the specified\ndisk's mount point. For example: file.txt,",
+          "type": "string"
         }
       },
-      "id": "LocalCopy"
+      "id": "LocalCopy",
+      "description": "LocalCopy defines how a remote file should be copied to and from the VM.",
+      "type": "object"
     },
     "DockerExecutor": {
-      "description": "The Docker execuctor specification.",
-      "type": "object",
       "properties": {
         "cmd": {
           "description": "Required. The command or newline delimited script to run. The command\nstring will be executed within a bash shell.\n\nIf the command exits with a non-zero exit code, output parameter\nde-localization will be skipped and the pipeline operation's\n`error` field will be populated.\n\nMaximum command string length is 16384.",
@@ -994,10 +1023,40 @@
           "type": "string"
         }
       },
-      "id": "DockerExecutor"
+      "id": "DockerExecutor",
+      "description": "The Docker execuctor specification.",
+      "type": "object"
+    },
+    "Empty": {
+      "description": "A generic empty message that you can re-use to avoid defining duplicated\nempty messages in your APIs. A typical example is to use it as the request\nor the response type of an API method. For instance:\n\n    service Foo {\n      rpc Bar(google.protobuf.Empty) returns (google.protobuf.Empty);\n    }\n\nThe JSON representation for `Empty` is empty JSON object `{}`.",
+      "type": "object",
+      "properties": {},
+      "id": "Empty"
     },
     "Disk": {
+      "description": "A Google Compute Engine disk resource specification.",
+      "type": "object",
       "properties": {
+        "name": {
+          "description": "Required. The name of the disk that can be used in the pipeline\nparameters. Must be 1 - 63 characters.\nThe name \"boot\" is reserved for system use.",
+          "type": "string"
+        },
+        "type": {
+          "enum": [
+            "TYPE_UNSPECIFIED",
+            "PERSISTENT_HDD",
+            "PERSISTENT_SSD",
+            "LOCAL_SSD"
+          ],
+          "description": "Required. The type of the disk to create.",
+          "type": "string",
+          "enumDescriptions": [
+            "Default disk type. Use one of the other options below.",
+            "Specifies a Google Compute Engine persistent hard disk. See\nhttps://cloud.google.com/compute/docs/disks/#pdspecs for details.",
+            "Specifies a Google Compute Engine persistent solid-state disk. See\nhttps://cloud.google.com/compute/docs/disks/#pdspecs for details.",
+            "Specifies a Google Compute Engine local SSD.\nSee https://cloud.google.com/compute/docs/disks/local-ssd for details."
+          ]
+        },
         "autoDelete": {
           "description": "Deprecated. Disks created by the Pipelines API will be deleted at the end\nof the pipeline run, regardless of what this field is set to.",
           "type": "boolean"
@@ -1014,73 +1073,14 @@
         "source": {
           "description": "The full or partial URL of the persistent disk to attach. See\nhttps://cloud.google.com/compute/docs/reference/latest/instances#resource\nand\nhttps://cloud.google.com/compute/docs/disks/persistent-disks#snapshots\nfor more details.",
           "type": "string"
-        },
-        "name": {
-          "description": "Required. The name of the disk that can be used in the pipeline\nparameters. Must be 1 - 63 characters.\nThe name \"boot\" is reserved for system use.",
-          "type": "string"
-        },
-        "type": {
-          "enumDescriptions": [
-            "Default disk type. Use one of the other options below.",
-            "Specifies a Google Compute Engine persistent hard disk. See\nhttps://cloud.google.com/compute/docs/disks/#pdspecs for details.",
-            "Specifies a Google Compute Engine persistent solid-state disk. See\nhttps://cloud.google.com/compute/docs/disks/#pdspecs for details.",
-            "Specifies a Google Compute Engine local SSD.\nSee https://cloud.google.com/compute/docs/disks/local-ssd for details."
-          ],
-          "enum": [
-            "TYPE_UNSPECIFIED",
-            "PERSISTENT_HDD",
-            "PERSISTENT_SSD",
-            "LOCAL_SSD"
-          ],
-          "description": "Required. The type of the disk to create.",
-          "type": "string"
         }
       },
-      "id": "Disk",
-      "description": "A Google Compute Engine disk resource specification.",
-      "type": "object"
-    },
-    "Empty": {
-      "description": "A generic empty message that you can re-use to avoid defining duplicated\nempty messages in your APIs. A typical example is to use it as the request\nor the response type of an API method. For instance:\n\n    service Foo {\n      rpc Bar(google.protobuf.Empty) returns (google.protobuf.Empty);\n    }\n\nThe JSON representation for `Empty` is empty JSON object `{}`.",
-      "type": "object",
-      "properties": {},
-      "id": "Empty"
+      "id": "Disk"
     }
   },
+  "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"
-  },
-  "protocol": "rest",
-  "version": "v1alpha2",
-  "baseUrl": "https://genomics.googleapis.com/",
-  "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/genomics": {
-          "description": "View and manage Genomics data"
-        },
-        "https://www.googleapis.com/auth/compute": {
-          "description": "View and manage your Google Compute Engine resources"
-        }
-      }
-    }
-  },
-  "kind": "discovery#restDescription",
-  "description": "Upload, process, query, and search Genomics data in the cloud.",
-  "servicePath": "",
-  "rootUrl": "https://genomics.googleapis.com/",
-  "basePath": "",
-  "ownerDomain": "google.com",
-  "name": "genomics",
-  "batchPath": "batch",
-  "revision": "20170315",
-  "id": "genomics:v1alpha2",
-  "documentationLink": "https://cloud.google.com/genomics",
-  "title": "Genomics API",
-  "discoveryVersion": "v1",
-  "ownerName": "Google"
+  }
 }
diff --git a/genomics/v1alpha2/genomics-gen.go b/genomics/v1alpha2/genomics-gen.go
index 6dab1ba..5dfe63b 100644
--- a/genomics/v1alpha2/genomics-gen.go
+++ b/genomics/v1alpha2/genomics-gen.go
@@ -68,10 +68,9 @@
 }
 
 type Service struct {
-	client                    *http.Client
-	BasePath                  string // API endpoint base URL
-	UserAgent                 string // optional additional User-Agent fragment
-	GoogleClientHeaderElement string // client header fragment, for Google use only
+	client    *http.Client
+	BasePath  string // API endpoint base URL
+	UserAgent string // optional additional User-Agent fragment
 
 	Operations *OperationsService
 
@@ -85,10 +84,6 @@
 	return googleapi.UserAgent + " " + s.UserAgent
 }
 
-func (s *Service) clientHeader() string {
-	return gensupport.GoogleClientHeader("20170210", s.GoogleClientHeaderElement)
-}
-
 func NewOperationsService(s *Service) *OperationsService {
 	rs := &OperationsService{s: s}
 	return rs
@@ -1678,7 +1673,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	var body io.Reader = nil
 	body, err := googleapi.WithoutDataWrapper.JSONReader(c.canceloperationrequest)
 	if err != nil {
@@ -1828,7 +1822,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	if c.ifNoneMatch_ != "" {
 		reqHeaders.Set("If-None-Match", c.ifNoneMatch_)
 	}
@@ -2012,7 +2005,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	if c.ifNoneMatch_ != "" {
 		reqHeaders.Set("If-None-Match", c.ifNoneMatch_)
 	}
@@ -2186,7 +2178,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	var body io.Reader = nil
 	body, err := googleapi.WithoutDataWrapper.JSONReader(c.pipeline)
 	if err != nil {
@@ -2310,7 +2301,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	var body io.Reader = nil
 	c.urlParams_.Set("alt", alt)
 	urls := googleapi.ResolveRelative(c.s.BasePath, "v1alpha2/pipelines/{pipelineId}")
@@ -2449,7 +2439,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	if c.ifNoneMatch_ != "" {
 		reqHeaders.Set("If-None-Match", c.ifNoneMatch_)
 	}
@@ -2602,7 +2591,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	if c.ifNoneMatch_ != "" {
 		reqHeaders.Set("If-None-Match", c.ifNoneMatch_)
 	}
@@ -2775,7 +2763,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	if c.ifNoneMatch_ != "" {
 		reqHeaders.Set("If-None-Match", c.ifNoneMatch_)
 	}
@@ -2948,7 +2935,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	var body io.Reader = nil
 	body, err := googleapi.WithoutDataWrapper.JSONReader(c.runpipelinerequest)
 	if err != nil {
@@ -3075,7 +3061,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	var body io.Reader = nil
 	body, err := googleapi.WithoutDataWrapper.JSONReader(c.setoperationstatusrequest)
 	if err != nil {
diff --git a/gmail/v1/gmail-gen.go b/gmail/v1/gmail-gen.go
index 67fa137..f073008 100644
--- a/gmail/v1/gmail-gen.go
+++ b/gmail/v1/gmail-gen.go
@@ -90,10 +90,9 @@
 }
 
 type Service struct {
-	client                    *http.Client
-	BasePath                  string // API endpoint base URL
-	UserAgent                 string // optional additional User-Agent fragment
-	GoogleClientHeaderElement string // client header fragment, for Google use only
+	client    *http.Client
+	BasePath  string // API endpoint base URL
+	UserAgent string // optional additional User-Agent fragment
 
 	Users *UsersService
 }
@@ -105,10 +104,6 @@
 	return googleapi.UserAgent + " " + s.UserAgent
 }
 
-func (s *Service) clientHeader() string {
-	return gensupport.GoogleClientHeader("20170210", s.GoogleClientHeaderElement)
-}
-
 func NewUsersService(s *Service) *UsersService {
 	rs := &UsersService{s: s}
 	rs.Drafts = NewUsersDraftsService(s)
@@ -1992,7 +1987,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	if c.ifNoneMatch_ != "" {
 		reqHeaders.Set("If-None-Match", c.ifNoneMatch_)
 	}
@@ -2124,7 +2118,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	var body io.Reader = nil
 	c.urlParams_.Set("alt", alt)
 	urls := googleapi.ResolveRelative(c.s.BasePath, "{userId}/stop")
@@ -2227,7 +2220,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	var body io.Reader = nil
 	body, err := googleapi.WithoutDataWrapper.JSONReader(c.watchrequest)
 	if err != nil {
@@ -2418,7 +2410,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	var body io.Reader = nil
 	body, err := googleapi.WithoutDataWrapper.JSONReader(c.draft)
 	if err != nil {
@@ -2621,7 +2612,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	var body io.Reader = nil
 	c.urlParams_.Set("alt", alt)
 	urls := googleapi.ResolveRelative(c.s.BasePath, "{userId}/drafts/{id}")
@@ -2754,7 +2744,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	if c.ifNoneMatch_ != "" {
 		reqHeaders.Set("If-None-Match", c.ifNoneMatch_)
 	}
@@ -2952,7 +2941,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	if c.ifNoneMatch_ != "" {
 		reqHeaders.Set("If-None-Match", c.ifNoneMatch_)
 	}
@@ -3183,7 +3171,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	var body io.Reader = nil
 	body, err := googleapi.WithoutDataWrapper.JSONReader(c.draft)
 	if err != nil {
@@ -3440,7 +3427,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	var body io.Reader = nil
 	body, err := googleapi.WithoutDataWrapper.JSONReader(c.draft)
 	if err != nil {
@@ -3711,7 +3697,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	if c.ifNoneMatch_ != "" {
 		reqHeaders.Set("If-None-Match", c.ifNoneMatch_)
 	}
@@ -3906,7 +3891,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	var body io.Reader = nil
 	body, err := googleapi.WithoutDataWrapper.JSONReader(c.label)
 	if err != nil {
@@ -4044,7 +4028,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	var body io.Reader = nil
 	c.urlParams_.Set("alt", alt)
 	urls := googleapi.ResolveRelative(c.s.BasePath, "{userId}/labels/{id}")
@@ -4164,7 +4147,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	if c.ifNoneMatch_ != "" {
 		reqHeaders.Set("If-None-Match", c.ifNoneMatch_)
 	}
@@ -4315,7 +4297,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	if c.ifNoneMatch_ != "" {
 		reqHeaders.Set("If-None-Match", c.ifNoneMatch_)
 	}
@@ -4452,7 +4433,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	var body io.Reader = nil
 	body, err := googleapi.WithoutDataWrapper.JSONReader(c.label)
 	if err != nil {
@@ -4599,7 +4579,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	var body io.Reader = nil
 	body, err := googleapi.WithoutDataWrapper.JSONReader(c.label)
 	if err != nil {
@@ -4746,7 +4725,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	var body io.Reader = nil
 	body, err := googleapi.WithoutDataWrapper.JSONReader(c.batchdeletemessagesrequest)
 	if err != nil {
@@ -4853,7 +4831,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	var body io.Reader = nil
 	body, err := googleapi.WithoutDataWrapper.JSONReader(c.batchmodifymessagesrequest)
 	if err != nil {
@@ -4962,7 +4939,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	var body io.Reader = nil
 	c.urlParams_.Set("alt", alt)
 	urls := googleapi.ResolveRelative(c.s.BasePath, "{userId}/messages/{id}")
@@ -5100,7 +5076,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	if c.ifNoneMatch_ != "" {
 		reqHeaders.Set("If-None-Match", c.ifNoneMatch_)
 	}
@@ -5355,7 +5330,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	var body io.Reader = nil
 	body, err := googleapi.WithoutDataWrapper.JSONReader(c.message)
 	if err != nil {
@@ -5663,7 +5637,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	var body io.Reader = nil
 	body, err := googleapi.WithoutDataWrapper.JSONReader(c.message)
 	if err != nil {
@@ -5932,7 +5905,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	if c.ifNoneMatch_ != "" {
 		reqHeaders.Set("If-None-Match", c.ifNoneMatch_)
 	}
@@ -6117,7 +6089,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	var body io.Reader = nil
 	body, err := googleapi.WithoutDataWrapper.JSONReader(c.modifymessagerequest)
 	if err != nil {
@@ -6315,7 +6286,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	var body io.Reader = nil
 	body, err := googleapi.WithoutDataWrapper.JSONReader(c.message)
 	if err != nil {
@@ -6518,7 +6488,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	var body io.Reader = nil
 	c.urlParams_.Set("alt", alt)
 	urls := googleapi.ResolveRelative(c.s.BasePath, "{userId}/messages/{id}/trash")
@@ -6654,7 +6623,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	var body io.Reader = nil
 	c.urlParams_.Set("alt", alt)
 	urls := googleapi.ResolveRelative(c.s.BasePath, "{userId}/messages/{id}/untrash")
@@ -6803,7 +6771,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	if c.ifNoneMatch_ != "" {
 		reqHeaders.Set("If-None-Match", c.ifNoneMatch_)
 	}
@@ -6961,7 +6928,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	if c.ifNoneMatch_ != "" {
 		reqHeaders.Set("If-None-Match", c.ifNoneMatch_)
 	}
@@ -7103,7 +7069,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	if c.ifNoneMatch_ != "" {
 		reqHeaders.Set("If-None-Match", c.ifNoneMatch_)
 	}
@@ -7245,7 +7210,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	if c.ifNoneMatch_ != "" {
 		reqHeaders.Set("If-None-Match", c.ifNoneMatch_)
 	}
@@ -7387,7 +7351,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	if c.ifNoneMatch_ != "" {
 		reqHeaders.Set("If-None-Match", c.ifNoneMatch_)
 	}
@@ -7525,7 +7488,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	var body io.Reader = nil
 	body, err := googleapi.WithoutDataWrapper.JSONReader(c.autoforwarding)
 	if err != nil {
@@ -7660,7 +7622,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	var body io.Reader = nil
 	body, err := googleapi.WithoutDataWrapper.JSONReader(c.imapsettings)
 	if err != nil {
@@ -7795,7 +7756,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	var body io.Reader = nil
 	body, err := googleapi.WithoutDataWrapper.JSONReader(c.popsettings)
 	if err != nil {
@@ -7930,7 +7890,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	var body io.Reader = nil
 	body, err := googleapi.WithoutDataWrapper.JSONReader(c.vacationsettings)
 	if err != nil {
@@ -8065,7 +8024,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	var body io.Reader = nil
 	body, err := googleapi.WithoutDataWrapper.JSONReader(c.filter)
 	if err != nil {
@@ -8200,7 +8158,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	var body io.Reader = nil
 	c.urlParams_.Set("alt", alt)
 	urls := googleapi.ResolveRelative(c.s.BasePath, "{userId}/settings/filters/{id}")
@@ -8318,7 +8275,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	if c.ifNoneMatch_ != "" {
 		reqHeaders.Set("If-None-Match", c.ifNoneMatch_)
 	}
@@ -8468,7 +8424,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	if c.ifNoneMatch_ != "" {
 		reqHeaders.Set("If-None-Match", c.ifNoneMatch_)
 	}
@@ -8607,7 +8562,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	var body io.Reader = nil
 	body, err := googleapi.WithoutDataWrapper.JSONReader(c.forwardingaddress)
 	if err != nil {
@@ -8746,7 +8700,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	var body io.Reader = nil
 	c.urlParams_.Set("alt", alt)
 	urls := googleapi.ResolveRelative(c.s.BasePath, "{userId}/settings/forwardingAddresses/{forwardingEmail}")
@@ -8864,7 +8817,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	if c.ifNoneMatch_ != "" {
 		reqHeaders.Set("If-None-Match", c.ifNoneMatch_)
 	}
@@ -9014,7 +8966,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	if c.ifNoneMatch_ != "" {
 		reqHeaders.Set("If-None-Match", c.ifNoneMatch_)
 	}
@@ -9157,7 +9108,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	var body io.Reader = nil
 	body, err := googleapi.WithoutDataWrapper.JSONReader(c.sendas)
 	if err != nil {
@@ -9296,7 +9246,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	var body io.Reader = nil
 	c.urlParams_.Set("alt", alt)
 	urls := googleapi.ResolveRelative(c.s.BasePath, "{userId}/settings/sendAs/{sendAsEmail}")
@@ -9415,7 +9364,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	if c.ifNoneMatch_ != "" {
 		reqHeaders.Set("If-None-Match", c.ifNoneMatch_)
 	}
@@ -9567,7 +9515,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	if c.ifNoneMatch_ != "" {
 		reqHeaders.Set("If-None-Match", c.ifNoneMatch_)
 	}
@@ -9707,7 +9654,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	var body io.Reader = nil
 	body, err := googleapi.WithoutDataWrapper.JSONReader(c.sendas)
 	if err != nil {
@@ -9858,7 +9804,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	var body io.Reader = nil
 	body, err := googleapi.WithoutDataWrapper.JSONReader(c.sendas)
 	if err != nil {
@@ -10006,7 +9951,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	var body io.Reader = nil
 	c.urlParams_.Set("alt", alt)
 	urls := googleapi.ResolveRelative(c.s.BasePath, "{userId}/settings/sendAs/{sendAsEmail}/verify")
@@ -10116,7 +10060,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	var body io.Reader = nil
 	c.urlParams_.Set("alt", alt)
 	urls := googleapi.ResolveRelative(c.s.BasePath, "{userId}/settings/sendAs/{sendAsEmail}/smimeInfo/{id}")
@@ -10246,7 +10189,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	if c.ifNoneMatch_ != "" {
 		reqHeaders.Set("If-None-Match", c.ifNoneMatch_)
 	}
@@ -10399,7 +10341,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	var body io.Reader = nil
 	body, err := googleapi.WithoutDataWrapper.JSONReader(c.smimeinfo)
 	if err != nil {
@@ -10554,7 +10495,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	if c.ifNoneMatch_ != "" {
 		reqHeaders.Set("If-None-Match", c.ifNoneMatch_)
 	}
@@ -10699,7 +10639,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	var body io.Reader = nil
 	c.urlParams_.Set("alt", alt)
 	urls := googleapi.ResolveRelative(c.s.BasePath, "{userId}/settings/sendAs/{sendAsEmail}/smimeInfo/{id}/setDefault")
@@ -10816,7 +10755,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	var body io.Reader = nil
 	c.urlParams_.Set("alt", alt)
 	urls := googleapi.ResolveRelative(c.s.BasePath, "{userId}/threads/{id}")
@@ -10953,7 +10891,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	if c.ifNoneMatch_ != "" {
 		reqHeaders.Set("If-None-Match", c.ifNoneMatch_)
 	}
@@ -11163,7 +11100,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	if c.ifNoneMatch_ != "" {
 		reqHeaders.Set("If-None-Match", c.ifNoneMatch_)
 	}
@@ -11349,7 +11285,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	var body io.Reader = nil
 	body, err := googleapi.WithoutDataWrapper.JSONReader(c.modifythreadrequest)
 	if err != nil {
@@ -11493,7 +11428,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	var body io.Reader = nil
 	c.urlParams_.Set("alt", alt)
 	urls := googleapi.ResolveRelative(c.s.BasePath, "{userId}/threads/{id}/trash")
@@ -11629,7 +11563,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	var body io.Reader = nil
 	c.urlParams_.Set("alt", alt)
 	urls := googleapi.ResolveRelative(c.s.BasePath, "{userId}/threads/{id}/untrash")
diff --git a/groupsmigration/v1/groupsmigration-gen.go b/groupsmigration/v1/groupsmigration-gen.go
index 766de80..127ef02 100644
--- a/groupsmigration/v1/groupsmigration-gen.go
+++ b/groupsmigration/v1/groupsmigration-gen.go
@@ -61,10 +61,9 @@
 }
 
 type Service struct {
-	client                    *http.Client
-	BasePath                  string // API endpoint base URL
-	UserAgent                 string // optional additional User-Agent fragment
-	GoogleClientHeaderElement string // client header fragment, for Google use only
+	client    *http.Client
+	BasePath  string // API endpoint base URL
+	UserAgent string // optional additional User-Agent fragment
 
 	Archive *ArchiveService
 }
@@ -76,10 +75,6 @@
 	return googleapi.UserAgent + " " + s.UserAgent
 }
 
-func (s *Service) clientHeader() string {
-	return gensupport.GoogleClientHeader("20170210", s.GoogleClientHeaderElement)
-}
-
 func NewArchiveService(s *Service) *ArchiveService {
 	rs := &ArchiveService{s: s}
 	return rs
@@ -225,7 +220,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	var body io.Reader = nil
 	c.urlParams_.Set("alt", alt)
 	urls := googleapi.ResolveRelative(c.s.BasePath, "{groupId}/archive")
diff --git a/groupssettings/v1/groupssettings-gen.go b/groupssettings/v1/groupssettings-gen.go
index c14469c..7f65b54 100644
--- a/groupssettings/v1/groupssettings-gen.go
+++ b/groupssettings/v1/groupssettings-gen.go
@@ -61,10 +61,9 @@
 }
 
 type Service struct {
-	client                    *http.Client
-	BasePath                  string // API endpoint base URL
-	UserAgent                 string // optional additional User-Agent fragment
-	GoogleClientHeaderElement string // client header fragment, for Google use only
+	client    *http.Client
+	BasePath  string // API endpoint base URL
+	UserAgent string // optional additional User-Agent fragment
 
 	Groups *GroupsService
 }
@@ -76,10 +75,6 @@
 	return googleapi.UserAgent + " " + s.UserAgent
 }
 
-func (s *Service) clientHeader() string {
-	return gensupport.GoogleClientHeader("20170210", s.GoogleClientHeaderElement)
-}
-
 func NewGroupsService(s *Service) *GroupsService {
 	rs := &GroupsService{s: s}
 	return rs
@@ -295,7 +290,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	if c.ifNoneMatch_ != "" {
 		reqHeaders.Set("If-None-Match", c.ifNoneMatch_)
 	}
@@ -425,7 +419,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	var body io.Reader = nil
 	body, err := googleapi.WithoutDataWrapper.JSONReader(c.groups)
 	if err != nil {
@@ -559,7 +552,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	var body io.Reader = nil
 	body, err := googleapi.WithoutDataWrapper.JSONReader(c.groups)
 	if err != nil {
diff --git a/iam/v1/iam-api.json b/iam/v1/iam-api.json
index d6f5486..2e598e2 100644
--- a/iam/v1/iam-api.json
+++ b/iam/v1/iam-api.json
@@ -1,35 +1,19 @@
 {
-  "canonicalName": "iam",
-  "auth": {
-    "oauth2": {
-      "scopes": {
-        "https://www.googleapis.com/auth/cloud-platform": {
-          "description": "View and manage your data across Google Cloud Platform services"
-        }
-      }
-    }
-  },
-  "rootUrl": "https://iam.googleapis.com/",
-  "ownerDomain": "google.com",
-  "name": "iam",
-  "batchPath": "batch",
-  "title": "Google Identity and Access Management (IAM) API",
-  "ownerName": "Google",
   "resources": {
     "roles": {
       "methods": {
         "queryGrantableRoles": {
-          "id": "iam.roles.queryGrantableRoles",
           "path": "v1/roles:queryGrantableRoles",
+          "id": "iam.roles.queryGrantableRoles",
           "description": "Queries roles that can be granted on a particular resource.\nA role is grantable if it can be used as the role in a binding for a policy\nfor that resource.",
           "request": {
             "$ref": "QueryGrantableRolesRequest"
           },
-          "httpMethod": "POST",
-          "parameterOrder": [],
           "response": {
             "$ref": "QueryGrantableRolesResponse"
           },
+          "parameterOrder": [],
+          "httpMethod": "POST",
           "scopes": [
             "https://www.googleapis.com/auth/cloud-platform"
           ],
@@ -41,33 +25,314 @@
     "projects": {
       "resources": {
         "serviceAccounts": {
+          "methods": {
+            "setIamPolicy": {
+              "httpMethod": "POST",
+              "parameterOrder": [
+                "resource"
+              ],
+              "response": {
+                "$ref": "Policy"
+              },
+              "scopes": [
+                "https://www.googleapis.com/auth/cloud-platform"
+              ],
+              "parameters": {
+                "resource": {
+                  "location": "path",
+                  "description": "REQUIRED: The resource for which the policy is being specified.\nSee the operation documentation for the appropriate value for this field.",
+                  "required": true,
+                  "type": "string",
+                  "pattern": "^projects/[^/]+/serviceAccounts/[^/]+$"
+                }
+              },
+              "flatPath": "v1/projects/{projectsId}/serviceAccounts/{serviceAccountsId}:setIamPolicy",
+              "id": "iam.projects.serviceAccounts.setIamPolicy",
+              "path": "v1/{+resource}:setIamPolicy",
+              "description": "Sets the IAM access control policy for a\nServiceAccount.",
+              "request": {
+                "$ref": "SetIamPolicyRequest"
+              }
+            },
+            "signJwt": {
+              "httpMethod": "POST",
+              "parameterOrder": [
+                "name"
+              ],
+              "response": {
+                "$ref": "SignJwtResponse"
+              },
+              "parameters": {
+                "name": {
+                  "location": "path",
+                  "description": "The resource name of the service account in the following format:\n`projects/{PROJECT_ID}/serviceAccounts/{SERVICE_ACCOUNT_EMAIL}`.\nUsing `-` as a wildcard for the project will infer the project from\nthe account. The `account` value can be the `email` address or the\n`unique_id` of the service account.",
+                  "required": true,
+                  "type": "string",
+                  "pattern": "^projects/[^/]+/serviceAccounts/[^/]+$"
+                }
+              },
+              "scopes": [
+                "https://www.googleapis.com/auth/cloud-platform"
+              ],
+              "flatPath": "v1/projects/{projectsId}/serviceAccounts/{serviceAccountsId}:signJwt",
+              "id": "iam.projects.serviceAccounts.signJwt",
+              "path": "v1/{+name}:signJwt",
+              "request": {
+                "$ref": "SignJwtRequest"
+              },
+              "description": "Signs a JWT using a service account's system-managed private key.\n\nIf no expiry time (`exp`) is provided in the `SignJwtRequest`, IAM sets an\nan expiry time of one hour by default. If you request an expiry time of\nmore than one hour, the request will fail."
+            },
+            "create": {
+              "description": "Creates a ServiceAccount\nand returns it.",
+              "request": {
+                "$ref": "CreateServiceAccountRequest"
+              },
+              "response": {
+                "$ref": "ServiceAccount"
+              },
+              "parameterOrder": [
+                "name"
+              ],
+              "httpMethod": "POST",
+              "scopes": [
+                "https://www.googleapis.com/auth/cloud-platform"
+              ],
+              "parameters": {
+                "name": {
+                  "required": true,
+                  "type": "string",
+                  "pattern": "^projects/[^/]+$",
+                  "location": "path",
+                  "description": "Required. The resource name of the project associated with the service\naccounts, such as `projects/my-project-123`."
+                }
+              },
+              "flatPath": "v1/projects/{projectsId}/serviceAccounts",
+              "path": "v1/{+name}/serviceAccounts",
+              "id": "iam.projects.serviceAccounts.create"
+            },
+            "getIamPolicy": {
+              "httpMethod": "POST",
+              "response": {
+                "$ref": "Policy"
+              },
+              "parameterOrder": [
+                "resource"
+              ],
+              "parameters": {
+                "resource": {
+                  "description": "REQUIRED: The resource for which the policy is being requested.\nSee the operation documentation for the appropriate value for this field.",
+                  "required": true,
+                  "type": "string",
+                  "pattern": "^projects/[^/]+/serviceAccounts/[^/]+$",
+                  "location": "path"
+                }
+              },
+              "scopes": [
+                "https://www.googleapis.com/auth/cloud-platform"
+              ],
+              "flatPath": "v1/projects/{projectsId}/serviceAccounts/{serviceAccountsId}:getIamPolicy",
+              "id": "iam.projects.serviceAccounts.getIamPolicy",
+              "path": "v1/{+resource}:getIamPolicy",
+              "description": "Returns the IAM access control policy for a\nServiceAccount."
+            },
+            "get": {
+              "flatPath": "v1/projects/{projectsId}/serviceAccounts/{serviceAccountsId}",
+              "id": "iam.projects.serviceAccounts.get",
+              "path": "v1/{+name}",
+              "description": "Gets a ServiceAccount.",
+              "httpMethod": "GET",
+              "response": {
+                "$ref": "ServiceAccount"
+              },
+              "parameterOrder": [
+                "name"
+              ],
+              "scopes": [
+                "https://www.googleapis.com/auth/cloud-platform"
+              ],
+              "parameters": {
+                "name": {
+                  "location": "path",
+                  "description": "The resource name of the service account in the following format:\n`projects/{PROJECT_ID}/serviceAccounts/{SERVICE_ACCOUNT_EMAIL}`.\nUsing `-` as a wildcard for the project will infer the project from\nthe account. The `account` value can be the `email` address or the\n`unique_id` of the service account.",
+                  "required": true,
+                  "type": "string",
+                  "pattern": "^projects/[^/]+/serviceAccounts/[^/]+$"
+                }
+              }
+            },
+            "update": {
+              "request": {
+                "$ref": "ServiceAccount"
+              },
+              "description": "Updates a ServiceAccount.\n\nCurrently, only the following fields are updatable:\n`display_name` .\nThe `etag` is mandatory.",
+              "response": {
+                "$ref": "ServiceAccount"
+              },
+              "parameterOrder": [
+                "name"
+              ],
+              "httpMethod": "PUT",
+              "parameters": {
+                "name": {
+                  "description": "The resource name of the service account in the following format:\n`projects/{PROJECT_ID}/serviceAccounts/{SERVICE_ACCOUNT_EMAIL}`.\n\nRequests using `-` as a wildcard for the project will infer the project\nfrom the `account` and the `account` value can be the `email` address or\nthe `unique_id` of the service account.\n\nIn responses the resource name will always be in the format\n`projects/{PROJECT_ID}/serviceAccounts/{SERVICE_ACCOUNT_EMAIL}`.",
+                  "required": true,
+                  "type": "string",
+                  "pattern": "^projects/[^/]+/serviceAccounts/[^/]+$",
+                  "location": "path"
+                }
+              },
+              "scopes": [
+                "https://www.googleapis.com/auth/cloud-platform"
+              ],
+              "flatPath": "v1/projects/{projectsId}/serviceAccounts/{serviceAccountsId}",
+              "path": "v1/{+name}",
+              "id": "iam.projects.serviceAccounts.update"
+            },
+            "testIamPermissions": {
+              "scopes": [
+                "https://www.googleapis.com/auth/cloud-platform"
+              ],
+              "parameters": {
+                "resource": {
+                  "location": "path",
+                  "description": "REQUIRED: The resource for which the policy detail is being requested.\nSee the operation documentation for the appropriate value for this field.",
+                  "required": true,
+                  "type": "string",
+                  "pattern": "^projects/[^/]+/serviceAccounts/[^/]+$"
+                }
+              },
+              "flatPath": "v1/projects/{projectsId}/serviceAccounts/{serviceAccountsId}:testIamPermissions",
+              "path": "v1/{+resource}:testIamPermissions",
+              "id": "iam.projects.serviceAccounts.testIamPermissions",
+              "description": "Tests the specified permissions against the IAM access control policy\nfor a ServiceAccount.",
+              "request": {
+                "$ref": "TestIamPermissionsRequest"
+              },
+              "response": {
+                "$ref": "TestIamPermissionsResponse"
+              },
+              "parameterOrder": [
+                "resource"
+              ],
+              "httpMethod": "POST"
+            },
+            "delete": {
+              "description": "Deletes a ServiceAccount.",
+              "httpMethod": "DELETE",
+              "parameterOrder": [
+                "name"
+              ],
+              "response": {
+                "$ref": "Empty"
+              },
+              "scopes": [
+                "https://www.googleapis.com/auth/cloud-platform"
+              ],
+              "parameters": {
+                "name": {
+                  "required": true,
+                  "type": "string",
+                  "pattern": "^projects/[^/]+/serviceAccounts/[^/]+$",
+                  "location": "path",
+                  "description": "The resource name of the service account in the following format:\n`projects/{PROJECT_ID}/serviceAccounts/{SERVICE_ACCOUNT_EMAIL}`.\nUsing `-` as a wildcard for the project will infer the project from\nthe account. The `account` value can be the `email` address or the\n`unique_id` of the service account."
+                }
+              },
+              "flatPath": "v1/projects/{projectsId}/serviceAccounts/{serviceAccountsId}",
+              "id": "iam.projects.serviceAccounts.delete",
+              "path": "v1/{+name}"
+            },
+            "list": {
+              "httpMethod": "GET",
+              "parameterOrder": [
+                "name"
+              ],
+              "response": {
+                "$ref": "ListServiceAccountsResponse"
+              },
+              "scopes": [
+                "https://www.googleapis.com/auth/cloud-platform"
+              ],
+              "parameters": {
+                "name": {
+                  "required": true,
+                  "type": "string",
+                  "pattern": "^projects/[^/]+$",
+                  "location": "path",
+                  "description": "Required. The resource name of the project associated with the service\naccounts, such as `projects/my-project-123`."
+                },
+                "pageToken": {
+                  "type": "string",
+                  "location": "query",
+                  "description": "Optional pagination token returned in an earlier\nListServiceAccountsResponse.next_page_token."
+                },
+                "pageSize": {
+                  "description": "Optional limit on the number of service accounts to include in the\nresponse. Further accounts can subsequently be obtained by including the\nListServiceAccountsResponse.next_page_token\nin a subsequent request.",
+                  "format": "int32",
+                  "type": "integer",
+                  "location": "query"
+                }
+              },
+              "flatPath": "v1/projects/{projectsId}/serviceAccounts",
+              "id": "iam.projects.serviceAccounts.list",
+              "path": "v1/{+name}/serviceAccounts",
+              "description": "Lists ServiceAccounts for a project."
+            },
+            "signBlob": {
+              "flatPath": "v1/projects/{projectsId}/serviceAccounts/{serviceAccountsId}:signBlob",
+              "path": "v1/{+name}:signBlob",
+              "id": "iam.projects.serviceAccounts.signBlob",
+              "description": "Signs a blob using a service account's system-managed private key.",
+              "request": {
+                "$ref": "SignBlobRequest"
+              },
+              "response": {
+                "$ref": "SignBlobResponse"
+              },
+              "parameterOrder": [
+                "name"
+              ],
+              "httpMethod": "POST",
+              "scopes": [
+                "https://www.googleapis.com/auth/cloud-platform"
+              ],
+              "parameters": {
+                "name": {
+                  "description": "The resource name of the service account in the following format:\n`projects/{PROJECT_ID}/serviceAccounts/{SERVICE_ACCOUNT_EMAIL}`.\nUsing `-` as a wildcard for the project will infer the project from\nthe account. The `account` value can be the `email` address or the\n`unique_id` of the service account.",
+                  "required": true,
+                  "type": "string",
+                  "pattern": "^projects/[^/]+/serviceAccounts/[^/]+$",
+                  "location": "path"
+                }
+              }
+            }
+          },
           "resources": {
             "keys": {
               "methods": {
                 "delete": {
-                  "response": {
-                    "$ref": "Empty"
-                  },
+                  "description": "Deletes a ServiceAccountKey.",
                   "parameterOrder": [
                     "name"
                   ],
                   "httpMethod": "DELETE",
-                  "parameters": {
-                    "name": {
-                      "pattern": "^projects/[^/]+/serviceAccounts/[^/]+/keys/[^/]+$",
-                      "location": "path",
-                      "description": "The resource name of the service account key in the following format:\n`projects/{PROJECT_ID}/serviceAccounts/{SERVICE_ACCOUNT_EMAIL}/keys/{key}`.\nUsing `-` as a wildcard for the project will infer the project from\nthe account. The `account` value can be the `email` address or the\n`unique_id` of the service account.",
-                      "required": true,
-                      "type": "string"
-                    }
+                  "response": {
+                    "$ref": "Empty"
                   },
                   "scopes": [
                     "https://www.googleapis.com/auth/cloud-platform"
                   ],
+                  "parameters": {
+                    "name": {
+                      "description": "The resource name of the service account key in the following format:\n`projects/{PROJECT_ID}/serviceAccounts/{SERVICE_ACCOUNT_EMAIL}/keys/{key}`.\nUsing `-` as a wildcard for the project will infer the project from\nthe account. The `account` value can be the `email` address or the\n`unique_id` of the service account.",
+                      "required": true,
+                      "type": "string",
+                      "pattern": "^projects/[^/]+/serviceAccounts/[^/]+/keys/[^/]+$",
+                      "location": "path"
+                    }
+                  },
                   "flatPath": "v1/projects/{projectsId}/serviceAccounts/{serviceAccountsId}/keys/{keysId}",
                   "path": "v1/{+name}",
-                  "id": "iam.projects.serviceAccounts.keys.delete",
-                  "description": "Deletes a ServiceAccountKey."
+                  "id": "iam.projects.serviceAccounts.keys.delete"
                 },
                 "list": {
                   "path": "v1/{+name}/keys",
@@ -93,11 +358,11 @@
                       "type": "string"
                     },
                     "name": {
+                      "location": "path",
                       "description": "The resource name of the service account in the following format:\n`projects/{PROJECT_ID}/serviceAccounts/{SERVICE_ACCOUNT_EMAIL}`.\n\nUsing `-` as a wildcard for the project, will infer the project from\nthe account. The `account` value can be the `email` address or the\n`unique_id` of the service account.",
                       "required": true,
                       "type": "string",
-                      "pattern": "^projects/[^/]+/serviceAccounts/[^/]+$",
-                      "location": "path"
+                      "pattern": "^projects/[^/]+/serviceAccounts/[^/]+$"
                     }
                   },
                   "scopes": [
@@ -106,14 +371,16 @@
                   "flatPath": "v1/projects/{projectsId}/serviceAccounts/{serviceAccountsId}/keys"
                 },
                 "get": {
+                  "id": "iam.projects.serviceAccounts.keys.get",
+                  "path": "v1/{+name}",
                   "description": "Gets the ServiceAccountKey\nby key id.",
+                  "httpMethod": "GET",
                   "parameterOrder": [
                     "name"
                   ],
                   "response": {
                     "$ref": "ServiceAccountKey"
                   },
-                  "httpMethod": "GET",
                   "parameters": {
                     "publicKeyType": {
                       "location": "query",
@@ -136,13 +403,9 @@
                   "scopes": [
                     "https://www.googleapis.com/auth/cloud-platform"
                   ],
-                  "flatPath": "v1/projects/{projectsId}/serviceAccounts/{serviceAccountsId}/keys/{keysId}",
-                  "id": "iam.projects.serviceAccounts.keys.get",
-                  "path": "v1/{+name}"
+                  "flatPath": "v1/projects/{projectsId}/serviceAccounts/{serviceAccountsId}/keys/{keysId}"
                 },
                 "create": {
-                  "path": "v1/{+name}/keys",
-                  "id": "iam.projects.serviceAccounts.keys.create",
                   "request": {
                     "$ref": "CreateServiceAccountKeyRequest"
                   },
@@ -156,340 +419,92 @@
                   "httpMethod": "POST",
                   "parameters": {
                     "name": {
+                      "required": true,
+                      "type": "string",
                       "pattern": "^projects/[^/]+/serviceAccounts/[^/]+$",
                       "location": "path",
-                      "description": "The resource name of the service account in the following format:\n`projects/{PROJECT_ID}/serviceAccounts/{SERVICE_ACCOUNT_EMAIL}`.\nUsing `-` as a wildcard for the project will infer the project from\nthe account. The `account` value can be the `email` address or the\n`unique_id` of the service account.",
-                      "required": true,
-                      "type": "string"
+                      "description": "The resource name of the service account in the following format:\n`projects/{PROJECT_ID}/serviceAccounts/{SERVICE_ACCOUNT_EMAIL}`.\nUsing `-` as a wildcard for the project will infer the project from\nthe account. The `account` value can be the `email` address or the\n`unique_id` of the service account."
                     }
                   },
                   "scopes": [
                     "https://www.googleapis.com/auth/cloud-platform"
                   ],
-                  "flatPath": "v1/projects/{projectsId}/serviceAccounts/{serviceAccountsId}/keys"
+                  "flatPath": "v1/projects/{projectsId}/serviceAccounts/{serviceAccountsId}/keys",
+                  "path": "v1/{+name}/keys",
+                  "id": "iam.projects.serviceAccounts.keys.create"
                 }
               }
             }
-          },
-          "methods": {
-            "getIamPolicy": {
-              "description": "Returns the IAM access control policy for a\nServiceAccount.",
-              "httpMethod": "POST",
-              "response": {
-                "$ref": "Policy"
-              },
-              "parameterOrder": [
-                "resource"
-              ],
-              "parameters": {
-                "resource": {
-                  "description": "REQUIRED: The resource for which the policy is being requested.\n`resource` is usually specified as a path. For example, a Project\nresource is specified as `projects/{project}`.",
-                  "required": true,
-                  "type": "string",
-                  "pattern": "^projects/[^/]+/serviceAccounts/[^/]+$",
-                  "location": "path"
-                }
-              },
-              "scopes": [
-                "https://www.googleapis.com/auth/cloud-platform"
-              ],
-              "flatPath": "v1/projects/{projectsId}/serviceAccounts/{serviceAccountsId}:getIamPolicy",
-              "id": "iam.projects.serviceAccounts.getIamPolicy",
-              "path": "v1/{+resource}:getIamPolicy"
-            },
-            "get": {
-              "response": {
-                "$ref": "ServiceAccount"
-              },
-              "parameterOrder": [
-                "name"
-              ],
-              "httpMethod": "GET",
-              "parameters": {
-                "name": {
-                  "pattern": "^projects/[^/]+/serviceAccounts/[^/]+$",
-                  "location": "path",
-                  "description": "The resource name of the service account in the following format:\n`projects/{PROJECT_ID}/serviceAccounts/{SERVICE_ACCOUNT_EMAIL}`.\nUsing `-` as a wildcard for the project will infer the project from\nthe account. The `account` value can be the `email` address or the\n`unique_id` of the service account.",
-                  "required": true,
-                  "type": "string"
-                }
-              },
-              "scopes": [
-                "https://www.googleapis.com/auth/cloud-platform"
-              ],
-              "flatPath": "v1/projects/{projectsId}/serviceAccounts/{serviceAccountsId}",
-              "path": "v1/{+name}",
-              "id": "iam.projects.serviceAccounts.get",
-              "description": "Gets a ServiceAccount."
-            },
-            "update": {
-              "response": {
-                "$ref": "ServiceAccount"
-              },
-              "parameterOrder": [
-                "name"
-              ],
-              "httpMethod": "PUT",
-              "scopes": [
-                "https://www.googleapis.com/auth/cloud-platform"
-              ],
-              "parameters": {
-                "name": {
-                  "description": "The resource name of the service account in the following format:\n`projects/{PROJECT_ID}/serviceAccounts/{SERVICE_ACCOUNT_EMAIL}`.\n\nRequests using `-` as a wildcard for the project will infer the project\nfrom the `account` and the `account` value can be the `email` address or\nthe `unique_id` of the service account.\n\nIn responses the resource name will always be in the format\n`projects/{PROJECT_ID}/serviceAccounts/{SERVICE_ACCOUNT_EMAIL}`.",
-                  "required": true,
-                  "type": "string",
-                  "pattern": "^projects/[^/]+/serviceAccounts/[^/]+$",
-                  "location": "path"
-                }
-              },
-              "flatPath": "v1/projects/{projectsId}/serviceAccounts/{serviceAccountsId}",
-              "path": "v1/{+name}",
-              "id": "iam.projects.serviceAccounts.update",
-              "description": "Updates a ServiceAccount.\n\nCurrently, only the following fields are updatable:\n`display_name` .\nThe `etag` is mandatory.",
-              "request": {
-                "$ref": "ServiceAccount"
-              }
-            },
-            "testIamPermissions": {
-              "response": {
-                "$ref": "TestIamPermissionsResponse"
-              },
-              "parameterOrder": [
-                "resource"
-              ],
-              "httpMethod": "POST",
-              "scopes": [
-                "https://www.googleapis.com/auth/cloud-platform"
-              ],
-              "parameters": {
-                "resource": {
-                  "pattern": "^projects/[^/]+/serviceAccounts/[^/]+$",
-                  "location": "path",
-                  "description": "REQUIRED: The resource for which the policy detail is being requested.\n`resource` is usually specified as a path. For example, a Project\nresource is specified as `projects/{project}`.",
-                  "required": true,
-                  "type": "string"
-                }
-              },
-              "flatPath": "v1/projects/{projectsId}/serviceAccounts/{serviceAccountsId}:testIamPermissions",
-              "path": "v1/{+resource}:testIamPermissions",
-              "id": "iam.projects.serviceAccounts.testIamPermissions",
-              "description": "Tests the specified permissions against the IAM access control policy\nfor a ServiceAccount.",
-              "request": {
-                "$ref": "TestIamPermissionsRequest"
-              }
-            },
-            "delete": {
-              "httpMethod": "DELETE",
-              "response": {
-                "$ref": "Empty"
-              },
-              "parameterOrder": [
-                "name"
-              ],
-              "parameters": {
-                "name": {
-                  "pattern": "^projects/[^/]+/serviceAccounts/[^/]+$",
-                  "location": "path",
-                  "description": "The resource name of the service account in the following format:\n`projects/{PROJECT_ID}/serviceAccounts/{SERVICE_ACCOUNT_EMAIL}`.\nUsing `-` as a wildcard for the project will infer the project from\nthe account. The `account` value can be the `email` address or the\n`unique_id` of the service account.",
-                  "required": true,
-                  "type": "string"
-                }
-              },
-              "scopes": [
-                "https://www.googleapis.com/auth/cloud-platform"
-              ],
-              "flatPath": "v1/projects/{projectsId}/serviceAccounts/{serviceAccountsId}",
-              "id": "iam.projects.serviceAccounts.delete",
-              "path": "v1/{+name}",
-              "description": "Deletes a ServiceAccount."
-            },
-            "signBlob": {
-              "path": "v1/{+name}:signBlob",
-              "id": "iam.projects.serviceAccounts.signBlob",
-              "description": "Signs a blob using a service account's system-managed private key.",
-              "request": {
-                "$ref": "SignBlobRequest"
-              },
-              "response": {
-                "$ref": "SignBlobResponse"
-              },
-              "parameterOrder": [
-                "name"
-              ],
-              "httpMethod": "POST",
-              "scopes": [
-                "https://www.googleapis.com/auth/cloud-platform"
-              ],
-              "parameters": {
-                "name": {
-                  "pattern": "^projects/[^/]+/serviceAccounts/[^/]+$",
-                  "location": "path",
-                  "description": "The resource name of the service account in the following format:\n`projects/{PROJECT_ID}/serviceAccounts/{SERVICE_ACCOUNT_EMAIL}`.\nUsing `-` as a wildcard for the project will infer the project from\nthe account. The `account` value can be the `email` address or the\n`unique_id` of the service account.",
-                  "required": true,
-                  "type": "string"
-                }
-              },
-              "flatPath": "v1/projects/{projectsId}/serviceAccounts/{serviceAccountsId}:signBlob"
-            },
-            "list": {
-              "httpMethod": "GET",
-              "response": {
-                "$ref": "ListServiceAccountsResponse"
-              },
-              "parameterOrder": [
-                "name"
-              ],
-              "scopes": [
-                "https://www.googleapis.com/auth/cloud-platform"
-              ],
-              "parameters": {
-                "name": {
-                  "description": "Required. The resource name of the project associated with the service\naccounts, such as `projects/my-project-123`.",
-                  "required": true,
-                  "type": "string",
-                  "pattern": "^projects/[^/]+$",
-                  "location": "path"
-                },
-                "pageToken": {
-                  "location": "query",
-                  "description": "Optional pagination token returned in an earlier\nListServiceAccountsResponse.next_page_token.",
-                  "type": "string"
-                },
-                "pageSize": {
-                  "description": "Optional limit on the number of service accounts to include in the\nresponse. Further accounts can subsequently be obtained by including the\nListServiceAccountsResponse.next_page_token\nin a subsequent request.",
-                  "format": "int32",
-                  "type": "integer",
-                  "location": "query"
-                }
-              },
-              "flatPath": "v1/projects/{projectsId}/serviceAccounts",
-              "id": "iam.projects.serviceAccounts.list",
-              "path": "v1/{+name}/serviceAccounts",
-              "description": "Lists ServiceAccounts for a project."
-            },
-            "signJwt": {
-              "response": {
-                "$ref": "SignJwtResponse"
-              },
-              "parameterOrder": [
-                "name"
-              ],
-              "httpMethod": "POST",
-              "scopes": [
-                "https://www.googleapis.com/auth/cloud-platform"
-              ],
-              "parameters": {
-                "name": {
-                  "description": "The resource name of the service account in the following format:\n`projects/{PROJECT_ID}/serviceAccounts/{SERVICE_ACCOUNT_EMAIL}`.\nUsing `-` as a wildcard for the project will infer the project from\nthe account. The `account` value can be the `email` address or the\n`unique_id` of the service account.",
-                  "required": true,
-                  "type": "string",
-                  "pattern": "^projects/[^/]+/serviceAccounts/[^/]+$",
-                  "location": "path"
-                }
-              },
-              "flatPath": "v1/projects/{projectsId}/serviceAccounts/{serviceAccountsId}:signJwt",
-              "path": "v1/{+name}:signJwt",
-              "id": "iam.projects.serviceAccounts.signJwt",
-              "description": "Signs a JWT using a service account's system-managed private key.\n\nIf no expiry time (`exp`) is provided in the `SignJwtRequest`, IAM sets an\nan expiry time of one hour by default. If you request an expiry time of\nmore than one hour, the request will fail.",
-              "request": {
-                "$ref": "SignJwtRequest"
-              }
-            },
-            "create": {
-              "id": "iam.projects.serviceAccounts.create",
-              "path": "v1/{+name}/serviceAccounts",
-              "description": "Creates a ServiceAccount\nand returns it.",
-              "request": {
-                "$ref": "CreateServiceAccountRequest"
-              },
-              "httpMethod": "POST",
-              "parameterOrder": [
-                "name"
-              ],
-              "response": {
-                "$ref": "ServiceAccount"
-              },
-              "scopes": [
-                "https://www.googleapis.com/auth/cloud-platform"
-              ],
-              "parameters": {
-                "name": {
-                  "pattern": "^projects/[^/]+$",
-                  "location": "path",
-                  "description": "Required. The resource name of the project associated with the service\naccounts, such as `projects/my-project-123`.",
-                  "required": true,
-                  "type": "string"
-                }
-              },
-              "flatPath": "v1/projects/{projectsId}/serviceAccounts"
-            },
-            "setIamPolicy": {
-              "description": "Sets the IAM access control policy for a\nServiceAccount.",
-              "request": {
-                "$ref": "SetIamPolicyRequest"
-              },
-              "response": {
-                "$ref": "Policy"
-              },
-              "parameterOrder": [
-                "resource"
-              ],
-              "httpMethod": "POST",
-              "scopes": [
-                "https://www.googleapis.com/auth/cloud-platform"
-              ],
-              "parameters": {
-                "resource": {
-                  "pattern": "^projects/[^/]+/serviceAccounts/[^/]+$",
-                  "location": "path",
-                  "description": "REQUIRED: The resource for which the policy is being specified.\n`resource` is usually specified as a path. For example, a Project\nresource is specified as `projects/{project}`.",
-                  "required": true,
-                  "type": "string"
-                }
-              },
-              "flatPath": "v1/projects/{projectsId}/serviceAccounts/{serviceAccountsId}:setIamPolicy",
-              "path": "v1/{+resource}:setIamPolicy",
-              "id": "iam.projects.serviceAccounts.setIamPolicy"
-            }
           }
         }
       }
     }
   },
   "parameters": {
-    "upload_protocol": {
+    "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"
+    },
+    "access_token": {
+      "description": "OAuth access token.",
+      "type": "string",
+      "location": "query"
+    },
+    "quotaUser": {
       "location": "query",
-      "description": "Upload protocol for media (e.g. \"raw\", \"multipart\").",
+      "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"
     },
-    "prettyPrint": {
-      "description": "Returns response with indentations and line breaks.",
+    "pp": {
       "type": "boolean",
       "default": "true",
-      "location": "query"
+      "location": "query",
+      "description": "Pretty-print response."
     },
-    "fields": {
-      "description": "Selector specifying which fields to include in a partial response.",
+    "bearer_token": {
+      "location": "query",
+      "description": "OAuth bearer token.",
+      "type": "string"
+    },
+    "oauth_token": {
+      "description": "OAuth 2.0 token for the current user.",
       "type": "string",
       "location": "query"
     },
+    "upload_protocol": {
+      "type": "string",
+      "location": "query",
+      "description": "Upload protocol for media (e.g. \"raw\", \"multipart\")."
+    },
+    "prettyPrint": {
+      "location": "query",
+      "description": "Returns response with indentations and line breaks.",
+      "type": "boolean",
+      "default": "true"
+    },
     "uploadType": {
-      "description": "Legacy upload protocol for media (e.g. \"media\", \"multipart\").",
       "type": "string",
-      "location": "query"
+      "location": "query",
+      "description": "Legacy upload protocol for media (e.g. \"media\", \"multipart\")."
+    },
+    "fields": {
+      "location": "query",
+      "description": "Selector specifying which fields to include in a partial response.",
+      "type": "string"
     },
     "$.xgafv": {
+      "enumDescriptions": [
+        "v1 error format",
+        "v2 error format"
+      ],
+      "location": "query",
       "enum": [
         "1",
         "2"
       ],
       "description": "V1 error format.",
-      "type": "string",
-      "enumDescriptions": [
-        "v1 error format",
-        "v2 error format"
-      ],
-      "location": "query"
+      "type": "string"
     },
     "callback": {
       "description": "JSONP",
@@ -511,37 +526,6 @@
         "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"
-    },
-    "access_token": {
-      "location": "query",
-      "description": "OAuth access token.",
-      "type": "string"
-    },
-    "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"
-    },
-    "pp": {
-      "description": "Pretty-print response.",
-      "type": "boolean",
-      "default": "true",
-      "location": "query"
-    },
-    "oauth_token": {
-      "location": "query",
-      "description": "OAuth 2.0 token for the current user.",
-      "type": "string"
-    },
-    "bearer_token": {
-      "description": "OAuth bearer token.",
-      "type": "string",
-      "location": "query"
     }
   },
   "version": "v1",
@@ -550,27 +534,24 @@
   "description": "Manages identity and access control for Google Cloud Platform resources, including the creation of service accounts, which you can use to authenticate to Google and make API calls.",
   "kind": "discovery#restDescription",
   "basePath": "",
-  "revision": "20170217",
-  "id": "iam:v1",
   "documentationLink": "https://cloud.google.com/iam/",
+  "revision": "20170317",
+  "id": "iam:v1",
   "discoveryVersion": "v1",
   "version_module": "True",
   "schemas": {
-    "AuditData": {
-      "description": "Audit log information specific to Cloud IAM. This message is serialized\nas an `Any` type in the `ServiceData` message of an\n`AuditLog` message.",
-      "type": "object",
-      "properties": {
-        "policyDelta": {
-          "$ref": "PolicyDelta",
-          "description": "Policy delta between the original policy and the newly set policy."
-        }
-      },
-      "id": "AuditData"
-    },
     "BindingDelta": {
       "description": "One delta entry for Binding. Each individual change (only one member in each\nentry) to a binding will be a separate entry.",
       "type": "object",
       "properties": {
+        "member": {
+          "description": "A single identity requesting access for a Cloud Platform resource.\nFollows the same format of Binding.members.\nRequired",
+          "type": "string"
+        },
+        "role": {
+          "description": "Role that is assigned to `members`.\nFor example, `roles/viewer`, `roles/editor`, or `roles/owner`.\nRequired",
+          "type": "string"
+        },
         "action": {
           "enumDescriptions": [
             "Unspecified.",
@@ -584,14 +565,6 @@
           ],
           "description": "The action that was performed on a Binding.\nRequired",
           "type": "string"
-        },
-        "member": {
-          "description": "A single identity requesting access for a Cloud Platform resource.\nFollows the same format of Binding.members.\nRequired",
-          "type": "string"
-        },
-        "role": {
-          "description": "Role that is assigned to `members`.\nFor example, `roles/viewer`, `roles/editor`, or `roles/owner`.\nRequired",
-          "type": "string"
         }
       },
       "id": "BindingDelta"
@@ -629,21 +602,22 @@
       "id": "ListServiceAccountsResponse"
     },
     "CreateServiceAccountRequest": {
+      "description": "The service account create request.",
+      "type": "object",
       "properties": {
         "serviceAccount": {
-          "$ref": "ServiceAccount",
-          "description": "The ServiceAccount resource to create.\nCurrently, only the following values are user assignable:\n`display_name` ."
+          "description": "The ServiceAccount resource to create.\nCurrently, only the following values are user assignable:\n`display_name` .",
+          "$ref": "ServiceAccount"
         },
         "accountId": {
           "description": "Required. The account id that is used to generate the service account\nemail address and a stable unique id. It is unique within a project,\nmust be 6-30 characters long, and match the regular expression\n`[a-z]([-a-z0-9]*[a-z0-9])` to comply with RFC1035.",
           "type": "string"
         }
       },
-      "id": "CreateServiceAccountRequest",
-      "description": "The service account create request.",
-      "type": "object"
+      "id": "CreateServiceAccountRequest"
     },
     "QueryGrantableRolesResponse": {
+      "type": "object",
       "properties": {
         "roles": {
           "description": "The list of matching roles.",
@@ -654,11 +628,9 @@
         }
       },
       "id": "QueryGrantableRolesResponse",
-      "description": "The grantable role query response.",
-      "type": "object"
+      "description": "The grantable role query response."
     },
     "SignBlobRequest": {
-      "description": "The service account sign blob request.",
       "type": "object",
       "properties": {
         "bytesToSign": {
@@ -667,7 +639,8 @@
           "type": "string"
         }
       },
-      "id": "SignBlobRequest"
+      "id": "SignBlobRequest",
+      "description": "The service account sign blob request."
     },
     "Role": {
       "description": "A role in the Identity and Access Management API.",
@@ -678,12 +651,12 @@
           "type": "string"
         },
         "name": {
-          "description": "The name of the role.\n\nWhen Role is used in CreateRole, the role name must not be set.\n\nWhen Role is used in output and other input such as UpdateRole, the role\nname is the complete path, e.g., roles/logging.viewer for curated roles\nand organizations/{ORGANIZATION_ID}/roles/logging.viewer for custom roles.",
-          "type": "string"
+          "type": "string",
+          "description": "The name of the role.\n\nWhen Role is used in CreateRole, the role name must not be set.\n\nWhen Role is used in output and other input such as UpdateRole, the role\nname is the complete path, e.g., roles/logging.viewer for curated roles\nand organizations/{ORGANIZATION_ID}/roles/logging.viewer for custom roles."
         },
         "description": {
-          "description": "Optional.  A human-readable description for the role.",
-          "type": "string"
+          "type": "string",
+          "description": "Optional.  A human-readable description for the role."
         }
       },
       "id": "Role"
@@ -693,8 +666,8 @@
       "type": "object",
       "properties": {
         "policy": {
-          "$ref": "Policy",
-          "description": "REQUIRED: The complete policy to be applied to the `resource`. The size of\nthe policy is limited to a few 10s of KB. An empty policy is a\nvalid policy but certain Cloud Platform services (such as Projects)\nmight reject them."
+          "description": "REQUIRED: The complete policy to be applied to the `resource`. The size of\nthe policy is limited to a few 10s of KB. An empty policy is a\nvalid policy but certain Cloud Platform services (such as Projects)\nmight reject them.",
+          "$ref": "Policy"
         }
       },
       "id": "SetIamPolicyRequest"
@@ -717,48 +690,6 @@
       },
       "id": "Binding"
     },
-    "ServiceAccount": {
-      "description": "A service account in the Identity and Access Management API.\n\nTo create a service account, specify the `project_id` and the `account_id`\nfor the account.  The `account_id` is unique within the project, and is used\nto generate the service account email address and a stable\n`unique_id`.\n\nIf the account already exists, the account's resource name is returned\nin util::Status's ResourceInfo.resource_name in the format of\nprojects/{PROJECT_ID}/serviceAccounts/{SERVICE_ACCOUNT_EMAIL}. The caller can\nuse the name in other methods to access the account.\n\nAll other methods can identify the service account using the format\n`projects/{PROJECT_ID}/serviceAccounts/{SERVICE_ACCOUNT_EMAIL}`.\nUsing `-` as a wildcard for the project will infer the project from\nthe account. The `account` value can be the `email` address or the\n`unique_id` of the service account.",
-      "type": "object",
-      "properties": {
-        "oauth2ClientId": {
-          "description": "@OutputOnly. The OAuth2 client id for the service account.\nThis is used in conjunction with the OAuth2 clientconfig API to make\nthree legged OAuth2 (3LO) flows to access the data of Google users.",
-          "type": "string"
-        },
-        "uniqueId": {
-          "description": "@OutputOnly The unique and stable id of the service account.",
-          "type": "string"
-        },
-        "displayName": {
-          "description": "Optional. A user-specified description of the service account.  Must be\nfewer than 100 UTF-8 bytes.",
-          "type": "string"
-        },
-        "etag": {
-          "description": "Used to perform a consistent read-modify-write.",
-          "format": "byte",
-          "type": "string"
-        },
-        "name": {
-          "description": "The resource name of the service account in the following format:\n`projects/{PROJECT_ID}/serviceAccounts/{SERVICE_ACCOUNT_EMAIL}`.\n\nRequests using `-` as a wildcard for the project will infer the project\nfrom the `account` and the `account` value can be the `email` address or\nthe `unique_id` of the service account.\n\nIn responses the resource name will always be in the format\n`projects/{PROJECT_ID}/serviceAccounts/{SERVICE_ACCOUNT_EMAIL}`.",
-          "type": "string"
-        },
-        "email": {
-          "description": "@OutputOnly The email address of the service account.",
-          "type": "string"
-        },
-        "projectId": {
-          "description": "@OutputOnly The id of the project that owns the service account.",
-          "type": "string"
-        }
-      },
-      "id": "ServiceAccount"
-    },
-    "Empty": {
-      "properties": {},
-      "id": "Empty",
-      "description": "A generic empty message that you can re-use to avoid defining duplicated\nempty messages in your APIs. A typical example is to use it as the request\nor the response type of an API method. For instance:\n\n    service Foo {\n      rpc Bar(google.protobuf.Empty) returns (google.protobuf.Empty);\n    }\n\nThe JSON representation for `Empty` is empty JSON object `{}`.",
-      "type": "object"
-    },
     "QueryGrantableRolesRequest": {
       "description": "The grantable role query request.",
       "type": "object",
@@ -770,28 +701,70 @@
       },
       "id": "QueryGrantableRolesRequest"
     },
+    "Empty": {
+      "description": "A generic empty message that you can re-use to avoid defining duplicated\nempty messages in your APIs. A typical example is to use it as the request\nor the response type of an API method. For instance:\n\n    service Foo {\n      rpc Bar(google.protobuf.Empty) returns (google.protobuf.Empty);\n    }\n\nThe JSON representation for `Empty` is empty JSON object `{}`.",
+      "type": "object",
+      "properties": {},
+      "id": "Empty"
+    },
+    "ServiceAccount": {
+      "description": "A service account in the Identity and Access Management API.\n\nTo create a service account, specify the `project_id` and the `account_id`\nfor the account.  The `account_id` is unique within the project, and is used\nto generate the service account email address and a stable\n`unique_id`.\n\nIf the account already exists, the account's resource name is returned\nin util::Status's ResourceInfo.resource_name in the format of\nprojects/{PROJECT_ID}/serviceAccounts/{SERVICE_ACCOUNT_EMAIL}. The caller can\nuse the name in other methods to access the account.\n\nAll other methods can identify the service account using the format\n`projects/{PROJECT_ID}/serviceAccounts/{SERVICE_ACCOUNT_EMAIL}`.\nUsing `-` as a wildcard for the project will infer the project from\nthe account. The `account` value can be the `email` address or the\n`unique_id` of the service account.",
+      "type": "object",
+      "properties": {
+        "displayName": {
+          "description": "Optional. A user-specified description of the service account.  Must be\nfewer than 100 UTF-8 bytes.",
+          "type": "string"
+        },
+        "etag": {
+          "description": "Used to perform a consistent read-modify-write.",
+          "format": "byte",
+          "type": "string"
+        },
+        "email": {
+          "type": "string",
+          "description": "@OutputOnly The email address of the service account."
+        },
+        "name": {
+          "description": "The resource name of the service account in the following format:\n`projects/{PROJECT_ID}/serviceAccounts/{SERVICE_ACCOUNT_EMAIL}`.\n\nRequests using `-` as a wildcard for the project will infer the project\nfrom the `account` and the `account` value can be the `email` address or\nthe `unique_id` of the service account.\n\nIn responses the resource name will always be in the format\n`projects/{PROJECT_ID}/serviceAccounts/{SERVICE_ACCOUNT_EMAIL}`.",
+          "type": "string"
+        },
+        "projectId": {
+          "description": "@OutputOnly The id of the project that owns the service account.",
+          "type": "string"
+        },
+        "oauth2ClientId": {
+          "description": "@OutputOnly. The OAuth2 client id for the service account.\nThis is used in conjunction with the OAuth2 clientconfig API to make\nthree legged OAuth2 (3LO) flows to access the data of Google users.",
+          "type": "string"
+        },
+        "uniqueId": {
+          "description": "@OutputOnly The unique and stable id of the service account.",
+          "type": "string"
+        }
+      },
+      "id": "ServiceAccount"
+    },
     "TestIamPermissionsResponse": {
+      "description": "Response message for `TestIamPermissions` method.",
+      "type": "object",
       "properties": {
         "permissions": {
-          "description": "A subset of `TestPermissionsRequest.permissions` that the caller is\nallowed.",
           "type": "array",
           "items": {
             "type": "string"
-          }
+          },
+          "description": "A subset of `TestPermissionsRequest.permissions` that the caller is\nallowed."
         }
       },
-      "id": "TestIamPermissionsResponse",
-      "description": "Response message for `TestIamPermissions` method.",
-      "type": "object"
+      "id": "TestIamPermissionsResponse"
     },
     "ListServiceAccountKeysResponse": {
       "properties": {
         "keys": {
-          "description": "The public keys for the service account.",
           "type": "array",
           "items": {
             "$ref": "ServiceAccountKey"
-          }
+          },
+          "description": "The public keys for the service account."
         }
       },
       "id": "ListServiceAccountKeysResponse",
@@ -799,7 +772,6 @@
       "type": "object"
     },
     "ServiceAccountKey": {
-      "description": "Represents a service account key.\n\nA service account has two sets of key-pairs: user-managed, and\nsystem-managed.\n\nUser-managed key-pairs can be created and deleted by users.  Users are\nresponsible for rotating these keys periodically to ensure security of\ntheir service accounts.  Users retain the private key of these key-pairs,\nand Google retains ONLY the public key.\n\nSystem-managed key-pairs are managed automatically by Google, and rotated\ndaily without user intervention.  The private key never leaves Google's\nservers to maximize security.\n\nPublic keys for all service accounts are also published at the OAuth2\nService Account API.",
       "type": "object",
       "properties": {
         "name": {
@@ -812,42 +784,42 @@
           "type": "string"
         },
         "keyAlgorithm": {
-          "enum": [
-            "KEY_ALG_UNSPECIFIED",
-            "KEY_ALG_RSA_1024",
-            "KEY_ALG_RSA_2048"
-          ],
           "description": "Specifies the algorithm (and possibly key size) for the key.",
           "type": "string",
           "enumDescriptions": [
             "An unspecified key algorithm.",
             "1k RSA Key.",
             "2k RSA Key."
+          ],
+          "enum": [
+            "KEY_ALG_UNSPECIFIED",
+            "KEY_ALG_RSA_1024",
+            "KEY_ALG_RSA_2048"
           ]
         },
+        "validAfterTime": {
+          "type": "string",
+          "description": "The key can be used after this timestamp.",
+          "format": "google-datetime"
+        },
         "privateKeyType": {
-          "enumDescriptions": [
-            "Unspecified. Equivalent to `TYPE_GOOGLE_CREDENTIALS_FILE`.",
-            "PKCS12 format.\nThe password for the PKCS12 file is `notasecret`.\nFor more information, see https://tools.ietf.org/html/rfc7292.",
-            "Google Credentials File format."
-          ],
           "enum": [
             "TYPE_UNSPECIFIED",
             "TYPE_PKCS12_FILE",
             "TYPE_GOOGLE_CREDENTIALS_FILE"
           ],
           "description": "The output format for the private key.\nOnly provided in `CreateServiceAccountKey` responses, not\nin `GetServiceAccountKey` or `ListServiceAccountKey` responses.\n\nGoogle never exposes system-managed private keys, and never retains\nuser-managed private keys.",
-          "type": "string"
-        },
-        "validAfterTime": {
-          "description": "The key can be used after this timestamp.",
-          "format": "google-datetime",
-          "type": "string"
+          "type": "string",
+          "enumDescriptions": [
+            "Unspecified. Equivalent to `TYPE_GOOGLE_CREDENTIALS_FILE`.",
+            "PKCS12 format.\nThe password for the PKCS12 file is `notasecret`.\nFor more information, see https://tools.ietf.org/html/rfc7292.",
+            "Google Credentials File format."
+          ]
         },
         "privateKeyData": {
+          "type": "string",
           "description": "The private key data. Only provided in `CreateServiceAccountKey`\nresponses.",
-          "format": "byte",
-          "type": "string"
+          "format": "byte"
         },
         "publicKeyData": {
           "description": "The public key data. Only provided in `GetServiceAccountKey` responses.",
@@ -855,72 +827,43 @@
           "type": "string"
         }
       },
-      "id": "ServiceAccountKey"
+      "id": "ServiceAccountKey",
+      "description": "Represents a service account key.\n\nA service account has two sets of key-pairs: user-managed, and\nsystem-managed.\n\nUser-managed key-pairs can be created and deleted by users.  Users are\nresponsible for rotating these keys periodically to ensure security of\ntheir service accounts.  Users retain the private key of these key-pairs,\nand Google retains ONLY the public key.\n\nSystem-managed key-pairs are managed automatically by Google, and rotated\ndaily without user intervention.  The private key never leaves Google's\nservers to maximize security.\n\nPublic keys for all service accounts are also published at the OAuth2\nService Account API."
     },
     "CreateServiceAccountKeyRequest": {
+      "description": "The service account key create request.",
+      "type": "object",
       "properties": {
-        "privateKeyType": {
-          "enum": [
-            "TYPE_UNSPECIFIED",
-            "TYPE_PKCS12_FILE",
-            "TYPE_GOOGLE_CREDENTIALS_FILE"
-          ],
-          "description": "The output format of the private key. `GOOGLE_CREDENTIALS_FILE` is the\ndefault output format.",
-          "type": "string",
-          "enumDescriptions": [
-            "Unspecified. Equivalent to `TYPE_GOOGLE_CREDENTIALS_FILE`.",
-            "PKCS12 format.\nThe password for the PKCS12 file is `notasecret`.\nFor more information, see https://tools.ietf.org/html/rfc7292.",
-            "Google Credentials File format."
-          ]
-        },
         "keyAlgorithm": {
+          "enumDescriptions": [
+            "An unspecified key algorithm.",
+            "1k RSA Key.",
+            "2k RSA Key."
+          ],
           "enum": [
             "KEY_ALG_UNSPECIFIED",
             "KEY_ALG_RSA_1024",
             "KEY_ALG_RSA_2048"
           ],
           "description": "Which type of key and algorithm to use for the key.\nThe default is currently a 2K RSA key.  However this may change in the\nfuture.",
-          "type": "string",
-          "enumDescriptions": [
-            "An unspecified key algorithm.",
-            "1k RSA Key.",
-            "2k RSA Key."
-          ]
-        }
-      },
-      "id": "CreateServiceAccountKeyRequest",
-      "description": "The service account key create request.",
-      "type": "object"
-    },
-    "TestIamPermissionsRequest": {
-      "description": "Request message for `TestIamPermissions` method.",
-      "type": "object",
-      "properties": {
-        "permissions": {
-          "description": "The set of permissions to check for the `resource`. Permissions with\nwildcards (such as '*' or 'storage.*') are not allowed. For more\ninformation see\n[IAM Overview](https://cloud.google.com/iam/docs/overview#permissions).",
-          "type": "array",
-          "items": {
-            "type": "string"
-          }
-        }
-      },
-      "id": "TestIamPermissionsRequest"
-    },
-    "SignBlobResponse": {
-      "properties": {
-        "keyId": {
-          "description": "The id of the key used to sign the blob.",
           "type": "string"
         },
-        "signature": {
-          "description": "The signed blob.",
-          "format": "byte",
+        "privateKeyType": {
+          "enumDescriptions": [
+            "Unspecified. Equivalent to `TYPE_GOOGLE_CREDENTIALS_FILE`.",
+            "PKCS12 format.\nThe password for the PKCS12 file is `notasecret`.\nFor more information, see https://tools.ietf.org/html/rfc7292.",
+            "Google Credentials File format."
+          ],
+          "enum": [
+            "TYPE_UNSPECIFIED",
+            "TYPE_PKCS12_FILE",
+            "TYPE_GOOGLE_CREDENTIALS_FILE"
+          ],
+          "description": "The output format of the private key. `GOOGLE_CREDENTIALS_FILE` is the\ndefault output format.",
           "type": "string"
         }
       },
-      "id": "SignBlobResponse",
-      "description": "The service account sign blob response.",
-      "type": "object"
+      "id": "CreateServiceAccountKeyRequest"
     },
     "SignJwtResponse": {
       "description": "The service account sign JWT response.",
@@ -937,23 +880,43 @@
       },
       "id": "SignJwtResponse"
     },
-    "SignJwtRequest": {
+    "SignBlobResponse": {
+      "description": "The service account sign blob response.",
+      "type": "object",
       "properties": {
-        "payload": {
-          "description": "The JWT payload to sign, a JSON JWT Claim set.",
+        "keyId": {
+          "description": "The id of the key used to sign the blob.",
+          "type": "string"
+        },
+        "signature": {
+          "description": "The signed blob.",
+          "format": "byte",
           "type": "string"
         }
       },
-      "id": "SignJwtRequest",
-      "description": "The service account sign JWT request.",
-      "type": "object"
+      "id": "SignBlobResponse"
+    },
+    "TestIamPermissionsRequest": {
+      "description": "Request message for `TestIamPermissions` method.",
+      "type": "object",
+      "properties": {
+        "permissions": {
+          "description": "The set of permissions to check for the `resource`. Permissions with\nwildcards (such as '*' or 'storage.*') are not allowed. For more\ninformation see\n[IAM Overview](https://cloud.google.com/iam/docs/overview#permissions).",
+          "type": "array",
+          "items": {
+            "type": "string"
+          }
+        }
+      },
+      "id": "TestIamPermissionsRequest"
     },
     "Policy": {
+      "type": "object",
       "properties": {
         "etag": {
+          "type": "string",
           "description": "`etag` is used for optimistic concurrency control as a way to help\nprevent simultaneous updates of a policy from overwriting each other.\nIt is strongly suggested that systems make use of the `etag` in the\nread-modify-write cycle to perform policy updates in order to avoid race\nconditions: An `etag` is returned in the response to `getIamPolicy`, and\nsystems are expected to put that etag in the request to `setIamPolicy` to\nensure that their change will be applied to the same version of the policy.\n\nIf no `etag` is provided in the call to `setIamPolicy`, then the existing\npolicy is overwritten blindly.",
-          "format": "byte",
-          "type": "string"
+          "format": "byte"
         },
         "version": {
           "description": "Version of the `Policy`. The default version is 0.",
@@ -969,13 +932,50 @@
         }
       },
       "id": "Policy",
-      "description": "Defines an Identity and Access Management (IAM) policy. It is used to\nspecify access control policies for Cloud Platform resources.\n\n\nA `Policy` consists of a list of `bindings`. A `Binding` binds a list of\n`members` to a `role`, where the members can be user accounts, Google groups,\nGoogle domains, and service accounts. A `role` is a named list of permissions\ndefined by IAM.\n\n**Example**\n\n    {\n      \"bindings\": [\n        {\n          \"role\": \"roles/owner\",\n          \"members\": [\n            \"user:mike@example.com\",\n            \"group:admins@example.com\",\n            \"domain:google.com\",\n            \"serviceAccount:my-other-app@appspot.gserviceaccount.com\",\n          ]\n        },\n        {\n          \"role\": \"roles/viewer\",\n          \"members\": [\"user:sean@example.com\"]\n        }\n      ]\n    }\n\nFor a description of IAM and its features, see the\n[IAM developer's guide](https://cloud.google.com/iam).",
-      "type": "object"
+      "description": "Defines an Identity and Access Management (IAM) policy. It is used to\nspecify access control policies for Cloud Platform resources.\n\n\nA `Policy` consists of a list of `bindings`. A `Binding` binds a list of\n`members` to a `role`, where the members can be user accounts, Google groups,\nGoogle domains, and service accounts. A `role` is a named list of permissions\ndefined by IAM.\n\n**Example**\n\n    {\n      \"bindings\": [\n        {\n          \"role\": \"roles/owner\",\n          \"members\": [\n            \"user:mike@example.com\",\n            \"group:admins@example.com\",\n            \"domain:google.com\",\n            \"serviceAccount:my-other-app@appspot.gserviceaccount.com\",\n          ]\n        },\n        {\n          \"role\": \"roles/viewer\",\n          \"members\": [\"user:sean@example.com\"]\n        }\n      ]\n    }\n\nFor a description of IAM and its features, see the\n[IAM developer's guide](https://cloud.google.com/iam)."
+    },
+    "SignJwtRequest": {
+      "type": "object",
+      "properties": {
+        "payload": {
+          "description": "The JWT payload to sign, a JSON JWT Claim set.",
+          "type": "string"
+        }
+      },
+      "id": "SignJwtRequest",
+      "description": "The service account sign JWT request."
+    },
+    "AuditData": {
+      "description": "Audit log information specific to Cloud IAM. This message is serialized\nas an `Any` type in the `ServiceData` message of an\n`AuditLog` message.",
+      "type": "object",
+      "properties": {
+        "policyDelta": {
+          "$ref": "PolicyDelta",
+          "description": "Policy delta between the original policy and the newly set policy."
+        }
+      },
+      "id": "AuditData"
     }
   },
   "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"
+  "protocol": "rest",
+  "canonicalName": "iam",
+  "auth": {
+    "oauth2": {
+      "scopes": {
+        "https://www.googleapis.com/auth/cloud-platform": {
+          "description": "View and manage your data across Google Cloud Platform services"
+        }
+      }
+    }
+  },
+  "rootUrl": "https://iam.googleapis.com/",
+  "ownerDomain": "google.com",
+  "name": "iam",
+  "batchPath": "batch",
+  "title": "Google Identity and Access Management (IAM) API",
+  "ownerName": "Google"
 }
diff --git a/iam/v1/iam-gen.go b/iam/v1/iam-gen.go
index 05a0b63..13a577d 100644
--- a/iam/v1/iam-gen.go
+++ b/iam/v1/iam-gen.go
@@ -62,10 +62,9 @@
 }
 
 type Service struct {
-	client                    *http.Client
-	BasePath                  string // API endpoint base URL
-	UserAgent                 string // optional additional User-Agent fragment
-	GoogleClientHeaderElement string // client header fragment, for Google use only
+	client    *http.Client
+	BasePath  string // API endpoint base URL
+	UserAgent string // optional additional User-Agent fragment
 
 	Projects *ProjectsService
 
@@ -79,10 +78,6 @@
 	return googleapi.UserAgent + " " + s.UserAgent
 }
 
-func (s *Service) clientHeader() string {
-	return gensupport.GoogleClientHeader("20170210", s.GoogleClientHeaderElement)
-}
-
 func NewProjectsService(s *Service) *ProjectsService {
 	rs := &ProjectsService{s: s}
 	rs.ServiceAccounts = NewProjectsServiceAccountsService(s)
@@ -1160,7 +1155,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	var body io.Reader = nil
 	body, err := googleapi.WithoutDataWrapper.JSONReader(c.createserviceaccountrequest)
 	if err != nil {
@@ -1294,7 +1288,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	var body io.Reader = nil
 	c.urlParams_.Set("alt", alt)
 	urls := googleapi.ResolveRelative(c.s.BasePath, "v1/{+name}")
@@ -1431,7 +1424,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	if c.ifNoneMatch_ != "" {
 		reqHeaders.Set("If-None-Match", c.ifNoneMatch_)
 	}
@@ -1562,7 +1554,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	var body io.Reader = nil
 	c.urlParams_.Set("alt", alt)
 	urls := googleapi.ResolveRelative(c.s.BasePath, "v1/{+resource}:getIamPolicy")
@@ -1622,7 +1613,7 @@
 	//   ],
 	//   "parameters": {
 	//     "resource": {
-	//       "description": "REQUIRED: The resource for which the policy is being requested.\n`resource` is usually specified as a path. For example, a Project\nresource is specified as `projects/{project}`.",
+	//       "description": "REQUIRED: The resource for which the policy is being requested.\nSee the operation documentation for the appropriate value for this field.",
 	//       "location": "path",
 	//       "pattern": "^projects/[^/]+/serviceAccounts/[^/]+$",
 	//       "required": true,
@@ -1719,7 +1710,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	if c.ifNoneMatch_ != "" {
 		reqHeaders.Set("If-None-Match", c.ifNoneMatch_)
 	}
@@ -1884,7 +1874,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	var body io.Reader = nil
 	body, err := googleapi.WithoutDataWrapper.JSONReader(c.setiampolicyrequest)
 	if err != nil {
@@ -1949,7 +1938,7 @@
 	//   ],
 	//   "parameters": {
 	//     "resource": {
-	//       "description": "REQUIRED: The resource for which the policy is being specified.\n`resource` is usually specified as a path. For example, a Project\nresource is specified as `projects/{project}`.",
+	//       "description": "REQUIRED: The resource for which the policy is being specified.\nSee the operation documentation for the appropriate value for this field.",
 	//       "location": "path",
 	//       "pattern": "^projects/[^/]+/serviceAccounts/[^/]+$",
 	//       "required": true,
@@ -2021,7 +2010,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	var body io.Reader = nil
 	body, err := googleapi.WithoutDataWrapper.JSONReader(c.signblobrequest)
 	if err != nil {
@@ -2164,7 +2152,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	var body io.Reader = nil
 	body, err := googleapi.WithoutDataWrapper.JSONReader(c.signjwtrequest)
 	if err != nil {
@@ -2302,7 +2289,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	var body io.Reader = nil
 	body, err := googleapi.WithoutDataWrapper.JSONReader(c.testiampermissionsrequest)
 	if err != nil {
@@ -2367,7 +2353,7 @@
 	//   ],
 	//   "parameters": {
 	//     "resource": {
-	//       "description": "REQUIRED: The resource for which the policy detail is being requested.\n`resource` is usually specified as a path. For example, a Project\nresource is specified as `projects/{project}`.",
+	//       "description": "REQUIRED: The resource for which the policy detail is being requested.\nSee the operation documentation for the appropriate value for this field.",
 	//       "location": "path",
 	//       "pattern": "^projects/[^/]+/serviceAccounts/[^/]+$",
 	//       "required": true,
@@ -2442,7 +2428,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	var body io.Reader = nil
 	body, err := googleapi.WithoutDataWrapper.JSONReader(c.serviceaccount)
 	if err != nil {
@@ -2579,7 +2564,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	var body io.Reader = nil
 	body, err := googleapi.WithoutDataWrapper.JSONReader(c.createserviceaccountkeyrequest)
 	if err != nil {
@@ -2713,7 +2697,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	var body io.Reader = nil
 	c.urlParams_.Set("alt", alt)
 	urls := googleapi.ResolveRelative(c.s.BasePath, "v1/{+name}")
@@ -2864,7 +2847,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	if c.ifNoneMatch_ != "" {
 		reqHeaders.Set("If-None-Match", c.ifNoneMatch_)
 	}
@@ -3028,7 +3010,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	if c.ifNoneMatch_ != "" {
 		reqHeaders.Set("If-None-Match", c.ifNoneMatch_)
 	}
@@ -3172,7 +3153,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	var body io.Reader = nil
 	body, err := googleapi.WithoutDataWrapper.JSONReader(c.querygrantablerolesrequest)
 	if err != nil {
diff --git a/identitytoolkit/v3/identitytoolkit-gen.go b/identitytoolkit/v3/identitytoolkit-gen.go
index 46be2e1..5db1441 100644
--- a/identitytoolkit/v3/identitytoolkit-gen.go
+++ b/identitytoolkit/v3/identitytoolkit-gen.go
@@ -64,10 +64,9 @@
 }
 
 type Service struct {
-	client                    *http.Client
-	BasePath                  string // API endpoint base URL
-	UserAgent                 string // optional additional User-Agent fragment
-	GoogleClientHeaderElement string // client header fragment, for Google use only
+	client    *http.Client
+	BasePath  string // API endpoint base URL
+	UserAgent string // optional additional User-Agent fragment
 
 	Relyingparty *RelyingpartyService
 }
@@ -79,10 +78,6 @@
 	return googleapi.UserAgent + " " + s.UserAgent
 }
 
-func (s *Service) clientHeader() string {
-	return gensupport.GoogleClientHeader("20170210", s.GoogleClientHeaderElement)
-}
-
 func NewRelyingpartyService(s *Service) *RelyingpartyService {
 	rs := &RelyingpartyService{s: s}
 	return rs
@@ -2080,7 +2075,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	var body io.Reader = nil
 	body, err := googleapi.WithoutDataWrapper.JSONReader(c.identitytoolkitrelyingpartycreateauthurirequest)
 	if err != nil {
@@ -2198,7 +2192,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	var body io.Reader = nil
 	body, err := googleapi.WithoutDataWrapper.JSONReader(c.identitytoolkitrelyingpartydeleteaccountrequest)
 	if err != nil {
@@ -2316,7 +2309,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	var body io.Reader = nil
 	body, err := googleapi.WithoutDataWrapper.JSONReader(c.identitytoolkitrelyingpartydownloadaccountrequest)
 	if err != nil {
@@ -2456,7 +2448,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	var body io.Reader = nil
 	body, err := googleapi.WithoutDataWrapper.JSONReader(c.identitytoolkitrelyingpartygetaccountinforequest)
 	if err != nil {
@@ -2574,7 +2565,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	var body io.Reader = nil
 	body, err := googleapi.WithoutDataWrapper.JSONReader(c.relyingparty)
 	if err != nil {
@@ -2716,7 +2706,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	if c.ifNoneMatch_ != "" {
 		reqHeaders.Set("If-None-Match", c.ifNoneMatch_)
 	}
@@ -2852,7 +2841,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	if c.ifNoneMatch_ != "" {
 		reqHeaders.Set("If-None-Match", c.ifNoneMatch_)
 	}
@@ -2954,7 +2942,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	if c.ifNoneMatch_ != "" {
 		reqHeaders.Set("If-None-Match", c.ifNoneMatch_)
 	}
@@ -3067,7 +3054,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	var body io.Reader = nil
 	body, err := googleapi.WithoutDataWrapper.JSONReader(c.identitytoolkitrelyingpartyresetpasswordrequest)
 	if err != nil {
@@ -3185,7 +3171,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	var body io.Reader = nil
 	body, err := googleapi.WithoutDataWrapper.JSONReader(c.identitytoolkitrelyingpartysetaccountinforequest)
 	if err != nil {
@@ -3303,7 +3288,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	var body io.Reader = nil
 	body, err := googleapi.WithoutDataWrapper.JSONReader(c.identitytoolkitrelyingpartysetprojectconfigrequest)
 	if err != nil {
@@ -3423,7 +3407,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	var body io.Reader = nil
 	body, err := googleapi.WithoutDataWrapper.JSONReader(c.identitytoolkitrelyingpartysignoutuserrequest)
 	if err != nil {
@@ -3543,7 +3526,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	var body io.Reader = nil
 	body, err := googleapi.WithoutDataWrapper.JSONReader(c.identitytoolkitrelyingpartysignupnewuserrequest)
 	if err != nil {
@@ -3661,7 +3643,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	var body io.Reader = nil
 	body, err := googleapi.WithoutDataWrapper.JSONReader(c.identitytoolkitrelyingpartyuploadaccountrequest)
 	if err != nil {
@@ -3780,7 +3761,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	var body io.Reader = nil
 	body, err := googleapi.WithoutDataWrapper.JSONReader(c.identitytoolkitrelyingpartyverifyassertionrequest)
 	if err != nil {
@@ -3898,7 +3878,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	var body io.Reader = nil
 	body, err := googleapi.WithoutDataWrapper.JSONReader(c.identitytoolkitrelyingpartyverifycustomtokenrequest)
 	if err != nil {
@@ -4016,7 +3995,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	var body io.Reader = nil
 	body, err := googleapi.WithoutDataWrapper.JSONReader(c.identitytoolkitrelyingpartyverifypasswordrequest)
 	if err != nil {
diff --git a/kgsearch/v1/kgsearch-api.json b/kgsearch/v1/kgsearch-api.json
index f21d9bf..1623b1f 100644
--- a/kgsearch/v1/kgsearch-api.json
+++ b/kgsearch/v1/kgsearch-api.json
@@ -1,153 +1,4 @@
 {
-  "discoveryVersion": "v1",
-  "ownerName": "Google",
-  "version_module": "True",
-  "resources": {
-    "entities": {
-      "methods": {
-        "search": {
-          "response": {
-            "$ref": "SearchResponse"
-          },
-          "parameterOrder": [],
-          "httpMethod": "GET",
-          "parameters": {
-            "types": {
-              "description": "Restricts returned entities with these types, e.g. Person\n(as defined in http://schema.org/Person). If multiple types are specified,\nreturned entities will contain one or more of these types.",
-              "type": "string",
-              "repeated": true,
-              "location": "query"
-            },
-            "indent": {
-              "description": "Enables indenting of json results.",
-              "type": "boolean",
-              "location": "query"
-            },
-            "languages": {
-              "description": "The list of language codes (defined in ISO 693) to run the query with,\ne.g. 'en'.",
-              "type": "string",
-              "repeated": true,
-              "location": "query"
-            },
-            "ids": {
-              "repeated": true,
-              "location": "query",
-              "description": "The list of entity id to be used for search instead of query string.\nTo specify multiple ids in the HTTP request, repeat the parameter in the\nURL as in ...?ids=A&ids=B",
-              "type": "string"
-            },
-            "limit": {
-              "description": "Limits the number of entities to be returned.",
-              "format": "int32",
-              "type": "integer",
-              "location": "query"
-            },
-            "prefix": {
-              "location": "query",
-              "description": "Enables prefix match against names and aliases of entities",
-              "type": "boolean"
-            },
-            "query": {
-              "location": "query",
-              "description": "The literal query string for search.",
-              "type": "string"
-            }
-          },
-          "flatPath": "v1/entities:search",
-          "path": "v1/entities:search",
-          "id": "kgsearch.entities.search",
-          "description": "Searches Knowledge Graph for entities that match the constraints.\nA list of matched entities will be returned in response, which will be in\nJSON-LD format and compatible with http://schema.org"
-        }
-      }
-    }
-  },
-  "parameters": {
-    "oauth_token": {
-      "description": "OAuth 2.0 token for the current user.",
-      "type": "string",
-      "location": "query"
-    },
-    "bearer_token": {
-      "location": "query",
-      "description": "OAuth bearer token.",
-      "type": "string"
-    },
-    "upload_protocol": {
-      "location": "query",
-      "description": "Upload protocol for media (e.g. \"raw\", \"multipart\").",
-      "type": "string"
-    },
-    "prettyPrint": {
-      "location": "query",
-      "description": "Returns response with indentations and line breaks.",
-      "type": "boolean",
-      "default": "true"
-    },
-    "fields": {
-      "description": "Selector specifying which fields to include in a partial response.",
-      "type": "string",
-      "location": "query"
-    },
-    "uploadType": {
-      "description": "Legacy upload protocol for media (e.g. \"media\", \"multipart\").",
-      "type": "string",
-      "location": "query"
-    },
-    "$.xgafv": {
-      "description": "V1 error format.",
-      "type": "string",
-      "enumDescriptions": [
-        "v1 error format",
-        "v2 error format"
-      ],
-      "location": "query",
-      "enum": [
-        "1",
-        "2"
-      ]
-    },
-    "callback": {
-      "description": "JSONP",
-      "type": "string",
-      "location": "query"
-    },
-    "alt": {
-      "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",
-      "description": "Data format for response.",
-      "default": "json",
-      "enum": [
-        "json",
-        "media",
-        "proto"
-      ]
-    },
-    "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"
-    },
-    "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"
-    },
-    "pp": {
-      "description": "Pretty-print response.",
-      "type": "boolean",
-      "default": "true",
-      "location": "query"
-    }
-  },
   "schemas": {
     "SearchResponse": {
       "description": "Response message includes the context and a list of matching results\nwhich contain the detail of associated entities.",
@@ -172,16 +23,16 @@
       "id": "SearchResponse"
     }
   },
-  "protocol": "rest",
   "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",
   "version": "v1",
   "baseUrl": "https://kgsearch.googleapis.com/",
-  "servicePath": "",
-  "description": "Searches the Google Knowledge Graph for entities.",
   "kind": "discovery#restDescription",
+  "description": "Searches the Google Knowledge Graph for entities.",
+  "servicePath": "",
   "rootUrl": "https://kgsearch.googleapis.com/",
   "basePath": "",
   "ownerDomain": "google.com",
@@ -190,5 +41,154 @@
   "revision": "20170109",
   "documentationLink": "https://developers.google.com/knowledge-graph/",
   "id": "kgsearch:v1",
-  "title": "Knowledge Graph Search API"
+  "title": "Knowledge Graph Search API",
+  "discoveryVersion": "v1",
+  "ownerName": "Google",
+  "version_module": "True",
+  "resources": {
+    "entities": {
+      "methods": {
+        "search": {
+          "flatPath": "v1/entities:search",
+          "path": "v1/entities:search",
+          "id": "kgsearch.entities.search",
+          "description": "Searches Knowledge Graph for entities that match the constraints.\nA list of matched entities will be returned in response, which will be in\nJSON-LD format and compatible with http://schema.org",
+          "response": {
+            "$ref": "SearchResponse"
+          },
+          "parameterOrder": [],
+          "httpMethod": "GET",
+          "parameters": {
+            "types": {
+              "description": "Restricts returned entities with these types, e.g. Person\n(as defined in http://schema.org/Person). If multiple types are specified,\nreturned entities will contain one or more of these types.",
+              "type": "string",
+              "repeated": true,
+              "location": "query"
+            },
+            "indent": {
+              "location": "query",
+              "description": "Enables indenting of json results.",
+              "type": "boolean"
+            },
+            "languages": {
+              "description": "The list of language codes (defined in ISO 693) to run the query with,\ne.g. 'en'.",
+              "type": "string",
+              "repeated": true,
+              "location": "query"
+            },
+            "ids": {
+              "location": "query",
+              "description": "The list of entity id to be used for search instead of query string.\nTo specify multiple ids in the HTTP request, repeat the parameter in the\nURL as in ...?ids=A&ids=B",
+              "type": "string",
+              "repeated": true
+            },
+            "limit": {
+              "description": "Limits the number of entities to be returned.",
+              "format": "int32",
+              "type": "integer",
+              "location": "query"
+            },
+            "prefix": {
+              "location": "query",
+              "description": "Enables prefix match against names and aliases of entities",
+              "type": "boolean"
+            },
+            "query": {
+              "description": "The literal query string for search.",
+              "type": "string",
+              "location": "query"
+            }
+          }
+        }
+      }
+    }
+  },
+  "parameters": {
+    "pp": {
+      "location": "query",
+      "description": "Pretty-print response.",
+      "type": "boolean",
+      "default": "true"
+    },
+    "bearer_token": {
+      "location": "query",
+      "description": "OAuth bearer token.",
+      "type": "string"
+    },
+    "oauth_token": {
+      "location": "query",
+      "description": "OAuth 2.0 token for the current user.",
+      "type": "string"
+    },
+    "upload_protocol": {
+      "description": "Upload protocol for media (e.g. \"raw\", \"multipart\").",
+      "type": "string",
+      "location": "query"
+    },
+    "prettyPrint": {
+      "location": "query",
+      "description": "Returns response with indentations and line breaks.",
+      "type": "boolean",
+      "default": "true"
+    },
+    "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.",
+      "type": "string",
+      "location": "query"
+    },
+    "callback": {
+      "location": "query",
+      "description": "JSONP",
+      "type": "string"
+    },
+    "$.xgafv": {
+      "description": "V1 error format.",
+      "type": "string",
+      "enumDescriptions": [
+        "v1 error format",
+        "v2 error format"
+      ],
+      "location": "query",
+      "enum": [
+        "1",
+        "2"
+      ]
+    },
+    "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",
+      "description": "Data format for response.",
+      "default": "json",
+      "enum": [
+        "json",
+        "media",
+        "proto"
+      ],
+      "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"
+    },
+    "access_token": {
+      "description": "OAuth access token.",
+      "type": "string",
+      "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.",
+      "type": "string",
+      "location": "query"
+    }
+  }
 }
diff --git a/kgsearch/v1/kgsearch-gen.go b/kgsearch/v1/kgsearch-gen.go
index 3dd03d6..3af8e38 100644
--- a/kgsearch/v1/kgsearch-gen.go
+++ b/kgsearch/v1/kgsearch-gen.go
@@ -55,10 +55,9 @@
 }
 
 type Service struct {
-	client                    *http.Client
-	BasePath                  string // API endpoint base URL
-	UserAgent                 string // optional additional User-Agent fragment
-	GoogleClientHeaderElement string // client header fragment, for Google use only
+	client    *http.Client
+	BasePath  string // API endpoint base URL
+	UserAgent string // optional additional User-Agent fragment
 
 	Entities *EntitiesService
 }
@@ -70,10 +69,6 @@
 	return googleapi.UserAgent + " " + s.UserAgent
 }
 
-func (s *Service) clientHeader() string {
-	return gensupport.GoogleClientHeader("20170210", s.GoogleClientHeaderElement)
-}
-
 func NewEntitiesService(s *Service) *EntitiesService {
 	rs := &EntitiesService{s: s}
 	return rs
@@ -236,7 +231,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	if c.ifNoneMatch_ != "" {
 		reqHeaders.Set("If-None-Match", c.ifNoneMatch_)
 	}
diff --git a/language/v1/language-api.json b/language/v1/language-api.json
index 061f79a..5d5d50e 100644
--- a/language/v1/language-api.json
+++ b/language/v1/language-api.json
@@ -1,29 +1,295 @@
 {
-  "kind": "discovery#restDescription",
+  "canonicalName": "Cloud Natural Language",
+  "auth": {
+    "oauth2": {
+      "scopes": {
+        "https://www.googleapis.com/auth/cloud-platform": {
+          "description": "View and manage your data across Google Cloud Platform services"
+        }
+      }
+    }
+  },
+  "rootUrl": "https://language.googleapis.com/",
+  "ownerDomain": "google.com",
+  "name": "language",
+  "batchPath": "batch",
+  "title": "Google Cloud Natural Language API",
+  "ownerName": "Google",
+  "resources": {
+    "documents": {
+      "methods": {
+        "analyzeSentiment": {
+          "response": {
+            "$ref": "AnalyzeSentimentResponse"
+          },
+          "parameterOrder": [],
+          "httpMethod": "POST",
+          "parameters": {},
+          "scopes": [
+            "https://www.googleapis.com/auth/cloud-platform"
+          ],
+          "flatPath": "v1/documents:analyzeSentiment",
+          "path": "v1/documents:analyzeSentiment",
+          "id": "language.documents.analyzeSentiment",
+          "request": {
+            "$ref": "AnalyzeSentimentRequest"
+          },
+          "description": "Analyzes the sentiment of the provided text."
+        },
+        "annotateText": {
+          "httpMethod": "POST",
+          "parameterOrder": [],
+          "response": {
+            "$ref": "AnnotateTextResponse"
+          },
+          "parameters": {},
+          "scopes": [
+            "https://www.googleapis.com/auth/cloud-platform"
+          ],
+          "flatPath": "v1/documents:annotateText",
+          "id": "language.documents.annotateText",
+          "path": "v1/documents:annotateText",
+          "request": {
+            "$ref": "AnnotateTextRequest"
+          },
+          "description": "A convenience method that provides all the features that analyzeSentiment,\nanalyzeEntities, and analyzeSyntax provide in one call."
+        },
+        "analyzeEntities": {
+          "response": {
+            "$ref": "AnalyzeEntitiesResponse"
+          },
+          "parameterOrder": [],
+          "httpMethod": "POST",
+          "parameters": {},
+          "scopes": [
+            "https://www.googleapis.com/auth/cloud-platform"
+          ],
+          "flatPath": "v1/documents:analyzeEntities",
+          "path": "v1/documents:analyzeEntities",
+          "id": "language.documents.analyzeEntities",
+          "request": {
+            "$ref": "AnalyzeEntitiesRequest"
+          },
+          "description": "Finds named entities (currently proper names and common nouns) in the text\nalong with entity types, salience, mentions for each entity, and\nother properties."
+        },
+        "analyzeSyntax": {
+          "id": "language.documents.analyzeSyntax",
+          "path": "v1/documents:analyzeSyntax",
+          "request": {
+            "$ref": "AnalyzeSyntaxRequest"
+          },
+          "description": "Analyzes the syntax of the text and provides sentence boundaries and\ntokenization along with part of speech tags, dependency trees, and other\nproperties.",
+          "httpMethod": "POST",
+          "parameterOrder": [],
+          "response": {
+            "$ref": "AnalyzeSyntaxResponse"
+          },
+          "parameters": {},
+          "scopes": [
+            "https://www.googleapis.com/auth/cloud-platform"
+          ],
+          "flatPath": "v1/documents:analyzeSyntax"
+        }
+      }
+    }
+  },
+  "parameters": {
+    "uploadType": {
+      "description": "Legacy upload protocol for media (e.g. \"media\", \"multipart\").",
+      "type": "string",
+      "location": "query"
+    },
+    "fields": {
+      "location": "query",
+      "description": "Selector specifying which fields to include in a partial response.",
+      "type": "string"
+    },
+    "$.xgafv": {
+      "enumDescriptions": [
+        "v1 error format",
+        "v2 error format"
+      ],
+      "location": "query",
+      "enum": [
+        "1",
+        "2"
+      ],
+      "description": "V1 error format.",
+      "type": "string"
+    },
+    "callback": {
+      "description": "JSONP",
+      "type": "string",
+      "location": "query"
+    },
+    "alt": {
+      "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",
+      "description": "Data format for response.",
+      "default": "json"
+    },
+    "access_token": {
+      "location": "query",
+      "description": "OAuth access token.",
+      "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"
+    },
+    "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"
+    },
+    "pp": {
+      "description": "Pretty-print response.",
+      "type": "boolean",
+      "default": "true",
+      "location": "query"
+    },
+    "oauth_token": {
+      "description": "OAuth 2.0 token for the current user.",
+      "type": "string",
+      "location": "query"
+    },
+    "bearer_token": {
+      "location": "query",
+      "description": "OAuth bearer token.",
+      "type": "string"
+    },
+    "upload_protocol": {
+      "location": "query",
+      "description": "Upload protocol for media (e.g. \"raw\", \"multipart\").",
+      "type": "string"
+    },
+    "prettyPrint": {
+      "location": "query",
+      "description": "Returns response with indentations and line breaks.",
+      "type": "boolean",
+      "default": "true"
+    }
+  },
+  "version": "v1",
+  "baseUrl": "https://language.googleapis.com/",
   "description": "Google Cloud Natural Language API provides natural language understanding technologies to developers. Examples include sentiment analysis, entity recognition, and text annotations.",
+  "kind": "discovery#restDescription",
   "servicePath": "",
   "basePath": "",
-  "documentationLink": "https://cloud.google.com/natural-language/",
-  "revision": "20170301",
   "id": "language:v1",
+  "revision": "20170313",
+  "documentationLink": "https://cloud.google.com/natural-language/",
   "discoveryVersion": "v1",
   "version_module": "True",
   "schemas": {
+    "Features": {
+      "description": "All available features for sentiment, syntax, and semantic analysis.\nSetting each one to true will enable that specific analysis for the input.",
+      "type": "object",
+      "properties": {
+        "extractSyntax": {
+          "description": "Extract syntax information.",
+          "type": "boolean"
+        },
+        "extractDocumentSentiment": {
+          "description": "Extract document-level sentiment.",
+          "type": "boolean"
+        },
+        "extractEntities": {
+          "description": "Extract entities.",
+          "type": "boolean"
+        }
+      },
+      "id": "Features"
+    },
+    "EntityMention": {
+      "properties": {
+        "text": {
+          "description": "The mention text.",
+          "$ref": "TextSpan"
+        },
+        "type": {
+          "enum": [
+            "TYPE_UNKNOWN",
+            "PROPER",
+            "COMMON"
+          ],
+          "description": "The type of the entity mention.",
+          "type": "string",
+          "enumDescriptions": [
+            "Unknown",
+            "Proper name",
+            "Common noun (or noun compound)"
+          ]
+        }
+      },
+      "id": "EntityMention",
+      "description": "Represents a mention for an entity in the text. Currently, proper noun\nmentions are supported.",
+      "type": "object"
+    },
+    "Sentence": {
+      "properties": {
+        "text": {
+          "description": "The sentence text.",
+          "$ref": "TextSpan"
+        },
+        "sentiment": {
+          "description": "For calls to AnalyzeSentiment or if\nAnnotateTextRequest.Features.extract_document_sentiment is set to\ntrue, this field will contain the sentiment for the sentence.",
+          "$ref": "Sentiment"
+        }
+      },
+      "id": "Sentence",
+      "description": "Represents a sentence in the input document.",
+      "type": "object"
+    },
+    "Document": {
+      "properties": {
+        "language": {
+          "description": "The language of the document (if not specified, the language is\nautomatically detected). Both ISO and BCP-47 language codes are\naccepted.\u003cbr\u003e\n**Current Language Restrictions:**\n\n * Only English, Spanish, and Japanese textual content are supported.\nIf the language (either specified by the caller or automatically detected)\nis not supported by the called API method, an `INVALID_ARGUMENT` error\nis returned.",
+          "type": "string"
+        },
+        "type": {
+          "enumDescriptions": [
+            "The content type is not specified.",
+            "Plain text",
+            "HTML"
+          ],
+          "enum": [
+            "TYPE_UNSPECIFIED",
+            "PLAIN_TEXT",
+            "HTML"
+          ],
+          "description": "Required. If the type is not set or is `TYPE_UNSPECIFIED`,\nreturns an `INVALID_ARGUMENT` error.",
+          "type": "string"
+        },
+        "content": {
+          "description": "The content of the input in string format.",
+          "type": "string"
+        },
+        "gcsContentUri": {
+          "description": "The Google Cloud Storage URI where the file content is located.\nThis URI must be of the form: gs://bucket_name/object_name. For more\ndetails, see https://cloud.google.com/storage/docs/reference-uris.\nNOTE: Cloud Storage object versioning is not supported.",
+          "type": "string"
+        }
+      },
+      "id": "Document",
+      "description": "################################################################ #\n\nRepresents the input to API methods.",
+      "type": "object"
+    },
     "AnalyzeEntitiesRequest": {
       "description": "The entity analysis request message.",
       "type": "object",
       "properties": {
-        "document": {
-          "description": "Input document.",
-          "$ref": "Document"
-        },
         "encodingType": {
-          "enumDescriptions": [
-            "If `EncodingType` is not specified, encoding-dependent information (such as\n`begin_offset`) will be set at `-1`.",
-            "Encoding-dependent information (such as `begin_offset`) is calculated based\non the UTF-8 encoding of the input. C++ and Go are examples of languages\nthat use this encoding natively.",
-            "Encoding-dependent information (such as `begin_offset`) is calculated based\non the UTF-16 encoding of the input. Java and Javascript are examples of\nlanguages that use this encoding natively.",
-            "Encoding-dependent information (such as `begin_offset`) is calculated based\non the UTF-32 encoding of the input. Python is an example of a language\nthat uses this encoding natively."
-          ],
           "enum": [
             "NONE",
             "UTF8",
@@ -31,7 +297,17 @@
             "UTF32"
           ],
           "description": "The encoding type used by the API to calculate offsets.",
-          "type": "string"
+          "type": "string",
+          "enumDescriptions": [
+            "If `EncodingType` is not specified, encoding-dependent information (such as\n`begin_offset`) will be set at `-1`.",
+            "Encoding-dependent information (such as `begin_offset`) is calculated based\non the UTF-8 encoding of the input. C++ and Go are examples of languages\nthat use this encoding natively.",
+            "Encoding-dependent information (such as `begin_offset`) is calculated based\non the UTF-16 encoding of the input. Java and Javascript are examples of\nlanguages that use this encoding natively.",
+            "Encoding-dependent information (such as `begin_offset`) is calculated based\non the UTF-32 encoding of the input. Python is an example of a language\nthat uses this encoding natively."
+          ]
+        },
+        "document": {
+          "description": "Input document.",
+          "$ref": "Document"
         }
       },
       "id": "AnalyzeEntitiesRequest"
@@ -40,13 +316,13 @@
       "description": "Represents the feeling associated with the entire text or entities in\nthe text.",
       "type": "object",
       "properties": {
-        "score": {
-          "description": "Sentiment score between -1.0 (negative sentiment) and 1.0\n(positive sentiment).",
+        "magnitude": {
+          "description": "A non-negative number in the [0, +inf) range, which represents\nthe absolute magnitude of sentiment regardless of score (positive or\nnegative).",
           "format": "float",
           "type": "number"
         },
-        "magnitude": {
-          "description": "A non-negative number in the [0, +inf) range, which represents\nthe absolute magnitude of sentiment regardless of score (positive or\nnegative).",
+        "score": {
+          "description": "Sentiment score between -1.0 (negative sentiment) and 1.0\n(positive sentiment).",
           "format": "float",
           "type": "number"
         }
@@ -54,171 +330,8 @@
       "id": "Sentiment"
     },
     "PartOfSpeech": {
-      "description": "Represents part of speech information for a token. Parts of speech\nare as defined in\nhttp://www.lrec-conf.org/proceedings/lrec2012/pdf/274_Paper.pdf",
-      "type": "object",
       "properties": {
-        "form": {
-          "enumDescriptions": [
-            "Form is not applicable in the analyzed language or is not predicted.",
-            "Adnomial",
-            "Auxiliary",
-            "Complementizer",
-            "Final ending",
-            "Gerund",
-            "Realis",
-            "Irrealis",
-            "Short form",
-            "Long form",
-            "Order form",
-            "Specific form"
-          ],
-          "enum": [
-            "FORM_UNKNOWN",
-            "ADNOMIAL",
-            "AUXILIARY",
-            "COMPLEMENTIZER",
-            "FINAL_ENDING",
-            "GERUND",
-            "REALIS",
-            "IRREALIS",
-            "SHORT",
-            "LONG",
-            "ORDER",
-            "SPECIFIC"
-          ],
-          "description": "The grammatical form.",
-          "type": "string"
-        },
-        "number": {
-          "description": "The grammatical number.",
-          "type": "string",
-          "enumDescriptions": [
-            "Number is not applicable in the analyzed language or is not predicted.",
-            "Singular",
-            "Plural",
-            "Dual"
-          ],
-          "enum": [
-            "NUMBER_UNKNOWN",
-            "SINGULAR",
-            "PLURAL",
-            "DUAL"
-          ]
-        },
-        "voice": {
-          "enumDescriptions": [
-            "Voice is not applicable in the analyzed language or is not predicted.",
-            "Active",
-            "Causative",
-            "Passive"
-          ],
-          "enum": [
-            "VOICE_UNKNOWN",
-            "ACTIVE",
-            "CAUSATIVE",
-            "PASSIVE"
-          ],
-          "description": "The grammatical voice.",
-          "type": "string"
-        },
-        "aspect": {
-          "description": "The grammatical aspect.",
-          "type": "string",
-          "enumDescriptions": [
-            "Aspect is not applicable in the analyzed language or is not predicted.",
-            "Perfective",
-            "Imperfective",
-            "Progressive"
-          ],
-          "enum": [
-            "ASPECT_UNKNOWN",
-            "PERFECTIVE",
-            "IMPERFECTIVE",
-            "PROGRESSIVE"
-          ]
-        },
-        "mood": {
-          "description": "The grammatical mood.",
-          "type": "string",
-          "enumDescriptions": [
-            "Mood is not applicable in the analyzed language or is not predicted.",
-            "Conditional",
-            "Imperative",
-            "Indicative",
-            "Interrogative",
-            "Jussive",
-            "Subjunctive"
-          ],
-          "enum": [
-            "MOOD_UNKNOWN",
-            "CONDITIONAL_MOOD",
-            "IMPERATIVE",
-            "INDICATIVE",
-            "INTERROGATIVE",
-            "JUSSIVE",
-            "SUBJUNCTIVE"
-          ]
-        },
-        "tag": {
-          "enumDescriptions": [
-            "Unknown",
-            "Adjective",
-            "Adposition (preposition and postposition)",
-            "Adverb",
-            "Conjunction",
-            "Determiner",
-            "Noun (common and proper)",
-            "Cardinal number",
-            "Pronoun",
-            "Particle or other function word",
-            "Punctuation",
-            "Verb (all tenses and modes)",
-            "Other: foreign words, typos, abbreviations",
-            "Affix"
-          ],
-          "enum": [
-            "UNKNOWN",
-            "ADJ",
-            "ADP",
-            "ADV",
-            "CONJ",
-            "DET",
-            "NOUN",
-            "NUM",
-            "PRON",
-            "PRT",
-            "PUNCT",
-            "VERB",
-            "X",
-            "AFFIX"
-          ],
-          "description": "The part of speech tag.",
-          "type": "string"
-        },
-        "gender": {
-          "enumDescriptions": [
-            "Gender is not applicable in the analyzed language or is not predicted.",
-            "Feminine",
-            "Masculine",
-            "Neuter"
-          ],
-          "enum": [
-            "GENDER_UNKNOWN",
-            "FEMININE",
-            "MASCULINE",
-            "NEUTER"
-          ],
-          "description": "The grammatical gender.",
-          "type": "string"
-        },
         "person": {
-          "enumDescriptions": [
-            "Person is not applicable in the analyzed language or is not predicted.",
-            "First",
-            "Second",
-            "Third",
-            "Reflexive"
-          ],
           "enum": [
             "PERSON_UNKNOWN",
             "FIRST",
@@ -227,25 +340,30 @@
             "REFLEXIVE_PERSON"
           ],
           "description": "The grammatical person.",
-          "type": "string"
+          "type": "string",
+          "enumDescriptions": [
+            "Person is not applicable in the analyzed language or is not predicted.",
+            "First",
+            "Second",
+            "Third",
+            "Reflexive"
+          ]
         },
         "proper": {
+          "enum": [
+            "PROPER_UNKNOWN",
+            "PROPER",
+            "NOT_PROPER"
+          ],
           "description": "The grammatical properness.",
           "type": "string",
           "enumDescriptions": [
             "Proper is not applicable in the analyzed language or is not predicted.",
             "Proper",
             "Not proper"
-          ],
-          "enum": [
-            "PROPER_UNKNOWN",
-            "PROPER",
-            "NOT_PROPER"
           ]
         },
         "case": {
-          "description": "The grammatical case.",
-          "type": "string",
           "enumDescriptions": [
             "Case is not applicable in the analyzed language or is not predicted.",
             "Accusative",
@@ -279,9 +397,20 @@
             "REFLEXIVE_CASE",
             "RELATIVE_CASE",
             "VOCATIVE"
-          ]
+          ],
+          "description": "The grammatical case.",
+          "type": "string"
         },
         "tense": {
+          "enum": [
+            "TENSE_UNKNOWN",
+            "CONDITIONAL_TENSE",
+            "FUTURE",
+            "PAST",
+            "PRESENT",
+            "IMPERFECT",
+            "PLUPERFECT"
+          ],
           "description": "The grammatical tense.",
           "type": "string",
           "enumDescriptions": [
@@ -292,45 +421,186 @@
             "Present",
             "Imperfect",
             "Pluperfect"
-          ],
-          "enum": [
-            "TENSE_UNKNOWN",
-            "CONDITIONAL_TENSE",
-            "FUTURE",
-            "PAST",
-            "PRESENT",
-            "IMPERFECT",
-            "PLUPERFECT"
           ]
         },
         "reciprocity": {
-          "enumDescriptions": [
-            "Reciprocity is not applicable in the analyzed language or is not\npredicted.",
-            "Reciprocal",
-            "Non-reciprocal"
-          ],
           "enum": [
             "RECIPROCITY_UNKNOWN",
             "RECIPROCAL",
             "NON_RECIPROCAL"
           ],
           "description": "The grammatical reciprocity.",
+          "type": "string",
+          "enumDescriptions": [
+            "Reciprocity is not applicable in the analyzed language or is not\npredicted.",
+            "Reciprocal",
+            "Non-reciprocal"
+          ]
+        },
+        "form": {
+          "enum": [
+            "FORM_UNKNOWN",
+            "ADNOMIAL",
+            "AUXILIARY",
+            "COMPLEMENTIZER",
+            "FINAL_ENDING",
+            "GERUND",
+            "REALIS",
+            "IRREALIS",
+            "SHORT",
+            "LONG",
+            "ORDER",
+            "SPECIFIC"
+          ],
+          "description": "The grammatical form.",
+          "type": "string",
+          "enumDescriptions": [
+            "Form is not applicable in the analyzed language or is not predicted.",
+            "Adnomial",
+            "Auxiliary",
+            "Complementizer",
+            "Final ending",
+            "Gerund",
+            "Realis",
+            "Irrealis",
+            "Short form",
+            "Long form",
+            "Order form",
+            "Specific form"
+          ]
+        },
+        "number": {
+          "enum": [
+            "NUMBER_UNKNOWN",
+            "SINGULAR",
+            "PLURAL",
+            "DUAL"
+          ],
+          "description": "The grammatical number.",
+          "type": "string",
+          "enumDescriptions": [
+            "Number is not applicable in the analyzed language or is not predicted.",
+            "Singular",
+            "Plural",
+            "Dual"
+          ]
+        },
+        "voice": {
+          "enum": [
+            "VOICE_UNKNOWN",
+            "ACTIVE",
+            "CAUSATIVE",
+            "PASSIVE"
+          ],
+          "description": "The grammatical voice.",
+          "type": "string",
+          "enumDescriptions": [
+            "Voice is not applicable in the analyzed language or is not predicted.",
+            "Active",
+            "Causative",
+            "Passive"
+          ]
+        },
+        "aspect": {
+          "enum": [
+            "ASPECT_UNKNOWN",
+            "PERFECTIVE",
+            "IMPERFECTIVE",
+            "PROGRESSIVE"
+          ],
+          "description": "The grammatical aspect.",
+          "type": "string",
+          "enumDescriptions": [
+            "Aspect is not applicable in the analyzed language or is not predicted.",
+            "Perfective",
+            "Imperfective",
+            "Progressive"
+          ]
+        },
+        "mood": {
+          "enumDescriptions": [
+            "Mood is not applicable in the analyzed language or is not predicted.",
+            "Conditional",
+            "Imperative",
+            "Indicative",
+            "Interrogative",
+            "Jussive",
+            "Subjunctive"
+          ],
+          "enum": [
+            "MOOD_UNKNOWN",
+            "CONDITIONAL_MOOD",
+            "IMPERATIVE",
+            "INDICATIVE",
+            "INTERROGATIVE",
+            "JUSSIVE",
+            "SUBJUNCTIVE"
+          ],
+          "description": "The grammatical mood.",
           "type": "string"
+        },
+        "tag": {
+          "enum": [
+            "UNKNOWN",
+            "ADJ",
+            "ADP",
+            "ADV",
+            "CONJ",
+            "DET",
+            "NOUN",
+            "NUM",
+            "PRON",
+            "PRT",
+            "PUNCT",
+            "VERB",
+            "X",
+            "AFFIX"
+          ],
+          "description": "The part of speech tag.",
+          "type": "string",
+          "enumDescriptions": [
+            "Unknown",
+            "Adjective",
+            "Adposition (preposition and postposition)",
+            "Adverb",
+            "Conjunction",
+            "Determiner",
+            "Noun (common and proper)",
+            "Cardinal number",
+            "Pronoun",
+            "Particle or other function word",
+            "Punctuation",
+            "Verb (all tenses and modes)",
+            "Other: foreign words, typos, abbreviations",
+            "Affix"
+          ]
+        },
+        "gender": {
+          "enum": [
+            "GENDER_UNKNOWN",
+            "FEMININE",
+            "MASCULINE",
+            "NEUTER"
+          ],
+          "description": "The grammatical gender.",
+          "type": "string",
+          "enumDescriptions": [
+            "Gender is not applicable in the analyzed language or is not predicted.",
+            "Feminine",
+            "Masculine",
+            "Neuter"
+          ]
         }
       },
-      "id": "PartOfSpeech"
+      "id": "PartOfSpeech",
+      "description": "Represents part of speech information for a token. Parts of speech\nare as defined in\nhttp://www.lrec-conf.org/proceedings/lrec2012/pdf/274_Paper.pdf",
+      "type": "object"
     },
     "AnalyzeSyntaxRequest": {
       "description": "The syntax analysis request message.",
       "type": "object",
       "properties": {
-        "document": {
-          "description": "Input document.",
-          "$ref": "Document"
-        },
         "encodingType": {
-          "description": "The encoding type used by the API to calculate offsets.",
-          "type": "string",
           "enumDescriptions": [
             "If `EncodingType` is not specified, encoding-dependent information (such as\n`begin_offset`) will be set at `-1`.",
             "Encoding-dependent information (such as `begin_offset`) is calculated based\non the UTF-8 encoding of the input. C++ and Go are examples of languages\nthat use this encoding natively.",
@@ -342,14 +612,18 @@
             "UTF8",
             "UTF16",
             "UTF32"
-          ]
+          ],
+          "description": "The encoding type used by the API to calculate offsets.",
+          "type": "string"
+        },
+        "document": {
+          "description": "Input document.",
+          "$ref": "Document"
         }
       },
       "id": "AnalyzeSyntaxRequest"
     },
     "AnalyzeSentimentResponse": {
-      "description": "The sentiment analysis response message.",
-      "type": "object",
       "properties": {
         "documentSentiment": {
           "$ref": "Sentiment",
@@ -367,30 +641,88 @@
           }
         }
       },
-      "id": "AnalyzeSentimentResponse"
+      "id": "AnalyzeSentimentResponse",
+      "description": "The sentiment analysis response message.",
+      "type": "object"
     },
     "AnalyzeEntitiesResponse": {
       "description": "The entity analysis response message.",
       "type": "object",
       "properties": {
-        "language": {
-          "description": "The language of the text, which will be the same as the language specified\nin the request or, if not specified, the automatically-detected language.\nSee `Document.language` field for more details.",
-          "type": "string"
-        },
         "entities": {
           "description": "The recognized entities in the input document.",
           "type": "array",
           "items": {
             "$ref": "Entity"
           }
+        },
+        "language": {
+          "description": "The language of the text, which will be the same as the language specified\nin the request or, if not specified, the automatically-detected language.\nSee `Document.language` field for more details.",
+          "type": "string"
         }
       },
       "id": "AnalyzeEntitiesResponse"
     },
-    "AnalyzeSyntaxResponse": {
-      "description": "The syntax analysis response message.",
-      "type": "object",
+    "Entity": {
       "properties": {
+        "mentions": {
+          "description": "The mentions of this entity in the input document. The API currently\nsupports proper noun mentions.",
+          "type": "array",
+          "items": {
+            "$ref": "EntityMention"
+          }
+        },
+        "name": {
+          "description": "The representative name for the entity.",
+          "type": "string"
+        },
+        "type": {
+          "enum": [
+            "UNKNOWN",
+            "PERSON",
+            "LOCATION",
+            "ORGANIZATION",
+            "EVENT",
+            "WORK_OF_ART",
+            "CONSUMER_GOOD",
+            "OTHER"
+          ],
+          "description": "The entity type.",
+          "type": "string",
+          "enumDescriptions": [
+            "Unknown",
+            "Person",
+            "Location",
+            "Organization",
+            "Event",
+            "Work of art",
+            "Consumer goods",
+            "Other types"
+          ]
+        },
+        "metadata": {
+          "additionalProperties": {
+            "type": "string"
+          },
+          "description": "Metadata associated with the entity.\n\nCurrently, Wikipedia URLs and Knowledge Graph MIDs are provided, if\navailable. The associated keys are \"wikipedia_url\" and \"mid\", respectively.",
+          "type": "object"
+        },
+        "salience": {
+          "description": "The salience score associated with the entity in the [0, 1.0] range.\n\nThe salience score for an entity provides information about the\nimportance or centrality of that entity to the entire document text.\nScores closer to 0 are less salient, while scores closer to 1.0 are highly\nsalient.",
+          "format": "float",
+          "type": "number"
+        }
+      },
+      "id": "Entity",
+      "description": "Represents a phrase in the text that is a known entity, such as\na person, an organization, or location. The API associates information, such\nas salience and mentions, with entities.",
+      "type": "object"
+    },
+    "AnalyzeSyntaxResponse": {
+      "properties": {
+        "language": {
+          "description": "The language of the text, which will be the same as the language specified\nin the request or, if not specified, the automatically-detected language.\nSee `Document.language` field for more details.",
+          "type": "string"
+        },
         "sentences": {
           "description": "Sentences in the input document.",
           "type": "array",
@@ -404,75 +736,17 @@
           "items": {
             "$ref": "Token"
           }
-        },
-        "language": {
-          "description": "The language of the text, which will be the same as the language specified\nin the request or, if not specified, the automatically-detected language.\nSee `Document.language` field for more details.",
-          "type": "string"
         }
       },
-      "id": "AnalyzeSyntaxResponse"
-    },
-    "Entity": {
-      "description": "Represents a phrase in the text that is a known entity, such as\na person, an organization, or location. The API associates information, such\nas salience and mentions, with entities.",
-      "type": "object",
-      "properties": {
-        "type": {
-          "enumDescriptions": [
-            "Unknown",
-            "Person",
-            "Location",
-            "Organization",
-            "Event",
-            "Work of art",
-            "Consumer goods",
-            "Other types"
-          ],
-          "enum": [
-            "UNKNOWN",
-            "PERSON",
-            "LOCATION",
-            "ORGANIZATION",
-            "EVENT",
-            "WORK_OF_ART",
-            "CONSUMER_GOOD",
-            "OTHER"
-          ],
-          "description": "The entity type.",
-          "type": "string"
-        },
-        "metadata": {
-          "description": "Metadata associated with the entity.\n\nCurrently, Wikipedia URLs and Knowledge Graph MIDs are provided, if\navailable. The associated keys are \"wikipedia_url\" and \"mid\", respectively.",
-          "type": "object",
-          "additionalProperties": {
-            "type": "string"
-          }
-        },
-        "salience": {
-          "description": "The salience score associated with the entity in the [0, 1.0] range.\n\nThe salience score for an entity provides information about the\nimportance or centrality of that entity to the entire document text.\nScores closer to 0 are less salient, while scores closer to 1.0 are highly\nsalient.",
-          "format": "float",
-          "type": "number"
-        },
-        "mentions": {
-          "description": "The mentions of this entity in the input document. The API currently\nsupports proper noun mentions.",
-          "type": "array",
-          "items": {
-            "$ref": "EntityMention"
-          }
-        },
-        "name": {
-          "description": "The representative name for the entity.",
-          "type": "string"
-        }
-      },
-      "id": "Entity"
+      "id": "AnalyzeSyntaxResponse",
+      "description": "The syntax analysis response message.",
+      "type": "object"
     },
     "AnnotateTextRequest": {
       "description": "The request message for the text annotation API, which can perform multiple\nanalysis types (sentiment, entities, and syntax) in one call.",
       "type": "object",
       "properties": {
         "encodingType": {
-          "description": "The encoding type used by the API to calculate offsets.",
-          "type": "string",
           "enumDescriptions": [
             "If `EncodingType` is not specified, encoding-dependent information (such as\n`begin_offset`) will be set at `-1`.",
             "Encoding-dependent information (such as `begin_offset`) is calculated based\non the UTF-8 encoding of the input. C++ and Go are examples of languages\nthat use this encoding natively.",
@@ -484,15 +758,17 @@
             "UTF8",
             "UTF16",
             "UTF32"
-          ]
+          ],
+          "description": "The encoding type used by the API to calculate offsets.",
+          "type": "string"
         },
         "document": {
-          "$ref": "Document",
-          "description": "Input document."
+          "description": "Input document.",
+          "$ref": "Document"
         },
         "features": {
-          "$ref": "Features",
-          "description": "The enabled features."
+          "description": "The enabled features.",
+          "$ref": "Features"
         }
       },
       "id": "AnnotateTextRequest"
@@ -518,20 +794,14 @@
           "type": "string"
         },
         "document": {
-          "description": "Input document. Currently, `analyzeSentiment` only supports English text\n(Document.language=\"EN\").",
-          "$ref": "Document"
+          "$ref": "Document",
+          "description": "Input document. Currently, `analyzeSentiment` only supports English text\n(Document.language=\"EN\")."
         }
       },
       "id": "AnalyzeSentimentRequest"
     },
     "AnnotateTextResponse": {
-      "description": "The text annotations response message.",
-      "type": "object",
       "properties": {
-        "documentSentiment": {
-          "$ref": "Sentiment",
-          "description": "The overall sentiment for the document. Populated if the user enables\nAnnotateTextRequest.Features.extract_document_sentiment."
-        },
         "language": {
           "description": "The language of the text, which will be the same as the language specified\nin the request or, if not specified, the automatically-detected language.\nSee `Document.language` field for more details.",
           "type": "string"
@@ -556,20 +826,100 @@
           "items": {
             "$ref": "Entity"
           }
+        },
+        "documentSentiment": {
+          "$ref": "Sentiment",
+          "description": "The overall sentiment for the document. Populated if the user enables\nAnnotateTextRequest.Features.extract_document_sentiment."
         }
       },
-      "id": "AnnotateTextResponse"
+      "id": "AnnotateTextResponse",
+      "description": "The text annotations response message.",
+      "type": "object"
     },
     "DependencyEdge": {
       "description": "Represents dependency parse tree information for a token. (For more\ninformation on dependency labels, see\nhttp://www.aclweb.org/anthology/P13-2017",
       "type": "object",
       "properties": {
-        "headTokenIndex": {
-          "description": "Represents the head of this token in the dependency tree.\nThis is the index of the token which has an arc going to this token.\nThe index is the position of the token in the array of tokens returned\nby the API method. If this token is a root token, then the\n`head_token_index` is its own index.",
-          "format": "int32",
-          "type": "integer"
-        },
         "label": {
+          "enum": [
+            "UNKNOWN",
+            "ABBREV",
+            "ACOMP",
+            "ADVCL",
+            "ADVMOD",
+            "AMOD",
+            "APPOS",
+            "ATTR",
+            "AUX",
+            "AUXPASS",
+            "CC",
+            "CCOMP",
+            "CONJ",
+            "CSUBJ",
+            "CSUBJPASS",
+            "DEP",
+            "DET",
+            "DISCOURSE",
+            "DOBJ",
+            "EXPL",
+            "GOESWITH",
+            "IOBJ",
+            "MARK",
+            "MWE",
+            "MWV",
+            "NEG",
+            "NN",
+            "NPADVMOD",
+            "NSUBJ",
+            "NSUBJPASS",
+            "NUM",
+            "NUMBER",
+            "P",
+            "PARATAXIS",
+            "PARTMOD",
+            "PCOMP",
+            "POBJ",
+            "POSS",
+            "POSTNEG",
+            "PRECOMP",
+            "PRECONJ",
+            "PREDET",
+            "PREF",
+            "PREP",
+            "PRONL",
+            "PRT",
+            "PS",
+            "QUANTMOD",
+            "RCMOD",
+            "RCMODREL",
+            "RDROP",
+            "REF",
+            "REMNANT",
+            "REPARANDUM",
+            "ROOT",
+            "SNUM",
+            "SUFF",
+            "TMOD",
+            "TOPIC",
+            "VMOD",
+            "VOCATIVE",
+            "XCOMP",
+            "SUFFIX",
+            "TITLE",
+            "ADVPHMOD",
+            "AUXCAUS",
+            "AUXVV",
+            "DTMOD",
+            "FOREIGN",
+            "KW",
+            "LIST",
+            "NOMC",
+            "NOMCSUBJ",
+            "NOMCSUBJPASS",
+            "NUMC",
+            "COP",
+            "DISLOCATED"
+          ],
           "description": "The parse label for the token.",
           "type": "string",
           "enumDescriptions": [
@@ -650,90 +1000,39 @@
             "Compound of numeric modifier",
             "Copula",
             "Dislocated relation (for fronted/topicalized elements)"
-          ],
-          "enum": [
-            "UNKNOWN",
-            "ABBREV",
-            "ACOMP",
-            "ADVCL",
-            "ADVMOD",
-            "AMOD",
-            "APPOS",
-            "ATTR",
-            "AUX",
-            "AUXPASS",
-            "CC",
-            "CCOMP",
-            "CONJ",
-            "CSUBJ",
-            "CSUBJPASS",
-            "DEP",
-            "DET",
-            "DISCOURSE",
-            "DOBJ",
-            "EXPL",
-            "GOESWITH",
-            "IOBJ",
-            "MARK",
-            "MWE",
-            "MWV",
-            "NEG",
-            "NN",
-            "NPADVMOD",
-            "NSUBJ",
-            "NSUBJPASS",
-            "NUM",
-            "NUMBER",
-            "P",
-            "PARATAXIS",
-            "PARTMOD",
-            "PCOMP",
-            "POBJ",
-            "POSS",
-            "POSTNEG",
-            "PRECOMP",
-            "PRECONJ",
-            "PREDET",
-            "PREF",
-            "PREP",
-            "PRONL",
-            "PRT",
-            "PS",
-            "QUANTMOD",
-            "RCMOD",
-            "RCMODREL",
-            "RDROP",
-            "REF",
-            "REMNANT",
-            "REPARANDUM",
-            "ROOT",
-            "SNUM",
-            "SUFF",
-            "TMOD",
-            "TOPIC",
-            "VMOD",
-            "VOCATIVE",
-            "XCOMP",
-            "SUFFIX",
-            "TITLE",
-            "ADVPHMOD",
-            "AUXCAUS",
-            "AUXVV",
-            "DTMOD",
-            "FOREIGN",
-            "KW",
-            "LIST",
-            "NOMC",
-            "NOMCSUBJ",
-            "NOMCSUBJPASS",
-            "NUMC",
-            "COP",
-            "DISLOCATED"
           ]
+        },
+        "headTokenIndex": {
+          "description": "Represents the head of this token in the dependency tree.\nThis is the index of the token which has an arc going to this token.\nThe index is the position of the token in the array of tokens returned\nby the API method. If this token is a root token, then the\n`head_token_index` is its own index.",
+          "format": "int32",
+          "type": "integer"
         }
       },
       "id": "DependencyEdge"
     },
+    "Token": {
+      "description": "Represents the smallest syntactic building block of the text.",
+      "type": "object",
+      "properties": {
+        "partOfSpeech": {
+          "$ref": "PartOfSpeech",
+          "description": "Parts of speech tag for this token."
+        },
+        "text": {
+          "description": "The token text.",
+          "$ref": "TextSpan"
+        },
+        "dependencyEdge": {
+          "description": "Dependency tree parse for this token.",
+          "$ref": "DependencyEdge"
+        },
+        "lemma": {
+          "description": "[Lemma](https://en.wikipedia.org/wiki/Lemma_%28morphology%29) of the token.",
+          "type": "string"
+        }
+      },
+      "id": "Token"
+    },
     "TextSpan": {
       "description": "Represents an output piece of text.",
       "type": "object",
@@ -750,33 +1049,19 @@
       },
       "id": "TextSpan"
     },
-    "Token": {
-      "description": "Represents the smallest syntactic building block of the text.",
-      "type": "object",
-      "properties": {
-        "partOfSpeech": {
-          "$ref": "PartOfSpeech",
-          "description": "Parts of speech tag for this token."
-        },
-        "text": {
-          "description": "The token text.",
-          "$ref": "TextSpan"
-        },
-        "dependencyEdge": {
-          "$ref": "DependencyEdge",
-          "description": "Dependency tree parse for this token."
-        },
-        "lemma": {
-          "description": "[Lemma](https://en.wikipedia.org/wiki/Lemma_%28morphology%29) of the token.",
-          "type": "string"
-        }
-      },
-      "id": "Token"
-    },
     "Status": {
-      "description": "The `Status` type defines a logical error model that is suitable for different\nprogramming environments, including REST APIs and RPC APIs. It is used by\n[gRPC](https://github.com/grpc). The error model is designed to be:\n\n- Simple to use and understand for most users\n- Flexible enough to meet unexpected needs\n\n# Overview\n\nThe `Status` message contains three pieces of data: error code, error message,\nand error details. The error code should be an enum value of\ngoogle.rpc.Code, but it may accept additional error codes if needed.  The\nerror message should be a developer-facing English message that helps\ndevelopers *understand* and *resolve* the error. If a localized user-facing\nerror message is needed, put the localized message in the error details or\nlocalize it in the client. The optional error details may contain arbitrary\ninformation about the error. There is a predefined set of error detail types\nin the package `google.rpc` which can be used for common error conditions.\n\n# Language mapping\n\nThe `Status` message is the logical representation of the error model, but it\nis not necessarily the actual wire format. When the `Status` message is\nexposed in different client libraries and different wire protocols, it can be\nmapped differently. For example, it will likely be mapped to some exceptions\nin Java, but more likely mapped to some error codes in C.\n\n# Other uses\n\nThe error model and the `Status` message can be used in a variety of\nenvironments, either with or without APIs, to provide a\nconsistent developer experience across different environments.\n\nExample uses of this error model include:\n\n- Partial errors. If a service needs to return partial errors to the client,\n    it may embed the `Status` in the normal response to indicate the partial\n    errors.\n\n- Workflow errors. A typical workflow has multiple steps. Each step may\n    have a `Status` message for error reporting purpose.\n\n- Batch operations. If a client uses batch request and batch response, the\n    `Status` message should be used directly inside batch response, one for\n    each error sub-response.\n\n- Asynchronous operations. If an API call embeds asynchronous operation\n    results in its response, the status of those operations should be\n    represented directly using the `Status` message.\n\n- Logging. If some API errors are stored in logs, the message `Status` could\n    be used directly after any stripping needed for security/privacy reasons.",
-      "type": "object",
       "properties": {
+        "details": {
+          "description": "A list of messages that carry the error details.  There will be a\ncommon 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"
+            },
+            "type": "object"
+          }
+        },
         "code": {
           "description": "The status code, which should be an enum value of google.rpc.Code.",
           "format": "int32",
@@ -785,301 +1070,16 @@
         "message": {
           "description": "A developer-facing error message, which should be in English. Any\nuser-facing error message should be localized and sent in the\ngoogle.rpc.Status.details field, or localized by the client.",
           "type": "string"
-        },
-        "details": {
-          "description": "A list of messages that carry the error details.  There will be a\ncommon 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"
-            }
-          }
         }
       },
-      "id": "Status"
-    },
-    "Features": {
-      "description": "All available features for sentiment, syntax, and semantic analysis.\nSetting each one to true will enable that specific analysis for the input.",
-      "type": "object",
-      "properties": {
-        "extractEntities": {
-          "description": "Extract entities.",
-          "type": "boolean"
-        },
-        "extractSyntax": {
-          "description": "Extract syntax information.",
-          "type": "boolean"
-        },
-        "extractDocumentSentiment": {
-          "description": "Extract document-level sentiment.",
-          "type": "boolean"
-        }
-      },
-      "id": "Features"
-    },
-    "EntityMention": {
-      "description": "Represents a mention for an entity in the text. Currently, proper noun\nmentions are supported.",
-      "type": "object",
-      "properties": {
-        "text": {
-          "$ref": "TextSpan",
-          "description": "The mention text."
-        },
-        "type": {
-          "enumDescriptions": [
-            "Unknown",
-            "Proper name",
-            "Common noun (or noun compound)"
-          ],
-          "enum": [
-            "TYPE_UNKNOWN",
-            "PROPER",
-            "COMMON"
-          ],
-          "description": "The type of the entity mention.",
-          "type": "string"
-        }
-      },
-      "id": "EntityMention"
-    },
-    "Document": {
-      "description": "################################################################ #\n\nRepresents the input to API methods.",
-      "type": "object",
-      "properties": {
-        "type": {
-          "description": "Required. If the type is not set or is `TYPE_UNSPECIFIED`,\nreturns an `INVALID_ARGUMENT` error.",
-          "type": "string",
-          "enumDescriptions": [
-            "The content type is not specified.",
-            "Plain text",
-            "HTML"
-          ],
-          "enum": [
-            "TYPE_UNSPECIFIED",
-            "PLAIN_TEXT",
-            "HTML"
-          ]
-        },
-        "content": {
-          "description": "The content of the input in string format.",
-          "type": "string"
-        },
-        "gcsContentUri": {
-          "description": "The Google Cloud Storage URI where the file content is located.\nThis URI must be of the form: gs://bucket_name/object_name. For more\ndetails, see https://cloud.google.com/storage/docs/reference-uris.\nNOTE: Cloud Storage object versioning is not supported.",
-          "type": "string"
-        },
-        "language": {
-          "description": "The language of the document (if not specified, the language is\nautomatically detected). Both ISO and BCP-47 language codes are\naccepted.\u003cbr\u003e\n**Current Language Restrictions:**\n\n * Only English, Spanish, and Japanese textual content are supported.\nIf the language (either specified by the caller or automatically detected)\nis not supported by the called API method, an `INVALID_ARGUMENT` error\nis returned.",
-          "type": "string"
-        }
-      },
-      "id": "Document"
-    },
-    "Sentence": {
-      "description": "Represents a sentence in the input document.",
-      "type": "object",
-      "properties": {
-        "text": {
-          "$ref": "TextSpan",
-          "description": "The sentence text."
-        },
-        "sentiment": {
-          "description": "For calls to AnalyzeSentiment or if\nAnnotateTextRequest.Features.extract_document_sentiment is set to\ntrue, this field will contain the sentiment for the sentence.",
-          "$ref": "Sentiment"
-        }
-      },
-      "id": "Sentence"
+      "id": "Status",
+      "description": "The `Status` type defines a logical error model that is suitable for different\nprogramming environments, including REST APIs and RPC APIs. It is used by\n[gRPC](https://github.com/grpc). The error model is designed to be:\n\n- Simple to use and understand for most users\n- Flexible enough to meet unexpected needs\n\n# Overview\n\nThe `Status` message contains three pieces of data: error code, error message,\nand error details. The error code should be an enum value of\ngoogle.rpc.Code, but it may accept additional error codes if needed.  The\nerror message should be a developer-facing English message that helps\ndevelopers *understand* and *resolve* the error. If a localized user-facing\nerror message is needed, put the localized message in the error details or\nlocalize it in the client. The optional error details may contain arbitrary\ninformation about the error. There is a predefined set of error detail types\nin the package `google.rpc` which can be used for common error conditions.\n\n# Language mapping\n\nThe `Status` message is the logical representation of the error model, but it\nis not necessarily the actual wire format. When the `Status` message is\nexposed in different client libraries and different wire protocols, it can be\nmapped differently. For example, it will likely be mapped to some exceptions\nin Java, but more likely mapped to some error codes in C.\n\n# Other uses\n\nThe error model and the `Status` message can be used in a variety of\nenvironments, either with or without APIs, to provide a\nconsistent developer experience across different environments.\n\nExample uses of this error model include:\n\n- Partial errors. If a service needs to return partial errors to the client,\n    it may embed the `Status` in the normal response to indicate the partial\n    errors.\n\n- Workflow errors. A typical workflow has multiple steps. Each step may\n    have a `Status` message for error reporting purpose.\n\n- Batch operations. If a client uses batch request and batch response, the\n    `Status` message should be used directly inside batch response, one for\n    each error sub-response.\n\n- Asynchronous operations. If an API call embeds asynchronous operation\n    results in its response, the status of those operations should be\n    represented directly using the `Status` message.\n\n- Logging. If some API errors are stored in logs, the message `Status` could\n    be used directly after any stripping needed for security/privacy reasons.",
+      "type": "object"
     }
   },
   "protocol": "rest",
   "icons": {
     "x16": "http://www.google.com/images/icons/product/search-16.gif",
     "x32": "http://www.google.com/images/icons/product/search-32.gif"
-  },
-  "canonicalName": "Cloud Natural Language",
-  "auth": {
-    "oauth2": {
-      "scopes": {
-        "https://www.googleapis.com/auth/cloud-platform": {
-          "description": "View and manage your data across Google Cloud Platform services"
-        }
-      }
-    }
-  },
-  "rootUrl": "https://language.googleapis.com/",
-  "ownerDomain": "google.com",
-  "name": "language",
-  "batchPath": "batch",
-  "title": "Google Cloud Natural Language API",
-  "ownerName": "Google",
-  "resources": {
-    "documents": {
-      "methods": {
-        "analyzeSyntax": {
-          "request": {
-            "$ref": "AnalyzeSyntaxRequest"
-          },
-          "description": "Analyzes the syntax of the text and provides sentence boundaries and\ntokenization along with part of speech tags, dependency trees, and other\nproperties.",
-          "httpMethod": "POST",
-          "parameterOrder": [],
-          "response": {
-            "$ref": "AnalyzeSyntaxResponse"
-          },
-          "parameters": {},
-          "scopes": [
-            "https://www.googleapis.com/auth/cloud-platform"
-          ],
-          "flatPath": "v1/documents:analyzeSyntax",
-          "id": "language.documents.analyzeSyntax",
-          "path": "v1/documents:analyzeSyntax"
-        },
-        "analyzeSentiment": {
-          "response": {
-            "$ref": "AnalyzeSentimentResponse"
-          },
-          "parameterOrder": [],
-          "httpMethod": "POST",
-          "scopes": [
-            "https://www.googleapis.com/auth/cloud-platform"
-          ],
-          "parameters": {},
-          "flatPath": "v1/documents:analyzeSentiment",
-          "path": "v1/documents:analyzeSentiment",
-          "id": "language.documents.analyzeSentiment",
-          "description": "Analyzes the sentiment of the provided text.",
-          "request": {
-            "$ref": "AnalyzeSentimentRequest"
-          }
-        },
-        "annotateText": {
-          "description": "A convenience method that provides all the features that analyzeSentiment,\nanalyzeEntities, and analyzeSyntax provide in one call.",
-          "request": {
-            "$ref": "AnnotateTextRequest"
-          },
-          "httpMethod": "POST",
-          "parameterOrder": [],
-          "response": {
-            "$ref": "AnnotateTextResponse"
-          },
-          "scopes": [
-            "https://www.googleapis.com/auth/cloud-platform"
-          ],
-          "parameters": {},
-          "flatPath": "v1/documents:annotateText",
-          "id": "language.documents.annotateText",
-          "path": "v1/documents:annotateText"
-        },
-        "analyzeEntities": {
-          "flatPath": "v1/documents:analyzeEntities",
-          "id": "language.documents.analyzeEntities",
-          "path": "v1/documents:analyzeEntities",
-          "request": {
-            "$ref": "AnalyzeEntitiesRequest"
-          },
-          "description": "Finds named entities (currently finds proper names) in the text,\nentity types, salience, mentions for each entity, and other properties.",
-          "httpMethod": "POST",
-          "parameterOrder": [],
-          "response": {
-            "$ref": "AnalyzeEntitiesResponse"
-          },
-          "parameters": {},
-          "scopes": [
-            "https://www.googleapis.com/auth/cloud-platform"
-          ]
-        }
-      }
-    }
-  },
-  "parameters": {
-    "bearer_token": {
-      "description": "OAuth bearer token.",
-      "type": "string",
-      "location": "query"
-    },
-    "oauth_token": {
-      "description": "OAuth 2.0 token for the current user.",
-      "type": "string",
-      "location": "query"
-    },
-    "upload_protocol": {
-      "location": "query",
-      "description": "Upload protocol for media (e.g. \"raw\", \"multipart\").",
-      "type": "string"
-    },
-    "prettyPrint": {
-      "location": "query",
-      "description": "Returns response with indentations and line breaks.",
-      "type": "boolean",
-      "default": "true"
-    },
-    "uploadType": {
-      "description": "Legacy upload protocol for media (e.g. \"media\", \"multipart\").",
-      "type": "string",
-      "location": "query"
-    },
-    "fields": {
-      "location": "query",
-      "description": "Selector specifying which fields to include in a partial response.",
-      "type": "string"
-    },
-    "callback": {
-      "description": "JSONP",
-      "type": "string",
-      "location": "query"
-    },
-    "$.xgafv": {
-      "description": "V1 error format.",
-      "type": "string",
-      "enumDescriptions": [
-        "v1 error format",
-        "v2 error format"
-      ],
-      "location": "query",
-      "enum": [
-        "1",
-        "2"
-      ]
-    },
-    "alt": {
-      "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",
-      "description": "Data format for response.",
-      "default": "json",
-      "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.",
-      "type": "string",
-      "location": "query"
-    },
-    "access_token": {
-      "location": "query",
-      "description": "OAuth access token.",
-      "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"
-    },
-    "pp": {
-      "location": "query",
-      "description": "Pretty-print response.",
-      "type": "boolean",
-      "default": "true"
-    }
-  },
-  "version": "v1",
-  "baseUrl": "https://language.googleapis.com/"
+  }
 }
diff --git a/language/v1/language-gen.go b/language/v1/language-gen.go
index 1492f94..dd90f97 100644
--- a/language/v1/language-gen.go
+++ b/language/v1/language-gen.go
@@ -61,10 +61,9 @@
 }
 
 type Service struct {
-	client                    *http.Client
-	BasePath                  string // API endpoint base URL
-	UserAgent                 string // optional additional User-Agent fragment
-	GoogleClientHeaderElement string // client header fragment, for Google use only
+	client    *http.Client
+	BasePath  string // API endpoint base URL
+	UserAgent string // optional additional User-Agent fragment
 
 	Documents *DocumentsService
 }
@@ -76,10 +75,6 @@
 	return googleapi.UserAgent + " " + s.UserAgent
 }
 
-func (s *Service) clientHeader() string {
-	return gensupport.GoogleClientHeader("20170210", s.GoogleClientHeaderElement)
-}
-
 func NewDocumentsService(s *Service) *DocumentsService {
 	rs := &DocumentsService{s: s}
 	return rs
@@ -1315,10 +1310,11 @@
 	header_                http.Header
 }
 
-// AnalyzeEntities: Finds named entities (currently finds proper names)
-// in the text,
-// entity types, salience, mentions for each entity, and other
-// properties.
+// AnalyzeEntities: Finds named entities (currently proper names and
+// common nouns) in the text
+// along with entity types, salience, mentions for each entity,
+// and
+// other properties.
 func (r *DocumentsService) AnalyzeEntities(analyzeentitiesrequest *AnalyzeEntitiesRequest) *DocumentsAnalyzeEntitiesCall {
 	c := &DocumentsAnalyzeEntitiesCall{s: r.s, urlParams_: make(gensupport.URLParams)}
 	c.analyzeentitiesrequest = analyzeentitiesrequest
@@ -1356,7 +1352,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	var body io.Reader = nil
 	body, err := googleapi.WithoutDataWrapper.JSONReader(c.analyzeentitiesrequest)
 	if err != nil {
@@ -1409,7 +1404,7 @@
 	}
 	return ret, nil
 	// {
-	//   "description": "Finds named entities (currently finds proper names) in the text,\nentity types, salience, mentions for each entity, and other properties.",
+	//   "description": "Finds named entities (currently proper names and common nouns) in the text\nalong with entity types, salience, mentions for each entity, and\nother properties.",
 	//   "flatPath": "v1/documents:analyzeEntities",
 	//   "httpMethod": "POST",
 	//   "id": "language.documents.analyzeEntities",
@@ -1477,7 +1472,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	var body io.Reader = nil
 	body, err := googleapi.WithoutDataWrapper.JSONReader(c.analyzesentimentrequest)
 	if err != nil {
@@ -1602,7 +1596,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	var body io.Reader = nil
 	body, err := googleapi.WithoutDataWrapper.JSONReader(c.analyzesyntaxrequest)
 	if err != nil {
@@ -1725,7 +1718,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	var body io.Reader = nil
 	body, err := googleapi.WithoutDataWrapper.JSONReader(c.annotatetextrequest)
 	if err != nil {
diff --git a/language/v1beta1/language-api.json b/language/v1beta1/language-api.json
index 7ce54f3..6e01de3 100644
--- a/language/v1beta1/language-api.json
+++ b/language/v1beta1/language-api.json
@@ -1,70 +1,203 @@
 {
+  "title": "Google Cloud Natural Language API",
+  "ownerName": "Google",
+  "resources": {
+    "documents": {
+      "methods": {
+        "analyzeEntities": {
+          "response": {
+            "$ref": "AnalyzeEntitiesResponse"
+          },
+          "parameterOrder": [],
+          "httpMethod": "POST",
+          "parameters": {},
+          "scopes": [
+            "https://www.googleapis.com/auth/cloud-platform"
+          ],
+          "flatPath": "v1beta1/documents:analyzeEntities",
+          "path": "v1beta1/documents:analyzeEntities",
+          "id": "language.documents.analyzeEntities",
+          "request": {
+            "$ref": "AnalyzeEntitiesRequest"
+          },
+          "description": "Finds named entities (currently proper names and common nouns) in the text\nalong with entity types, salience, mentions for each entity, and\nother properties."
+        },
+        "analyzeSyntax": {
+          "response": {
+            "$ref": "AnalyzeSyntaxResponse"
+          },
+          "parameterOrder": [],
+          "httpMethod": "POST",
+          "parameters": {},
+          "scopes": [
+            "https://www.googleapis.com/auth/cloud-platform"
+          ],
+          "flatPath": "v1beta1/documents:analyzeSyntax",
+          "path": "v1beta1/documents:analyzeSyntax",
+          "id": "language.documents.analyzeSyntax",
+          "request": {
+            "$ref": "AnalyzeSyntaxRequest"
+          },
+          "description": "Analyzes the syntax of the text and provides sentence boundaries and\ntokenization along with part of speech tags, dependency trees, and other\nproperties."
+        },
+        "analyzeSentiment": {
+          "response": {
+            "$ref": "AnalyzeSentimentResponse"
+          },
+          "parameterOrder": [],
+          "httpMethod": "POST",
+          "scopes": [
+            "https://www.googleapis.com/auth/cloud-platform"
+          ],
+          "parameters": {},
+          "flatPath": "v1beta1/documents:analyzeSentiment",
+          "path": "v1beta1/documents:analyzeSentiment",
+          "id": "language.documents.analyzeSentiment",
+          "description": "Analyzes the sentiment of the provided text.",
+          "request": {
+            "$ref": "AnalyzeSentimentRequest"
+          }
+        },
+        "annotateText": {
+          "id": "language.documents.annotateText",
+          "path": "v1beta1/documents:annotateText",
+          "description": "A convenience method that provides all the features that analyzeSentiment,\nanalyzeEntities, and analyzeSyntax provide in one call.",
+          "request": {
+            "$ref": "AnnotateTextRequest"
+          },
+          "httpMethod": "POST",
+          "parameterOrder": [],
+          "response": {
+            "$ref": "AnnotateTextResponse"
+          },
+          "scopes": [
+            "https://www.googleapis.com/auth/cloud-platform"
+          ],
+          "parameters": {},
+          "flatPath": "v1beta1/documents:annotateText"
+        }
+      }
+    }
+  },
+  "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",
+      "description": "Data format for response.",
+      "default": "json",
+      "enum": [
+        "json",
+        "media",
+        "proto"
+      ],
+      "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"
+    },
+    "access_token": {
+      "description": "OAuth access token.",
+      "type": "string",
+      "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.",
+      "type": "string",
+      "location": "query"
+    },
+    "pp": {
+      "location": "query",
+      "description": "Pretty-print response.",
+      "type": "boolean",
+      "default": "true"
+    },
+    "oauth_token": {
+      "location": "query",
+      "description": "OAuth 2.0 token for the current user.",
+      "type": "string"
+    },
+    "bearer_token": {
+      "description": "OAuth bearer token.",
+      "type": "string",
+      "location": "query"
+    },
+    "upload_protocol": {
+      "location": "query",
+      "description": "Upload protocol for media (e.g. \"raw\", \"multipart\").",
+      "type": "string"
+    },
+    "prettyPrint": {
+      "description": "Returns response with indentations and line breaks.",
+      "type": "boolean",
+      "default": "true",
+      "location": "query"
+    },
+    "uploadType": {
+      "location": "query",
+      "description": "Legacy upload protocol for media (e.g. \"media\", \"multipart\").",
+      "type": "string"
+    },
+    "fields": {
+      "description": "Selector specifying which fields to include in a partial response.",
+      "type": "string",
+      "location": "query"
+    },
+    "$.xgafv": {
+      "enumDescriptions": [
+        "v1 error format",
+        "v2 error format"
+      ],
+      "location": "query",
+      "enum": [
+        "1",
+        "2"
+      ],
+      "description": "V1 error format.",
+      "type": "string"
+    },
+    "callback": {
+      "description": "JSONP",
+      "type": "string",
+      "location": "query"
+    }
+  },
   "version": "v1beta1",
   "baseUrl": "https://language.googleapis.com/",
   "servicePath": "",
-  "description": "Google Cloud Natural Language API provides natural language understanding technologies to developers. Examples include sentiment analysis, entity recognition, and text annotations.",
   "kind": "discovery#restDescription",
+  "description": "Google Cloud Natural Language API provides natural language understanding technologies to developers. Examples include sentiment analysis, entity recognition, and text annotations.",
   "basePath": "",
-  "id": "language:v1beta1",
   "documentationLink": "https://cloud.google.com/natural-language/",
-  "revision": "20170301",
+  "revision": "20170313",
+  "id": "language:v1beta1",
   "discoveryVersion": "v1",
   "version_module": "True",
   "schemas": {
-    "AnalyzeEntitiesRequest": {
-      "description": "The entity analysis request message.",
-      "type": "object",
-      "properties": {
-        "encodingType": {
-          "description": "The encoding type used by the API to calculate offsets.",
-          "type": "string",
-          "enumDescriptions": [
-            "If `EncodingType` is not specified, encoding-dependent information (such as\n`begin_offset`) will be set at `-1`.",
-            "Encoding-dependent information (such as `begin_offset`) is calculated based\non the UTF-8 encoding of the input. C++ and Go are examples of languages\nthat use this encoding natively.",
-            "Encoding-dependent information (such as `begin_offset`) is calculated based\non the UTF-16 encoding of the input. Java and Javascript are examples of\nlanguages that use this encoding natively.",
-            "Encoding-dependent information (such as `begin_offset`) is calculated based\non the UTF-32 encoding of the input. Python is an example of a language\nthat uses this encoding natively."
-          ],
-          "enum": [
-            "NONE",
-            "UTF8",
-            "UTF16",
-            "UTF32"
-          ]
-        },
-        "document": {
-          "description": "Input document.",
-          "$ref": "Document"
-        }
-      },
-      "id": "AnalyzeEntitiesRequest"
-    },
-    "Sentiment": {
-      "description": "Represents the feeling associated with the entire text or entities in\nthe text.",
-      "type": "object",
-      "properties": {
-        "polarity": {
-          "description": "DEPRECATED FIELD - This field is being deprecated in\nfavor of score. Please refer to our documentation at\nhttps://cloud.google.com/natural-language/docs for more information.",
-          "format": "float",
-          "type": "number"
-        },
-        "score": {
-          "description": "Sentiment score between -1.0 (negative sentiment) and 1.0\n(positive sentiment).",
-          "format": "float",
-          "type": "number"
-        },
-        "magnitude": {
-          "description": "A non-negative number in the [0, +inf) range, which represents\nthe absolute magnitude of sentiment regardless of score (positive or\nnegative).",
-          "format": "float",
-          "type": "number"
-        }
-      },
-      "id": "Sentiment"
-    },
     "PartOfSpeech": {
       "description": "Represents part of speech information for a token.",
       "type": "object",
       "properties": {
         "form": {
+          "enum": [
+            "FORM_UNKNOWN",
+            "ADNOMIAL",
+            "AUXILIARY",
+            "COMPLEMENTIZER",
+            "FINAL_ENDING",
+            "GERUND",
+            "REALIS",
+            "IRREALIS",
+            "SHORT",
+            "LONG",
+            "ORDER",
+            "SPECIFIC"
+          ],
           "description": "The grammatical form.",
           "type": "string",
           "enumDescriptions": [
@@ -80,23 +213,15 @@
             "Long form",
             "Order form",
             "Specific form"
-          ],
-          "enum": [
-            "FORM_UNKNOWN",
-            "ADNOMIAL",
-            "AUXILIARY",
-            "COMPLEMENTIZER",
-            "FINAL_ENDING",
-            "GERUND",
-            "REALIS",
-            "IRREALIS",
-            "SHORT",
-            "LONG",
-            "ORDER",
-            "SPECIFIC"
           ]
         },
         "number": {
+          "enum": [
+            "NUMBER_UNKNOWN",
+            "SINGULAR",
+            "PLURAL",
+            "DUAL"
+          ],
           "description": "The grammatical number.",
           "type": "string",
           "enumDescriptions": [
@@ -104,21 +229,9 @@
             "Singular",
             "Plural",
             "Dual"
-          ],
-          "enum": [
-            "NUMBER_UNKNOWN",
-            "SINGULAR",
-            "PLURAL",
-            "DUAL"
           ]
         },
         "voice": {
-          "enumDescriptions": [
-            "Voice is not applicable in the analyzed language or is not predicted.",
-            "Active",
-            "Causative",
-            "Passive"
-          ],
           "enum": [
             "VOICE_UNKNOWN",
             "ACTIVE",
@@ -126,15 +239,15 @@
             "PASSIVE"
           ],
           "description": "The grammatical voice.",
-          "type": "string"
+          "type": "string",
+          "enumDescriptions": [
+            "Voice is not applicable in the analyzed language or is not predicted.",
+            "Active",
+            "Causative",
+            "Passive"
+          ]
         },
         "aspect": {
-          "enumDescriptions": [
-            "Aspect is not applicable in the analyzed language or is not predicted.",
-            "Perfective",
-            "Imperfective",
-            "Progressive"
-          ],
           "enum": [
             "ASPECT_UNKNOWN",
             "PERFECTIVE",
@@ -142,11 +255,15 @@
             "PROGRESSIVE"
           ],
           "description": "The grammatical aspect.",
-          "type": "string"
+          "type": "string",
+          "enumDescriptions": [
+            "Aspect is not applicable in the analyzed language or is not predicted.",
+            "Perfective",
+            "Imperfective",
+            "Progressive"
+          ]
         },
         "mood": {
-          "description": "The grammatical mood.",
-          "type": "string",
           "enumDescriptions": [
             "Mood is not applicable in the analyzed language or is not predicted.",
             "Conditional",
@@ -164,11 +281,11 @@
             "INTERROGATIVE",
             "JUSSIVE",
             "SUBJUNCTIVE"
-          ]
+          ],
+          "description": "The grammatical mood.",
+          "type": "string"
         },
         "tag": {
-          "description": "The part of speech tag.",
-          "type": "string",
           "enumDescriptions": [
             "Unknown",
             "Adjective",
@@ -200,15 +317,11 @@
             "VERB",
             "X",
             "AFFIX"
-          ]
+          ],
+          "description": "The part of speech tag.",
+          "type": "string"
         },
         "gender": {
-          "enumDescriptions": [
-            "Gender is not applicable in the analyzed language or is not predicted.",
-            "Feminine",
-            "Masculine",
-            "Neuter"
-          ],
           "enum": [
             "GENDER_UNKNOWN",
             "FEMININE",
@@ -216,7 +329,13 @@
             "NEUTER"
           ],
           "description": "The grammatical gender.",
-          "type": "string"
+          "type": "string",
+          "enumDescriptions": [
+            "Gender is not applicable in the analyzed language or is not predicted.",
+            "Feminine",
+            "Masculine",
+            "Neuter"
+          ]
         },
         "person": {
           "enumDescriptions": [
@@ -237,22 +356,20 @@
           "type": "string"
         },
         "proper": {
+          "enum": [
+            "PROPER_UNKNOWN",
+            "PROPER",
+            "NOT_PROPER"
+          ],
           "description": "The grammatical properness.",
           "type": "string",
           "enumDescriptions": [
             "Proper is not applicable in the analyzed language or is not predicted.",
             "Proper",
             "Not proper"
-          ],
-          "enum": [
-            "PROPER_UNKNOWN",
-            "PROPER",
-            "NOT_PROPER"
           ]
         },
         "case": {
-          "description": "The grammatical case.",
-          "type": "string",
           "enumDescriptions": [
             "Case is not applicable in the analyzed language or is not predicted.",
             "Accusative",
@@ -286,18 +403,11 @@
             "REFLEXIVE_CASE",
             "RELATIVE_CASE",
             "VOCATIVE"
-          ]
+          ],
+          "description": "The grammatical case.",
+          "type": "string"
         },
         "tense": {
-          "enumDescriptions": [
-            "Tense is not applicable in the analyzed language or is not predicted.",
-            "Conditional",
-            "Future",
-            "Past",
-            "Present",
-            "Imperfect",
-            "Pluperfect"
-          ],
           "enum": [
             "TENSE_UNKNOWN",
             "CONDITIONAL_TENSE",
@@ -308,20 +418,29 @@
             "PLUPERFECT"
           ],
           "description": "The grammatical tense.",
-          "type": "string"
+          "type": "string",
+          "enumDescriptions": [
+            "Tense is not applicable in the analyzed language or is not predicted.",
+            "Conditional",
+            "Future",
+            "Past",
+            "Present",
+            "Imperfect",
+            "Pluperfect"
+          ]
         },
         "reciprocity": {
+          "enum": [
+            "RECIPROCITY_UNKNOWN",
+            "RECIPROCAL",
+            "NON_RECIPROCAL"
+          ],
           "description": "The grammatical reciprocity.",
           "type": "string",
           "enumDescriptions": [
             "Reciprocity is not applicable in the analyzed language or is not\npredicted.",
             "Reciprocal",
             "Non-reciprocal"
-          ],
-          "enum": [
-            "RECIPROCITY_UNKNOWN",
-            "RECIPROCAL",
-            "NON_RECIPROCAL"
           ]
         }
       },
@@ -331,17 +450,7 @@
       "description": "The syntax analysis request message.",
       "type": "object",
       "properties": {
-        "document": {
-          "description": "Input document.",
-          "$ref": "Document"
-        },
         "encodingType": {
-          "enumDescriptions": [
-            "If `EncodingType` is not specified, encoding-dependent information (such as\n`begin_offset`) will be set at `-1`.",
-            "Encoding-dependent information (such as `begin_offset`) is calculated based\non the UTF-8 encoding of the input. C++ and Go are examples of languages\nthat use this encoding natively.",
-            "Encoding-dependent information (such as `begin_offset`) is calculated based\non the UTF-16 encoding of the input. Java and Javascript are examples of\nlanguages that use this encoding natively.",
-            "Encoding-dependent information (such as `begin_offset`) is calculated based\non the UTF-32 encoding of the input. Python is an example of a language\nthat uses this encoding natively."
-          ],
           "enum": [
             "NONE",
             "UTF8",
@@ -349,22 +458,23 @@
             "UTF32"
           ],
           "description": "The encoding type used by the API to calculate offsets.",
-          "type": "string"
+          "type": "string",
+          "enumDescriptions": [
+            "If `EncodingType` is not specified, encoding-dependent information (such as\n`begin_offset`) will be set at `-1`.",
+            "Encoding-dependent information (such as `begin_offset`) is calculated based\non the UTF-8 encoding of the input. C++ and Go are examples of languages\nthat use this encoding natively.",
+            "Encoding-dependent information (such as `begin_offset`) is calculated based\non the UTF-16 encoding of the input. Java and Javascript are examples of\nlanguages that use this encoding natively.",
+            "Encoding-dependent information (such as `begin_offset`) is calculated based\non the UTF-32 encoding of the input. Python is an example of a language\nthat uses this encoding natively."
+          ]
+        },
+        "document": {
+          "description": "Input document.",
+          "$ref": "Document"
         }
       },
       "id": "AnalyzeSyntaxRequest"
     },
     "AnalyzeSentimentResponse": {
-      "description": "The sentiment analysis response message.",
-      "type": "object",
       "properties": {
-        "sentences": {
-          "description": "The sentiment for all the sentences in the document.",
-          "type": "array",
-          "items": {
-            "$ref": "Sentence"
-          }
-        },
         "documentSentiment": {
           "description": "The overall sentiment of the input document.",
           "$ref": "Sentiment"
@@ -372,31 +482,38 @@
         "language": {
           "description": "The language of the text, which will be the same as the language specified\nin the request or, if not specified, the automatically-detected language.",
           "type": "string"
+        },
+        "sentences": {
+          "description": "The sentiment for all the sentences in the document.",
+          "type": "array",
+          "items": {
+            "$ref": "Sentence"
+          }
         }
       },
-      "id": "AnalyzeSentimentResponse"
+      "id": "AnalyzeSentimentResponse",
+      "description": "The sentiment analysis response message.",
+      "type": "object"
     },
     "AnalyzeEntitiesResponse": {
       "description": "The entity analysis response message.",
       "type": "object",
       "properties": {
-        "language": {
-          "description": "The language of the text, which will be the same as the language specified\nin the request or, if not specified, the automatically-detected language.\nSee Document.language field for more details.",
-          "type": "string"
-        },
         "entities": {
           "description": "The recognized entities in the input document.",
           "type": "array",
           "items": {
             "$ref": "Entity"
           }
+        },
+        "language": {
+          "description": "The language of the text, which will be the same as the language specified\nin the request or, if not specified, the automatically-detected language.\nSee Document.language field for more details.",
+          "type": "string"
         }
       },
       "id": "AnalyzeEntitiesResponse"
     },
     "Entity": {
-      "description": "Represents a phrase in the text that is a known entity, such as\na person, an organization, or location. The API associates information, such\nas salience and mentions, with entities.",
-      "type": "object",
       "properties": {
         "mentions": {
           "description": "The mentions of this entity in the input document. The API currently\nsupports proper noun mentions.",
@@ -446,11 +563,11 @@
           "type": "number"
         }
       },
-      "id": "Entity"
+      "id": "Entity",
+      "description": "Represents a phrase in the text that is a known entity, such as\na person, an organization, or location. The API associates information, such\nas salience and mentions, with entities.",
+      "type": "object"
     },
     "AnalyzeSyntaxResponse": {
-      "description": "The syntax analysis response message.",
-      "type": "object",
       "properties": {
         "language": {
           "description": "The language of the text, which will be the same as the language specified\nin the request or, if not specified, the automatically-detected language.\nSee Document.language field for more details.",
@@ -471,15 +588,15 @@
           }
         }
       },
-      "id": "AnalyzeSyntaxResponse"
+      "id": "AnalyzeSyntaxResponse",
+      "description": "The syntax analysis response message.",
+      "type": "object"
     },
     "AnnotateTextRequest": {
       "description": "The request message for the text annotation API, which can perform multiple\nanalysis types (sentiment, entities, and syntax) in one call.",
       "type": "object",
       "properties": {
         "encodingType": {
-          "description": "The encoding type used by the API to calculate offsets.",
-          "type": "string",
           "enumDescriptions": [
             "If `EncodingType` is not specified, encoding-dependent information (such as\n`begin_offset`) will be set at `-1`.",
             "Encoding-dependent information (such as `begin_offset`) is calculated based\non the UTF-8 encoding of the input. C++ and Go are examples of languages\nthat use this encoding natively.",
@@ -491,7 +608,9 @@
             "UTF8",
             "UTF16",
             "UTF32"
-          ]
+          ],
+          "description": "The encoding type used by the API to calculate offsets.",
+          "type": "string"
         },
         "document": {
           "description": "Input document.",
@@ -504,10 +623,44 @@
       },
       "id": "AnnotateTextRequest"
     },
+    "AnalyzeSentimentRequest": {
+      "description": "The sentiment analysis request message.",
+      "type": "object",
+      "properties": {
+        "encodingType": {
+          "enum": [
+            "NONE",
+            "UTF8",
+            "UTF16",
+            "UTF32"
+          ],
+          "description": "The encoding type used by the API to calculate sentence offsets for the\nsentence sentiment.",
+          "type": "string",
+          "enumDescriptions": [
+            "If `EncodingType` is not specified, encoding-dependent information (such as\n`begin_offset`) will be set at `-1`.",
+            "Encoding-dependent information (such as `begin_offset`) is calculated based\non the UTF-8 encoding of the input. C++ and Go are examples of languages\nthat use this encoding natively.",
+            "Encoding-dependent information (such as `begin_offset`) is calculated based\non the UTF-16 encoding of the input. Java and Javascript are examples of\nlanguages that use this encoding natively.",
+            "Encoding-dependent information (such as `begin_offset`) is calculated based\non the UTF-32 encoding of the input. Python is an example of a language\nthat uses this encoding natively."
+          ]
+        },
+        "document": {
+          "description": "Input document. Currently, `analyzeSentiment` only supports English text\n(Document.language=\"EN\").",
+          "$ref": "Document"
+        }
+      },
+      "id": "AnalyzeSentimentRequest"
+    },
     "AnnotateTextResponse": {
       "description": "The text annotations response message.",
       "type": "object",
       "properties": {
+        "entities": {
+          "description": "Entities, along with their semantic information, in the input document.\nPopulated if the user enables\nAnnotateTextRequest.Features.extract_entities.",
+          "type": "array",
+          "items": {
+            "$ref": "Entity"
+          }
+        },
         "documentSentiment": {
           "$ref": "Sentiment",
           "description": "The overall sentiment for the document. Populated if the user enables\nAnnotateTextRequest.Features.extract_document_sentiment."
@@ -529,53 +682,14 @@
           "items": {
             "$ref": "Token"
           }
-        },
-        "entities": {
-          "description": "Entities, along with their semantic information, in the input document.\nPopulated if the user enables\nAnnotateTextRequest.Features.extract_entities.",
-          "type": "array",
-          "items": {
-            "$ref": "Entity"
-          }
         }
       },
       "id": "AnnotateTextResponse"
     },
-    "AnalyzeSentimentRequest": {
-      "description": "The sentiment analysis request message.",
-      "type": "object",
-      "properties": {
-        "encodingType": {
-          "description": "The encoding type used by the API to calculate sentence offsets for the\nsentence sentiment.",
-          "type": "string",
-          "enumDescriptions": [
-            "If `EncodingType` is not specified, encoding-dependent information (such as\n`begin_offset`) will be set at `-1`.",
-            "Encoding-dependent information (such as `begin_offset`) is calculated based\non the UTF-8 encoding of the input. C++ and Go are examples of languages\nthat use this encoding natively.",
-            "Encoding-dependent information (such as `begin_offset`) is calculated based\non the UTF-16 encoding of the input. Java and Javascript are examples of\nlanguages that use this encoding natively.",
-            "Encoding-dependent information (such as `begin_offset`) is calculated based\non the UTF-32 encoding of the input. Python is an example of a language\nthat uses this encoding natively."
-          ],
-          "enum": [
-            "NONE",
-            "UTF8",
-            "UTF16",
-            "UTF32"
-          ]
-        },
-        "document": {
-          "$ref": "Document",
-          "description": "Input document. Currently, `analyzeSentiment` only supports English text\n(Document.language=\"EN\")."
-        }
-      },
-      "id": "AnalyzeSentimentRequest"
-    },
     "DependencyEdge": {
       "description": "Represents dependency parse tree information for a token.",
       "type": "object",
       "properties": {
-        "headTokenIndex": {
-          "description": "Represents the head of this token in the dependency tree.\nThis is the index of the token which has an arc going to this token.\nThe index is the position of the token in the array of tokens returned\nby the API method. If this token is a root token, then the\n`head_token_index` is its own index.",
-          "format": "int32",
-          "type": "integer"
-        },
         "label": {
           "enumDescriptions": [
             "Unknown",
@@ -737,6 +851,11 @@
           ],
           "description": "The parse label for the token.",
           "type": "string"
+        },
+        "headTokenIndex": {
+          "description": "Represents the head of this token in the dependency tree.\nThis is the index of the token which has an arc going to this token.\nThe index is the position of the token in the array of tokens returned\nby the API method. If this token is a root token, then the\n`head_token_index` is its own index.",
+          "format": "int32",
+          "type": "integer"
         }
       },
       "id": "DependencyEdge"
@@ -745,28 +864,26 @@
       "description": "Represents the smallest syntactic building block of the text.",
       "type": "object",
       "properties": {
+        "lemma": {
+          "description": "[Lemma](https://en.wikipedia.org/wiki/Lemma_%28morphology%29) of the token.",
+          "type": "string"
+        },
         "partOfSpeech": {
-          "description": "Parts of speech tag for this token.",
-          "$ref": "PartOfSpeech"
+          "$ref": "PartOfSpeech",
+          "description": "Parts of speech tag for this token."
         },
         "text": {
           "description": "The token text.",
           "$ref": "TextSpan"
         },
         "dependencyEdge": {
-          "$ref": "DependencyEdge",
-          "description": "Dependency tree parse for this token."
-        },
-        "lemma": {
-          "description": "[Lemma](https://en.wikipedia.org/wiki/Lemma_%28morphology%29) of the token.",
-          "type": "string"
+          "description": "Dependency tree parse for this token.",
+          "$ref": "DependencyEdge"
         }
       },
       "id": "Token"
     },
     "TextSpan": {
-      "description": "Represents an output piece of text.",
-      "type": "object",
       "properties": {
         "beginOffset": {
           "description": "The API calculates the beginning offset of the content in the original\ndocument according to the EncodingType specified in the API request.",
@@ -778,11 +895,11 @@
           "type": "string"
         }
       },
-      "id": "TextSpan"
+      "id": "TextSpan",
+      "description": "Represents an output piece of text.",
+      "type": "object"
     },
     "Status": {
-      "description": "The `Status` type defines a logical error model that is suitable for different\nprogramming environments, including REST APIs and RPC APIs. It is used by\n[gRPC](https://github.com/grpc). The error model is designed to be:\n\n- Simple to use and understand for most users\n- Flexible enough to meet unexpected needs\n\n# Overview\n\nThe `Status` message contains three pieces of data: error code, error message,\nand error details. The error code should be an enum value of\ngoogle.rpc.Code, but it may accept additional error codes if needed.  The\nerror message should be a developer-facing English message that helps\ndevelopers *understand* and *resolve* the error. If a localized user-facing\nerror message is needed, put the localized message in the error details or\nlocalize it in the client. The optional error details may contain arbitrary\ninformation about the error. There is a predefined set of error detail types\nin the package `google.rpc` which can be used for common error conditions.\n\n# Language mapping\n\nThe `Status` message is the logical representation of the error model, but it\nis not necessarily the actual wire format. When the `Status` message is\nexposed in different client libraries and different wire protocols, it can be\nmapped differently. For example, it will likely be mapped to some exceptions\nin Java, but more likely mapped to some error codes in C.\n\n# Other uses\n\nThe error model and the `Status` message can be used in a variety of\nenvironments, either with or without APIs, to provide a\nconsistent developer experience across different environments.\n\nExample uses of this error model include:\n\n- Partial errors. If a service needs to return partial errors to the client,\n    it may embed the `Status` in the normal response to indicate the partial\n    errors.\n\n- Workflow errors. A typical workflow has multiple steps. Each step may\n    have a `Status` message for error reporting purpose.\n\n- Batch operations. If a client uses batch request and batch response, the\n    `Status` message should be used directly inside batch response, one for\n    each error sub-response.\n\n- Asynchronous operations. If an API call embeds asynchronous operation\n    results in its response, the status of those operations should be\n    represented directly using the `Status` message.\n\n- Logging. If some API errors are stored in logs, the message `Status` could\n    be used directly after any stripping needed for security/privacy reasons.",
-      "type": "object",
       "properties": {
         "details": {
           "description": "A list of messages that carry the error details.  There will be a\ncommon set of message types for APIs to use.",
@@ -805,7 +922,28 @@
           "type": "string"
         }
       },
-      "id": "Status"
+      "id": "Status",
+      "description": "The `Status` type defines a logical error model that is suitable for different\nprogramming environments, including REST APIs and RPC APIs. It is used by\n[gRPC](https://github.com/grpc). The error model is designed to be:\n\n- Simple to use and understand for most users\n- Flexible enough to meet unexpected needs\n\n# Overview\n\nThe `Status` message contains three pieces of data: error code, error message,\nand error details. The error code should be an enum value of\ngoogle.rpc.Code, but it may accept additional error codes if needed.  The\nerror message should be a developer-facing English message that helps\ndevelopers *understand* and *resolve* the error. If a localized user-facing\nerror message is needed, put the localized message in the error details or\nlocalize it in the client. The optional error details may contain arbitrary\ninformation about the error. There is a predefined set of error detail types\nin the package `google.rpc` which can be used for common error conditions.\n\n# Language mapping\n\nThe `Status` message is the logical representation of the error model, but it\nis not necessarily the actual wire format. When the `Status` message is\nexposed in different client libraries and different wire protocols, it can be\nmapped differently. For example, it will likely be mapped to some exceptions\nin Java, but more likely mapped to some error codes in C.\n\n# Other uses\n\nThe error model and the `Status` message can be used in a variety of\nenvironments, either with or without APIs, to provide a\nconsistent developer experience across different environments.\n\nExample uses of this error model include:\n\n- Partial errors. If a service needs to return partial errors to the client,\n    it may embed the `Status` in the normal response to indicate the partial\n    errors.\n\n- Workflow errors. A typical workflow has multiple steps. Each step may\n    have a `Status` message for error reporting purpose.\n\n- Batch operations. If a client uses batch request and batch response, the\n    `Status` message should be used directly inside batch response, one for\n    each error sub-response.\n\n- Asynchronous operations. If an API call embeds asynchronous operation\n    results in its response, the status of those operations should be\n    represented directly using the `Status` message.\n\n- Logging. If some API errors are stored in logs, the message `Status` could\n    be used directly after any stripping needed for security/privacy reasons.",
+      "type": "object"
+    },
+    "Features": {
+      "properties": {
+        "extractSyntax": {
+          "description": "Extract syntax information.",
+          "type": "boolean"
+        },
+        "extractDocumentSentiment": {
+          "description": "Extract document-level sentiment.",
+          "type": "boolean"
+        },
+        "extractEntities": {
+          "description": "Extract entities.",
+          "type": "boolean"
+        }
+      },
+      "id": "Features",
+      "description": "All available features for sentiment, syntax, and semantic analysis.\nSetting each one to true will enable that specific analysis for the input.",
+      "type": "object"
     },
     "EntityMention": {
       "description": "Represents a mention for an entity in the text. Currently, proper noun\nmentions are supported.",
@@ -816,67 +954,48 @@
           "description": "The mention text."
         },
         "type": {
+          "enum": [
+            "TYPE_UNKNOWN",
+            "PROPER",
+            "COMMON"
+          ],
           "description": "The type of the entity mention.",
           "type": "string",
           "enumDescriptions": [
             "Unknown",
             "Proper name",
             "Common noun (or noun compound)"
-          ],
-          "enum": [
-            "TYPE_UNKNOWN",
-            "PROPER",
-            "COMMON"
           ]
         }
       },
       "id": "EntityMention"
     },
-    "Features": {
-      "description": "All available features for sentiment, syntax, and semantic analysis.\nSetting each one to true will enable that specific analysis for the input.",
-      "type": "object",
-      "properties": {
-        "extractEntities": {
-          "description": "Extract entities.",
-          "type": "boolean"
-        },
-        "extractSyntax": {
-          "description": "Extract syntax information.",
-          "type": "boolean"
-        },
-        "extractDocumentSentiment": {
-          "description": "Extract document-level sentiment.",
-          "type": "boolean"
-        }
-      },
-      "id": "Features"
-    },
     "Sentence": {
-      "description": "Represents a sentence in the input document.",
-      "type": "object",
       "properties": {
-        "text": {
-          "description": "The sentence text.",
-          "$ref": "TextSpan"
-        },
         "sentiment": {
           "$ref": "Sentiment",
           "description": "For calls to AnalyzeSentiment or if\nAnnotateTextRequest.Features.extract_document_sentiment is set to\ntrue, this field will contain the sentiment for the sentence."
+        },
+        "text": {
+          "$ref": "TextSpan",
+          "description": "The sentence text."
         }
       },
-      "id": "Sentence"
+      "id": "Sentence",
+      "description": "Represents a sentence in the input document.",
+      "type": "object"
     },
     "Document": {
-      "description": "################################################################ #\n\nRepresents the input to API methods.",
-      "type": "object",
       "properties": {
+        "gcsContentUri": {
+          "description": "The Google Cloud Storage URI where the file content is located.\nThis URI must be of the form: gs://bucket_name/object_name. For more\ndetails, see https://cloud.google.com/storage/docs/reference-uris.\nNOTE: Cloud Storage object versioning is not supported.",
+          "type": "string"
+        },
         "language": {
           "description": "The language of the document (if not specified, the language is\nautomatically detected). Both ISO and BCP-47 language codes are\naccepted.\u003cbr\u003e\n**Current Language Restrictions:**\n\n * Only English, Spanish, and Japanese textual content are supported.\nIf the language (either specified by the caller or automatically detected)\nis not supported by the called API method, an `INVALID_ARGUMENT` error\nis returned.",
           "type": "string"
         },
         "type": {
-          "description": "Required. If the type is not set or is `TYPE_UNSPECIFIED`,\nreturns an `INVALID_ARGUMENT` error.",
-          "type": "string",
           "enumDescriptions": [
             "The content type is not specified.",
             "Plain text",
@@ -886,18 +1005,67 @@
             "TYPE_UNSPECIFIED",
             "PLAIN_TEXT",
             "HTML"
-          ]
+          ],
+          "description": "Required. If the type is not set or is `TYPE_UNSPECIFIED`,\nreturns an `INVALID_ARGUMENT` error.",
+          "type": "string"
         },
         "content": {
           "description": "The content of the input in string format.",
           "type": "string"
-        },
-        "gcsContentUri": {
-          "description": "The Google Cloud Storage URI where the file content is located.\nThis URI must be of the form: gs://bucket_name/object_name. For more\ndetails, see https://cloud.google.com/storage/docs/reference-uris.\nNOTE: Cloud Storage object versioning is not supported.",
-          "type": "string"
         }
       },
-      "id": "Document"
+      "id": "Document",
+      "description": "################################################################ #\n\nRepresents the input to API methods.",
+      "type": "object"
+    },
+    "AnalyzeEntitiesRequest": {
+      "description": "The entity analysis request message.",
+      "type": "object",
+      "properties": {
+        "encodingType": {
+          "enumDescriptions": [
+            "If `EncodingType` is not specified, encoding-dependent information (such as\n`begin_offset`) will be set at `-1`.",
+            "Encoding-dependent information (such as `begin_offset`) is calculated based\non the UTF-8 encoding of the input. C++ and Go are examples of languages\nthat use this encoding natively.",
+            "Encoding-dependent information (such as `begin_offset`) is calculated based\non the UTF-16 encoding of the input. Java and Javascript are examples of\nlanguages that use this encoding natively.",
+            "Encoding-dependent information (such as `begin_offset`) is calculated based\non the UTF-32 encoding of the input. Python is an example of a language\nthat uses this encoding natively."
+          ],
+          "enum": [
+            "NONE",
+            "UTF8",
+            "UTF16",
+            "UTF32"
+          ],
+          "description": "The encoding type used by the API to calculate offsets.",
+          "type": "string"
+        },
+        "document": {
+          "$ref": "Document",
+          "description": "Input document."
+        }
+      },
+      "id": "AnalyzeEntitiesRequest"
+    },
+    "Sentiment": {
+      "properties": {
+        "polarity": {
+          "description": "DEPRECATED FIELD - This field is being deprecated in\nfavor of score. Please refer to our documentation at\nhttps://cloud.google.com/natural-language/docs for more information.",
+          "format": "float",
+          "type": "number"
+        },
+        "score": {
+          "description": "Sentiment score between -1.0 (negative sentiment) and 1.0\n(positive sentiment).",
+          "format": "float",
+          "type": "number"
+        },
+        "magnitude": {
+          "description": "A non-negative number in the [0, +inf) range, which represents\nthe absolute magnitude of sentiment regardless of score (positive or\nnegative).",
+          "format": "float",
+          "type": "number"
+        }
+      },
+      "id": "Sentiment",
+      "description": "Represents the feeling associated with the entire text or entities in\nthe text.",
+      "type": "object"
     }
   },
   "protocol": "rest",
@@ -918,173 +1086,5 @@
   "rootUrl": "https://language.googleapis.com/",
   "ownerDomain": "google.com",
   "name": "language",
-  "batchPath": "batch",
-  "title": "Google Cloud Natural Language API",
-  "ownerName": "Google",
-  "resources": {
-    "documents": {
-      "methods": {
-        "analyzeSyntax": {
-          "request": {
-            "$ref": "AnalyzeSyntaxRequest"
-          },
-          "description": "Analyzes the syntax of the text and provides sentence boundaries and\ntokenization along with part of speech tags, dependency trees, and other\nproperties.",
-          "httpMethod": "POST",
-          "parameterOrder": [],
-          "response": {
-            "$ref": "AnalyzeSyntaxResponse"
-          },
-          "parameters": {},
-          "scopes": [
-            "https://www.googleapis.com/auth/cloud-platform"
-          ],
-          "flatPath": "v1beta1/documents:analyzeSyntax",
-          "id": "language.documents.analyzeSyntax",
-          "path": "v1beta1/documents:analyzeSyntax"
-        },
-        "analyzeSentiment": {
-          "flatPath": "v1beta1/documents:analyzeSentiment",
-          "path": "v1beta1/documents:analyzeSentiment",
-          "id": "language.documents.analyzeSentiment",
-          "description": "Analyzes the sentiment of the provided text.",
-          "request": {
-            "$ref": "AnalyzeSentimentRequest"
-          },
-          "response": {
-            "$ref": "AnalyzeSentimentResponse"
-          },
-          "parameterOrder": [],
-          "httpMethod": "POST",
-          "scopes": [
-            "https://www.googleapis.com/auth/cloud-platform"
-          ],
-          "parameters": {}
-        },
-        "annotateText": {
-          "request": {
-            "$ref": "AnnotateTextRequest"
-          },
-          "description": "A convenience method that provides all the features that analyzeSentiment,\nanalyzeEntities, and analyzeSyntax provide in one call.",
-          "response": {
-            "$ref": "AnnotateTextResponse"
-          },
-          "parameterOrder": [],
-          "httpMethod": "POST",
-          "parameters": {},
-          "scopes": [
-            "https://www.googleapis.com/auth/cloud-platform"
-          ],
-          "flatPath": "v1beta1/documents:annotateText",
-          "path": "v1beta1/documents:annotateText",
-          "id": "language.documents.annotateText"
-        },
-        "analyzeEntities": {
-          "response": {
-            "$ref": "AnalyzeEntitiesResponse"
-          },
-          "parameterOrder": [],
-          "httpMethod": "POST",
-          "parameters": {},
-          "scopes": [
-            "https://www.googleapis.com/auth/cloud-platform"
-          ],
-          "flatPath": "v1beta1/documents:analyzeEntities",
-          "path": "v1beta1/documents:analyzeEntities",
-          "id": "language.documents.analyzeEntities",
-          "request": {
-            "$ref": "AnalyzeEntitiesRequest"
-          },
-          "description": "Finds named entities (currently finds proper names) in the text,\nentity types, salience, mentions for each entity, and other properties."
-        }
-      }
-    }
-  },
-  "parameters": {
-    "pp": {
-      "description": "Pretty-print response.",
-      "type": "boolean",
-      "default": "true",
-      "location": "query"
-    },
-    "bearer_token": {
-      "location": "query",
-      "description": "OAuth bearer token.",
-      "type": "string"
-    },
-    "oauth_token": {
-      "description": "OAuth 2.0 token for the current user.",
-      "type": "string",
-      "location": "query"
-    },
-    "upload_protocol": {
-      "location": "query",
-      "description": "Upload protocol for media (e.g. \"raw\", \"multipart\").",
-      "type": "string"
-    },
-    "prettyPrint": {
-      "description": "Returns response with indentations and line breaks.",
-      "type": "boolean",
-      "default": "true",
-      "location": "query"
-    },
-    "fields": {
-      "description": "Selector specifying which fields to include in a partial response.",
-      "type": "string",
-      "location": "query"
-    },
-    "uploadType": {
-      "description": "Legacy upload protocol for media (e.g. \"media\", \"multipart\").",
-      "type": "string",
-      "location": "query"
-    },
-    "callback": {
-      "location": "query",
-      "description": "JSONP",
-      "type": "string"
-    },
-    "$.xgafv": {
-      "enumDescriptions": [
-        "v1 error format",
-        "v2 error format"
-      ],
-      "location": "query",
-      "enum": [
-        "1",
-        "2"
-      ],
-      "description": "V1 error format.",
-      "type": "string"
-    },
-    "alt": {
-      "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",
-      "description": "Data format for response.",
-      "default": "json"
-    },
-    "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"
-    },
-    "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"
-    }
-  }
+  "batchPath": "batch"
 }
diff --git a/language/v1beta1/language-gen.go b/language/v1beta1/language-gen.go
index ac11e4f..d63a331 100644
--- a/language/v1beta1/language-gen.go
+++ b/language/v1beta1/language-gen.go
@@ -61,10 +61,9 @@
 }
 
 type Service struct {
-	client                    *http.Client
-	BasePath                  string // API endpoint base URL
-	UserAgent                 string // optional additional User-Agent fragment
-	GoogleClientHeaderElement string // client header fragment, for Google use only
+	client    *http.Client
+	BasePath  string // API endpoint base URL
+	UserAgent string // optional additional User-Agent fragment
 
 	Documents *DocumentsService
 }
@@ -76,10 +75,6 @@
 	return googleapi.UserAgent + " " + s.UserAgent
 }
 
-func (s *Service) clientHeader() string {
-	return gensupport.GoogleClientHeader("20170210", s.GoogleClientHeaderElement)
-}
-
 func NewDocumentsService(s *Service) *DocumentsService {
 	rs := &DocumentsService{s: s}
 	return rs
@@ -1316,10 +1311,11 @@
 	header_                http.Header
 }
 
-// AnalyzeEntities: Finds named entities (currently finds proper names)
-// in the text,
-// entity types, salience, mentions for each entity, and other
-// properties.
+// AnalyzeEntities: Finds named entities (currently proper names and
+// common nouns) in the text
+// along with entity types, salience, mentions for each entity,
+// and
+// other properties.
 func (r *DocumentsService) AnalyzeEntities(analyzeentitiesrequest *AnalyzeEntitiesRequest) *DocumentsAnalyzeEntitiesCall {
 	c := &DocumentsAnalyzeEntitiesCall{s: r.s, urlParams_: make(gensupport.URLParams)}
 	c.analyzeentitiesrequest = analyzeentitiesrequest
@@ -1357,7 +1353,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	var body io.Reader = nil
 	body, err := googleapi.WithoutDataWrapper.JSONReader(c.analyzeentitiesrequest)
 	if err != nil {
@@ -1410,7 +1405,7 @@
 	}
 	return ret, nil
 	// {
-	//   "description": "Finds named entities (currently finds proper names) in the text,\nentity types, salience, mentions for each entity, and other properties.",
+	//   "description": "Finds named entities (currently proper names and common nouns) in the text\nalong with entity types, salience, mentions for each entity, and\nother properties.",
 	//   "flatPath": "v1beta1/documents:analyzeEntities",
 	//   "httpMethod": "POST",
 	//   "id": "language.documents.analyzeEntities",
@@ -1478,7 +1473,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	var body io.Reader = nil
 	body, err := googleapi.WithoutDataWrapper.JSONReader(c.analyzesentimentrequest)
 	if err != nil {
@@ -1603,7 +1597,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	var body io.Reader = nil
 	body, err := googleapi.WithoutDataWrapper.JSONReader(c.analyzesyntaxrequest)
 	if err != nil {
@@ -1726,7 +1719,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	var body io.Reader = nil
 	body, err := googleapi.WithoutDataWrapper.JSONReader(c.annotatetextrequest)
 	if err != nil {
diff --git a/licensing/v1/licensing-gen.go b/licensing/v1/licensing-gen.go
index db2fd7f..dec77e9 100644
--- a/licensing/v1/licensing-gen.go
+++ b/licensing/v1/licensing-gen.go
@@ -61,10 +61,9 @@
 }
 
 type Service struct {
-	client                    *http.Client
-	BasePath                  string // API endpoint base URL
-	UserAgent                 string // optional additional User-Agent fragment
-	GoogleClientHeaderElement string // client header fragment, for Google use only
+	client    *http.Client
+	BasePath  string // API endpoint base URL
+	UserAgent string // optional additional User-Agent fragment
 
 	LicenseAssignments *LicenseAssignmentsService
 }
@@ -76,10 +75,6 @@
 	return googleapi.UserAgent + " " + s.UserAgent
 }
 
-func (s *Service) clientHeader() string {
-	return gensupport.GoogleClientHeader("20170210", s.GoogleClientHeaderElement)
-}
-
 func NewLicenseAssignmentsService(s *Service) *LicenseAssignmentsService {
 	rs := &LicenseAssignmentsService{s: s}
 	return rs
@@ -267,7 +262,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	var body io.Reader = nil
 	c.urlParams_.Set("alt", alt)
 	urls := googleapi.ResolveRelative(c.s.BasePath, "{productId}/sku/{skuId}/user/{userId}")
@@ -395,7 +389,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	if c.ifNoneMatch_ != "" {
 		reqHeaders.Set("If-None-Match", c.ifNoneMatch_)
 	}
@@ -542,7 +535,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	var body io.Reader = nil
 	body, err := googleapi.WithoutDataWrapper.JSONReader(c.licenseassignmentinsert)
 	if err != nil {
@@ -710,7 +702,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	if c.ifNoneMatch_ != "" {
 		reqHeaders.Set("If-None-Match", c.ifNoneMatch_)
 	}
@@ -910,7 +901,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	if c.ifNoneMatch_ != "" {
 		reqHeaders.Set("If-None-Match", c.ifNoneMatch_)
 	}
@@ -1094,7 +1084,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	var body io.Reader = nil
 	body, err := googleapi.WithoutDataWrapper.JSONReader(c.licenseassignment)
 	if err != nil {
@@ -1248,7 +1237,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	var body io.Reader = nil
 	body, err := googleapi.WithoutDataWrapper.JSONReader(c.licenseassignment)
 	if err != nil {
diff --git a/logging/v2/logging-api.json b/logging/v2/logging-api.json
index f64ee20..aca1d80 100644
--- a/logging/v2/logging-api.json
+++ b/logging/v2/logging-api.json
@@ -1,55 +1,484 @@
 {
+  "kind": "discovery#restDescription",
+  "description": "Writes log entries and manages your Stackdriver Logging configuration.",
+  "servicePath": "",
+  "basePath": "",
+  "documentationLink": "https://cloud.google.com/logging/docs/",
+  "id": "logging:v2",
+  "revision": "20170320",
+  "discoveryVersion": "v1",
+  "version_module": "True",
   "schemas": {
-    "LogEntry": {
-      "description": "An individual entry in a log.",
+    "SourceReference": {
+      "description": "A reference to a particular snapshot of the source tree used to build and deploy an application.",
       "type": "object",
       "properties": {
-        "httpRequest": {
-          "description": "Optional. Information about the HTTP request associated with this log entry, if applicable.",
-          "$ref": "HttpRequest"
-        },
-        "resource": {
-          "description": "Required. The monitored resource associated with 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"
-        },
-        "jsonPayload": {
-          "additionalProperties": {
-            "type": "any",
-            "description": "Properties of the object."
-          },
-          "description": "The log entry payload, represented as a structure that is expressed as a JSON object.",
-          "type": "object"
-        },
-        "operation": {
-          "description": "Optional. Information about an operation associated with the log entry, if applicable.",
-          "$ref": "LogEntryOperation"
-        },
-        "insertId": {
-          "description": "Optional. A unique identifier for the log entry. If you provide a value, then Stackdriver Logging considers other log entries in the same project, with the same timestamp, and with the same insert_id to be duplicates which can be removed. If omitted in new log entries, then Stackdriver Logging will insert its own unique identifier. The insert_id is used to order log entries that have the same timestamp value.",
+        "revisionId": {
+          "description": "The canonical and persistent identifier of the deployed revision. Example (git): \"0035781c50ec7aa23385dc841529ce8a4b70db1b\"",
           "type": "string"
         },
-        "textPayload": {
-          "description": "The log entry payload, represented as a Unicode string (UTF-8).",
+        "repository": {
+          "type": "string",
+          "description": "Optional. A URI string identifying the repository. Example: \"https://github.com/GoogleCloudPlatform/kubernetes.git\""
+        }
+      },
+      "id": "SourceReference"
+    },
+    "WriteLogEntriesResponse": {
+      "type": "object",
+      "properties": {},
+      "id": "WriteLogEntriesResponse",
+      "description": "Result returned from WriteLogEntries. empty"
+    },
+    "LogEntryOperation": {
+      "type": "object",
+      "properties": {
+        "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"
         },
-        "protoPayload": {
-          "additionalProperties": {
-            "type": "any",
-            "description": "Properties of the object. Contains field @type with type URL."
-          },
-          "description": "The log entry payload, represented as a protocol buffer. Some Google Cloud Platform services use this field for their log entry payloads.",
-          "type": "object"
+        "producer": {
+          "type": "string",
+          "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\"."
         },
-        "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",
+        "first": {
+          "description": "Optional. Set this to True if this is the first log entry in the operation.",
+          "type": "boolean"
+        }
+      },
+      "id": "LogEntryOperation",
+      "description": "Additional information about a potentially long-running operation with which a log entry is associated."
+    },
+    "LogMetric": {
+      "type": "object",
+      "properties": {
+        "version": {
+          "enum": [
+            "V2",
+            "V1"
+          ],
+          "description": "Output only. The API version that created or updated this metric. The version also dictates the syntax of the filter expression. When a value for this field is missing, the default value of V2 should be assumed.",
+          "type": "string",
+          "enumDescriptions": [
+            "Stackdriver Logging API v2.",
+            "Stackdriver Logging API v1."
+          ]
+        },
+        "filter": {
+          "description": "Required. An advanced logs filter which is used to match log entries. Example:\n\"resource.type=gae_app AND severity\u003e=ERROR\"\nThe maximum length of the filter is 20000 characters.",
           "type": "string"
         },
+        "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"
+        },
+        "description": {
+          "type": "string",
+          "description": "Optional. A description of this metric, which is used in documentation."
+        }
+      },
+      "id": "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."
+    },
+    "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\":\n{ \"type\": \"gce_instance\",\n  \"labels\": { \"instance_id\": \"12345678901234\",\n              \"zone\": \"us-central1-a\" }}\n",
+      "type": "object",
+      "properties": {
+        "type": {
+          "type": "string",
+          "description": "Required. The monitored resource type. This field must match the type field of a MonitoredResourceDescriptor object. For example, the type of a Cloud SQL database is \"cloudsql_database\"."
+        },
         "labels": {
           "additionalProperties": {
             "type": "string"
           },
-          "description": "Optional. A set of user-defined (key, value) data that provides additional information about the log entry.",
+          "description": "Required. Values for all of the labels listed in the associated monitored resource descriptor. For example, Cloud SQL databases use the labels \"database_id\" and \"zone\".",
           "type": "object"
+        }
+      },
+      "id": "MonitoredResource"
+    },
+    "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.",
+      "type": "object",
+      "properties": {
+        "endTime": {
+          "type": "string",
+          "description": "Optional. The time at which this sink will stop exporting log entries. Log entries are exported only if their timestamp is earlier than the end time. If this field is not supplied, there is no end time. If both a start time and an end time are provided, then the end time must be later than the start time.",
+          "format": "google-datetime"
+        },
+        "startTime": {
+          "type": "string",
+          "description": "Optional. The time at which this sink will begin exporting log entries. Log entries are exported only if their timestamp is not earlier than the start time. The default value of this field is the time the sink is created or updated.",
+          "format": "google-datetime"
+        },
+        "writerIdentity": {
+          "description": "Output only. An IAM identity&mdash;a service account or group&mdash;under which Stackdriver Logging writes the exported log entries to the sink's destination. This field is set by sinks.create and sinks.update, based on the setting 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. Consult the destination service's documentation to determine the appropriate IAM roles to assign to the identity.",
+          "type": "string"
+        },
+        "outputVersionFormat": {
+          "enum": [
+            "VERSION_FORMAT_UNSPECIFIED",
+            "V2",
+            "V1"
+          ],
+          "description": "Optional. The log entry format to use for this sink's exported log entries. The v2 format is used by default. The v1 format is deprecated and should be used only as part of a migration effort to v2. See Migration to the v2 API.",
+          "type": "string",
+          "enumDescriptions": [
+            "An unspecified format version that will default to V2.",
+            "LogEntry version 2 format.",
+            "LogEntry version 1 format."
+          ]
+        },
+        "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.",
+          "type": "string"
+        },
+        "destination": {
+          "description": "Required. The export destination:\n\"storage.googleapis.com/[GCS_BUCKET]\"\n\"bigquery.googleapis.com/projects/[PROJECT_ID]/datasets/[DATASET]\"\n\"pubsub.googleapis.com/projects/[PROJECT_ID]/topics/[TOPIC_ID]\"\nThe 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.",
+          "type": "string"
+        },
+        "filter": {
+          "type": "string",
+          "description": "Optional. An advanced logs filter. The only exported log entries are those that are in the resource owning the sink and that match the filter. The filter must use the log entry format specified by the output_version_format parameter. For example, in the v2 format:\nlogName=\"projects/[PROJECT_ID]/logs/[LOG_ID]\" AND severity\u003e=ERROR\n"
+        }
+      },
+      "id": "LogSink"
+    },
+    "WriteLogEntriesRequest": {
+      "type": "object",
+      "properties": {
+        "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:\n{ \"type\": \"gce_instance\",\n  \"labels\": {\n    \"zone\": \"us-central1-a\", \"instance_id\": \"00000000000000000000\" }}\nSee LogEntry."
+        },
+        "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:\n\"projects/[PROJECT_ID]/logs/[LOG_ID]\"\n\"organizations/[ORGANIZATION_ID]/logs/[LOG_ID]\"\n\"billingAccounts/[BILLING_ACCOUNT_ID]/logs/[LOG_ID]\"\n\"folders/[FOLDER_ID]/logs/[LOG_ID]\"\n[LOG_ID] must be URL-encoded. For example, \"projects/my-project-id/logs/syslog\" or \"organizations/1234567890/logs/cloudresourcemanager.googleapis.com%2Factivity\". For more information about log names, see LogEntry.",
+          "type": "string"
+        },
+        "entries": {
+          "type": "array",
+          "items": {
+            "$ref": "LogEntry"
+          },
+          "description": "Required. The log entries to write. Values supplied for the fields log_name, resource, and labels in this entries.write request are inserted into those log entries in this list that do not provide their own values.Stackdriver Logging also creates and inserts values for timestamp and insert_id if the entries do not provide them. The created insert_id for the N'th entry in this list will be greater than earlier entries and less than later entries. Otherwise, the order of log entries in this list does not matter.To improve throughput and to avoid exceeding the quota limit for calls to entries.write, you should write multiple log entries at once rather than calling this method for each individual log entry."
+        },
+        "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"
+        },
+        "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"
+        }
+      },
+      "id": "WriteLogEntriesRequest",
+      "description": "The parameters to WriteLogEntries."
+    },
+    "ListLogsResponse": {
+      "type": "object",
+      "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"
+        },
+        "logNames": {
+          "type": "array",
+          "items": {
+            "type": "string"
+          },
+          "description": "A list of log names. For example, \"projects/my-project/syslog\" or \"organizations/123/cloudresourcemanager.googleapis.com%2Factivity\"."
+        }
+      },
+      "id": "ListLogsResponse",
+      "description": "Result returned from ListLogs."
+    },
+    "ListSinksResponse": {
+      "type": "object",
+      "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.",
+          "type": "array",
+          "items": {
+            "$ref": "LogSink"
+          }
+        }
+      },
+      "id": "ListSinksResponse",
+      "description": "Result returned from ListSinks."
+    },
+    "HttpRequest": {
+      "type": "object",
+      "properties": {
+        "requestSize": {
+          "description": "The size of the HTTP request message in bytes, including the request headers and the request body.",
+          "format": "int64",
+          "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"
+        },
+        "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"
+        },
+        "remoteIp": {
+          "type": "string",
+          "description": "The IP address (IPv4 or IPv6) of the client that issued the HTTP request. Examples: \"192.168.1.1\", \"FE80::0202:B3FF:FE1E:8329\"."
+        },
+        "serverIp": {
+          "description": "The IP address (IPv4 or IPv6) of the origin server that the request was sent to.",
+          "type": "string"
+        },
+        "cacheLookup": {
+          "type": "boolean",
+          "description": "Whether or not a cache lookup was attempted."
+        },
+        "cacheHit": {
+          "type": "boolean",
+          "description": "Whether or not an entity was served from cache (with or without validation)."
+        },
+        "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"
+        },
+        "status": {
+          "description": "The response code indicating the status of response. Examples: 200, 404.",
+          "format": "int32",
+          "type": "integer"
+        },
+        "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"
+        },
+        "userAgent": {
+          "type": "string",
+          "description": "The user agent sent by the client. Example: \"Mozilla/4.0 (compatible; MSIE 6.0; Windows 98; Q312461; .NET CLR 1.0.3705)\"."
+        },
+        "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"
+        },
+        "cacheFillBytes": {
+          "type": "string",
+          "description": "The number of HTTP response bytes inserted into cache. Set only when a cache fill was attempted.",
+          "format": "int64"
+        },
+        "requestMethod": {
+          "type": "string",
+          "description": "The request method. Examples: \"GET\", \"HEAD\", \"PUT\", \"POST\"."
+        }
+      },
+      "id": "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."
+    },
+    "LabelDescriptor": {
+      "description": "A description of a label.",
+      "type": "object",
+      "properties": {
+        "key": {
+          "type": "string",
+          "description": "The label key."
+        },
+        "description": {
+          "description": "A human-readable description for the label.",
+          "type": "string"
+        },
+        "valueType": {
+          "type": "string",
+          "enumDescriptions": [
+            "A variable-length string. This is the default.",
+            "Boolean; true or false.",
+            "A 64-bit signed integer."
+          ],
+          "enum": [
+            "STRING",
+            "BOOL",
+            "INT64"
+          ],
+          "description": "The type of data that can be assigned to the label."
+        }
+      },
+      "id": "LabelDescriptor"
+    },
+    "MonitoredResourceDescriptor": {
+      "type": "object",
+      "properties": {
+        "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}\"."
+        },
+        "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"
+        },
+        "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. The maximum length of this value is 256 characters.",
+          "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"
+          }
+        }
+      },
+      "id": "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."
+    },
+    "LogEntrySourceLocation": {
+      "description": "Additional information about the source code location that produced the log entry.",
+      "type": "object",
+      "properties": {
+        "file": {
+          "type": "string",
+          "description": "Optional. Source file name. Depending on the runtime environment, this might be a simple name or a fully-qualified name."
+        },
+        "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",
+          "description": "Optional. Line within the source file. 1-based; 0 indicates no line number available.",
+          "format": "int64"
+        }
+      },
+      "id": "LogEntrySourceLocation"
+    },
+    "ListLogEntriesResponse": {
+      "type": "object",
+      "properties": {
+        "entries": {
+          "description": "A list of log entries.",
+          "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."
+        }
+      },
+      "id": "ListLogEntriesResponse",
+      "description": "Result returned from ListLogEntries."
+    },
+    "LogLine": {
+      "type": "object",
+      "properties": {
+        "severity": {
+          "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."
+          ],
+          "enum": [
+            "DEFAULT",
+            "DEBUG",
+            "INFO",
+            "NOTICE",
+            "WARNING",
+            "ERROR",
+            "CRITICAL",
+            "ALERT",
+            "EMERGENCY"
+          ],
+          "description": "Severity of this log entry."
+        },
+        "logMessage": {
+          "description": "App-provided log message.",
+          "type": "string"
+        },
+        "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"
+        }
+      },
+      "id": "LogLine",
+      "description": "Application log line emitted while processing a request."
+    },
+    "ListLogMetricsResponse": {
+      "description": "Result returned from ListLogMetrics.",
+      "type": "object",
+      "properties": {
+        "metrics": {
+          "description": "A list of logs-based metrics.",
+          "type": "array",
+          "items": {
+            "$ref": "LogMetric"
+          }
+        },
+        "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"
+        }
+      },
+      "id": "ListLogMetricsResponse"
+    },
+    "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:\nservice Foo {\n  rpc Bar(google.protobuf.Empty) returns (google.protobuf.Empty);\n}\nThe JSON representation for Empty is empty JSON object {}."
+    },
+    "LogEntry": {
+      "description": "An individual entry in a log.",
+      "type": "object",
+      "properties": {
+        "textPayload": {
+          "description": "The log entry payload, represented as a Unicode string (UTF-8).",
+          "type": "string"
+        },
+        "protoPayload": {
+          "type": "object",
+          "additionalProperties": {
+            "type": "any",
+            "description": "Properties of the object. Contains field @type with type URL."
+          },
+          "description": "The log entry payload, represented as a protocol buffer. Some Google Cloud Platform services use this field for their log entry payloads."
+        },
+        "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"
+        },
+        "labels": {
+          "type": "object",
+          "additionalProperties": {
+            "type": "string"
+          },
+          "description": "Optional. A set of user-defined (key, value) data that provides additional information about the log entry."
         },
         "severity": {
           "enum": [
@@ -87,19 +516,38 @@
           "type": "string"
         },
         "logName": {
-          "description": "Required. The resource name of the log to which this log entry belongs:\n\"projects/[PROJECT_ID]/logs/[LOG_ID]\"\n\"organizations/[ORGANIZATION_ID]/logs/[LOG_ID]\"\n\"billingAccounts/[BILLING_ACCOUNT_ID]/logs/[LOG_ID]\"\n\"folders/[FOLDER_ID]/logs/[LOG_ID]\"\n[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",
+          "description": "Required. The resource name of the log to which this log entry belongs:\n\"projects/[PROJECT_ID]/logs/[LOG_ID]\"\n\"organizations/[ORGANIZATION_ID]/logs/[LOG_ID]\"\n\"billingAccounts/[BILLING_ACCOUNT_ID]/logs/[LOG_ID]\"\n\"folders/[FOLDER_ID]/logs/[LOG_ID]\"\n[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."
+        },
+        "httpRequest": {
+          "$ref": "HttpRequest",
+          "description": "Optional. Information about the HTTP request associated with this log entry, if applicable."
+        },
+        "resource": {
+          "$ref": "MonitoredResource",
+          "description": "Required. The monitored resource associated with 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."
+        },
+        "jsonPayload": {
+          "type": "object",
+          "additionalProperties": {
+            "type": "any",
+            "description": "Properties of the object."
+          },
+          "description": "The log entry payload, represented as a structure that is expressed as a JSON object."
+        },
+        "insertId": {
+          "description": "Optional. A unique identifier for the log entry. If you provide a value, then Stackdriver Logging considers other log entries in the same project, with the same timestamp, and with the same insert_id to be duplicates which can be removed. If omitted in new log entries, then Stackdriver Logging will insert its own unique identifier. The insert_id is used to order log entries that have the same timestamp value.",
           "type": "string"
+        },
+        "operation": {
+          "$ref": "LogEntryOperation",
+          "description": "Optional. Information about an operation associated with the log entry, if applicable."
         }
       },
       "id": "LogEntry"
     },
-    "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:\nservice Foo {\n  rpc Bar(google.protobuf.Empty) returns (google.protobuf.Empty);\n}\nThe JSON representation for Empty is empty JSON object {}.",
-      "type": "object"
-    },
     "SourceLocation": {
+      "description": "Specifies a location in a source code file.",
       "type": "object",
       "properties": {
         "file": {
@@ -107,44 +555,23 @@
           "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"
+          "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)."
         },
         "line": {
+          "type": "string",
           "description": "Line within the source file.",
-          "format": "int64",
-          "type": "string"
+          "format": "int64"
         }
       },
-      "id": "SourceLocation",
-      "description": "Specifies a location in a source code file."
+      "id": "SourceLocation"
     },
     "ListLogEntriesRequest": {
       "type": "object",
       "properties": {
-        "projectIds": {
-          "description": "Deprecated. Use resource_names instead. One or more project identifiers or project numbers from which to retrieve log entries. Example: \"my-project-1A\". If present, these project identifiers are converted to resource name format and added to the list of resources in resource_names.",
-          "type": "array",
-          "items": {
-            "type": "string"
-          }
-        },
-        "filter": {
-          "description": "Optional. A filter that chooses which log entries to return. See Advanced Logs 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 listed in resource_names will cause the filter to return no results. The maximum length of the filter is 20000 characters.",
-          "type": "string"
-        },
-        "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."
-        },
-        "pageSize": {
-          "description": "Optional. The maximum number of results to return from this request. Non-positive values are ignored. The presence of next_page_token in the response indicates that more results might be available.",
-          "format": "int32",
-          "type": "integer"
-        },
         "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"
+          "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."
         },
         "resourceNames": {
           "description": "Required. Names of one or more parent resources from which to retrieve log entries:\n\"projects/[PROJECT_ID]\"\n\"organizations/[ORGANIZATION_ID]\"\n\"billingAccounts/[BILLING_ACCOUNT_ID]\"\n\"folders/[FOLDER_ID]\"\nProjects listed in the project_ids field are added to this list.",
@@ -152,15 +579,62 @@
           "items": {
             "type": "string"
           }
+        },
+        "projectIds": {
+          "type": "array",
+          "items": {
+            "type": "string"
+          },
+          "description": "Deprecated. Use resource_names instead. One or more project identifiers or project numbers from which to retrieve log entries. Example: \"my-project-1A\". If present, these project identifiers are converted to resource name format and added to the list of resources in resource_names."
+        },
+        "filter": {
+          "description": "Optional. A filter that chooses which log entries to return. See Advanced Logs 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 listed in resource_names will cause the filter to return no results. The maximum length of the filter is 20000 characters.",
+          "type": "string"
+        },
+        "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"
+        },
+        "pageSize": {
+          "type": "integer",
+          "description": "Optional. The maximum number of results to return from this request. Non-positive values are ignored. The presence of next_page_token in the response indicates that more results might be available.",
+          "format": "int32"
         }
       },
       "id": "ListLogEntriesRequest",
       "description": "The parameters to ListLogEntries."
     },
     "RequestLog": {
-      "description": "Complete log information about a single HTTP request to an App Engine application.",
       "type": "object",
       "properties": {
+        "responseSize": {
+          "type": "string",
+          "description": "Size in bytes sent back to client by request.",
+          "format": "int64"
+        },
+        "traceId": {
+          "description": "Stackdriver Trace identifier for this request.",
+          "type": "string"
+        },
+        "line": {
+          "description": "A list of log lines emitted by the application while serving this request.",
+          "type": "array",
+          "items": {
+            "$ref": "LogLine"
+          }
+        },
+        "taskQueueName": {
+          "type": "string",
+          "description": "Queue name of the request, in the case of an offline request."
+        },
+        "referrer": {
+          "description": "Referrer URL of request.",
+          "type": "string"
+        },
+        "requestId": {
+          "type": "string",
+          "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."
+        },
         "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"
@@ -180,55 +654,55 @@
           "type": "integer"
         },
         "taskName": {
-          "type": "string",
-          "description": "Task name of the request, in the case of an offline request."
-        },
-        "urlMapEntry": {
-          "description": "File or class that handled the request.",
+          "description": "Task name of the request, in the case of an offline request.",
           "type": "string"
         },
-        "instanceIndex": {
-          "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.",
-          "format": "int32"
-        },
-        "host": {
+        "urlMapEntry": {
           "type": "string",
-          "description": "Internet host and port number of the resource being requested."
+          "description": "File or class that handled the request."
+        },
+        "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"
         },
         "finished": {
-          "description": "Whether this request is finished or active.",
-          "type": "boolean"
+          "type": "boolean",
+          "description": "Whether this request is finished or active."
+        },
+        "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"
         },
         "startTime": {
+          "type": "string",
           "description": "Time when the request started.",
-          "format": "google-datetime",
-          "type": "string"
+          "format": "google-datetime"
         },
         "latency": {
-          "type": "string",
           "description": "Latency of the request.",
-          "format": "google-duration"
+          "format": "google-duration",
+          "type": "string"
         },
         "ip": {
-          "description": "Origin IP address.",
-          "type": "string"
+          "type": "string",
+          "description": "Origin IP address."
         },
         "appId": {
-          "description": "Application that handled this request.",
-          "type": "string"
+          "type": "string",
+          "description": "Application that handled this request."
         },
         "appEngineRelease": {
           "description": "App Engine release version.",
           "type": "string"
         },
         "method": {
-          "description": "Request method. Example: \"GET\", \"HEAD\", \"PUT\", \"POST\", \"DELETE\".",
-          "type": "string"
+          "type": "string",
+          "description": "Request method. Example: \"GET\", \"HEAD\", \"PUT\", \"POST\", \"DELETE\"."
         },
         "cost": {
           "description": "An indication of the relative cost of serving this request.",
@@ -236,8 +710,8 @@
           "type": "number"
         },
         "instanceId": {
-          "description": "An identifier for the instance that handled the request.",
-          "type": "string"
+          "type": "string",
+          "description": "An identifier for the instance that handled the request."
         },
         "megaCycles": {
           "description": "Number of CPU megacycles used to process request.",
@@ -245,25 +719,25 @@
           "type": "string"
         },
         "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"
+          "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."
         },
         "versionId": {
-          "description": "Version of the application that handled this request.",
-          "type": "string"
+          "type": "string",
+          "description": "Version of the application that handled this request."
         },
         "moduleId": {
-          "description": "Module of the application that handled this request.",
-          "type": "string"
+          "type": "string",
+          "description": "Module of the application that handled this request."
         },
         "endTime": {
+          "type": "string",
           "description": "Time when the request finished.",
-          "format": "google-datetime",
-          "type": "string"
+          "format": "google-datetime"
         },
         "userAgent": {
-          "description": "User agent that made the request.",
-          "type": "string"
+          "type": "string",
+          "description": "User agent that made the request."
         },
         "wasLoadingRequest": {
           "description": "Whether this was a loading request for the instance.",
@@ -275,500 +749,35 @@
           "items": {
             "$ref": "SourceReference"
           }
-        },
-        "responseSize": {
-          "description": "Size in bytes sent back to client by request.",
-          "format": "int64",
-          "type": "string"
-        },
-        "traceId": {
-          "description": "Stackdriver Trace identifier for this request.",
-          "type": "string"
-        },
-        "line": {
-          "description": "A list of log lines emitted by the application while serving this request.",
-          "type": "array",
-          "items": {
-            "$ref": "LogLine"
-          }
-        },
-        "taskQueueName": {
-          "description": "Queue name of the request, in the case of an offline request.",
-          "type": "string"
-        },
-        "referrer": {
-          "type": "string",
-          "description": "Referrer URL of request."
-        },
-        "requestId": {
-          "type": "string",
-          "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."
         }
       },
-      "id": "RequestLog"
+      "id": "RequestLog",
+      "description": "Complete log information about a single HTTP request to an App Engine application."
     },
     "ListMonitoredResourceDescriptorsResponse": {
+      "description": "Result returned from ListMonitoredResourceDescriptors.",
+      "type": "object",
       "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.",
           "type": "array",
           "items": {
             "$ref": "MonitoredResourceDescriptor"
-          }
-        },
-        "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"
-        }
-      },
-      "id": "ListMonitoredResourceDescriptorsResponse",
-      "description": "Result returned from ListMonitoredResourceDescriptors.",
-      "type": "object"
-    },
-    "SourceReference": {
-      "type": "object",
-      "properties": {
-        "revisionId": {
-          "description": "The canonical and persistent identifier of the deployed revision. Example (git): \"0035781c50ec7aa23385dc841529ce8a4b70db1b\"",
-          "type": "string"
-        },
-        "repository": {
-          "description": "Optional. A URI string identifying the repository. Example: \"https://github.com/GoogleCloudPlatform/kubernetes.git\"",
-          "type": "string"
-        }
-      },
-      "id": "SourceReference",
-      "description": "A reference to a particular snapshot of the source tree used to build and deploy an application."
-    },
-    "WriteLogEntriesResponse": {
-      "description": "Result returned from WriteLogEntries. empty",
-      "type": "object",
-      "properties": {},
-      "id": "WriteLogEntriesResponse"
-    },
-    "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.",
-      "type": "object",
-      "properties": {
-        "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"
-        },
-        "description": {
-          "type": "string",
-          "description": "Optional. A description of this metric, which is used in documentation."
-        },
-        "version": {
-          "enumDescriptions": [
-            "Stackdriver Logging API v2.",
-            "Stackdriver Logging API v1."
-          ],
-          "enum": [
-            "V2",
-            "V1"
-          ],
-          "description": "Output only. The API version that created or updated this metric. The version also dictates the syntax of the filter expression. When a value for this field is missing, the default value of V2 should be assumed.",
-          "type": "string"
-        },
-        "filter": {
-          "description": "Required. An advanced logs filter which is used to match log entries. Example:\n\"resource.type=gae_app AND severity\u003e=ERROR\"\nThe maximum length of the filter is 20000 characters.",
-          "type": "string"
-        }
-      },
-      "id": "LogMetric"
-    },
-    "LogEntryOperation": {
-      "properties": {
-        "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"
-        },
-        "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"
-        }
-      },
-      "id": "LogEntryOperation",
-      "description": "Additional information about a potentially long-running operation with which a log entry is associated.",
-      "type": "object"
-    },
-    "MonitoredResource": {
-      "properties": {
-        "labels": {
-          "additionalProperties": {
-            "type": "string"
           },
-          "description": "Required. Values for all of the labels listed in the associated monitored resource descriptor. For example, Cloud SQL databases use the labels \"database_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 Cloud SQL database is \"cloudsql_database\".",
-          "type": "string"
+          "description": "A list of resource descriptors."
         }
       },
-      "id": "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\":\n{ \"type\": \"gce_instance\",\n  \"labels\": { \"instance_id\": \"12345678901234\",\n              \"zone\": \"us-central1-a\" }}\n",
-      "type": "object"
-    },
-    "WriteLogEntriesRequest": {
-      "type": "object",
-      "properties": {
-        "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"
-        },
-        "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:\n{ \"type\": \"gce_instance\",\n  \"labels\": {\n    \"zone\": \"us-central1-a\", \"instance_id\": \"00000000000000000000\" }}\nSee LogEntry.",
-          "$ref": "MonitoredResource"
-        },
-        "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:\n\"projects/[PROJECT_ID]/logs/[LOG_ID]\"\n\"organizations/[ORGANIZATION_ID]/logs/[LOG_ID]\"\n\"billingAccounts/[BILLING_ACCOUNT_ID]/logs/[LOG_ID]\"\n\"folders/[FOLDER_ID]/logs/[LOG_ID]\"\n[LOG_ID] must be URL-encoded. For example, \"projects/my-project-id/logs/syslog\" or \"organizations/1234567890/logs/cloudresourcemanager.googleapis.com%2Factivity\". For more information about log names, see LogEntry.",
-          "type": "string"
-        },
-        "entries": {
-          "description": "Required. The log entries to write. Values supplied for the fields log_name, resource, and labels in this entries.write request are inserted into those log entries in this list that do not provide their own values.Stackdriver Logging also creates and inserts values for timestamp and insert_id if the entries do not provide them. The created insert_id for the N'th entry in this list will be greater than earlier entries and less than later entries. Otherwise, the order of log entries in this list does not matter.To improve throughput and to avoid exceeding the quota limit for calls to entries.write, you should write multiple log entries at once rather than calling this method for each individual log entry.",
-          "type": "array",
-          "items": {
-            "$ref": "LogEntry"
-          }
-        },
-        "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"
-        }
-      },
-      "id": "WriteLogEntriesRequest",
-      "description": "The parameters to WriteLogEntries."
-    },
-    "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.",
-      "type": "object",
-      "properties": {
-        "destination": {
-          "type": "string",
-          "description": "Required. The export destination:\n\"storage.googleapis.com/[GCS_BUCKET]\"\n\"bigquery.googleapis.com/projects/[PROJECT_ID]/datasets/[DATASET]\"\n\"pubsub.googleapis.com/projects/[PROJECT_ID]/topics/[TOPIC_ID]\"\nThe 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."
-        },
-        "filter": {
-          "description": "Optional. An advanced logs filter. The only exported log entries are those that are in the resource owning the sink and that match the filter. The filter must use the log entry format specified by the output_version_format parameter. For example, in the v2 format:\nlogName=\"projects/[PROJECT_ID]/logs/[LOG_ID]\" AND severity\u003e=ERROR\n",
-          "type": "string"
-        },
-        "endTime": {
-          "description": "Optional. The time at which this sink will stop exporting log entries. Log entries are exported only if their timestamp is earlier than the end time. If this field is not supplied, there is no end time. If both a start time and an end time are provided, then the end time must be later than the start time.",
-          "format": "google-datetime",
-          "type": "string"
-        },
-        "writerIdentity": {
-          "description": "Output only. An IAM identity&mdash;a service account or group&mdash;under which Stackdriver Logging writes the exported log entries to the sink's destination. This field is set by sinks.create and sinks.update, based on the setting 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. Consult the destination service's documentation to determine the appropriate IAM roles to assign to the identity.",
-          "type": "string"
-        },
-        "startTime": {
-          "description": "Optional. The time at which this sink will begin exporting log entries. Log entries are exported only if their timestamp is not earlier than the start time. The default value of this field is the time the sink is created or updated.",
-          "format": "google-datetime",
-          "type": "string"
-        },
-        "outputVersionFormat": {
-          "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": "Optional. The log entry format to use for this sink's exported log entries. The v2 format is used by default. The v1 format is deprecated and should be used only as part of a migration effort to v2. See Migration to the v2 API.",
-          "type": "string"
-        },
-        "name": {
-          "type": "string",
-          "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."
-        }
-      },
-      "id": "LogSink"
-    },
-    "ListLogsResponse": {
-      "id": "ListLogsResponse",
-      "description": "Result returned from ListLogs.",
-      "type": "object",
-      "properties": {
-        "logNames": {
-          "description": "A list of log names. For example, \"projects/my-project/syslog\" or \"organizations/123/cloudresourcemanager.googleapis.com%2Factivity\".",
-          "type": "array",
-          "items": {
-            "type": "string"
-          }
-        },
-        "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"
-        }
-      }
-    },
-    "HttpRequest": {
-      "id": "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.",
-      "type": "object",
-      "properties": {
-        "status": {
-          "description": "The response code indicating the status of response. Examples: 200, 404.",
-          "format": "int32",
-          "type": "integer"
-        },
-        "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"
-        },
-        "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"
-        },
-        "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"
-        },
-        "cacheFillBytes": {
-          "description": "The number of HTTP response bytes inserted into cache. Set only when a cache fill was attempted.",
-          "format": "int64",
-          "type": "string"
-        },
-        "requestMethod": {
-          "description": "The request method. Examples: \"GET\", \"HEAD\", \"PUT\", \"POST\".",
-          "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"
-        },
-        "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"
-        },
-        "remoteIp": {
-          "description": "The IP address (IPv4 or IPv6) of the client that issued the HTTP request. Examples: \"192.168.1.1\", \"FE80::0202:B3FF:FE1E:8329\".",
-          "type": "string"
-        },
-        "serverIp": {
-          "description": "The IP address (IPv4 or IPv6) of the origin server that the request was sent to.",
-          "type": "string"
-        },
-        "cacheLookup": {
-          "description": "Whether or not a cache lookup was attempted.",
-          "type": "boolean"
-        },
-        "cacheHit": {
-          "description": "Whether or not an entity was served from cache (with or without validation).",
-          "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"
-        }
-      }
-    },
-    "ListSinksResponse": {
-      "id": "ListSinksResponse",
-      "description": "Result returned from ListSinks.",
-      "type": "object",
-      "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.",
-          "type": "array",
-          "items": {
-            "$ref": "LogSink"
-          }
-        }
-      }
-    },
-    "LabelDescriptor": {
-      "description": "A description of a label.",
-      "type": "object",
-      "properties": {
-        "valueType": {
-          "type": "string",
-          "enumDescriptions": [
-            "A variable-length string. This is the default.",
-            "Boolean; true or false.",
-            "A 64-bit signed integer."
-          ],
-          "enum": [
-            "STRING",
-            "BOOL",
-            "INT64"
-          ],
-          "description": "The type of data that can be assigned to the label."
-        },
-        "key": {
-          "description": "The label key.",
-          "type": "string"
-        },
-        "description": {
-          "description": "A human-readable description for the label.",
-          "type": "string"
-        }
-      },
-      "id": "LabelDescriptor"
-    },
-    "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.",
-      "type": "object",
-      "properties": {
-        "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"
-        },
-        "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\"."
-        },
-        "description": {
-          "description": "Optional. A detailed description of the monitored resource type that might be used in documentation.",
-          "type": "string"
-        },
-        "type": {
-          "type": "string",
-          "description": "Required. The monitored resource type. For example, the type \"cloudsql_database\" represents databases in Google Cloud SQL. The maximum length of this value is 256 characters."
-        },
-        "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"
-          }
-        }
-      },
-      "id": "MonitoredResourceDescriptor"
-    },
-    "LogEntrySourceLocation": {
-      "description": "Additional information about the source code location that produced the log entry.",
-      "type": "object",
-      "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"
-        }
-      },
-      "id": "LogEntrySourceLocation"
-    },
-    "ListLogEntriesResponse": {
-      "description": "Result returned from ListLogEntries.",
-      "type": "object",
-      "properties": {
-        "entries": {
-          "description": "A list of log entries.",
-          "type": "array",
-          "items": {
-            "$ref": "LogEntry"
-          }
-        },
-        "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"
-        }
-      },
-      "id": "ListLogEntriesResponse"
-    },
-    "LogLine": {
-      "description": "Application log line emitted while processing a request.",
-      "type": "object",
-      "properties": {
-        "severity": {
-          "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."
-          ],
-          "enum": [
-            "DEFAULT",
-            "DEBUG",
-            "INFO",
-            "NOTICE",
-            "WARNING",
-            "ERROR",
-            "CRITICAL",
-            "ALERT",
-            "EMERGENCY"
-          ],
-          "description": "Severity of this log entry."
-        },
-        "logMessage": {
-          "description": "App-provided log message.",
-          "type": "string"
-        },
-        "sourceLocation": {
-          "description": "Where in the source code this log message was written.",
-          "$ref": "SourceLocation"
-        },
-        "time": {
-          "description": "Approximate time when this log entry was made.",
-          "format": "google-datetime",
-          "type": "string"
-        }
-      },
-      "id": "LogLine"
-    },
-    "ListLogMetricsResponse": {
-      "description": "Result returned from ListLogMetrics.",
-      "type": "object",
-      "properties": {
-        "metrics": {
-          "description": "A list of logs-based metrics.",
-          "type": "array",
-          "items": {
-            "$ref": "LogMetric"
-          }
-        },
-        "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."
-        }
-      },
-      "id": "ListLogMetricsResponse"
+      "id": "ListMonitoredResourceDescriptorsResponse"
     }
   },
-  "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",
+  "icons": {
+    "x32": "http://www.google.com/images/icons/product/search-32.gif",
+    "x16": "http://www.google.com/images/icons/product/search-16.gif"
+  },
   "canonicalName": "Logging",
   "auth": {
     "oauth2": {
@@ -803,25 +812,13 @@
         "logs": {
           "methods": {
             "list": {
-              "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": {
-                  "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"
-                },
-                "parent": {
-                  "required": true,
-                  "type": "string",
-                  "pattern": "^billingAccounts/[^/]+$",
-                  "location": "path",
-                  "description": "Required. The resource name that owns the logs:\n\"projects/[PROJECT_ID]\"\n\"organizations/[ORGANIZATION_ID]\"\n\"billingAccounts/[BILLING_ACCOUNT_ID]\"\n\"folders/[FOLDER_ID]\"\n"
-                }
+              "description": "Lists the logs in projects, organizations, folders, or billing accounts. Only logs that have entries are listed.",
+              "httpMethod": "GET",
+              "parameterOrder": [
+                "parent"
+              ],
+              "response": {
+                "$ref": "ListLogsResponse"
               },
               "scopes": [
                 "https://www.googleapis.com/auth/cloud-platform",
@@ -829,26 +826,42 @@
                 "https://www.googleapis.com/auth/logging.admin",
                 "https://www.googleapis.com/auth/logging.read"
               ],
+              "parameters": {
+                "parent": {
+                  "location": "path",
+                  "description": "Required. The resource name that owns the logs:\n\"projects/[PROJECT_ID]\"\n\"organizations/[ORGANIZATION_ID]\"\n\"billingAccounts/[BILLING_ACCOUNT_ID]\"\n\"folders/[FOLDER_ID]\"\n",
+                  "required": true,
+                  "type": "string",
+                  "pattern": "^billingAccounts/[^/]+$"
+                },
+                "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"
+                }
+              },
               "flatPath": "v2/billingAccounts/{billingAccountsId}/logs",
               "id": "logging.billingAccounts.logs.list",
-              "path": "v2/{+parent}/logs",
-              "description": "Lists the logs in projects, organizations, folders, or billing accounts. Only logs that have entries are listed.",
-              "httpMethod": "GET",
-              "response": {
-                "$ref": "ListLogsResponse"
-              },
-              "parameterOrder": [
-                "parent"
-              ]
+              "path": "v2/{+parent}/logs"
             },
             "delete": {
-              "httpMethod": "DELETE",
-              "parameterOrder": [
-                "logName"
-              ],
               "response": {
                 "$ref": "Empty"
               },
+              "parameterOrder": [
+                "logName"
+              ],
+              "httpMethod": "DELETE",
+              "scopes": [
+                "https://www.googleapis.com/auth/cloud-platform",
+                "https://www.googleapis.com/auth/logging.admin"
+              ],
               "parameters": {
                 "logName": {
                   "location": "path",
@@ -858,22 +871,391 @@
                   "pattern": "^billingAccounts/[^/]+/logs/[^/]+$"
                 }
               },
-              "scopes": [
-                "https://www.googleapis.com/auth/cloud-platform",
-                "https://www.googleapis.com/auth/logging.admin"
-              ],
               "flatPath": "v2/billingAccounts/{billingAccountsId}/logs/{logsId}",
-              "id": "logging.billingAccounts.logs.delete",
               "path": "v2/{+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."
             }
           }
         },
         "sinks": {
           "methods": {
-            "delete": {
+            "list": {
+              "response": {
+                "$ref": "ListSinksResponse"
+              },
+              "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"
+              ],
+              "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."
+                },
+                "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"
+                },
+                "parent": {
+                  "location": "path",
+                  "description": "Required. The parent resource whose sinks are to be listed:\n\"projects/[PROJECT_ID]\"\n\"organizations/[ORGANIZATION_ID]\"\n\"billingAccounts/[BILLING_ACCOUNT_ID]\"\n\"folders/[FOLDER_ID]\"\n",
+                  "required": true,
+                  "type": "string",
+                  "pattern": "^billingAccounts/[^/]+$"
+                }
+              },
+              "flatPath": "v2/billingAccounts/{billingAccountsId}/sinks",
+              "path": "v2/{+parent}/sinks",
+              "id": "logging.billingAccounts.sinks.list",
+              "description": "Lists sinks."
+            },
+            "get": {
+              "httpMethod": "GET",
+              "parameterOrder": [
+                "sinkName"
+              ],
+              "response": {
+                "$ref": "LogSink"
+              },
+              "parameters": {
+                "sinkName": {
+                  "location": "path",
+                  "description": "Required. The resource name of the sink:\n\"projects/[PROJECT_ID]/sinks/[SINK_ID]\"\n\"organizations/[ORGANIZATION_ID]/sinks/[SINK_ID]\"\n\"billingAccounts/[BILLING_ACCOUNT_ID]/sinks/[SINK_ID]\"\n\"folders/[FOLDER_ID]/sinks/[SINK_ID]\"\nExample: \"projects/my-project-id/sinks/my-sink-id\".",
+                  "required": true,
+                  "type": "string",
+                  "pattern": "^billingAccounts/[^/]+/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"
+              ],
               "flatPath": "v2/billingAccounts/{billingAccountsId}/sinks/{sinksId}",
-              "id": "logging.billingAccounts.sinks.delete",
+              "id": "logging.billingAccounts.sinks.get",
+              "path": "v2/{+sinkName}",
+              "description": "Gets a sink."
+            },
+            "update": {
+              "request": {
+                "$ref": "LogSink"
+              },
+              "description": "Updates a sink. If the named sink doesn't exist, then this method is identical to sinks.create. If the named sink does exist, then this method replaces the following fields in the existing sink with values from the new sink: destination, filter, output_version_format, start_time, and end_time. The updated filter might also have a new writer_identity; see the unique_writer_identity field.",
+              "response": {
+                "$ref": "LogSink"
+              },
+              "parameterOrder": [
+                "sinkName"
+              ],
+              "httpMethod": "PUT",
+              "parameters": {
+                "sinkName": {
+                  "location": "path",
+                  "description": "Required. The full resource name of the sink to update, including the parent resource and the sink identifier:\n\"projects/[PROJECT_ID]/sinks/[SINK_ID]\"\n\"organizations/[ORGANIZATION_ID]/sinks/[SINK_ID]\"\n\"billingAccounts/[BILLING_ACCOUNT_ID]/sinks/[SINK_ID]\"\n\"folders/[FOLDER_ID]/sinks/[SINK_ID]\"\nExample: \"projects/my-project-id/sinks/my-sink-id\".",
+                  "required": true,
+                  "type": "string",
+                  "pattern": "^billingAccounts/[^/]+/sinks/[^/]+$"
+                },
+                "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:\nIf 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.\nIf the old value is false and the new value is true, then writer_identity is changed to a unique service account.\nIt is an error if the old value is true and the new value is false."
+                }
+              },
+              "scopes": [
+                "https://www.googleapis.com/auth/cloud-platform",
+                "https://www.googleapis.com/auth/logging.admin"
+              ],
+              "flatPath": "v2/billingAccounts/{billingAccountsId}/sinks/{sinksId}",
+              "path": "v2/{+sinkName}",
+              "id": "logging.billingAccounts.sinks.update"
+            },
+            "create": {
+              "response": {
+                "$ref": "LogSink"
+              },
+              "parameterOrder": [
+                "parent"
+              ],
+              "httpMethod": "POST",
+              "scopes": [
+                "https://www.googleapis.com/auth/cloud-platform",
+                "https://www.googleapis.com/auth/logging.admin"
+              ],
+              "parameters": {
+                "parent": {
+                  "required": true,
+                  "type": "string",
+                  "pattern": "^billingAccounts/[^/]+$",
+                  "location": "path",
+                  "description": "Required. The resource in which to create the sink:\n\"projects/[PROJECT_ID]\"\n\"organizations/[ORGANIZATION_ID]\"\n\"billingAccounts/[BILLING_ACCOUNT_ID]\"\n\"folders/[FOLDER_ID]\"\nExamples: \"projects/my-logging-project\", \"organizations/123456789\"."
+                },
+                "uniqueWriterIdentity": {
+                  "type": "boolean",
+                  "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 Stackdriver 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."
+                }
+              },
+              "flatPath": "v2/billingAccounts/{billingAccountsId}/sinks",
+              "path": "v2/{+parent}/sinks",
+              "id": "logging.billingAccounts.sinks.create",
+              "description": "Creates a sink that exports specified log entries to a destination. The export of newly-ingested log entries begins immediately, unless the current time is outside the sink's start and end times or 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"
+              }
+            },
+            "delete": {
+              "description": "Deletes a sink. If the sink has a unique writer_identity, then that service account is also deleted.",
+              "response": {
+                "$ref": "Empty"
+              },
+              "parameterOrder": [
+                "sinkName"
+              ],
+              "httpMethod": "DELETE",
+              "parameters": {
+                "sinkName": {
+                  "location": "path",
+                  "description": "Required. The full resource name of the sink to delete, including the parent resource and the sink identifier:\n\"projects/[PROJECT_ID]/sinks/[SINK_ID]\"\n\"organizations/[ORGANIZATION_ID]/sinks/[SINK_ID]\"\n\"billingAccounts/[BILLING_ACCOUNT_ID]/sinks/[SINK_ID]\"\n\"folders/[FOLDER_ID]/sinks/[SINK_ID]\"\nExample: \"projects/my-project-id/sinks/my-sink-id\".",
+                  "required": true,
+                  "type": "string",
+                  "pattern": "^billingAccounts/[^/]+/sinks/[^/]+$"
+                }
+              },
+              "scopes": [
+                "https://www.googleapis.com/auth/cloud-platform",
+                "https://www.googleapis.com/auth/logging.admin"
+              ],
+              "flatPath": "v2/billingAccounts/{billingAccountsId}/sinks/{sinksId}",
+              "path": "v2/{+sinkName}",
+              "id": "logging.billingAccounts.sinks.delete"
+            }
+          }
+        }
+      }
+    },
+    "folders": {
+      "resources": {
+        "logs": {
+          "methods": {
+            "list": {
+              "httpMethod": "GET",
+              "parameterOrder": [
+                "parent"
+              ],
+              "response": {
+                "$ref": "ListLogsResponse"
+              },
+              "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."
+                },
+                "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"
+                },
+                "parent": {
+                  "location": "path",
+                  "description": "Required. The resource name that owns the logs:\n\"projects/[PROJECT_ID]\"\n\"organizations/[ORGANIZATION_ID]\"\n\"billingAccounts/[BILLING_ACCOUNT_ID]\"\n\"folders/[FOLDER_ID]\"\n",
+                  "required": true,
+                  "type": "string",
+                  "pattern": "^folders/[^/]+$"
+                }
+              },
+              "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}/logs",
+              "id": "logging.folders.logs.list",
+              "path": "v2/{+parent}/logs",
+              "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.",
+              "httpMethod": "DELETE",
+              "parameterOrder": [
+                "logName"
+              ],
+              "response": {
+                "$ref": "Empty"
+              },
+              "parameters": {
+                "logName": {
+                  "required": true,
+                  "type": "string",
+                  "pattern": "^folders/[^/]+/logs/[^/]+$",
+                  "location": "path",
+                  "description": "Required. The resource name of the log to delete:\n\"projects/[PROJECT_ID]/logs/[LOG_ID]\"\n\"organizations/[ORGANIZATION_ID]/logs/[LOG_ID]\"\n\"billingAccounts/[BILLING_ACCOUNT_ID]/logs/[LOG_ID]\"\n\"folders/[FOLDER_ID]/logs/[LOG_ID]\"\n[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."
+                }
+              },
+              "scopes": [
+                "https://www.googleapis.com/auth/cloud-platform",
+                "https://www.googleapis.com/auth/logging.admin"
+              ],
+              "flatPath": "v2/folders/{foldersId}/logs/{logsId}",
+              "id": "logging.folders.logs.delete",
+              "path": "v2/{+logName}"
+            }
+          }
+        },
+        "sinks": {
+          "methods": {
+            "list": {
+              "description": "Lists sinks.",
+              "httpMethod": "GET",
+              "parameterOrder": [
+                "parent"
+              ],
+              "response": {
+                "$ref": "ListSinksResponse"
+              },
+              "parameters": {
+                "parent": {
+                  "required": true,
+                  "type": "string",
+                  "pattern": "^folders/[^/]+$",
+                  "location": "path",
+                  "description": "Required. The parent resource whose sinks are to be listed:\n\"projects/[PROJECT_ID]\"\n\"organizations/[ORGANIZATION_ID]\"\n\"billingAccounts/[BILLING_ACCOUNT_ID]\"\n\"folders/[FOLDER_ID]\"\n"
+                },
+                "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.",
+                  "format": "int32",
+                  "type": "integer"
+                }
+              },
+              "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}/sinks",
+              "id": "logging.folders.sinks.list",
+              "path": "v2/{+parent}/sinks"
+            },
+            "get": {
+              "description": "Gets a sink.",
+              "response": {
+                "$ref": "LogSink"
+              },
+              "parameterOrder": [
+                "sinkName"
+              ],
+              "httpMethod": "GET",
+              "parameters": {
+                "sinkName": {
+                  "required": true,
+                  "type": "string",
+                  "pattern": "^folders/[^/]+/sinks/[^/]+$",
+                  "location": "path",
+                  "description": "Required. The resource name of the sink:\n\"projects/[PROJECT_ID]/sinks/[SINK_ID]\"\n\"organizations/[ORGANIZATION_ID]/sinks/[SINK_ID]\"\n\"billingAccounts/[BILLING_ACCOUNT_ID]/sinks/[SINK_ID]\"\n\"folders/[FOLDER_ID]/sinks/[SINK_ID]\"\nExample: \"projects/my-project-id/sinks/my-sink-id\"."
+                }
+              },
+              "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}/sinks/{sinksId}",
+              "path": "v2/{+sinkName}",
+              "id": "logging.folders.sinks.get"
+            },
+            "update": {
+              "httpMethod": "PUT",
+              "parameterOrder": [
+                "sinkName"
+              ],
+              "response": {
+                "$ref": "LogSink"
+              },
+              "parameters": {
+                "sinkName": {
+                  "required": true,
+                  "type": "string",
+                  "pattern": "^folders/[^/]+/sinks/[^/]+$",
+                  "location": "path",
+                  "description": "Required. The full resource name of the sink to update, including the parent resource and the sink identifier:\n\"projects/[PROJECT_ID]/sinks/[SINK_ID]\"\n\"organizations/[ORGANIZATION_ID]/sinks/[SINK_ID]\"\n\"billingAccounts/[BILLING_ACCOUNT_ID]/sinks/[SINK_ID]\"\n\"folders/[FOLDER_ID]/sinks/[SINK_ID]\"\nExample: \"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:\nIf 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.\nIf the old value is false and the new value is true, then writer_identity is changed to a unique service account.\nIt is an error if the old value is true and the new value is false."
+                }
+              },
+              "scopes": [
+                "https://www.googleapis.com/auth/cloud-platform",
+                "https://www.googleapis.com/auth/logging.admin"
+              ],
+              "flatPath": "v2/folders/{foldersId}/sinks/{sinksId}",
+              "id": "logging.folders.sinks.update",
+              "path": "v2/{+sinkName}",
+              "request": {
+                "$ref": "LogSink"
+              },
+              "description": "Updates a sink. If the named sink doesn't exist, then this method is identical to sinks.create. If the named sink does exist, then this method replaces the following fields in the existing sink with values from the new sink: destination, filter, output_version_format, start_time, and end_time. The updated filter might also have a new writer_identity; see the unique_writer_identity field."
+            },
+            "create": {
+              "response": {
+                "$ref": "LogSink"
+              },
+              "parameterOrder": [
+                "parent"
+              ],
+              "httpMethod": "POST",
+              "scopes": [
+                "https://www.googleapis.com/auth/cloud-platform",
+                "https://www.googleapis.com/auth/logging.admin"
+              ],
+              "parameters": {
+                "parent": {
+                  "location": "path",
+                  "description": "Required. The resource in which to create the sink:\n\"projects/[PROJECT_ID]\"\n\"organizations/[ORGANIZATION_ID]\"\n\"billingAccounts/[BILLING_ACCOUNT_ID]\"\n\"folders/[FOLDER_ID]\"\nExamples: \"projects/my-logging-project\", \"organizations/123456789\".",
+                  "required": true,
+                  "type": "string",
+                  "pattern": "^folders/[^/]+$"
+                },
+                "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 Stackdriver 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/folders/{foldersId}/sinks",
+              "path": "v2/{+parent}/sinks",
+              "id": "logging.folders.sinks.create",
+              "description": "Creates a sink that exports specified log entries to a destination. The export of newly-ingested log entries begins immediately, unless the current time is outside the sink's start and end times or 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"
+              }
+            },
+            "delete": {
+              "flatPath": "v2/folders/{foldersId}/sinks/{sinksId}",
+              "id": "logging.folders.sinks.delete",
               "path": "v2/{+sinkName}",
               "description": "Deletes a sink. If the sink has a unique writer_identity, then that service account is also deleted.",
               "httpMethod": "DELETE",
@@ -889,385 +1271,12 @@
               ],
               "parameters": {
                 "sinkName": {
-                  "description": "Required. The full resource name of the sink to delete, including the parent resource and the sink identifier:\n\"projects/[PROJECT_ID]/sinks/[SINK_ID]\"\n\"organizations/[ORGANIZATION_ID]/sinks/[SINK_ID]\"\n\"billingAccounts/[BILLING_ACCOUNT_ID]/sinks/[SINK_ID]\"\n\"folders/[FOLDER_ID]/sinks/[SINK_ID]\"\nExample: \"projects/my-project-id/sinks/my-sink-id\".",
                   "required": true,
                   "type": "string",
-                  "pattern": "^billingAccounts/[^/]+/sinks/[^/]+$",
-                  "location": "path"
-                }
-              }
-            },
-            "list": {
-              "description": "Lists sinks.",
-              "httpMethod": "GET",
-              "parameterOrder": [
-                "parent"
-              ],
-              "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"
-              ],
-              "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"
-                },
-                "parent": {
-                  "description": "Required. The parent resource whose sinks are to be listed:\n\"projects/[PROJECT_ID]\"\n\"organizations/[ORGANIZATION_ID]\"\n\"billingAccounts/[BILLING_ACCOUNT_ID]\"\n\"folders/[FOLDER_ID]\"\n",
-                  "required": true,
-                  "type": "string",
-                  "pattern": "^billingAccounts/[^/]+$",
-                  "location": "path"
-                },
-                "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"
-                }
-              },
-              "flatPath": "v2/billingAccounts/{billingAccountsId}/sinks",
-              "id": "logging.billingAccounts.sinks.list",
-              "path": "v2/{+parent}/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": {
-                  "location": "path",
-                  "description": "Required. The resource name of the sink:\n\"projects/[PROJECT_ID]/sinks/[SINK_ID]\"\n\"organizations/[ORGANIZATION_ID]/sinks/[SINK_ID]\"\n\"billingAccounts/[BILLING_ACCOUNT_ID]/sinks/[SINK_ID]\"\n\"folders/[FOLDER_ID]/sinks/[SINK_ID]\"\nExample: \"projects/my-project-id/sinks/my-sink-id\".",
-                  "required": true,
-                  "type": "string",
-                  "pattern": "^billingAccounts/[^/]+/sinks/[^/]+$"
-                }
-              },
-              "flatPath": "v2/billingAccounts/{billingAccountsId}/sinks/{sinksId}",
-              "id": "logging.billingAccounts.sinks.get",
-              "path": "v2/{+sinkName}",
-              "description": "Gets a sink.",
-              "httpMethod": "GET",
-              "response": {
-                "$ref": "LogSink"
-              },
-              "parameterOrder": [
-                "sinkName"
-              ]
-            },
-            "update": {
-              "response": {
-                "$ref": "LogSink"
-              },
-              "parameterOrder": [
-                "sinkName"
-              ],
-              "httpMethod": "PUT",
-              "scopes": [
-                "https://www.googleapis.com/auth/cloud-platform",
-                "https://www.googleapis.com/auth/logging.admin"
-              ],
-              "parameters": {
-                "sinkName": {
-                  "required": true,
-                  "type": "string",
-                  "pattern": "^billingAccounts/[^/]+/sinks/[^/]+$",
-                  "location": "path",
-                  "description": "Required. The full resource name of the sink to update, including the parent resource and the sink identifier:\n\"projects/[PROJECT_ID]/sinks/[SINK_ID]\"\n\"organizations/[ORGANIZATION_ID]/sinks/[SINK_ID]\"\n\"billingAccounts/[BILLING_ACCOUNT_ID]/sinks/[SINK_ID]\"\n\"folders/[FOLDER_ID]/sinks/[SINK_ID]\"\nExample: \"projects/my-project-id/sinks/my-sink-id\"."
-                },
-                "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:\nIf 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.\nIf the old value is false and the new value is true, then writer_identity is changed to a unique service account.\nIt is an error if the old value is true and the new value is false.",
-                  "type": "boolean"
-                }
-              },
-              "flatPath": "v2/billingAccounts/{billingAccountsId}/sinks/{sinksId}",
-              "path": "v2/{+sinkName}",
-              "id": "logging.billingAccounts.sinks.update",
-              "description": "Updates a sink. If the named sink doesn't exist, then this method is identical to sinks.create. If the named sink does exist, then this method replaces the following fields in the existing sink with values from the new sink: destination, filter, output_version_format, start_time, and end_time. The updated filter might also have a new writer_identity; see the unique_writer_identity field.",
-              "request": {
-                "$ref": "LogSink"
-              }
-            },
-            "create": {
-              "path": "v2/{+parent}/sinks",
-              "id": "logging.billingAccounts.sinks.create",
-              "description": "Creates a sink that exports specified log entries to a destination. The export of newly-ingested log entries begins immediately, unless the current time is outside the sink's start and end times or 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"
-              },
-              "response": {
-                "$ref": "LogSink"
-              },
-              "parameterOrder": [
-                "parent"
-              ],
-              "httpMethod": "POST",
-              "scopes": [
-                "https://www.googleapis.com/auth/cloud-platform",
-                "https://www.googleapis.com/auth/logging.admin"
-              ],
-              "parameters": {
-                "parent": {
-                  "description": "Required. The resource in which to create the sink:\n\"projects/[PROJECT_ID]\"\n\"organizations/[ORGANIZATION_ID]\"\n\"billingAccounts/[BILLING_ACCOUNT_ID]\"\n\"folders/[FOLDER_ID]\"\nExamples: \"projects/my-logging-project\", \"organizations/123456789\".",
-                  "required": true,
-                  "type": "string",
-                  "pattern": "^billingAccounts/[^/]+$",
-                  "location": "path"
-                },
-                "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 Stackdriver 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/billingAccounts/{billingAccountsId}/sinks"
-            }
-          }
-        }
-      }
-    },
-    "folders": {
-      "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.",
-              "response": {
-                "$ref": "Empty"
-              },
-              "parameterOrder": [
-                "logName"
-              ],
-              "httpMethod": "DELETE",
-              "scopes": [
-                "https://www.googleapis.com/auth/cloud-platform",
-                "https://www.googleapis.com/auth/logging.admin"
-              ],
-              "parameters": {
-                "logName": {
-                  "pattern": "^folders/[^/]+/logs/[^/]+$",
-                  "location": "path",
-                  "description": "Required. The resource name of the log to delete:\n\"projects/[PROJECT_ID]/logs/[LOG_ID]\"\n\"organizations/[ORGANIZATION_ID]/logs/[LOG_ID]\"\n\"billingAccounts/[BILLING_ACCOUNT_ID]/logs/[LOG_ID]\"\n\"folders/[FOLDER_ID]/logs/[LOG_ID]\"\n[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"
-                }
-              },
-              "flatPath": "v2/folders/{foldersId}/logs/{logsId}",
-              "path": "v2/{+logName}",
-              "id": "logging.folders.logs.delete"
-            },
-            "list": {
-              "httpMethod": "GET",
-              "response": {
-                "$ref": "ListLogsResponse"
-              },
-              "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"
-              ],
-              "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": {
-                  "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",
-                  "location": "query"
-                },
-                "parent": {
-                  "pattern": "^folders/[^/]+$",
-                  "location": "path",
-                  "description": "Required. The resource name that owns the logs:\n\"projects/[PROJECT_ID]\"\n\"organizations/[ORGANIZATION_ID]\"\n\"billingAccounts/[BILLING_ACCOUNT_ID]\"\n\"folders/[FOLDER_ID]\"\n",
-                  "required": true,
-                  "type": "string"
-                }
-              },
-              "flatPath": "v2/folders/{foldersId}/logs",
-              "id": "logging.folders.logs.list",
-              "path": "v2/{+parent}/logs",
-              "description": "Lists the logs in projects, organizations, folders, or billing accounts. Only logs that have entries are listed."
-            }
-          }
-        },
-        "sinks": {
-          "methods": {
-            "create": {
-              "response": {
-                "$ref": "LogSink"
-              },
-              "parameterOrder": [
-                "parent"
-              ],
-              "httpMethod": "POST",
-              "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 Stackdriver 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": {
-                  "location": "path",
-                  "description": "Required. The resource in which to create the sink:\n\"projects/[PROJECT_ID]\"\n\"organizations/[ORGANIZATION_ID]\"\n\"billingAccounts/[BILLING_ACCOUNT_ID]\"\n\"folders/[FOLDER_ID]\"\nExamples: \"projects/my-logging-project\", \"organizations/123456789\".",
-                  "required": true,
-                  "type": "string",
-                  "pattern": "^folders/[^/]+$"
-                }
-              },
-              "scopes": [
-                "https://www.googleapis.com/auth/cloud-platform",
-                "https://www.googleapis.com/auth/logging.admin"
-              ],
-              "flatPath": "v2/folders/{foldersId}/sinks",
-              "path": "v2/{+parent}/sinks",
-              "id": "logging.folders.sinks.create",
-              "request": {
-                "$ref": "LogSink"
-              },
-              "description": "Creates a sink that exports specified log entries to a destination. The export of newly-ingested log entries begins immediately, unless the current time is outside the sink's start and end times or 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."
-            },
-            "delete": {
-              "httpMethod": "DELETE",
-              "parameterOrder": [
-                "sinkName"
-              ],
-              "response": {
-                "$ref": "Empty"
-              },
-              "parameters": {
-                "sinkName": {
-                  "location": "path",
-                  "description": "Required. The full resource name of the sink to delete, including the parent resource and the sink identifier:\n\"projects/[PROJECT_ID]/sinks/[SINK_ID]\"\n\"organizations/[ORGANIZATION_ID]/sinks/[SINK_ID]\"\n\"billingAccounts/[BILLING_ACCOUNT_ID]/sinks/[SINK_ID]\"\n\"folders/[FOLDER_ID]/sinks/[SINK_ID]\"\nExample: \"projects/my-project-id/sinks/my-sink-id\".",
-                  "required": true,
-                  "type": "string",
-                  "pattern": "^folders/[^/]+/sinks/[^/]+$"
-                }
-              },
-              "scopes": [
-                "https://www.googleapis.com/auth/cloud-platform",
-                "https://www.googleapis.com/auth/logging.admin"
-              ],
-              "flatPath": "v2/folders/{foldersId}/sinks/{sinksId}",
-              "id": "logging.folders.sinks.delete",
-              "path": "v2/{+sinkName}",
-              "description": "Deletes a sink. If the sink has a unique writer_identity, then that service account is also deleted."
-            },
-            "list": {
-              "description": "Lists sinks.",
-              "response": {
-                "$ref": "ListSinksResponse"
-              },
-              "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"
-              ],
-              "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",
-                  "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": {
-                  "pattern": "^folders/[^/]+$",
-                  "location": "path",
-                  "description": "Required. The parent resource whose sinks are to be listed:\n\"projects/[PROJECT_ID]\"\n\"organizations/[ORGANIZATION_ID]\"\n\"billingAccounts/[BILLING_ACCOUNT_ID]\"\n\"folders/[FOLDER_ID]\"\n",
-                  "required": true,
-                  "type": "string"
-                }
-              },
-              "flatPath": "v2/folders/{foldersId}/sinks",
-              "path": "v2/{+parent}/sinks",
-              "id": "logging.folders.sinks.list"
-            },
-            "get": {
-              "parameterOrder": [
-                "sinkName"
-              ],
-              "httpMethod": "GET",
-              "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"
-              ],
-              "parameters": {
-                "sinkName": {
                   "pattern": "^folders/[^/]+/sinks/[^/]+$",
                   "location": "path",
-                  "description": "Required. The resource name of the sink:\n\"projects/[PROJECT_ID]/sinks/[SINK_ID]\"\n\"organizations/[ORGANIZATION_ID]/sinks/[SINK_ID]\"\n\"billingAccounts/[BILLING_ACCOUNT_ID]/sinks/[SINK_ID]\"\n\"folders/[FOLDER_ID]/sinks/[SINK_ID]\"\nExample: \"projects/my-project-id/sinks/my-sink-id\".",
-                  "required": true,
-                  "type": "string"
+                  "description": "Required. The full resource name of the sink to delete, including the parent resource and the sink identifier:\n\"projects/[PROJECT_ID]/sinks/[SINK_ID]\"\n\"organizations/[ORGANIZATION_ID]/sinks/[SINK_ID]\"\n\"billingAccounts/[BILLING_ACCOUNT_ID]/sinks/[SINK_ID]\"\n\"folders/[FOLDER_ID]/sinks/[SINK_ID]\"\nExample: \"projects/my-project-id/sinks/my-sink-id\"."
                 }
-              },
-              "flatPath": "v2/folders/{foldersId}/sinks/{sinksId}",
-              "path": "v2/{+sinkName}",
-              "id": "logging.folders.sinks.get",
-              "description": "Gets a sink."
-            },
-            "update": {
-              "parameters": {
-                "sinkName": {
-                  "location": "path",
-                  "description": "Required. The full resource name of the sink to update, including the parent resource and the sink identifier:\n\"projects/[PROJECT_ID]/sinks/[SINK_ID]\"\n\"organizations/[ORGANIZATION_ID]/sinks/[SINK_ID]\"\n\"billingAccounts/[BILLING_ACCOUNT_ID]/sinks/[SINK_ID]\"\n\"folders/[FOLDER_ID]/sinks/[SINK_ID]\"\nExample: \"projects/my-project-id/sinks/my-sink-id\".",
-                  "required": true,
-                  "type": "string",
-                  "pattern": "^folders/[^/]+/sinks/[^/]+$"
-                },
-                "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:\nIf 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.\nIf the old value is false and the new value is true, then writer_identity is changed to a unique service account.\nIt is an error if the old value is true and the new value is false.",
-                  "type": "boolean"
-                }
-              },
-              "scopes": [
-                "https://www.googleapis.com/auth/cloud-platform",
-                "https://www.googleapis.com/auth/logging.admin"
-              ],
-              "flatPath": "v2/folders/{foldersId}/sinks/{sinksId}",
-              "id": "logging.folders.sinks.update",
-              "path": "v2/{+sinkName}",
-              "request": {
-                "$ref": "LogSink"
-              },
-              "description": "Updates a sink. If the named sink doesn't exist, then this method is identical to sinks.create. If the named sink does exist, then this method replaces the following fields in the existing sink with values from the new sink: destination, filter, output_version_format, start_time, and end_time. The updated filter might also have a new writer_identity; see the unique_writer_identity field.",
-              "httpMethod": "PUT",
-              "parameterOrder": [
-                "sinkName"
-              ],
-              "response": {
-                "$ref": "LogSink"
               }
             }
           }
@@ -1277,34 +1286,34 @@
     "monitoredResourceDescriptors": {
       "methods": {
         "list": {
+          "flatPath": "v2/monitoredResourceDescriptors",
+          "id": "logging.monitoredResourceDescriptors.list",
+          "path": "v2/monitoredResourceDescriptors",
+          "description": "Lists the descriptors for monitored resource types used by Stackdriver Logging.",
           "httpMethod": "GET",
           "parameterOrder": [],
           "response": {
             "$ref": "ListMonitoredResourceDescriptorsResponse"
           },
-          "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",
-              "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"
-            }
-          },
           "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/monitoredResourceDescriptors",
-          "id": "logging.monitoredResourceDescriptors.list",
-          "path": "v2/monitoredResourceDescriptors",
-          "description": "Lists the descriptors for monitored resource types used by Stackdriver Logging."
+          "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"
+            }
+          }
         }
       }
     },
@@ -1312,8 +1321,46 @@
       "resources": {
         "logs": {
           "methods": {
+            "list": {
+              "description": "Lists the logs in projects, organizations, folders, or billing accounts. Only logs that have entries are listed.",
+              "parameterOrder": [
+                "parent"
+              ],
+              "response": {
+                "$ref": "ListLogsResponse"
+              },
+              "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": {
+                "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": {
+                  "location": "path",
+                  "description": "Required. The resource name that owns the logs:\n\"projects/[PROJECT_ID]\"\n\"organizations/[ORGANIZATION_ID]\"\n\"billingAccounts/[BILLING_ACCOUNT_ID]\"\n\"folders/[FOLDER_ID]\"\n",
+                  "required": true,
+                  "type": "string",
+                  "pattern": "^organizations/[^/]+$"
+                }
+              },
+              "flatPath": "v2/organizations/{organizationsId}/logs",
+              "path": "v2/{+parent}/logs",
+              "id": "logging.organizations.logs.list"
+            },
             "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.",
               "response": {
                 "$ref": "Empty"
               },
@@ -1327,55 +1374,17 @@
               ],
               "parameters": {
                 "logName": {
+                  "required": true,
+                  "type": "string",
                   "pattern": "^organizations/[^/]+/logs/[^/]+$",
                   "location": "path",
-                  "description": "Required. The resource name of the log to delete:\n\"projects/[PROJECT_ID]/logs/[LOG_ID]\"\n\"organizations/[ORGANIZATION_ID]/logs/[LOG_ID]\"\n\"billingAccounts/[BILLING_ACCOUNT_ID]/logs/[LOG_ID]\"\n\"folders/[FOLDER_ID]/logs/[LOG_ID]\"\n[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"
+                  "description": "Required. The resource name of the log to delete:\n\"projects/[PROJECT_ID]/logs/[LOG_ID]\"\n\"organizations/[ORGANIZATION_ID]/logs/[LOG_ID]\"\n\"billingAccounts/[BILLING_ACCOUNT_ID]/logs/[LOG_ID]\"\n\"folders/[FOLDER_ID]/logs/[LOG_ID]\"\n[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."
                 }
               },
               "flatPath": "v2/organizations/{organizationsId}/logs/{logsId}",
               "path": "v2/{+logName}",
-              "id": "logging.organizations.logs.delete"
-            },
-            "list": {
-              "description": "Lists the logs in projects, organizations, folders, or billing accounts. Only logs that have entries are listed.",
-              "parameterOrder": [
-                "parent"
-              ],
-              "response": {
-                "$ref": "ListLogsResponse"
-              },
-              "httpMethod": "GET",
-              "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.",
-                  "format": "int32",
-                  "type": "integer",
-                  "location": "query"
-                },
-                "parent": {
-                  "required": true,
-                  "type": "string",
-                  "pattern": "^organizations/[^/]+$",
-                  "location": "path",
-                  "description": "Required. The resource name that owns the logs:\n\"projects/[PROJECT_ID]\"\n\"organizations/[ORGANIZATION_ID]\"\n\"billingAccounts/[BILLING_ACCOUNT_ID]\"\n\"folders/[FOLDER_ID]\"\n"
-                }
-              },
-              "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}/logs",
-              "id": "logging.organizations.logs.list",
-              "path": "v2/{+parent}/logs"
+              "id": "logging.organizations.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."
             }
           }
         },
@@ -1389,64 +1398,68 @@
                 "sinkName"
               ],
               "httpMethod": "DELETE",
-              "parameters": {
-                "sinkName": {
-                  "description": "Required. The full resource name of the sink to delete, including the parent resource and the sink identifier:\n\"projects/[PROJECT_ID]/sinks/[SINK_ID]\"\n\"organizations/[ORGANIZATION_ID]/sinks/[SINK_ID]\"\n\"billingAccounts/[BILLING_ACCOUNT_ID]/sinks/[SINK_ID]\"\n\"folders/[FOLDER_ID]/sinks/[SINK_ID]\"\nExample: \"projects/my-project-id/sinks/my-sink-id\".",
-                  "required": true,
-                  "type": "string",
-                  "pattern": "^organizations/[^/]+/sinks/[^/]+$",
-                  "location": "path"
-                }
-              },
               "scopes": [
                 "https://www.googleapis.com/auth/cloud-platform",
                 "https://www.googleapis.com/auth/logging.admin"
               ],
+              "parameters": {
+                "sinkName": {
+                  "location": "path",
+                  "description": "Required. The full resource name of the sink to delete, including the parent resource and the sink identifier:\n\"projects/[PROJECT_ID]/sinks/[SINK_ID]\"\n\"organizations/[ORGANIZATION_ID]/sinks/[SINK_ID]\"\n\"billingAccounts/[BILLING_ACCOUNT_ID]/sinks/[SINK_ID]\"\n\"folders/[FOLDER_ID]/sinks/[SINK_ID]\"\nExample: \"projects/my-project-id/sinks/my-sink-id\".",
+                  "required": true,
+                  "type": "string",
+                  "pattern": "^organizations/[^/]+/sinks/[^/]+$"
+                }
+              },
               "flatPath": "v2/organizations/{organizationsId}/sinks/{sinksId}",
               "path": "v2/{+sinkName}",
               "id": "logging.organizations.sinks.delete",
               "description": "Deletes a sink. If the sink has a unique writer_identity, then that service account is also deleted."
             },
             "list": {
-              "response": {
-                "$ref": "ListSinksResponse"
-              },
+              "description": "Lists sinks.",
+              "httpMethod": "GET",
               "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"
-              ],
+              "response": {
+                "$ref": "ListSinksResponse"
+              },
               "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."
+                },
+                "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"
+                },
                 "parent": {
                   "location": "path",
                   "description": "Required. The parent resource whose sinks are to be listed:\n\"projects/[PROJECT_ID]\"\n\"organizations/[ORGANIZATION_ID]\"\n\"billingAccounts/[BILLING_ACCOUNT_ID]\"\n\"folders/[FOLDER_ID]\"\n",
                   "required": true,
                   "type": "string",
                   "pattern": "^organizations/[^/]+$"
-                },
-                "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",
-                  "type": "integer",
-                  "location": "query"
                 }
               },
+              "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}/sinks",
-              "path": "v2/{+parent}/sinks",
               "id": "logging.organizations.sinks.list",
-              "description": "Lists sinks."
+              "path": "v2/{+parent}/sinks"
             },
             "get": {
+              "flatPath": "v2/organizations/{organizationsId}/sinks/{sinksId}",
+              "path": "v2/{+sinkName}",
+              "id": "logging.organizations.sinks.get",
+              "description": "Gets a sink.",
               "response": {
                 "$ref": "LogSink"
               },
@@ -1454,31 +1467,23 @@
                 "sinkName"
               ],
               "httpMethod": "GET",
+              "parameters": {
+                "sinkName": {
+                  "location": "path",
+                  "description": "Required. The resource name of the sink:\n\"projects/[PROJECT_ID]/sinks/[SINK_ID]\"\n\"organizations/[ORGANIZATION_ID]/sinks/[SINK_ID]\"\n\"billingAccounts/[BILLING_ACCOUNT_ID]/sinks/[SINK_ID]\"\n\"folders/[FOLDER_ID]/sinks/[SINK_ID]\"\nExample: \"projects/my-project-id/sinks/my-sink-id\".",
+                  "required": true,
+                  "type": "string",
+                  "pattern": "^organizations/[^/]+/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"
-              ],
-              "parameters": {
-                "sinkName": {
-                  "required": true,
-                  "type": "string",
-                  "pattern": "^organizations/[^/]+/sinks/[^/]+$",
-                  "location": "path",
-                  "description": "Required. The resource name of the sink:\n\"projects/[PROJECT_ID]/sinks/[SINK_ID]\"\n\"organizations/[ORGANIZATION_ID]/sinks/[SINK_ID]\"\n\"billingAccounts/[BILLING_ACCOUNT_ID]/sinks/[SINK_ID]\"\n\"folders/[FOLDER_ID]/sinks/[SINK_ID]\"\nExample: \"projects/my-project-id/sinks/my-sink-id\"."
-                }
-              },
-              "flatPath": "v2/organizations/{organizationsId}/sinks/{sinksId}",
-              "path": "v2/{+sinkName}",
-              "id": "logging.organizations.sinks.get",
-              "description": "Gets a sink."
+              ]
             },
             "update": {
-              "description": "Updates a sink. If the named sink doesn't exist, then this method is identical to sinks.create. If the named sink does exist, then this method replaces the following fields in the existing sink with values from the new sink: destination, filter, output_version_format, start_time, and end_time. The updated filter might also have a new writer_identity; see the unique_writer_identity field.",
-              "request": {
-                "$ref": "LogSink"
-              },
               "httpMethod": "PUT",
               "parameterOrder": [
                 "sinkName"
@@ -1492,11 +1497,11 @@
               ],
               "parameters": {
                 "sinkName": {
-                  "description": "Required. The full resource name of the sink to update, including the parent resource and the sink identifier:\n\"projects/[PROJECT_ID]/sinks/[SINK_ID]\"\n\"organizations/[ORGANIZATION_ID]/sinks/[SINK_ID]\"\n\"billingAccounts/[BILLING_ACCOUNT_ID]/sinks/[SINK_ID]\"\n\"folders/[FOLDER_ID]/sinks/[SINK_ID]\"\nExample: \"projects/my-project-id/sinks/my-sink-id\".",
                   "required": true,
                   "type": "string",
                   "pattern": "^organizations/[^/]+/sinks/[^/]+$",
-                  "location": "path"
+                  "location": "path",
+                  "description": "Required. The full resource name of the sink to update, including the parent resource and the sink identifier:\n\"projects/[PROJECT_ID]/sinks/[SINK_ID]\"\n\"organizations/[ORGANIZATION_ID]/sinks/[SINK_ID]\"\n\"billingAccounts/[BILLING_ACCOUNT_ID]/sinks/[SINK_ID]\"\n\"folders/[FOLDER_ID]/sinks/[SINK_ID]\"\nExample: \"projects/my-project-id/sinks/my-sink-id\"."
                 },
                 "uniqueWriterIdentity": {
                   "location": "query",
@@ -1506,13 +1511,13 @@
               },
               "flatPath": "v2/organizations/{organizationsId}/sinks/{sinksId}",
               "id": "logging.organizations.sinks.update",
-              "path": "v2/{+sinkName}"
-            },
-            "create": {
+              "path": "v2/{+sinkName}",
+              "description": "Updates a sink. If the named sink doesn't exist, then this method is identical to sinks.create. If the named sink does exist, then this method replaces the following fields in the existing sink with values from the new sink: destination, filter, output_version_format, start_time, and end_time. The updated filter might also have a new writer_identity; see the unique_writer_identity field.",
               "request": {
                 "$ref": "LogSink"
-              },
-              "description": "Creates a sink that exports specified log entries to a destination. The export of newly-ingested log entries begins immediately, unless the current time is outside the sink's start and end times or 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.",
+              }
+            },
+            "create": {
               "httpMethod": "POST",
               "parameterOrder": [
                 "parent"
@@ -1520,6 +1525,10 @@
               "response": {
                 "$ref": "LogSink"
               },
+              "scopes": [
+                "https://www.googleapis.com/auth/cloud-platform",
+                "https://www.googleapis.com/auth/logging.admin"
+              ],
               "parameters": {
                 "parent": {
                   "location": "path",
@@ -1529,18 +1538,18 @@
                   "pattern": "^organizations/[^/]+$"
                 },
                 "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 Stackdriver 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"
+                  "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 Stackdriver 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."
                 }
               },
-              "scopes": [
-                "https://www.googleapis.com/auth/cloud-platform",
-                "https://www.googleapis.com/auth/logging.admin"
-              ],
               "flatPath": "v2/organizations/{organizationsId}/sinks",
               "id": "logging.organizations.sinks.create",
-              "path": "v2/{+parent}/sinks"
+              "path": "v2/{+parent}/sinks",
+              "description": "Creates a sink that exports specified log entries to a destination. The export of newly-ingested log entries begins immediately, unless the current time is outside the sink's start and end times or 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"
+              }
             }
           }
         }
@@ -1554,22 +1563,29 @@
           },
           "parameterOrder": [],
           "httpMethod": "POST",
+          "parameters": {},
           "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": {},
           "flatPath": "v2/entries:list",
           "path": "v2/entries:list",
           "id": "logging.entries.list",
-          "description": "Lists log entries. Use this method to retrieve log entries from Stackdriver Logging. For ways to export log entries, see Exporting Logs.",
           "request": {
             "$ref": "ListLogEntriesRequest"
-          }
+          },
+          "description": "Lists log entries. Use this method to retrieve log entries from Stackdriver Logging. For ways to export log entries, see Exporting Logs."
         },
         "write": {
+          "flatPath": "v2/entries:write",
+          "path": "v2/entries:write",
+          "id": "logging.entries.write",
+          "request": {
+            "$ref": "WriteLogEntriesRequest"
+          },
+          "description": "Writes log entries to Stackdriver Logging.",
           "response": {
             "$ref": "WriteLogEntriesResponse"
           },
@@ -1580,14 +1596,7 @@
             "https://www.googleapis.com/auth/cloud-platform",
             "https://www.googleapis.com/auth/logging.admin",
             "https://www.googleapis.com/auth/logging.write"
-          ],
-          "flatPath": "v2/entries:write",
-          "path": "v2/entries:write",
-          "id": "logging.entries.write",
-          "request": {
-            "$ref": "WriteLogEntriesRequest"
-          },
-          "description": "Writes log entries to Stackdriver Logging."
+          ]
         }
       }
     },
@@ -1595,34 +1604,22 @@
       "resources": {
         "logs": {
           "methods": {
-            "delete": {
-              "response": {
-                "$ref": "Empty"
-              },
+            "list": {
+              "httpMethod": "GET",
               "parameterOrder": [
-                "logName"
+                "parent"
               ],
-              "httpMethod": "DELETE",
+              "response": {
+                "$ref": "ListLogsResponse"
+              },
               "parameters": {
-                "logName": {
-                  "description": "Required. The resource name of the log to delete:\n\"projects/[PROJECT_ID]/logs/[LOG_ID]\"\n\"organizations/[ORGANIZATION_ID]/logs/[LOG_ID]\"\n\"billingAccounts/[BILLING_ACCOUNT_ID]/logs/[LOG_ID]\"\n\"folders/[FOLDER_ID]/logs/[LOG_ID]\"\n[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.",
+                "parent": {
+                  "location": "path",
+                  "description": "Required. The resource name that owns the logs:\n\"projects/[PROJECT_ID]\"\n\"organizations/[ORGANIZATION_ID]\"\n\"billingAccounts/[BILLING_ACCOUNT_ID]\"\n\"folders/[FOLDER_ID]\"\n",
                   "required": true,
                   "type": "string",
-                  "pattern": "^projects/[^/]+/logs/[^/]+$",
-                  "location": "path"
-                }
-              },
-              "scopes": [
-                "https://www.googleapis.com/auth/cloud-platform",
-                "https://www.googleapis.com/auth/logging.admin"
-              ],
-              "flatPath": "v2/projects/{projectsId}/logs/{logsId}",
-              "path": "v2/{+logName}",
-              "id": "logging.projects.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."
-            },
-            "list": {
-              "parameters": {
+                  "pattern": "^projects/[^/]+$"
+                },
                 "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.",
@@ -1633,13 +1630,6 @@
                   "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": {
-                  "location": "path",
-                  "description": "Required. The resource name that owns the logs:\n\"projects/[PROJECT_ID]\"\n\"organizations/[ORGANIZATION_ID]\"\n\"billingAccounts/[BILLING_ACCOUNT_ID]\"\n\"folders/[FOLDER_ID]\"\n",
-                  "required": true,
-                  "type": "string",
-                  "pattern": "^projects/[^/]+$"
                 }
               },
               "scopes": [
@@ -1649,41 +1639,79 @@
                 "https://www.googleapis.com/auth/logging.read"
               ],
               "flatPath": "v2/projects/{projectsId}/logs",
-              "path": "v2/{+parent}/logs",
               "id": "logging.projects.logs.list",
-              "description": "Lists the logs in projects, organizations, folders, or billing accounts. Only logs that have entries are listed.",
-              "response": {
-                "$ref": "ListLogsResponse"
-              },
+              "path": "v2/{+parent}/logs",
+              "description": "Lists the logs in projects, organizations, folders, or billing accounts. Only logs that have entries are listed."
+            },
+            "delete": {
+              "httpMethod": "DELETE",
               "parameterOrder": [
-                "parent"
+                "logName"
               ],
-              "httpMethod": "GET"
+              "response": {
+                "$ref": "Empty"
+              },
+              "scopes": [
+                "https://www.googleapis.com/auth/cloud-platform",
+                "https://www.googleapis.com/auth/logging.admin"
+              ],
+              "parameters": {
+                "logName": {
+                  "required": true,
+                  "type": "string",
+                  "pattern": "^projects/[^/]+/logs/[^/]+$",
+                  "location": "path",
+                  "description": "Required. The resource name of the log to delete:\n\"projects/[PROJECT_ID]/logs/[LOG_ID]\"\n\"organizations/[ORGANIZATION_ID]/logs/[LOG_ID]\"\n\"billingAccounts/[BILLING_ACCOUNT_ID]/logs/[LOG_ID]\"\n\"folders/[FOLDER_ID]/logs/[LOG_ID]\"\n[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."
+                }
+              },
+              "flatPath": "v2/projects/{projectsId}/logs/{logsId}",
+              "id": "logging.projects.logs.delete",
+              "path": "v2/{+logName}",
+              "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."
             }
           }
         },
         "sinks": {
           "methods": {
+            "delete": {
+              "parameterOrder": [
+                "sinkName"
+              ],
+              "response": {
+                "$ref": "Empty"
+              },
+              "httpMethod": "DELETE",
+              "scopes": [
+                "https://www.googleapis.com/auth/cloud-platform",
+                "https://www.googleapis.com/auth/logging.admin"
+              ],
+              "parameters": {
+                "sinkName": {
+                  "required": true,
+                  "type": "string",
+                  "pattern": "^projects/[^/]+/sinks/[^/]+$",
+                  "location": "path",
+                  "description": "Required. The full resource name of the sink to delete, including the parent resource and the sink identifier:\n\"projects/[PROJECT_ID]/sinks/[SINK_ID]\"\n\"organizations/[ORGANIZATION_ID]/sinks/[SINK_ID]\"\n\"billingAccounts/[BILLING_ACCOUNT_ID]/sinks/[SINK_ID]\"\n\"folders/[FOLDER_ID]/sinks/[SINK_ID]\"\nExample: \"projects/my-project-id/sinks/my-sink-id\"."
+                }
+              },
+              "flatPath": "v2/projects/{projectsId}/sinks/{sinksId}",
+              "path": "v2/{+sinkName}",
+              "id": "logging.projects.sinks.delete",
+              "description": "Deletes a sink. If the sink has a unique writer_identity, then that service account is also deleted."
+            },
             "list": {
-              "description": "Lists sinks.",
-              "httpMethod": "GET",
               "response": {
                 "$ref": "ListSinksResponse"
               },
               "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"
-              ],
+              "httpMethod": "GET",
               "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",
-                  "location": "query"
+                  "type": "string"
                 },
                 "pageSize": {
                   "location": "query",
@@ -1692,19 +1720,25 @@
                   "type": "integer"
                 },
                 "parent": {
+                  "required": true,
+                  "type": "string",
                   "pattern": "^projects/[^/]+$",
                   "location": "path",
-                  "description": "Required. The parent resource whose sinks are to be listed:\n\"projects/[PROJECT_ID]\"\n\"organizations/[ORGANIZATION_ID]\"\n\"billingAccounts/[BILLING_ACCOUNT_ID]\"\n\"folders/[FOLDER_ID]\"\n",
-                  "required": true,
-                  "type": "string"
+                  "description": "Required. The parent resource whose sinks are to be listed:\n\"projects/[PROJECT_ID]\"\n\"organizations/[ORGANIZATION_ID]\"\n\"billingAccounts/[BILLING_ACCOUNT_ID]\"\n\"folders/[FOLDER_ID]\"\n"
                 }
               },
+              "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}/sinks",
+              "path": "v2/{+parent}/sinks",
               "id": "logging.projects.sinks.list",
-              "path": "v2/{+parent}/sinks"
+              "description": "Lists sinks."
             },
             "get": {
-              "description": "Gets a sink.",
               "response": {
                 "$ref": "LogSink"
               },
@@ -1712,12 +1746,6 @@
                 "sinkName"
               ],
               "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": {
                 "sinkName": {
                   "location": "path",
@@ -1727,33 +1755,36 @@
                   "pattern": "^projects/[^/]+/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"
+              ],
               "flatPath": "v2/projects/{projectsId}/sinks/{sinksId}",
               "path": "v2/{+sinkName}",
-              "id": "logging.projects.sinks.get"
+              "id": "logging.projects.sinks.get",
+              "description": "Gets a sink."
             },
             "update": {
-              "description": "Updates a sink. If the named sink doesn't exist, then this method is identical to sinks.create. If the named sink does exist, then this method replaces the following fields in the existing sink with values from the new sink: destination, filter, output_version_format, start_time, and end_time. The updated filter might also have a new writer_identity; see the unique_writer_identity field.",
-              "request": {
-                "$ref": "LogSink"
-              },
-              "response": {
-                "$ref": "LogSink"
-              },
+              "httpMethod": "PUT",
               "parameterOrder": [
                 "sinkName"
               ],
-              "httpMethod": "PUT",
+              "response": {
+                "$ref": "LogSink"
+              },
               "scopes": [
                 "https://www.googleapis.com/auth/cloud-platform",
                 "https://www.googleapis.com/auth/logging.admin"
               ],
               "parameters": {
                 "sinkName": {
-                  "description": "Required. The full resource name of the sink to update, including the parent resource and the sink identifier:\n\"projects/[PROJECT_ID]/sinks/[SINK_ID]\"\n\"organizations/[ORGANIZATION_ID]/sinks/[SINK_ID]\"\n\"billingAccounts/[BILLING_ACCOUNT_ID]/sinks/[SINK_ID]\"\n\"folders/[FOLDER_ID]/sinks/[SINK_ID]\"\nExample: \"projects/my-project-id/sinks/my-sink-id\".",
                   "required": true,
                   "type": "string",
                   "pattern": "^projects/[^/]+/sinks/[^/]+$",
-                  "location": "path"
+                  "location": "path",
+                  "description": "Required. The full resource name of the sink to update, including the parent resource and the sink identifier:\n\"projects/[PROJECT_ID]/sinks/[SINK_ID]\"\n\"organizations/[ORGANIZATION_ID]/sinks/[SINK_ID]\"\n\"billingAccounts/[BILLING_ACCOUNT_ID]/sinks/[SINK_ID]\"\n\"folders/[FOLDER_ID]/sinks/[SINK_ID]\"\nExample: \"projects/my-project-id/sinks/my-sink-id\"."
                 },
                 "uniqueWriterIdentity": {
                   "location": "query",
@@ -1762,74 +1793,56 @@
                 }
               },
               "flatPath": "v2/projects/{projectsId}/sinks/{sinksId}",
+              "id": "logging.projects.sinks.update",
               "path": "v2/{+sinkName}",
-              "id": "logging.projects.sinks.update"
+              "description": "Updates a sink. If the named sink doesn't exist, then this method is identical to sinks.create. If the named sink does exist, then this method replaces the following fields in the existing sink with values from the new sink: destination, filter, output_version_format, start_time, and end_time. The updated filter might also have a new writer_identity; see the unique_writer_identity field.",
+              "request": {
+                "$ref": "LogSink"
+              }
             },
             "create": {
+              "description": "Creates a sink that exports specified log entries to a destination. The export of newly-ingested log entries begins immediately, unless the current time is outside the sink's start and end times or 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"
               },
-              "description": "Creates a sink that exports specified log entries to a destination. The export of newly-ingested log entries begins immediately, unless the current time is outside the sink's start and end times or 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",
-              "parameterOrder": [
-                "parent"
-              ],
               "response": {
                 "$ref": "LogSink"
               },
+              "parameterOrder": [
+                "parent"
+              ],
+              "httpMethod": "POST",
+              "scopes": [
+                "https://www.googleapis.com/auth/cloud-platform",
+                "https://www.googleapis.com/auth/logging.admin"
+              ],
               "parameters": {
+                "parent": {
+                  "required": true,
+                  "type": "string",
+                  "pattern": "^projects/[^/]+$",
+                  "location": "path",
+                  "description": "Required. The resource in which to create the sink:\n\"projects/[PROJECT_ID]\"\n\"organizations/[ORGANIZATION_ID]\"\n\"billingAccounts/[BILLING_ACCOUNT_ID]\"\n\"folders/[FOLDER_ID]\"\nExamples: \"projects/my-logging-project\", \"organizations/123456789\"."
+                },
                 "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 Stackdriver 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": {
-                  "location": "path",
-                  "description": "Required. The resource in which to create the sink:\n\"projects/[PROJECT_ID]\"\n\"organizations/[ORGANIZATION_ID]\"\n\"billingAccounts/[BILLING_ACCOUNT_ID]\"\n\"folders/[FOLDER_ID]\"\nExamples: \"projects/my-logging-project\", \"organizations/123456789\".",
-                  "required": true,
-                  "type": "string",
-                  "pattern": "^projects/[^/]+$"
                 }
               },
-              "scopes": [
-                "https://www.googleapis.com/auth/cloud-platform",
-                "https://www.googleapis.com/auth/logging.admin"
-              ],
               "flatPath": "v2/projects/{projectsId}/sinks",
-              "id": "logging.projects.sinks.create",
-              "path": "v2/{+parent}/sinks"
-            },
-            "delete": {
-              "httpMethod": "DELETE",
-              "parameterOrder": [
-                "sinkName"
-              ],
-              "response": {
-                "$ref": "Empty"
-              },
-              "scopes": [
-                "https://www.googleapis.com/auth/cloud-platform",
-                "https://www.googleapis.com/auth/logging.admin"
-              ],
-              "parameters": {
-                "sinkName": {
-                  "location": "path",
-                  "description": "Required. The full resource name of the sink to delete, including the parent resource and the sink identifier:\n\"projects/[PROJECT_ID]/sinks/[SINK_ID]\"\n\"organizations/[ORGANIZATION_ID]/sinks/[SINK_ID]\"\n\"billingAccounts/[BILLING_ACCOUNT_ID]/sinks/[SINK_ID]\"\n\"folders/[FOLDER_ID]/sinks/[SINK_ID]\"\nExample: \"projects/my-project-id/sinks/my-sink-id\".",
-                  "required": true,
-                  "type": "string",
-                  "pattern": "^projects/[^/]+/sinks/[^/]+$"
-                }
-              },
-              "flatPath": "v2/projects/{projectsId}/sinks/{sinksId}",
-              "id": "logging.projects.sinks.delete",
-              "path": "v2/{+sinkName}",
-              "description": "Deletes a sink. If the sink has a unique writer_identity, then that service account is also deleted."
+              "path": "v2/{+parent}/sinks",
+              "id": "logging.projects.sinks.create"
             }
           }
         },
         "metrics": {
           "methods": {
             "delete": {
+              "flatPath": "v2/projects/{projectsId}/metrics/{metricsId}",
+              "path": "v2/{+metricName}",
+              "id": "logging.projects.metrics.delete",
+              "description": "Deletes a logs-based metric.",
               "response": {
                 "$ref": "Empty"
               },
@@ -1844,17 +1857,13 @@
               ],
               "parameters": {
                 "metricName": {
-                  "description": "The resource name of the metric to delete:\n\"projects/[PROJECT_ID]/metrics/[METRIC_ID]\"\n",
                   "required": true,
                   "type": "string",
                   "pattern": "^projects/[^/]+/metrics/[^/]+$",
-                  "location": "path"
+                  "location": "path",
+                  "description": "The resource name of the metric to delete:\n\"projects/[PROJECT_ID]/metrics/[METRIC_ID]\"\n"
                 }
-              },
-              "flatPath": "v2/projects/{projectsId}/metrics/{metricsId}",
-              "path": "v2/{+metricName}",
-              "id": "logging.projects.metrics.delete",
-              "description": "Deletes a logs-based metric."
+              }
             },
             "list": {
               "response": {
@@ -1864,38 +1873,39 @@
                 "parent"
               ],
               "httpMethod": "GET",
+              "parameters": {
+                "parent": {
+                  "required": true,
+                  "type": "string",
+                  "pattern": "^projects/[^/]+$",
+                  "location": "path",
+                  "description": "Required. The name of the project containing the metrics:\n\"projects/[PROJECT_ID]\"\n"
+                },
+                "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": {
+                  "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"
+                }
+              },
               "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": {
-                "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",
-                  "type": "integer",
-                  "location": "query"
-                },
-                "parent": {
-                  "pattern": "^projects/[^/]+$",
-                  "location": "path",
-                  "description": "Required. The name of the project containing the metrics:\n\"projects/[PROJECT_ID]\"\n",
-                  "required": true,
-                  "type": "string"
-                }
-              },
               "flatPath": "v2/projects/{projectsId}/metrics",
               "path": "v2/{+parent}/metrics",
               "id": "logging.projects.metrics.list",
               "description": "Lists logs-based metrics."
             },
             "get": {
+              "description": "Gets a logs-based metric.",
               "httpMethod": "GET",
               "parameterOrder": [
                 "metricName"
@@ -1903,41 +1913,44 @@
               "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"
-              ],
-              "parameters": {
-                "metricName": {
-                  "location": "path",
-                  "description": "The resource name of the desired metric:\n\"projects/[PROJECT_ID]/metrics/[METRIC_ID]\"\n",
-                  "required": true,
-                  "type": "string",
-                  "pattern": "^projects/[^/]+/metrics/[^/]+$"
-                }
-              },
-              "flatPath": "v2/projects/{projectsId}/metrics/{metricsId}",
-              "id": "logging.projects.metrics.get",
-              "path": "v2/{+metricName}",
-              "description": "Gets a logs-based metric."
-            },
-            "update": {
-              "response": {
-                "$ref": "LogMetric"
-              },
-              "parameterOrder": [
-                "metricName"
-              ],
-              "httpMethod": "PUT",
               "parameters": {
                 "metricName": {
                   "required": true,
                   "type": "string",
                   "pattern": "^projects/[^/]+/metrics/[^/]+$",
                   "location": "path",
-                  "description": "The resource name of the metric to update:\n\"projects/[PROJECT_ID]/metrics/[METRIC_ID]\"\nThe 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."
+                  "description": "The resource name of the desired metric:\n\"projects/[PROJECT_ID]/metrics/[METRIC_ID]\"\n"
+                }
+              },
+              "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/{metricsId}",
+              "id": "logging.projects.metrics.get",
+              "path": "v2/{+metricName}"
+            },
+            "update": {
+              "request": {
+                "$ref": "LogMetric"
+              },
+              "description": "Creates or updates a logs-based metric.",
+              "httpMethod": "PUT",
+              "parameterOrder": [
+                "metricName"
+              ],
+              "response": {
+                "$ref": "LogMetric"
+              },
+              "parameters": {
+                "metricName": {
+                  "location": "path",
+                  "description": "The resource name of the metric to update:\n\"projects/[PROJECT_ID]/metrics/[METRIC_ID]\"\nThe 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.",
+                  "required": true,
+                  "type": "string",
+                  "pattern": "^projects/[^/]+/metrics/[^/]+$"
                 }
               },
               "scopes": [
@@ -1946,42 +1959,38 @@
                 "https://www.googleapis.com/auth/logging.write"
               ],
               "flatPath": "v2/projects/{projectsId}/metrics/{metricsId}",
-              "path": "v2/{+metricName}",
               "id": "logging.projects.metrics.update",
-              "request": {
-                "$ref": "LogMetric"
-              },
-              "description": "Creates or updates a logs-based metric."
+              "path": "v2/{+metricName}"
             },
             "create": {
-              "path": "v2/{+parent}/metrics",
-              "id": "logging.projects.metrics.create",
-              "description": "Creates a logs-based metric.",
               "request": {
                 "$ref": "LogMetric"
               },
-              "response": {
-                "$ref": "LogMetric"
-              },
+              "description": "Creates a logs-based metric.",
+              "httpMethod": "POST",
               "parameterOrder": [
                 "parent"
               ],
-              "httpMethod": "POST",
+              "response": {
+                "$ref": "LogMetric"
+              },
+              "parameters": {
+                "parent": {
+                  "required": true,
+                  "type": "string",
+                  "pattern": "^projects/[^/]+$",
+                  "location": "path",
+                  "description": "The resource name of the project in which to create the metric:\n\"projects/[PROJECT_ID]\"\nThe new metric must be provided in the request."
+                }
+              },
               "scopes": [
                 "https://www.googleapis.com/auth/cloud-platform",
                 "https://www.googleapis.com/auth/logging.admin",
                 "https://www.googleapis.com/auth/logging.write"
               ],
-              "parameters": {
-                "parent": {
-                  "location": "path",
-                  "description": "The resource name of the project in which to create the metric:\n\"projects/[PROJECT_ID]\"\nThe new metric must be provided in the request.",
-                  "required": true,
-                  "type": "string",
-                  "pattern": "^projects/[^/]+$"
-                }
-              },
-              "flatPath": "v2/projects/{projectsId}/metrics"
+              "flatPath": "v2/projects/{projectsId}/metrics",
+              "id": "logging.projects.metrics.create",
+              "path": "v2/{+parent}/metrics"
             }
           }
         }
@@ -1989,46 +1998,41 @@
     }
   },
   "parameters": {
-    "upload_protocol": {
-      "description": "Upload protocol for media (e.g. \"raw\", \"multipart\").",
+    "uploadType": {
       "type": "string",
-      "location": "query"
-    },
-    "prettyPrint": {
       "location": "query",
-      "description": "Returns response with indentations and line breaks.",
-      "type": "boolean",
-      "default": "true"
+      "description": "Legacy upload protocol for media (e.g. \"media\", \"multipart\")."
     },
     "fields": {
       "location": "query",
       "description": "Selector specifying which fields to include in a partial response.",
       "type": "string"
     },
-    "uploadType": {
+    "callback": {
       "type": "string",
       "location": "query",
-      "description": "Legacy upload protocol for media (e.g. \"media\", \"multipart\")."
+      "description": "JSONP"
     },
     "$.xgafv": {
+      "type": "string",
+      "enumDescriptions": [
+        "v1 error format",
+        "v2 error format"
+      ],
       "location": "query",
       "enum": [
         "1",
         "2"
       ],
-      "description": "V1 error format.",
-      "type": "string",
-      "enumDescriptions": [
-        "v1 error format",
-        "v2 error format"
-      ]
-    },
-    "callback": {
-      "description": "JSONP",
-      "type": "string",
-      "location": "query"
+      "description": "V1 error format."
     },
     "alt": {
+      "enum": [
+        "json",
+        "media",
+        "proto"
+      ],
+      "type": "string",
       "enumDescriptions": [
         "Responses with Content-Type of application/json",
         "Media download with context-dependent Content-Type",
@@ -2036,55 +2040,51 @@
       ],
       "location": "query",
       "description": "Data format for response.",
-      "default": "json",
-      "enum": [
-        "json",
-        "media",
-        "proto"
-      ],
-      "type": "string"
-    },
-    "access_token": {
-      "description": "OAuth access token.",
-      "type": "string",
-      "location": "query"
+      "default": "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"
     },
+    "access_token": {
+      "location": "query",
+      "description": "OAuth access token.",
+      "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."
     },
     "pp": {
-      "description": "Pretty-print response.",
       "type": "boolean",
       "default": "true",
-      "location": "query"
+      "location": "query",
+      "description": "Pretty-print response."
+    },
+    "bearer_token": {
+      "type": "string",
+      "location": "query",
+      "description": "OAuth bearer token."
     },
     "oauth_token": {
       "type": "string",
       "location": "query",
       "description": "OAuth 2.0 token for the current user."
     },
-    "bearer_token": {
+    "upload_protocol": {
+      "type": "string",
       "location": "query",
-      "description": "OAuth bearer token.",
-      "type": "string"
+      "description": "Upload protocol for media (e.g. \"raw\", \"multipart\")."
+    },
+    "prettyPrint": {
+      "type": "boolean",
+      "default": "true",
+      "location": "query",
+      "description": "Returns response with indentations and line breaks."
     }
   },
   "version": "v2",
-  "baseUrl": "https://logging.googleapis.com/",
-  "description": "Writes log entries and manages your Stackdriver Logging configuration.",
-  "kind": "discovery#restDescription",
-  "servicePath": "",
-  "basePath": "",
-  "id": "logging:v2",
-  "documentationLink": "https://cloud.google.com/logging/docs/",
-  "revision": "20170306",
-  "discoveryVersion": "v1",
-  "version_module": "True"
+  "baseUrl": "https://logging.googleapis.com/"
 }
diff --git a/logging/v2/logging-gen.go b/logging/v2/logging-gen.go
index c4c8e17..2d64461 100644
--- a/logging/v2/logging-gen.go
+++ b/logging/v2/logging-gen.go
@@ -78,10 +78,9 @@
 }
 
 type Service struct {
-	client                    *http.Client
-	BasePath                  string // API endpoint base URL
-	UserAgent                 string // optional additional User-Agent fragment
-	GoogleClientHeaderElement string // client header fragment, for Google use only
+	client    *http.Client
+	BasePath  string // API endpoint base URL
+	UserAgent string // optional additional User-Agent fragment
 
 	BillingAccounts *BillingAccountsService
 
@@ -103,10 +102,6 @@
 	return googleapi.UserAgent + " " + s.UserAgent
 }
 
-func (s *Service) clientHeader() string {
-	return gensupport.GoogleClientHeader("20170210", s.GoogleClientHeaderElement)
-}
-
 func NewBillingAccountsService(s *Service) *BillingAccountsService {
 	rs := &BillingAccountsService{s: s}
 	rs.Logs = NewBillingAccountsLogsService(s)
@@ -1580,7 +1575,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	var body io.Reader = nil
 	c.urlParams_.Set("alt", alt)
 	urls := googleapi.ResolveRelative(c.s.BasePath, "v2/{+logName}")
@@ -1738,7 +1732,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	if c.ifNoneMatch_ != "" {
 		reqHeaders.Set("If-None-Match", c.ifNoneMatch_)
 	}
@@ -1926,7 +1919,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	var body io.Reader = nil
 	body, err := googleapi.WithoutDataWrapper.JSONReader(c.logsink)
 	if err != nil {
@@ -2067,7 +2059,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	var body io.Reader = nil
 	c.urlParams_.Set("alt", alt)
 	urls := googleapi.ResolveRelative(c.s.BasePath, "v2/{+sinkName}")
@@ -2205,7 +2196,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	if c.ifNoneMatch_ != "" {
 		reqHeaders.Set("If-None-Match", c.ifNoneMatch_)
 	}
@@ -2367,7 +2357,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	if c.ifNoneMatch_ != "" {
 		reqHeaders.Set("If-None-Match", c.ifNoneMatch_)
 	}
@@ -2554,7 +2543,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	var body io.Reader = nil
 	body, err := googleapi.WithoutDataWrapper.JSONReader(c.logsink)
 	if err != nil {
@@ -2696,7 +2684,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	var body io.Reader = nil
 	body, err := googleapi.WithoutDataWrapper.JSONReader(c.listlogentriesrequest)
 	if err != nil {
@@ -2841,7 +2828,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	var body io.Reader = nil
 	body, err := googleapi.WithoutDataWrapper.JSONReader(c.writelogentriesrequest)
 	if err != nil {
@@ -2966,7 +2952,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	var body io.Reader = nil
 	c.urlParams_.Set("alt", alt)
 	urls := googleapi.ResolveRelative(c.s.BasePath, "v2/{+logName}")
@@ -3124,7 +3109,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	if c.ifNoneMatch_ != "" {
 		reqHeaders.Set("If-None-Match", c.ifNoneMatch_)
 	}
@@ -3312,7 +3296,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	var body io.Reader = nil
 	body, err := googleapi.WithoutDataWrapper.JSONReader(c.logsink)
 	if err != nil {
@@ -3453,7 +3436,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	var body io.Reader = nil
 	c.urlParams_.Set("alt", alt)
 	urls := googleapi.ResolveRelative(c.s.BasePath, "v2/{+sinkName}")
@@ -3591,7 +3573,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	if c.ifNoneMatch_ != "" {
 		reqHeaders.Set("If-None-Match", c.ifNoneMatch_)
 	}
@@ -3753,7 +3734,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	if c.ifNoneMatch_ != "" {
 		reqHeaders.Set("If-None-Match", c.ifNoneMatch_)
 	}
@@ -3940,7 +3920,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	var body io.Reader = nil
 	body, err := googleapi.WithoutDataWrapper.JSONReader(c.logsink)
 	if err != nil {
@@ -4109,7 +4088,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	if c.ifNoneMatch_ != "" {
 		reqHeaders.Set("If-None-Match", c.ifNoneMatch_)
 	}
@@ -4265,7 +4243,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	var body io.Reader = nil
 	c.urlParams_.Set("alt", alt)
 	urls := googleapi.ResolveRelative(c.s.BasePath, "v2/{+logName}")
@@ -4423,7 +4400,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	if c.ifNoneMatch_ != "" {
 		reqHeaders.Set("If-None-Match", c.ifNoneMatch_)
 	}
@@ -4611,7 +4587,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	var body io.Reader = nil
 	body, err := googleapi.WithoutDataWrapper.JSONReader(c.logsink)
 	if err != nil {
@@ -4752,7 +4727,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	var body io.Reader = nil
 	c.urlParams_.Set("alt", alt)
 	urls := googleapi.ResolveRelative(c.s.BasePath, "v2/{+sinkName}")
@@ -4890,7 +4864,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	if c.ifNoneMatch_ != "" {
 		reqHeaders.Set("If-None-Match", c.ifNoneMatch_)
 	}
@@ -5052,7 +5025,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	if c.ifNoneMatch_ != "" {
 		reqHeaders.Set("If-None-Match", c.ifNoneMatch_)
 	}
@@ -5239,7 +5211,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	var body io.Reader = nil
 	body, err := googleapi.WithoutDataWrapper.JSONReader(c.logsink)
 	if err != nil {
@@ -5381,7 +5352,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	var body io.Reader = nil
 	c.urlParams_.Set("alt", alt)
 	urls := googleapi.ResolveRelative(c.s.BasePath, "v2/{+logName}")
@@ -5539,7 +5509,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	if c.ifNoneMatch_ != "" {
 		reqHeaders.Set("If-None-Match", c.ifNoneMatch_)
 	}
@@ -5705,7 +5674,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	var body io.Reader = nil
 	body, err := googleapi.WithoutDataWrapper.JSONReader(c.logmetric)
 	if err != nil {
@@ -5841,7 +5809,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	var body io.Reader = nil
 	c.urlParams_.Set("alt", alt)
 	urls := googleapi.ResolveRelative(c.s.BasePath, "v2/{+metricName}")
@@ -5980,7 +5947,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	if c.ifNoneMatch_ != "" {
 		reqHeaders.Set("If-None-Match", c.ifNoneMatch_)
 	}
@@ -6142,7 +6108,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	if c.ifNoneMatch_ != "" {
 		reqHeaders.Set("If-None-Match", c.ifNoneMatch_)
 	}
@@ -6308,7 +6273,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	var body io.Reader = nil
 	body, err := googleapi.WithoutDataWrapper.JSONReader(c.logmetric)
 	if err != nil {
@@ -6468,7 +6432,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	var body io.Reader = nil
 	body, err := googleapi.WithoutDataWrapper.JSONReader(c.logsink)
 	if err != nil {
@@ -6609,7 +6572,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	var body io.Reader = nil
 	c.urlParams_.Set("alt", alt)
 	urls := googleapi.ResolveRelative(c.s.BasePath, "v2/{+sinkName}")
@@ -6747,7 +6709,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	if c.ifNoneMatch_ != "" {
 		reqHeaders.Set("If-None-Match", c.ifNoneMatch_)
 	}
@@ -6909,7 +6870,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	if c.ifNoneMatch_ != "" {
 		reqHeaders.Set("If-None-Match", c.ifNoneMatch_)
 	}
@@ -7096,7 +7056,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	var body io.Reader = nil
 	body, err := googleapi.WithoutDataWrapper.JSONReader(c.logsink)
 	if err != nil {
diff --git a/logging/v2beta1/logging-api.json b/logging/v2beta1/logging-api.json
index 71bf5e8..35654fb 100644
--- a/logging/v2beta1/logging-api.json
+++ b/logging/v2beta1/logging-api.json
@@ -1,356 +1,756 @@
 {
-  "documentationLink": "https://cloud.google.com/logging/docs/",
-  "revision": "20170306",
+  "auth": {
+    "oauth2": {
+      "scopes": {
+        "https://www.googleapis.com/auth/cloud-platform.read-only": {
+          "description": "View your data across Google Cloud Platform services"
+        },
+        "https://www.googleapis.com/auth/logging.admin": {
+          "description": "Administrate log data for your projects"
+        },
+        "https://www.googleapis.com/auth/logging.read": {
+          "description": "View log data for your projects"
+        },
+        "https://www.googleapis.com/auth/logging.write": {
+          "description": "Submit log data for your projects"
+        },
+        "https://www.googleapis.com/auth/cloud-platform": {
+          "description": "View and manage your data across Google Cloud Platform services"
+        }
+      }
+    }
+  },
+  "rootUrl": "https://logging.googleapis.com/",
+  "ownerDomain": "google.com",
+  "name": "logging",
+  "batchPath": "batch",
+  "title": "Stackdriver Logging API",
+  "ownerName": "Google",
+  "resources": {
+    "billingAccounts": {
+      "resources": {
+        "logs": {
+          "methods": {
+            "delete": {
+              "flatPath": "v2beta1/billingAccounts/{billingAccountsId}/logs/{logsId}",
+              "path": "v2beta1/{+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.",
+              "response": {
+                "$ref": "Empty"
+              },
+              "parameterOrder": [
+                "logName"
+              ],
+              "httpMethod": "DELETE",
+              "scopes": [
+                "https://www.googleapis.com/auth/cloud-platform",
+                "https://www.googleapis.com/auth/logging.admin"
+              ],
+              "parameters": {
+                "logName": {
+                  "pattern": "^billingAccounts/[^/]+/logs/[^/]+$",
+                  "location": "path",
+                  "description": "Required. The resource name of the log to delete:\n\"projects/[PROJECT_ID]/logs/[LOG_ID]\"\n\"organizations/[ORGANIZATION_ID]/logs/[LOG_ID]\"\n\"billingAccounts/[BILLING_ACCOUNT_ID]/logs/[LOG_ID]\"\n\"folders/[FOLDER_ID]/logs/[LOG_ID]\"\n[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"
+                }
+              }
+            },
+            "list": {
+              "flatPath": "v2beta1/billingAccounts/{billingAccountsId}/logs",
+              "id": "logging.billingAccounts.logs.list",
+              "path": "v2beta1/{+parent}/logs",
+              "description": "Lists the logs in projects, organizations, folders, or billing accounts. Only logs that have entries are listed.",
+              "httpMethod": "GET",
+              "parameterOrder": [
+                "parent"
+              ],
+              "response": {
+                "$ref": "ListLogsResponse"
+              },
+              "parameters": {
+                "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": {
+                  "required": true,
+                  "type": "string",
+                  "pattern": "^billingAccounts/[^/]+$",
+                  "location": "path",
+                  "description": "Required. The resource name that owns the logs:\n\"projects/[PROJECT_ID]\"\n\"organizations/[ORGANIZATION_ID]\"\n\"billingAccounts/[BILLING_ACCOUNT_ID]\"\n\"folders/[FOLDER_ID]\"\n"
+                },
+                "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"
+              ]
+            }
+          }
+        }
+      }
+    },
+    "monitoredResourceDescriptors": {
+      "methods": {
+        "list": {
+          "path": "v2beta1/monitoredResourceDescriptors",
+          "id": "logging.monitoredResourceDescriptors.list",
+          "description": "Lists the descriptors for monitored resource types used by Stackdriver Logging.",
+          "response": {
+            "$ref": "ListMonitoredResourceDescriptorsResponse"
+          },
+          "parameterOrder": [],
+          "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": {
+            "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",
+              "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"
+            }
+          },
+          "flatPath": "v2beta1/monitoredResourceDescriptors"
+        }
+      }
+    },
+    "organizations": {
+      "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.",
+              "response": {
+                "$ref": "Empty"
+              },
+              "httpMethod": "DELETE",
+              "parameterOrder": [
+                "logName"
+              ],
+              "scopes": [
+                "https://www.googleapis.com/auth/cloud-platform",
+                "https://www.googleapis.com/auth/logging.admin"
+              ],
+              "parameters": {
+                "logName": {
+                  "description": "Required. The resource name of the log to delete:\n\"projects/[PROJECT_ID]/logs/[LOG_ID]\"\n\"organizations/[ORGANIZATION_ID]/logs/[LOG_ID]\"\n\"billingAccounts/[BILLING_ACCOUNT_ID]/logs/[LOG_ID]\"\n\"folders/[FOLDER_ID]/logs/[LOG_ID]\"\n[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/[^/]+$",
+                  "location": "path"
+                }
+              },
+              "flatPath": "v2beta1/organizations/{organizationsId}/logs/{logsId}",
+              "path": "v2beta1/{+logName}",
+              "id": "logging.organizations.logs.delete"
+            },
+            "list": {
+              "path": "v2beta1/{+parent}/logs",
+              "id": "logging.organizations.logs.list",
+              "description": "Lists the logs in projects, organizations, folders, or billing accounts. Only logs that have entries are listed.",
+              "response": {
+                "$ref": "ListLogsResponse"
+              },
+              "parameterOrder": [
+                "parent"
+              ],
+              "httpMethod": "GET",
+              "parameters": {
+                "parent": {
+                  "location": "path",
+                  "description": "Required. The resource name that owns the logs:\n\"projects/[PROJECT_ID]\"\n\"organizations/[ORGANIZATION_ID]\"\n\"billingAccounts/[BILLING_ACCOUNT_ID]\"\n\"folders/[FOLDER_ID]\"\n",
+                  "required": true,
+                  "type": "string",
+                  "pattern": "^organizations/[^/]+$"
+                },
+                "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.",
+                  "format": "int32",
+                  "type": "integer",
+                  "location": "query"
+                }
+              },
+              "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": "v2beta1/organizations/{organizationsId}/logs"
+            }
+          }
+        }
+      }
+    },
+    "entries": {
+      "methods": {
+        "list": {
+          "description": "Lists log entries. Use this method to retrieve log entries from Stackdriver Logging. For ways to export log entries, see Exporting Logs.",
+          "request": {
+            "$ref": "ListLogEntriesRequest"
+          },
+          "response": {
+            "$ref": "ListLogEntriesResponse"
+          },
+          "parameterOrder": [],
+          "httpMethod": "POST",
+          "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": {},
+          "flatPath": "v2beta1/entries:list",
+          "path": "v2beta1/entries:list",
+          "id": "logging.entries.list"
+        },
+        "write": {
+          "description": "Writes log entries to Stackdriver Logging.",
+          "request": {
+            "$ref": "WriteLogEntriesRequest"
+          },
+          "response": {
+            "$ref": "WriteLogEntriesResponse"
+          },
+          "parameterOrder": [],
+          "httpMethod": "POST",
+          "scopes": [
+            "https://www.googleapis.com/auth/cloud-platform",
+            "https://www.googleapis.com/auth/logging.admin",
+            "https://www.googleapis.com/auth/logging.write"
+          ],
+          "parameters": {},
+          "flatPath": "v2beta1/entries:write",
+          "path": "v2beta1/entries:write",
+          "id": "logging.entries.write"
+        }
+      }
+    },
+    "projects": {
+      "resources": {
+        "logs": {
+          "methods": {
+            "list": {
+              "httpMethod": "GET",
+              "parameterOrder": [
+                "parent"
+              ],
+              "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"
+              ],
+              "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."
+                },
+                "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",
+                  "type": "integer",
+                  "location": "query"
+                },
+                "parent": {
+                  "description": "Required. The resource name that owns the logs:\n\"projects/[PROJECT_ID]\"\n\"organizations/[ORGANIZATION_ID]\"\n\"billingAccounts/[BILLING_ACCOUNT_ID]\"\n\"folders/[FOLDER_ID]\"\n",
+                  "required": true,
+                  "type": "string",
+                  "pattern": "^projects/[^/]+$",
+                  "location": "path"
+                }
+              },
+              "flatPath": "v2beta1/projects/{projectsId}/logs",
+              "id": "logging.projects.logs.list",
+              "path": "v2beta1/{+parent}/logs",
+              "description": "Lists the logs in projects, organizations, folders, or billing accounts. Only logs that have entries are listed."
+            },
+            "delete": {
+              "parameterOrder": [
+                "logName"
+              ],
+              "response": {
+                "$ref": "Empty"
+              },
+              "httpMethod": "DELETE",
+              "scopes": [
+                "https://www.googleapis.com/auth/cloud-platform",
+                "https://www.googleapis.com/auth/logging.admin"
+              ],
+              "parameters": {
+                "logName": {
+                  "description": "Required. The resource name of the log to delete:\n\"projects/[PROJECT_ID]/logs/[LOG_ID]\"\n\"organizations/[ORGANIZATION_ID]/logs/[LOG_ID]\"\n\"billingAccounts/[BILLING_ACCOUNT_ID]/logs/[LOG_ID]\"\n\"folders/[FOLDER_ID]/logs/[LOG_ID]\"\n[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": "^projects/[^/]+/logs/[^/]+$",
+                  "location": "path"
+                }
+              },
+              "flatPath": "v2beta1/projects/{projectsId}/logs/{logsId}",
+              "path": "v2beta1/{+logName}",
+              "id": "logging.projects.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."
+            }
+          }
+        },
+        "sinks": {
+          "methods": {
+            "update": {
+              "description": "Updates a sink. If the named sink doesn't exist, then this method is identical to sinks.create. If the named sink does exist, then this method replaces the following fields in the existing sink with values from the new sink: destination, filter, output_version_format, start_time, and end_time. The updated filter might also have a new writer_identity; see the unique_writer_identity field.",
+              "request": {
+                "$ref": "LogSink"
+              },
+              "response": {
+                "$ref": "LogSink"
+              },
+              "parameterOrder": [
+                "sinkName"
+              ],
+              "httpMethod": "PUT",
+              "scopes": [
+                "https://www.googleapis.com/auth/cloud-platform",
+                "https://www.googleapis.com/auth/logging.admin"
+              ],
+              "parameters": {
+                "sinkName": {
+                  "description": "Required. The full resource name of the sink to update, including the parent resource and the sink identifier:\n\"projects/[PROJECT_ID]/sinks/[SINK_ID]\"\n\"organizations/[ORGANIZATION_ID]/sinks/[SINK_ID]\"\n\"billingAccounts/[BILLING_ACCOUNT_ID]/sinks/[SINK_ID]\"\n\"folders/[FOLDER_ID]/sinks/[SINK_ID]\"\nExample: \"projects/my-project-id/sinks/my-sink-id\".",
+                  "required": true,
+                  "type": "string",
+                  "pattern": "^projects/[^/]+/sinks/[^/]+$",
+                  "location": "path"
+                },
+                "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:\nIf 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.\nIf the old value is false and the new value is true, then writer_identity is changed to a unique service account.\nIt is an error if the old value is true and the new value is false.",
+                  "type": "boolean"
+                }
+              },
+              "flatPath": "v2beta1/projects/{projectsId}/sinks/{sinksId}",
+              "path": "v2beta1/{+sinkName}",
+              "id": "logging.projects.sinks.update"
+            },
+            "create": {
+              "parameters": {
+                "parent": {
+                  "description": "Required. The resource in which to create the sink:\n\"projects/[PROJECT_ID]\"\n\"organizations/[ORGANIZATION_ID]\"\n\"billingAccounts/[BILLING_ACCOUNT_ID]\"\n\"folders/[FOLDER_ID]\"\nExamples: \"projects/my-logging-project\", \"organizations/123456789\".",
+                  "required": true,
+                  "type": "string",
+                  "pattern": "^projects/[^/]+$",
+                  "location": "path"
+                },
+                "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 Stackdriver 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"
+                }
+              },
+              "scopes": [
+                "https://www.googleapis.com/auth/cloud-platform",
+                "https://www.googleapis.com/auth/logging.admin"
+              ],
+              "flatPath": "v2beta1/projects/{projectsId}/sinks",
+              "id": "logging.projects.sinks.create",
+              "path": "v2beta1/{+parent}/sinks",
+              "request": {
+                "$ref": "LogSink"
+              },
+              "description": "Creates a sink that exports specified log entries to a destination. The export of newly-ingested log entries begins immediately, unless the current time is outside the sink's start and end times or 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",
+              "parameterOrder": [
+                "parent"
+              ],
+              "response": {
+                "$ref": "LogSink"
+              }
+            },
+            "delete": {
+              "scopes": [
+                "https://www.googleapis.com/auth/cloud-platform",
+                "https://www.googleapis.com/auth/logging.admin"
+              ],
+              "parameters": {
+                "sinkName": {
+                  "location": "path",
+                  "description": "Required. The full resource name of the sink to delete, including the parent resource and the sink identifier:\n\"projects/[PROJECT_ID]/sinks/[SINK_ID]\"\n\"organizations/[ORGANIZATION_ID]/sinks/[SINK_ID]\"\n\"billingAccounts/[BILLING_ACCOUNT_ID]/sinks/[SINK_ID]\"\n\"folders/[FOLDER_ID]/sinks/[SINK_ID]\"\nExample: \"projects/my-project-id/sinks/my-sink-id\".",
+                  "required": true,
+                  "type": "string",
+                  "pattern": "^projects/[^/]+/sinks/[^/]+$"
+                }
+              },
+              "flatPath": "v2beta1/projects/{projectsId}/sinks/{sinksId}",
+              "id": "logging.projects.sinks.delete",
+              "path": "v2beta1/{+sinkName}",
+              "description": "Deletes a sink. If the sink has a unique writer_identity, then that service account is also deleted.",
+              "httpMethod": "DELETE",
+              "parameterOrder": [
+                "sinkName"
+              ],
+              "response": {
+                "$ref": "Empty"
+              }
+            },
+            "list": {
+              "description": "Lists sinks.",
+              "httpMethod": "GET",
+              "parameterOrder": [
+                "parent"
+              ],
+              "response": {
+                "$ref": "ListSinksResponse"
+              },
+              "parameters": {
+                "parent": {
+                  "location": "path",
+                  "description": "Required. The parent resource whose sinks are to be listed:\n\"projects/[PROJECT_ID]\"\n\"organizations/[ORGANIZATION_ID]\"\n\"billingAccounts/[BILLING_ACCOUNT_ID]\"\n\"folders/[FOLDER_ID]\"\n",
+                  "required": true,
+                  "type": "string",
+                  "pattern": "^projects/[^/]+$"
+                },
+                "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.",
+                  "format": "int32",
+                  "type": "integer"
+                }
+              },
+              "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": "v2beta1/projects/{projectsId}/sinks",
+              "id": "logging.projects.sinks.list",
+              "path": "v2beta1/{+parent}/sinks"
+            },
+            "get": {
+              "response": {
+                "$ref": "LogSink"
+              },
+              "parameterOrder": [
+                "sinkName"
+              ],
+              "httpMethod": "GET",
+              "parameters": {
+                "sinkName": {
+                  "description": "Required. The resource name of the sink:\n\"projects/[PROJECT_ID]/sinks/[SINK_ID]\"\n\"organizations/[ORGANIZATION_ID]/sinks/[SINK_ID]\"\n\"billingAccounts/[BILLING_ACCOUNT_ID]/sinks/[SINK_ID]\"\n\"folders/[FOLDER_ID]/sinks/[SINK_ID]\"\nExample: \"projects/my-project-id/sinks/my-sink-id\".",
+                  "required": true,
+                  "type": "string",
+                  "pattern": "^projects/[^/]+/sinks/[^/]+$",
+                  "location": "path"
+                }
+              },
+              "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": "v2beta1/projects/{projectsId}/sinks/{sinksId}",
+              "path": "v2beta1/{+sinkName}",
+              "id": "logging.projects.sinks.get",
+              "description": "Gets a sink."
+            }
+          }
+        },
+        "metrics": {
+          "methods": {
+            "delete": {
+              "response": {
+                "$ref": "Empty"
+              },
+              "parameterOrder": [
+                "metricName"
+              ],
+              "httpMethod": "DELETE",
+              "parameters": {
+                "metricName": {
+                  "description": "The resource name of the metric to delete:\n\"projects/[PROJECT_ID]/metrics/[METRIC_ID]\"\n",
+                  "required": true,
+                  "type": "string",
+                  "pattern": "^projects/[^/]+/metrics/[^/]+$",
+                  "location": "path"
+                }
+              },
+              "scopes": [
+                "https://www.googleapis.com/auth/cloud-platform",
+                "https://www.googleapis.com/auth/logging.admin",
+                "https://www.googleapis.com/auth/logging.write"
+              ],
+              "flatPath": "v2beta1/projects/{projectsId}/metrics/{metricsId}",
+              "path": "v2beta1/{+metricName}",
+              "id": "logging.projects.metrics.delete",
+              "description": "Deletes a logs-based metric."
+            },
+            "list": {
+              "path": "v2beta1/{+parent}/metrics",
+              "id": "logging.projects.metrics.list",
+              "description": "Lists logs-based metrics.",
+              "response": {
+                "$ref": "ListLogMetricsResponse"
+              },
+              "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"
+              ],
+              "parameters": {
+                "parent": {
+                  "description": "Required. The name of the project containing the metrics:\n\"projects/[PROJECT_ID]\"\n",
+                  "required": true,
+                  "type": "string",
+                  "pattern": "^projects/[^/]+$",
+                  "location": "path"
+                },
+                "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.",
+                  "format": "int32",
+                  "type": "integer",
+                  "location": "query"
+                }
+              },
+              "flatPath": "v2beta1/projects/{projectsId}/metrics"
+            },
+            "get": {
+              "response": {
+                "$ref": "LogMetric"
+              },
+              "parameterOrder": [
+                "metricName"
+              ],
+              "httpMethod": "GET",
+              "parameters": {
+                "metricName": {
+                  "location": "path",
+                  "description": "The resource name of the desired metric:\n\"projects/[PROJECT_ID]/metrics/[METRIC_ID]\"\n",
+                  "required": true,
+                  "type": "string",
+                  "pattern": "^projects/[^/]+/metrics/[^/]+$"
+                }
+              },
+              "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": "v2beta1/projects/{projectsId}/metrics/{metricsId}",
+              "path": "v2beta1/{+metricName}",
+              "id": "logging.projects.metrics.get",
+              "description": "Gets a logs-based metric."
+            },
+            "update": {
+              "path": "v2beta1/{+metricName}",
+              "id": "logging.projects.metrics.update",
+              "description": "Creates or updates a logs-based metric.",
+              "request": {
+                "$ref": "LogMetric"
+              },
+              "response": {
+                "$ref": "LogMetric"
+              },
+              "parameterOrder": [
+                "metricName"
+              ],
+              "httpMethod": "PUT",
+              "scopes": [
+                "https://www.googleapis.com/auth/cloud-platform",
+                "https://www.googleapis.com/auth/logging.admin",
+                "https://www.googleapis.com/auth/logging.write"
+              ],
+              "parameters": {
+                "metricName": {
+                  "location": "path",
+                  "description": "The resource name of the metric to update:\n\"projects/[PROJECT_ID]/metrics/[METRIC_ID]\"\nThe 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.",
+                  "required": true,
+                  "type": "string",
+                  "pattern": "^projects/[^/]+/metrics/[^/]+$"
+                }
+              },
+              "flatPath": "v2beta1/projects/{projectsId}/metrics/{metricsId}"
+            },
+            "create": {
+              "description": "Creates a logs-based metric.",
+              "request": {
+                "$ref": "LogMetric"
+              },
+              "httpMethod": "POST",
+              "parameterOrder": [
+                "parent"
+              ],
+              "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"
+              ],
+              "parameters": {
+                "parent": {
+                  "pattern": "^projects/[^/]+$",
+                  "location": "path",
+                  "description": "The resource name of the project in which to create the metric:\n\"projects/[PROJECT_ID]\"\nThe new metric must be provided in the request.",
+                  "required": true,
+                  "type": "string"
+                }
+              },
+              "flatPath": "v2beta1/projects/{projectsId}/metrics",
+              "id": "logging.projects.metrics.create",
+              "path": "v2beta1/{+parent}/metrics"
+            }
+          }
+        }
+      }
+    }
+  },
+  "parameters": {
+    "pp": {
+      "description": "Pretty-print response.",
+      "type": "boolean",
+      "default": "true",
+      "location": "query"
+    },
+    "oauth_token": {
+      "description": "OAuth 2.0 token for the current user.",
+      "type": "string",
+      "location": "query"
+    },
+    "bearer_token": {
+      "type": "string",
+      "location": "query",
+      "description": "OAuth bearer token."
+    },
+    "upload_protocol": {
+      "location": "query",
+      "description": "Upload protocol for media (e.g. \"raw\", \"multipart\").",
+      "type": "string"
+    },
+    "prettyPrint": {
+      "description": "Returns response with indentations and line breaks.",
+      "type": "boolean",
+      "default": "true",
+      "location": "query"
+    },
+    "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\").",
+      "type": "string",
+      "location": "query"
+    },
+    "$.xgafv": {
+      "description": "V1 error format.",
+      "type": "string",
+      "enumDescriptions": [
+        "v1 error format",
+        "v2 error format"
+      ],
+      "location": "query",
+      "enum": [
+        "1",
+        "2"
+      ]
+    },
+    "callback": {
+      "type": "string",
+      "location": "query",
+      "description": "JSONP"
+    },
+    "alt": {
+      "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",
+      "description": "Data format for response.",
+      "default": "json",
+      "enum": [
+        "json",
+        "media",
+        "proto"
+      ]
+    },
+    "access_token": {
+      "description": "OAuth access token.",
+      "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"
+    },
+    "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"
+    }
+  },
+  "version": "v2beta1",
+  "baseUrl": "https://logging.googleapis.com/",
+  "kind": "discovery#restDescription",
+  "description": "Writes log entries and manages your Stackdriver Logging configuration.",
+  "servicePath": "",
+  "basePath": "",
   "id": "logging:v2beta1",
+  "documentationLink": "https://cloud.google.com/logging/docs/",
+  "revision": "20170320",
   "discoveryVersion": "v1",
   "version_module": "True",
   "schemas": {
-    "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\":\n{ \"type\": \"gce_instance\",\n  \"labels\": { \"instance_id\": \"12345678901234\",\n              \"zone\": \"us-central1-a\" }}\n",
-      "type": "object",
-      "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 Cloud SQL database is \"cloudsql_database\".",
-          "type": "string"
-        },
-        "labels": {
-          "type": "object",
-          "additionalProperties": {
-            "type": "string"
-          },
-          "description": "Required. Values for all of the labels listed in the associated monitored resource descriptor. For example, Cloud SQL databases use the labels \"database_id\" and \"zone\"."
-        }
-      },
-      "id": "MonitoredResource"
-    },
-    "WriteLogEntriesRequest": {
-      "type": "object",
-      "properties": {
-        "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:\n{ \"type\": \"gce_instance\",\n  \"labels\": {\n    \"zone\": \"us-central1-a\", \"instance_id\": \"00000000000000000000\" }}\nSee LogEntry."
-        },
-        "logName": {
-          "type": "string",
-          "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:\n\"projects/[PROJECT_ID]/logs/[LOG_ID]\"\n\"organizations/[ORGANIZATION_ID]/logs/[LOG_ID]\"\n\"billingAccounts/[BILLING_ACCOUNT_ID]/logs/[LOG_ID]\"\n\"folders/[FOLDER_ID]/logs/[LOG_ID]\"\n[LOG_ID] must be URL-encoded. For example, \"projects/my-project-id/logs/syslog\" or \"organizations/1234567890/logs/cloudresourcemanager.googleapis.com%2Factivity\". For more information about log names, see LogEntry."
-        },
-        "entries": {
-          "description": "Required. The log entries to write. Values supplied for the fields log_name, resource, and labels in this entries.write request are inserted into those log entries in this list that do not provide their own values.Stackdriver Logging also creates and inserts values for timestamp and insert_id if the entries do not provide them. The created insert_id for the N'th entry in this list will be greater than earlier entries and less than later entries. Otherwise, the order of log entries in this list does not matter.To improve throughput and to avoid exceeding the quota limit for calls to entries.write, you should write multiple log entries at once rather than calling this method for each individual log entry.",
-          "type": "array",
-          "items": {
-            "$ref": "LogEntry"
-          }
-        },
-        "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"
-        },
-        "labels": {
-          "type": "object",
-          "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."
-        }
-      },
-      "id": "WriteLogEntriesRequest",
-      "description": "The parameters to WriteLogEntries."
-    },
-    "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.",
-      "type": "object",
-      "properties": {
-        "filter": {
-          "description": "Optional. An advanced logs filter. The only exported log entries are those that are in the resource owning the sink and that match the filter. The filter must use the log entry format specified by the output_version_format parameter. For example, in the v2 format:\nlogName=\"projects/[PROJECT_ID]/logs/[LOG_ID]\" AND severity\u003e=ERROR\n",
-          "type": "string"
-        },
-        "destination": {
-          "description": "Required. The export destination:\n\"storage.googleapis.com/[GCS_BUCKET]\"\n\"bigquery.googleapis.com/projects/[PROJECT_ID]/datasets/[DATASET]\"\n\"pubsub.googleapis.com/projects/[PROJECT_ID]/topics/[TOPIC_ID]\"\nThe 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.",
-          "type": "string"
-        },
-        "endTime": {
-          "description": "Optional. The time at which this sink will stop exporting log entries. Log entries are exported only if their timestamp is earlier than the end time. If this field is not supplied, there is no end time. If both a start time and an end time are provided, then the end time must be later than the start time.",
-          "format": "google-datetime",
-          "type": "string"
-        },
-        "writerIdentity": {
-          "description": "Output only. An IAM identity&mdash;a service account or group&mdash;under which Stackdriver Logging writes the exported log entries to the sink's destination. This field is set by sinks.create and sinks.update, based on the setting 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. Consult the destination service's documentation to determine the appropriate IAM roles to assign to the identity.",
-          "type": "string"
-        },
-        "startTime": {
-          "description": "Optional. The time at which this sink will begin exporting log entries. Log entries are exported only if their timestamp is not earlier than the start time. The default value of this field is the time the sink is created or updated.",
-          "format": "google-datetime",
-          "type": "string"
-        },
-        "outputVersionFormat": {
-          "enum": [
-            "VERSION_FORMAT_UNSPECIFIED",
-            "V2",
-            "V1"
-          ],
-          "description": "Optional. The log entry format to use for this sink's exported log entries. The v2 format is used by default. The v1 format is deprecated and should be used only as part of a migration effort to v2. See Migration to the v2 API.",
-          "type": "string",
-          "enumDescriptions": [
-            "An unspecified format version that will default to V2.",
-            "LogEntry version 2 format.",
-            "LogEntry version 1 format."
-          ]
-        },
-        "name": {
-          "type": "string",
-          "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."
-        }
-      },
-      "id": "LogSink"
-    },
-    "ListLogsResponse": {
-      "description": "Result returned from ListLogs.",
-      "type": "object",
-      "properties": {
-        "logNames": {
-          "description": "A list of log names. For example, \"projects/my-project/syslog\" or \"organizations/123/cloudresourcemanager.googleapis.com%2Factivity\".",
-          "type": "array",
-          "items": {
-            "type": "string"
-          }
-        },
-        "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"
-        }
-      },
-      "id": "ListLogsResponse"
-    },
-    "ListSinksResponse": {
-      "description": "Result returned from ListSinks.",
-      "type": "object",
-      "properties": {
-        "sinks": {
-          "description": "A list of sinks.",
-          "type": "array",
-          "items": {
-            "$ref": "LogSink"
-          }
-        },
-        "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": "ListSinksResponse"
-    },
-    "HttpRequest": {
-      "type": "object",
-      "properties": {
-        "cacheFillBytes": {
-          "description": "The number of HTTP response bytes inserted into cache. Set only when a cache fill was attempted.",
-          "format": "int64",
-          "type": "string"
-        },
-        "requestMethod": {
-          "type": "string",
-          "description": "The request method. Examples: \"GET\", \"HEAD\", \"PUT\", \"POST\"."
-        },
-        "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"
-        },
-        "requestSize": {
-          "type": "string",
-          "description": "The size of the HTTP request message in bytes, including the request headers and the request body.",
-          "format": "int64"
-        },
-        "requestUrl": {
-          "type": "string",
-          "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\"."
-        },
-        "serverIp": {
-          "type": "string",
-          "description": "The IP address (IPv4 or IPv6) of the origin server that the request was sent to."
-        },
-        "remoteIp": {
-          "description": "The IP address (IPv4 or IPv6) of the client that issued the HTTP request. Examples: \"192.168.1.1\", \"FE80::0202:B3FF:FE1E:8329\".",
-          "type": "string"
-        },
-        "cacheLookup": {
-          "description": "Whether or not a cache lookup was attempted.",
-          "type": "boolean"
-        },
-        "cacheHit": {
-          "description": "Whether or not an entity was served from cache (with or without validation).",
-          "type": "boolean"
-        },
-        "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."
-        },
-        "status": {
-          "type": "integer",
-          "description": "The response code indicating the status of response. Examples: 200, 404.",
-          "format": "int32"
-        },
-        "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"
-        },
-        "userAgent": {
-          "type": "string",
-          "description": "The user agent sent by the client. Example: \"Mozilla/4.0 (compatible; MSIE 6.0; Windows 98; Q312461; .NET CLR 1.0.3705)\"."
-        },
-        "latency": {
-          "type": "string",
-          "description": "The request processing latency on the server, from the time the request was received until the response was sent.",
-          "format": "google-duration"
-        }
-      },
-      "id": "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."
-    },
-    "LabelDescriptor": {
-      "type": "object",
-      "properties": {
-        "key": {
-          "description": "The label key.",
-          "type": "string"
-        },
-        "description": {
-          "type": "string",
-          "description": "A human-readable description for the label."
-        },
-        "valueType": {
-          "enum": [
-            "STRING",
-            "BOOL",
-            "INT64"
-          ],
-          "description": "The type of data that can be assigned to the label.",
-          "type": "string",
-          "enumDescriptions": [
-            "A variable-length string. This is the default.",
-            "Boolean; true or false.",
-            "A 64-bit signed integer."
-          ]
-        }
-      },
-      "id": "LabelDescriptor",
-      "description": "A description of a label."
-    },
-    "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.",
-      "type": "object",
-      "properties": {
-        "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}\"."
-        },
-        "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\"."
-        },
-        "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. The maximum length of this value is 256 characters.",
-          "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"
-          }
-        }
-      },
-      "id": "MonitoredResourceDescriptor"
-    },
-    "LogEntrySourceLocation": {
-      "description": "Additional information about the source code location that produced the log entry.",
-      "type": "object",
-      "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": {
-          "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",
-          "description": "Optional. Line within the source file. 1-based; 0 indicates no line number available.",
-          "format": "int64"
-        }
-      },
-      "id": "LogEntrySourceLocation"
-    },
-    "ListLogEntriesResponse": {
-      "type": "object",
-      "properties": {
-        "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."
-        },
-        "entries": {
-          "description": "A list of log entries.",
-          "type": "array",
-          "items": {
-            "$ref": "LogEntry"
-          }
-        }
-      },
-      "id": "ListLogEntriesResponse",
-      "description": "Result returned from ListLogEntries."
-    },
-    "LogLine": {
-      "type": "object",
-      "properties": {
-        "severity": {
-          "enum": [
-            "DEFAULT",
-            "DEBUG",
-            "INFO",
-            "NOTICE",
-            "WARNING",
-            "ERROR",
-            "CRITICAL",
-            "ALERT",
-            "EMERGENCY"
-          ],
-          "description": "Severity of this log entry.",
-          "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."
-          ]
-        },
-        "logMessage": {
-          "description": "App-provided log message.",
-          "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"
-        }
-      },
-      "id": "LogLine",
-      "description": "Application log line emitted while processing a request."
-    },
     "ListLogMetricsResponse": {
+      "description": "Result returned from ListLogMetrics.",
       "type": "object",
       "properties": {
         "metrics": {
@@ -361,24 +761,23 @@
           }
         },
         "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."
+          "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"
         }
       },
-      "id": "ListLogMetricsResponse",
-      "description": "Result returned from ListLogMetrics."
+      "id": "ListLogMetricsResponse"
     },
     "LogEntry": {
       "description": "An individual entry in a log.",
       "type": "object",
       "properties": {
         "httpRequest": {
-          "$ref": "HttpRequest",
-          "description": "Optional. Information about the HTTP request associated with this log entry, if applicable."
+          "description": "Optional. Information about the HTTP request associated with this log entry, if applicable.",
+          "$ref": "HttpRequest"
         },
         "resource": {
-          "$ref": "MonitoredResource",
-          "description": "Required. The monitored resource associated with 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."
+          "description": "Required. The monitored resource associated with 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"
         },
         "jsonPayload": {
           "additionalProperties": {
@@ -388,17 +787,17 @@
           "description": "The log entry payload, represented as a structure that is expressed as a JSON object.",
           "type": "object"
         },
-        "insertId": {
-          "type": "string",
-          "description": "Optional. A unique identifier for the log entry. If you provide a value, then Stackdriver Logging considers other log entries in the same project, with the same timestamp, and with the same insert_id to be duplicates which can be removed. If omitted in new log entries, then Stackdriver Logging will insert its own unique identifier. The insert_id is used to order log entries that have the same timestamp value."
-        },
         "operation": {
           "$ref": "LogEntryOperation",
           "description": "Optional. Information about an operation associated with the log entry, if applicable."
         },
-        "textPayload": {
+        "insertId": {
           "type": "string",
-          "description": "The log entry payload, represented as a Unicode string (UTF-8)."
+          "description": "Optional. A unique identifier for the log entry. If you provide a value, then Stackdriver Logging considers other log entries in the same project, with the same timestamp, and with the same insert_id to be duplicates which can be removed. If omitted in new log entries, then Stackdriver Logging will insert its own unique identifier. The insert_id is used to order log entries that have the same timestamp value."
+        },
+        "textPayload": {
+          "description": "The log entry payload, represented as a Unicode string (UTF-8).",
+          "type": "string"
         },
         "protoPayload": {
           "additionalProperties": {
@@ -409,15 +808,15 @@
           "type": "object"
         },
         "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"
+          "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"
         },
         "labels": {
-          "type": "object",
           "additionalProperties": {
             "type": "string"
           },
-          "description": "Optional. A set of user-defined (key, value) data that provides additional information about the log entry."
+          "description": "Optional. A set of user-defined (key, value) data that provides additional information about the log entry.",
+          "type": "object"
         },
         "severity": {
           "type": "string",
@@ -446,13 +845,13 @@
           "description": "Optional. The severity of the log entry. The default value is LogSeverity.DEFAULT."
         },
         "sourceLocation": {
-          "$ref": "LogEntrySourceLocation",
-          "description": "Optional. Source code location information associated with the log entry, if any."
+          "description": "Optional. Source code location information associated with the log entry, if any.",
+          "$ref": "LogEntrySourceLocation"
         },
         "timestamp": {
-          "type": "string",
           "description": "Optional. The time the event described by the log entry occurred. If omitted in a new log entry, Stackdriver Logging will insert the time the log entry is received. Stackdriver Logging might reject log entries whose time stamps are more than a couple of hours in the future. Log entries with time stamps in the past are accepted.",
-          "format": "google-datetime"
+          "format": "google-datetime",
+          "type": "string"
         },
         "logName": {
           "description": "Required. The resource name of the log to which this log entry belongs:\n\"projects/[PROJECT_ID]/logs/[LOG_ID]\"\n\"organizations/[ORGANIZATION_ID]/logs/[LOG_ID]\"\n\"billingAccounts/[BILLING_ACCOUNT_ID]/logs/[LOG_ID]\"\n\"folders/[FOLDER_ID]/logs/[LOG_ID]\"\n[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.",
@@ -462,10 +861,10 @@
       "id": "LogEntry"
     },
     "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:\nservice Foo {\n  rpc Bar(google.protobuf.Empty) returns (google.protobuf.Empty);\n}\nThe JSON representation for Empty is empty JSON object {}.",
       "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:\nservice Foo {\n  rpc Bar(google.protobuf.Empty) returns (google.protobuf.Empty);\n}\nThe JSON representation for Empty is empty JSON object {}."
+      "id": "Empty"
     },
     "SourceLocation": {
       "description": "Specifies a location in a source code file.",
@@ -476,8 +875,8 @@
           "type": "string"
         },
         "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)."
+          "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.",
@@ -488,6 +887,7 @@
       "id": "SourceLocation"
     },
     "ListLogEntriesRequest": {
+      "description": "The parameters to ListLogEntries.",
       "type": "object",
       "properties": {
         "resourceNames": {
@@ -522,51 +922,22 @@
           "type": "string"
         }
       },
-      "id": "ListLogEntriesRequest",
-      "description": "The parameters to ListLogEntries."
+      "id": "ListLogEntriesRequest"
     },
     "RequestLog": {
-      "description": "Complete log information about a single HTTP request to an App Engine application.",
       "type": "object",
       "properties": {
-        "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"
-        },
-        "finished": {
-          "type": "boolean",
-          "description": "Whether this request is finished or active."
-        },
-        "host": {
-          "type": "string",
-          "description": "Internet host and port number of the resource being requested."
-        },
-        "httpVersion": {
-          "description": "HTTP version of request. Example: \"HTTP/1.1\".",
-          "type": "string"
-        },
-        "startTime": {
-          "description": "Time when the request started.",
-          "format": "google-datetime",
-          "type": "string"
-        },
-        "latency": {
-          "type": "string",
-          "description": "Latency of the request.",
-          "format": "google-duration"
-        },
         "ip": {
-          "type": "string",
-          "description": "Origin IP address."
+          "description": "Origin IP address.",
+          "type": "string"
         },
         "appId": {
-          "type": "string",
-          "description": "Application that handled this request."
+          "description": "Application that handled this request.",
+          "type": "string"
         },
         "appEngineRelease": {
-          "type": "string",
-          "description": "App Engine release version."
+          "description": "App Engine release version.",
+          "type": "string"
         },
         "method": {
           "description": "Request method. Example: \"GET\", \"HEAD\", \"PUT\", \"POST\", \"DELETE\".",
@@ -582,9 +953,9 @@
           "description": "An identifier for the instance that handled the request."
         },
         "megaCycles": {
+          "type": "string",
           "description": "Number of CPU megacycles used to process request.",
-          "format": "int64",
-          "type": "string"
+          "format": "int64"
         },
         "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.",
@@ -604,8 +975,8 @@
           "type": "string"
         },
         "userAgent": {
-          "type": "string",
-          "description": "User agent that made the request."
+          "description": "User agent that made the request.",
+          "type": "string"
         },
         "wasLoadingRequest": {
           "description": "Whether this was a loading request for the instance.",
@@ -628,41 +999,41 @@
           "type": "string"
         },
         "line": {
+          "description": "A list of log lines emitted by the application while serving this request.",
           "type": "array",
           "items": {
             "$ref": "LogLine"
-          },
-          "description": "A list of log lines emitted by the application while serving this request."
-        },
-        "taskQueueName": {
-          "type": "string",
-          "description": "Queue name of the request, in the case of an offline request."
+          }
         },
         "referrer": {
-          "type": "string",
-          "description": "Referrer URL of request."
+          "description": "Referrer URL of request.",
+          "type": "string"
+        },
+        "taskQueueName": {
+          "description": "Queue name of the request, in the case of an offline request.",
+          "type": "string"
         },
         "requestId": {
-          "type": "string",
-          "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."
+          "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"
         },
         "nickname": {
-          "type": "string",
-          "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."
+          "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"
         },
-        "status": {
-          "type": "integer",
-          "description": "HTTP response status code. Example: 200, 404.",
-          "format": "int32"
+        "pendingTime": {
+          "description": "Time this request spent in the pending request queue.",
+          "format": "google-duration",
+          "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"
         },
-        "pendingTime": {
-          "type": "string",
-          "description": "Time this request spent in the pending request queue.",
-          "format": "google-duration"
+        "status": {
+          "type": "integer",
+          "description": "HTTP response status code. Example: 200, 404.",
+          "format": "int32"
         },
         "taskName": {
           "description": "Task name of the request, in the case of an offline request.",
@@ -671,24 +1042,52 @@
         "urlMapEntry": {
           "description": "File or class 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"
+        },
+        "host": {
+          "description": "Internet host and port number of the resource being requested.",
+          "type": "string"
+        },
+        "finished": {
+          "description": "Whether this request is finished or active.",
+          "type": "boolean"
+        },
+        "httpVersion": {
+          "description": "HTTP version of request. Example: \"HTTP/1.1\".",
+          "type": "string"
+        },
+        "startTime": {
+          "description": "Time when the request started.",
+          "format": "google-datetime",
+          "type": "string"
+        },
+        "latency": {
+          "type": "string",
+          "description": "Latency of the request.",
+          "format": "google-duration"
         }
       },
-      "id": "RequestLog"
+      "id": "RequestLog",
+      "description": "Complete log information about a single HTTP request to an App Engine application."
     },
     "ListMonitoredResourceDescriptorsResponse": {
       "description": "Result returned from ListMonitoredResourceDescriptors.",
       "type": "object",
       "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.",
           "type": "array",
           "items": {
             "$ref": "MonitoredResourceDescriptor"
           }
-        },
-        "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."
         }
       },
       "id": "ListMonitoredResourceDescriptorsResponse"
@@ -709,8 +1108,25 @@
       "id": "SourceReference"
     },
     "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.",
       "type": "object",
       "properties": {
+        "version": {
+          "description": "Output only. The API version that created or updated this metric. The version also dictates the syntax of the filter expression. When a value for this field is missing, the default value of V2 should be assumed.",
+          "type": "string",
+          "enumDescriptions": [
+            "Stackdriver Logging API v2.",
+            "Stackdriver Logging API v1."
+          ],
+          "enum": [
+            "V2",
+            "V1"
+          ]
+        },
+        "filter": {
+          "description": "Required. An advanced logs filter which is used to match log entries. Example:\n\"resource.type=gae_app AND severity\u003e=ERROR\"\nThe maximum length of the filter is 20000 characters.",
+          "type": "string"
+        },
         "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\"."
@@ -718,28 +1134,12 @@
         "description": {
           "description": "Optional. A description of this metric, which is used in documentation.",
           "type": "string"
-        },
-        "version": {
-          "enum": [
-            "V2",
-            "V1"
-          ],
-          "description": "Output only. The API version that created or updated this metric. The version also dictates the syntax of the filter expression. When a value for this field is missing, the default value of V2 should be assumed.",
-          "type": "string",
-          "enumDescriptions": [
-            "Stackdriver Logging API v2.",
-            "Stackdriver Logging API v1."
-          ]
-        },
-        "filter": {
-          "type": "string",
-          "description": "Required. An advanced logs filter which is used to match log entries. Example:\n\"resource.type=gae_app AND severity\u003e=ERROR\"\nThe maximum length of the filter is 20000 characters."
         }
       },
-      "id": "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."
+      "id": "LogMetric"
     },
     "LogEntryOperation": {
+      "description": "Additional information about a potentially long-running operation with which a log entry is associated.",
       "type": "object",
       "properties": {
         "last": {
@@ -751,772 +1151,372 @@
           "type": "string"
         },
         "producer": {
-          "type": "string",
-          "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\"."
+          "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": {
-          "type": "boolean",
-          "description": "Optional. Set this to True if this is the first log entry in the operation."
+          "description": "Optional. Set this to True if this is the first log entry in the operation.",
+          "type": "boolean"
         }
       },
-      "id": "LogEntryOperation",
-      "description": "Additional information about a potentially long-running operation with which a log entry is associated."
+      "id": "LogEntryOperation"
     },
     "WriteLogEntriesResponse": {
-      "type": "object",
-      "properties": {},
       "id": "WriteLogEntriesResponse",
-      "description": "Result returned from WriteLogEntries. empty"
+      "description": "Result returned from WriteLogEntries. empty",
+      "type": "object",
+      "properties": {}
+    },
+    "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\":\n{ \"type\": \"gce_instance\",\n  \"labels\": { \"instance_id\": \"12345678901234\",\n              \"zone\": \"us-central1-a\" }}\n",
+      "type": "object",
+      "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 Cloud SQL database is \"cloudsql_database\".",
+          "type": "string"
+        },
+        "labels": {
+          "additionalProperties": {
+            "type": "string"
+          },
+          "description": "Required. Values for all of the labels listed in the associated monitored resource descriptor. For example, Cloud SQL databases use the labels \"database_id\" and \"zone\".",
+          "type": "object"
+        }
+      },
+      "id": "MonitoredResource"
+    },
+    "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.",
+      "type": "object",
+      "properties": {
+        "writerIdentity": {
+          "description": "Output only. An IAM identity&mdash;a service account or group&mdash;under which Stackdriver Logging writes the exported log entries to the sink's destination. This field is set by sinks.create and sinks.update, based on the setting 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. Consult the destination service's documentation to determine the appropriate IAM roles to assign to the identity.",
+          "type": "string"
+        },
+        "startTime": {
+          "type": "string",
+          "description": "Optional. The time at which this sink will begin exporting log entries. Log entries are exported only if their timestamp is not earlier than the start time. The default value of this field is the time the sink is created or updated.",
+          "format": "google-datetime"
+        },
+        "outputVersionFormat": {
+          "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": "Optional. The log entry format to use for this sink's exported log entries. The v2 format is used by default. The v1 format is deprecated and should be used only as part of a migration effort to v2. See Migration to the v2 API.",
+          "type": "string"
+        },
+        "name": {
+          "type": "string",
+          "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."
+        },
+        "destination": {
+          "description": "Required. The export destination:\n\"storage.googleapis.com/[GCS_BUCKET]\"\n\"bigquery.googleapis.com/projects/[PROJECT_ID]/datasets/[DATASET]\"\n\"pubsub.googleapis.com/projects/[PROJECT_ID]/topics/[TOPIC_ID]\"\nThe 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.",
+          "type": "string"
+        },
+        "filter": {
+          "description": "Optional. An advanced logs filter. The only exported log entries are those that are in the resource owning the sink and that match the filter. The filter must use the log entry format specified by the output_version_format parameter. For example, in the v2 format:\nlogName=\"projects/[PROJECT_ID]/logs/[LOG_ID]\" AND severity\u003e=ERROR\n",
+          "type": "string"
+        },
+        "endTime": {
+          "description": "Optional. The time at which this sink will stop exporting log entries. Log entries are exported only if their timestamp is earlier than the end time. If this field is not supplied, there is no end time. If both a start time and an end time are provided, then the end time must be later than the start time.",
+          "format": "google-datetime",
+          "type": "string"
+        }
+      },
+      "id": "LogSink"
+    },
+    "WriteLogEntriesRequest": {
+      "type": "object",
+      "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:\n{ \"type\": \"gce_instance\",\n  \"labels\": {\n    \"zone\": \"us-central1-a\", \"instance_id\": \"00000000000000000000\" }}\nSee LogEntry.",
+          "$ref": "MonitoredResource"
+        },
+        "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:\n\"projects/[PROJECT_ID]/logs/[LOG_ID]\"\n\"organizations/[ORGANIZATION_ID]/logs/[LOG_ID]\"\n\"billingAccounts/[BILLING_ACCOUNT_ID]/logs/[LOG_ID]\"\n\"folders/[FOLDER_ID]/logs/[LOG_ID]\"\n[LOG_ID] must be URL-encoded. For example, \"projects/my-project-id/logs/syslog\" or \"organizations/1234567890/logs/cloudresourcemanager.googleapis.com%2Factivity\". For more information about log names, see LogEntry.",
+          "type": "string"
+        },
+        "entries": {
+          "type": "array",
+          "items": {
+            "$ref": "LogEntry"
+          },
+          "description": "Required. The log entries to write. Values supplied for the fields log_name, resource, and labels in this entries.write request are inserted into those log entries in this list that do not provide their own values.Stackdriver Logging also creates and inserts values for timestamp and insert_id if the entries do not provide them. The created insert_id for the N'th entry in this list will be greater than earlier entries and less than later entries. Otherwise, the order of log entries in this list does not matter.To improve throughput and to avoid exceeding the quota limit for calls to entries.write, you should write multiple log entries at once rather than calling this method for each individual log entry."
+        },
+        "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."
+        },
+        "labels": {
+          "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",
+          "additionalProperties": {
+            "type": "string"
+          }
+        }
+      },
+      "id": "WriteLogEntriesRequest",
+      "description": "The parameters to WriteLogEntries."
+    },
+    "ListLogsResponse": {
+      "description": "Result returned from ListLogs.",
+      "type": "object",
+      "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"
+        },
+        "logNames": {
+          "description": "A list of log names. For example, \"projects/my-project/syslog\" or \"organizations/123/cloudresourcemanager.googleapis.com%2Factivity\".",
+          "type": "array",
+          "items": {
+            "type": "string"
+          }
+        }
+      },
+      "id": "ListLogsResponse"
+    },
+    "ListSinksResponse": {
+      "description": "Result returned from ListSinks.",
+      "type": "object",
+      "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": {
+          "type": "array",
+          "items": {
+            "$ref": "LogSink"
+          },
+          "description": "A list of sinks."
+        }
+      },
+      "id": "ListSinksResponse"
+    },
+    "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.",
+      "type": "object",
+      "properties": {
+        "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"
+        },
+        "status": {
+          "description": "The response code indicating the status of response. Examples: 200, 404.",
+          "format": "int32",
+          "type": "integer"
+        },
+        "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"
+        },
+        "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"
+        },
+        "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"
+        },
+        "cacheFillBytes": {
+          "description": "The number of HTTP response bytes inserted into cache. Set only when a cache fill was attempted.",
+          "format": "int64",
+          "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"
+        },
+        "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"
+        },
+        "requestUrl": {
+          "type": "string",
+          "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\"."
+        },
+        "serverIp": {
+          "description": "The IP address (IPv4 or IPv6) of the origin server that the request was sent to.",
+          "type": "string"
+        },
+        "remoteIp": {
+          "description": "The IP address (IPv4 or IPv6) of the client that issued the HTTP request. Examples: \"192.168.1.1\", \"FE80::0202:B3FF:FE1E:8329\".",
+          "type": "string"
+        },
+        "cacheLookup": {
+          "description": "Whether or not a cache lookup was attempted.",
+          "type": "boolean"
+        },
+        "cacheHit": {
+          "description": "Whether or not an entity was served from cache (with or without validation).",
+          "type": "boolean"
+        }
+      },
+      "id": "HttpRequest"
+    },
+    "LabelDescriptor": {
+      "description": "A description of a label.",
+      "type": "object",
+      "properties": {
+        "key": {
+          "description": "The label key.",
+          "type": "string"
+        },
+        "description": {
+          "description": "A human-readable description for the label.",
+          "type": "string"
+        },
+        "valueType": {
+          "enumDescriptions": [
+            "A variable-length string. This is the default.",
+            "Boolean; true or false.",
+            "A 64-bit signed integer."
+          ],
+          "enum": [
+            "STRING",
+            "BOOL",
+            "INT64"
+          ],
+          "description": "The type of data that can be assigned to the label.",
+          "type": "string"
+        }
+      },
+      "id": "LabelDescriptor"
+    },
+    "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.",
+      "type": "object",
+      "properties": {
+        "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"
+        },
+        "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"
+        },
+        "description": {
+          "description": "Optional. A detailed description of the monitored resource type that might be used in documentation.",
+          "type": "string"
+        },
+        "type": {
+          "type": "string",
+          "description": "Required. The monitored resource type. For example, the type \"cloudsql_database\" represents databases in Google Cloud SQL. The maximum length of this value is 256 characters."
+        },
+        "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"
+          }
+        }
+      },
+      "id": "MonitoredResourceDescriptor"
+    },
+    "LogEntrySourceLocation": {
+      "properties": {
+        "file": {
+          "type": "string",
+          "description": "Optional. Source file name. Depending on the runtime environment, this might be a simple name or a fully-qualified name."
+        },
+        "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"
+        }
+      },
+      "id": "LogEntrySourceLocation",
+      "description": "Additional information about the source code location that produced the log entry.",
+      "type": "object"
+    },
+    "ListLogEntriesResponse": {
+      "description": "Result returned from ListLogEntries.",
+      "type": "object",
+      "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.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"
+        },
+        "entries": {
+          "type": "array",
+          "items": {
+            "$ref": "LogEntry"
+          },
+          "description": "A list of log entries."
+        }
+      },
+      "id": "ListLogEntriesResponse"
+    },
+    "LogLine": {
+      "description": "Application log line emitted while processing a request.",
+      "type": "object",
+      "properties": {
+        "severity": {
+          "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."
+          ],
+          "enum": [
+            "DEFAULT",
+            "DEBUG",
+            "INFO",
+            "NOTICE",
+            "WARNING",
+            "ERROR",
+            "CRITICAL",
+            "ALERT",
+            "EMERGENCY"
+          ],
+          "description": "Severity of this log entry."
+        },
+        "logMessage": {
+          "description": "App-provided log message.",
+          "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"
+        }
+      },
+      "id": "LogLine"
     }
   },
+  "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"
   },
-  "protocol": "rest",
-  "canonicalName": "Logging",
-  "auth": {
-    "oauth2": {
-      "scopes": {
-        "https://www.googleapis.com/auth/cloud-platform.read-only": {
-          "description": "View your data across Google Cloud Platform services"
-        },
-        "https://www.googleapis.com/auth/logging.admin": {
-          "description": "Administrate log data for your projects"
-        },
-        "https://www.googleapis.com/auth/logging.read": {
-          "description": "View log data for your projects"
-        },
-        "https://www.googleapis.com/auth/logging.write": {
-          "description": "Submit log data for your projects"
-        },
-        "https://www.googleapis.com/auth/cloud-platform": {
-          "description": "View and manage your data across Google Cloud Platform services"
-        }
-      }
-    }
-  },
-  "rootUrl": "https://logging.googleapis.com/",
-  "ownerDomain": "google.com",
-  "name": "logging",
-  "batchPath": "batch",
-  "title": "Stackdriver Logging API",
-  "ownerName": "Google",
-  "resources": {
-    "entries": {
-      "methods": {
-        "list": {
-          "flatPath": "v2beta1/entries:list",
-          "path": "v2beta1/entries:list",
-          "id": "logging.entries.list",
-          "request": {
-            "$ref": "ListLogEntriesRequest"
-          },
-          "description": "Lists log entries. Use this method to retrieve log entries from Stackdriver Logging. For ways to export log entries, see Exporting Logs.",
-          "response": {
-            "$ref": "ListLogEntriesResponse"
-          },
-          "parameterOrder": [],
-          "httpMethod": "POST",
-          "parameters": {},
-          "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": {
-          "httpMethod": "POST",
-          "parameterOrder": [],
-          "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"
-          ],
-          "parameters": {},
-          "flatPath": "v2beta1/entries:write",
-          "id": "logging.entries.write",
-          "path": "v2beta1/entries:write",
-          "description": "Writes log entries to Stackdriver Logging.",
-          "request": {
-            "$ref": "WriteLogEntriesRequest"
-          }
-        }
-      }
-    },
-    "projects": {
-      "resources": {
-        "logs": {
-          "methods": {
-            "delete": {
-              "httpMethod": "DELETE",
-              "parameterOrder": [
-                "logName"
-              ],
-              "response": {
-                "$ref": "Empty"
-              },
-              "scopes": [
-                "https://www.googleapis.com/auth/cloud-platform",
-                "https://www.googleapis.com/auth/logging.admin"
-              ],
-              "parameters": {
-                "logName": {
-                  "required": true,
-                  "type": "string",
-                  "pattern": "^projects/[^/]+/logs/[^/]+$",
-                  "location": "path",
-                  "description": "Required. The resource name of the log to delete:\n\"projects/[PROJECT_ID]/logs/[LOG_ID]\"\n\"organizations/[ORGANIZATION_ID]/logs/[LOG_ID]\"\n\"billingAccounts/[BILLING_ACCOUNT_ID]/logs/[LOG_ID]\"\n\"folders/[FOLDER_ID]/logs/[LOG_ID]\"\n[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."
-                }
-              },
-              "flatPath": "v2beta1/projects/{projectsId}/logs/{logsId}",
-              "id": "logging.projects.logs.delete",
-              "path": "v2beta1/{+logName}",
-              "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."
-            },
-            "list": {
-              "flatPath": "v2beta1/projects/{projectsId}/logs",
-              "path": "v2beta1/{+parent}/logs",
-              "id": "logging.projects.logs.list",
-              "description": "Lists the logs in projects, organizations, folders, or billing accounts. Only logs that have entries are listed.",
-              "response": {
-                "$ref": "ListLogsResponse"
-              },
-              "parameterOrder": [
-                "parent"
-              ],
-              "httpMethod": "GET",
-              "parameters": {
-                "parent": {
-                  "required": true,
-                  "type": "string",
-                  "pattern": "^projects/[^/]+$",
-                  "location": "path",
-                  "description": "Required. The resource name that owns the logs:\n\"projects/[PROJECT_ID]\"\n\"organizations/[ORGANIZATION_ID]\"\n\"billingAccounts/[BILLING_ACCOUNT_ID]\"\n\"folders/[FOLDER_ID]\"\n"
-                },
-                "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": {
-                  "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"
-                }
-              },
-              "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": {
-            "delete": {
-              "response": {
-                "$ref": "Empty"
-              },
-              "parameterOrder": [
-                "sinkName"
-              ],
-              "httpMethod": "DELETE",
-              "parameters": {
-                "sinkName": {
-                  "location": "path",
-                  "description": "Required. The full resource name of the sink to delete, including the parent resource and the sink identifier:\n\"projects/[PROJECT_ID]/sinks/[SINK_ID]\"\n\"organizations/[ORGANIZATION_ID]/sinks/[SINK_ID]\"\n\"billingAccounts/[BILLING_ACCOUNT_ID]/sinks/[SINK_ID]\"\n\"folders/[FOLDER_ID]/sinks/[SINK_ID]\"\nExample: \"projects/my-project-id/sinks/my-sink-id\".",
-                  "required": true,
-                  "type": "string",
-                  "pattern": "^projects/[^/]+/sinks/[^/]+$"
-                }
-              },
-              "scopes": [
-                "https://www.googleapis.com/auth/cloud-platform",
-                "https://www.googleapis.com/auth/logging.admin"
-              ],
-              "flatPath": "v2beta1/projects/{projectsId}/sinks/{sinksId}",
-              "path": "v2beta1/{+sinkName}",
-              "id": "logging.projects.sinks.delete",
-              "description": "Deletes a sink. If the sink has a unique writer_identity, then that service account is also deleted."
-            },
-            "list": {
-              "flatPath": "v2beta1/projects/{projectsId}/sinks",
-              "path": "v2beta1/{+parent}/sinks",
-              "id": "logging.projects.sinks.list",
-              "description": "Lists sinks.",
-              "response": {
-                "$ref": "ListSinksResponse"
-              },
-              "parameterOrder": [
-                "parent"
-              ],
-              "httpMethod": "GET",
-              "parameters": {
-                "parent": {
-                  "required": true,
-                  "type": "string",
-                  "pattern": "^projects/[^/]+$",
-                  "location": "path",
-                  "description": "Required. The parent resource whose sinks are to be listed:\n\"projects/[PROJECT_ID]\"\n\"organizations/[ORGANIZATION_ID]\"\n\"billingAccounts/[BILLING_ACCOUNT_ID]\"\n\"folders/[FOLDER_ID]\"\n"
-                },
-                "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"
-                }
-              },
-              "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": {
-              "flatPath": "v2beta1/projects/{projectsId}/sinks/{sinksId}",
-              "path": "v2beta1/{+sinkName}",
-              "id": "logging.projects.sinks.get",
-              "description": "Gets a sink.",
-              "response": {
-                "$ref": "LogSink"
-              },
-              "parameterOrder": [
-                "sinkName"
-              ],
-              "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": {
-                "sinkName": {
-                  "required": true,
-                  "type": "string",
-                  "pattern": "^projects/[^/]+/sinks/[^/]+$",
-                  "location": "path",
-                  "description": "Required. The resource name of the sink:\n\"projects/[PROJECT_ID]/sinks/[SINK_ID]\"\n\"organizations/[ORGANIZATION_ID]/sinks/[SINK_ID]\"\n\"billingAccounts/[BILLING_ACCOUNT_ID]/sinks/[SINK_ID]\"\n\"folders/[FOLDER_ID]/sinks/[SINK_ID]\"\nExample: \"projects/my-project-id/sinks/my-sink-id\"."
-                }
-              }
-            },
-            "update": {
-              "response": {
-                "$ref": "LogSink"
-              },
-              "parameterOrder": [
-                "sinkName"
-              ],
-              "httpMethod": "PUT",
-              "scopes": [
-                "https://www.googleapis.com/auth/cloud-platform",
-                "https://www.googleapis.com/auth/logging.admin"
-              ],
-              "parameters": {
-                "sinkName": {
-                  "location": "path",
-                  "description": "Required. The full resource name of the sink to update, including the parent resource and the sink identifier:\n\"projects/[PROJECT_ID]/sinks/[SINK_ID]\"\n\"organizations/[ORGANIZATION_ID]/sinks/[SINK_ID]\"\n\"billingAccounts/[BILLING_ACCOUNT_ID]/sinks/[SINK_ID]\"\n\"folders/[FOLDER_ID]/sinks/[SINK_ID]\"\nExample: \"projects/my-project-id/sinks/my-sink-id\".",
-                  "required": true,
-                  "type": "string",
-                  "pattern": "^projects/[^/]+/sinks/[^/]+$"
-                },
-                "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:\nIf 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.\nIf the old value is false and the new value is true, then writer_identity is changed to a unique service account.\nIt is an error if the old value is true and the new value is false.",
-                  "type": "boolean"
-                }
-              },
-              "flatPath": "v2beta1/projects/{projectsId}/sinks/{sinksId}",
-              "path": "v2beta1/{+sinkName}",
-              "id": "logging.projects.sinks.update",
-              "description": "Updates a sink. If the named sink doesn't exist, then this method is identical to sinks.create. If the named sink does exist, then this method replaces the following fields in the existing sink with values from the new sink: destination, filter, output_version_format, start_time, and end_time. The updated filter might also have a new writer_identity; see the unique_writer_identity field.",
-              "request": {
-                "$ref": "LogSink"
-              }
-            },
-            "create": {
-              "httpMethod": "POST",
-              "parameterOrder": [
-                "parent"
-              ],
-              "response": {
-                "$ref": "LogSink"
-              },
-              "scopes": [
-                "https://www.googleapis.com/auth/cloud-platform",
-                "https://www.googleapis.com/auth/logging.admin"
-              ],
-              "parameters": {
-                "parent": {
-                  "required": true,
-                  "type": "string",
-                  "pattern": "^projects/[^/]+$",
-                  "location": "path",
-                  "description": "Required. The resource in which to create the sink:\n\"projects/[PROJECT_ID]\"\n\"organizations/[ORGANIZATION_ID]\"\n\"billingAccounts/[BILLING_ACCOUNT_ID]\"\n\"folders/[FOLDER_ID]\"\nExamples: \"projects/my-logging-project\", \"organizations/123456789\"."
-                },
-                "uniqueWriterIdentity": {
-                  "type": "boolean",
-                  "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 Stackdriver 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."
-                }
-              },
-              "flatPath": "v2beta1/projects/{projectsId}/sinks",
-              "id": "logging.projects.sinks.create",
-              "path": "v2beta1/{+parent}/sinks",
-              "description": "Creates a sink that exports specified log entries to a destination. The export of newly-ingested log entries begins immediately, unless the current time is outside the sink's start and end times or 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"
-              }
-            }
-          }
-        },
-        "metrics": {
-          "methods": {
-            "list": {
-              "response": {
-                "$ref": "ListLogMetricsResponse"
-              },
-              "parameterOrder": [
-                "parent"
-              ],
-              "httpMethod": "GET",
-              "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": {
-                  "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"
-                },
-                "parent": {
-                  "location": "path",
-                  "description": "Required. The name of the project containing the metrics:\n\"projects/[PROJECT_ID]\"\n",
-                  "required": true,
-                  "type": "string",
-                  "pattern": "^projects/[^/]+$"
-                }
-              },
-              "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": "v2beta1/projects/{projectsId}/metrics",
-              "path": "v2beta1/{+parent}/metrics",
-              "id": "logging.projects.metrics.list",
-              "description": "Lists logs-based metrics."
-            },
-            "get": {
-              "description": "Gets a logs-based metric.",
-              "response": {
-                "$ref": "LogMetric"
-              },
-              "parameterOrder": [
-                "metricName"
-              ],
-              "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": {
-                "metricName": {
-                  "required": true,
-                  "type": "string",
-                  "pattern": "^projects/[^/]+/metrics/[^/]+$",
-                  "location": "path",
-                  "description": "The resource name of the desired metric:\n\"projects/[PROJECT_ID]/metrics/[METRIC_ID]\"\n"
-                }
-              },
-              "flatPath": "v2beta1/projects/{projectsId}/metrics/{metricsId}",
-              "path": "v2beta1/{+metricName}",
-              "id": "logging.projects.metrics.get"
-            },
-            "update": {
-              "flatPath": "v2beta1/projects/{projectsId}/metrics/{metricsId}",
-              "id": "logging.projects.metrics.update",
-              "path": "v2beta1/{+metricName}",
-              "request": {
-                "$ref": "LogMetric"
-              },
-              "description": "Creates or updates a logs-based metric.",
-              "httpMethod": "PUT",
-              "parameterOrder": [
-                "metricName"
-              ],
-              "response": {
-                "$ref": "LogMetric"
-              },
-              "parameters": {
-                "metricName": {
-                  "required": true,
-                  "type": "string",
-                  "pattern": "^projects/[^/]+/metrics/[^/]+$",
-                  "location": "path",
-                  "description": "The resource name of the metric to update:\n\"projects/[PROJECT_ID]/metrics/[METRIC_ID]\"\nThe 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."
-                }
-              },
-              "scopes": [
-                "https://www.googleapis.com/auth/cloud-platform",
-                "https://www.googleapis.com/auth/logging.admin",
-                "https://www.googleapis.com/auth/logging.write"
-              ]
-            },
-            "create": {
-              "httpMethod": "POST",
-              "parameterOrder": [
-                "parent"
-              ],
-              "response": {
-                "$ref": "LogMetric"
-              },
-              "parameters": {
-                "parent": {
-                  "required": true,
-                  "type": "string",
-                  "pattern": "^projects/[^/]+$",
-                  "location": "path",
-                  "description": "The resource name of the project in which to create the metric:\n\"projects/[PROJECT_ID]\"\nThe new metric must be provided in the request."
-                }
-              },
-              "scopes": [
-                "https://www.googleapis.com/auth/cloud-platform",
-                "https://www.googleapis.com/auth/logging.admin",
-                "https://www.googleapis.com/auth/logging.write"
-              ],
-              "flatPath": "v2beta1/projects/{projectsId}/metrics",
-              "id": "logging.projects.metrics.create",
-              "path": "v2beta1/{+parent}/metrics",
-              "request": {
-                "$ref": "LogMetric"
-              },
-              "description": "Creates a logs-based metric."
-            },
-            "delete": {
-              "httpMethod": "DELETE",
-              "parameterOrder": [
-                "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"
-              ],
-              "parameters": {
-                "metricName": {
-                  "required": true,
-                  "type": "string",
-                  "pattern": "^projects/[^/]+/metrics/[^/]+$",
-                  "location": "path",
-                  "description": "The resource name of the metric to delete:\n\"projects/[PROJECT_ID]/metrics/[METRIC_ID]\"\n"
-                }
-              },
-              "flatPath": "v2beta1/projects/{projectsId}/metrics/{metricsId}",
-              "id": "logging.projects.metrics.delete",
-              "path": "v2beta1/{+metricName}",
-              "description": "Deletes a logs-based metric."
-            }
-          }
-        }
-      }
-    },
-    "billingAccounts": {
-      "resources": {
-        "logs": {
-          "methods": {
-            "list": {
-              "httpMethod": "GET",
-              "parameterOrder": [
-                "parent"
-              ],
-              "response": {
-                "$ref": "ListLogsResponse"
-              },
-              "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."
-                },
-                "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"
-                },
-                "parent": {
-                  "location": "path",
-                  "description": "Required. The resource name that owns the logs:\n\"projects/[PROJECT_ID]\"\n\"organizations/[ORGANIZATION_ID]\"\n\"billingAccounts/[BILLING_ACCOUNT_ID]\"\n\"folders/[FOLDER_ID]\"\n",
-                  "required": true,
-                  "type": "string",
-                  "pattern": "^billingAccounts/[^/]+$"
-                }
-              },
-              "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": "v2beta1/billingAccounts/{billingAccountsId}/logs",
-              "id": "logging.billingAccounts.logs.list",
-              "path": "v2beta1/{+parent}/logs",
-              "description": "Lists the logs in projects, organizations, folders, or billing accounts. Only logs that have entries are listed."
-            },
-            "delete": {
-              "response": {
-                "$ref": "Empty"
-              },
-              "parameterOrder": [
-                "logName"
-              ],
-              "httpMethod": "DELETE",
-              "parameters": {
-                "logName": {
-                  "required": true,
-                  "type": "string",
-                  "pattern": "^billingAccounts/[^/]+/logs/[^/]+$",
-                  "location": "path",
-                  "description": "Required. The resource name of the log to delete:\n\"projects/[PROJECT_ID]/logs/[LOG_ID]\"\n\"organizations/[ORGANIZATION_ID]/logs/[LOG_ID]\"\n\"billingAccounts/[BILLING_ACCOUNT_ID]/logs/[LOG_ID]\"\n\"folders/[FOLDER_ID]/logs/[LOG_ID]\"\n[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."
-                }
-              },
-              "scopes": [
-                "https://www.googleapis.com/auth/cloud-platform",
-                "https://www.googleapis.com/auth/logging.admin"
-              ],
-              "flatPath": "v2beta1/billingAccounts/{billingAccountsId}/logs/{logsId}",
-              "path": "v2beta1/{+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."
-            }
-          }
-        }
-      }
-    },
-    "monitoredResourceDescriptors": {
-      "methods": {
-        "list": {
-          "flatPath": "v2beta1/monitoredResourceDescriptors",
-          "path": "v2beta1/monitoredResourceDescriptors",
-          "id": "logging.monitoredResourceDescriptors.list",
-          "description": "Lists the descriptors for monitored resource types used by Stackdriver Logging.",
-          "response": {
-            "$ref": "ListMonitoredResourceDescriptorsResponse"
-          },
-          "parameterOrder": [],
-          "httpMethod": "GET",
-          "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."
-            },
-            "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"
-            }
-          },
-          "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"
-          ]
-        }
-      }
-    },
-    "organizations": {
-      "resources": {
-        "logs": {
-          "methods": {
-            "list": {
-              "description": "Lists the logs in projects, organizations, folders, or billing accounts. Only logs that have entries are listed.",
-              "response": {
-                "$ref": "ListLogsResponse"
-              },
-              "parameterOrder": [
-                "parent"
-              ],
-              "httpMethod": "GET",
-              "parameters": {
-                "parent": {
-                  "required": true,
-                  "type": "string",
-                  "pattern": "^organizations/[^/]+$",
-                  "location": "path",
-                  "description": "Required. The resource name that owns the logs:\n\"projects/[PROJECT_ID]\"\n\"organizations/[ORGANIZATION_ID]\"\n\"billingAccounts/[BILLING_ACCOUNT_ID]\"\n\"folders/[FOLDER_ID]\"\n"
-                },
-                "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": {
-                  "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"
-                }
-              },
-              "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": "v2beta1/organizations/{organizationsId}/logs",
-              "path": "v2beta1/{+parent}/logs",
-              "id": "logging.organizations.logs.list"
-            },
-            "delete": {
-              "response": {
-                "$ref": "Empty"
-              },
-              "parameterOrder": [
-                "logName"
-              ],
-              "httpMethod": "DELETE",
-              "scopes": [
-                "https://www.googleapis.com/auth/cloud-platform",
-                "https://www.googleapis.com/auth/logging.admin"
-              ],
-              "parameters": {
-                "logName": {
-                  "location": "path",
-                  "description": "Required. The resource name of the log to delete:\n\"projects/[PROJECT_ID]/logs/[LOG_ID]\"\n\"organizations/[ORGANIZATION_ID]/logs/[LOG_ID]\"\n\"billingAccounts/[BILLING_ACCOUNT_ID]/logs/[LOG_ID]\"\n\"folders/[FOLDER_ID]/logs/[LOG_ID]\"\n[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": "v2beta1/organizations/{organizationsId}/logs/{logsId}",
-              "path": "v2beta1/{+logName}",
-              "id": "logging.organizations.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."
-            }
-          }
-        }
-      }
-    }
-  },
-  "parameters": {
-    "fields": {
-      "location": "query",
-      "description": "Selector specifying which fields to include in a partial response.",
-      "type": "string"
-    },
-    "uploadType": {
-      "location": "query",
-      "description": "Legacy upload protocol for media (e.g. \"media\", \"multipart\").",
-      "type": "string"
-    },
-    "$.xgafv": {
-      "type": "string",
-      "enumDescriptions": [
-        "v1 error format",
-        "v2 error format"
-      ],
-      "location": "query",
-      "enum": [
-        "1",
-        "2"
-      ],
-      "description": "V1 error format."
-    },
-    "callback": {
-      "type": "string",
-      "location": "query",
-      "description": "JSONP"
-    },
-    "alt": {
-      "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",
-      "description": "Data format for response.",
-      "default": "json"
-    },
-    "access_token": {
-      "type": "string",
-      "location": "query",
-      "description": "OAuth access token."
-    },
-    "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"
-    },
-    "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"
-    },
-    "pp": {
-      "type": "boolean",
-      "default": "true",
-      "location": "query",
-      "description": "Pretty-print response."
-    },
-    "oauth_token": {
-      "location": "query",
-      "description": "OAuth 2.0 token for the current user.",
-      "type": "string"
-    },
-    "bearer_token": {
-      "type": "string",
-      "location": "query",
-      "description": "OAuth bearer token."
-    },
-    "upload_protocol": {
-      "type": "string",
-      "location": "query",
-      "description": "Upload protocol for media (e.g. \"raw\", \"multipart\")."
-    },
-    "prettyPrint": {
-      "location": "query",
-      "description": "Returns response with indentations and line breaks.",
-      "type": "boolean",
-      "default": "true"
-    }
-  },
-  "version": "v2beta1",
-  "baseUrl": "https://logging.googleapis.com/",
-  "servicePath": "",
-  "description": "Writes log entries and manages your Stackdriver Logging configuration.",
-  "kind": "discovery#restDescription",
-  "basePath": ""
+  "canonicalName": "Logging"
 }
diff --git a/logging/v2beta1/logging-gen.go b/logging/v2beta1/logging-gen.go
index bddc718..55cb1f8 100644
--- a/logging/v2beta1/logging-gen.go
+++ b/logging/v2beta1/logging-gen.go
@@ -77,10 +77,9 @@
 }
 
 type Service struct {
-	client                    *http.Client
-	BasePath                  string // API endpoint base URL
-	UserAgent                 string // optional additional User-Agent fragment
-	GoogleClientHeaderElement string // client header fragment, for Google use only
+	client    *http.Client
+	BasePath  string // API endpoint base URL
+	UserAgent string // optional additional User-Agent fragment
 
 	BillingAccounts *BillingAccountsService
 
@@ -100,10 +99,6 @@
 	return googleapi.UserAgent + " " + s.UserAgent
 }
 
-func (s *Service) clientHeader() string {
-	return gensupport.GoogleClientHeader("20170210", s.GoogleClientHeaderElement)
-}
-
 func NewBillingAccountsService(s *Service) *BillingAccountsService {
 	rs := &BillingAccountsService{s: s}
 	rs.Logs = NewBillingAccountsLogsService(s)
@@ -1520,7 +1515,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	var body io.Reader = nil
 	c.urlParams_.Set("alt", alt)
 	urls := googleapi.ResolveRelative(c.s.BasePath, "v2beta1/{+logName}")
@@ -1678,7 +1672,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	if c.ifNoneMatch_ != "" {
 		reqHeaders.Set("If-None-Match", c.ifNoneMatch_)
 	}
@@ -1844,7 +1837,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	var body io.Reader = nil
 	body, err := googleapi.WithoutDataWrapper.JSONReader(c.listlogentriesrequest)
 	if err != nil {
@@ -1989,7 +1981,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	var body io.Reader = nil
 	body, err := googleapi.WithoutDataWrapper.JSONReader(c.writelogentriesrequest)
 	if err != nil {
@@ -2141,7 +2132,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	if c.ifNoneMatch_ != "" {
 		reqHeaders.Set("If-None-Match", c.ifNoneMatch_)
 	}
@@ -2297,7 +2287,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	var body io.Reader = nil
 	c.urlParams_.Set("alt", alt)
 	urls := googleapi.ResolveRelative(c.s.BasePath, "v2beta1/{+logName}")
@@ -2455,7 +2444,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	if c.ifNoneMatch_ != "" {
 		reqHeaders.Set("If-None-Match", c.ifNoneMatch_)
 	}
@@ -2621,7 +2609,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	var body io.Reader = nil
 	c.urlParams_.Set("alt", alt)
 	urls := googleapi.ResolveRelative(c.s.BasePath, "v2beta1/{+logName}")
@@ -2779,7 +2766,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	if c.ifNoneMatch_ != "" {
 		reqHeaders.Set("If-None-Match", c.ifNoneMatch_)
 	}
@@ -2945,7 +2931,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	var body io.Reader = nil
 	body, err := googleapi.WithoutDataWrapper.JSONReader(c.logmetric)
 	if err != nil {
@@ -3081,7 +3066,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	var body io.Reader = nil
 	c.urlParams_.Set("alt", alt)
 	urls := googleapi.ResolveRelative(c.s.BasePath, "v2beta1/{+metricName}")
@@ -3220,7 +3204,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	if c.ifNoneMatch_ != "" {
 		reqHeaders.Set("If-None-Match", c.ifNoneMatch_)
 	}
@@ -3382,7 +3365,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	if c.ifNoneMatch_ != "" {
 		reqHeaders.Set("If-None-Match", c.ifNoneMatch_)
 	}
@@ -3548,7 +3530,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	var body io.Reader = nil
 	body, err := googleapi.WithoutDataWrapper.JSONReader(c.logmetric)
 	if err != nil {
@@ -3708,7 +3689,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	var body io.Reader = nil
 	body, err := googleapi.WithoutDataWrapper.JSONReader(c.logsink)
 	if err != nil {
@@ -3849,7 +3829,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	var body io.Reader = nil
 	c.urlParams_.Set("alt", alt)
 	urls := googleapi.ResolveRelative(c.s.BasePath, "v2beta1/{+sinkName}")
@@ -3987,7 +3966,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	if c.ifNoneMatch_ != "" {
 		reqHeaders.Set("If-None-Match", c.ifNoneMatch_)
 	}
@@ -4149,7 +4127,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	if c.ifNoneMatch_ != "" {
 		reqHeaders.Set("If-None-Match", c.ifNoneMatch_)
 	}
@@ -4336,7 +4313,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	var body io.Reader = nil
 	body, err := googleapi.WithoutDataWrapper.JSONReader(c.logsink)
 	if err != nil {
diff --git a/manufacturers/v1/manufacturers-api.json b/manufacturers/v1/manufacturers-api.json
index 9d8c674..c7e3ca6 100644
--- a/manufacturers/v1/manufacturers-api.json
+++ b/manufacturers/v1/manufacturers-api.json
@@ -1,4 +1,8 @@
 {
+  "ownerDomain": "google.com",
+  "name": "manufacturers",
+  "batchPath": "batch",
+  "title": "Manufacturer Center API",
   "ownerName": "Google",
   "resources": {
     "accounts": {
@@ -6,6 +10,7 @@
         "products": {
           "methods": {
             "list": {
+              "description": "Lists all the products in a Manufacturer Center account.",
               "response": {
                 "$ref": "ListProductsResponse"
               },
@@ -18,9 +23,9 @@
               ],
               "parameters": {
                 "pageToken": {
-                  "description": "The token returned by the previous request.",
                   "type": "string",
-                  "location": "query"
+                  "location": "query",
+                  "description": "The token returned by the previous request."
                 },
                 "pageSize": {
                   "description": "Maximum number of product statuses to return in the response, used for\npaging.",
@@ -29,50 +34,49 @@
                   "location": "query"
                 },
                 "parent": {
-                  "pattern": "^accounts/[^/]+$",
                   "location": "path",
                   "description": "Parent ID in the format `accounts/{account_id}`.\n\n`account_id` - The ID of the Manufacturer Center account.",
                   "required": true,
-                  "type": "string"
+                  "type": "string",
+                  "pattern": "^accounts/[^/]+$"
                 }
               },
               "flatPath": "v1/accounts/{accountsId}/products",
               "path": "v1/{+parent}/products",
-              "id": "manufacturers.accounts.products.list",
-              "description": "Lists all the products in a Manufacturer Center account."
+              "id": "manufacturers.accounts.products.list"
             },
             "get": {
-              "parameterOrder": [
-                "parent",
-                "name"
-              ],
+              "description": "Gets the product from a Manufacturer Center account, including product\nissues.",
               "httpMethod": "GET",
               "response": {
                 "$ref": "Product"
               },
+              "parameterOrder": [
+                "parent",
+                "name"
+              ],
+              "scopes": [
+                "https://www.googleapis.com/auth/manufacturercenter"
+              ],
               "parameters": {
-                "name": {
-                  "pattern": "^[^/]+$",
-                  "location": "path",
-                  "description": "Name in the format `{target_country}:{content_language}:{product_id}`.\n\n`target_country`   - The target country of the product as a CLDR territory\n                     code (for example, US).\n\n`content_language` - The content language of the product as a two-letter\n                     ISO 639-1 language code (for example, en).\n\n`product_id`     -   The ID of the product. For more information, see\n                     https://support.google.com/manufacturers/answer/6124116#id.",
-                  "required": true,
-                  "type": "string"
-                },
                 "parent": {
                   "description": "Parent ID in the format `accounts/{account_id}`.\n\n`account_id` - The ID of the Manufacturer Center account.",
                   "required": true,
                   "type": "string",
                   "pattern": "^accounts/[^/]+$",
                   "location": "path"
+                },
+                "name": {
+                  "description": "Name in the format `{target_country}:{content_language}:{product_id}`.\n\n`target_country`   - The target country of the product as a CLDR territory\n                     code (for example, US).\n\n`content_language` - The content language of the product as a two-letter\n                     ISO 639-1 language code (for example, en).\n\n`product_id`     -   The ID of the product. For more information, see\n                     https://support.google.com/manufacturers/answer/6124116#id.",
+                  "required": true,
+                  "type": "string",
+                  "pattern": "^[^/]+$",
+                  "location": "path"
                 }
               },
-              "scopes": [
-                "https://www.googleapis.com/auth/manufacturercenter"
-              ],
               "flatPath": "v1/accounts/{accountsId}/products/{productsId}",
-              "path": "v1/{+parent}/products/{+name}",
               "id": "manufacturers.accounts.products.get",
-              "description": "Gets the product from a Manufacturer Center account, including product\nissues."
+              "path": "v1/{+parent}/products/{+name}"
             }
           }
         }
@@ -81,27 +85,33 @@
   },
   "parameters": {
     "upload_protocol": {
+      "location": "query",
       "description": "Upload protocol for media (e.g. \"raw\", \"multipart\").",
-      "type": "string",
-      "location": "query"
+      "type": "string"
     },
     "prettyPrint": {
-      "description": "Returns response with indentations and line breaks.",
       "type": "boolean",
       "default": "true",
-      "location": "query"
-    },
-    "fields": {
       "location": "query",
-      "description": "Selector specifying which fields to include in a partial response.",
-      "type": "string"
+      "description": "Returns response with indentations and line breaks."
     },
     "uploadType": {
       "location": "query",
       "description": "Legacy upload protocol for media (e.g. \"media\", \"multipart\").",
       "type": "string"
     },
+    "fields": {
+      "location": "query",
+      "description": "Selector specifying which fields to include in a partial response.",
+      "type": "string"
+    },
+    "callback": {
+      "description": "JSONP",
+      "type": "string",
+      "location": "query"
+    },
     "$.xgafv": {
+      "type": "string",
       "enumDescriptions": [
         "v1 error format",
         "v2 error format"
@@ -111,13 +121,7 @@
         "1",
         "2"
       ],
-      "description": "V1 error format.",
-      "type": "string"
-    },
-    "callback": {
-      "description": "JSONP",
-      "type": "string",
-      "location": "query"
+      "description": "V1 error format."
     },
     "alt": {
       "enum": [
@@ -136,9 +140,9 @@
       "default": "json"
     },
     "access_token": {
+      "location": "query",
       "description": "OAuth access token.",
-      "type": "string",
-      "location": "query"
+      "type": "string"
     },
     "key": {
       "location": "query",
@@ -146,15 +150,15 @@
       "type": "string"
     },
     "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",
-      "location": "query"
+      "type": "string"
     },
     "pp": {
-      "location": "query",
       "description": "Pretty-print response.",
       "type": "boolean",
-      "default": "true"
+      "default": "true",
+      "location": "query"
     },
     "oauth_token": {
       "location": "query",
@@ -169,127 +173,209 @@
   },
   "version": "v1",
   "baseUrl": "https://manufacturers.googleapis.com/",
-  "servicePath": "",
   "kind": "discovery#restDescription",
   "description": "Public API for managing Manufacturer Center related data.",
+  "servicePath": "",
   "basePath": "",
+  "revision": "20170322",
   "documentationLink": "https://developers.google.com/manufacturers/",
-  "revision": "20161028",
   "id": "manufacturers:v1",
   "discoveryVersion": "v1",
   "version_module": "True",
   "schemas": {
-    "Issue": {
-      "description": "Product issue.",
+    "Price": {
+      "id": "Price",
+      "description": "A price.",
       "type": "object",
       "properties": {
-        "attribute": {
-          "description": "If present, the attribute that triggered the issue. For more information\nabout attributes, see\nhttps://support.google.com/manufacturers/answer/6124116.",
+        "currency": {
+          "description": "The currency in which the price is denoted.",
           "type": "string"
         },
-        "severity": {
+        "amount": {
+          "description": "The numeric value of the price.",
+          "type": "string"
+        }
+      }
+    },
+    "Image": {
+      "properties": {
+        "status": {
           "enumDescriptions": [
-            "Unspecified severity, never used.",
-            "Error severity. The issue prevents the usage of the whole item.",
-            "Warning severity. The issue is either one that prevents the usage of the\nattribute that triggered it or one that will soon prevent the usage of\nthe whole item.",
-            "Info severity. The issue is one that doesn't require immediate attention.\nIt is, for example, used to communicate which attributes are still\npending review."
+            "Status is unspecified. Should not be used.",
+            "Image was uploaded and is being processed.",
+            "The image crawl is still pending.",
+            "The image was processed and it meets the requirements.",
+            "The image URL is protected by robots.txt file and cannot be crawled.",
+            "The image URL is protected by X-Robots-Tag and cannot be crawled.",
+            "There was an error while crawling the image.",
+            "The image cannot be processed.",
+            "The image cannot be decoded.",
+            "The image is too big.",
+            "The image was manually overridden and will not be crawled."
           ],
           "enum": [
-            "SEVERITY_UNSPECIFIED",
-            "ERROR",
-            "WARNING",
-            "INFO"
+            "STATUS_UNSPECIFIED",
+            "PENDING_PROCESSING",
+            "PENDING_CRAWL",
+            "OK",
+            "ROBOTED",
+            "XROBOTED",
+            "CRAWL_ERROR",
+            "PROCESSING_ERROR",
+            "DECODING_ERROR",
+            "TOO_BIG",
+            "CRAWL_SKIPPED"
           ],
-          "description": "The severity of the issue.",
-          "type": "string"
-        },
-        "description": {
-          "description": "Description of the issue.",
+          "description": "The status of the image.\n@OutputOnly",
           "type": "string"
         },
         "type": {
-          "description": "The server-generated type of the issue, for example,\n“INCORRECT_TEXT_FORMATTING”, “IMAGE_NOT_SERVEABLE”, etc.",
+          "enumDescriptions": [
+            "Type is unspecified. Should not be used.",
+            "The image was crawled from a provided URL.",
+            "The image was uploaded."
+          ],
+          "enum": [
+            "TYPE_UNSPECIFIED",
+            "CRAWLED",
+            "UPLOADED"
+          ],
+          "description": "The type of the image, i.e., crawled or uploaded.\n@OutputOnly",
+          "type": "string"
+        },
+        "imageUrl": {
+          "description": "The URL of the image. For crawled images, this is the provided URL. For\nuploaded images, this is a serving URL from Google if the image has been\nprocessed successfully.",
           "type": "string"
         }
       },
-      "id": "Issue"
-    },
-    "Product": {
-      "properties": {
-        "name": {
-          "description": "Name in the format `{target_country}:{content_language}:{product_id}`.\n\n`target_country`   - The target country of the product as a CLDR territory\n                     code (for example, US).\n\n`content_language` - The content language of the product as a two-letter\n                     ISO 639-1 language code (for example, en).\n\n`product_id`     -   The ID of the product. For more information, see\n                     https://support.google.com/manufacturers/answer/6124116#id.\n@OutputOnly",
-          "type": "string"
-        },
-        "issues": {
-          "description": "A server-generated list of issues associated with the product.\n@OutputOnly",
-          "type": "array",
-          "items": {
-            "$ref": "Issue"
-          }
-        },
-        "manuallyDeletedAttributes": {
-          "description": "Names of the attributes of the product deleted manually via the\nManufacturer Center UI.\n@OutputOnly",
-          "type": "array",
-          "items": {
-            "type": "string"
-          }
-        },
-        "finalAttributes": {
-          "$ref": "Attributes",
-          "description": "Final attributes of the product. The final attributes are obtained by\noverriding the uploaded attributes with the manually provided and deleted\nattributes. Google systems only process, evaluate, review, and/or use final\nattributes.\n@OutputOnly"
-        },
-        "productId": {
-          "description": "The ID of the product. For more information, see\nhttps://support.google.com/manufacturers/answer/6124116#id.\n@OutputOnly",
-          "type": "string"
-        },
-        "uploadedAttributes": {
-          "description": "Attributes of the product uploaded via the Manufacturer Center API or via\nfeeds.",
-          "$ref": "Attributes"
-        },
-        "parent": {
-          "description": "Parent ID in the format `accounts/{account_id}`.\n\n`account_id` - The ID of the Manufacturer Center account.\n@OutputOnly",
-          "type": "string"
-        },
-        "manuallyProvidedAttributes": {
-          "description": "Attributes of the product provided manually via the Manufacturer Center UI.\n@OutputOnly",
-          "$ref": "Attributes"
-        },
-        "contentLanguage": {
-          "description": "The content language of the product as a two-letter ISO 639-1 language code\n(for example, en).\n@OutputOnly",
-          "type": "string"
-        },
-        "targetCountry": {
-          "description": "The target country of the product as a CLDR territory code (for example,\nUS).\n@OutputOnly",
-          "type": "string"
-        }
-      },
-      "id": "Product",
-      "description": "Product data.",
+      "id": "Image",
+      "description": "An image.",
       "type": "object"
     },
     "Attributes": {
       "description": "Attributes of the product. For more information, see\nhttps://support.google.com/manufacturers/answer/6124116.",
       "type": "object",
       "properties": {
-        "productName": {
-          "description": "The canonical name of the product. For more information, see\nhttps://support.google.com/manufacturers/answer/6124116#productname.",
+        "theme": {
+          "type": "string",
+          "description": "The theme of the product. For more information, see\nhttps://support.google.com/manufacturers/answer/6124116#theme."
+        },
+        "pattern": {
+          "description": "The pattern of the product. For more information, see\nhttps://support.google.com/manufacturers/answer/6124116#pattern.",
           "type": "string"
         },
+        "imageLink": {
+          "$ref": "Image",
+          "description": "The image of the product. For more information, see\nhttps://support.google.com/manufacturers/answer/6124116#image."
+        },
         "productType": {
-          "description": "The manufacturer's category of the product. For more information, see\nhttps://support.google.com/manufacturers/answer/6124116#producttype.",
+          "type": "array",
+          "items": {
+            "type": "string"
+          },
+          "description": "The category of the product. For more information, see\nhttps://support.google.com/manufacturers/answer/6124116#producttype."
+        },
+        "format": {
+          "description": "The format of the product. For more information, see\nhttps://support.google.com/manufacturers/answer/6124116#format.",
+          "type": "string"
+        },
+        "additionalImageLink": {
+          "description": "The additional images of the product. For more information, see\nhttps://support.google.com/manufacturers/answer/6124116#addlimage.",
+          "type": "array",
+          "items": {
+            "$ref": "Image"
+          }
+        },
+        "videoLink": {
+          "description": "The videos of the product. For more information, see\nhttps://support.google.com/manufacturers/answer/6124116#video.",
           "type": "array",
           "items": {
             "type": "string"
           }
         },
+        "color": {
+          "description": "The color of the product. For more information, see\nhttps://support.google.com/manufacturers/answer/6124116#color.",
+          "type": "string"
+        },
+        "productName": {
+          "description": "The canonical name of the product. For more information, see\nhttps://support.google.com/manufacturers/answer/6124116#productname.",
+          "type": "string"
+        },
+        "sizeType": {
+          "description": "The size type of the product. For more information, see\nhttps://support.google.com/manufacturers/answer/6124116#sizetype.",
+          "type": "string"
+        },
+        "suggestedRetailPrice": {
+          "description": "The suggested retail price (MSRP) of the product. For more information,\nsee https://support.google.com/manufacturers/answer/6124116#price.",
+          "$ref": "Price"
+        },
+        "featureDescription": {
+          "description": "The rich format description of the product. For more information, see\nhttps://support.google.com/manufacturers/answer/6124116#featuredesc.",
+          "type": "array",
+          "items": {
+            "$ref": "FeatureDescription"
+          }
+        },
+        "size": {
+          "description": "The size of the product. For more information, see\nhttps://support.google.com/manufacturers/answer/6124116#size.",
+          "type": "string"
+        },
+        "title": {
+          "description": "The title of the product. For more information, see\nhttps://support.google.com/manufacturers/answer/6124116#title.",
+          "type": "string"
+        },
+        "count": {
+          "description": "The count of the product. For more information, see\nhttps://support.google.com/manufacturers/answer/6124116#count.",
+          "$ref": "Count"
+        },
+        "brand": {
+          "description": "The brand name of the product. For more information, see\nhttps://support.google.com/manufacturers/answer/6124116#brand.",
+          "type": "string"
+        },
+        "disclosureDate": {
+          "description": "The disclosure date of the product. For more information, see\nhttps://support.google.com/manufacturers/answer/6124116#disclosure.",
+          "type": "string"
+        },
+        "material": {
+          "description": "The material of the product. For more information, see\nhttps://support.google.com/manufacturers/answer/6124116#material.",
+          "type": "string"
+        },
+        "scent": {
+          "description": "The scent of the product. For more information, see\n https://support.google.com/manufacturers/answer/6124116#scent.",
+          "type": "string"
+        },
+        "ageGroup": {
+          "description": "The target age group of the product. For more information, see\nhttps://support.google.com/manufacturers/answer/6124116#agegroup.",
+          "type": "string"
+        },
+        "productDetail": {
+          "description": "The details of the product. For more information, see\nhttps://support.google.com/manufacturers/answer/6124116#productdetail.",
+          "type": "array",
+          "items": {
+            "$ref": "ProductDetail"
+          }
+        },
+        "flavor": {
+          "description": "The flavor of the product. For more information, see\nhttps://support.google.com/manufacturers/answer/6124116#flavor.",
+          "type": "string"
+        },
         "productPageUrl": {
-          "description": "The URL of the manufacturer's detail page of the product. For more\ninformation, see\nhttps://support.google.com/manufacturers/answer/6124116#productpage.",
+          "description": "The URL of the detail page of the product. For more information, see\nhttps://support.google.com/manufacturers/answer/6124116#productpage.",
           "type": "string"
         },
         "mpn": {
           "description": "The Manufacturer Part Number (MPN) of the product. For more information,\nsee https://support.google.com/manufacturers/answer/6124116#mpn.",
           "type": "string"
         },
+        "releaseDate": {
+          "description": "The release date of the product. For more information, see\nhttps://support.google.com/manufacturers/answer/6124116#release.",
+          "type": "string"
+        },
+        "itemGroupId": {
+          "description": "The item group id of the product. For more information, see\nhttps://support.google.com/manufacturers/answer/6124116#itemgroupid.",
+          "type": "string"
+        },
         "gtin": {
           "description": "The Global Trade Item Number (GTIN) of the product. For more information,\nsee https://support.google.com/manufacturers/answer/6124116#gtin.",
           "type": "array",
@@ -297,21 +383,114 @@
             "type": "string"
           }
         },
-        "title": {
-          "description": "The title of the product. For more information, see\nhttps://support.google.com/manufacturers/answer/6124116#title.",
-          "type": "string"
-        },
         "productLine": {
           "description": "The name of the group of products related to the product. For more\ninformation, see\nhttps://support.google.com/manufacturers/answer/6124116#productline.",
           "type": "string"
         },
-        "brand": {
-          "description": "The brand name of the product. For more information, see\nhttps://support.google.com/manufacturers/answer/6124116#brand.",
+        "capacity": {
+          "$ref": "Capacity",
+          "description": "The capacity of the product. For more information, see\nhttps://support.google.com/manufacturers/answer/6124116#capacity."
+        },
+        "description": {
+          "description": "The description of the product. For more information, see\nhttps://support.google.com/manufacturers/answer/6124116#description.",
           "type": "string"
+        },
+        "gender": {
+          "description": "The target gender of the product. For more information, see\nhttps://support.google.com/manufacturers/answer/6124116#gender.",
+          "type": "string"
+        },
+        "sizeSystem": {
+          "type": "string",
+          "description": "The size system of the product. For more information, see\nhttps://support.google.com/manufacturers/answer/6124116#sizesystem."
         }
       },
       "id": "Attributes"
     },
+    "Count": {
+      "id": "Count",
+      "description": "The number of products in a single package. For more information, see\nhttps://support.google.com/manufacturers/answer/6124116#count.",
+      "type": "object",
+      "properties": {
+        "value": {
+          "type": "string",
+          "description": "The numeric value of the number of products in a package.",
+          "format": "int64"
+        },
+        "unit": {
+          "type": "string",
+          "description": "The unit in which these products are counted."
+        }
+      }
+    },
+    "Product": {
+      "description": "Product data.",
+      "type": "object",
+      "properties": {
+        "uploadedAttributes": {
+          "$ref": "Attributes",
+          "description": "Attributes of the product uploaded via the Manufacturer Center API or via\nfeeds."
+        },
+        "parent": {
+          "description": "Parent ID in the format `accounts/{account_id}`.\n\n`account_id` - The ID of the Manufacturer Center account.\n@OutputOnly",
+          "type": "string"
+        },
+        "manuallyProvidedAttributes": {
+          "$ref": "Attributes",
+          "description": "Attributes of the product provided manually via the Manufacturer Center UI.\n@OutputOnly"
+        },
+        "contentLanguage": {
+          "description": "The content language of the product as a two-letter ISO 639-1 language code\n(for example, en).\n@OutputOnly",
+          "type": "string"
+        },
+        "targetCountry": {
+          "description": "The target country of the product as a CLDR territory code (for example,\nUS).\n@OutputOnly",
+          "type": "string"
+        },
+        "name": {
+          "description": "Name in the format `{target_country}:{content_language}:{product_id}`.\n\n`target_country`   - The target country of the product as a CLDR territory\n                     code (for example, US).\n\n`content_language` - The content language of the product as a two-letter\n                     ISO 639-1 language code (for example, en).\n\n`product_id`     -   The ID of the product. For more information, see\n                     https://support.google.com/manufacturers/answer/6124116#id.\n@OutputOnly",
+          "type": "string"
+        },
+        "issues": {
+          "type": "array",
+          "items": {
+            "$ref": "Issue"
+          },
+          "description": "A server-generated list of issues associated with the product.\n@OutputOnly"
+        },
+        "manuallyDeletedAttributes": {
+          "description": "Names of the attributes of the product deleted manually via the\nManufacturer Center UI.\n@OutputOnly",
+          "type": "array",
+          "items": {
+            "type": "string"
+          }
+        },
+        "finalAttributes": {
+          "description": "Final attributes of the product. The final attributes are obtained by\noverriding the uploaded attributes with the manually provided and deleted\nattributes. Google systems only process, evaluate, review, and/or use final\nattributes.\n@OutputOnly",
+          "$ref": "Attributes"
+        },
+        "productId": {
+          "description": "The ID of the product. For more information, see\nhttps://support.google.com/manufacturers/answer/6124116#id.\n@OutputOnly",
+          "type": "string"
+        }
+      },
+      "id": "Product"
+    },
+    "Capacity": {
+      "description": "The capacity of a product. For more information, see\nhttps://support.google.com/manufacturers/answer/6124116#capacity.",
+      "type": "object",
+      "properties": {
+        "value": {
+          "description": "The numeric value of the capacity.",
+          "format": "int64",
+          "type": "string"
+        },
+        "unit": {
+          "type": "string",
+          "description": "The unit of the capacity, i.e., MB, GB, or TB."
+        }
+      },
+      "id": "Capacity"
+    },
     "ListProductsResponse": {
       "type": "object",
       "properties": {
@@ -328,13 +507,91 @@
         }
       },
       "id": "ListProductsResponse"
+    },
+    "ProductDetail": {
+      "description": "A product detail of the product. For more information, see\nhttps://support.google.com/manufacturers/answer/6124116#productdetail.",
+      "type": "object",
+      "properties": {
+        "attributeName": {
+          "description": "The name of the attribute.",
+          "type": "string"
+        },
+        "attributeValue": {
+          "description": "The value of the attribute.",
+          "type": "string"
+        },
+        "sectionName": {
+          "description": "A short section name that can be reused between multiple product details.",
+          "type": "string"
+        }
+      },
+      "id": "ProductDetail"
+    },
+    "FeatureDescription": {
+      "properties": {
+        "image": {
+          "$ref": "Image",
+          "description": "An optional image describing the feature."
+        },
+        "headline": {
+          "description": "A short description of the feature.",
+          "type": "string"
+        },
+        "text": {
+          "description": "A detailed description of the feature.",
+          "type": "string"
+        }
+      },
+      "id": "FeatureDescription",
+      "description": "A feature description of the product. For more information, see\nhttps://support.google.com/manufacturers/answer/6124116#featuredesc.",
+      "type": "object"
+    },
+    "Issue": {
+      "description": "Product issue.",
+      "type": "object",
+      "properties": {
+        "description": {
+          "description": "Description of the issue.",
+          "type": "string"
+        },
+        "type": {
+          "description": "The server-generated type of the issue, for example,\n“INCORRECT_TEXT_FORMATTING”, “IMAGE_NOT_SERVEABLE”, etc.",
+          "type": "string"
+        },
+        "attribute": {
+          "type": "string",
+          "description": "If present, the attribute that triggered the issue. For more information\nabout attributes, see\nhttps://support.google.com/manufacturers/answer/6124116."
+        },
+        "timestamp": {
+          "description": "The timestamp when this issue appeared.",
+          "format": "google-datetime",
+          "type": "string"
+        },
+        "severity": {
+          "enumDescriptions": [
+            "Unspecified severity, never used.",
+            "Error severity. The issue prevents the usage of the whole item.",
+            "Warning severity. The issue is either one that prevents the usage of the\nattribute that triggered it or one that will soon prevent the usage of\nthe whole item.",
+            "Info severity. The issue is one that doesn't require immediate attention.\nIt is, for example, used to communicate which attributes are still\npending review."
+          ],
+          "enum": [
+            "SEVERITY_UNSPECIFIED",
+            "ERROR",
+            "WARNING",
+            "INFO"
+          ],
+          "description": "The severity of the issue.",
+          "type": "string"
+        }
+      },
+      "id": "Issue"
     }
   },
-  "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"
+    "x16": "http://www.google.com/images/icons/product/search-16.gif",
+    "x32": "http://www.google.com/images/icons/product/search-32.gif"
   },
+  "protocol": "rest",
   "canonicalName": "Manufacturer Center",
   "auth": {
     "oauth2": {
@@ -345,9 +602,5 @@
       }
     }
   },
-  "rootUrl": "https://manufacturers.googleapis.com/",
-  "ownerDomain": "google.com",
-  "name": "manufacturers",
-  "batchPath": "batch",
-  "title": "Manufacturer Center API"
+  "rootUrl": "https://manufacturers.googleapis.com/"
 }
diff --git a/manufacturers/v1/manufacturers-gen.go b/manufacturers/v1/manufacturers-gen.go
index 020a763..baea3d9 100644
--- a/manufacturers/v1/manufacturers-gen.go
+++ b/manufacturers/v1/manufacturers-gen.go
@@ -61,10 +61,9 @@
 }
 
 type Service struct {
-	client                    *http.Client
-	BasePath                  string // API endpoint base URL
-	UserAgent                 string // optional additional User-Agent fragment
-	GoogleClientHeaderElement string // client header fragment, for Google use only
+	client    *http.Client
+	BasePath  string // API endpoint base URL
+	UserAgent string // optional additional User-Agent fragment
 
 	Accounts *AccountsService
 }
@@ -76,10 +75,6 @@
 	return googleapi.UserAgent + " " + s.UserAgent
 }
 
-func (s *Service) clientHeader() string {
-	return gensupport.GoogleClientHeader("20170210", s.GoogleClientHeaderElement)
-}
-
 func NewAccountsService(s *Service) *AccountsService {
 	rs := &AccountsService{s: s}
 	rs.Products = NewAccountsProductsService(s)
@@ -105,21 +100,109 @@
 // see
 // https://support.google.com/manufacturers/answer/6124116.
 type Attributes struct {
+	// AdditionalImageLink: The additional images of the product. For more
+	// information,
+	// see
+	// https://support.google.com/manufacturers/answer/6124116#addlimage.
+	AdditionalImageLink []*Image `json:"additionalImageLink,omitempty"`
+
+	// AgeGroup: The target age group of the product. For more information,
+	// see
+	// https://support.google.com/manufacturers/answer/6124116#agegroup.
+	AgeGroup string `json:"ageGroup,omitempty"`
+
 	// Brand: The brand name of the product. For more information,
 	// see
 	// https://support.google.com/manufacturers/answer/6124116#brand.
 	Brand string `json:"brand,omitempty"`
 
+	// Capacity: The capacity of the product. For more information,
+	// see
+	// https://support.google.com/manufacturers/answer/6124116#capacity.
+	Capacity *Capacity `json:"capacity,omitempty"`
+
+	// Color: The color of the product. For more information,
+	// see
+	// https://support.google.com/manufacturers/answer/6124116#color.
+	Color string `json:"color,omitempty"`
+
+	// Count: The count of the product. For more information,
+	// see
+	// https://support.google.com/manufacturers/answer/6124116#count.
+	Count *Count `json:"count,omitempty"`
+
+	// Description: The description of the product. For more information,
+	// see
+	// https://support.google.com/manufacturers/answer/6124116#descriptio
+	// n.
+	Description string `json:"description,omitempty"`
+
+	// DisclosureDate: The disclosure date of the product. For more
+	// information,
+	// see
+	// https://support.google.com/manufacturers/answer/6124116#disclosure
+	// .
+	DisclosureDate string `json:"disclosureDate,omitempty"`
+
+	// FeatureDescription: The rich format description of the product. For
+	// more information,
+	// see
+	// https://support.google.com/manufacturers/answer/6124116#featuredes
+	// c.
+	FeatureDescription []*FeatureDescription `json:"featureDescription,omitempty"`
+
+	// Flavor: The flavor of the product. For more information,
+	// see
+	// https://support.google.com/manufacturers/answer/6124116#flavor.
+	Flavor string `json:"flavor,omitempty"`
+
+	// Format: The format of the product. For more information,
+	// see
+	// https://support.google.com/manufacturers/answer/6124116#format.
+	Format string `json:"format,omitempty"`
+
+	// Gender: The target gender of the product. For more information,
+	// see
+	// https://support.google.com/manufacturers/answer/6124116#gender.
+	Gender string `json:"gender,omitempty"`
+
 	// Gtin: The Global Trade Item Number (GTIN) of the product. For more
 	// information,
 	// see https://support.google.com/manufacturers/answer/6124116#gtin.
 	Gtin []string `json:"gtin,omitempty"`
 
+	// ImageLink: The image of the product. For more information,
+	// see
+	// https://support.google.com/manufacturers/answer/6124116#image.
+	ImageLink *Image `json:"imageLink,omitempty"`
+
+	// ItemGroupId: The item group id of the product. For more information,
+	// see
+	// https://support.google.com/manufacturers/answer/6124116#itemgroupi
+	// d.
+	ItemGroupId string `json:"itemGroupId,omitempty"`
+
+	// Material: The material of the product. For more information,
+	// see
+	// https://support.google.com/manufacturers/answer/6124116#material.
+	Material string `json:"material,omitempty"`
+
 	// Mpn: The Manufacturer Part Number (MPN) of the product. For more
 	// information,
 	// see https://support.google.com/manufacturers/answer/6124116#mpn.
 	Mpn string `json:"mpn,omitempty"`
 
+	// Pattern: The pattern of the product. For more information,
+	// see
+	// https://support.google.com/manufacturers/answer/6124116#pattern.
+	Pattern string `json:"pattern,omitempty"`
+
+	// ProductDetail: The details of the product. For more information,
+	// see
+	// https://support.google.com/manufacturers/answer/6124116#productdet
+	// ail.
+	ProductDetail []*ProductDetail `json:"productDetail,omitempty"`
+
 	// ProductLine: The name of the group of products related to the
 	// product. For more
 	// information,
@@ -134,27 +217,99 @@
 	// e.
 	ProductName string `json:"productName,omitempty"`
 
-	// ProductPageUrl: The URL of the manufacturer's detail page of the
-	// product. For more
+	// ProductPageUrl: The URL of the detail page of the product. For more
 	// information,
 	// see
 	// https://support.google.com/manufacturers/answer/6124116#productpag
 	// e.
 	ProductPageUrl string `json:"productPageUrl,omitempty"`
 
-	// ProductType: The manufacturer's category of the product. For more
-	// information,
+	// ProductType: The category of the product. For more information,
 	// see
 	// https://support.google.com/manufacturers/answer/6124116#producttyp
 	// e.
 	ProductType []string `json:"productType,omitempty"`
 
+	// ReleaseDate: The release date of the product. For more information,
+	// see
+	// https://support.google.com/manufacturers/answer/6124116#release.
+	ReleaseDate string `json:"releaseDate,omitempty"`
+
+	// Scent: The scent of the product. For more information, see
+	//  https://support.google.com/manufacturers/answer/6124116#scent.
+	Scent string `json:"scent,omitempty"`
+
+	// Size: The size of the product. For more information,
+	// see
+	// https://support.google.com/manufacturers/answer/6124116#size.
+	Size string `json:"size,omitempty"`
+
+	// SizeSystem: The size system of the product. For more information,
+	// see
+	// https://support.google.com/manufacturers/answer/6124116#sizesystem
+	// .
+	SizeSystem string `json:"sizeSystem,omitempty"`
+
+	// SizeType: The size type of the product. For more information,
+	// see
+	// https://support.google.com/manufacturers/answer/6124116#sizetype.
+	SizeType string `json:"sizeType,omitempty"`
+
+	// SuggestedRetailPrice: The suggested retail price (MSRP) of the
+	// product. For more information,
+	// see https://support.google.com/manufacturers/answer/6124116#price.
+	SuggestedRetailPrice *Price `json:"suggestedRetailPrice,omitempty"`
+
+	// Theme: The theme of the product. For more information,
+	// see
+	// https://support.google.com/manufacturers/answer/6124116#theme.
+	Theme string `json:"theme,omitempty"`
+
 	// Title: The title of the product. For more information,
 	// see
 	// https://support.google.com/manufacturers/answer/6124116#title.
 	Title string `json:"title,omitempty"`
 
-	// ForceSendFields is a list of field names (e.g. "Brand") to
+	// VideoLink: The videos of the product. For more information,
+	// see
+	// https://support.google.com/manufacturers/answer/6124116#video.
+	VideoLink []string `json:"videoLink,omitempty"`
+
+	// ForceSendFields is a list of field names (e.g. "AdditionalImageLink")
+	// to unconditionally include in API requests. By default, fields with
+	// empty values are omitted from API requests. However, any non-pointer,
+	// non-interface field appearing in ForceSendFields will be sent to the
+	// server regardless of whether the field is empty or not. This may be
+	// used to include empty fields in Patch requests.
+	ForceSendFields []string `json:"-"`
+
+	// NullFields is a list of field names (e.g. "AdditionalImageLink") to
+	// include in API requests with the JSON null value. By default, fields
+	// with empty values are omitted from API requests. However, any field
+	// with an empty value appearing in NullFields will be sent to the
+	// server as null. It is an error if a field in this list has a
+	// non-empty value. This may be used to include null fields in Patch
+	// requests.
+	NullFields []string `json:"-"`
+}
+
+func (s *Attributes) MarshalJSON() ([]byte, error) {
+	type noMethod Attributes
+	raw := noMethod(*s)
+	return gensupport.MarshalJSON(raw, s.ForceSendFields, s.NullFields)
+}
+
+// Capacity: The capacity of a product. For more information,
+// see
+// https://support.google.com/manufacturers/answer/6124116#capacity.
+type Capacity struct {
+	// Unit: The unit of the capacity, i.e., MB, GB, or TB.
+	Unit string `json:"unit,omitempty"`
+
+	// Value: The numeric value of the capacity.
+	Value int64 `json:"value,omitempty,string"`
+
+	// ForceSendFields is a list of field names (e.g. "Unit") to
 	// unconditionally include in API requests. By default, fields with
 	// empty values are omitted from API requests. However, any non-pointer,
 	// non-interface field appearing in ForceSendFields will be sent to the
@@ -162,7 +317,7 @@
 	// used to include empty fields in Patch requests.
 	ForceSendFields []string `json:"-"`
 
-	// NullFields is a list of field names (e.g. "Brand") to include in API
+	// NullFields is a list of field names (e.g. "Unit") to include in API
 	// requests with the JSON null value. By default, fields with empty
 	// values are omitted from API requests. However, any field with an
 	// empty value appearing in NullFields will be sent to the server as
@@ -171,8 +326,141 @@
 	NullFields []string `json:"-"`
 }
 
-func (s *Attributes) MarshalJSON() ([]byte, error) {
-	type noMethod Attributes
+func (s *Capacity) MarshalJSON() ([]byte, error) {
+	type noMethod Capacity
+	raw := noMethod(*s)
+	return gensupport.MarshalJSON(raw, s.ForceSendFields, s.NullFields)
+}
+
+// Count: The number of products in a single package. For more
+// information,
+// see
+// https://support.google.com/manufacturers/answer/6124116#count.
+type Count struct {
+	// Unit: The unit in which these products are counted.
+	Unit string `json:"unit,omitempty"`
+
+	// Value: The numeric value of the number of products in a package.
+	Value int64 `json:"value,omitempty,string"`
+
+	// ForceSendFields is a list of field names (e.g. "Unit") to
+	// unconditionally include in API requests. By default, fields with
+	// empty values are omitted from API requests. However, any non-pointer,
+	// non-interface field appearing in ForceSendFields will be sent to the
+	// server regardless of whether the field is empty or not. This may be
+	// used to include empty fields in Patch requests.
+	ForceSendFields []string `json:"-"`
+
+	// NullFields is a list of field names (e.g. "Unit") to include in API
+	// requests with the JSON null value. By default, fields with empty
+	// values are omitted from API requests. However, any field with an
+	// empty value appearing in NullFields will be sent to the server as
+	// null. It is an error if a field in this list has a non-empty value.
+	// This may be used to include null fields in Patch requests.
+	NullFields []string `json:"-"`
+}
+
+func (s *Count) MarshalJSON() ([]byte, error) {
+	type noMethod Count
+	raw := noMethod(*s)
+	return gensupport.MarshalJSON(raw, s.ForceSendFields, s.NullFields)
+}
+
+// FeatureDescription: A feature description of the product. For more
+// information,
+// see
+// https://support.google.com/manufacturers/answer/6124116#featuredes
+// c.
+type FeatureDescription struct {
+	// Headline: A short description of the feature.
+	Headline string `json:"headline,omitempty"`
+
+	// Image: An optional image describing the feature.
+	Image *Image `json:"image,omitempty"`
+
+	// Text: A detailed description of the feature.
+	Text string `json:"text,omitempty"`
+
+	// ForceSendFields is a list of field names (e.g. "Headline") to
+	// unconditionally include in API requests. By default, fields with
+	// empty values are omitted from API requests. However, any non-pointer,
+	// non-interface field appearing in ForceSendFields will be sent to the
+	// server regardless of whether the field is empty or not. This may be
+	// used to include empty fields in Patch requests.
+	ForceSendFields []string `json:"-"`
+
+	// NullFields is a list of field names (e.g. "Headline") to include in
+	// API requests with the JSON null value. By default, fields with empty
+	// values are omitted from API requests. However, any field with an
+	// empty value appearing in NullFields will be sent to the server as
+	// null. It is an error if a field in this list has a non-empty value.
+	// This may be used to include null fields in Patch requests.
+	NullFields []string `json:"-"`
+}
+
+func (s *FeatureDescription) MarshalJSON() ([]byte, error) {
+	type noMethod FeatureDescription
+	raw := noMethod(*s)
+	return gensupport.MarshalJSON(raw, s.ForceSendFields, s.NullFields)
+}
+
+// Image: An image.
+type Image struct {
+	// ImageUrl: The URL of the image. For crawled images, this is the
+	// provided URL. For
+	// uploaded images, this is a serving URL from Google if the image has
+	// been
+	// processed successfully.
+	ImageUrl string `json:"imageUrl,omitempty"`
+
+	// Status: The status of the image.
+	// @OutputOnly
+	//
+	// Possible values:
+	//   "STATUS_UNSPECIFIED" - Status is unspecified. Should not be used.
+	//   "PENDING_PROCESSING" - Image was uploaded and is being processed.
+	//   "PENDING_CRAWL" - The image crawl is still pending.
+	//   "OK" - The image was processed and it meets the requirements.
+	//   "ROBOTED" - The image URL is protected by robots.txt file and
+	// cannot be crawled.
+	//   "XROBOTED" - The image URL is protected by X-Robots-Tag and cannot
+	// be crawled.
+	//   "CRAWL_ERROR" - There was an error while crawling the image.
+	//   "PROCESSING_ERROR" - The image cannot be processed.
+	//   "DECODING_ERROR" - The image cannot be decoded.
+	//   "TOO_BIG" - The image is too big.
+	//   "CRAWL_SKIPPED" - The image was manually overridden and will not be
+	// crawled.
+	Status string `json:"status,omitempty"`
+
+	// Type: The type of the image, i.e., crawled or uploaded.
+	// @OutputOnly
+	//
+	// Possible values:
+	//   "TYPE_UNSPECIFIED" - Type is unspecified. Should not be used.
+	//   "CRAWLED" - The image was crawled from a provided URL.
+	//   "UPLOADED" - The image was uploaded.
+	Type string `json:"type,omitempty"`
+
+	// ForceSendFields is a list of field names (e.g. "ImageUrl") to
+	// unconditionally include in API requests. By default, fields with
+	// empty values are omitted from API requests. However, any non-pointer,
+	// non-interface field appearing in ForceSendFields will be sent to the
+	// server regardless of whether the field is empty or not. This may be
+	// used to include empty fields in Patch requests.
+	ForceSendFields []string `json:"-"`
+
+	// NullFields is a list of field names (e.g. "ImageUrl") to include in
+	// API requests with the JSON null value. By default, fields with empty
+	// values are omitted from API requests. However, any field with an
+	// empty value appearing in NullFields will be sent to the server as
+	// null. It is an error if a field in this list has a non-empty value.
+	// This may be used to include null fields in Patch requests.
+	NullFields []string `json:"-"`
+}
+
+func (s *Image) MarshalJSON() ([]byte, error) {
+	type noMethod Image
 	raw := noMethod(*s)
 	return gensupport.MarshalJSON(raw, s.ForceSendFields, s.NullFields)
 }
@@ -207,6 +495,9 @@
 	// pending review.
 	Severity string `json:"severity,omitempty"`
 
+	// Timestamp: The timestamp when this issue appeared.
+	Timestamp string `json:"timestamp,omitempty"`
+
 	// Type: The server-generated type of the issue, for
 	// example,
 	// “INCORRECT_TEXT_FORMATTING”, “IMAGE_NOT_SERVEABLE”, etc.
@@ -270,6 +561,37 @@
 	return gensupport.MarshalJSON(raw, s.ForceSendFields, s.NullFields)
 }
 
+// Price: A price.
+type Price struct {
+	// Amount: The numeric value of the price.
+	Amount string `json:"amount,omitempty"`
+
+	// Currency: The currency in which the price is denoted.
+	Currency string `json:"currency,omitempty"`
+
+	// ForceSendFields is a list of field names (e.g. "Amount") to
+	// unconditionally include in API requests. By default, fields with
+	// empty values are omitted from API requests. However, any non-pointer,
+	// non-interface field appearing in ForceSendFields will be sent to the
+	// server regardless of whether the field is empty or not. This may be
+	// used to include empty fields in Patch requests.
+	ForceSendFields []string `json:"-"`
+
+	// NullFields is a list of field names (e.g. "Amount") to include in API
+	// requests with the JSON null value. By default, fields with empty
+	// values are omitted from API requests. However, any field with an
+	// empty value appearing in NullFields will be sent to the server as
+	// null. It is an error if a field in this list has a non-empty value.
+	// This may be used to include null fields in Patch requests.
+	NullFields []string `json:"-"`
+}
+
+func (s *Price) MarshalJSON() ([]byte, error) {
+	type noMethod Price
+	raw := noMethod(*s)
+	return gensupport.MarshalJSON(raw, s.ForceSendFields, s.NullFields)
+}
+
 // Product: Product data.
 type Product struct {
 	// ContentLanguage: The content language of the product as a two-letter
@@ -377,6 +699,44 @@
 	return gensupport.MarshalJSON(raw, s.ForceSendFields, s.NullFields)
 }
 
+// ProductDetail: A product detail of the product. For more information,
+// see
+// https://support.google.com/manufacturers/answer/6124116#productdet
+// ail.
+type ProductDetail struct {
+	// AttributeName: The name of the attribute.
+	AttributeName string `json:"attributeName,omitempty"`
+
+	// AttributeValue: The value of the attribute.
+	AttributeValue string `json:"attributeValue,omitempty"`
+
+	// SectionName: A short section name that can be reused between multiple
+	// product details.
+	SectionName string `json:"sectionName,omitempty"`
+
+	// ForceSendFields is a list of field names (e.g. "AttributeName") to
+	// unconditionally include in API requests. By default, fields with
+	// empty values are omitted from API requests. However, any non-pointer,
+	// non-interface field appearing in ForceSendFields will be sent to the
+	// server regardless of whether the field is empty or not. This may be
+	// used to include empty fields in Patch requests.
+	ForceSendFields []string `json:"-"`
+
+	// NullFields is a list of field names (e.g. "AttributeName") to include
+	// in API requests with the JSON null value. By default, fields with
+	// empty values are omitted from API requests. However, any field with
+	// an empty value appearing in NullFields will be sent to the server as
+	// null. It is an error if a field in this list has a non-empty value.
+	// This may be used to include null fields in Patch requests.
+	NullFields []string `json:"-"`
+}
+
+func (s *ProductDetail) MarshalJSON() ([]byte, error) {
+	type noMethod ProductDetail
+	raw := noMethod(*s)
+	return gensupport.MarshalJSON(raw, s.ForceSendFields, s.NullFields)
+}
+
 // method id "manufacturers.accounts.products.get":
 
 type AccountsProductsGetCall struct {
@@ -440,7 +800,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	if c.ifNoneMatch_ != "" {
 		reqHeaders.Set("If-None-Match", c.ifNoneMatch_)
 	}
@@ -604,7 +963,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	if c.ifNoneMatch_ != "" {
 		reqHeaders.Set("If-None-Match", c.ifNoneMatch_)
 	}
diff --git a/mirror/v1/mirror-gen.go b/mirror/v1/mirror-gen.go
index 198052a..fb63974 100644
--- a/mirror/v1/mirror-gen.go
+++ b/mirror/v1/mirror-gen.go
@@ -69,10 +69,9 @@
 }
 
 type Service struct {
-	client                    *http.Client
-	BasePath                  string // API endpoint base URL
-	UserAgent                 string // optional additional User-Agent fragment
-	GoogleClientHeaderElement string // client header fragment, for Google use only
+	client    *http.Client
+	BasePath  string // API endpoint base URL
+	UserAgent string // optional additional User-Agent fragment
 
 	Accounts *AccountsService
 
@@ -94,10 +93,6 @@
 	return googleapi.UserAgent + " " + s.UserAgent
 }
 
-func (s *Service) clientHeader() string {
-	return gensupport.GoogleClientHeader("20170210", s.GoogleClientHeaderElement)
-}
-
 func NewAccountsService(s *Service) *AccountsService {
 	rs := &AccountsService{s: s}
 	return rs
@@ -1310,7 +1305,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	var body io.Reader = nil
 	body, err := googleapi.WithoutDataWrapper.JSONReader(c.account)
 	if err != nil {
@@ -1455,7 +1449,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	var body io.Reader = nil
 	c.urlParams_.Set("alt", alt)
 	urls := googleapi.ResolveRelative(c.s.BasePath, "contacts/{id}")
@@ -1562,7 +1555,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	if c.ifNoneMatch_ != "" {
 		reqHeaders.Set("If-None-Match", c.ifNoneMatch_)
 	}
@@ -1689,7 +1681,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	var body io.Reader = nil
 	body, err := googleapi.WithoutDataWrapper.JSONReader(c.contact)
 	if err != nil {
@@ -1816,7 +1807,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	if c.ifNoneMatch_ != "" {
 		reqHeaders.Set("If-None-Match", c.ifNoneMatch_)
 	}
@@ -1932,7 +1922,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	var body io.Reader = nil
 	body, err := googleapi.WithoutDataWrapper.JSONReader(c.contact)
 	if err != nil {
@@ -2066,7 +2055,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	var body io.Reader = nil
 	body, err := googleapi.WithoutDataWrapper.JSONReader(c.contact)
 	if err != nil {
@@ -2209,7 +2197,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	if c.ifNoneMatch_ != "" {
 		reqHeaders.Set("If-None-Match", c.ifNoneMatch_)
 	}
@@ -2346,7 +2333,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	if c.ifNoneMatch_ != "" {
 		reqHeaders.Set("If-None-Match", c.ifNoneMatch_)
 	}
@@ -2471,7 +2457,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	if c.ifNoneMatch_ != "" {
 		reqHeaders.Set("If-None-Match", c.ifNoneMatch_)
 	}
@@ -2598,7 +2583,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	var body io.Reader = nil
 	c.urlParams_.Set("alt", alt)
 	urls := googleapi.ResolveRelative(c.s.BasePath, "subscriptions/{id}")
@@ -2694,7 +2678,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	var body io.Reader = nil
 	body, err := googleapi.WithoutDataWrapper.JSONReader(c.subscription)
 	if err != nil {
@@ -2822,7 +2805,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	if c.ifNoneMatch_ != "" {
 		reqHeaders.Set("If-None-Match", c.ifNoneMatch_)
 	}
@@ -2937,7 +2919,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	var body io.Reader = nil
 	body, err := googleapi.WithoutDataWrapper.JSONReader(c.subscription)
 	if err != nil {
@@ -3069,7 +3050,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	var body io.Reader = nil
 	c.urlParams_.Set("alt", alt)
 	urls := googleapi.ResolveRelative(c.s.BasePath, "timeline/{id}")
@@ -3177,7 +3157,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	if c.ifNoneMatch_ != "" {
 		reqHeaders.Set("If-None-Match", c.ifNoneMatch_)
 	}
@@ -3358,7 +3337,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	var body io.Reader = nil
 	body, err := googleapi.WithoutDataWrapper.JSONReader(c.timelineitem)
 	if err != nil {
@@ -3608,7 +3586,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	if c.ifNoneMatch_ != "" {
 		reqHeaders.Set("If-None-Match", c.ifNoneMatch_)
 	}
@@ -3792,7 +3769,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	var body io.Reader = nil
 	body, err := googleapi.WithoutDataWrapper.JSONReader(c.timelineitem)
 	if err != nil {
@@ -3980,7 +3956,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	var body io.Reader = nil
 	body, err := googleapi.WithoutDataWrapper.JSONReader(c.timelineitem)
 	if err != nil {
@@ -4182,7 +4157,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	var body io.Reader = nil
 	c.urlParams_.Set("alt", alt)
 	urls := googleapi.ResolveRelative(c.s.BasePath, "timeline/{itemId}/attachments/{attachmentId}")
@@ -4300,7 +4274,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	if c.ifNoneMatch_ != "" {
 		reqHeaders.Set("If-None-Match", c.ifNoneMatch_)
 	}
@@ -4505,7 +4478,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	var body io.Reader = nil
 	c.urlParams_.Set("alt", alt)
 	urls := googleapi.ResolveRelative(c.s.BasePath, "timeline/{itemId}/attachments")
@@ -4707,7 +4679,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	if c.ifNoneMatch_ != "" {
 		reqHeaders.Set("If-None-Match", c.ifNoneMatch_)
 	}
diff --git a/ml/v1/ml-api.json b/ml/v1/ml-api.json
index 2a65ce3..d21888c 100644
--- a/ml/v1/ml-api.json
+++ b/ml/v1/ml-api.json
@@ -1,21 +1,441 @@
 {
-  "kind": "discovery#restDescription",
-  "description": "An API to enable creating and using machine learning models.",
-  "servicePath": "",
-  "basePath": "",
   "id": "ml:v1",
   "documentationLink": "https://cloud.google.com/ml/",
-  "revision": "20170304",
+  "revision": "20170320",
   "discoveryVersion": "v1",
   "version_module": "True",
   "schemas": {
+    "GoogleProtobuf__Empty": {
+      "description": "A generic empty message that you can re-use to avoid defining duplicated\nempty messages in your APIs. A typical example is to use it as the request\nor the response type of an API method. For instance:\n\n    service Foo {\n      rpc Bar(google.protobuf.Empty) returns (google.protobuf.Empty);\n    }\n\nThe JSON representation for `Empty` is empty JSON object `{}`.",
+      "type": "object",
+      "properties": {},
+      "id": "GoogleProtobuf__Empty"
+    },
+    "GoogleCloudMlV1__ListVersionsResponse": {
+      "description": "Response message for the ListVersions method.",
+      "type": "object",
+      "properties": {
+        "versions": {
+          "description": "The list of versions.",
+          "type": "array",
+          "items": {
+            "$ref": "GoogleCloudMlV1__Version"
+          }
+        },
+        "nextPageToken": {
+          "description": "Optional. Pass this token as the `page_token` field of the request for a\nsubsequent call.",
+          "type": "string"
+        }
+      },
+      "id": "GoogleCloudMlV1__ListVersionsResponse"
+    },
+    "GoogleCloudMlV1__CancelJobRequest": {
+      "description": "Request message for the CancelJob method.",
+      "type": "object",
+      "properties": {},
+      "id": "GoogleCloudMlV1__CancelJobRequest"
+    },
+    "GoogleCloudMlV1beta1__ManualScaling": {
+      "description": "Options for manually scaling a model.",
+      "type": "object",
+      "properties": {
+        "nodes": {
+          "description": "The number of nodes to allocate for this model. These nodes are always up,\nstarting from the time the model is deployed, so the cost of operating\nthis model will be proportional to nodes * number of hours since\ndeployment.",
+          "format": "int32",
+          "type": "integer"
+        }
+      },
+      "id": "GoogleCloudMlV1beta1__ManualScaling"
+    },
+    "GoogleRpc__Status": {
+      "description": "The `Status` type defines a logical error model that is suitable for different\nprogramming environments, including REST APIs and RPC APIs. It is used by\n[gRPC](https://github.com/grpc). The error model is designed to be:\n\n- Simple to use and understand for most users\n- Flexible enough to meet unexpected needs\n\n# Overview\n\nThe `Status` message contains three pieces of data: error code, error message,\nand error details. The error code should be an enum value of\ngoogle.rpc.Code, but it may accept additional error codes if needed.  The\nerror message should be a developer-facing English message that helps\ndevelopers *understand* and *resolve* the error. If a localized user-facing\nerror message is needed, put the localized message in the error details or\nlocalize it in the client. The optional error details may contain arbitrary\ninformation about the error. There is a predefined set of error detail types\nin the package `google.rpc` which can be used for common error conditions.\n\n# Language mapping\n\nThe `Status` message is the logical representation of the error model, but it\nis not necessarily the actual wire format. When the `Status` message is\nexposed in different client libraries and different wire protocols, it can be\nmapped differently. For example, it will likely be mapped to some exceptions\nin Java, but more likely mapped to some error codes in C.\n\n# Other uses\n\nThe error model and the `Status` message can be used in a variety of\nenvironments, either with or without APIs, to provide a\nconsistent developer experience across different environments.\n\nExample uses of this error model include:\n\n- Partial errors. If a service needs to return partial errors to the client,\n    it may embed the `Status` in the normal response to indicate the partial\n    errors.\n\n- Workflow errors. A typical workflow has multiple steps. Each step may\n    have a `Status` message for error reporting purpose.\n\n- Batch operations. If a client uses batch request and batch response, the\n    `Status` message should be used directly inside batch response, one for\n    each error sub-response.\n\n- Asynchronous operations. If an API call embeds asynchronous operation\n    results in its response, the status of those operations should be\n    represented directly using the `Status` message.\n\n- Logging. If some API errors are stored in logs, the message `Status` could\n    be used directly after any stripping needed for security/privacy reasons.",
+      "type": "object",
+      "properties": {
+        "code": {
+          "description": "The status code, which should be an enum value of google.rpc.Code.",
+          "format": "int32",
+          "type": "integer"
+        },
+        "message": {
+          "description": "A developer-facing error message, which should be in English. Any\nuser-facing error message should be localized and sent in the\ngoogle.rpc.Status.details field, or localized by the client.",
+          "type": "string"
+        },
+        "details": {
+          "type": "array",
+          "items": {
+            "additionalProperties": {
+              "description": "Properties of the object. Contains field @type with type URL.",
+              "type": "any"
+            },
+            "type": "object"
+          },
+          "description": "A list of messages that carry the error details.  There will be a\ncommon set of message types for APIs to use."
+        }
+      },
+      "id": "GoogleRpc__Status"
+    },
+    "GoogleCloudMlV1__ListModelsResponse": {
+      "description": "Response message for the ListModels method.",
+      "type": "object",
+      "properties": {
+        "models": {
+          "description": "The list of models.",
+          "type": "array",
+          "items": {
+            "$ref": "GoogleCloudMlV1__Model"
+          }
+        },
+        "nextPageToken": {
+          "description": "Optional. Pass this token as the `page_token` field of the request for a\nsubsequent call.",
+          "type": "string"
+        }
+      },
+      "id": "GoogleCloudMlV1__ListModelsResponse"
+    },
+    "GoogleCloudMlV1__TrainingInput": {
+      "description": "Represents input parameters for a training job.",
+      "type": "object",
+      "properties": {
+        "pythonModule": {
+          "description": "Required. The Python module name to run after installing the packages.",
+          "type": "string"
+        },
+        "workerType": {
+          "description": "Optional. Specifies the type of virtual machine to use for your training\njob's worker nodes.\n\nThe supported values are the same as those described in the entry for\n`masterType`.\n\nThis value must be present when `scaleTier` is set to `CUSTOM` and\n`workerCount` is greater than zero.",
+          "type": "string"
+        },
+        "region": {
+          "type": "string",
+          "description": "Required. The Google Compute Engine region to run the training job in."
+        },
+        "args": {
+          "description": "Optional. Command line arguments to pass to the program.",
+          "type": "array",
+          "items": {
+            "type": "string"
+          }
+        },
+        "parameterServerType": {
+          "description": "Optional. Specifies the type of virtual machine to use for your training\njob's parameter server.\n\nThe supported values are the same as those described in the entry for\n`master_type`.\n\nThis value must be present when `scaleTier` is set to `CUSTOM` and\n`parameter_server_count` is greater than zero.",
+          "type": "string"
+        },
+        "scaleTier": {
+          "enum": [
+            "BASIC",
+            "STANDARD_1",
+            "PREMIUM_1",
+            "BASIC_GPU",
+            "CUSTOM"
+          ],
+          "description": "Required. Specifies the machine types, the number of replicas for workers\nand parameter servers.",
+          "type": "string",
+          "enumDescriptions": [
+            "A single worker instance. This tier is suitable for learning how to use\nCloud ML, and for experimenting with new models using small datasets.",
+            "Many workers and a few parameter servers.",
+            "A large number of workers with many parameter servers.",
+            "A single worker instance [with a GPU](/ml-engine/docs/how-tos/using-gpus).",
+            "The CUSTOM tier is not a set tier, but rather enables you to use your\nown cluster specification. When you use this tier, set values to\nconfigure your processing cluster according to these guidelines:\n\n*   You _must_ set `TrainingInput.masterType` to specify the type\n    of machine to use for your master node. This is the only required\n    setting.\n\n*   You _may_ set `TrainingInput.workerCount` to specify the number of\n    workers to use. If you specify one or more workers, you _must_ also\n    set `TrainingInput.workerType` to specify the type of machine to use\n    for your worker nodes.\n\n*   You _may_ set `TrainingInput.parameterServerCount` to specify the\n    number of parameter servers to use. If you specify one or more\n    parameter servers, you _must_ also set\n    `TrainingInput.parameterServerType` to specify the type of machine to\n    use for your parameter servers.\n\nNote that all of your workers must use the same machine type, which can\nbe different from your parameter server type and master type. Your\nparameter servers must likewise use the same machine type, which can be\ndifferent from your worker type and master type."
+          ]
+        },
+        "jobDir": {
+          "description": "Optional. A Google Cloud Storage path in which to store training outputs\nand other data needed for training. This path is passed to your TensorFlow\nprogram as the 'job_dir' command-line argument. The benefit of specifying\nthis field is that Cloud ML validates the path for use in training.",
+          "type": "string"
+        },
+        "hyperparameters": {
+          "$ref": "GoogleCloudMlV1__HyperparameterSpec",
+          "description": "Optional. The set of Hyperparameters to tune."
+        },
+        "parameterServerCount": {
+          "description": "Optional. The number of parameter server replicas to use for the training\njob. Each replica in the cluster will be of the type specified in\n`parameter_server_type`.\n\nThis value can only be used when `scale_tier` is set to `CUSTOM`.If you\nset this value, you must also set `parameter_server_type`.",
+          "format": "int64",
+          "type": "string"
+        },
+        "packageUris": {
+          "description": "Required. The Google Cloud Storage location of the packages with\nthe training program and any additional dependencies.",
+          "type": "array",
+          "items": {
+            "type": "string"
+          }
+        },
+        "workerCount": {
+          "type": "string",
+          "description": "Optional. The number of worker replicas to use for the training job. Each\nreplica in the cluster will be of the type specified in `worker_type`.\n\nThis value can only be used when `scale_tier` is set to `CUSTOM`. If you\nset this value, you must also set `worker_type`.",
+          "format": "int64"
+        },
+        "masterType": {
+          "description": "Optional. Specifies the type of virtual machine to use for your training\njob's master worker.\n\nThe following types are supported:\n\n\u003cdl\u003e\n  \u003cdt\u003estandard\u003c/dt\u003e\n  \u003cdd\u003e\n  A basic machine configuration suitable for training simple models with\n  small to moderate datasets.\n  \u003c/dd\u003e\n  \u003cdt\u003elarge_model\u003c/dt\u003e\n  \u003cdd\u003e\n  A machine with a lot of memory, specially suited for parameter servers\n  when your model is large (having many hidden layers or layers with very\n  large numbers of nodes).\n  \u003c/dd\u003e\n  \u003cdt\u003ecomplex_model_s\u003c/dt\u003e\n  \u003cdd\u003e\n  A machine suitable for the master and workers of the cluster when your\n  model requires more computation than the standard machine can handle\n  satisfactorily.\n  \u003c/dd\u003e\n  \u003cdt\u003ecomplex_model_m\u003c/dt\u003e\n  \u003cdd\u003e\n  A machine with roughly twice the number of cores and roughly double the\n  memory of \u003ccode suppresswarning=\"true\"\u003ecomplex_model_s\u003c/code\u003e.\n  \u003c/dd\u003e\n  \u003cdt\u003ecomplex_model_l\u003c/dt\u003e\n  \u003cdd\u003e\n  A machine with roughly twice the number of cores and roughly double the\n  memory of \u003ccode suppresswarning=\"true\"\u003ecomplex_model_m\u003c/code\u003e.\n  \u003c/dd\u003e\n  \u003cdt\u003estandard_gpu\u003c/dt\u003e\n  \u003cdd\u003e\n  A machine equivalent to \u003ccode suppresswarning=\"true\"\u003estandard\u003c/code\u003e that\n  also includes a\n  \u003ca href=\"/ml-engine/docs/how-tos/using-gpus\"\u003e\n  GPU that you can use in your trainer\u003c/a\u003e.\n  \u003c/dd\u003e\n  \u003cdt\u003ecomplex_model_m_gpu\u003c/dt\u003e\n  \u003cdd\u003e\n  A machine equivalent to\n  \u003ccode suppresswarning=\"true\"\u003ecoplex_model_m\u003c/code\u003e that also includes\n  four GPUs.\n  \u003c/dd\u003e\n\u003c/dl\u003e\n\nYou must set this value when `scaleTier` is set to `CUSTOM`.",
+          "type": "string"
+        },
+        "runtimeVersion": {
+          "description": "Optional. The Google Cloud ML runtime version to use for training.  If not\nset, Google Cloud ML will choose the latest stable version.",
+          "type": "string"
+        }
+      },
+      "id": "GoogleCloudMlV1__TrainingInput"
+    },
+    "GoogleCloudMlV1__Job": {
+      "id": "GoogleCloudMlV1__Job",
+      "description": "Represents a training or prediction job.",
+      "type": "object",
+      "properties": {
+        "endTime": {
+          "type": "string",
+          "description": "Output only. When the job processing was completed.",
+          "format": "google-datetime"
+        },
+        "startTime": {
+          "description": "Output only. When the job processing was started.",
+          "format": "google-datetime",
+          "type": "string"
+        },
+        "predictionOutput": {
+          "description": "The current prediction job result.",
+          "$ref": "GoogleCloudMlV1__PredictionOutput"
+        },
+        "trainingOutput": {
+          "$ref": "GoogleCloudMlV1__TrainingOutput",
+          "description": "The current training job result."
+        },
+        "trainingInput": {
+          "description": "Input parameters to create a training job.",
+          "$ref": "GoogleCloudMlV1__TrainingInput"
+        },
+        "createTime": {
+          "description": "Output only. When the job was created.",
+          "format": "google-datetime",
+          "type": "string"
+        },
+        "state": {
+          "enumDescriptions": [
+            "The job state is unspecified.",
+            "The job has been just created and processing has not yet begun.",
+            "The service is preparing to run the job.",
+            "The job is in progress.",
+            "The job completed successfully.",
+            "The job failed.\n`error_message` should contain the details of the failure.",
+            "The job is being cancelled.\n`error_message` should describe the reason for the cancellation.",
+            "The job has been cancelled.\n`error_message` should describe the reason for the cancellation."
+          ],
+          "enum": [
+            "STATE_UNSPECIFIED",
+            "QUEUED",
+            "PREPARING",
+            "RUNNING",
+            "SUCCEEDED",
+            "FAILED",
+            "CANCELLING",
+            "CANCELLED"
+          ],
+          "description": "Output only. The detailed state of a job.",
+          "type": "string"
+        },
+        "predictionInput": {
+          "description": "Input parameters to create a prediction job.",
+          "$ref": "GoogleCloudMlV1__PredictionInput"
+        },
+        "jobId": {
+          "description": "Required. The user-specified id of the job.",
+          "type": "string"
+        },
+        "errorMessage": {
+          "description": "Output only. The details of a failure or a cancellation.",
+          "type": "string"
+        }
+      }
+    },
+    "GoogleApi__HttpBody": {
+      "description": "Message that represents an arbitrary HTTP body. It should only be used for\npayload formats that can't be represented as JSON, such as raw binary or\nan HTML page.\n\n\nThis message can be used both in streaming and non-streaming API methods in\nthe request as well as the response.\n\nIt can be used as a top-level request field, which is convenient if one\nwants to extract parameters from either the URL or HTTP template into the\nrequest fields and also want access to the raw HTTP body.\n\nExample:\n\n    message GetResourceRequest {\n      // A unique request id.\n      string request_id = 1;\n\n      // The raw HTTP body is bound to this field.\n      google.api.HttpBody http_body = 2;\n    }\n\n    service ResourceService {\n      rpc GetResource(GetResourceRequest) returns (google.api.HttpBody);\n      rpc UpdateResource(google.api.HttpBody) returns (google.protobuf.Empty);\n    }\n\nExample with streaming methods:\n\n    service CaldavService {\n      rpc GetCalendar(stream google.api.HttpBody)\n        returns (stream google.api.HttpBody);\n      rpc UpdateCalendar(stream google.api.HttpBody)\n        returns (stream google.api.HttpBody);\n    }\n\nUse of this type only changes how the request and response bodies are\nhandled, all other features will continue to work unchanged.",
+      "type": "object",
+      "properties": {
+        "contentType": {
+          "description": "The HTTP Content-Type string representing the content type of the body.",
+          "type": "string"
+        },
+        "data": {
+          "type": "string",
+          "description": "HTTP body binary data.",
+          "format": "byte"
+        }
+      },
+      "id": "GoogleApi__HttpBody"
+    },
+    "GoogleCloudMlV1__GetConfigResponse": {
+      "description": "Returns service account information associated with a project.",
+      "type": "object",
+      "properties": {
+        "serviceAccountProject": {
+          "description": "The project number for `service_account`.",
+          "format": "int64",
+          "type": "string"
+        },
+        "serviceAccount": {
+          "type": "string",
+          "description": "The service account Cloud ML uses to access resources in the project."
+        }
+      },
+      "id": "GoogleCloudMlV1__GetConfigResponse"
+    },
+    "GoogleCloudMlV1beta1__Version": {
+      "id": "GoogleCloudMlV1beta1__Version",
+      "description": "Represents a version of the model.\n\nEach version is a trained model deployed in the cloud, ready to handle\nprediction requests. A model can have multiple versions. You can get\ninformation about all of the versions of a given model by calling\n[projects.models.versions.list](/ml-engine/reference/rest/v1beta1/projects.models.versions/list).",
+      "type": "object",
+      "properties": {
+        "runtimeVersion": {
+          "description": "Optional. The Google Cloud ML runtime version to use for this deployment.\nIf not set, Google Cloud ML will choose a version.",
+          "type": "string"
+        },
+        "lastUseTime": {
+          "description": "Output only. The time the version was last used for prediction.",
+          "format": "google-datetime",
+          "type": "string"
+        },
+        "description": {
+          "type": "string",
+          "description": "Optional. The description specified for the version when it was created."
+        },
+        "deploymentUri": {
+          "description": "Required. The Google Cloud Storage location of the trained model used to\ncreate the version. See the\n[overview of model deployment](/ml-engine/docs/concepts/deployment-overview) for\nmore informaiton.\n\nWhen passing Version to\n[projects.models.versions.create](/ml-engine/reference/rest/v1beta1/projects.models.versions/create)\nthe model service uses the specified location as the source of the model.\nOnce deployed, the model version is hosted by the prediction service, so\nthis location is useful only as a historical record.",
+          "type": "string"
+        },
+        "isDefault": {
+          "description": "Output only. If true, this version will be used to handle prediction\nrequests that do not specify a version.\n\nYou can change the default version by calling\n[projects.methods.versions.setDefault](/ml-engine/reference/rest/v1beta1/projects.models.versions/setDefault).",
+          "type": "boolean"
+        },
+        "createTime": {
+          "description": "Output only. The time the version was created.",
+          "format": "google-datetime",
+          "type": "string"
+        },
+        "manualScaling": {
+          "description": "Optional. Manually select the number of nodes to use for serving the\nmodel. If unset (i.e., by default), the number of nodes used to serve\nthe model automatically scales with traffic. However, care should be\ntaken to ramp up traffic according to the model's ability to scale. If\nyour model needs to handle bursts of traffic beyond it's ability to\nscale, it is recommended you set this field appropriately.",
+          "$ref": "GoogleCloudMlV1beta1__ManualScaling"
+        },
+        "name": {
+          "description": "Required.The name specified for the version when it was created.\n\nThe version name must be unique within the model it is created in.",
+          "type": "string"
+        }
+      }
+    },
+    "GoogleCloudMlV1__HyperparameterOutput": {
+      "description": "Represents the result of a single hyperparameter tuning trial from a\ntraining job. The TrainingOutput object that is returned on successful\ncompletion of a training job with hyperparameter tuning includes a list\nof HyperparameterOutput objects, one for each successful trial.",
+      "type": "object",
+      "properties": {
+        "allMetrics": {
+          "description": "All recorded object metrics for this trial.",
+          "type": "array",
+          "items": {
+            "$ref": "GoogleCloudMlV1_HyperparameterOutput_HyperparameterMetric"
+          }
+        },
+        "finalMetric": {
+          "description": "The final objective metric seen for this trial.",
+          "$ref": "GoogleCloudMlV1_HyperparameterOutput_HyperparameterMetric"
+        },
+        "hyperparameters": {
+          "additionalProperties": {
+            "type": "string"
+          },
+          "description": "The hyperparameters given to this trial.",
+          "type": "object"
+        },
+        "trialId": {
+          "description": "The trial id for these results.",
+          "type": "string"
+        }
+      },
+      "id": "GoogleCloudMlV1__HyperparameterOutput"
+    },
+    "GoogleCloudMlV1__PredictionOutput": {
+      "description": "Represents results of a prediction job.",
+      "type": "object",
+      "properties": {
+        "outputPath": {
+          "description": "The output Google Cloud Storage location provided at the job creation time.",
+          "type": "string"
+        },
+        "nodeHours": {
+          "description": "Node hours used by the batch prediction job.",
+          "format": "double",
+          "type": "number"
+        },
+        "predictionCount": {
+          "description": "The number of generated predictions.",
+          "format": "int64",
+          "type": "string"
+        },
+        "errorCount": {
+          "description": "The number of data instances which resulted in errors.",
+          "format": "int64",
+          "type": "string"
+        }
+      },
+      "id": "GoogleCloudMlV1__PredictionOutput"
+    },
+    "GoogleLongrunning__ListOperationsResponse": {
+      "description": "The response message for Operations.ListOperations.",
+      "type": "object",
+      "properties": {
+        "operations": {
+          "description": "A list of operations that matches the specified filter in the request.",
+          "type": "array",
+          "items": {
+            "$ref": "GoogleLongrunning__Operation"
+          }
+        },
+        "nextPageToken": {
+          "description": "The standard List next-page token.",
+          "type": "string"
+        }
+      },
+      "id": "GoogleLongrunning__ListOperationsResponse"
+    },
+    "GoogleCloudMlV1__ManualScaling": {
+      "description": "Options for manually scaling a model.",
+      "type": "object",
+      "properties": {
+        "nodes": {
+          "description": "The number of nodes to allocate for this model. These nodes are always up,\nstarting from the time the model is deployed, so the cost of operating\nthis model will be proportional to nodes * number of hours since\ndeployment.",
+          "format": "int32",
+          "type": "integer"
+        }
+      },
+      "id": "GoogleCloudMlV1__ManualScaling"
+    },
+    "GoogleCloudMlV1__TrainingOutput": {
+      "type": "object",
+      "properties": {
+        "completedTrialCount": {
+          "description": "The number of hyperparameter tuning trials that completed successfully.\nOnly set for hyperparameter tuning jobs.",
+          "format": "int64",
+          "type": "string"
+        },
+        "isHyperparameterTuningJob": {
+          "description": "Whether this job is a hyperparameter tuning job.",
+          "type": "boolean"
+        },
+        "consumedMLUnits": {
+          "description": "The amount of ML units consumed by the job.",
+          "format": "double",
+          "type": "number"
+        },
+        "trials": {
+          "description": "Results for individual Hyperparameter trials.\nOnly set for hyperparameter tuning jobs.",
+          "type": "array",
+          "items": {
+            "$ref": "GoogleCloudMlV1__HyperparameterOutput"
+          }
+        }
+      },
+      "id": "GoogleCloudMlV1__TrainingOutput",
+      "description": "Represents results of a training job. Output only."
+    },
     "GoogleCloudMlV1__PredictRequest": {
       "description": "Request for predictions to be issued against a trained model.\n\nThe body of the request is a single JSON object with a single top-level\nfield:\n\n\u003cdl\u003e\n  \u003cdt\u003einstances\u003c/dt\u003e\n  \u003cdd\u003eA JSON array containing values representing the instances to use for\n      prediction.\u003c/dd\u003e\n\u003c/dl\u003e\n\nThe structure of each element of the instances list is determined by your\nmodel's input definition. Instances can include named inputs or can contain\nonly unlabeled values.\n\nNot all data includes named inputs. Some instances will be simple\nJSON values (boolean, number, or string). However, instances are often lists\nof simple values, or complex nested lists. Here are some examples of request\nbodies:\n\nCSV data with each row encoded as a string value:\n\u003cpre\u003e\n{\"instances\": [\"1.0,true,\\\\\"x\\\\\"\", \"-2.0,false,\\\\\"y\\\\\"\"]}\n\u003c/pre\u003e\nPlain text:\n\u003cpre\u003e\n{\"instances\": [\"the quick brown fox\", \"la bruja le dio\"]}\n\u003c/pre\u003e\nSentences encoded as lists of words (vectors of strings):\n\u003cpre\u003e\n{\n  \"instances\": [\n    [\"the\",\"quick\",\"brown\"],\n    [\"la\",\"bruja\",\"le\"],\n    ...\n  ]\n}\n\u003c/pre\u003e\nFloating point scalar values:\n\u003cpre\u003e\n{\"instances\": [0.0, 1.1, 2.2]}\n\u003c/pre\u003e\nVectors of integers:\n\u003cpre\u003e\n{\n  \"instances\": [\n    [0, 1, 2],\n    [3, 4, 5],\n    ...\n  ]\n}\n\u003c/pre\u003e\nTensors (in this case, two-dimensional tensors):\n\u003cpre\u003e\n{\n  \"instances\": [\n    [\n      [0, 1, 2],\n      [3, 4, 5]\n    ],\n    ...\n  ]\n}\n\u003c/pre\u003e\nImages can be represented different ways. In this encoding scheme the first\ntwo dimensions represent the rows and columns of the image, and the third\ncontains lists (vectors) of the R, G, and B values for each pixel.\n\u003cpre\u003e\n{\n  \"instances\": [\n    [\n      [\n        [138, 30, 66],\n        [130, 20, 56],\n        ...\n      ],\n      [\n        [126, 38, 61],\n        [122, 24, 57],\n        ...\n      ],\n      ...\n    ],\n    ...\n  ]\n}\n\u003c/pre\u003e\nJSON strings must be encoded as UTF-8. To send binary data, you must\nbase64-encode the data and mark it as binary. To mark a JSON string\nas binary, replace it with a JSON object with a single attribute named `b64`:\n\u003cpre\u003e{\"b64\": \"...\"} \u003c/pre\u003e\nFor example:\n\nTwo Serialized tf.Examples (fake data, for illustrative purposes only):\n\u003cpre\u003e\n{\"instances\": [{\"b64\": \"X5ad6u\"}, {\"b64\": \"IA9j4nx\"}]}\n\u003c/pre\u003e\nTwo JPEG image byte strings (fake data, for illustrative purposes only):\n\u003cpre\u003e\n{\"instances\": [{\"b64\": \"ASa8asdf\"}, {\"b64\": \"JLK7ljk3\"}]}\n\u003c/pre\u003e\nIf your data includes named references, format each instance as a JSON object\nwith the named references as the keys:\n\nJSON input data to be preprocessed:\n\u003cpre\u003e\n{\n  \"instances\": [\n    {\n      \"a\": 1.0,\n      \"b\": true,\n      \"c\": \"x\"\n    },\n    {\n      \"a\": -2.0,\n      \"b\": false,\n      \"c\": \"y\"\n    }\n  ]\n}\n\u003c/pre\u003e\nSome models have an underlying TensorFlow graph that accepts multiple input\ntensors. In this case, you should use the names of JSON name/value pairs to\nidentify the input tensors, as shown in the following exmaples:\n\nFor a graph with input tensor aliases \"tag\" (string) and \"image\"\n(base64-encoded string):\n\u003cpre\u003e\n{\n  \"instances\": [\n    {\n      \"tag\": \"beach\",\n      \"image\": {\"b64\": \"ASa8asdf\"}\n    },\n    {\n      \"tag\": \"car\",\n      \"image\": {\"b64\": \"JLK7ljk3\"}\n    }\n  ]\n}\n\u003c/pre\u003e\nFor a graph with input tensor aliases \"tag\" (string) and \"image\"\n(3-dimensional array of 8-bit ints):\n\u003cpre\u003e\n{\n  \"instances\": [\n    {\n      \"tag\": \"beach\",\n      \"image\": [\n        [\n          [138, 30, 66],\n          [130, 20, 56],\n          ...\n        ],\n        [\n          [126, 38, 61],\n          [122, 24, 57],\n          ...\n        ],\n        ...\n      ]\n    },\n    {\n      \"tag\": \"car\",\n      \"image\": [\n        [\n          [255, 0, 102],\n          [255, 0, 97],\n          ...\n        ],\n        [\n          [254, 1, 101],\n          [254, 2, 93],\n          ...\n        ],\n        ...\n      ]\n    },\n    ...\n  ]\n}\n\u003c/pre\u003e\nIf the call is successful, the response body will contain one prediction\nentry per instance in the request body. If prediction fails for any\ninstance, the response body will contain no predictions and will contian\na single error entry instead.",
       "type": "object",
       "properties": {
         "httpBody": {
-          "description": "\nRequired. The prediction request body.",
-          "$ref": "GoogleApi__HttpBody"
+          "$ref": "GoogleApi__HttpBody",
+          "description": "\nRequired. The prediction request body."
         }
       },
       "id": "GoogleCloudMlV1__PredictRequest"
@@ -38,19 +458,28 @@
       "id": "GoogleCloudMlV1_HyperparameterOutput_HyperparameterMetric"
     },
     "GoogleCloudMlV1__Version": {
-      "description": "Represents a version of the model.\n\nEach version is a trained model deployed in the cloud, ready to handle\nprediction requests. A model can have multiple versions. You can get\ninformation about all of the versions of a given model by calling\n[projects.models.versions.list](/ml/reference/rest/v1/projects.models.versions/list).",
+      "description": "Represents a version of the model.\n\nEach version is a trained model deployed in the cloud, ready to handle\nprediction requests. A model can have multiple versions. You can get\ninformation about all of the versions of a given model by calling\n[projects.models.versions.list](/ml-engine/reference/rest/v1/projects.models.versions/list).",
       "type": "object",
       "properties": {
+        "lastUseTime": {
+          "type": "string",
+          "description": "Output only. The time the version was last used for prediction.",
+          "format": "google-datetime"
+        },
+        "runtimeVersion": {
+          "description": "Optional. The Google Cloud ML runtime version to use for this deployment.\nIf not set, Google Cloud ML will choose a version.",
+          "type": "string"
+        },
         "description": {
           "description": "Optional. The description specified for the version when it was created.",
           "type": "string"
         },
         "deploymentUri": {
-          "description": "Required. The Google Cloud Storage location of the trained model used to\ncreate the version. See the\n[overview of model deployment](/ml/docs/concepts/deployment-overview) for\nmore informaiton.\n\nWhen passing Version to\n[projects.models.versions.create](/ml/reference/rest/v1/projects.models.versions/create)\nthe model service uses the specified location as the source of the model.\nOnce deployed, the model version is hosted by the prediction service, so\nthis location is useful only as a historical record.",
+          "description": "Required. The Google Cloud Storage location of the trained model used to\ncreate the version. See the\n[overview of model deployment](/ml-engine/docs/concepts/deployment-overview) for\nmore informaiton.\n\nWhen passing Version to\n[projects.models.versions.create](/ml-engine/reference/rest/v1/projects.models.versions/create)\nthe model service uses the specified location as the source of the model.\nOnce deployed, the model version is hosted by the prediction service, so\nthis location is useful only as a historical record.",
           "type": "string"
         },
         "isDefault": {
-          "description": "Output only. If true, this version will be used to handle prediction\nrequests that do not specify a version.\n\nYou can change the default version by calling\n[projects.methods.versions.setDefault](/ml/reference/rest/v1/projects.models.versions/setDefault).",
+          "description": "Output only. If true, this version will be used to handle prediction\nrequests that do not specify a version.\n\nYou can change the default version by calling\n[projects.methods.versions.setDefault](/ml-engine/reference/rest/v1/projects.models.versions/setDefault).",
           "type": "boolean"
         },
         "createTime": {
@@ -65,15 +494,6 @@
         "name": {
           "description": "Required.The name specified for the version when it was created.\n\nThe version name must be unique within the model it is created in.",
           "type": "string"
-        },
-        "lastUseTime": {
-          "description": "Output only. The time the version was last used for prediction.",
-          "format": "google-datetime",
-          "type": "string"
-        },
-        "runtimeVersion": {
-          "description": "Optional. The Google Cloud ML runtime version to use for this deployment.\nIf not set, Google Cloud ML will choose a version.",
-          "type": "string"
         }
       },
       "id": "GoogleCloudMlV1__Version"
@@ -82,6 +502,11 @@
       "description": "Represents a single hyperparameter to optimize.",
       "type": "object",
       "properties": {
+        "minValue": {
+          "description": "Required if type is `DOUBLE` or `INTEGER`. This field\nshould be unset if type is `CATEGORICAL`. This value should be integers if\ntype is INTEGER.",
+          "format": "double",
+          "type": "number"
+        },
         "discreteValues": {
           "description": "Required if type is `DISCRETE`.\nA list of feasible points.\nThe list should be in strictly increasing order. For instance, this\nparameter might have possible settings of 1.5, 2.5, and 4.0. This list\nshould not contain more than 1,000 values.",
           "type": "array",
@@ -90,6 +515,11 @@
             "type": "number"
           }
         },
+        "maxValue": {
+          "description": "Required if typeis `DOUBLE` or `INTEGER`. This field\nshould be unset if type is `CATEGORICAL`. This value should be integers if\ntype is `INTEGER`.",
+          "format": "double",
+          "type": "number"
+        },
         "scaleType": {
           "description": "Optional. How the parameter should be scaled to the hypercube.\nLeave unset for categorical parameters.\nSome kind of scaling is strongly recommended for real or integral\nparameters (e.g., `UNIT_LINEAR_SCALE`).",
           "type": "string",
@@ -106,11 +536,6 @@
             "UNIT_REVERSE_LOG_SCALE"
           ]
         },
-        "maxValue": {
-          "description": "Required if typeis `DOUBLE` or `INTEGER`. This field\nshould be unset if type is `CATEGORICAL`. This value should be integers if\ntype is `INTEGER`.",
-          "format": "double",
-          "type": "number"
-        },
         "type": {
           "enumDescriptions": [
             "You must specify a valid type. Using this unspecified type will result in\nan error.",
@@ -139,11 +564,6 @@
           "items": {
             "type": "string"
           }
-        },
-        "minValue": {
-          "description": "Required if type is `DOUBLE` or `INTEGER`. This field\nshould be unset if type is `CATEGORICAL`. This value should be integers if\ntype is INTEGER.",
-          "format": "double",
-          "type": "number"
         }
       },
       "id": "GoogleCloudMlV1__ParameterSpec"
@@ -152,14 +572,6 @@
       "description": "Represents input parameters for a prediction job.",
       "type": "object",
       "properties": {
-        "region": {
-          "description": "Required. The Google Compute Engine region to run the prediction job in.",
-          "type": "string"
-        },
-        "versionName": {
-          "description": "Use this field if you want to specify a version of the model to use. The\nstring is formatted the same way as `model_version`, with the addition\nof the version information:\n\n`\"projects/\u003cvar\u003e[YOUR_PROJECT]\u003c/var\u003e/models/\u003cvar\u003eYOUR_MODEL/versions/\u003cvar\u003e[YOUR_VERSION]\u003c/var\u003e\"`",
-          "type": "string"
-        },
         "modelName": {
           "description": "Use this field if you want to use the default version for the specified\nmodel. The string must use the following format:\n\n`\"projects/\u003cvar\u003e[YOUR_PROJECT]\u003c/var\u003e/models/\u003cvar\u003e[YOUR_MODEL]\u003c/var\u003e\"`",
           "type": "string"
@@ -203,14 +615,25 @@
           "items": {
             "type": "string"
           }
+        },
+        "region": {
+          "type": "string",
+          "description": "Required. The Google Compute Engine region to run the prediction job in."
+        },
+        "versionName": {
+          "description": "Use this field if you want to specify a version of the model to use. The\nstring is formatted the same way as `model_version`, with the addition\nof the version information:\n\n`\"projects/\u003cvar\u003e[YOUR_PROJECT]\u003c/var\u003e/models/\u003cvar\u003eYOUR_MODEL/versions/\u003cvar\u003e[YOUR_VERSION]\u003c/var\u003e\"`",
+          "type": "string"
         }
       },
       "id": "GoogleCloudMlV1__PredictionInput"
     },
     "GoogleCloudMlV1beta1__OperationMetadata": {
-      "description": "Represents the metadata of the long-running operation.",
       "type": "object",
       "properties": {
+        "isCancellationRequested": {
+          "description": "Indicates whether a request to cancel this operation has been made.",
+          "type": "boolean"
+        },
         "createTime": {
           "description": "The time the operation was submitted.",
           "format": "google-datetime",
@@ -221,8 +644,8 @@
           "type": "string"
         },
         "version": {
-          "description": "Contains the version associated with the operation.",
-          "$ref": "GoogleCloudMlV1beta1__Version"
+          "$ref": "GoogleCloudMlV1beta1__Version",
+          "description": "Contains the version associated with the operation."
         },
         "endTime": {
           "description": "The time operation processing completed.",
@@ -249,19 +672,28 @@
           "description": "The time operation processing started.",
           "format": "google-datetime",
           "type": "string"
-        },
-        "isCancellationRequested": {
-          "description": "Indicates whether a request to cancel this operation has been made.",
-          "type": "boolean"
         }
       },
-      "id": "GoogleCloudMlV1beta1__OperationMetadata"
+      "id": "GoogleCloudMlV1beta1__OperationMetadata",
+      "description": "Represents the metadata of the long-running operation."
     },
     "GoogleCloudMlV1__OperationMetadata": {
-      "id": "GoogleCloudMlV1__OperationMetadata",
       "description": "Represents the metadata of the long-running operation.",
       "type": "object",
       "properties": {
+        "isCancellationRequested": {
+          "description": "Indicates whether a request to cancel this operation has been made.",
+          "type": "boolean"
+        },
+        "createTime": {
+          "description": "The time the operation was submitted.",
+          "format": "google-datetime",
+          "type": "string"
+        },
+        "modelName": {
+          "description": "Contains the name of the model associated with the operation.",
+          "type": "string"
+        },
         "version": {
           "$ref": "GoogleCloudMlV1__Version",
           "description": "Contains the version associated with the operation."
@@ -272,8 +704,6 @@
           "type": "string"
         },
         "operationType": {
-          "description": "The operation type.",
-          "type": "string",
           "enumDescriptions": [
             "Unspecified operation type.",
             "An operation to create a new version.",
@@ -285,33 +715,38 @@
             "CREATE_VERSION",
             "DELETE_VERSION",
             "DELETE_MODEL"
-          ]
+          ],
+          "description": "The operation type.",
+          "type": "string"
         },
         "startTime": {
           "description": "The time operation processing started.",
           "format": "google-datetime",
           "type": "string"
-        },
-        "isCancellationRequested": {
-          "description": "Indicates whether a request to cancel this operation has been made.",
-          "type": "boolean"
-        },
-        "createTime": {
-          "description": "The time the operation was submitted.",
-          "format": "google-datetime",
-          "type": "string"
-        },
-        "modelName": {
-          "description": "Contains the name of the model associated with the operation.",
-          "type": "string"
         }
-      }
+      },
+      "id": "GoogleCloudMlV1__OperationMetadata"
     },
     "GoogleCloudMlV1__HyperparameterSpec": {
-      "id": "GoogleCloudMlV1__HyperparameterSpec",
-      "description": "Represents a set of hyperparameters to optimize.",
-      "type": "object",
       "properties": {
+        "goal": {
+          "enumDescriptions": [
+            "Goal Type will default to maximize.",
+            "Maximize the goal metric.",
+            "Minimize the goal metric."
+          ],
+          "enum": [
+            "GOAL_TYPE_UNSPECIFIED",
+            "MAXIMIZE",
+            "MINIMIZE"
+          ],
+          "description": "Required. The type of goal to use for tuning. Available types are\n`MAXIMIZE` and `MINIMIZE`.\n\nDefaults to `MAXIMIZE`.",
+          "type": "string"
+        },
+        "hyperparameterMetricTag": {
+          "description": "Optional. The Tensorflow summary tag name to use for optimizing trials. For\ncurrent versions of Tensorflow, this tag name should exactly match what is\nshown in Tensorboard, including all scopes.  For versions of Tensorflow\nprior to 0.12, this should be only the tag passed to tf.Summary.\nBy default, \"training/hptuning/metric\" will be used.",
+          "type": "string"
+        },
         "params": {
           "description": "Required. The set of parameters to tune.",
           "type": "array",
@@ -328,29 +763,13 @@
           "description": "Optional. The number of training trials to run concurrently.\nYou can reduce the time it takes to perform hyperparameter tuning by adding\ntrials in parallel. However, each trail only benefits from the information\ngained in completed trials. That means that a trial does not get access to\nthe results of trials running at the same time, which could reduce the\nquality of the overall optimization.\n\nEach trial will use the same scale tier and machine types.\n\nDefaults to one.",
           "format": "int32",
           "type": "integer"
-        },
-        "goal": {
-          "description": "Required. The type of goal to use for tuning. Available types are\n`MAXIMIZE` and `MINIMIZE`.\n\nDefaults to `MAXIMIZE`.",
-          "type": "string",
-          "enumDescriptions": [
-            "Goal Type will default to maximize.",
-            "Maximize the goal metric.",
-            "Minimize the goal metric."
-          ],
-          "enum": [
-            "GOAL_TYPE_UNSPECIFIED",
-            "MAXIMIZE",
-            "MINIMIZE"
-          ]
-        },
-        "hyperparameterMetricTag": {
-          "description": "Optional. The Tensorflow summary tag name to use for optimizing trials. For\ncurrent versions of Tensorflow, this tag name should exactly match what is\nshown in Tensorboard, including all scopes.  For versions of Tensorflow\nprior to 0.12, this should be only the tag passed to tf.Summary.\nBy default, \"training/hptuning/metric\" will be used.",
-          "type": "string"
         }
-      }
+      },
+      "id": "GoogleCloudMlV1__HyperparameterSpec",
+      "description": "Represents a set of hyperparameters to optimize.",
+      "type": "object"
     },
     "GoogleCloudMlV1__ListJobsResponse": {
-      "description": "Response message for the ListJobs method.",
       "type": "object",
       "properties": {
         "jobs": {
@@ -365,7 +784,8 @@
           "type": "string"
         }
       },
-      "id": "GoogleCloudMlV1__ListJobsResponse"
+      "id": "GoogleCloudMlV1__ListJobsResponse",
+      "description": "Response message for the ListJobs method."
     },
     "GoogleCloudMlV1__SetDefaultVersionRequest": {
       "id": "GoogleCloudMlV1__SetDefaultVersionRequest",
@@ -374,20 +794,18 @@
       "properties": {}
     },
     "GoogleLongrunning__Operation": {
-      "description": "This resource represents a long-running operation that is the result of a\nnetwork API call.",
-      "type": "object",
       "properties": {
         "done": {
           "description": "If the value is `false`, it means the operation is still in progress.\nIf true, the operation is completed, and either `error` or `response` is\navailable.",
           "type": "boolean"
         },
         "response": {
-          "description": "The normal response of the operation in case of success.  If the original\nmethod returns no data on success, such as `Delete`, the response is\n`google.protobuf.Empty`.  If the original method is standard\n`Get`/`Create`/`Update`, the response should be the resource.  For other\nmethods, the response should have the type `XxxResponse`, where `Xxx`\nis the original method name.  For example, if the original method name\nis `TakeSnapshot()`, the inferred response type is\n`TakeSnapshotResponse`.",
           "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\nmethod returns no data on success, such as `Delete`, the response is\n`google.protobuf.Empty`.  If the original method is standard\n`Get`/`Create`/`Update`, the response should be the resource.  For other\nmethods, the response should have the type `XxxResponse`, where `Xxx`\nis the original method name.  For example, if the original method name\nis `TakeSnapshot()`, the inferred response type is\n`TakeSnapshotResponse`."
         },
         "name": {
           "description": "The server-assigned name, which is only unique within the same service that\noriginally returns it. If you use the default HTTP mapping, the\n`name` should have the format of `operations/some/unique/name`.",
@@ -406,13 +824,25 @@
           "type": "object"
         }
       },
-      "id": "GoogleLongrunning__Operation"
+      "id": "GoogleLongrunning__Operation",
+      "description": "This resource represents a long-running operation that is the result of a\nnetwork API call.",
+      "type": "object"
     },
     "GoogleCloudMlV1__Model": {
-      "id": "GoogleCloudMlV1__Model",
       "description": "Represents a machine learning solution.\n\nA model can have multiple versions, each of which is a deployed, trained\nmodel ready to receive prediction requests. The model itself is just a\ncontainer.",
       "type": "object",
       "properties": {
+        "defaultVersion": {
+          "$ref": "GoogleCloudMlV1__Version",
+          "description": "Output only. The default version of the model. This version will be used to\nhandle prediction requests that do not specify a version.\n\nYou can change the default version by calling\n[projects.methods.versions.setDefault](/ml-engine/reference/rest/v1/projects.models.versions/setDefault)."
+        },
+        "regions": {
+          "description": "Optional. The list of regions where the model is going to be deployed.\nCurrently only one region per model is supported.\nDefaults to 'us-central1' if nothing is set.\nNote:\n*   No matter where a model is deployed, it can always be accessed by\n    users from anywhere, both for online and batch prediction.\n*   The region for a batch prediction job is set by the region field when\n    submitting the batch prediction job and does not take its value from\n    this field.",
+          "type": "array",
+          "items": {
+            "type": "string"
+          }
+        },
         "name": {
           "description": "Required. The name specified for the model when it was created.\n\nThe model name must be unique within the project it is created in.",
           "type": "string"
@@ -424,450 +854,16 @@
         "onlinePredictionLogging": {
           "description": "Optional. If true, enables StackDriver Logging for online prediction.\nDefault is false.",
           "type": "boolean"
-        },
-        "defaultVersion": {
-          "$ref": "GoogleCloudMlV1__Version",
-          "description": "Output only. The default version of the model. This version will be used to\nhandle prediction requests that do not specify a version.\n\nYou can change the default version by calling\n[projects.methods.versions.setDefault](/ml/reference/rest/v1/projects.models.versions/setDefault)."
-        },
-        "regions": {
-          "description": "Optional. The list of regions where the model is going to be deployed.\nCurrently only one region per model is supported.\nDefaults to 'us-central1' if nothing is set.",
-          "type": "array",
-          "items": {
-            "type": "string"
-          }
-        }
-      }
-    },
-    "GoogleProtobuf__Empty": {
-      "description": "A generic empty message that you can re-use to avoid defining duplicated\nempty messages in your APIs. A typical example is to use it as the request\nor the response type of an API method. For instance:\n\n    service Foo {\n      rpc Bar(google.protobuf.Empty) returns (google.protobuf.Empty);\n    }\n\nThe JSON representation for `Empty` is empty JSON object `{}`.",
-      "type": "object",
-      "properties": {},
-      "id": "GoogleProtobuf__Empty"
-    },
-    "GoogleCloudMlV1__CancelJobRequest": {
-      "description": "Request message for the CancelJob method.",
-      "type": "object",
-      "properties": {},
-      "id": "GoogleCloudMlV1__CancelJobRequest"
-    },
-    "GoogleCloudMlV1__ListVersionsResponse": {
-      "description": "Response message for the ListVersions method.",
-      "type": "object",
-      "properties": {
-        "versions": {
-          "description": "The list of versions.",
-          "type": "array",
-          "items": {
-            "$ref": "GoogleCloudMlV1__Version"
-          }
-        },
-        "nextPageToken": {
-          "description": "Optional. Pass this token as the `page_token` field of the request for a\nsubsequent call.",
-          "type": "string"
         }
       },
-      "id": "GoogleCloudMlV1__ListVersionsResponse"
-    },
-    "GoogleCloudMlV1beta1__ManualScaling": {
-      "description": "Options for manually scaling a model.",
-      "type": "object",
-      "properties": {
-        "nodes": {
-          "description": "The number of nodes to allocate for this model. These nodes are always up,\nstarting from the time the model is deployed, so the cost of operating\nthis model will be proportional to nodes * number of hours since\ndeployment.",
-          "format": "int32",
-          "type": "integer"
-        }
-      },
-      "id": "GoogleCloudMlV1beta1__ManualScaling"
-    },
-    "GoogleRpc__Status": {
-      "description": "The `Status` type defines a logical error model that is suitable for different\nprogramming environments, including REST APIs and RPC APIs. It is used by\n[gRPC](https://github.com/grpc). The error model is designed to be:\n\n- Simple to use and understand for most users\n- Flexible enough to meet unexpected needs\n\n# Overview\n\nThe `Status` message contains three pieces of data: error code, error message,\nand error details. The error code should be an enum value of\ngoogle.rpc.Code, but it may accept additional error codes if needed.  The\nerror message should be a developer-facing English message that helps\ndevelopers *understand* and *resolve* the error. If a localized user-facing\nerror message is needed, put the localized message in the error details or\nlocalize it in the client. The optional error details may contain arbitrary\ninformation about the error. There is a predefined set of error detail types\nin the package `google.rpc` which can be used for common error conditions.\n\n# Language mapping\n\nThe `Status` message is the logical representation of the error model, but it\nis not necessarily the actual wire format. When the `Status` message is\nexposed in different client libraries and different wire protocols, it can be\nmapped differently. For example, it will likely be mapped to some exceptions\nin Java, but more likely mapped to some error codes in C.\n\n# Other uses\n\nThe error model and the `Status` message can be used in a variety of\nenvironments, either with or without APIs, to provide a\nconsistent developer experience across different environments.\n\nExample uses of this error model include:\n\n- Partial errors. If a service needs to return partial errors to the client,\n    it may embed the `Status` in the normal response to indicate the partial\n    errors.\n\n- Workflow errors. A typical workflow has multiple steps. Each step may\n    have a `Status` message for error reporting purpose.\n\n- Batch operations. If a client uses batch request and batch response, the\n    `Status` message should be used directly inside batch response, one for\n    each error sub-response.\n\n- Asynchronous operations. If an API call embeds asynchronous operation\n    results in its response, the status of those operations should be\n    represented directly using the `Status` message.\n\n- Logging. If some API errors are stored in logs, the message `Status` could\n    be used directly after any stripping needed for security/privacy reasons.",
-      "type": "object",
-      "properties": {
-        "code": {
-          "description": "The status code, which should be an enum value of google.rpc.Code.",
-          "format": "int32",
-          "type": "integer"
-        },
-        "message": {
-          "description": "A developer-facing error message, which should be in English. Any\nuser-facing error message should be localized and sent in the\ngoogle.rpc.Status.details field, or localized by the client.",
-          "type": "string"
-        },
-        "details": {
-          "description": "A list of messages that carry the error details.  There will be a\ncommon 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"
-            }
-          }
-        }
-      },
-      "id": "GoogleRpc__Status"
-    },
-    "GoogleCloudMlV1__TrainingInput": {
-      "id": "GoogleCloudMlV1__TrainingInput",
-      "description": "Represents input parameters for a training job.",
-      "type": "object",
-      "properties": {
-        "workerCount": {
-          "description": "Optional. The number of worker replicas to use for the training job. Each\nreplica in the cluster will be of the type specified in `worker_type`.\n\nThis value can only be used when `scale_tier` is set to `CUSTOM`. If you\nset this value, you must also set `worker_type`.",
-          "format": "int64",
-          "type": "string"
-        },
-        "masterType": {
-          "description": "Optional. Specifies the type of virtual machine to use for your training\njob's master worker.\n\nThe following types are supported:\n\n\u003cdl\u003e\n  \u003cdt\u003estandard\u003c/dt\u003e\n  \u003cdd\u003e\n  A basic machine configuration suitable for training simple models with\n  small to moderate datasets.\n  \u003c/dd\u003e\n  \u003cdt\u003elarge_model\u003c/dt\u003e\n  \u003cdd\u003e\n  A machine with a lot of memory, specially suited for parameter servers\n  when your model is large (having many hidden layers or layers with very\n  large numbers of nodes).\n  \u003c/dd\u003e\n  \u003cdt\u003ecomplex_model_s\u003c/dt\u003e\n  \u003cdd\u003e\n  A machine suitable for the master and workers of the cluster when your\n  model requires more computation than the standard machine can handle\n  satisfactorily.\n  \u003c/dd\u003e\n  \u003cdt\u003ecomplex_model_m\u003c/dt\u003e\n  \u003cdd\u003e\n  A machine with roughly twice the number of cores and roughly double the\n  memory of \u003ccode suppresswarning=\"true\"\u003ecomplex_model_s\u003c/code\u003e.\n  \u003c/dd\u003e\n  \u003cdt\u003ecomplex_model_l\u003c/dt\u003e\n  \u003cdd\u003e\n  A machine with roughly twice the number of cores and roughly double the\n  memory of \u003ccode suppresswarning=\"true\"\u003ecomplex_model_m\u003c/code\u003e.\n  \u003c/dd\u003e\n  \u003cdt\u003estandard_gpu\u003c/dt\u003e\n  \u003cdd\u003e\n  A machine equivalent to \u003ccode suppresswarning=\"true\"\u003estandard\u003c/code\u003e that\n  also includes a\n  \u003ca href=\"ml/docs/how-tos/using-gpus\"\u003e\n  GPU that you can use in your trainer\u003c/a\u003e.\n  \u003c/dd\u003e\n  \u003cdt\u003ecomplex_model_m_gpu\u003c/dt\u003e\n  \u003cdd\u003e\n  A machine equivalent to\n  \u003ccode suppresswarning=\"true\"\u003ecoplex_model_m\u003c/code\u003e that also includes\n  four GPUs.\n  \u003c/dd\u003e\n\u003c/dl\u003e\n\nYou must set this value when `scaleTier` is set to `CUSTOM`.",
-          "type": "string"
-        },
-        "runtimeVersion": {
-          "description": "Optional. The Google Cloud ML runtime version to use for training.  If not\nset, Google Cloud ML will choose the latest stable version.",
-          "type": "string"
-        },
-        "pythonModule": {
-          "description": "Required. The Python module name to run after installing the packages.",
-          "type": "string"
-        },
-        "workerType": {
-          "description": "Optional. Specifies the type of virtual machine to use for your training\njob's worker nodes.\n\nThe supported values are the same as those described in the entry for\n`masterType`.\n\nThis value must be present when `scaleTier` is set to `CUSTOM` and\n`workerCount` is greater than zero.",
-          "type": "string"
-        },
-        "args": {
-          "description": "Optional. Command line arguments to pass to the program.",
-          "type": "array",
-          "items": {
-            "type": "string"
-          }
-        },
-        "region": {
-          "description": "Required. The Google Compute Engine region to run the training job in.",
-          "type": "string"
-        },
-        "parameterServerType": {
-          "description": "Optional. Specifies the type of virtual machine to use for your training\njob's parameter server.\n\nThe supported values are the same as those described in the entry for\n`master_type`.\n\nThis value must be present when `scaleTier` is set to `CUSTOM` and\n`parameter_server_count` is greater than zero.",
-          "type": "string"
-        },
-        "scaleTier": {
-          "enumDescriptions": [
-            "A single worker instance. This tier is suitable for learning how to use\nCloud ML, and for experimenting with new models using small datasets.",
-            "Many workers and a few parameter servers.",
-            "A large number of workers with many parameter servers.",
-            "A single worker instance [with a GPU](ml/docs/how-tos/using-gpus).",
-            "The CUSTOM tier is not a set tier, but rather enables you to use your\nown cluster specification. When you use this tier, set values to\nconfigure your processing cluster according to these guidelines:\n\n*   You _must_ set `TrainingInput.masterType` to specify the type\n    of machine to use for your master node. This is the only required\n    setting.\n\n*   You _may_ set `TrainingInput.workerCount` to specify the number of\n    workers to use. If you specify one or more workers, you _must_ also\n    set `TrainingInput.workerType` to specify the type of machine to use\n    for your worker nodes.\n\n*   You _may_ set `TrainingInput.parameterServerCount` to specify the\n    number of parameter servers to use. If you specify one or more\n    parameter servers, you _must_ also set\n    `TrainingInput.parameterServerType` to specify the type of machine to\n    use for your parameter servers.\n\nNote that all of your workers must use the same machine type, which can\nbe different from your parameter server type and master type. Your\nparameter servers must likewise use the same machine type, which can be\ndifferent from your worker type and master type."
-          ],
-          "enum": [
-            "BASIC",
-            "STANDARD_1",
-            "PREMIUM_1",
-            "BASIC_GPU",
-            "CUSTOM"
-          ],
-          "description": "Required. Specifies the machine types, the number of replicas for workers\nand parameter servers.",
-          "type": "string"
-        },
-        "jobDir": {
-          "description": "Optional. A Google Cloud Storage path in which to store training outputs\nand other data needed for training. This path is passed to your TensorFlow\nprogram as the 'job_dir' command-line argument. The benefit of specifying\nthis field is that Cloud ML validates the path for use in training.",
-          "type": "string"
-        },
-        "hyperparameters": {
-          "$ref": "GoogleCloudMlV1__HyperparameterSpec",
-          "description": "Optional. The set of Hyperparameters to tune."
-        },
-        "parameterServerCount": {
-          "description": "Optional. The number of parameter server replicas to use for the training\njob. Each replica in the cluster will be of the type specified in\n`parameter_server_type`.\n\nThis value can only be used when `scale_tier` is set to `CUSTOM`.If you\nset this value, you must also set `parameter_server_type`.",
-          "format": "int64",
-          "type": "string"
-        },
-        "packageUris": {
-          "description": "Required. The Google Cloud Storage location of the packages with\nthe training program and any additional dependencies.",
-          "type": "array",
-          "items": {
-            "type": "string"
-          }
-        }
-      }
-    },
-    "GoogleCloudMlV1__ListModelsResponse": {
-      "id": "GoogleCloudMlV1__ListModelsResponse",
-      "description": "Response message for the ListModels method.",
-      "type": "object",
-      "properties": {
-        "models": {
-          "description": "The list of models.",
-          "type": "array",
-          "items": {
-            "$ref": "GoogleCloudMlV1__Model"
-          }
-        },
-        "nextPageToken": {
-          "description": "Optional. Pass this token as the `page_token` field of the request for a\nsubsequent call.",
-          "type": "string"
-        }
-      }
-    },
-    "GoogleCloudMlV1__Job": {
-      "id": "GoogleCloudMlV1__Job",
-      "description": "Represents a training or prediction job.",
-      "type": "object",
-      "properties": {
-        "trainingOutput": {
-          "description": "The current training job result.",
-          "$ref": "GoogleCloudMlV1__TrainingOutput"
-        },
-        "trainingInput": {
-          "$ref": "GoogleCloudMlV1__TrainingInput",
-          "description": "Input parameters to create a training job."
-        },
-        "createTime": {
-          "description": "Output only. When the job was created.",
-          "format": "google-datetime",
-          "type": "string"
-        },
-        "predictionInput": {
-          "$ref": "GoogleCloudMlV1__PredictionInput",
-          "description": "Input parameters to create a prediction job."
-        },
-        "state": {
-          "description": "Output only. The detailed state of a job.",
-          "type": "string",
-          "enumDescriptions": [
-            "The job state is unspecified.",
-            "The job has been just created and processing has not yet begun.",
-            "The service is preparing to run the job.",
-            "The job is in progress.",
-            "The job completed successfully.",
-            "The job failed.\n`error_message` should contain the details of the failure.",
-            "The job is being cancelled.\n`error_message` should describe the reason for the cancellation.",
-            "The job has been cancelled.\n`error_message` should describe the reason for the cancellation."
-          ],
-          "enum": [
-            "STATE_UNSPECIFIED",
-            "QUEUED",
-            "PREPARING",
-            "RUNNING",
-            "SUCCEEDED",
-            "FAILED",
-            "CANCELLING",
-            "CANCELLED"
-          ]
-        },
-        "jobId": {
-          "description": "Required. The user-specified id of the job.",
-          "type": "string"
-        },
-        "errorMessage": {
-          "description": "Output only. The details of a failure or a cancellation.",
-          "type": "string"
-        },
-        "endTime": {
-          "description": "Output only. When the job processing was completed.",
-          "format": "google-datetime",
-          "type": "string"
-        },
-        "startTime": {
-          "description": "Output only. When the job processing was started.",
-          "format": "google-datetime",
-          "type": "string"
-        },
-        "predictionOutput": {
-          "description": "The current prediction job result.",
-          "$ref": "GoogleCloudMlV1__PredictionOutput"
-        }
-      }
-    },
-    "GoogleApi__HttpBody": {
-      "id": "GoogleApi__HttpBody",
-      "description": "Message that represents an arbitrary HTTP body. It should only be used for\npayload formats that can't be represented as JSON, such as raw binary or\nan HTML page.\n\n\nThis message can be used both in streaming and non-streaming API methods in\nthe request as well as the response.\n\nIt can be used as a top-level request field, which is convenient if one\nwants to extract parameters from either the URL or HTTP template into the\nrequest fields and also want access to the raw HTTP body.\n\nExample:\n\n    message GetResourceRequest {\n      // A unique request id.\n      string request_id = 1;\n\n      // The raw HTTP body is bound to this field.\n      google.api.HttpBody http_body = 2;\n    }\n\n    service ResourceService {\n      rpc GetResource(GetResourceRequest) returns (google.api.HttpBody);\n      rpc UpdateResource(google.api.HttpBody) returns (google.protobuf.Empty);\n    }\n\nExample with streaming methods:\n\n    service CaldavService {\n      rpc GetCalendar(stream google.api.HttpBody)\n        returns (stream google.api.HttpBody);\n      rpc UpdateCalendar(stream google.api.HttpBody)\n        returns (stream google.api.HttpBody);\n    }\n\nUse of this type only changes how the request and response bodies are\nhandled, all other features will continue to work unchanged.",
-      "type": "object",
-      "properties": {
-        "data": {
-          "description": "HTTP body binary data.",
-          "format": "byte",
-          "type": "string"
-        },
-        "contentType": {
-          "description": "The HTTP Content-Type string representing the content type of the body.",
-          "type": "string"
-        }
-      }
-    },
-    "GoogleCloudMlV1__GetConfigResponse": {
-      "id": "GoogleCloudMlV1__GetConfigResponse",
-      "description": "Returns service account information associated with a project.",
-      "type": "object",
-      "properties": {
-        "serviceAccountProject": {
-          "description": "The project number for `service_account`.",
-          "format": "int64",
-          "type": "string"
-        },
-        "serviceAccount": {
-          "description": "The service account Cloud ML uses to access resources in the project.",
-          "type": "string"
-        }
-      }
-    },
-    "GoogleCloudMlV1beta1__Version": {
-      "description": "Represents a version of the model.\n\nEach version is a trained model deployed in the cloud, ready to handle\nprediction requests. A model can have multiple versions. You can get\ninformation about all of the versions of a given model by calling\n[projects.models.versions.list](/ml/reference/rest/v1beta1/projects.models.versions/list).",
-      "type": "object",
-      "properties": {
-        "name": {
-          "description": "Required.The name specified for the version when it was created.\n\nThe version name must be unique within the model it is created in.",
-          "type": "string"
-        },
-        "lastUseTime": {
-          "description": "Output only. The time the version was last used for prediction.",
-          "format": "google-datetime",
-          "type": "string"
-        },
-        "runtimeVersion": {
-          "description": "Optional. The Google Cloud ML runtime version to use for this deployment.\nIf not set, Google Cloud ML will choose a version.",
-          "type": "string"
-        },
-        "description": {
-          "description": "Optional. The description specified for the version when it was created.",
-          "type": "string"
-        },
-        "deploymentUri": {
-          "description": "Required. The Google Cloud Storage location of the trained model used to\ncreate the version. See the\n[overview of model deployment](/ml/docs/concepts/deployment-overview) for\nmore informaiton.\n\nWhen passing Version to\n[projects.models.versions.create](/ml/reference/rest/v1beta1/projects.models.versions/create)\nthe model service uses the specified location as the source of the model.\nOnce deployed, the model version is hosted by the prediction service, so\nthis location is useful only as a historical record.",
-          "type": "string"
-        },
-        "isDefault": {
-          "description": "Output only. If true, this version will be used to handle prediction\nrequests that do not specify a version.\n\nYou can change the default version by calling\n[projects.methods.versions.setDefault](/ml/reference/rest/v1beta1/projects.models.versions/setDefault).",
-          "type": "boolean"
-        },
-        "createTime": {
-          "description": "Output only. The time the version was created.",
-          "format": "google-datetime",
-          "type": "string"
-        },
-        "manualScaling": {
-          "$ref": "GoogleCloudMlV1beta1__ManualScaling",
-          "description": "Optional. Manually select the number of nodes to use for serving the\nmodel. If unset (i.e., by default), the number of nodes used to serve\nthe model automatically scales with traffic. However, care should be\ntaken to ramp up traffic according to the model's ability to scale. If\nyour model needs to handle bursts of traffic beyond it's ability to\nscale, it is recommended you set this field appropriately."
-        }
-      },
-      "id": "GoogleCloudMlV1beta1__Version"
-    },
-    "GoogleCloudMlV1__HyperparameterOutput": {
-      "id": "GoogleCloudMlV1__HyperparameterOutput",
-      "description": "Represents the result of a single hyperparameter tuning trial from a\ntraining job. The TrainingOutput object that is returned on successful\ncompletion of a training job with hyperparameter tuning includes a list\nof HyperparameterOutput objects, one for each successful trial.",
-      "type": "object",
-      "properties": {
-        "allMetrics": {
-          "description": "All recorded object metrics for this trial.",
-          "type": "array",
-          "items": {
-            "$ref": "GoogleCloudMlV1_HyperparameterOutput_HyperparameterMetric"
-          }
-        },
-        "finalMetric": {
-          "$ref": "GoogleCloudMlV1_HyperparameterOutput_HyperparameterMetric",
-          "description": "The final objective metric seen for this trial."
-        },
-        "hyperparameters": {
-          "additionalProperties": {
-            "type": "string"
-          },
-          "description": "The hyperparameters given to this trial.",
-          "type": "object"
-        },
-        "trialId": {
-          "description": "The trial id for these results.",
-          "type": "string"
-        }
-      }
-    },
-    "GoogleCloudMlV1__PredictionOutput": {
-      "id": "GoogleCloudMlV1__PredictionOutput",
-      "description": "Represents results of a prediction job.",
-      "type": "object",
-      "properties": {
-        "errorCount": {
-          "description": "The number of data instances which resulted in errors.",
-          "format": "int64",
-          "type": "string"
-        },
-        "outputPath": {
-          "description": "The output Google Cloud Storage location provided at the job creation time.",
-          "type": "string"
-        },
-        "nodeHours": {
-          "description": "Node hours used by the batch prediction job.",
-          "format": "double",
-          "type": "number"
-        },
-        "predictionCount": {
-          "description": "The number of generated predictions.",
-          "format": "int64",
-          "type": "string"
-        }
-      }
-    },
-    "GoogleLongrunning__ListOperationsResponse": {
-      "description": "The response message for Operations.ListOperations.",
-      "type": "object",
-      "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.",
-          "type": "array",
-          "items": {
-            "$ref": "GoogleLongrunning__Operation"
-          }
-        }
-      },
-      "id": "GoogleLongrunning__ListOperationsResponse"
-    },
-    "GoogleCloudMlV1__ManualScaling": {
-      "description": "Options for manually scaling a model.",
-      "type": "object",
-      "properties": {
-        "nodes": {
-          "description": "The number of nodes to allocate for this model. These nodes are always up,\nstarting from the time the model is deployed, so the cost of operating\nthis model will be proportional to nodes * number of hours since\ndeployment.",
-          "format": "int32",
-          "type": "integer"
-        }
-      },
-      "id": "GoogleCloudMlV1__ManualScaling"
-    },
-    "GoogleCloudMlV1__TrainingOutput": {
-      "id": "GoogleCloudMlV1__TrainingOutput",
-      "description": "Represents results of a training job. Output only.",
-      "type": "object",
-      "properties": {
-        "trials": {
-          "description": "Results for individual Hyperparameter trials.\nOnly set for hyperparameter tuning jobs.",
-          "type": "array",
-          "items": {
-            "$ref": "GoogleCloudMlV1__HyperparameterOutput"
-          }
-        },
-        "completedTrialCount": {
-          "description": "The number of hyperparameter tuning trials that completed successfully.\nOnly set for hyperparameter tuning jobs.",
-          "format": "int64",
-          "type": "string"
-        },
-        "isHyperparameterTuningJob": {
-          "description": "Whether this job is a hyperparameter tuning job.",
-          "type": "boolean"
-        },
-        "consumedMLUnits": {
-          "description": "The amount of ML units consumed by the job.",
-          "format": "double",
-          "type": "number"
-        }
-      }
+      "id": "GoogleCloudMlV1__Model"
     }
   },
+  "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"
   },
-  "protocol": "rest",
   "canonicalName": "Cloud Machine Learning Engine",
   "auth": {
     "oauth2": {
@@ -888,19 +884,13 @@
     "projects": {
       "methods": {
         "getConfig": {
-          "path": "v1/{+name}:getConfig",
-          "id": "ml.projects.getConfig",
-          "description": "Get the service account information associated with your project. You need\nthis information in order to grant the service account persmissions for\nthe Google Cloud Storage location where you put your model training code\nfor training the model with Google Cloud Machine Learning.",
-          "parameterOrder": [
-            "name"
-          ],
           "response": {
             "$ref": "GoogleCloudMlV1__GetConfigResponse"
           },
-          "httpMethod": "GET",
-          "scopes": [
-            "https://www.googleapis.com/auth/cloud-platform"
+          "parameterOrder": [
+            "name"
           ],
+          "httpMethod": "GET",
           "parameters": {
             "name": {
               "description": "Required. The project name.\n\nAuthorization: requires `Viewer` role on the specified project.",
@@ -910,25 +900,26 @@
               "location": "path"
             }
           },
-          "flatPath": "v1/projects/{projectsId}:getConfig"
-        },
-        "predict": {
-          "path": "v1/{+name}:predict",
-          "id": "ml.projects.predict",
-          "description": "Performs prediction on the data in the request.\n\n**** REMOVE FROM GENERATED DOCUMENTATION",
-          "request": {
-            "$ref": "GoogleCloudMlV1__PredictRequest"
-          },
-          "response": {
-            "$ref": "GoogleApi__HttpBody"
-          },
-          "parameterOrder": [
-            "name"
-          ],
-          "httpMethod": "POST",
           "scopes": [
             "https://www.googleapis.com/auth/cloud-platform"
           ],
+          "flatPath": "v1/projects/{projectsId}:getConfig",
+          "path": "v1/{+name}:getConfig",
+          "id": "ml.projects.getConfig",
+          "description": "Get the service account information associated with your project. You need\nthis information in order to grant the service account persmissions for\nthe Google Cloud Storage location where you put your model training code\nfor training the model with Google Cloud Machine Learning."
+        },
+        "predict": {
+          "request": {
+            "$ref": "GoogleCloudMlV1__PredictRequest"
+          },
+          "description": "Performs prediction on the data in the request.\n\n**** REMOVE FROM GENERATED DOCUMENTATION",
+          "httpMethod": "POST",
+          "parameterOrder": [
+            "name"
+          ],
+          "response": {
+            "$ref": "GoogleApi__HttpBody"
+          },
           "parameters": {
             "name": {
               "description": "Required. The resource name of a model or a version.\n\nAuthorization: requires `Viewer` role on the parent project.",
@@ -938,139 +929,44 @@
               "location": "path"
             }
           },
-          "flatPath": "v1/projects/{projectsId}:predict"
+          "scopes": [
+            "https://www.googleapis.com/auth/cloud-platform"
+          ],
+          "flatPath": "v1/projects/{projectsId}:predict",
+          "id": "ml.projects.predict",
+          "path": "v1/{+name}:predict"
         }
       },
       "resources": {
-        "jobs": {
+        "operations": {
           "methods": {
-            "list": {
-              "id": "ml.projects.jobs.list",
-              "path": "v1/{+parent}/jobs",
-              "description": "Lists the jobs in the project.",
-              "httpMethod": "GET",
-              "response": {
-                "$ref": "GoogleCloudMlV1__ListJobsResponse"
-              },
-              "parameterOrder": [
-                "parent"
-              ],
-              "parameters": {
-                "parent": {
-                  "pattern": "^projects/[^/]+$",
-                  "location": "path",
-                  "description": "Required. The name of the project for which to list jobs.\n\nAuthorization: requires `Viewer` role on the specified project.",
-                  "required": true,
-                  "type": "string"
-                },
-                "filter": {
-                  "description": "Optional. Specifies the subset of jobs to retrieve.",
-                  "type": "string",
-                  "location": "query"
-                },
-                "pageToken": {
-                  "location": "query",
-                  "description": "Optional. A page token to request the next page of results.\n\nYou get the token from the `next_page_token` field of the response from\nthe previous call.",
-                  "type": "string"
-                },
-                "pageSize": {
-                  "description": "Optional. The number of jobs to retrieve per \"page\" of results. If there\nare more remaining results than this number, the response message will\ncontain a valid value in the `next_page_token` field.\n\nThe default value is 20, and the maximum page size is 100.",
-                  "format": "int32",
-                  "type": "integer",
-                  "location": "query"
-                }
-              },
-              "scopes": [
-                "https://www.googleapis.com/auth/cloud-platform"
-              ],
-              "flatPath": "v1/projects/{projectsId}/jobs"
-            },
-            "get": {
-              "path": "v1/{+name}",
-              "id": "ml.projects.jobs.get",
-              "description": "Describes a job.",
-              "response": {
-                "$ref": "GoogleCloudMlV1__Job"
-              },
-              "parameterOrder": [
-                "name"
-              ],
-              "httpMethod": "GET",
-              "parameters": {
-                "name": {
-                  "pattern": "^projects/[^/]+/jobs/[^/]+$",
-                  "location": "path",
-                  "description": "Required. The name of the job to get the description of.\n\nAuthorization: requires `Viewer` role on the parent project.",
-                  "required": true,
-                  "type": "string"
-                }
-              },
-              "scopes": [
-                "https://www.googleapis.com/auth/cloud-platform"
-              ],
-              "flatPath": "v1/projects/{projectsId}/jobs/{jobsId}"
-            },
-            "create": {
-              "id": "ml.projects.jobs.create",
-              "path": "v1/{+parent}/jobs",
-              "description": "Creates a training or a batch prediction job.",
-              "request": {
-                "$ref": "GoogleCloudMlV1__Job"
-              },
-              "httpMethod": "POST",
-              "parameterOrder": [
-                "parent"
-              ],
-              "response": {
-                "$ref": "GoogleCloudMlV1__Job"
-              },
-              "scopes": [
-                "https://www.googleapis.com/auth/cloud-platform"
-              ],
-              "parameters": {
-                "parent": {
-                  "description": "Required. The project name.\n\nAuthorization: requires `Editor` role on the specified project.",
-                  "required": true,
-                  "type": "string",
-                  "pattern": "^projects/[^/]+$",
-                  "location": "path"
-                }
-              },
-              "flatPath": "v1/projects/{projectsId}/jobs"
-            },
             "cancel": {
-              "scopes": [
-                "https://www.googleapis.com/auth/cloud-platform"
-              ],
-              "parameters": {
-                "name": {
-                  "pattern": "^projects/[^/]+/jobs/[^/]+$",
-                  "location": "path",
-                  "description": "Required. The name of the job to cancel.\n\nAuthorization: requires `Editor` role on the parent project.",
-                  "required": true,
-                  "type": "string"
-                }
-              },
-              "flatPath": "v1/projects/{projectsId}/jobs/{jobsId}:cancel",
-              "path": "v1/{+name}:cancel",
-              "id": "ml.projects.jobs.cancel",
-              "description": "Cancels a running job.",
-              "request": {
-                "$ref": "GoogleCloudMlV1__CancelJobRequest"
-              },
+              "description": "Starts asynchronous cancellation on a long-running operation.  The server\nmakes a best effort to cancel the operation, but success is not\nguaranteed.  If the server doesn't support this method, it returns\n`google.rpc.Code.UNIMPLEMENTED`.  Clients can use\nOperations.GetOperation or\nother methods to check whether the cancellation succeeded or whether the\noperation completed despite cancellation. On successful cancellation,\nthe operation is not deleted; instead, it becomes an operation with\nan Operation.error value with a google.rpc.Status.code of 1,\ncorresponding to `Code.CANCELLED`.",
+              "httpMethod": "POST",
               "response": {
                 "$ref": "GoogleProtobuf__Empty"
               },
               "parameterOrder": [
                 "name"
               ],
-              "httpMethod": "POST"
-            }
-          }
-        },
-        "operations": {
-          "methods": {
+              "scopes": [
+                "https://www.googleapis.com/auth/cloud-platform"
+              ],
+              "parameters": {
+                "name": {
+                  "pattern": "^projects/[^/]+/operations/[^/]+$",
+                  "location": "path",
+                  "description": "The name of the operation resource to be cancelled.",
+                  "required": true,
+                  "type": "string"
+                }
+              },
+              "flatPath": "v1/projects/{projectsId}/operations/{operationsId}:cancel",
+              "id": "ml.projects.operations.cancel",
+              "path": "v1/{+name}:cancel"
+            },
             "delete": {
+              "flatPath": "v1/projects/{projectsId}/operations/{operationsId}",
               "path": "v1/{+name}",
               "id": "ml.projects.operations.delete",
               "description": "Deletes a long-running operation. This method indicates that the client is\nno longer interested in the operation result. It does not cancel the\noperation. If the server doesn't support this method, it returns\n`google.rpc.Code.UNIMPLEMENTED`.",
@@ -1083,50 +979,18 @@
               "httpMethod": "DELETE",
               "parameters": {
                 "name": {
-                  "pattern": "^projects/[^/]+/operations/[^/]+$",
-                  "location": "path",
                   "description": "The name of the operation resource to be deleted.",
                   "required": true,
-                  "type": "string"
+                  "type": "string",
+                  "pattern": "^projects/[^/]+/operations/[^/]+$",
+                  "location": "path"
                 }
               },
               "scopes": [
                 "https://www.googleapis.com/auth/cloud-platform"
-              ],
-              "flatPath": "v1/projects/{projectsId}/operations/{operationsId}"
+              ]
             },
             "list": {
-              "parameters": {
-                "name": {
-                  "pattern": "^projects/[^/]+$",
-                  "location": "path",
-                  "description": "The name of the operation collection.",
-                  "required": true,
-                  "type": "string"
-                },
-                "pageToken": {
-                  "description": "The standard list page token.",
-                  "type": "string",
-                  "location": "query"
-                },
-                "pageSize": {
-                  "description": "The standard list page size.",
-                  "format": "int32",
-                  "type": "integer",
-                  "location": "query"
-                },
-                "filter": {
-                  "description": "The standard list filter.",
-                  "type": "string",
-                  "location": "query"
-                }
-              },
-              "scopes": [
-                "https://www.googleapis.com/auth/cloud-platform"
-              ],
-              "flatPath": "v1/projects/{projectsId}/operations",
-              "path": "v1/{+name}/operations",
-              "id": "ml.projects.operations.list",
               "description": "Lists operations that match the specified filter in the request. If the\nserver doesn't support this method, it returns `UNIMPLEMENTED`.\n\nNOTE: the `name` binding below allows API services to override the binding\nto use different resource name schemes, such as `users/*/operations`.",
               "response": {
                 "$ref": "GoogleLongrunning__ListOperationsResponse"
@@ -1134,19 +998,51 @@
               "parameterOrder": [
                 "name"
               ],
-              "httpMethod": "GET"
+              "httpMethod": "GET",
+              "scopes": [
+                "https://www.googleapis.com/auth/cloud-platform"
+              ],
+              "parameters": {
+                "pageSize": {
+                  "location": "query",
+                  "description": "The standard list page size.",
+                  "format": "int32",
+                  "type": "integer"
+                },
+                "filter": {
+                  "description": "The standard list filter.",
+                  "type": "string",
+                  "location": "query"
+                },
+                "name": {
+                  "location": "path",
+                  "description": "The name of the operation collection.",
+                  "required": true,
+                  "type": "string",
+                  "pattern": "^projects/[^/]+$"
+                },
+                "pageToken": {
+                  "location": "query",
+                  "description": "The standard list page token.",
+                  "type": "string"
+                }
+              },
+              "flatPath": "v1/projects/{projectsId}/operations",
+              "path": "v1/{+name}/operations",
+              "id": "ml.projects.operations.list"
             },
             "get": {
-              "path": "v1/{+name}",
+              "flatPath": "v1/projects/{projectsId}/operations/{operationsId}",
               "id": "ml.projects.operations.get",
+              "path": "v1/{+name}",
               "description": "Gets the latest state of a long-running operation.  Clients can use this\nmethod to poll the operation result at intervals as recommended by the API\nservice.",
-              "response": {
-                "$ref": "GoogleLongrunning__Operation"
-              },
               "httpMethod": "GET",
               "parameterOrder": [
                 "name"
               ],
+              "response": {
+                "$ref": "GoogleLongrunning__Operation"
+              },
               "scopes": [
                 "https://www.googleapis.com/auth/cloud-platform"
               ],
@@ -1158,64 +1054,49 @@
                   "pattern": "^projects/[^/]+/operations/[^/]+$",
                   "location": "path"
                 }
-              },
-              "flatPath": "v1/projects/{projectsId}/operations/{operationsId}"
-            },
-            "cancel": {
-              "parameterOrder": [
-                "name"
-              ],
-              "response": {
-                "$ref": "GoogleProtobuf__Empty"
-              },
-              "httpMethod": "POST",
-              "parameters": {
-                "name": {
-                  "description": "The name of the operation resource to be cancelled.",
-                  "required": true,
-                  "type": "string",
-                  "pattern": "^projects/[^/]+/operations/[^/]+$",
-                  "location": "path"
-                }
-              },
-              "scopes": [
-                "https://www.googleapis.com/auth/cloud-platform"
-              ],
-              "flatPath": "v1/projects/{projectsId}/operations/{operationsId}:cancel",
-              "path": "v1/{+name}:cancel",
-              "id": "ml.projects.operations.cancel",
-              "description": "Starts asynchronous cancellation on a long-running operation.  The server\nmakes a best effort to cancel the operation, but success is not\nguaranteed.  If the server doesn't support this method, it returns\n`google.rpc.Code.UNIMPLEMENTED`.  Clients can use\nOperations.GetOperation or\nother methods to check whether the cancellation succeeded or whether the\noperation completed despite cancellation. On successful cancellation,\nthe operation is not deleted; instead, it becomes an operation with\nan Operation.error value with a google.rpc.Status.code of 1,\ncorresponding to `Code.CANCELLED`."
+              }
             }
           }
         },
         "models": {
           "methods": {
             "delete": {
+              "description": "Deletes a model.\n\nYou can only delete a model if there are no versions in it. You can delete\nversions by calling\n[projects.models.versions.delete](/ml-engine/reference/rest/v1/projects.models.versions/delete).",
+              "httpMethod": "DELETE",
               "response": {
                 "$ref": "GoogleLongrunning__Operation"
               },
               "parameterOrder": [
                 "name"
               ],
-              "httpMethod": "DELETE",
               "scopes": [
                 "https://www.googleapis.com/auth/cloud-platform"
               ],
               "parameters": {
                 "name": {
+                  "location": "path",
                   "description": "Required. The name of the model.\n\nAuthorization: requires `Editor` role on the parent project.",
                   "required": true,
                   "type": "string",
-                  "pattern": "^projects/[^/]+/models/[^/]+$",
-                  "location": "path"
+                  "pattern": "^projects/[^/]+/models/[^/]+$"
                 }
               },
               "flatPath": "v1/projects/{projectsId}/models/{modelsId}",
-              "path": "v1/{+name}",
               "id": "ml.projects.models.delete",
-              "description": "Deletes a model.\n\nYou can only delete a model if there are no versions in it. You can delete\nversions by calling\n[projects.models.versions.delete](/ml/reference/rest/v1/projects.models.versions/delete)."
+              "path": "v1/{+name}"
             },
             "list": {
+              "description": "Lists the models in a project.\n\nEach project can contain multiple models, and each model can have multiple\nversions.",
+              "response": {
+                "$ref": "GoogleCloudMlV1__ListModelsResponse"
+              },
+              "parameterOrder": [
+                "parent"
+              ],
+              "httpMethod": "GET",
+              "scopes": [
+                "https://www.googleapis.com/auth/cloud-platform"
+              ],
               "parameters": {
                 "pageToken": {
                   "description": "Optional. A page token to request the next page of results.\n\nYou get the token from the `next_page_token` field of the response from\nthe previous call.",
@@ -1223,10 +1104,10 @@
                   "location": "query"
                 },
                 "pageSize": {
+                  "location": "query",
                   "description": "Optional. The number of models to retrieve per \"page\" of results. If there\nare more remaining results than this number, the response message will\ncontain a valid value in the `next_page_token` field.\n\nThe default value is 20, and the maximum page size is 100.",
                   "format": "int32",
-                  "type": "integer",
-                  "location": "query"
+                  "type": "integer"
                 },
                 "parent": {
                   "description": "Required. The name of the project whose models are to be listed.\n\nAuthorization: requires `Viewer` role on the specified project.",
@@ -1236,45 +1117,34 @@
                   "location": "path"
                 }
               },
-              "scopes": [
-                "https://www.googleapis.com/auth/cloud-platform"
-              ],
               "flatPath": "v1/projects/{projectsId}/models",
-              "id": "ml.projects.models.list",
               "path": "v1/{+parent}/models",
-              "description": "Lists the models in a project.\n\nEach project can contain multiple models, and each model can have multiple\nversions.",
-              "httpMethod": "GET",
-              "response": {
-                "$ref": "GoogleCloudMlV1__ListModelsResponse"
-              },
-              "parameterOrder": [
-                "parent"
-              ]
+              "id": "ml.projects.models.list"
             },
             "get": {
+              "parameters": {
+                "name": {
+                  "description": "Required. The name of the model.\n\nAuthorization: requires `Viewer` role on the parent project.",
+                  "required": true,
+                  "type": "string",
+                  "pattern": "^projects/[^/]+/models/[^/]+$",
+                  "location": "path"
+                }
+              },
               "scopes": [
                 "https://www.googleapis.com/auth/cloud-platform"
               ],
-              "parameters": {
-                "name": {
-                  "pattern": "^projects/[^/]+/models/[^/]+$",
-                  "location": "path",
-                  "description": "Required. The name of the model.\n\nAuthorization: requires `Viewer` role on the parent project.",
-                  "required": true,
-                  "type": "string"
-                }
-              },
               "flatPath": "v1/projects/{projectsId}/models/{modelsId}",
-              "id": "ml.projects.models.get",
               "path": "v1/{+name}",
+              "id": "ml.projects.models.get",
               "description": "Gets information about a model, including its name, the description (if\nset), and the default version (if at least one version of the model has\nbeen deployed).",
-              "httpMethod": "GET",
+              "response": {
+                "$ref": "GoogleCloudMlV1__Model"
+              },
               "parameterOrder": [
                 "name"
               ],
-              "response": {
-                "$ref": "GoogleCloudMlV1__Model"
-              }
+              "httpMethod": "GET"
             },
             "create": {
               "response": {
@@ -1284,6 +1154,9 @@
                 "parent"
               ],
               "httpMethod": "POST",
+              "scopes": [
+                "https://www.googleapis.com/auth/cloud-platform"
+              ],
               "parameters": {
                 "parent": {
                   "description": "Required. The project name.\n\nAuthorization: requires `Editor` role on the specified project.",
@@ -1293,81 +1166,19 @@
                   "location": "path"
                 }
               },
-              "scopes": [
-                "https://www.googleapis.com/auth/cloud-platform"
-              ],
               "flatPath": "v1/projects/{projectsId}/models",
               "path": "v1/{+parent}/models",
               "id": "ml.projects.models.create",
+              "description": "Creates a model which will later contain one or more versions.\n\nYou must add at least one version before you can request predictions from\nthe model. Add versions by calling\n[projects.models.versions.create](/ml-engine/reference/rest/v1/projects.models.versions/create).",
               "request": {
                 "$ref": "GoogleCloudMlV1__Model"
-              },
-              "description": "Creates a model which will later contain one or more versions.\n\nYou must add at least one version before you can request predictions from\nthe model. Add versions by calling\n[projects.models.versions.create](/ml/reference/rest/v1/projects.models.versions/create)."
+              }
             }
           },
           "resources": {
             "versions": {
               "methods": {
-                "create": {
-                  "path": "v1/{+parent}/versions",
-                  "id": "ml.projects.models.versions.create",
-                  "description": "Creates a new version of a model from a trained TensorFlow model.\n\nIf the version created in the cloud by this call is the first deployed\nversion of the specified model, it will be made the default version of the\nmodel. When you add a version to a model that already has one or more\nversions, the default version does not automatically change. If you want a\nnew version to be the default, you must call\n[projects.models.versions.setDefault](/ml/reference/rest/v1/projects.models.versions/setDefault).",
-                  "request": {
-                    "$ref": "GoogleCloudMlV1__Version"
-                  },
-                  "response": {
-                    "$ref": "GoogleLongrunning__Operation"
-                  },
-                  "parameterOrder": [
-                    "parent"
-                  ],
-                  "httpMethod": "POST",
-                  "scopes": [
-                    "https://www.googleapis.com/auth/cloud-platform"
-                  ],
-                  "parameters": {
-                    "parent": {
-                      "description": "Required. The name of the model.\n\nAuthorization: requires `Editor` role on the parent project.",
-                      "required": true,
-                      "type": "string",
-                      "pattern": "^projects/[^/]+/models/[^/]+$",
-                      "location": "path"
-                    }
-                  },
-                  "flatPath": "v1/projects/{projectsId}/models/{modelsId}/versions"
-                },
-                "setDefault": {
-                  "description": "Designates a version to be the default for the model.\n\nThe default version is used for prediction requests made against the model\nthat don't specify a version.\n\nThe first version to be created for a model is automatically set as the\ndefault. You must make any subsequent changes to the default version\nsetting manually using this method.",
-                  "request": {
-                    "$ref": "GoogleCloudMlV1__SetDefaultVersionRequest"
-                  },
-                  "response": {
-                    "$ref": "GoogleCloudMlV1__Version"
-                  },
-                  "parameterOrder": [
-                    "name"
-                  ],
-                  "httpMethod": "POST",
-                  "scopes": [
-                    "https://www.googleapis.com/auth/cloud-platform"
-                  ],
-                  "parameters": {
-                    "name": {
-                      "pattern": "^projects/[^/]+/models/[^/]+/versions/[^/]+$",
-                      "location": "path",
-                      "description": "Required. The name of the version to make the default for the model. You\ncan get the names of all the versions of a model by calling\n[projects.models.versions.list](/ml/reference/rest/v1/projects.models.versions/list).\n\nAuthorization: requires `Editor` role on the parent project.",
-                      "required": true,
-                      "type": "string"
-                    }
-                  },
-                  "flatPath": "v1/projects/{projectsId}/models/{modelsId}/versions/{versionsId}:setDefault",
-                  "path": "v1/{+name}:setDefault",
-                  "id": "ml.projects.models.versions.setDefault"
-                },
                 "delete": {
-                  "id": "ml.projects.models.versions.delete",
-                  "path": "v1/{+name}",
-                  "description": "Deletes a model version.\n\nEach model can have multiple versions deployed and in use at any given\ntime. Use this method to remove a single version.\n\nNote: You cannot delete the version that is set as the default version\nof the model unless it is the only remaining version.",
                   "httpMethod": "DELETE",
                   "response": {
                     "$ref": "GoogleLongrunning__Operation"
@@ -1380,62 +1191,66 @@
                   ],
                   "parameters": {
                     "name": {
-                      "pattern": "^projects/[^/]+/models/[^/]+/versions/[^/]+$",
                       "location": "path",
-                      "description": "Required. The name of the version. You can get the names of all the\nversions of a model by calling\n[projects.models.versions.list](/ml/reference/rest/v1/projects.models.versions/list).\n\nAuthorization: requires `Editor` role on the parent project.",
+                      "description": "Required. The name of the version. You can get the names of all the\nversions of a model by calling\n[projects.models.versions.list](/ml-engine/reference/rest/v1/projects.models.versions/list).\n\nAuthorization: requires `Editor` role on the parent project.",
                       "required": true,
-                      "type": "string"
+                      "type": "string",
+                      "pattern": "^projects/[^/]+/models/[^/]+/versions/[^/]+$"
                     }
                   },
-                  "flatPath": "v1/projects/{projectsId}/models/{modelsId}/versions/{versionsId}"
+                  "flatPath": "v1/projects/{projectsId}/models/{modelsId}/versions/{versionsId}",
+                  "id": "ml.projects.models.versions.delete",
+                  "path": "v1/{+name}",
+                  "description": "Deletes a model version.\n\nEach model can have multiple versions deployed and in use at any given\ntime. Use this method to remove a single version.\n\nNote: You cannot delete the version that is set as the default version\nof the model unless it is the only remaining version."
                 },
                 "list": {
+                  "response": {
+                    "$ref": "GoogleCloudMlV1__ListVersionsResponse"
+                  },
+                  "httpMethod": "GET",
+                  "parameterOrder": [
+                    "parent"
+                  ],
                   "scopes": [
                     "https://www.googleapis.com/auth/cloud-platform"
                   ],
                   "parameters": {
-                    "pageToken": {
-                      "location": "query",
-                      "description": "Optional. A page token to request the next page of results.\n\nYou get the token from the `next_page_token` field of the response from\nthe previous call.",
-                      "type": "string"
-                    },
-                    "pageSize": {
-                      "location": "query",
-                      "description": "Optional. The number of versions to retrieve per \"page\" of results. If\nthere are more remaining results than this number, the response message\nwill contain a valid value in the `next_page_token` field.\n\nThe default value is 20, and the maximum page size is 100.",
-                      "format": "int32",
-                      "type": "integer"
-                    },
                     "parent": {
                       "description": "Required. The name of the model for which to list the version.\n\nAuthorization: requires `Viewer` role on the parent project.",
                       "required": true,
                       "type": "string",
                       "pattern": "^projects/[^/]+/models/[^/]+$",
                       "location": "path"
+                    },
+                    "pageToken": {
+                      "description": "Optional. A page token to request the next page of results.\n\nYou get the token from the `next_page_token` field of the response from\nthe previous call.",
+                      "type": "string",
+                      "location": "query"
+                    },
+                    "pageSize": {
+                      "location": "query",
+                      "description": "Optional. The number of versions to retrieve per \"page\" of results. If\nthere are more remaining results than this number, the response message\nwill contain a valid value in the `next_page_token` field.\n\nThe default value is 20, and the maximum page size is 100.",
+                      "format": "int32",
+                      "type": "integer"
                     }
                   },
                   "flatPath": "v1/projects/{projectsId}/models/{modelsId}/versions",
-                  "id": "ml.projects.models.versions.list",
                   "path": "v1/{+parent}/versions",
-                  "description": "Gets basic information about all the versions of a model.\n\nIf you expect that a model has a lot of versions, or if you need to handle\nonly a limited number of results at a time, you can request that the list\nbe retrieved in batches (called pages):",
-                  "httpMethod": "GET",
-                  "response": {
-                    "$ref": "GoogleCloudMlV1__ListVersionsResponse"
-                  },
-                  "parameterOrder": [
-                    "parent"
-                  ]
+                  "id": "ml.projects.models.versions.list",
+                  "description": "Gets basic information about all the versions of a model.\n\nIf you expect that a model has a lot of versions, or if you need to handle\nonly a limited number of results at a time, you can request that the list\nbe retrieved in batches (called pages):"
                 },
                 "get": {
-                  "id": "ml.projects.models.versions.get",
-                  "path": "v1/{+name}",
-                  "description": "Gets information about a model version.\n\nModels can have multiple versions. You can call\n[projects.models.versions.list](/ml/reference/rest/v1/projects.models.versions/list)\nto get the same information that this method returns for all of the\nversions of a model.",
-                  "httpMethod": "GET",
+                  "description": "Gets information about a model version.\n\nModels can have multiple versions. You can call\n[projects.models.versions.list](/ml-engine/reference/rest/v1/projects.models.versions/list)\nto get the same information that this method returns for all of the\nversions of a model.",
                   "response": {
                     "$ref": "GoogleCloudMlV1__Version"
                   },
                   "parameterOrder": [
                     "name"
                   ],
+                  "httpMethod": "GET",
+                  "scopes": [
+                    "https://www.googleapis.com/auth/cloud-platform"
+                  ],
                   "parameters": {
                     "name": {
                       "description": "Required. The name of the version.\n\nAuthorization: requires `Viewer` role on the parent project.",
@@ -1445,48 +1260,222 @@
                       "location": "path"
                     }
                   },
+                  "flatPath": "v1/projects/{projectsId}/models/{modelsId}/versions/{versionsId}",
+                  "path": "v1/{+name}",
+                  "id": "ml.projects.models.versions.get"
+                },
+                "create": {
+                  "request": {
+                    "$ref": "GoogleCloudMlV1__Version"
+                  },
+                  "description": "Creates a new version of a model from a trained TensorFlow model.\n\nIf the version created in the cloud by this call is the first deployed\nversion of the specified model, it will be made the default version of the\nmodel. When you add a version to a model that already has one or more\nversions, the default version does not automatically change. If you want a\nnew version to be the default, you must call\n[projects.models.versions.setDefault](/ml-engine/reference/rest/v1/projects.models.versions/setDefault).",
+                  "response": {
+                    "$ref": "GoogleLongrunning__Operation"
+                  },
+                  "parameterOrder": [
+                    "parent"
+                  ],
+                  "httpMethod": "POST",
+                  "parameters": {
+                    "parent": {
+                      "pattern": "^projects/[^/]+/models/[^/]+$",
+                      "location": "path",
+                      "description": "Required. The name of the model.\n\nAuthorization: requires `Editor` role on the parent project.",
+                      "required": true,
+                      "type": "string"
+                    }
+                  },
                   "scopes": [
                     "https://www.googleapis.com/auth/cloud-platform"
                   ],
-                  "flatPath": "v1/projects/{projectsId}/models/{modelsId}/versions/{versionsId}"
+                  "flatPath": "v1/projects/{projectsId}/models/{modelsId}/versions",
+                  "path": "v1/{+parent}/versions",
+                  "id": "ml.projects.models.versions.create"
+                },
+                "setDefault": {
+                  "response": {
+                    "$ref": "GoogleCloudMlV1__Version"
+                  },
+                  "parameterOrder": [
+                    "name"
+                  ],
+                  "httpMethod": "POST",
+                  "parameters": {
+                    "name": {
+                      "description": "Required. The name of the version to make the default for the model. You\ncan get the names of all the versions of a model by calling\n[projects.models.versions.list](/ml-engine/reference/rest/v1/projects.models.versions/list).\n\nAuthorization: requires `Editor` role on the parent project.",
+                      "required": true,
+                      "type": "string",
+                      "pattern": "^projects/[^/]+/models/[^/]+/versions/[^/]+$",
+                      "location": "path"
+                    }
+                  },
+                  "scopes": [
+                    "https://www.googleapis.com/auth/cloud-platform"
+                  ],
+                  "flatPath": "v1/projects/{projectsId}/models/{modelsId}/versions/{versionsId}:setDefault",
+                  "path": "v1/{+name}:setDefault",
+                  "id": "ml.projects.models.versions.setDefault",
+                  "request": {
+                    "$ref": "GoogleCloudMlV1__SetDefaultVersionRequest"
+                  },
+                  "description": "Designates a version to be the default for the model.\n\nThe default version is used for prediction requests made against the model\nthat don't specify a version.\n\nThe first version to be created for a model is automatically set as the\ndefault. You must make any subsequent changes to the default version\nsetting manually using this method."
                 }
               }
             }
           }
+        },
+        "jobs": {
+          "methods": {
+            "cancel": {
+              "description": "Cancels a running job.",
+              "request": {
+                "$ref": "GoogleCloudMlV1__CancelJobRequest"
+              },
+              "response": {
+                "$ref": "GoogleProtobuf__Empty"
+              },
+              "parameterOrder": [
+                "name"
+              ],
+              "httpMethod": "POST",
+              "scopes": [
+                "https://www.googleapis.com/auth/cloud-platform"
+              ],
+              "parameters": {
+                "name": {
+                  "required": true,
+                  "type": "string",
+                  "pattern": "^projects/[^/]+/jobs/[^/]+$",
+                  "location": "path",
+                  "description": "Required. The name of the job to cancel.\n\nAuthorization: requires `Editor` role on the parent project."
+                }
+              },
+              "flatPath": "v1/projects/{projectsId}/jobs/{jobsId}:cancel",
+              "path": "v1/{+name}:cancel",
+              "id": "ml.projects.jobs.cancel"
+            },
+            "list": {
+              "flatPath": "v1/projects/{projectsId}/jobs",
+              "path": "v1/{+parent}/jobs",
+              "id": "ml.projects.jobs.list",
+              "description": "Lists the jobs in the project.",
+              "parameterOrder": [
+                "parent"
+              ],
+              "response": {
+                "$ref": "GoogleCloudMlV1__ListJobsResponse"
+              },
+              "httpMethod": "GET",
+              "parameters": {
+                "pageToken": {
+                  "location": "query",
+                  "description": "Optional. A page token to request the next page of results.\n\nYou get the token from the `next_page_token` field of the response from\nthe previous call.",
+                  "type": "string"
+                },
+                "pageSize": {
+                  "location": "query",
+                  "description": "Optional. The number of jobs to retrieve per \"page\" of results. If there\nare more remaining results than this number, the response message will\ncontain a valid value in the `next_page_token` field.\n\nThe default value is 20, and the maximum page size is 100.",
+                  "format": "int32",
+                  "type": "integer"
+                },
+                "parent": {
+                  "description": "Required. The name of the project for which to list jobs.\n\nAuthorization: requires `Viewer` role on the specified project.",
+                  "required": true,
+                  "type": "string",
+                  "pattern": "^projects/[^/]+$",
+                  "location": "path"
+                },
+                "filter": {
+                  "location": "query",
+                  "description": "Optional. Specifies the subset of jobs to retrieve.",
+                  "type": "string"
+                }
+              },
+              "scopes": [
+                "https://www.googleapis.com/auth/cloud-platform"
+              ]
+            },
+            "get": {
+              "description": "Describes a job.",
+              "response": {
+                "$ref": "GoogleCloudMlV1__Job"
+              },
+              "parameterOrder": [
+                "name"
+              ],
+              "httpMethod": "GET",
+              "scopes": [
+                "https://www.googleapis.com/auth/cloud-platform"
+              ],
+              "parameters": {
+                "name": {
+                  "pattern": "^projects/[^/]+/jobs/[^/]+$",
+                  "location": "path",
+                  "description": "Required. The name of the job to get the description of.\n\nAuthorization: requires `Viewer` role on the parent project.",
+                  "required": true,
+                  "type": "string"
+                }
+              },
+              "flatPath": "v1/projects/{projectsId}/jobs/{jobsId}",
+              "path": "v1/{+name}",
+              "id": "ml.projects.jobs.get"
+            },
+            "create": {
+              "httpMethod": "POST",
+              "parameterOrder": [
+                "parent"
+              ],
+              "response": {
+                "$ref": "GoogleCloudMlV1__Job"
+              },
+              "parameters": {
+                "parent": {
+                  "description": "Required. The project name.\n\nAuthorization: requires `Editor` role on the specified project.",
+                  "required": true,
+                  "type": "string",
+                  "pattern": "^projects/[^/]+$",
+                  "location": "path"
+                }
+              },
+              "scopes": [
+                "https://www.googleapis.com/auth/cloud-platform"
+              ],
+              "flatPath": "v1/projects/{projectsId}/jobs",
+              "id": "ml.projects.jobs.create",
+              "path": "v1/{+parent}/jobs",
+              "request": {
+                "$ref": "GoogleCloudMlV1__Job"
+              },
+              "description": "Creates a training or a batch prediction job."
+            }
+          }
         }
       }
     }
   },
   "parameters": {
     "upload_protocol": {
+      "location": "query",
       "description": "Upload protocol for media (e.g. \"raw\", \"multipart\").",
+      "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"
     },
-    "prettyPrint": {
-      "location": "query",
-      "description": "Returns response with indentations and line breaks.",
-      "type": "boolean",
-      "default": "true"
-    },
     "fields": {
-      "location": "query",
       "description": "Selector specifying which fields to include in a partial response.",
-      "type": "string"
-    },
-    "uploadType": {
-      "location": "query",
-      "description": "Legacy upload protocol for media (e.g. \"media\", \"multipart\").",
-      "type": "string"
-    },
-    "callback": {
-      "location": "query",
-      "description": "JSONP",
-      "type": "string"
+      "type": "string",
+      "location": "query"
     },
     "$.xgafv": {
-      "description": "V1 error format.",
-      "type": "string",
       "enumDescriptions": [
         "v1 error format",
         "v2 error format"
@@ -1495,9 +1484,18 @@
       "enum": [
         "1",
         "2"
-      ]
+      ],
+      "description": "V1 error format.",
+      "type": "string"
+    },
+    "callback": {
+      "type": "string",
+      "location": "query",
+      "description": "JSONP"
     },
     "alt": {
+      "description": "Data format for response.",
+      "default": "json",
       "enum": [
         "json",
         "media",
@@ -1509,13 +1507,6 @@
         "Media download with context-dependent Content-Type",
         "Responses with Content-Type of application/x-protobuf"
       ],
-      "location": "query",
-      "description": "Data format for response.",
-      "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"
     },
     "access_token": {
@@ -1523,28 +1514,37 @@
       "description": "OAuth access token.",
       "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.",
+    "key": {
       "type": "string",
-      "location": "query"
+      "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."
+    },
+    "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"
     },
     "pp": {
-      "location": "query",
       "description": "Pretty-print response.",
       "type": "boolean",
-      "default": "true"
-    },
-    "bearer_token": {
-      "description": "OAuth bearer token.",
-      "type": "string",
+      "default": "true",
       "location": "query"
     },
     "oauth_token": {
+      "location": "query",
       "description": "OAuth 2.0 token for the current user.",
-      "type": "string",
-      "location": "query"
+      "type": "string"
+    },
+    "bearer_token": {
+      "location": "query",
+      "description": "OAuth bearer token.",
+      "type": "string"
     }
   },
   "version": "v1",
-  "baseUrl": "https://ml.googleapis.com/"
+  "baseUrl": "https://ml.googleapis.com/",
+  "kind": "discovery#restDescription",
+  "servicePath": "",
+  "description": "An API to enable creating and using machine learning models.",
+  "basePath": ""
 }
diff --git a/ml/v1/ml-gen.go b/ml/v1/ml-gen.go
index fb3b773..fa582c7 100644
--- a/ml/v1/ml-gen.go
+++ b/ml/v1/ml-gen.go
@@ -61,10 +61,9 @@
 }
 
 type Service struct {
-	client                    *http.Client
-	BasePath                  string // API endpoint base URL
-	UserAgent                 string // optional additional User-Agent fragment
-	GoogleClientHeaderElement string // client header fragment, for Google use only
+	client    *http.Client
+	BasePath  string // API endpoint base URL
+	UserAgent string // optional additional User-Agent fragment
 
 	Projects *ProjectsService
 }
@@ -76,10 +75,6 @@
 	return googleapi.UserAgent + " " + s.UserAgent
 }
 
-func (s *Service) clientHeader() string {
-	return gensupport.GoogleClientHeader("20170210", s.GoogleClientHeaderElement)
-}
-
 func NewProjectsService(s *Service) *ProjectsService {
 	rs := &ProjectsService{s: s}
 	rs.Jobs = NewProjectsJobsService(s)
@@ -662,8 +657,8 @@
 	//
 	// You can change the default version by
 	// calling
-	// [projects.methods.versions.setDefault](/ml/reference/rest/v1/p
-	// rojects.models.versions/setDefault).
+	// [projects.methods.versions.setDefault](/ml-engine/reference/re
+	// st/v1/projects.models.versions/setDefault).
 	DefaultVersion *GoogleCloudMlV1__Version `json:"defaultVersion,omitempty"`
 
 	// Description: Optional. The description specified for the model when
@@ -685,6 +680,15 @@
 	// deployed.
 	// Currently only one region per model is supported.
 	// Defaults to 'us-central1' if nothing is set.
+	// Note:
+	// *   No matter where a model is deployed, it can always be accessed
+	// by
+	//     users from anywhere, both for online and batch prediction.
+	// *   The region for a batch prediction job is set by the region field
+	// when
+	//     submitting the batch prediction job and does not take its value
+	// from
+	//     this field.
 	Regions []string `json:"regions,omitempty"`
 
 	// ServerResponse contains the HTTP response code and headers from the
@@ -1336,7 +1340,7 @@
 	//   A machine equivalent to <code
 	// suppresswarning="true">standard</code> that
 	//   also includes a
-	//   <a href="ml/docs/how-tos/using-gpus">
+	//   <a href="/ml-engine/docs/how-tos/using-gpus">
 	//   GPU that you can use in your trainer</a>.
 	//   </dd>
 	//   <dt>complex_model_m_gpu</dt>
@@ -1405,7 +1409,7 @@
 	//   "PREMIUM_1" - A large number of workers with many parameter
 	// servers.
 	//   "BASIC_GPU" - A single worker instance [with a
-	// GPU](ml/docs/how-tos/using-gpus).
+	// GPU](/ml-engine/docs/how-tos/using-gpus).
 	//   "CUSTOM" - The CUSTOM tier is not a set tier, but rather enables
 	// you to use your
 	// own cluster specification. When you use this tier, set values
@@ -1553,8 +1557,8 @@
 // get
 // information about all of the versions of a given model by
 // calling
-// [projects.models.versions.list](/ml/reference/rest/v1/projects
-// .models.versions/list).
+// [projects.models.versions.list](/ml-engine/reference/rest/v1/p
+// rojects.models.versions/list).
 type GoogleCloudMlV1__Version struct {
 	// CreateTime: Output only. The time the version was created.
 	CreateTime string `json:"createTime,omitempty"`
@@ -1562,14 +1566,14 @@
 	// DeploymentUri: Required. The Google Cloud Storage location of the
 	// trained model used to
 	// create the version. See the
-	// [overview of model deployment](/ml/docs/concepts/deployment-overview)
-	// for
+	// [overview of model
+	// deployment](/ml-engine/docs/concepts/deployment-overview) for
 	// more informaiton.
 	//
 	// When passing Version
 	// to
-	// [projects.models.versions.create](/ml/reference/rest/v1/projects.mo
-	// dels.versions/create)
+	// [projects.models.versions.create](/ml-engine/reference/rest/v1/proj
+	// ects.models.versions/create)
 	// the model service uses the specified location as the source of the
 	// model.
 	// Once deployed, the model version is hosted by the prediction service,
@@ -1587,8 +1591,8 @@
 	//
 	// You can change the default version by
 	// calling
-	// [projects.methods.versions.setDefault](/ml/reference/rest/v1/p
-	// rojects.models.versions/setDefault).
+	// [projects.methods.versions.setDefault](/ml-engine/reference/re
+	// st/v1/projects.models.versions/setDefault).
 	IsDefault bool `json:"isDefault,omitempty"`
 
 	// LastUseTime: Output only. The time the version was last used for
@@ -1745,8 +1749,8 @@
 // get
 // information about all of the versions of a given model by
 // calling
-// [projects.models.versions.list](/ml/reference/rest/v1beta1/pro
-// jects.models.versions/list).
+// [projects.models.versions.list](/ml-engine/reference/rest/v1be
+// ta1/projects.models.versions/list).
 type GoogleCloudMlV1beta1__Version struct {
 	// CreateTime: Output only. The time the version was created.
 	CreateTime string `json:"createTime,omitempty"`
@@ -1754,14 +1758,14 @@
 	// DeploymentUri: Required. The Google Cloud Storage location of the
 	// trained model used to
 	// create the version. See the
-	// [overview of model deployment](/ml/docs/concepts/deployment-overview)
-	// for
+	// [overview of model
+	// deployment](/ml-engine/docs/concepts/deployment-overview) for
 	// more informaiton.
 	//
 	// When passing Version
 	// to
-	// [projects.models.versions.create](/ml/reference/rest/v1beta1/projec
-	// ts.models.versions/create)
+	// [projects.models.versions.create](/ml-engine/reference/rest/v1beta1
+	// /projects.models.versions/create)
 	// the model service uses the specified location as the source of the
 	// model.
 	// Once deployed, the model version is hosted by the prediction service,
@@ -1779,8 +1783,8 @@
 	//
 	// You can change the default version by
 	// calling
-	// [projects.methods.versions.setDefault](/ml/reference/rest/v1be
-	// ta1/projects.models.versions/setDefault).
+	// [projects.methods.versions.setDefault](/ml-engine/reference/re
+	// st/v1beta1/projects.models.versions/setDefault).
 	IsDefault bool `json:"isDefault,omitempty"`
 
 	// LastUseTime: Output only. The time the version was last used for
@@ -2148,7 +2152,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	if c.ifNoneMatch_ != "" {
 		reqHeaders.Set("If-None-Match", c.ifNoneMatch_)
 	}
@@ -2282,7 +2285,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	var body io.Reader = nil
 	body, err := googleapi.WithoutDataWrapper.JSONReader(c.googlecloudmlv1__predictrequest)
 	if err != nil {
@@ -2418,7 +2420,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	var body io.Reader = nil
 	body, err := googleapi.WithoutDataWrapper.JSONReader(c.googlecloudmlv1__canceljobrequest)
 	if err != nil {
@@ -2554,7 +2555,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	var body io.Reader = nil
 	body, err := googleapi.WithoutDataWrapper.JSONReader(c.googlecloudmlv1__job)
 	if err != nil {
@@ -2699,7 +2699,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	if c.ifNoneMatch_ != "" {
 		reqHeaders.Set("If-None-Match", c.ifNoneMatch_)
 	}
@@ -2869,7 +2868,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	if c.ifNoneMatch_ != "" {
 		reqHeaders.Set("If-None-Match", c.ifNoneMatch_)
 	}
@@ -3006,8 +3004,8 @@
 // from
 // the model. Add versions by
 // calling
-// [projects.models.versions.create](/ml/reference/rest/v1/projec
-// ts.models.versions/create).
+// [projects.models.versions.create](/ml-engine/reference/rest/v1
+// /projects.models.versions/create).
 func (r *ProjectsModelsService) Create(parent string, googlecloudmlv1__model *GoogleCloudMlV1__Model) *ProjectsModelsCreateCall {
 	c := &ProjectsModelsCreateCall{s: r.s, urlParams_: make(gensupport.URLParams)}
 	c.parent = parent
@@ -3046,7 +3044,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	var body io.Reader = nil
 	body, err := googleapi.WithoutDataWrapper.JSONReader(c.googlecloudmlv1__model)
 	if err != nil {
@@ -3102,7 +3099,7 @@
 	}
 	return ret, nil
 	// {
-	//   "description": "Creates a model which will later contain one or more versions.\n\nYou must add at least one version before you can request predictions from\nthe model. Add versions by calling\n[projects.models.versions.create](/ml/reference/rest/v1/projects.models.versions/create).",
+	//   "description": "Creates a model which will later contain one or more versions.\n\nYou must add at least one version before you can request predictions from\nthe model. Add versions by calling\n[projects.models.versions.create](/ml-engine/reference/rest/v1/projects.models.versions/create).",
 	//   "flatPath": "v1/projects/{projectsId}/models",
 	//   "httpMethod": "POST",
 	//   "id": "ml.projects.models.create",
@@ -3148,8 +3145,8 @@
 // delete
 // versions by
 // calling
-// [projects.models.versions.delete](/ml/reference/rest/v1/projec
-// ts.models.versions/delete).
+// [projects.models.versions.delete](/ml-engine/reference/rest/v1
+// /projects.models.versions/delete).
 func (r *ProjectsModelsService) Delete(name string) *ProjectsModelsDeleteCall {
 	c := &ProjectsModelsDeleteCall{s: r.s, urlParams_: make(gensupport.URLParams)}
 	c.name = name
@@ -3187,7 +3184,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	var body io.Reader = nil
 	c.urlParams_.Set("alt", alt)
 	urls := googleapi.ResolveRelative(c.s.BasePath, "v1/{+name}")
@@ -3238,7 +3234,7 @@
 	}
 	return ret, nil
 	// {
-	//   "description": "Deletes a model.\n\nYou can only delete a model if there are no versions in it. You can delete\nversions by calling\n[projects.models.versions.delete](/ml/reference/rest/v1/projects.models.versions/delete).",
+	//   "description": "Deletes a model.\n\nYou can only delete a model if there are no versions in it. You can delete\nversions by calling\n[projects.models.versions.delete](/ml-engine/reference/rest/v1/projects.models.versions/delete).",
 	//   "flatPath": "v1/projects/{projectsId}/models/{modelsId}",
 	//   "httpMethod": "DELETE",
 	//   "id": "ml.projects.models.delete",
@@ -3328,7 +3324,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	if c.ifNoneMatch_ != "" {
 		reqHeaders.Set("If-None-Match", c.ifNoneMatch_)
 	}
@@ -3495,7 +3490,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	if c.ifNoneMatch_ != "" {
 		reqHeaders.Set("If-None-Match", c.ifNoneMatch_)
 	}
@@ -3633,8 +3627,8 @@
 // want a
 // new version to be the default, you must
 // call
-// [projects.models.versions.setDefault](/ml/reference/rest/v1/proje
-// cts.models.versions/setDefault).
+// [projects.models.versions.setDefault](/ml-engine/reference/rest/v
+// 1/projects.models.versions/setDefault).
 func (r *ProjectsModelsVersionsService) Create(parent string, googlecloudmlv1__version *GoogleCloudMlV1__Version) *ProjectsModelsVersionsCreateCall {
 	c := &ProjectsModelsVersionsCreateCall{s: r.s, urlParams_: make(gensupport.URLParams)}
 	c.parent = parent
@@ -3673,7 +3667,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	var body io.Reader = nil
 	body, err := googleapi.WithoutDataWrapper.JSONReader(c.googlecloudmlv1__version)
 	if err != nil {
@@ -3729,7 +3722,7 @@
 	}
 	return ret, nil
 	// {
-	//   "description": "Creates a new version of a model from a trained TensorFlow model.\n\nIf the version created in the cloud by this call is the first deployed\nversion of the specified model, it will be made the default version of the\nmodel. When you add a version to a model that already has one or more\nversions, the default version does not automatically change. If you want a\nnew version to be the default, you must call\n[projects.models.versions.setDefault](/ml/reference/rest/v1/projects.models.versions/setDefault).",
+	//   "description": "Creates a new version of a model from a trained TensorFlow model.\n\nIf the version created in the cloud by this call is the first deployed\nversion of the specified model, it will be made the default version of the\nmodel. When you add a version to a model that already has one or more\nversions, the default version does not automatically change. If you want a\nnew version to be the default, you must call\n[projects.models.versions.setDefault](/ml-engine/reference/rest/v1/projects.models.versions/setDefault).",
 	//   "flatPath": "v1/projects/{projectsId}/models/{modelsId}/versions",
 	//   "httpMethod": "POST",
 	//   "id": "ml.projects.models.versions.create",
@@ -3815,7 +3808,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	var body io.Reader = nil
 	c.urlParams_.Set("alt", alt)
 	urls := googleapi.ResolveRelative(c.s.BasePath, "v1/{+name}")
@@ -3875,7 +3867,7 @@
 	//   ],
 	//   "parameters": {
 	//     "name": {
-	//       "description": "Required. The name of the version. You can get the names of all the\nversions of a model by calling\n[projects.models.versions.list](/ml/reference/rest/v1/projects.models.versions/list).\n\nAuthorization: requires `Editor` role on the parent project.",
+	//       "description": "Required. The name of the version. You can get the names of all the\nversions of a model by calling\n[projects.models.versions.list](/ml-engine/reference/rest/v1/projects.models.versions/list).\n\nAuthorization: requires `Editor` role on the parent project.",
 	//       "location": "path",
 	//       "pattern": "^projects/[^/]+/models/[^/]+/versions/[^/]+$",
 	//       "required": true,
@@ -3908,8 +3900,8 @@
 //
 // Models can have multiple versions. You can
 // call
-// [projects.models.versions.list](/ml/reference/rest/v1/projects.mo
-// dels.versions/list)
+// [projects.models.versions.list](/ml-engine/reference/rest/v1/proj
+// ects.models.versions/list)
 // to get the same information that this method returns for all of
 // the
 // versions of a model.
@@ -3960,7 +3952,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	if c.ifNoneMatch_ != "" {
 		reqHeaders.Set("If-None-Match", c.ifNoneMatch_)
 	}
@@ -4014,7 +4005,7 @@
 	}
 	return ret, nil
 	// {
-	//   "description": "Gets information about a model version.\n\nModels can have multiple versions. You can call\n[projects.models.versions.list](/ml/reference/rest/v1/projects.models.versions/list)\nto get the same information that this method returns for all of the\nversions of a model.",
+	//   "description": "Gets information about a model version.\n\nModels can have multiple versions. You can call\n[projects.models.versions.list](/ml-engine/reference/rest/v1/projects.models.versions/list)\nto get the same information that this method returns for all of the\nversions of a model.",
 	//   "flatPath": "v1/projects/{projectsId}/models/{modelsId}/versions/{versionsId}",
 	//   "httpMethod": "GET",
 	//   "id": "ml.projects.models.versions.get",
@@ -4129,7 +4120,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	if c.ifNoneMatch_ != "" {
 		reqHeaders.Set("If-None-Match", c.ifNoneMatch_)
 	}
@@ -4304,7 +4294,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	var body io.Reader = nil
 	body, err := googleapi.WithoutDataWrapper.JSONReader(c.googlecloudmlv1__setdefaultversionrequest)
 	if err != nil {
@@ -4369,7 +4358,7 @@
 	//   ],
 	//   "parameters": {
 	//     "name": {
-	//       "description": "Required. The name of the version to make the default for the model. You\ncan get the names of all the versions of a model by calling\n[projects.models.versions.list](/ml/reference/rest/v1/projects.models.versions/list).\n\nAuthorization: requires `Editor` role on the parent project.",
+	//       "description": "Required. The name of the version to make the default for the model. You\ncan get the names of all the versions of a model by calling\n[projects.models.versions.list](/ml-engine/reference/rest/v1/projects.models.versions/list).\n\nAuthorization: requires `Editor` role on the parent project.",
 	//       "location": "path",
 	//       "pattern": "^projects/[^/]+/models/[^/]+/versions/[^/]+$",
 	//       "required": true,
@@ -4455,7 +4444,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	var body io.Reader = nil
 	c.urlParams_.Set("alt", alt)
 	urls := googleapi.ResolveRelative(c.s.BasePath, "v1/{+name}:cancel")
@@ -4587,7 +4575,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	var body io.Reader = nil
 	c.urlParams_.Set("alt", alt)
 	urls := googleapi.ResolveRelative(c.s.BasePath, "v1/{+name}")
@@ -4728,7 +4715,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	if c.ifNoneMatch_ != "" {
 		reqHeaders.Set("If-None-Match", c.ifNoneMatch_)
 	}
@@ -4896,7 +4882,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	if c.ifNoneMatch_ != "" {
 		reqHeaders.Set("If-None-Match", c.ifNoneMatch_)
 	}
diff --git a/ml/v1beta1/ml-api.json b/ml/v1beta1/ml-api.json
index 92fa1db..07bf95a 100644
--- a/ml/v1beta1/ml-api.json
+++ b/ml/v1beta1/ml-api.json
@@ -1,698 +1,553 @@
 {
-  "ownerDomain": "google.com",
-  "name": "ml",
-  "batchPath": "batch",
-  "title": "Google Cloud Machine Learning Engine",
-  "ownerName": "Google",
-  "resources": {
-    "projects": {
-      "methods": {
-        "predict": {
-          "request": {
-            "$ref": "GoogleCloudMlV1beta1__PredictRequest"
+  "schemas": {
+    "GoogleCloudMlV1beta1__TrainingOutput": {
+      "id": "GoogleCloudMlV1beta1__TrainingOutput",
+      "description": "Represents results of a training job. Output only.",
+      "type": "object",
+      "properties": {
+        "trials": {
+          "type": "array",
+          "items": {
+            "$ref": "GoogleCloudMlV1beta1__HyperparameterOutput"
           },
-          "description": "Performs prediction on the data in the request.\n\n**** REMOVE FROM GENERATED DOCUMENTATION",
-          "response": {
-            "$ref": "GoogleApi__HttpBody"
-          },
-          "parameterOrder": [
-            "name"
-          ],
-          "httpMethod": "POST",
-          "parameters": {
-            "name": {
-              "pattern": "^projects/.+$",
-              "location": "path",
-              "description": "Required. The resource name of a model or a version.\n\nAuthorization: requires `Viewer` role on the parent project.",
-              "required": true,
-              "type": "string"
-            }
-          },
-          "scopes": [
-            "https://www.googleapis.com/auth/cloud-platform"
-          ],
-          "flatPath": "v1beta1/projects/{projectsId}:predict",
-          "path": "v1beta1/{+name}:predict",
-          "id": "ml.projects.predict"
+          "description": "Results for individual Hyperparameter trials.\nOnly set for hyperparameter tuning jobs."
         },
-        "getConfig": {
-          "scopes": [
-            "https://www.googleapis.com/auth/cloud-platform"
-          ],
-          "parameters": {
-            "name": {
-              "description": "Required. The project name.\n\nAuthorization: requires `Viewer` role on the specified project.",
-              "required": true,
-              "type": "string",
-              "pattern": "^projects/[^/]+$",
-              "location": "path"
-            }
-          },
-          "flatPath": "v1beta1/projects/{projectsId}:getConfig",
-          "path": "v1beta1/{+name}:getConfig",
-          "id": "ml.projects.getConfig",
-          "description": "Get the service account information associated with your project. You need\nthis information in order to grant the service account persmissions for\nthe Google Cloud Storage location where you put your model training code\nfor training the model with Google Cloud Machine Learning.",
-          "response": {
-            "$ref": "GoogleCloudMlV1beta1__GetConfigResponse"
-          },
-          "httpMethod": "GET",
-          "parameterOrder": [
-            "name"
-          ]
-        }
-      },
-      "resources": {
-        "operations": {
-          "methods": {
-            "delete": {
-              "parameters": {
-                "name": {
-                  "pattern": "^projects/[^/]+/operations/[^/]+$",
-                  "location": "path",
-                  "description": "The name of the operation resource to be deleted.",
-                  "required": true,
-                  "type": "string"
-                }
-              },
-              "scopes": [
-                "https://www.googleapis.com/auth/cloud-platform"
-              ],
-              "flatPath": "v1beta1/projects/{projectsId}/operations/{operationsId}",
-              "path": "v1beta1/{+name}",
-              "id": "ml.projects.operations.delete",
-              "description": "Deletes a long-running operation. This method indicates that the client is\nno longer interested in the operation result. It does not cancel the\noperation. If the server doesn't support this method, it returns\n`google.rpc.Code.UNIMPLEMENTED`.",
-              "response": {
-                "$ref": "GoogleProtobuf__Empty"
-              },
-              "parameterOrder": [
-                "name"
-              ],
-              "httpMethod": "DELETE"
-            },
-            "list": {
-              "description": "Lists operations that match the specified filter in the request. If the\nserver doesn't support this method, it returns `UNIMPLEMENTED`.\n\nNOTE: the `name` binding below allows API services to override the binding\nto use different resource name schemes, such as `users/*/operations`.",
-              "parameterOrder": [
-                "name"
-              ],
-              "response": {
-                "$ref": "GoogleLongrunning__ListOperationsResponse"
-              },
-              "httpMethod": "GET",
-              "scopes": [
-                "https://www.googleapis.com/auth/cloud-platform"
-              ],
-              "parameters": {
-                "name": {
-                  "description": "The name of the operation collection.",
-                  "required": true,
-                  "type": "string",
-                  "pattern": "^projects/[^/]+$",
-                  "location": "path"
-                },
-                "pageToken": {
-                  "location": "query",
-                  "description": "The standard list page token.",
-                  "type": "string"
-                },
-                "pageSize": {
-                  "description": "The standard list page size.",
-                  "format": "int32",
-                  "type": "integer",
-                  "location": "query"
-                },
-                "filter": {
-                  "description": "The standard list filter.",
-                  "type": "string",
-                  "location": "query"
-                }
-              },
-              "flatPath": "v1beta1/projects/{projectsId}/operations",
-              "id": "ml.projects.operations.list",
-              "path": "v1beta1/{+name}/operations"
-            },
-            "get": {
-              "parameters": {
-                "name": {
-                  "description": "The name of the operation resource.",
-                  "required": true,
-                  "type": "string",
-                  "pattern": "^projects/[^/]+/operations/[^/]+$",
-                  "location": "path"
-                }
-              },
-              "scopes": [
-                "https://www.googleapis.com/auth/cloud-platform"
-              ],
-              "flatPath": "v1beta1/projects/{projectsId}/operations/{operationsId}",
-              "path": "v1beta1/{+name}",
-              "id": "ml.projects.operations.get",
-              "description": "Gets the latest state of a long-running operation.  Clients can use this\nmethod to poll the operation result at intervals as recommended by the API\nservice.",
-              "response": {
-                "$ref": "GoogleLongrunning__Operation"
-              },
-              "httpMethod": "GET",
-              "parameterOrder": [
-                "name"
-              ]
-            },
-            "cancel": {
-              "scopes": [
-                "https://www.googleapis.com/auth/cloud-platform"
-              ],
-              "parameters": {
-                "name": {
-                  "description": "The name of the operation resource to be cancelled.",
-                  "required": true,
-                  "type": "string",
-                  "pattern": "^projects/[^/]+/operations/[^/]+$",
-                  "location": "path"
-                }
-              },
-              "flatPath": "v1beta1/projects/{projectsId}/operations/{operationsId}:cancel",
-              "id": "ml.projects.operations.cancel",
-              "path": "v1beta1/{+name}:cancel",
-              "description": "Starts asynchronous cancellation on a long-running operation.  The server\nmakes a best effort to cancel the operation, but success is not\nguaranteed.  If the server doesn't support this method, it returns\n`google.rpc.Code.UNIMPLEMENTED`.  Clients can use\nOperations.GetOperation or\nother methods to check whether the cancellation succeeded or whether the\noperation completed despite cancellation. On successful cancellation,\nthe operation is not deleted; instead, it becomes an operation with\nan Operation.error value with a google.rpc.Status.code of 1,\ncorresponding to `Code.CANCELLED`.",
-              "httpMethod": "POST",
-              "parameterOrder": [
-                "name"
-              ],
-              "response": {
-                "$ref": "GoogleProtobuf__Empty"
-              }
-            }
-          }
+        "completedTrialCount": {
+          "description": "The number of hyperparameter tuning trials that completed successfully.\nOnly set for hyperparameter tuning jobs.",
+          "format": "int64",
+          "type": "string"
         },
-        "models": {
-          "methods": {
-            "create": {
-              "parameters": {
-                "parent": {
-                  "description": "Required. The project name.\n\nAuthorization: requires `Editor` role on the specified project.",
-                  "required": true,
-                  "type": "string",
-                  "pattern": "^projects/[^/]+$",
-                  "location": "path"
-                }
-              },
-              "scopes": [
-                "https://www.googleapis.com/auth/cloud-platform"
-              ],
-              "flatPath": "v1beta1/projects/{projectsId}/models",
-              "id": "ml.projects.models.create",
-              "path": "v1beta1/{+parent}/models",
-              "request": {
-                "$ref": "GoogleCloudMlV1beta1__Model"
-              },
-              "description": "Creates a model which will later contain one or more versions.\n\nYou must add at least one version before you can request predictions from\nthe model. Add versions by calling\n[projects.models.versions.create](/ml/reference/rest/v1beta1/projects.models.versions/create).",
-              "httpMethod": "POST",
-              "parameterOrder": [
-                "parent"
-              ],
-              "response": {
-                "$ref": "GoogleCloudMlV1beta1__Model"
-              }
-            },
-            "delete": {
-              "parameters": {
-                "name": {
-                  "description": "Required. The name of the model.\n\nAuthorization: requires `Editor` role on the parent project.",
-                  "required": true,
-                  "type": "string",
-                  "pattern": "^projects/[^/]+/models/[^/]+$",
-                  "location": "path"
-                }
-              },
-              "scopes": [
-                "https://www.googleapis.com/auth/cloud-platform"
-              ],
-              "flatPath": "v1beta1/projects/{projectsId}/models/{modelsId}",
-              "id": "ml.projects.models.delete",
-              "path": "v1beta1/{+name}",
-              "description": "Deletes a model.\n\nYou can only delete a model if there are no versions in it. You can delete\nversions by calling\n[projects.models.versions.delete](/ml/reference/rest/v1beta1/projects.models.versions/delete).",
-              "httpMethod": "DELETE",
-              "parameterOrder": [
-                "name"
-              ],
-              "response": {
-                "$ref": "GoogleLongrunning__Operation"
-              }
-            },
-            "list": {
-              "description": "Lists the models in a project.\n\nEach project can contain multiple models, and each model can have multiple\nversions.",
-              "response": {
-                "$ref": "GoogleCloudMlV1beta1__ListModelsResponse"
-              },
-              "httpMethod": "GET",
-              "parameterOrder": [
-                "parent"
-              ],
-              "parameters": {
-                "pageToken": {
-                  "location": "query",
-                  "description": "Optional. A page token to request the next page of results.\n\nYou get the token from the `next_page_token` field of the response from\nthe previous call.",
-                  "type": "string"
-                },
-                "pageSize": {
-                  "location": "query",
-                  "description": "Optional. The number of models to retrieve per \"page\" of results. If there\nare more remaining results than this number, the response message will\ncontain a valid value in the `next_page_token` field.\n\nThe default value is 20, and the maximum page size is 100.",
-                  "format": "int32",
-                  "type": "integer"
-                },
-                "parent": {
-                  "pattern": "^projects/[^/]+$",
-                  "location": "path",
-                  "description": "Required. The name of the project whose models are to be listed.\n\nAuthorization: requires `Viewer` role on the specified project.",
-                  "required": true,
-                  "type": "string"
-                }
-              },
-              "scopes": [
-                "https://www.googleapis.com/auth/cloud-platform"
-              ],
-              "flatPath": "v1beta1/projects/{projectsId}/models",
-              "path": "v1beta1/{+parent}/models",
-              "id": "ml.projects.models.list"
-            },
-            "get": {
-              "scopes": [
-                "https://www.googleapis.com/auth/cloud-platform"
-              ],
-              "parameters": {
-                "name": {
-                  "description": "Required. The name of the model.\n\nAuthorization: requires `Viewer` role on the parent project.",
-                  "required": true,
-                  "type": "string",
-                  "pattern": "^projects/[^/]+/models/[^/]+$",
-                  "location": "path"
-                }
-              },
-              "flatPath": "v1beta1/projects/{projectsId}/models/{modelsId}",
-              "path": "v1beta1/{+name}",
-              "id": "ml.projects.models.get",
-              "description": "Gets information about a model, including its name, the description (if\nset), and the default version (if at least one version of the model has\nbeen deployed).",
-              "parameterOrder": [
-                "name"
-              ],
-              "response": {
-                "$ref": "GoogleCloudMlV1beta1__Model"
-              },
-              "httpMethod": "GET"
-            }
-          },
-          "resources": {
-            "versions": {
-              "methods": {
-                "create": {
-                  "description": "Creates a new version of a model from a trained TensorFlow model.\n\nIf the version created in the cloud by this call is the first deployed\nversion of the specified model, it will be made the default version of the\nmodel. When you add a version to a model that already has one or more\nversions, the default version does not automatically change. If you want a\nnew version to be the default, you must call\n[projects.models.versions.setDefault](/ml/reference/rest/v1beta1/projects.models.versions/setDefault).",
-                  "request": {
-                    "$ref": "GoogleCloudMlV1beta1__Version"
-                  },
-                  "httpMethod": "POST",
-                  "parameterOrder": [
-                    "parent"
-                  ],
-                  "response": {
-                    "$ref": "GoogleLongrunning__Operation"
-                  },
-                  "scopes": [
-                    "https://www.googleapis.com/auth/cloud-platform"
-                  ],
-                  "parameters": {
-                    "parent": {
-                      "description": "Required. The name of the model.\n\nAuthorization: requires `Editor` role on the parent project.",
-                      "required": true,
-                      "type": "string",
-                      "pattern": "^projects/[^/]+/models/[^/]+$",
-                      "location": "path"
-                    }
-                  },
-                  "flatPath": "v1beta1/projects/{projectsId}/models/{modelsId}/versions",
-                  "id": "ml.projects.models.versions.create",
-                  "path": "v1beta1/{+parent}/versions"
-                },
-                "setDefault": {
-                  "parameters": {
-                    "name": {
-                      "pattern": "^projects/[^/]+/models/[^/]+/versions/[^/]+$",
-                      "location": "path",
-                      "description": "Required. The name of the version to make the default for the model. You\ncan get the names of all the versions of a model by calling\n[projects.models.versions.list](/ml/reference/rest/v1beta1/projects.models.versions/list).\n\nAuthorization: requires `Editor` role on the parent project.",
-                      "required": true,
-                      "type": "string"
-                    }
-                  },
-                  "scopes": [
-                    "https://www.googleapis.com/auth/cloud-platform"
-                  ],
-                  "flatPath": "v1beta1/projects/{projectsId}/models/{modelsId}/versions/{versionsId}:setDefault",
-                  "id": "ml.projects.models.versions.setDefault",
-                  "path": "v1beta1/{+name}:setDefault",
-                  "request": {
-                    "$ref": "GoogleCloudMlV1beta1__SetDefaultVersionRequest"
-                  },
-                  "description": "Designates a version to be the default for the model.\n\nThe default version is used for prediction requests made against the model\nthat don't specify a version.\n\nThe first version to be created for a model is automatically set as the\ndefault. You must make any subsequent changes to the default version\nsetting manually using this method.",
-                  "httpMethod": "POST",
-                  "parameterOrder": [
-                    "name"
-                  ],
-                  "response": {
-                    "$ref": "GoogleCloudMlV1beta1__Version"
-                  }
-                },
-                "delete": {
-                  "response": {
-                    "$ref": "GoogleLongrunning__Operation"
-                  },
-                  "parameterOrder": [
-                    "name"
-                  ],
-                  "httpMethod": "DELETE",
-                  "scopes": [
-                    "https://www.googleapis.com/auth/cloud-platform"
-                  ],
-                  "parameters": {
-                    "name": {
-                      "description": "Required. The name of the version. You can get the names of all the\nversions of a model by calling\n[projects.models.versions.list](/ml/reference/rest/v1beta1/projects.models.versions/list).\n\nAuthorization: requires `Editor` role on the parent project.",
-                      "required": true,
-                      "type": "string",
-                      "pattern": "^projects/[^/]+/models/[^/]+/versions/[^/]+$",
-                      "location": "path"
-                    }
-                  },
-                  "flatPath": "v1beta1/projects/{projectsId}/models/{modelsId}/versions/{versionsId}",
-                  "path": "v1beta1/{+name}",
-                  "id": "ml.projects.models.versions.delete",
-                  "description": "Deletes a model version.\n\nEach model can have multiple versions deployed and in use at any given\ntime. Use this method to remove a single version.\n\nNote: You cannot delete the version that is set as the default version\nof the model unless it is the only remaining version."
-                },
-                "list": {
-                  "response": {
-                    "$ref": "GoogleCloudMlV1beta1__ListVersionsResponse"
-                  },
-                  "parameterOrder": [
-                    "parent"
-                  ],
-                  "httpMethod": "GET",
-                  "scopes": [
-                    "https://www.googleapis.com/auth/cloud-platform"
-                  ],
-                  "parameters": {
-                    "parent": {
-                      "description": "Required. The name of the model for which to list the version.\n\nAuthorization: requires `Viewer` role on the parent project.",
-                      "required": true,
-                      "type": "string",
-                      "pattern": "^projects/[^/]+/models/[^/]+$",
-                      "location": "path"
-                    },
-                    "pageToken": {
-                      "location": "query",
-                      "description": "Optional. A page token to request the next page of results.\n\nYou get the token from the `next_page_token` field of the response from\nthe previous call.",
-                      "type": "string"
-                    },
-                    "pageSize": {
-                      "description": "Optional. The number of versions to retrieve per \"page\" of results. If\nthere are more remaining results than this number, the response message\nwill contain a valid value in the `next_page_token` field.\n\nThe default value is 20, and the maximum page size is 100.",
-                      "format": "int32",
-                      "type": "integer",
-                      "location": "query"
-                    }
-                  },
-                  "flatPath": "v1beta1/projects/{projectsId}/models/{modelsId}/versions",
-                  "path": "v1beta1/{+parent}/versions",
-                  "id": "ml.projects.models.versions.list",
-                  "description": "Gets basic information about all the versions of a model.\n\nIf you expect that a model has a lot of versions, or if you need to handle\nonly a limited number of results at a time, you can request that the list\nbe retrieved in batches (called pages):"
-                },
-                "get": {
-                  "response": {
-                    "$ref": "GoogleCloudMlV1beta1__Version"
-                  },
-                  "httpMethod": "GET",
-                  "parameterOrder": [
-                    "name"
-                  ],
-                  "scopes": [
-                    "https://www.googleapis.com/auth/cloud-platform"
-                  ],
-                  "parameters": {
-                    "name": {
-                      "description": "Required. The name of the version.\n\nAuthorization: requires `Viewer` role on the parent project.",
-                      "required": true,
-                      "type": "string",
-                      "pattern": "^projects/[^/]+/models/[^/]+/versions/[^/]+$",
-                      "location": "path"
-                    }
-                  },
-                  "flatPath": "v1beta1/projects/{projectsId}/models/{modelsId}/versions/{versionsId}",
-                  "path": "v1beta1/{+name}",
-                  "id": "ml.projects.models.versions.get",
-                  "description": "Gets information about a model version.\n\nModels can have multiple versions. You can call\n[projects.models.versions.list](/ml/reference/rest/v1beta1/projects.models.versions/list)\nto get the same information that this method returns for all of the\nversions of a model."
-                }
-              }
-            }
-          }
+        "isHyperparameterTuningJob": {
+          "description": "Whether this job is a hyperparameter tuning job.",
+          "type": "boolean"
         },
-        "jobs": {
-          "methods": {
-            "list": {
-              "description": "Lists the jobs in the project.",
-              "httpMethod": "GET",
-              "response": {
-                "$ref": "GoogleCloudMlV1beta1__ListJobsResponse"
-              },
-              "parameterOrder": [
-                "parent"
-              ],
-              "parameters": {
-                "pageToken": {
-                  "location": "query",
-                  "description": "Optional. A page token to request the next page of results.\n\nYou get the token from the `next_page_token` field of the response from\nthe previous call.",
-                  "type": "string"
-                },
-                "pageSize": {
-                  "location": "query",
-                  "description": "Optional. The number of jobs to retrieve per \"page\" of results. If there\nare more remaining results than this number, the response message will\ncontain a valid value in the `next_page_token` field.\n\nThe default value is 20, and the maximum page size is 100.",
-                  "format": "int32",
-                  "type": "integer"
-                },
-                "parent": {
-                  "description": "Required. The name of the project for which to list jobs.\n\nAuthorization: requires `Viewer` role on the specified project.",
-                  "required": true,
-                  "type": "string",
-                  "pattern": "^projects/[^/]+$",
-                  "location": "path"
-                },
-                "filter": {
-                  "description": "Optional. Specifies the subset of jobs to retrieve.",
-                  "type": "string",
-                  "location": "query"
-                }
-              },
-              "scopes": [
-                "https://www.googleapis.com/auth/cloud-platform"
-              ],
-              "flatPath": "v1beta1/projects/{projectsId}/jobs",
-              "id": "ml.projects.jobs.list",
-              "path": "v1beta1/{+parent}/jobs"
-            },
-            "get": {
-              "response": {
-                "$ref": "GoogleCloudMlV1beta1__Job"
-              },
-              "parameterOrder": [
-                "name"
-              ],
-              "httpMethod": "GET",
-              "parameters": {
-                "name": {
-                  "pattern": "^projects/[^/]+/jobs/[^/]+$",
-                  "location": "path",
-                  "description": "Required. The name of the job to get the description of.\n\nAuthorization: requires `Viewer` role on the parent project.",
-                  "required": true,
-                  "type": "string"
-                }
-              },
-              "scopes": [
-                "https://www.googleapis.com/auth/cloud-platform"
-              ],
-              "flatPath": "v1beta1/projects/{projectsId}/jobs/{jobsId}",
-              "path": "v1beta1/{+name}",
-              "id": "ml.projects.jobs.get",
-              "description": "Describes a job."
-            },
-            "create": {
-              "parameters": {
-                "parent": {
-                  "description": "Required. The project name.\n\nAuthorization: requires `Editor` role on the specified project.",
-                  "required": true,
-                  "type": "string",
-                  "pattern": "^projects/[^/]+$",
-                  "location": "path"
-                }
-              },
-              "scopes": [
-                "https://www.googleapis.com/auth/cloud-platform"
-              ],
-              "flatPath": "v1beta1/projects/{projectsId}/jobs",
-              "id": "ml.projects.jobs.create",
-              "path": "v1beta1/{+parent}/jobs",
-              "request": {
-                "$ref": "GoogleCloudMlV1beta1__Job"
-              },
-              "description": "Creates a training or a batch prediction job.",
-              "httpMethod": "POST",
-              "parameterOrder": [
-                "parent"
-              ],
-              "response": {
-                "$ref": "GoogleCloudMlV1beta1__Job"
-              }
-            },
-            "cancel": {
-              "request": {
-                "$ref": "GoogleCloudMlV1beta1__CancelJobRequest"
-              },
-              "description": "Cancels a running job.",
-              "response": {
-                "$ref": "GoogleProtobuf__Empty"
-              },
-              "parameterOrder": [
-                "name"
-              ],
-              "httpMethod": "POST",
-              "parameters": {
-                "name": {
-                  "description": "Required. The name of the job to cancel.\n\nAuthorization: requires `Editor` role on the parent project.",
-                  "required": true,
-                  "type": "string",
-                  "pattern": "^projects/[^/]+/jobs/[^/]+$",
-                  "location": "path"
-                }
-              },
-              "scopes": [
-                "https://www.googleapis.com/auth/cloud-platform"
-              ],
-              "flatPath": "v1beta1/projects/{projectsId}/jobs/{jobsId}:cancel",
-              "path": "v1beta1/{+name}:cancel",
-              "id": "ml.projects.jobs.cancel"
-            }
-          }
+        "consumedMLUnits": {
+          "description": "The amount of ML units consumed by the job.",
+          "format": "double",
+          "type": "number"
         }
       }
-    }
-  },
-  "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"
     },
-    "pp": {
-      "location": "query",
-      "description": "Pretty-print response.",
-      "type": "boolean",
-      "default": "true"
+    "GoogleCloudMlV1__Version": {
+      "description": "Represents a version of the model.\n\nEach version is a trained model deployed in the cloud, ready to handle\nprediction requests. A model can have multiple versions. You can get\ninformation about all of the versions of a given model by calling\n[projects.models.versions.list](/ml-engine/reference/rest/v1/projects.models.versions/list).",
+      "type": "object",
+      "properties": {
+        "description": {
+          "description": "Optional. The description specified for the version when it was created.",
+          "type": "string"
+        },
+        "deploymentUri": {
+          "description": "Required. The Google Cloud Storage location of the trained model used to\ncreate the version. See the\n[overview of model deployment](/ml-engine/docs/concepts/deployment-overview) for\nmore informaiton.\n\nWhen passing Version to\n[projects.models.versions.create](/ml-engine/reference/rest/v1/projects.models.versions/create)\nthe model service uses the specified location as the source of the model.\nOnce deployed, the model version is hosted by the prediction service, so\nthis location is useful only as a historical record.",
+          "type": "string"
+        },
+        "isDefault": {
+          "description": "Output only. If true, this version will be used to handle prediction\nrequests that do not specify a version.\n\nYou can change the default version by calling\n[projects.methods.versions.setDefault](/ml-engine/reference/rest/v1/projects.models.versions/setDefault).",
+          "type": "boolean"
+        },
+        "createTime": {
+          "description": "Output only. The time the version was created.",
+          "format": "google-datetime",
+          "type": "string"
+        },
+        "manualScaling": {
+          "$ref": "GoogleCloudMlV1__ManualScaling",
+          "description": "Optional. Manually select the number of nodes to use for serving the\nmodel. If unset (i.e., by default), the number of nodes used to serve\nthe model automatically scales with traffic. However, care should be\ntaken to ramp up traffic according to the model's ability to scale. If\nyour model needs to handle bursts of traffic beyond it's ability to\nscale, it is recommended you set this field appropriately."
+        },
+        "name": {
+          "description": "Required.The name specified for the version when it was created.\n\nThe version name must be unique within the model it is created in.",
+          "type": "string"
+        },
+        "lastUseTime": {
+          "description": "Output only. The time the version was last used for prediction.",
+          "format": "google-datetime",
+          "type": "string"
+        },
+        "runtimeVersion": {
+          "description": "Optional. The Google Cloud ML runtime version to use for this deployment.\nIf not set, Google Cloud ML will choose a version.",
+          "type": "string"
+        }
+      },
+      "id": "GoogleCloudMlV1__Version"
     },
-    "oauth_token": {
-      "location": "query",
-      "description": "OAuth 2.0 token for the current user.",
-      "type": "string"
+    "GoogleCloudMlV1beta1__HyperparameterSpec": {
+      "description": "Represents a set of hyperparameters to optimize.",
+      "type": "object",
+      "properties": {
+        "maxParallelTrials": {
+          "type": "integer",
+          "description": "Optional. The number of training trials to run concurrently.\nYou can reduce the time it takes to perform hyperparameter tuning by adding\ntrials in parallel. However, each trail only benefits from the information\ngained in completed trials. That means that a trial does not get access to\nthe results of trials running at the same time, which could reduce the\nquality of the overall optimization.\n\nEach trial will use the same scale tier and machine types.\n\nDefaults to one.",
+          "format": "int32"
+        },
+        "goal": {
+          "enumDescriptions": [
+            "Goal Type will default to maximize.",
+            "Maximize the goal metric.",
+            "Minimize the goal metric."
+          ],
+          "enum": [
+            "GOAL_TYPE_UNSPECIFIED",
+            "MAXIMIZE",
+            "MINIMIZE"
+          ],
+          "description": "Required. The type of goal to use for tuning. Available types are\n`MAXIMIZE` and `MINIMIZE`.\n\nDefaults to `MAXIMIZE`.",
+          "type": "string"
+        },
+        "hyperparameterMetricTag": {
+          "description": "Optional. The Tensorflow summary tag name to use for optimizing trials. For\ncurrent versions of Tensorflow, this tag name should exactly match what is\nshown in Tensorboard, including all scopes.  For versions of Tensorflow\nprior to 0.12, this should be only the tag passed to tf.Summary.\nBy default, \"training/hptuning/metric\" will be used.",
+          "type": "string"
+        },
+        "params": {
+          "description": "Required. The set of parameters to tune.",
+          "type": "array",
+          "items": {
+            "$ref": "GoogleCloudMlV1beta1__ParameterSpec"
+          }
+        },
+        "maxTrials": {
+          "description": "Optional. How many training trials should be attempted to optimize\nthe specified hyperparameters.\n\nDefaults to one.",
+          "format": "int32",
+          "type": "integer"
+        }
+      },
+      "id": "GoogleCloudMlV1beta1__HyperparameterSpec"
     },
-    "bearer_token": {
-      "description": "OAuth bearer token.",
-      "type": "string",
-      "location": "query"
+    "GoogleCloudMlV1beta1__OperationMetadata": {
+      "type": "object",
+      "properties": {
+        "version": {
+          "description": "Contains the version associated with the operation.",
+          "$ref": "GoogleCloudMlV1beta1__Version"
+        },
+        "endTime": {
+          "description": "The time operation processing completed.",
+          "format": "google-datetime",
+          "type": "string"
+        },
+        "operationType": {
+          "enum": [
+            "OPERATION_TYPE_UNSPECIFIED",
+            "CREATE_VERSION",
+            "DELETE_VERSION",
+            "DELETE_MODEL"
+          ],
+          "description": "The operation type.",
+          "type": "string",
+          "enumDescriptions": [
+            "Unspecified operation type.",
+            "An operation to create a new version.",
+            "An operation to delete an existing version.",
+            "An operation to delete an existing model."
+          ]
+        },
+        "startTime": {
+          "description": "The time operation processing started.",
+          "format": "google-datetime",
+          "type": "string"
+        },
+        "isCancellationRequested": {
+          "description": "Indicates whether a request to cancel this operation has been made.",
+          "type": "boolean"
+        },
+        "createTime": {
+          "description": "The time the operation was submitted.",
+          "format": "google-datetime",
+          "type": "string"
+        },
+        "modelName": {
+          "description": "Contains the name of the model associated with the operation.",
+          "type": "string"
+        }
+      },
+      "id": "GoogleCloudMlV1beta1__OperationMetadata",
+      "description": "Represents the metadata of the long-running operation."
     },
-    "upload_protocol": {
-      "description": "Upload protocol for media (e.g. \"raw\", \"multipart\").",
-      "type": "string",
-      "location": "query"
+    "GoogleCloudMlV1__OperationMetadata": {
+      "description": "Represents the metadata of the long-running operation.",
+      "type": "object",
+      "properties": {
+        "endTime": {
+          "description": "The time operation processing completed.",
+          "format": "google-datetime",
+          "type": "string"
+        },
+        "operationType": {
+          "enum": [
+            "OPERATION_TYPE_UNSPECIFIED",
+            "CREATE_VERSION",
+            "DELETE_VERSION",
+            "DELETE_MODEL"
+          ],
+          "description": "The operation type.",
+          "type": "string",
+          "enumDescriptions": [
+            "Unspecified operation type.",
+            "An operation to create a new version.",
+            "An operation to delete an existing version.",
+            "An operation to delete an existing model."
+          ]
+        },
+        "startTime": {
+          "type": "string",
+          "description": "The time operation processing started.",
+          "format": "google-datetime"
+        },
+        "isCancellationRequested": {
+          "description": "Indicates whether a request to cancel this operation has been made.",
+          "type": "boolean"
+        },
+        "createTime": {
+          "description": "The time the operation was submitted.",
+          "format": "google-datetime",
+          "type": "string"
+        },
+        "modelName": {
+          "description": "Contains the name of the model associated with the operation.",
+          "type": "string"
+        },
+        "version": {
+          "description": "Contains the version associated with the operation.",
+          "$ref": "GoogleCloudMlV1__Version"
+        }
+      },
+      "id": "GoogleCloudMlV1__OperationMetadata"
     },
-    "prettyPrint": {
-      "description": "Returns response with indentations and line breaks.",
-      "type": "boolean",
-      "default": "true",
-      "location": "query"
+    "GoogleCloudMlV1beta1__ListModelsResponse": {
+      "description": "Response message for the ListModels method.",
+      "type": "object",
+      "properties": {
+        "nextPageToken": {
+          "description": "Optional. Pass this token as the `page_token` field of the request for a\nsubsequent call.",
+          "type": "string"
+        },
+        "models": {
+          "description": "The list of models.",
+          "type": "array",
+          "items": {
+            "$ref": "GoogleCloudMlV1beta1__Model"
+          }
+        }
+      },
+      "id": "GoogleCloudMlV1beta1__ListModelsResponse"
     },
-    "fields": {
-      "description": "Selector specifying which fields to include in a partial response.",
-      "type": "string",
-      "location": "query"
+    "GoogleLongrunning__Operation": {
+      "description": "This resource represents a long-running operation that is the result of a\nnetwork API call.",
+      "type": "object",
+      "properties": {
+        "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\nmethod returns no data on success, such as `Delete`, the response is\n`google.protobuf.Empty`.  If the original method is standard\n`Get`/`Create`/`Update`, the response should be the resource.  For other\nmethods, the response should have the type `XxxResponse`, where `Xxx`\nis the original method name.  For example, if the original method name\nis `TakeSnapshot()`, the inferred response type is\n`TakeSnapshotResponse`."
+        },
+        "name": {
+          "description": "The server-assigned name, which is only unique within the same service that\noriginally returns it. If you use the default HTTP mapping, the\n`name` should have the format of `operations/some/unique/name`.",
+          "type": "string"
+        },
+        "error": {
+          "$ref": "GoogleRpc__Status",
+          "description": "The error result of the operation in case of failure or cancellation."
+        },
+        "metadata": {
+          "description": "Service-specific metadata associated with the operation.  It typically\ncontains progress information and common metadata such as create time.\nSome services might not provide such metadata.  Any method that returns a\nlong-running operation should document the metadata type, if any.",
+          "type": "object",
+          "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.\nIf true, the operation is completed, and either `error` or `response` is\navailable.",
+          "type": "boolean"
+        }
+      },
+      "id": "GoogleLongrunning__Operation"
     },
-    "uploadType": {
-      "description": "Legacy upload protocol for media (e.g. \"media\", \"multipart\").",
-      "type": "string",
-      "location": "query"
+    "GoogleCloudMlV1beta1__HyperparameterOutput": {
+      "description": "Represents the result of a single hyperparameter tuning trial from a\ntraining job. The TrainingOutput object that is returned on successful\ncompletion of a training job with hyperparameter tuning includes a list\nof HyperparameterOutput objects, one for each successful trial.",
+      "type": "object",
+      "properties": {
+        "allMetrics": {
+          "description": "All recorded object metrics for this trial.",
+          "type": "array",
+          "items": {
+            "$ref": "GoogleCloudMlV1beta1_HyperparameterOutput_HyperparameterMetric"
+          }
+        },
+        "finalMetric": {
+          "$ref": "GoogleCloudMlV1beta1_HyperparameterOutput_HyperparameterMetric",
+          "description": "The final objective metric seen for this trial."
+        },
+        "hyperparameters": {
+          "additionalProperties": {
+            "type": "string"
+          },
+          "description": "The hyperparameters given to this trial.",
+          "type": "object"
+        },
+        "trialId": {
+          "type": "string",
+          "description": "The trial id for these results."
+        }
+      },
+      "id": "GoogleCloudMlV1beta1__HyperparameterOutput"
     },
-    "callback": {
-      "description": "JSONP",
-      "type": "string",
-      "location": "query"
+    "GoogleProtobuf__Empty": {
+      "description": "A generic empty message that you can re-use to avoid defining duplicated\nempty messages in your APIs. A typical example is to use it as the request\nor the response type of an API method. For instance:\n\n    service Foo {\n      rpc Bar(google.protobuf.Empty) returns (google.protobuf.Empty);\n    }\n\nThe JSON representation for `Empty` is empty JSON object `{}`.",
+      "type": "object",
+      "properties": {},
+      "id": "GoogleProtobuf__Empty"
     },
-    "$.xgafv": {
-      "description": "V1 error format.",
-      "type": "string",
-      "enumDescriptions": [
-        "v1 error format",
-        "v2 error format"
-      ],
-      "location": "query",
-      "enum": [
-        "1",
-        "2"
-      ]
+    "GoogleCloudMlV1beta1__ManualScaling": {
+      "properties": {
+        "nodes": {
+          "description": "The number of nodes to allocate for this model. These nodes are always up,\nstarting from the time the model is deployed, so the cost of operating\nthis model will be proportional to nodes * number of hours since\ndeployment.",
+          "format": "int32",
+          "type": "integer"
+        }
+      },
+      "id": "GoogleCloudMlV1beta1__ManualScaling",
+      "description": "Options for manually scaling a model.",
+      "type": "object"
     },
-    "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"
+    "GoogleRpc__Status": {
+      "type": "object",
+      "properties": {
+        "message": {
+          "description": "A developer-facing error message, which should be in English. Any\nuser-facing error message should be localized and sent in the\ngoogle.rpc.Status.details field, or localized by the client.",
+          "type": "string"
+        },
+        "details": {
+          "description": "A list of messages that carry the error details.  There will be a\ncommon set of message types for APIs to use.",
+          "type": "array",
+          "items": {
+            "additionalProperties": {
+              "type": "any",
+              "description": "Properties of the object. Contains field @type with type URL."
+            },
+            "type": "object"
+          }
+        },
+        "code": {
+          "description": "The status code, which should be an enum value of google.rpc.Code.",
+          "format": "int32",
+          "type": "integer"
+        }
+      },
+      "id": "GoogleRpc__Status",
+      "description": "The `Status` type defines a logical error model that is suitable for different\nprogramming environments, including REST APIs and RPC APIs. It is used by\n[gRPC](https://github.com/grpc). The error model is designed to be:\n\n- Simple to use and understand for most users\n- Flexible enough to meet unexpected needs\n\n# Overview\n\nThe `Status` message contains three pieces of data: error code, error message,\nand error details. The error code should be an enum value of\ngoogle.rpc.Code, but it may accept additional error codes if needed.  The\nerror message should be a developer-facing English message that helps\ndevelopers *understand* and *resolve* the error. If a localized user-facing\nerror message is needed, put the localized message in the error details or\nlocalize it in the client. The optional error details may contain arbitrary\ninformation about the error. There is a predefined set of error detail types\nin the package `google.rpc` which can be used for common error conditions.\n\n# Language mapping\n\nThe `Status` message is the logical representation of the error model, but it\nis not necessarily the actual wire format. When the `Status` message is\nexposed in different client libraries and different wire protocols, it can be\nmapped differently. For example, it will likely be mapped to some exceptions\nin Java, but more likely mapped to some error codes in C.\n\n# Other uses\n\nThe error model and the `Status` message can be used in a variety of\nenvironments, either with or without APIs, to provide a\nconsistent developer experience across different environments.\n\nExample uses of this error model include:\n\n- Partial errors. If a service needs to return partial errors to the client,\n    it may embed the `Status` in the normal response to indicate the partial\n    errors.\n\n- Workflow errors. A typical workflow has multiple steps. Each step may\n    have a `Status` message for error reporting purpose.\n\n- Batch operations. If a client uses batch request and batch response, the\n    `Status` message should be used directly inside batch response, one for\n    each error sub-response.\n\n- Asynchronous operations. If an API call embeds asynchronous operation\n    results in its response, the status of those operations should be\n    represented directly using the `Status` message.\n\n- Logging. If some API errors are stored in logs, the message `Status` could\n    be used directly after any stripping needed for security/privacy reasons."
     },
-    "access_token": {
-      "description": "OAuth access token.",
-      "type": "string",
-      "location": "query"
+    "GoogleCloudMlV1beta1__PredictRequest": {
+      "properties": {
+        "httpBody": {
+          "$ref": "GoogleApi__HttpBody",
+          "description": "\nRequired. The prediction request body."
+        }
+      },
+      "id": "GoogleCloudMlV1beta1__PredictRequest",
+      "description": "Request for predictions to be issued against a trained model.\n\nThe body of the request is a single JSON object with a single top-level\nfield:\n\n\u003cdl\u003e\n  \u003cdt\u003einstances\u003c/dt\u003e\n  \u003cdd\u003eA JSON array containing values representing the instances to use for\n      prediction.\u003c/dd\u003e\n\u003c/dl\u003e\n\nThe structure of each element of the instances list is determined by your\nmodel's input definition. Instances can include named inputs or can contain\nonly unlabeled values.\n\nNot all data includes named inputs. Some instances will be simple\nJSON values (boolean, number, or string). However, instances are often lists\nof simple values, or complex nested lists. Here are some examples of request\nbodies:\n\nCSV data with each row encoded as a string value:\n\u003cpre\u003e\n{\"instances\": [\"1.0,true,\\\\\"x\\\\\"\", \"-2.0,false,\\\\\"y\\\\\"\"]}\n\u003c/pre\u003e\nPlain text:\n\u003cpre\u003e\n{\"instances\": [\"the quick brown fox\", \"la bruja le dio\"]}\n\u003c/pre\u003e\nSentences encoded as lists of words (vectors of strings):\n\u003cpre\u003e\n{\n  \"instances\": [\n    [\"the\",\"quick\",\"brown\"],\n    [\"la\",\"bruja\",\"le\"],\n    ...\n  ]\n}\n\u003c/pre\u003e\nFloating point scalar values:\n\u003cpre\u003e\n{\"instances\": [0.0, 1.1, 2.2]}\n\u003c/pre\u003e\nVectors of integers:\n\u003cpre\u003e\n{\n  \"instances\": [\n    [0, 1, 2],\n    [3, 4, 5],\n    ...\n  ]\n}\n\u003c/pre\u003e\nTensors (in this case, two-dimensional tensors):\n\u003cpre\u003e\n{\n  \"instances\": [\n    [\n      [0, 1, 2],\n      [3, 4, 5]\n    ],\n    ...\n  ]\n}\n\u003c/pre\u003e\nImages can be represented different ways. In this encoding scheme the first\ntwo dimensions represent the rows and columns of the image, and the third\ncontains lists (vectors) of the R, G, and B values for each pixel.\n\u003cpre\u003e\n{\n  \"instances\": [\n    [\n      [\n        [138, 30, 66],\n        [130, 20, 56],\n        ...\n      ],\n      [\n        [126, 38, 61],\n        [122, 24, 57],\n        ...\n      ],\n      ...\n    ],\n    ...\n  ]\n}\n\u003c/pre\u003e\nJSON strings must be encoded as UTF-8. To send binary data, you must\nbase64-encode the data and mark it as binary. To mark a JSON string\nas binary, replace it with a JSON object with a single attribute named `b64`:\n\u003cpre\u003e{\"b64\": \"...\"} \u003c/pre\u003e\nFor example:\n\nTwo Serialized tf.Examples (fake data, for illustrative purposes only):\n\u003cpre\u003e\n{\"instances\": [{\"b64\": \"X5ad6u\"}, {\"b64\": \"IA9j4nx\"}]}\n\u003c/pre\u003e\nTwo JPEG image byte strings (fake data, for illustrative purposes only):\n\u003cpre\u003e\n{\"instances\": [{\"b64\": \"ASa8asdf\"}, {\"b64\": \"JLK7ljk3\"}]}\n\u003c/pre\u003e\nIf your data includes named references, format each instance as a JSON object\nwith the named references as the keys:\n\nJSON input data to be preprocessed:\n\u003cpre\u003e\n{\n  \"instances\": [\n    {\n      \"a\": 1.0,\n      \"b\": true,\n      \"c\": \"x\"\n    },\n    {\n      \"a\": -2.0,\n      \"b\": false,\n      \"c\": \"y\"\n    }\n  ]\n}\n\u003c/pre\u003e\nSome models have an underlying TensorFlow graph that accepts multiple input\ntensors. In this case, you should use the names of JSON name/value pairs to\nidentify the input tensors, as shown in the following exmaples:\n\nFor a graph with input tensor aliases \"tag\" (string) and \"image\"\n(base64-encoded string):\n\u003cpre\u003e\n{\n  \"instances\": [\n    {\n      \"tag\": \"beach\",\n      \"image\": {\"b64\": \"ASa8asdf\"}\n    },\n    {\n      \"tag\": \"car\",\n      \"image\": {\"b64\": \"JLK7ljk3\"}\n    }\n  ]\n}\n\u003c/pre\u003e\nFor a graph with input tensor aliases \"tag\" (string) and \"image\"\n(3-dimensional array of 8-bit ints):\n\u003cpre\u003e\n{\n  \"instances\": [\n    {\n      \"tag\": \"beach\",\n      \"image\": [\n        [\n          [138, 30, 66],\n          [130, 20, 56],\n          ...\n        ],\n        [\n          [126, 38, 61],\n          [122, 24, 57],\n          ...\n        ],\n        ...\n      ]\n    },\n    {\n      \"tag\": \"car\",\n      \"image\": [\n        [\n          [255, 0, 102],\n          [255, 0, 97],\n          ...\n        ],\n        [\n          [254, 1, 101],\n          [254, 2, 93],\n          ...\n        ],\n        ...\n      ]\n    },\n    ...\n  ]\n}\n\u003c/pre\u003e\nIf the call is successful, the response body will contain one prediction\nentry per instance in the request body. If prediction fails for any\ninstance, the response body will contain no predictions and will contian\na single error entry instead.",
+      "type": "object"
     },
-    "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"
-    }
-  },
-  "version": "v1beta1",
-  "baseUrl": "https://ml.googleapis.com/",
-  "kind": "discovery#restDescription",
-  "description": "An API to enable creating and using machine learning models.",
-  "servicePath": "",
-  "basePath": "",
-  "revision": "20170304",
-  "documentationLink": "https://cloud.google.com/ml/",
-  "id": "ml:v1beta1",
-  "discoveryVersion": "v1",
-  "version_module": "True",
-  "schemas": {
+    "GoogleCloudMlV1beta1__PredictionInput": {
+      "properties": {
+        "region": {
+          "description": "Required. The Google Compute Engine region to run the prediction job in.",
+          "type": "string"
+        },
+        "versionName": {
+          "description": "Use this field if you want to specify a version of the model to use. The\nstring is formatted the same way as `model_version`, with the addition\nof the version information:\n\n`\"projects/\u003cvar\u003e[YOUR_PROJECT]\u003c/var\u003e/models/\u003cvar\u003eYOUR_MODEL/versions/\u003cvar\u003e[YOUR_VERSION]\u003c/var\u003e\"`",
+          "type": "string"
+        },
+        "modelName": {
+          "description": "Use this field if you want to use the default version for the specified\nmodel. The string must use the following format:\n\n`\"projects/\u003cvar\u003e[YOUR_PROJECT]\u003c/var\u003e/models/\u003cvar\u003e[YOUR_MODEL]\u003c/var\u003e\"`",
+          "type": "string"
+        },
+        "outputPath": {
+          "description": "Required. The output Google Cloud Storage location.",
+          "type": "string"
+        },
+        "maxWorkerCount": {
+          "description": "Optional. The maximum number of workers to be used for parallel processing.\nDefaults to 10 if not specified.",
+          "format": "int64",
+          "type": "string"
+        },
+        "uri": {
+          "description": "Use this field if you want to specify a Google Cloud Storage path for\nthe model to use.",
+          "type": "string"
+        },
+        "dataFormat": {
+          "enumDescriptions": [
+            "Unspecified format.",
+            "The source file is a text file with instances separated by the\nnew-line character.",
+            "The source file is a TFRecord file.",
+            "The source file is a GZIP-compressed TFRecord file."
+          ],
+          "enum": [
+            "DATA_FORMAT_UNSPECIFIED",
+            "TEXT",
+            "TF_RECORD",
+            "TF_RECORD_GZIP"
+          ],
+          "description": "Required. The format of the input data files.",
+          "type": "string"
+        },
+        "runtimeVersion": {
+          "description": "Optional. The Google Cloud ML runtime version to use for this batch\nprediction. If not set, Google Cloud ML will pick the runtime version used\nduring the CreateVersion request for this model version, or choose the\nlatest stable version when model version information is not available\nsuch as when the model is specified by uri.",
+          "type": "string"
+        },
+        "inputPaths": {
+          "description": "Required. The Google Cloud Storage location of the input data files.\nMay contain wildcards.",
+          "type": "array",
+          "items": {
+            "type": "string"
+          }
+        }
+      },
+      "id": "GoogleCloudMlV1beta1__PredictionInput",
+      "description": "Represents input parameters for a prediction job.",
+      "type": "object"
+    },
+    "GoogleApi__HttpBody": {
+      "properties": {
+        "data": {
+          "type": "string",
+          "description": "HTTP body binary data.",
+          "format": "byte"
+        },
+        "contentType": {
+          "description": "The HTTP Content-Type string representing the content type of the body.",
+          "type": "string"
+        }
+      },
+      "id": "GoogleApi__HttpBody",
+      "description": "Message that represents an arbitrary HTTP body. It should only be used for\npayload formats that can't be represented as JSON, such as raw binary or\nan HTML page.\n\n\nThis message can be used both in streaming and non-streaming API methods in\nthe request as well as the response.\n\nIt can be used as a top-level request field, which is convenient if one\nwants to extract parameters from either the URL or HTTP template into the\nrequest fields and also want access to the raw HTTP body.\n\nExample:\n\n    message GetResourceRequest {\n      // A unique request id.\n      string request_id = 1;\n\n      // The raw HTTP body is bound to this field.\n      google.api.HttpBody http_body = 2;\n    }\n\n    service ResourceService {\n      rpc GetResource(GetResourceRequest) returns (google.api.HttpBody);\n      rpc UpdateResource(google.api.HttpBody) returns (google.protobuf.Empty);\n    }\n\nExample with streaming methods:\n\n    service CaldavService {\n      rpc GetCalendar(stream google.api.HttpBody)\n        returns (stream google.api.HttpBody);\n      rpc UpdateCalendar(stream google.api.HttpBody)\n        returns (stream google.api.HttpBody);\n    }\n\nUse of this type only changes how the request and response bodies are\nhandled, all other features will continue to work unchanged.",
+      "type": "object"
+    },
+    "GoogleCloudMlV1beta1__ListVersionsResponse": {
+      "description": "Response message for the ListVersions method.",
+      "type": "object",
+      "properties": {
+        "versions": {
+          "description": "The list of versions.",
+          "type": "array",
+          "items": {
+            "$ref": "GoogleCloudMlV1beta1__Version"
+          }
+        },
+        "nextPageToken": {
+          "type": "string",
+          "description": "Optional. Pass this token as the `page_token` field of the request for a\nsubsequent call."
+        }
+      },
+      "id": "GoogleCloudMlV1beta1__ListVersionsResponse"
+    },
+    "GoogleCloudMlV1beta1__Version": {
+      "type": "object",
+      "properties": {
+        "lastUseTime": {
+          "type": "string",
+          "description": "Output only. The time the version was last used for prediction.",
+          "format": "google-datetime"
+        },
+        "runtimeVersion": {
+          "type": "string",
+          "description": "Optional. The Google Cloud ML runtime version to use for this deployment.\nIf not set, Google Cloud ML will choose a version."
+        },
+        "description": {
+          "description": "Optional. The description specified for the version when it was created.",
+          "type": "string"
+        },
+        "deploymentUri": {
+          "description": "Required. The Google Cloud Storage location of the trained model used to\ncreate the version. See the\n[overview of model deployment](/ml-engine/docs/concepts/deployment-overview) for\nmore informaiton.\n\nWhen passing Version to\n[projects.models.versions.create](/ml-engine/reference/rest/v1beta1/projects.models.versions/create)\nthe model service uses the specified location as the source of the model.\nOnce deployed, the model version is hosted by the prediction service, so\nthis location is useful only as a historical record.",
+          "type": "string"
+        },
+        "isDefault": {
+          "description": "Output only. If true, this version will be used to handle prediction\nrequests that do not specify a version.\n\nYou can change the default version by calling\n[projects.methods.versions.setDefault](/ml-engine/reference/rest/v1beta1/projects.models.versions/setDefault).",
+          "type": "boolean"
+        },
+        "createTime": {
+          "description": "Output only. The time the version was created.",
+          "format": "google-datetime",
+          "type": "string"
+        },
+        "manualScaling": {
+          "$ref": "GoogleCloudMlV1beta1__ManualScaling",
+          "description": "Optional. Manually select the number of nodes to use for serving the\nmodel. If unset (i.e., by default), the number of nodes used to serve\nthe model automatically scales with traffic. However, care should be\ntaken to ramp up traffic according to the model's ability to scale. If\nyour model needs to handle bursts of traffic beyond it's ability to\nscale, it is recommended you set this field appropriately."
+        },
+        "name": {
+          "type": "string",
+          "description": "Required.The name specified for the version when it was created.\n\nThe version name must be unique within the model it is created in."
+        }
+      },
+      "id": "GoogleCloudMlV1beta1__Version",
+      "description": "Represents a version of the model.\n\nEach version is a trained model deployed in the cloud, ready to handle\nprediction requests. A model can have multiple versions. You can get\ninformation about all of the versions of a given model by calling\n[projects.models.versions.list](/ml-engine/reference/rest/v1beta1/projects.models.versions/list)."
+    },
+    "GoogleCloudMlV1beta1__ListJobsResponse": {
+      "properties": {
+        "jobs": {
+          "description": "The list of jobs.",
+          "type": "array",
+          "items": {
+            "$ref": "GoogleCloudMlV1beta1__Job"
+          }
+        },
+        "nextPageToken": {
+          "description": "Optional. Pass this token as the `page_token` field of the request for a\nsubsequent call.",
+          "type": "string"
+        }
+      },
+      "id": "GoogleCloudMlV1beta1__ListJobsResponse",
+      "description": "Response message for the ListJobs method.",
+      "type": "object"
+    },
+    "GoogleCloudMlV1beta1__Model": {
+      "description": "Represents a machine learning solution.\n\nA model can have multiple versions, each of which is a deployed, trained\nmodel ready to receive prediction requests. The model itself is just a\ncontainer.",
+      "type": "object",
+      "properties": {
+        "name": {
+          "description": "Required. The name specified for the model when it was created.\n\nThe model name must be unique within the project it is created in.",
+          "type": "string"
+        },
+        "description": {
+          "description": "Optional. The description specified for the model when it was created.",
+          "type": "string"
+        },
+        "onlinePredictionLogging": {
+          "description": "Optional. If true, enables StackDriver Logging for online prediction.\nDefault is false.",
+          "type": "boolean"
+        },
+        "defaultVersion": {
+          "$ref": "GoogleCloudMlV1beta1__Version",
+          "description": "Output only. The default version of the model. This version will be used to\nhandle prediction requests that do not specify a version.\n\nYou can change the default version by calling\n[projects.methods.versions.setDefault](/ml-engine/reference/rest/v1beta1/projects.models.versions/setDefault)."
+        },
+        "regions": {
+          "description": "Optional. The list of regions where the model is going to be deployed.\nCurrently only one region per model is supported.\nDefaults to 'us-central1' if nothing is set.\nNote:\n*   No matter where a model is deployed, it can always be accessed by\n    users from anywhere, both for online and batch prediction.\n*   The region for a batch prediction job is set by the region field when\n    submitting the batch prediction job and does not take its value from\n    this field.",
+          "type": "array",
+          "items": {
+            "type": "string"
+          }
+        }
+      },
+      "id": "GoogleCloudMlV1beta1__Model"
+    },
+    "GoogleCloudMlV1beta1__CancelJobRequest": {
+      "description": "Request message for the CancelJob method.",
+      "type": "object",
+      "properties": {},
+      "id": "GoogleCloudMlV1beta1__CancelJobRequest"
+    },
     "GoogleCloudMlV1beta1__Job": {
       "description": "Represents a training or prediction job.",
       "type": "object",
       "properties": {
-        "startTime": {
-          "description": "Output only. When the job processing was started.",
-          "format": "google-datetime",
-          "type": "string"
-        },
         "predictionOutput": {
-          "$ref": "GoogleCloudMlV1beta1__PredictionOutput",
-          "description": "The current prediction job result."
+          "description": "The current prediction job result.",
+          "$ref": "GoogleCloudMlV1beta1__PredictionOutput"
         },
         "trainingOutput": {
-          "description": "The current training job result.",
-          "$ref": "GoogleCloudMlV1beta1__TrainingOutput"
+          "$ref": "GoogleCloudMlV1beta1__TrainingOutput",
+          "description": "The current training job result."
         },
         "createTime": {
           "description": "Output only. When the job was created.",
@@ -731,45 +586,50 @@
           "description": "Input parameters to create a prediction job.",
           "$ref": "GoogleCloudMlV1beta1__PredictionInput"
         },
-        "jobId": {
-          "description": "Required. The user-specified id of the job.",
-          "type": "string"
-        },
         "errorMessage": {
           "description": "Output only. The details of a failure or a cancellation.",
           "type": "string"
         },
+        "jobId": {
+          "description": "Required. The user-specified id of the job.",
+          "type": "string"
+        },
         "endTime": {
           "description": "Output only. When the job processing was completed.",
           "format": "google-datetime",
           "type": "string"
+        },
+        "startTime": {
+          "description": "Output only. When the job processing was started.",
+          "format": "google-datetime",
+          "type": "string"
         }
       },
       "id": "GoogleCloudMlV1beta1__Job"
     },
+    "GoogleLongrunning__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.",
+          "type": "array",
+          "items": {
+            "$ref": "GoogleLongrunning__Operation"
+          }
+        }
+      },
+      "id": "GoogleLongrunning__ListOperationsResponse",
+      "description": "The response message for Operations.ListOperations.",
+      "type": "object"
+    },
     "GoogleCloudMlV1beta1__TrainingInput": {
-      "description": "Represents input parameters for a training job.",
       "type": "object",
       "properties": {
-        "workerCount": {
-          "description": "Optional. The number of worker replicas to use for the training job. Each\nreplica in the cluster will be of the type specified in `worker_type`.\n\nThis value can only be used when `scale_tier` is set to `CUSTOM`. If you\nset this value, you must also set `worker_type`.",
-          "format": "int64",
-          "type": "string"
-        },
-        "masterType": {
-          "description": "Optional. Specifies the type of virtual machine to use for your training\njob's master worker.\n\nThe following types are supported:\n\n\u003cdl\u003e\n  \u003cdt\u003estandard\u003c/dt\u003e\n  \u003cdd\u003e\n  A basic machine configuration suitable for training simple models with\n  small to moderate datasets.\n  \u003c/dd\u003e\n  \u003cdt\u003elarge_model\u003c/dt\u003e\n  \u003cdd\u003e\n  A machine with a lot of memory, specially suited for parameter servers\n  when your model is large (having many hidden layers or layers with very\n  large numbers of nodes).\n  \u003c/dd\u003e\n  \u003cdt\u003ecomplex_model_s\u003c/dt\u003e\n  \u003cdd\u003e\n  A machine suitable for the master and workers of the cluster when your\n  model requires more computation than the standard machine can handle\n  satisfactorily.\n  \u003c/dd\u003e\n  \u003cdt\u003ecomplex_model_m\u003c/dt\u003e\n  \u003cdd\u003e\n  A machine with roughly twice the number of cores and roughly double the\n  memory of \u003ccode suppresswarning=\"true\"\u003ecomplex_model_s\u003c/code\u003e.\n  \u003c/dd\u003e\n  \u003cdt\u003ecomplex_model_l\u003c/dt\u003e\n  \u003cdd\u003e\n  A machine with roughly twice the number of cores and roughly double the\n  memory of \u003ccode suppresswarning=\"true\"\u003ecomplex_model_m\u003c/code\u003e.\n  \u003c/dd\u003e\n  \u003cdt\u003estandard_gpu\u003c/dt\u003e\n  \u003cdd\u003e\n  A machine equivalent to \u003ccode suppresswarning=\"true\"\u003estandard\u003c/code\u003e that\n  also includes a\n  \u003ca href=\"ml/docs/how-tos/using-gpus\"\u003e\n  GPU that you can use in your trainer\u003c/a\u003e.\n  \u003c/dd\u003e\n  \u003cdt\u003ecomplex_model_m_gpu\u003c/dt\u003e\n  \u003cdd\u003e\n  A machine equivalent to\n  \u003ccode suppresswarning=\"true\"\u003ecoplex_model_m\u003c/code\u003e that also includes\n  four GPUs.\n  \u003c/dd\u003e\n\u003c/dl\u003e\n\nYou must set this value when `scaleTier` is set to `CUSTOM`.",
-          "type": "string"
-        },
-        "runtimeVersion": {
-          "description": "Optional. The Google Cloud ML runtime version to use for training.  If not\nset, Google Cloud ML will choose the latest stable version.",
-          "type": "string"
-        },
-        "pythonModule": {
-          "description": "Required. The Python module name to run after installing the packages.",
-          "type": "string"
-        },
-        "region": {
-          "description": "Required. The Google Compute Engine region to run the training job in.",
+        "workerType": {
+          "description": "Optional. Specifies the type of virtual machine to use for your training\njob's worker nodes.\n\nThe supported values are the same as those described in the entry for\n`masterType`.\n\nThis value must be present when `scaleTier` is set to `CUSTOM` and\n`workerCount` is greater than zero.",
           "type": "string"
         },
         "args": {
@@ -779,8 +639,8 @@
             "type": "string"
           }
         },
-        "workerType": {
-          "description": "Optional. Specifies the type of virtual machine to use for your training\njob's worker nodes.\n\nThe supported values are the same as those described in the entry for\n`masterType`.\n\nThis value must be present when `scaleTier` is set to `CUSTOM` and\n`workerCount` is greater than zero.",
+        "region": {
+          "description": "Required. The Google Compute Engine region to run the training job in.",
           "type": "string"
         },
         "parameterServerType": {
@@ -792,7 +652,7 @@
             "A single worker instance. This tier is suitable for learning how to use\nCloud ML, and for experimenting with new models using small datasets.",
             "Many workers and a few parameter servers.",
             "A large number of workers with many parameter servers.",
-            "A single worker instance [with a GPU](ml/docs/how-tos/using-gpus).",
+            "A single worker instance [with a GPU](/ml-engine/docs/how-tos/using-gpus).",
             "The CUSTOM tier is not a set tier, but rather enables you to use your\nown cluster specification. When you use this tier, set values to\nconfigure your processing cluster according to these guidelines:\n\n*   You _must_ set `TrainingInput.masterType` to specify the type\n    of machine to use for your master node. This is the only required\n    setting.\n\n*   You _may_ set `TrainingInput.workerCount` to specify the number of\n    workers to use. If you specify one or more workers, you _must_ also\n    set `TrainingInput.workerType` to specify the type of machine to use\n    for your worker nodes.\n\n*   You _may_ set `TrainingInput.parameterServerCount` to specify the\n    number of parameter servers to use. If you specify one or more\n    parameter servers, you _must_ also set\n    `TrainingInput.parameterServerType` to specify the type of machine to\n    use for your parameter servers.\n\nNote that all of your workers must use the same machine type, which can\nbe different from your parameter server type and master type. Your\nparameter servers must likewise use the same machine type, which can be\ndifferent from your worker type and master type."
           ],
           "enum": [
@@ -806,12 +666,12 @@
           "type": "string"
         },
         "jobDir": {
-          "description": "Optional. A Google Cloud Storage path in which to store training outputs\nand other data needed for training. This path is passed to your TensorFlow\nprogram as the 'job_dir' command-line argument. The benefit of specifying\nthis field is that Cloud ML validates the path for use in training.",
-          "type": "string"
+          "type": "string",
+          "description": "Optional. A Google Cloud Storage path in which to store training outputs\nand other data needed for training. This path is passed to your TensorFlow\nprogram as the 'job_dir' command-line argument. The benefit of specifying\nthis field is that Cloud ML validates the path for use in training."
         },
         "hyperparameters": {
-          "description": "Optional. The set of Hyperparameters to tune.",
-          "$ref": "GoogleCloudMlV1beta1__HyperparameterSpec"
+          "$ref": "GoogleCloudMlV1beta1__HyperparameterSpec",
+          "description": "Optional. The set of Hyperparameters to tune."
         },
         "parameterServerCount": {
           "description": "Optional. The number of parameter server replicas to use for the training\njob. Each replica in the cluster will be of the type specified in\n`parameter_server_type`.\n\nThis value can only be used when `scale_tier` is set to `CUSTOM`.If you\nset this value, you must also set `parameter_server_type`.",
@@ -824,30 +684,29 @@
           "items": {
             "type": "string"
           }
-        }
-      },
-      "id": "GoogleCloudMlV1beta1__TrainingInput"
-    },
-    "GoogleLongrunning__ListOperationsResponse": {
-      "description": "The response message for Operations.ListOperations.",
-      "type": "object",
-      "properties": {
-        "operations": {
-          "description": "A list of operations that matches the specified filter in the request.",
-          "type": "array",
-          "items": {
-            "$ref": "GoogleLongrunning__Operation"
-          }
         },
-        "nextPageToken": {
-          "description": "The standard List next-page token.",
+        "workerCount": {
+          "description": "Optional. The number of worker replicas to use for the training job. Each\nreplica in the cluster will be of the type specified in `worker_type`.\n\nThis value can only be used when `scale_tier` is set to `CUSTOM`. If you\nset this value, you must also set `worker_type`.",
+          "format": "int64",
+          "type": "string"
+        },
+        "masterType": {
+          "description": "Optional. Specifies the type of virtual machine to use for your training\njob's master worker.\n\nThe following types are supported:\n\n\u003cdl\u003e\n  \u003cdt\u003estandard\u003c/dt\u003e\n  \u003cdd\u003e\n  A basic machine configuration suitable for training simple models with\n  small to moderate datasets.\n  \u003c/dd\u003e\n  \u003cdt\u003elarge_model\u003c/dt\u003e\n  \u003cdd\u003e\n  A machine with a lot of memory, specially suited for parameter servers\n  when your model is large (having many hidden layers or layers with very\n  large numbers of nodes).\n  \u003c/dd\u003e\n  \u003cdt\u003ecomplex_model_s\u003c/dt\u003e\n  \u003cdd\u003e\n  A machine suitable for the master and workers of the cluster when your\n  model requires more computation than the standard machine can handle\n  satisfactorily.\n  \u003c/dd\u003e\n  \u003cdt\u003ecomplex_model_m\u003c/dt\u003e\n  \u003cdd\u003e\n  A machine with roughly twice the number of cores and roughly double the\n  memory of \u003ccode suppresswarning=\"true\"\u003ecomplex_model_s\u003c/code\u003e.\n  \u003c/dd\u003e\n  \u003cdt\u003ecomplex_model_l\u003c/dt\u003e\n  \u003cdd\u003e\n  A machine with roughly twice the number of cores and roughly double the\n  memory of \u003ccode suppresswarning=\"true\"\u003ecomplex_model_m\u003c/code\u003e.\n  \u003c/dd\u003e\n  \u003cdt\u003estandard_gpu\u003c/dt\u003e\n  \u003cdd\u003e\n  A machine equivalent to \u003ccode suppresswarning=\"true\"\u003estandard\u003c/code\u003e that\n  also includes a\n  \u003ca href=\"/ml-engine/docs/how-tos/using-gpus\"\u003e\n  GPU that you can use in your trainer\u003c/a\u003e.\n  \u003c/dd\u003e\n  \u003cdt\u003ecomplex_model_m_gpu\u003c/dt\u003e\n  \u003cdd\u003e\n  A machine equivalent to\n  \u003ccode suppresswarning=\"true\"\u003ecoplex_model_m\u003c/code\u003e that also includes\n  four GPUs.\n  \u003c/dd\u003e\n\u003c/dl\u003e\n\nYou must set this value when `scaleTier` is set to `CUSTOM`.",
+          "type": "string"
+        },
+        "runtimeVersion": {
+          "description": "Optional. The Google Cloud ML runtime version to use for training.  If not\nset, Google Cloud ML will choose the latest stable version.",
+          "type": "string"
+        },
+        "pythonModule": {
+          "description": "Required. The Python module name to run after installing the packages.",
           "type": "string"
         }
       },
-      "id": "GoogleLongrunning__ListOperationsResponse"
+      "id": "GoogleCloudMlV1beta1__TrainingInput",
+      "description": "Represents input parameters for a training job."
     },
     "GoogleCloudMlV1beta1__GetConfigResponse": {
-      "id": "GoogleCloudMlV1beta1__GetConfigResponse",
       "description": "Returns service account information associated with a project.",
       "type": "object",
       "properties": {
@@ -860,28 +719,45 @@
           "description": "The service account Cloud ML uses to access resources in the project.",
           "type": "string"
         }
-      }
+      },
+      "id": "GoogleCloudMlV1beta1__GetConfigResponse"
     },
     "GoogleCloudMlV1beta1__SetDefaultVersionRequest": {
-      "id": "GoogleCloudMlV1beta1__SetDefaultVersionRequest",
       "description": "Request message for the SetDefaultVersion request.",
       "type": "object",
-      "properties": {}
+      "properties": {},
+      "id": "GoogleCloudMlV1beta1__SetDefaultVersionRequest"
     },
     "GoogleCloudMlV1__ManualScaling": {
+      "id": "GoogleCloudMlV1__ManualScaling",
       "description": "Options for manually scaling a model.",
       "type": "object",
       "properties": {
         "nodes": {
+          "type": "integer",
           "description": "The number of nodes to allocate for this model. These nodes are always up,\nstarting from the time the model is deployed, so the cost of operating\nthis model will be proportional to nodes * number of hours since\ndeployment.",
-          "format": "int32",
-          "type": "integer"
+          "format": "int32"
+        }
+      }
+    },
+    "GoogleCloudMlV1beta1_HyperparameterOutput_HyperparameterMetric": {
+      "description": "An observed value of a metric.",
+      "type": "object",
+      "properties": {
+        "trainingStep": {
+          "description": "The global training step for this metric.",
+          "format": "int64",
+          "type": "string"
+        },
+        "objectiveValue": {
+          "description": "The objective value at this training step.",
+          "format": "double",
+          "type": "number"
         }
       },
-      "id": "GoogleCloudMlV1__ManualScaling"
+      "id": "GoogleCloudMlV1beta1_HyperparameterOutput_HyperparameterMetric"
     },
     "GoogleCloudMlV1beta1__ParameterSpec": {
-      "description": "Represents a single hyperparameter to optimize.",
       "type": "object",
       "properties": {
         "minValue": {
@@ -919,13 +795,6 @@
           "type": "number"
         },
         "type": {
-          "enumDescriptions": [
-            "You must specify a valid type. Using this unspecified type will result in\nan error.",
-            "Type for real-valued parameters.",
-            "Type for integral parameters.",
-            "The parameter is categorical, with a value chosen from the categories\nfield.",
-            "The parameter is real valued, with a fixed set of feasible points. If\n`type==DISCRETE`, feasible_points must be provided, and\n{`min_value`, `max_value`} will be ignored."
-          ],
           "enum": [
             "PARAMETER_TYPE_UNSPECIFIED",
             "DOUBLE",
@@ -934,7 +803,14 @@
             "DISCRETE"
           ],
           "description": "Required. The type of the parameter.",
-          "type": "string"
+          "type": "string",
+          "enumDescriptions": [
+            "You must specify a valid type. Using this unspecified type will result in\nan error.",
+            "Type for real-valued parameters.",
+            "Type for integral parameters.",
+            "The parameter is categorical, with a value chosen from the categories\nfield.",
+            "The parameter is real valued, with a fixed set of feasible points. If\n`type==DISCRETE`, feasible_points must be provided, and\n{`min_value`, `max_value`} will be ignored."
+          ]
         },
         "categoricalValues": {
           "description": "Required if type is `CATEGORICAL`. The list of possible categories.",
@@ -944,32 +820,14 @@
           }
         },
         "parameterName": {
-          "description": "Required. The parameter name must be unique amongst all ParameterConfigs in\na HyperparameterSpec message. E.g., \"learning_rate\".",
-          "type": "string"
+          "type": "string",
+          "description": "Required. The parameter name must be unique amongst all ParameterConfigs in\na HyperparameterSpec message. E.g., \"learning_rate\"."
         }
       },
-      "id": "GoogleCloudMlV1beta1__ParameterSpec"
-    },
-    "GoogleCloudMlV1beta1_HyperparameterOutput_HyperparameterMetric": {
-      "id": "GoogleCloudMlV1beta1_HyperparameterOutput_HyperparameterMetric",
-      "description": "An observed value of a metric.",
-      "type": "object",
-      "properties": {
-        "trainingStep": {
-          "description": "The global training step for this metric.",
-          "format": "int64",
-          "type": "string"
-        },
-        "objectiveValue": {
-          "description": "The objective value at this training step.",
-          "format": "double",
-          "type": "number"
-        }
-      }
+      "id": "GoogleCloudMlV1beta1__ParameterSpec",
+      "description": "Represents a single hyperparameter to optimize."
     },
     "GoogleCloudMlV1beta1__PredictionOutput": {
-      "description": "Represents results of a prediction job.",
-      "type": "object",
       "properties": {
         "errorCount": {
           "description": "The number of data instances which resulted in errors.",
@@ -981,9 +839,9 @@
           "type": "string"
         },
         "nodeHours": {
+          "type": "number",
           "description": "Node hours used by the batch prediction job.",
-          "format": "double",
-          "type": "number"
+          "format": "double"
         },
         "predictionCount": {
           "description": "The number of generated predictions.",
@@ -991,550 +849,15 @@
           "type": "string"
         }
       },
-      "id": "GoogleCloudMlV1beta1__PredictionOutput"
-    },
-    "GoogleCloudMlV1beta1__TrainingOutput": {
-      "id": "GoogleCloudMlV1beta1__TrainingOutput",
-      "description": "Represents results of a training job. Output only.",
-      "type": "object",
-      "properties": {
-        "completedTrialCount": {
-          "description": "The number of hyperparameter tuning trials that completed successfully.\nOnly set for hyperparameter tuning jobs.",
-          "format": "int64",
-          "type": "string"
-        },
-        "isHyperparameterTuningJob": {
-          "description": "Whether this job is a hyperparameter tuning job.",
-          "type": "boolean"
-        },
-        "consumedMLUnits": {
-          "description": "The amount of ML units consumed by the job.",
-          "format": "double",
-          "type": "number"
-        },
-        "trials": {
-          "description": "Results for individual Hyperparameter trials.\nOnly set for hyperparameter tuning jobs.",
-          "type": "array",
-          "items": {
-            "$ref": "GoogleCloudMlV1beta1__HyperparameterOutput"
-          }
-        }
-      }
-    },
-    "GoogleCloudMlV1__Version": {
-      "description": "Represents a version of the model.\n\nEach version is a trained model deployed in the cloud, ready to handle\nprediction requests. A model can have multiple versions. You can get\ninformation about all of the versions of a given model by calling\n[projects.models.versions.list](/ml/reference/rest/v1/projects.models.versions/list).",
-      "type": "object",
-      "properties": {
-        "runtimeVersion": {
-          "description": "Optional. The Google Cloud ML runtime version to use for this deployment.\nIf not set, Google Cloud ML will choose a version.",
-          "type": "string"
-        },
-        "lastUseTime": {
-          "description": "Output only. The time the version was last used for prediction.",
-          "format": "google-datetime",
-          "type": "string"
-        },
-        "description": {
-          "description": "Optional. The description specified for the version when it was created.",
-          "type": "string"
-        },
-        "deploymentUri": {
-          "description": "Required. The Google Cloud Storage location of the trained model used to\ncreate the version. See the\n[overview of model deployment](/ml/docs/concepts/deployment-overview) for\nmore informaiton.\n\nWhen passing Version to\n[projects.models.versions.create](/ml/reference/rest/v1/projects.models.versions/create)\nthe model service uses the specified location as the source of the model.\nOnce deployed, the model version is hosted by the prediction service, so\nthis location is useful only as a historical record.",
-          "type": "string"
-        },
-        "isDefault": {
-          "description": "Output only. If true, this version will be used to handle prediction\nrequests that do not specify a version.\n\nYou can change the default version by calling\n[projects.methods.versions.setDefault](/ml/reference/rest/v1/projects.models.versions/setDefault).",
-          "type": "boolean"
-        },
-        "createTime": {
-          "description": "Output only. The time the version was created.",
-          "format": "google-datetime",
-          "type": "string"
-        },
-        "manualScaling": {
-          "$ref": "GoogleCloudMlV1__ManualScaling",
-          "description": "Optional. Manually select the number of nodes to use for serving the\nmodel. If unset (i.e., by default), the number of nodes used to serve\nthe model automatically scales with traffic. However, care should be\ntaken to ramp up traffic according to the model's ability to scale. If\nyour model needs to handle bursts of traffic beyond it's ability to\nscale, it is recommended you set this field appropriately."
-        },
-        "name": {
-          "description": "Required.The name specified for the version when it was created.\n\nThe version name must be unique within the model it is created in.",
-          "type": "string"
-        }
-      },
-      "id": "GoogleCloudMlV1__Version"
-    },
-    "GoogleCloudMlV1beta1__HyperparameterSpec": {
-      "id": "GoogleCloudMlV1beta1__HyperparameterSpec",
-      "description": "Represents a set of hyperparameters to optimize.",
-      "type": "object",
-      "properties": {
-        "goal": {
-          "description": "Required. The type of goal to use for tuning. Available types are\n`MAXIMIZE` and `MINIMIZE`.\n\nDefaults to `MAXIMIZE`.",
-          "type": "string",
-          "enumDescriptions": [
-            "Goal Type will default to maximize.",
-            "Maximize the goal metric.",
-            "Minimize the goal metric."
-          ],
-          "enum": [
-            "GOAL_TYPE_UNSPECIFIED",
-            "MAXIMIZE",
-            "MINIMIZE"
-          ]
-        },
-        "hyperparameterMetricTag": {
-          "description": "Optional. The Tensorflow summary tag name to use for optimizing trials. For\ncurrent versions of Tensorflow, this tag name should exactly match what is\nshown in Tensorboard, including all scopes.  For versions of Tensorflow\nprior to 0.12, this should be only the tag passed to tf.Summary.\nBy default, \"training/hptuning/metric\" will be used.",
-          "type": "string"
-        },
-        "params": {
-          "description": "Required. The set of parameters to tune.",
-          "type": "array",
-          "items": {
-            "$ref": "GoogleCloudMlV1beta1__ParameterSpec"
-          }
-        },
-        "maxTrials": {
-          "description": "Optional. How many training trials should be attempted to optimize\nthe specified hyperparameters.\n\nDefaults to one.",
-          "format": "int32",
-          "type": "integer"
-        },
-        "maxParallelTrials": {
-          "description": "Optional. The number of training trials to run concurrently.\nYou can reduce the time it takes to perform hyperparameter tuning by adding\ntrials in parallel. However, each trail only benefits from the information\ngained in completed trials. That means that a trial does not get access to\nthe results of trials running at the same time, which could reduce the\nquality of the overall optimization.\n\nEach trial will use the same scale tier and machine types.\n\nDefaults to one.",
-          "format": "int32",
-          "type": "integer"
-        }
-      }
-    },
-    "GoogleCloudMlV1__OperationMetadata": {
-      "description": "Represents the metadata of the long-running operation.",
-      "type": "object",
-      "properties": {
-        "modelName": {
-          "description": "Contains the name of the model associated with the operation.",
-          "type": "string"
-        },
-        "version": {
-          "$ref": "GoogleCloudMlV1__Version",
-          "description": "Contains the version associated with the operation."
-        },
-        "endTime": {
-          "description": "The time operation processing completed.",
-          "format": "google-datetime",
-          "type": "string"
-        },
-        "operationType": {
-          "enumDescriptions": [
-            "Unspecified operation type.",
-            "An operation to create a new version.",
-            "An operation to delete an existing version.",
-            "An operation to delete an existing model."
-          ],
-          "enum": [
-            "OPERATION_TYPE_UNSPECIFIED",
-            "CREATE_VERSION",
-            "DELETE_VERSION",
-            "DELETE_MODEL"
-          ],
-          "description": "The operation type.",
-          "type": "string"
-        },
-        "startTime": {
-          "description": "The time operation processing started.",
-          "format": "google-datetime",
-          "type": "string"
-        },
-        "isCancellationRequested": {
-          "description": "Indicates whether a request to cancel this operation has been made.",
-          "type": "boolean"
-        },
-        "createTime": {
-          "description": "The time the operation was submitted.",
-          "format": "google-datetime",
-          "type": "string"
-        }
-      },
-      "id": "GoogleCloudMlV1__OperationMetadata"
-    },
-    "GoogleCloudMlV1beta1__OperationMetadata": {
-      "description": "Represents the metadata of the long-running operation.",
-      "type": "object",
-      "properties": {
-        "modelName": {
-          "description": "Contains the name of the model associated with the operation.",
-          "type": "string"
-        },
-        "version": {
-          "$ref": "GoogleCloudMlV1beta1__Version",
-          "description": "Contains the version associated with the operation."
-        },
-        "endTime": {
-          "description": "The time operation processing completed.",
-          "format": "google-datetime",
-          "type": "string"
-        },
-        "operationType": {
-          "enumDescriptions": [
-            "Unspecified operation type.",
-            "An operation to create a new version.",
-            "An operation to delete an existing version.",
-            "An operation to delete an existing model."
-          ],
-          "enum": [
-            "OPERATION_TYPE_UNSPECIFIED",
-            "CREATE_VERSION",
-            "DELETE_VERSION",
-            "DELETE_MODEL"
-          ],
-          "description": "The operation type.",
-          "type": "string"
-        },
-        "startTime": {
-          "description": "The time operation processing started.",
-          "format": "google-datetime",
-          "type": "string"
-        },
-        "isCancellationRequested": {
-          "description": "Indicates whether a request to cancel this operation has been made.",
-          "type": "boolean"
-        },
-        "createTime": {
-          "description": "The time the operation was submitted.",
-          "format": "google-datetime",
-          "type": "string"
-        }
-      },
-      "id": "GoogleCloudMlV1beta1__OperationMetadata"
-    },
-    "GoogleCloudMlV1beta1__ListModelsResponse": {
-      "id": "GoogleCloudMlV1beta1__ListModelsResponse",
-      "description": "Response message for the ListModels method.",
-      "type": "object",
-      "properties": {
-        "models": {
-          "description": "The list of models.",
-          "type": "array",
-          "items": {
-            "$ref": "GoogleCloudMlV1beta1__Model"
-          }
-        },
-        "nextPageToken": {
-          "description": "Optional. Pass this token as the `page_token` field of the request for a\nsubsequent call.",
-          "type": "string"
-        }
-      }
-    },
-    "GoogleLongrunning__Operation": {
-      "id": "GoogleLongrunning__Operation",
-      "description": "This resource represents a long-running operation that is the result of a\nnetwork API call.",
-      "type": "object",
-      "properties": {
-        "name": {
-          "description": "The server-assigned name, which is only unique within the same service that\noriginally returns it. If you use the default HTTP mapping, the\n`name` should have the format of `operations/some/unique/name`.",
-          "type": "string"
-        },
-        "error": {
-          "$ref": "GoogleRpc__Status",
-          "description": "The error result of the operation in case of failure or cancellation."
-        },
-        "metadata": {
-          "description": "Service-specific metadata associated with the operation.  It typically\ncontains progress information and common metadata such as create time.\nSome services might not provide such metadata.  Any method that returns a\nlong-running operation should document the metadata type, if any.",
-          "type": "object",
-          "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.\nIf true, the operation is completed, and either `error` or `response` is\navailable.",
-          "type": "boolean"
-        },
-        "response": {
-          "description": "The normal response of the operation in case of success.  If the original\nmethod returns no data on success, such as `Delete`, the response is\n`google.protobuf.Empty`.  If the original method is standard\n`Get`/`Create`/`Update`, the response should be the resource.  For other\nmethods, the response should have the type `XxxResponse`, where `Xxx`\nis the original method name.  For example, if the original method name\nis `TakeSnapshot()`, the inferred response type is\n`TakeSnapshotResponse`.",
-          "type": "object",
-          "additionalProperties": {
-            "description": "Properties of the object. Contains field @type with type URL.",
-            "type": "any"
-          }
-        }
-      }
-    },
-    "GoogleCloudMlV1beta1__HyperparameterOutput": {
-      "description": "Represents the result of a single hyperparameter tuning trial from a\ntraining job. The TrainingOutput object that is returned on successful\ncompletion of a training job with hyperparameter tuning includes a list\nof HyperparameterOutput objects, one for each successful trial.",
-      "type": "object",
-      "properties": {
-        "hyperparameters": {
-          "description": "The hyperparameters given to this trial.",
-          "type": "object",
-          "additionalProperties": {
-            "type": "string"
-          }
-        },
-        "trialId": {
-          "description": "The trial id for these results.",
-          "type": "string"
-        },
-        "allMetrics": {
-          "description": "All recorded object metrics for this trial.",
-          "type": "array",
-          "items": {
-            "$ref": "GoogleCloudMlV1beta1_HyperparameterOutput_HyperparameterMetric"
-          }
-        },
-        "finalMetric": {
-          "description": "The final objective metric seen for this trial.",
-          "$ref": "GoogleCloudMlV1beta1_HyperparameterOutput_HyperparameterMetric"
-        }
-      },
-      "id": "GoogleCloudMlV1beta1__HyperparameterOutput"
-    },
-    "GoogleProtobuf__Empty": {
-      "id": "GoogleProtobuf__Empty",
-      "description": "A generic empty message that you can re-use to avoid defining duplicated\nempty messages in your APIs. A typical example is to use it as the request\nor the response type of an API method. For instance:\n\n    service Foo {\n      rpc Bar(google.protobuf.Empty) returns (google.protobuf.Empty);\n    }\n\nThe JSON representation for `Empty` is empty JSON object `{}`.",
-      "type": "object",
-      "properties": {}
-    },
-    "GoogleCloudMlV1beta1__ManualScaling": {
-      "description": "Options for manually scaling a model.",
-      "type": "object",
-      "properties": {
-        "nodes": {
-          "description": "The number of nodes to allocate for this model. These nodes are always up,\nstarting from the time the model is deployed, so the cost of operating\nthis model will be proportional to nodes * number of hours since\ndeployment.",
-          "format": "int32",
-          "type": "integer"
-        }
-      },
-      "id": "GoogleCloudMlV1beta1__ManualScaling"
-    },
-    "GoogleRpc__Status": {
-      "description": "The `Status` type defines a logical error model that is suitable for different\nprogramming environments, including REST APIs and RPC APIs. It is used by\n[gRPC](https://github.com/grpc). The error model is designed to be:\n\n- Simple to use and understand for most users\n- Flexible enough to meet unexpected needs\n\n# Overview\n\nThe `Status` message contains three pieces of data: error code, error message,\nand error details. The error code should be an enum value of\ngoogle.rpc.Code, but it may accept additional error codes if needed.  The\nerror message should be a developer-facing English message that helps\ndevelopers *understand* and *resolve* the error. If a localized user-facing\nerror message is needed, put the localized message in the error details or\nlocalize it in the client. The optional error details may contain arbitrary\ninformation about the error. There is a predefined set of error detail types\nin the package `google.rpc` which can be used for common error conditions.\n\n# Language mapping\n\nThe `Status` message is the logical representation of the error model, but it\nis not necessarily the actual wire format. When the `Status` message is\nexposed in different client libraries and different wire protocols, it can be\nmapped differently. For example, it will likely be mapped to some exceptions\nin Java, but more likely mapped to some error codes in C.\n\n# Other uses\n\nThe error model and the `Status` message can be used in a variety of\nenvironments, either with or without APIs, to provide a\nconsistent developer experience across different environments.\n\nExample uses of this error model include:\n\n- Partial errors. If a service needs to return partial errors to the client,\n    it may embed the `Status` in the normal response to indicate the partial\n    errors.\n\n- Workflow errors. A typical workflow has multiple steps. Each step may\n    have a `Status` message for error reporting purpose.\n\n- Batch operations. If a client uses batch request and batch response, the\n    `Status` message should be used directly inside batch response, one for\n    each error sub-response.\n\n- Asynchronous operations. If an API call embeds asynchronous operation\n    results in its response, the status of those operations should be\n    represented directly using the `Status` message.\n\n- Logging. If some API errors are stored in logs, the message `Status` could\n    be used directly after any stripping needed for security/privacy reasons.",
-      "type": "object",
-      "properties": {
-        "message": {
-          "description": "A developer-facing error message, which should be in English. Any\nuser-facing error message should be localized and sent in the\ngoogle.rpc.Status.details field, or localized by the client.",
-          "type": "string"
-        },
-        "details": {
-          "description": "A list of messages that carry the error details.  There will be a\ncommon 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"
-            },
-            "type": "object"
-          }
-        },
-        "code": {
-          "description": "The status code, which should be an enum value of google.rpc.Code.",
-          "format": "int32",
-          "type": "integer"
-        }
-      },
-      "id": "GoogleRpc__Status"
-    },
-    "GoogleCloudMlV1beta1__PredictRequest": {
-      "description": "Request for predictions to be issued against a trained model.\n\nThe body of the request is a single JSON object with a single top-level\nfield:\n\n\u003cdl\u003e\n  \u003cdt\u003einstances\u003c/dt\u003e\n  \u003cdd\u003eA JSON array containing values representing the instances to use for\n      prediction.\u003c/dd\u003e\n\u003c/dl\u003e\n\nThe structure of each element of the instances list is determined by your\nmodel's input definition. Instances can include named inputs or can contain\nonly unlabeled values.\n\nNot all data includes named inputs. Some instances will be simple\nJSON values (boolean, number, or string). However, instances are often lists\nof simple values, or complex nested lists. Here are some examples of request\nbodies:\n\nCSV data with each row encoded as a string value:\n\u003cpre\u003e\n{\"instances\": [\"1.0,true,\\\\\"x\\\\\"\", \"-2.0,false,\\\\\"y\\\\\"\"]}\n\u003c/pre\u003e\nPlain text:\n\u003cpre\u003e\n{\"instances\": [\"the quick brown fox\", \"la bruja le dio\"]}\n\u003c/pre\u003e\nSentences encoded as lists of words (vectors of strings):\n\u003cpre\u003e\n{\n  \"instances\": [\n    [\"the\",\"quick\",\"brown\"],\n    [\"la\",\"bruja\",\"le\"],\n    ...\n  ]\n}\n\u003c/pre\u003e\nFloating point scalar values:\n\u003cpre\u003e\n{\"instances\": [0.0, 1.1, 2.2]}\n\u003c/pre\u003e\nVectors of integers:\n\u003cpre\u003e\n{\n  \"instances\": [\n    [0, 1, 2],\n    [3, 4, 5],\n    ...\n  ]\n}\n\u003c/pre\u003e\nTensors (in this case, two-dimensional tensors):\n\u003cpre\u003e\n{\n  \"instances\": [\n    [\n      [0, 1, 2],\n      [3, 4, 5]\n    ],\n    ...\n  ]\n}\n\u003c/pre\u003e\nImages can be represented different ways. In this encoding scheme the first\ntwo dimensions represent the rows and columns of the image, and the third\ncontains lists (vectors) of the R, G, and B values for each pixel.\n\u003cpre\u003e\n{\n  \"instances\": [\n    [\n      [\n        [138, 30, 66],\n        [130, 20, 56],\n        ...\n      ],\n      [\n        [126, 38, 61],\n        [122, 24, 57],\n        ...\n      ],\n      ...\n    ],\n    ...\n  ]\n}\n\u003c/pre\u003e\nJSON strings must be encoded as UTF-8. To send binary data, you must\nbase64-encode the data and mark it as binary. To mark a JSON string\nas binary, replace it with a JSON object with a single attribute named `b64`:\n\u003cpre\u003e{\"b64\": \"...\"} \u003c/pre\u003e\nFor example:\n\nTwo Serialized tf.Examples (fake data, for illustrative purposes only):\n\u003cpre\u003e\n{\"instances\": [{\"b64\": \"X5ad6u\"}, {\"b64\": \"IA9j4nx\"}]}\n\u003c/pre\u003e\nTwo JPEG image byte strings (fake data, for illustrative purposes only):\n\u003cpre\u003e\n{\"instances\": [{\"b64\": \"ASa8asdf\"}, {\"b64\": \"JLK7ljk3\"}]}\n\u003c/pre\u003e\nIf your data includes named references, format each instance as a JSON object\nwith the named references as the keys:\n\nJSON input data to be preprocessed:\n\u003cpre\u003e\n{\n  \"instances\": [\n    {\n      \"a\": 1.0,\n      \"b\": true,\n      \"c\": \"x\"\n    },\n    {\n      \"a\": -2.0,\n      \"b\": false,\n      \"c\": \"y\"\n    }\n  ]\n}\n\u003c/pre\u003e\nSome models have an underlying TensorFlow graph that accepts multiple input\ntensors. In this case, you should use the names of JSON name/value pairs to\nidentify the input tensors, as shown in the following exmaples:\n\nFor a graph with input tensor aliases \"tag\" (string) and \"image\"\n(base64-encoded string):\n\u003cpre\u003e\n{\n  \"instances\": [\n    {\n      \"tag\": \"beach\",\n      \"image\": {\"b64\": \"ASa8asdf\"}\n    },\n    {\n      \"tag\": \"car\",\n      \"image\": {\"b64\": \"JLK7ljk3\"}\n    }\n  ]\n}\n\u003c/pre\u003e\nFor a graph with input tensor aliases \"tag\" (string) and \"image\"\n(3-dimensional array of 8-bit ints):\n\u003cpre\u003e\n{\n  \"instances\": [\n    {\n      \"tag\": \"beach\",\n      \"image\": [\n        [\n          [138, 30, 66],\n          [130, 20, 56],\n          ...\n        ],\n        [\n          [126, 38, 61],\n          [122, 24, 57],\n          ...\n        ],\n        ...\n      ]\n    },\n    {\n      \"tag\": \"car\",\n      \"image\": [\n        [\n          [255, 0, 102],\n          [255, 0, 97],\n          ...\n        ],\n        [\n          [254, 1, 101],\n          [254, 2, 93],\n          ...\n        ],\n        ...\n      ]\n    },\n    ...\n  ]\n}\n\u003c/pre\u003e\nIf the call is successful, the response body will contain one prediction\nentry per instance in the request body. If prediction fails for any\ninstance, the response body will contain no predictions and will contian\na single error entry instead.",
-      "type": "object",
-      "properties": {
-        "httpBody": {
-          "description": "\nRequired. The prediction request body.",
-          "$ref": "GoogleApi__HttpBody"
-        }
-      },
-      "id": "GoogleCloudMlV1beta1__PredictRequest"
-    },
-    "GoogleCloudMlV1beta1__PredictionInput": {
-      "id": "GoogleCloudMlV1beta1__PredictionInput",
-      "description": "Represents input parameters for a prediction job.",
-      "type": "object",
-      "properties": {
-        "inputPaths": {
-          "description": "Required. The Google Cloud Storage location of the input data files.\nMay contain wildcards.",
-          "type": "array",
-          "items": {
-            "type": "string"
-          }
-        },
-        "region": {
-          "description": "Required. The Google Compute Engine region to run the prediction job in.",
-          "type": "string"
-        },
-        "versionName": {
-          "description": "Use this field if you want to specify a version of the model to use. The\nstring is formatted the same way as `model_version`, with the addition\nof the version information:\n\n`\"projects/\u003cvar\u003e[YOUR_PROJECT]\u003c/var\u003e/models/\u003cvar\u003eYOUR_MODEL/versions/\u003cvar\u003e[YOUR_VERSION]\u003c/var\u003e\"`",
-          "type": "string"
-        },
-        "modelName": {
-          "description": "Use this field if you want to use the default version for the specified\nmodel. The string must use the following format:\n\n`\"projects/\u003cvar\u003e[YOUR_PROJECT]\u003c/var\u003e/models/\u003cvar\u003e[YOUR_MODEL]\u003c/var\u003e\"`",
-          "type": "string"
-        },
-        "outputPath": {
-          "description": "Required. The output Google Cloud Storage location.",
-          "type": "string"
-        },
-        "uri": {
-          "description": "Use this field if you want to specify a Google Cloud Storage path for\nthe model to use.",
-          "type": "string"
-        },
-        "maxWorkerCount": {
-          "description": "Optional. The maximum number of workers to be used for parallel processing.\nDefaults to 10 if not specified.",
-          "format": "int64",
-          "type": "string"
-        },
-        "dataFormat": {
-          "enumDescriptions": [
-            "Unspecified format.",
-            "The source file is a text file with instances separated by the\nnew-line character.",
-            "The source file is a TFRecord file.",
-            "The source file is a GZIP-compressed TFRecord file."
-          ],
-          "enum": [
-            "DATA_FORMAT_UNSPECIFIED",
-            "TEXT",
-            "TF_RECORD",
-            "TF_RECORD_GZIP"
-          ],
-          "description": "Required. The format of the input data files.",
-          "type": "string"
-        },
-        "runtimeVersion": {
-          "description": "Optional. The Google Cloud ML runtime version to use for this batch\nprediction. If not set, Google Cloud ML will pick the runtime version used\nduring the CreateVersion request for this model version, or choose the\nlatest stable version when model version information is not available\nsuch as when the model is specified by uri.",
-          "type": "string"
-        }
-      }
-    },
-    "GoogleApi__HttpBody": {
-      "id": "GoogleApi__HttpBody",
-      "description": "Message that represents an arbitrary HTTP body. It should only be used for\npayload formats that can't be represented as JSON, such as raw binary or\nan HTML page.\n\n\nThis message can be used both in streaming and non-streaming API methods in\nthe request as well as the response.\n\nIt can be used as a top-level request field, which is convenient if one\nwants to extract parameters from either the URL or HTTP template into the\nrequest fields and also want access to the raw HTTP body.\n\nExample:\n\n    message GetResourceRequest {\n      // A unique request id.\n      string request_id = 1;\n\n      // The raw HTTP body is bound to this field.\n      google.api.HttpBody http_body = 2;\n    }\n\n    service ResourceService {\n      rpc GetResource(GetResourceRequest) returns (google.api.HttpBody);\n      rpc UpdateResource(google.api.HttpBody) returns (google.protobuf.Empty);\n    }\n\nExample with streaming methods:\n\n    service CaldavService {\n      rpc GetCalendar(stream google.api.HttpBody)\n        returns (stream google.api.HttpBody);\n      rpc UpdateCalendar(stream google.api.HttpBody)\n        returns (stream google.api.HttpBody);\n    }\n\nUse of this type only changes how the request and response bodies are\nhandled, all other features will continue to work unchanged.",
-      "type": "object",
-      "properties": {
-        "contentType": {
-          "description": "The HTTP Content-Type string representing the content type of the body.",
-          "type": "string"
-        },
-        "data": {
-          "description": "HTTP body binary data.",
-          "format": "byte",
-          "type": "string"
-        }
-      }
-    },
-    "GoogleCloudMlV1beta1__ListJobsResponse": {
-      "description": "Response message for the ListJobs method.",
-      "type": "object",
-      "properties": {
-        "jobs": {
-          "description": "The list of jobs.",
-          "type": "array",
-          "items": {
-            "$ref": "GoogleCloudMlV1beta1__Job"
-          }
-        },
-        "nextPageToken": {
-          "description": "Optional. Pass this token as the `page_token` field of the request for a\nsubsequent call.",
-          "type": "string"
-        }
-      },
-      "id": "GoogleCloudMlV1beta1__ListJobsResponse"
-    },
-    "GoogleCloudMlV1beta1__Version": {
-      "description": "Represents a version of the model.\n\nEach version is a trained model deployed in the cloud, ready to handle\nprediction requests. A model can have multiple versions. You can get\ninformation about all of the versions of a given model by calling\n[projects.models.versions.list](/ml/reference/rest/v1beta1/projects.models.versions/list).",
-      "type": "object",
-      "properties": {
-        "name": {
-          "description": "Required.The name specified for the version when it was created.\n\nThe version name must be unique within the model it is created in.",
-          "type": "string"
-        },
-        "lastUseTime": {
-          "description": "Output only. The time the version was last used for prediction.",
-          "format": "google-datetime",
-          "type": "string"
-        },
-        "runtimeVersion": {
-          "description": "Optional. The Google Cloud ML runtime version to use for this deployment.\nIf not set, Google Cloud ML will choose a version.",
-          "type": "string"
-        },
-        "description": {
-          "description": "Optional. The description specified for the version when it was created.",
-          "type": "string"
-        },
-        "deploymentUri": {
-          "description": "Required. The Google Cloud Storage location of the trained model used to\ncreate the version. See the\n[overview of model deployment](/ml/docs/concepts/deployment-overview) for\nmore informaiton.\n\nWhen passing Version to\n[projects.models.versions.create](/ml/reference/rest/v1beta1/projects.models.versions/create)\nthe model service uses the specified location as the source of the model.\nOnce deployed, the model version is hosted by the prediction service, so\nthis location is useful only as a historical record.",
-          "type": "string"
-        },
-        "isDefault": {
-          "description": "Output only. If true, this version will be used to handle prediction\nrequests that do not specify a version.\n\nYou can change the default version by calling\n[projects.methods.versions.setDefault](/ml/reference/rest/v1beta1/projects.models.versions/setDefault).",
-          "type": "boolean"
-        },
-        "createTime": {
-          "description": "Output only. The time the version was created.",
-          "format": "google-datetime",
-          "type": "string"
-        },
-        "manualScaling": {
-          "$ref": "GoogleCloudMlV1beta1__ManualScaling",
-          "description": "Optional. Manually select the number of nodes to use for serving the\nmodel. If unset (i.e., by default), the number of nodes used to serve\nthe model automatically scales with traffic. However, care should be\ntaken to ramp up traffic according to the model's ability to scale. If\nyour model needs to handle bursts of traffic beyond it's ability to\nscale, it is recommended you set this field appropriately."
-        }
-      },
-      "id": "GoogleCloudMlV1beta1__Version"
-    },
-    "GoogleCloudMlV1beta1__ListVersionsResponse": {
-      "description": "Response message for the ListVersions method.",
-      "type": "object",
-      "properties": {
-        "versions": {
-          "description": "The list of versions.",
-          "type": "array",
-          "items": {
-            "$ref": "GoogleCloudMlV1beta1__Version"
-          }
-        },
-        "nextPageToken": {
-          "description": "Optional. Pass this token as the `page_token` field of the request for a\nsubsequent call.",
-          "type": "string"
-        }
-      },
-      "id": "GoogleCloudMlV1beta1__ListVersionsResponse"
-    },
-    "GoogleCloudMlV1beta1__CancelJobRequest": {
-      "description": "Request message for the CancelJob method.",
-      "type": "object",
-      "properties": {},
-      "id": "GoogleCloudMlV1beta1__CancelJobRequest"
-    },
-    "GoogleCloudMlV1beta1__Model": {
-      "description": "Represents a machine learning solution.\n\nA model can have multiple versions, each of which is a deployed, trained\nmodel ready to receive prediction requests. The model itself is just a\ncontainer.",
-      "type": "object",
-      "properties": {
-        "name": {
-          "description": "Required. The name specified for the model when it was created.\n\nThe model name must be unique within the project it is created in.",
-          "type": "string"
-        },
-        "description": {
-          "description": "Optional. The description specified for the model when it was created.",
-          "type": "string"
-        },
-        "onlinePredictionLogging": {
-          "description": "Optional. If true, enables StackDriver Logging for online prediction.\nDefault is false.",
-          "type": "boolean"
-        },
-        "defaultVersion": {
-          "$ref": "GoogleCloudMlV1beta1__Version",
-          "description": "Output only. The default version of the model. This version will be used to\nhandle prediction requests that do not specify a version.\n\nYou can change the default version by calling\n[projects.methods.versions.setDefault](/ml/reference/rest/v1beta1/projects.models.versions/setDefault)."
-        },
-        "regions": {
-          "description": "Optional. The list of regions where the model is going to be deployed.\nCurrently only one region per model is supported.\nDefaults to 'us-central1' if nothing is set.",
-          "type": "array",
-          "items": {
-            "type": "string"
-          }
-        }
-      },
-      "id": "GoogleCloudMlV1beta1__Model"
+      "id": "GoogleCloudMlV1beta1__PredictionOutput",
+      "description": "Represents results of a prediction job.",
+      "type": "object"
     }
   },
   "protocol": "rest",
   "icons": {
-    "x16": "http://www.google.com/images/icons/product/search-16.gif",
-    "x32": "http://www.google.com/images/icons/product/search-32.gif"
+    "x32": "http://www.google.com/images/icons/product/search-32.gif",
+    "x16": "http://www.google.com/images/icons/product/search-16.gif"
   },
   "canonicalName": "Cloud Machine Learning Engine",
   "auth": {
@@ -1546,5 +869,682 @@
       }
     }
   },
-  "rootUrl": "https://ml.googleapis.com/"
+  "rootUrl": "https://ml.googleapis.com/",
+  "ownerDomain": "google.com",
+  "name": "ml",
+  "batchPath": "batch",
+  "title": "Google Cloud Machine Learning Engine",
+  "ownerName": "Google",
+  "resources": {
+    "projects": {
+      "methods": {
+        "getConfig": {
+          "id": "ml.projects.getConfig",
+          "path": "v1beta1/{+name}:getConfig",
+          "description": "Get the service account information associated with your project. You need\nthis information in order to grant the service account persmissions for\nthe Google Cloud Storage location where you put your model training code\nfor training the model with Google Cloud Machine Learning.",
+          "httpMethod": "GET",
+          "response": {
+            "$ref": "GoogleCloudMlV1beta1__GetConfigResponse"
+          },
+          "parameterOrder": [
+            "name"
+          ],
+          "parameters": {
+            "name": {
+              "description": "Required. The project name.\n\nAuthorization: requires `Viewer` role on the specified project.",
+              "required": true,
+              "type": "string",
+              "pattern": "^projects/[^/]+$",
+              "location": "path"
+            }
+          },
+          "scopes": [
+            "https://www.googleapis.com/auth/cloud-platform"
+          ],
+          "flatPath": "v1beta1/projects/{projectsId}:getConfig"
+        },
+        "predict": {
+          "request": {
+            "$ref": "GoogleCloudMlV1beta1__PredictRequest"
+          },
+          "description": "Performs prediction on the data in the request.\n\n**** REMOVE FROM GENERATED DOCUMENTATION",
+          "response": {
+            "$ref": "GoogleApi__HttpBody"
+          },
+          "parameterOrder": [
+            "name"
+          ],
+          "httpMethod": "POST",
+          "parameters": {
+            "name": {
+              "pattern": "^projects/.+$",
+              "location": "path",
+              "description": "Required. The resource name of a model or a version.\n\nAuthorization: requires `Viewer` role on the parent project.",
+              "required": true,
+              "type": "string"
+            }
+          },
+          "scopes": [
+            "https://www.googleapis.com/auth/cloud-platform"
+          ],
+          "flatPath": "v1beta1/projects/{projectsId}:predict",
+          "path": "v1beta1/{+name}:predict",
+          "id": "ml.projects.predict"
+        }
+      },
+      "resources": {
+        "operations": {
+          "methods": {
+            "delete": {
+              "httpMethod": "DELETE",
+              "parameterOrder": [
+                "name"
+              ],
+              "response": {
+                "$ref": "GoogleProtobuf__Empty"
+              },
+              "parameters": {
+                "name": {
+                  "location": "path",
+                  "description": "The name of the operation resource to be deleted.",
+                  "required": true,
+                  "type": "string",
+                  "pattern": "^projects/[^/]+/operations/[^/]+$"
+                }
+              },
+              "scopes": [
+                "https://www.googleapis.com/auth/cloud-platform"
+              ],
+              "flatPath": "v1beta1/projects/{projectsId}/operations/{operationsId}",
+              "id": "ml.projects.operations.delete",
+              "path": "v1beta1/{+name}",
+              "description": "Deletes a long-running operation. This method indicates that the client is\nno longer interested in the operation result. It does not cancel the\noperation. If the server doesn't support this method, it returns\n`google.rpc.Code.UNIMPLEMENTED`."
+            },
+            "list": {
+              "response": {
+                "$ref": "GoogleLongrunning__ListOperationsResponse"
+              },
+              "parameterOrder": [
+                "name"
+              ],
+              "httpMethod": "GET",
+              "scopes": [
+                "https://www.googleapis.com/auth/cloud-platform"
+              ],
+              "parameters": {
+                "name": {
+                  "location": "path",
+                  "description": "The name of the operation collection.",
+                  "required": true,
+                  "type": "string",
+                  "pattern": "^projects/[^/]+$"
+                },
+                "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": {
+                  "location": "query",
+                  "description": "The standard list filter.",
+                  "type": "string"
+                }
+              },
+              "flatPath": "v1beta1/projects/{projectsId}/operations",
+              "path": "v1beta1/{+name}/operations",
+              "id": "ml.projects.operations.list",
+              "description": "Lists operations that match the specified filter in the request. If the\nserver doesn't support this method, it returns `UNIMPLEMENTED`.\n\nNOTE: the `name` binding below allows API services to override the binding\nto use different resource name schemes, such as `users/*/operations`."
+            },
+            "get": {
+              "parameterOrder": [
+                "name"
+              ],
+              "httpMethod": "GET",
+              "response": {
+                "$ref": "GoogleLongrunning__Operation"
+              },
+              "parameters": {
+                "name": {
+                  "required": true,
+                  "type": "string",
+                  "pattern": "^projects/[^/]+/operations/[^/]+$",
+                  "location": "path",
+                  "description": "The name of the operation resource."
+                }
+              },
+              "scopes": [
+                "https://www.googleapis.com/auth/cloud-platform"
+              ],
+              "flatPath": "v1beta1/projects/{projectsId}/operations/{operationsId}",
+              "path": "v1beta1/{+name}",
+              "id": "ml.projects.operations.get",
+              "description": "Gets the latest state of a long-running operation.  Clients can use this\nmethod to poll the operation result at intervals as recommended by the API\nservice."
+            },
+            "cancel": {
+              "response": {
+                "$ref": "GoogleProtobuf__Empty"
+              },
+              "httpMethod": "POST",
+              "parameterOrder": [
+                "name"
+              ],
+              "parameters": {
+                "name": {
+                  "description": "The name of the operation resource to be cancelled.",
+                  "required": true,
+                  "type": "string",
+                  "pattern": "^projects/[^/]+/operations/[^/]+$",
+                  "location": "path"
+                }
+              },
+              "scopes": [
+                "https://www.googleapis.com/auth/cloud-platform"
+              ],
+              "flatPath": "v1beta1/projects/{projectsId}/operations/{operationsId}:cancel",
+              "path": "v1beta1/{+name}:cancel",
+              "id": "ml.projects.operations.cancel",
+              "description": "Starts asynchronous cancellation on a long-running operation.  The server\nmakes a best effort to cancel the operation, but success is not\nguaranteed.  If the server doesn't support this method, it returns\n`google.rpc.Code.UNIMPLEMENTED`.  Clients can use\nOperations.GetOperation or\nother methods to check whether the cancellation succeeded or whether the\noperation completed despite cancellation. On successful cancellation,\nthe operation is not deleted; instead, it becomes an operation with\nan Operation.error value with a google.rpc.Status.code of 1,\ncorresponding to `Code.CANCELLED`."
+            }
+          }
+        },
+        "models": {
+          "methods": {
+            "delete": {
+              "httpMethod": "DELETE",
+              "response": {
+                "$ref": "GoogleLongrunning__Operation"
+              },
+              "parameterOrder": [
+                "name"
+              ],
+              "parameters": {
+                "name": {
+                  "pattern": "^projects/[^/]+/models/[^/]+$",
+                  "location": "path",
+                  "description": "Required. The name of the model.\n\nAuthorization: requires `Editor` role on the parent project.",
+                  "required": true,
+                  "type": "string"
+                }
+              },
+              "scopes": [
+                "https://www.googleapis.com/auth/cloud-platform"
+              ],
+              "flatPath": "v1beta1/projects/{projectsId}/models/{modelsId}",
+              "id": "ml.projects.models.delete",
+              "path": "v1beta1/{+name}",
+              "description": "Deletes a model.\n\nYou can only delete a model if there are no versions in it. You can delete\nversions by calling\n[projects.models.versions.delete](/ml-engine/reference/rest/v1beta1/projects.models.versions/delete)."
+            },
+            "list": {
+              "httpMethod": "GET",
+              "parameterOrder": [
+                "parent"
+              ],
+              "response": {
+                "$ref": "GoogleCloudMlV1beta1__ListModelsResponse"
+              },
+              "parameters": {
+                "pageToken": {
+                  "location": "query",
+                  "description": "Optional. A page token to request the next page of results.\n\nYou get the token from the `next_page_token` field of the response from\nthe previous call.",
+                  "type": "string"
+                },
+                "pageSize": {
+                  "location": "query",
+                  "description": "Optional. The number of models to retrieve per \"page\" of results. If there\nare more remaining results than this number, the response message will\ncontain a valid value in the `next_page_token` field.\n\nThe default value is 20, and the maximum page size is 100.",
+                  "format": "int32",
+                  "type": "integer"
+                },
+                "parent": {
+                  "pattern": "^projects/[^/]+$",
+                  "location": "path",
+                  "description": "Required. The name of the project whose models are to be listed.\n\nAuthorization: requires `Viewer` role on the specified project.",
+                  "required": true,
+                  "type": "string"
+                }
+              },
+              "scopes": [
+                "https://www.googleapis.com/auth/cloud-platform"
+              ],
+              "flatPath": "v1beta1/projects/{projectsId}/models",
+              "id": "ml.projects.models.list",
+              "path": "v1beta1/{+parent}/models",
+              "description": "Lists the models in a project.\n\nEach project can contain multiple models, and each model can have multiple\nversions."
+            },
+            "get": {
+              "flatPath": "v1beta1/projects/{projectsId}/models/{modelsId}",
+              "id": "ml.projects.models.get",
+              "path": "v1beta1/{+name}",
+              "description": "Gets information about a model, including its name, the description (if\nset), and the default version (if at least one version of the model has\nbeen deployed).",
+              "httpMethod": "GET",
+              "response": {
+                "$ref": "GoogleCloudMlV1beta1__Model"
+              },
+              "parameterOrder": [
+                "name"
+              ],
+              "scopes": [
+                "https://www.googleapis.com/auth/cloud-platform"
+              ],
+              "parameters": {
+                "name": {
+                  "pattern": "^projects/[^/]+/models/[^/]+$",
+                  "location": "path",
+                  "description": "Required. The name of the model.\n\nAuthorization: requires `Viewer` role on the parent project.",
+                  "required": true,
+                  "type": "string"
+                }
+              }
+            },
+            "create": {
+              "response": {
+                "$ref": "GoogleCloudMlV1beta1__Model"
+              },
+              "parameterOrder": [
+                "parent"
+              ],
+              "httpMethod": "POST",
+              "scopes": [
+                "https://www.googleapis.com/auth/cloud-platform"
+              ],
+              "parameters": {
+                "parent": {
+                  "description": "Required. The project name.\n\nAuthorization: requires `Editor` role on the specified project.",
+                  "required": true,
+                  "type": "string",
+                  "pattern": "^projects/[^/]+$",
+                  "location": "path"
+                }
+              },
+              "flatPath": "v1beta1/projects/{projectsId}/models",
+              "path": "v1beta1/{+parent}/models",
+              "id": "ml.projects.models.create",
+              "description": "Creates a model which will later contain one or more versions.\n\nYou must add at least one version before you can request predictions from\nthe model. Add versions by calling\n[projects.models.versions.create](/ml-engine/reference/rest/v1beta1/projects.models.versions/create).",
+              "request": {
+                "$ref": "GoogleCloudMlV1beta1__Model"
+              }
+            }
+          },
+          "resources": {
+            "versions": {
+              "methods": {
+                "delete": {
+                  "parameterOrder": [
+                    "name"
+                  ],
+                  "response": {
+                    "$ref": "GoogleLongrunning__Operation"
+                  },
+                  "httpMethod": "DELETE",
+                  "scopes": [
+                    "https://www.googleapis.com/auth/cloud-platform"
+                  ],
+                  "parameters": {
+                    "name": {
+                      "location": "path",
+                      "description": "Required. The name of the version. You can get the names of all the\nversions of a model by calling\n[projects.models.versions.list](/ml-engine/reference/rest/v1beta1/projects.models.versions/list).\n\nAuthorization: requires `Editor` role on the parent project.",
+                      "required": true,
+                      "type": "string",
+                      "pattern": "^projects/[^/]+/models/[^/]+/versions/[^/]+$"
+                    }
+                  },
+                  "flatPath": "v1beta1/projects/{projectsId}/models/{modelsId}/versions/{versionsId}",
+                  "path": "v1beta1/{+name}",
+                  "id": "ml.projects.models.versions.delete",
+                  "description": "Deletes a model version.\n\nEach model can have multiple versions deployed and in use at any given\ntime. Use this method to remove a single version.\n\nNote: You cannot delete the version that is set as the default version\nof the model unless it is the only remaining version."
+                },
+                "list": {
+                  "description": "Gets basic information about all the versions of a model.\n\nIf you expect that a model has a lot of versions, or if you need to handle\nonly a limited number of results at a time, you can request that the list\nbe retrieved in batches (called pages):",
+                  "response": {
+                    "$ref": "GoogleCloudMlV1beta1__ListVersionsResponse"
+                  },
+                  "parameterOrder": [
+                    "parent"
+                  ],
+                  "httpMethod": "GET",
+                  "scopes": [
+                    "https://www.googleapis.com/auth/cloud-platform"
+                  ],
+                  "parameters": {
+                    "pageToken": {
+                      "description": "Optional. A page token to request the next page of results.\n\nYou get the token from the `next_page_token` field of the response from\nthe previous call.",
+                      "type": "string",
+                      "location": "query"
+                    },
+                    "pageSize": {
+                      "description": "Optional. The number of versions to retrieve per \"page\" of results. If\nthere are more remaining results than this number, the response message\nwill contain a valid value in the `next_page_token` field.\n\nThe default value is 20, and the maximum page size is 100.",
+                      "format": "int32",
+                      "type": "integer",
+                      "location": "query"
+                    },
+                    "parent": {
+                      "pattern": "^projects/[^/]+/models/[^/]+$",
+                      "location": "path",
+                      "description": "Required. The name of the model for which to list the version.\n\nAuthorization: requires `Viewer` role on the parent project.",
+                      "required": true,
+                      "type": "string"
+                    }
+                  },
+                  "flatPath": "v1beta1/projects/{projectsId}/models/{modelsId}/versions",
+                  "path": "v1beta1/{+parent}/versions",
+                  "id": "ml.projects.models.versions.list"
+                },
+                "get": {
+                  "httpMethod": "GET",
+                  "response": {
+                    "$ref": "GoogleCloudMlV1beta1__Version"
+                  },
+                  "parameterOrder": [
+                    "name"
+                  ],
+                  "parameters": {
+                    "name": {
+                      "pattern": "^projects/[^/]+/models/[^/]+/versions/[^/]+$",
+                      "location": "path",
+                      "description": "Required. The name of the version.\n\nAuthorization: requires `Viewer` role on the parent project.",
+                      "required": true,
+                      "type": "string"
+                    }
+                  },
+                  "scopes": [
+                    "https://www.googleapis.com/auth/cloud-platform"
+                  ],
+                  "flatPath": "v1beta1/projects/{projectsId}/models/{modelsId}/versions/{versionsId}",
+                  "id": "ml.projects.models.versions.get",
+                  "path": "v1beta1/{+name}",
+                  "description": "Gets information about a model version.\n\nModels can have multiple versions. You can call\n[projects.models.versions.list](/ml-engine/reference/rest/v1beta1/projects.models.versions/list)\nto get the same information that this method returns for all of the\nversions of a model."
+                },
+                "create": {
+                  "description": "Creates a new version of a model from a trained TensorFlow model.\n\nIf the version created in the cloud by this call is the first deployed\nversion of the specified model, it will be made the default version of the\nmodel. When you add a version to a model that already has one or more\nversions, the default version does not automatically change. If you want a\nnew version to be the default, you must call\n[projects.models.versions.setDefault](/ml-engine/reference/rest/v1beta1/projects.models.versions/setDefault).",
+                  "request": {
+                    "$ref": "GoogleCloudMlV1beta1__Version"
+                  },
+                  "response": {
+                    "$ref": "GoogleLongrunning__Operation"
+                  },
+                  "parameterOrder": [
+                    "parent"
+                  ],
+                  "httpMethod": "POST",
+                  "scopes": [
+                    "https://www.googleapis.com/auth/cloud-platform"
+                  ],
+                  "parameters": {
+                    "parent": {
+                      "pattern": "^projects/[^/]+/models/[^/]+$",
+                      "location": "path",
+                      "description": "Required. The name of the model.\n\nAuthorization: requires `Editor` role on the parent project.",
+                      "required": true,
+                      "type": "string"
+                    }
+                  },
+                  "flatPath": "v1beta1/projects/{projectsId}/models/{modelsId}/versions",
+                  "path": "v1beta1/{+parent}/versions",
+                  "id": "ml.projects.models.versions.create"
+                },
+                "setDefault": {
+                  "description": "Designates a version to be the default for the model.\n\nThe default version is used for prediction requests made against the model\nthat don't specify a version.\n\nThe first version to be created for a model is automatically set as the\ndefault. You must make any subsequent changes to the default version\nsetting manually using this method.",
+                  "request": {
+                    "$ref": "GoogleCloudMlV1beta1__SetDefaultVersionRequest"
+                  },
+                  "httpMethod": "POST",
+                  "parameterOrder": [
+                    "name"
+                  ],
+                  "response": {
+                    "$ref": "GoogleCloudMlV1beta1__Version"
+                  },
+                  "scopes": [
+                    "https://www.googleapis.com/auth/cloud-platform"
+                  ],
+                  "parameters": {
+                    "name": {
+                      "pattern": "^projects/[^/]+/models/[^/]+/versions/[^/]+$",
+                      "location": "path",
+                      "description": "Required. The name of the version to make the default for the model. You\ncan get the names of all the versions of a model by calling\n[projects.models.versions.list](/ml-engine/reference/rest/v1beta1/projects.models.versions/list).\n\nAuthorization: requires `Editor` role on the parent project.",
+                      "required": true,
+                      "type": "string"
+                    }
+                  },
+                  "flatPath": "v1beta1/projects/{projectsId}/models/{modelsId}/versions/{versionsId}:setDefault",
+                  "id": "ml.projects.models.versions.setDefault",
+                  "path": "v1beta1/{+name}:setDefault"
+                }
+              }
+            }
+          }
+        },
+        "jobs": {
+          "methods": {
+            "cancel": {
+              "request": {
+                "$ref": "GoogleCloudMlV1beta1__CancelJobRequest"
+              },
+              "description": "Cancels a running job.",
+              "httpMethod": "POST",
+              "parameterOrder": [
+                "name"
+              ],
+              "response": {
+                "$ref": "GoogleProtobuf__Empty"
+              },
+              "parameters": {
+                "name": {
+                  "required": true,
+                  "type": "string",
+                  "pattern": "^projects/[^/]+/jobs/[^/]+$",
+                  "location": "path",
+                  "description": "Required. The name of the job to cancel.\n\nAuthorization: requires `Editor` role on the parent project."
+                }
+              },
+              "scopes": [
+                "https://www.googleapis.com/auth/cloud-platform"
+              ],
+              "flatPath": "v1beta1/projects/{projectsId}/jobs/{jobsId}:cancel",
+              "id": "ml.projects.jobs.cancel",
+              "path": "v1beta1/{+name}:cancel"
+            },
+            "list": {
+              "description": "Lists the jobs in the project.",
+              "response": {
+                "$ref": "GoogleCloudMlV1beta1__ListJobsResponse"
+              },
+              "parameterOrder": [
+                "parent"
+              ],
+              "httpMethod": "GET",
+              "parameters": {
+                "pageToken": {
+                  "type": "string",
+                  "location": "query",
+                  "description": "Optional. A page token to request the next page of results.\n\nYou get the token from the `next_page_token` field of the response from\nthe previous call."
+                },
+                "pageSize": {
+                  "description": "Optional. The number of jobs to retrieve per \"page\" of results. If there\nare more remaining results than this number, the response message will\ncontain a valid value in the `next_page_token` field.\n\nThe default value is 20, and the maximum page size is 100.",
+                  "format": "int32",
+                  "type": "integer",
+                  "location": "query"
+                },
+                "parent": {
+                  "location": "path",
+                  "description": "Required. The name of the project for which to list jobs.\n\nAuthorization: requires `Viewer` role on the specified project.",
+                  "required": true,
+                  "type": "string",
+                  "pattern": "^projects/[^/]+$"
+                },
+                "filter": {
+                  "location": "query",
+                  "description": "Optional. Specifies the subset of jobs to retrieve.",
+                  "type": "string"
+                }
+              },
+              "scopes": [
+                "https://www.googleapis.com/auth/cloud-platform"
+              ],
+              "flatPath": "v1beta1/projects/{projectsId}/jobs",
+              "path": "v1beta1/{+parent}/jobs",
+              "id": "ml.projects.jobs.list"
+            },
+            "get": {
+              "description": "Describes a job.",
+              "response": {
+                "$ref": "GoogleCloudMlV1beta1__Job"
+              },
+              "parameterOrder": [
+                "name"
+              ],
+              "httpMethod": "GET",
+              "parameters": {
+                "name": {
+                  "required": true,
+                  "type": "string",
+                  "pattern": "^projects/[^/]+/jobs/[^/]+$",
+                  "location": "path",
+                  "description": "Required. The name of the job to get the description of.\n\nAuthorization: requires `Viewer` role on the parent project."
+                }
+              },
+              "scopes": [
+                "https://www.googleapis.com/auth/cloud-platform"
+              ],
+              "flatPath": "v1beta1/projects/{projectsId}/jobs/{jobsId}",
+              "path": "v1beta1/{+name}",
+              "id": "ml.projects.jobs.get"
+            },
+            "create": {
+              "parameters": {
+                "parent": {
+                  "description": "Required. The project name.\n\nAuthorization: requires `Editor` role on the specified project.",
+                  "required": true,
+                  "type": "string",
+                  "pattern": "^projects/[^/]+$",
+                  "location": "path"
+                }
+              },
+              "scopes": [
+                "https://www.googleapis.com/auth/cloud-platform"
+              ],
+              "flatPath": "v1beta1/projects/{projectsId}/jobs",
+              "path": "v1beta1/{+parent}/jobs",
+              "id": "ml.projects.jobs.create",
+              "request": {
+                "$ref": "GoogleCloudMlV1beta1__Job"
+              },
+              "description": "Creates a training or a batch prediction job.",
+              "response": {
+                "$ref": "GoogleCloudMlV1beta1__Job"
+              },
+              "parameterOrder": [
+                "parent"
+              ],
+              "httpMethod": "POST"
+            }
+          }
+        }
+      }
+    }
+  },
+  "parameters": {
+    "$.xgafv": {
+      "enum": [
+        "1",
+        "2"
+      ],
+      "description": "V1 error format.",
+      "type": "string",
+      "enumDescriptions": [
+        "v1 error format",
+        "v2 error format"
+      ],
+      "location": "query"
+    },
+    "callback": {
+      "location": "query",
+      "description": "JSONP",
+      "type": "string"
+    },
+    "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"
+    },
+    "access_token": {
+      "type": "string",
+      "location": "query",
+      "description": "OAuth access token."
+    },
+    "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"
+    },
+    "pp": {
+      "description": "Pretty-print response.",
+      "type": "boolean",
+      "default": "true",
+      "location": "query"
+    },
+    "oauth_token": {
+      "type": "string",
+      "location": "query",
+      "description": "OAuth 2.0 token for the current user."
+    },
+    "bearer_token": {
+      "location": "query",
+      "description": "OAuth bearer token.",
+      "type": "string"
+    },
+    "upload_protocol": {
+      "location": "query",
+      "description": "Upload protocol for media (e.g. \"raw\", \"multipart\").",
+      "type": "string"
+    },
+    "prettyPrint": {
+      "description": "Returns response with indentations and line breaks.",
+      "type": "boolean",
+      "default": "true",
+      "location": "query"
+    },
+    "uploadType": {
+      "type": "string",
+      "location": "query",
+      "description": "Legacy upload protocol for media (e.g. \"media\", \"multipart\")."
+    },
+    "fields": {
+      "location": "query",
+      "description": "Selector specifying which fields to include in a partial response.",
+      "type": "string"
+    }
+  },
+  "version": "v1beta1",
+  "baseUrl": "https://ml.googleapis.com/",
+  "kind": "discovery#restDescription",
+  "description": "An API to enable creating and using machine learning models.",
+  "servicePath": "",
+  "basePath": "",
+  "id": "ml:v1beta1",
+  "documentationLink": "https://cloud.google.com/ml/",
+  "revision": "20170320",
+  "discoveryVersion": "v1",
+  "version_module": "True"
 }
diff --git a/ml/v1beta1/ml-gen.go b/ml/v1beta1/ml-gen.go
index e9dc400..42511d8 100644
--- a/ml/v1beta1/ml-gen.go
+++ b/ml/v1beta1/ml-gen.go
@@ -61,10 +61,9 @@
 }
 
 type Service struct {
-	client                    *http.Client
-	BasePath                  string // API endpoint base URL
-	UserAgent                 string // optional additional User-Agent fragment
-	GoogleClientHeaderElement string // client header fragment, for Google use only
+	client    *http.Client
+	BasePath  string // API endpoint base URL
+	UserAgent string // optional additional User-Agent fragment
 
 	Projects *ProjectsService
 }
@@ -76,10 +75,6 @@
 	return googleapi.UserAgent + " " + s.UserAgent
 }
 
-func (s *Service) clientHeader() string {
-	return gensupport.GoogleClientHeader("20170210", s.GoogleClientHeaderElement)
-}
-
 func NewProjectsService(s *Service) *ProjectsService {
 	rs := &ProjectsService{s: s}
 	rs.Jobs = NewProjectsJobsService(s)
@@ -315,8 +310,8 @@
 // get
 // information about all of the versions of a given model by
 // calling
-// [projects.models.versions.list](/ml/reference/rest/v1/projects
-// .models.versions/list).
+// [projects.models.versions.list](/ml-engine/reference/rest/v1/p
+// rojects.models.versions/list).
 type GoogleCloudMlV1__Version struct {
 	// CreateTime: Output only. The time the version was created.
 	CreateTime string `json:"createTime,omitempty"`
@@ -324,14 +319,14 @@
 	// DeploymentUri: Required. The Google Cloud Storage location of the
 	// trained model used to
 	// create the version. See the
-	// [overview of model deployment](/ml/docs/concepts/deployment-overview)
-	// for
+	// [overview of model
+	// deployment](/ml-engine/docs/concepts/deployment-overview) for
 	// more informaiton.
 	//
 	// When passing Version
 	// to
-	// [projects.models.versions.create](/ml/reference/rest/v1/projects.mo
-	// dels.versions/create)
+	// [projects.models.versions.create](/ml-engine/reference/rest/v1/proj
+	// ects.models.versions/create)
 	// the model service uses the specified location as the source of the
 	// model.
 	// Once deployed, the model version is hosted by the prediction service,
@@ -349,8 +344,8 @@
 	//
 	// You can change the default version by
 	// calling
-	// [projects.methods.versions.setDefault](/ml/reference/rest/v1/p
-	// rojects.models.versions/setDefault).
+	// [projects.methods.versions.setDefault](/ml-engine/reference/re
+	// st/v1/projects.models.versions/setDefault).
 	IsDefault bool `json:"isDefault,omitempty"`
 
 	// LastUseTime: Output only. The time the version was last used for
@@ -850,8 +845,8 @@
 	//
 	// You can change the default version by
 	// calling
-	// [projects.methods.versions.setDefault](/ml/reference/rest/v1be
-	// ta1/projects.models.versions/setDefault).
+	// [projects.methods.versions.setDefault](/ml-engine/reference/re
+	// st/v1beta1/projects.models.versions/setDefault).
 	DefaultVersion *GoogleCloudMlV1beta1__Version `json:"defaultVersion,omitempty"`
 
 	// Description: Optional. The description specified for the model when
@@ -873,6 +868,15 @@
 	// deployed.
 	// Currently only one region per model is supported.
 	// Defaults to 'us-central1' if nothing is set.
+	// Note:
+	// *   No matter where a model is deployed, it can always be accessed
+	// by
+	//     users from anywhere, both for online and batch prediction.
+	// *   The region for a batch prediction job is set by the region field
+	// when
+	//     submitting the batch prediction job and does not take its value
+	// from
+	//     this field.
 	Regions []string `json:"regions,omitempty"`
 
 	// ServerResponse contains the HTTP response code and headers from the
@@ -1524,7 +1528,7 @@
 	//   A machine equivalent to <code
 	// suppresswarning="true">standard</code> that
 	//   also includes a
-	//   <a href="ml/docs/how-tos/using-gpus">
+	//   <a href="/ml-engine/docs/how-tos/using-gpus">
 	//   GPU that you can use in your trainer</a>.
 	//   </dd>
 	//   <dt>complex_model_m_gpu</dt>
@@ -1593,7 +1597,7 @@
 	//   "PREMIUM_1" - A large number of workers with many parameter
 	// servers.
 	//   "BASIC_GPU" - A single worker instance [with a
-	// GPU](ml/docs/how-tos/using-gpus).
+	// GPU](/ml-engine/docs/how-tos/using-gpus).
 	//   "CUSTOM" - The CUSTOM tier is not a set tier, but rather enables
 	// you to use your
 	// own cluster specification. When you use this tier, set values
@@ -1742,8 +1746,8 @@
 // get
 // information about all of the versions of a given model by
 // calling
-// [projects.models.versions.list](/ml/reference/rest/v1beta1/pro
-// jects.models.versions/list).
+// [projects.models.versions.list](/ml-engine/reference/rest/v1be
+// ta1/projects.models.versions/list).
 type GoogleCloudMlV1beta1__Version struct {
 	// CreateTime: Output only. The time the version was created.
 	CreateTime string `json:"createTime,omitempty"`
@@ -1751,14 +1755,14 @@
 	// DeploymentUri: Required. The Google Cloud Storage location of the
 	// trained model used to
 	// create the version. See the
-	// [overview of model deployment](/ml/docs/concepts/deployment-overview)
-	// for
+	// [overview of model
+	// deployment](/ml-engine/docs/concepts/deployment-overview) for
 	// more informaiton.
 	//
 	// When passing Version
 	// to
-	// [projects.models.versions.create](/ml/reference/rest/v1beta1/projec
-	// ts.models.versions/create)
+	// [projects.models.versions.create](/ml-engine/reference/rest/v1beta1
+	// /projects.models.versions/create)
 	// the model service uses the specified location as the source of the
 	// model.
 	// Once deployed, the model version is hosted by the prediction service,
@@ -1776,8 +1780,8 @@
 	//
 	// You can change the default version by
 	// calling
-	// [projects.methods.versions.setDefault](/ml/reference/rest/v1be
-	// ta1/projects.models.versions/setDefault).
+	// [projects.methods.versions.setDefault](/ml-engine/reference/re
+	// st/v1beta1/projects.models.versions/setDefault).
 	IsDefault bool `json:"isDefault,omitempty"`
 
 	// LastUseTime: Output only. The time the version was last used for
@@ -2149,7 +2153,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	if c.ifNoneMatch_ != "" {
 		reqHeaders.Set("If-None-Match", c.ifNoneMatch_)
 	}
@@ -2283,7 +2286,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	var body io.Reader = nil
 	body, err := googleapi.WithoutDataWrapper.JSONReader(c.googlecloudmlv1beta1__predictrequest)
 	if err != nil {
@@ -2419,7 +2421,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	var body io.Reader = nil
 	body, err := googleapi.WithoutDataWrapper.JSONReader(c.googlecloudmlv1beta1__canceljobrequest)
 	if err != nil {
@@ -2555,7 +2556,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	var body io.Reader = nil
 	body, err := googleapi.WithoutDataWrapper.JSONReader(c.googlecloudmlv1beta1__job)
 	if err != nil {
@@ -2700,7 +2700,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	if c.ifNoneMatch_ != "" {
 		reqHeaders.Set("If-None-Match", c.ifNoneMatch_)
 	}
@@ -2870,7 +2869,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	if c.ifNoneMatch_ != "" {
 		reqHeaders.Set("If-None-Match", c.ifNoneMatch_)
 	}
@@ -3007,8 +3005,8 @@
 // from
 // the model. Add versions by
 // calling
-// [projects.models.versions.create](/ml/reference/rest/v1beta1/p
-// rojects.models.versions/create).
+// [projects.models.versions.create](/ml-engine/reference/rest/v1
+// beta1/projects.models.versions/create).
 func (r *ProjectsModelsService) Create(parent string, googlecloudmlv1beta1__model *GoogleCloudMlV1beta1__Model) *ProjectsModelsCreateCall {
 	c := &ProjectsModelsCreateCall{s: r.s, urlParams_: make(gensupport.URLParams)}
 	c.parent = parent
@@ -3047,7 +3045,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	var body io.Reader = nil
 	body, err := googleapi.WithoutDataWrapper.JSONReader(c.googlecloudmlv1beta1__model)
 	if err != nil {
@@ -3103,7 +3100,7 @@
 	}
 	return ret, nil
 	// {
-	//   "description": "Creates a model which will later contain one or more versions.\n\nYou must add at least one version before you can request predictions from\nthe model. Add versions by calling\n[projects.models.versions.create](/ml/reference/rest/v1beta1/projects.models.versions/create).",
+	//   "description": "Creates a model which will later contain one or more versions.\n\nYou must add at least one version before you can request predictions from\nthe model. Add versions by calling\n[projects.models.versions.create](/ml-engine/reference/rest/v1beta1/projects.models.versions/create).",
 	//   "flatPath": "v1beta1/projects/{projectsId}/models",
 	//   "httpMethod": "POST",
 	//   "id": "ml.projects.models.create",
@@ -3149,8 +3146,8 @@
 // delete
 // versions by
 // calling
-// [projects.models.versions.delete](/ml/reference/rest/v1beta1/p
-// rojects.models.versions/delete).
+// [projects.models.versions.delete](/ml-engine/reference/rest/v1
+// beta1/projects.models.versions/delete).
 func (r *ProjectsModelsService) Delete(name string) *ProjectsModelsDeleteCall {
 	c := &ProjectsModelsDeleteCall{s: r.s, urlParams_: make(gensupport.URLParams)}
 	c.name = name
@@ -3188,7 +3185,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	var body io.Reader = nil
 	c.urlParams_.Set("alt", alt)
 	urls := googleapi.ResolveRelative(c.s.BasePath, "v1beta1/{+name}")
@@ -3239,7 +3235,7 @@
 	}
 	return ret, nil
 	// {
-	//   "description": "Deletes a model.\n\nYou can only delete a model if there are no versions in it. You can delete\nversions by calling\n[projects.models.versions.delete](/ml/reference/rest/v1beta1/projects.models.versions/delete).",
+	//   "description": "Deletes a model.\n\nYou can only delete a model if there are no versions in it. You can delete\nversions by calling\n[projects.models.versions.delete](/ml-engine/reference/rest/v1beta1/projects.models.versions/delete).",
 	//   "flatPath": "v1beta1/projects/{projectsId}/models/{modelsId}",
 	//   "httpMethod": "DELETE",
 	//   "id": "ml.projects.models.delete",
@@ -3329,7 +3325,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	if c.ifNoneMatch_ != "" {
 		reqHeaders.Set("If-None-Match", c.ifNoneMatch_)
 	}
@@ -3496,7 +3491,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	if c.ifNoneMatch_ != "" {
 		reqHeaders.Set("If-None-Match", c.ifNoneMatch_)
 	}
@@ -3635,8 +3629,8 @@
 // want a
 // new version to be the default, you must
 // call
-// [projects.models.versions.setDefault](/ml/reference/rest/v1beta1/
-// projects.models.versions/setDefault).
+// [projects.models.versions.setDefault](/ml-engine/reference/rest/v
+// 1beta1/projects.models.versions/setDefault).
 func (r *ProjectsModelsVersionsService) Create(parent string, googlecloudmlv1beta1__version *GoogleCloudMlV1beta1__Version) *ProjectsModelsVersionsCreateCall {
 	c := &ProjectsModelsVersionsCreateCall{s: r.s, urlParams_: make(gensupport.URLParams)}
 	c.parent = parent
@@ -3675,7 +3669,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	var body io.Reader = nil
 	body, err := googleapi.WithoutDataWrapper.JSONReader(c.googlecloudmlv1beta1__version)
 	if err != nil {
@@ -3731,7 +3724,7 @@
 	}
 	return ret, nil
 	// {
-	//   "description": "Creates a new version of a model from a trained TensorFlow model.\n\nIf the version created in the cloud by this call is the first deployed\nversion of the specified model, it will be made the default version of the\nmodel. When you add a version to a model that already has one or more\nversions, the default version does not automatically change. If you want a\nnew version to be the default, you must call\n[projects.models.versions.setDefault](/ml/reference/rest/v1beta1/projects.models.versions/setDefault).",
+	//   "description": "Creates a new version of a model from a trained TensorFlow model.\n\nIf the version created in the cloud by this call is the first deployed\nversion of the specified model, it will be made the default version of the\nmodel. When you add a version to a model that already has one or more\nversions, the default version does not automatically change. If you want a\nnew version to be the default, you must call\n[projects.models.versions.setDefault](/ml-engine/reference/rest/v1beta1/projects.models.versions/setDefault).",
 	//   "flatPath": "v1beta1/projects/{projectsId}/models/{modelsId}/versions",
 	//   "httpMethod": "POST",
 	//   "id": "ml.projects.models.versions.create",
@@ -3817,7 +3810,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	var body io.Reader = nil
 	c.urlParams_.Set("alt", alt)
 	urls := googleapi.ResolveRelative(c.s.BasePath, "v1beta1/{+name}")
@@ -3877,7 +3869,7 @@
 	//   ],
 	//   "parameters": {
 	//     "name": {
-	//       "description": "Required. The name of the version. You can get the names of all the\nversions of a model by calling\n[projects.models.versions.list](/ml/reference/rest/v1beta1/projects.models.versions/list).\n\nAuthorization: requires `Editor` role on the parent project.",
+	//       "description": "Required. The name of the version. You can get the names of all the\nversions of a model by calling\n[projects.models.versions.list](/ml-engine/reference/rest/v1beta1/projects.models.versions/list).\n\nAuthorization: requires `Editor` role on the parent project.",
 	//       "location": "path",
 	//       "pattern": "^projects/[^/]+/models/[^/]+/versions/[^/]+$",
 	//       "required": true,
@@ -3910,8 +3902,8 @@
 //
 // Models can have multiple versions. You can
 // call
-// [projects.models.versions.list](/ml/reference/rest/v1beta1/projec
-// ts.models.versions/list)
+// [projects.models.versions.list](/ml-engine/reference/rest/v1beta1
+// /projects.models.versions/list)
 // to get the same information that this method returns for all of
 // the
 // versions of a model.
@@ -3962,7 +3954,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	if c.ifNoneMatch_ != "" {
 		reqHeaders.Set("If-None-Match", c.ifNoneMatch_)
 	}
@@ -4016,7 +4007,7 @@
 	}
 	return ret, nil
 	// {
-	//   "description": "Gets information about a model version.\n\nModels can have multiple versions. You can call\n[projects.models.versions.list](/ml/reference/rest/v1beta1/projects.models.versions/list)\nto get the same information that this method returns for all of the\nversions of a model.",
+	//   "description": "Gets information about a model version.\n\nModels can have multiple versions. You can call\n[projects.models.versions.list](/ml-engine/reference/rest/v1beta1/projects.models.versions/list)\nto get the same information that this method returns for all of the\nversions of a model.",
 	//   "flatPath": "v1beta1/projects/{projectsId}/models/{modelsId}/versions/{versionsId}",
 	//   "httpMethod": "GET",
 	//   "id": "ml.projects.models.versions.get",
@@ -4131,7 +4122,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	if c.ifNoneMatch_ != "" {
 		reqHeaders.Set("If-None-Match", c.ifNoneMatch_)
 	}
@@ -4307,7 +4297,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	var body io.Reader = nil
 	body, err := googleapi.WithoutDataWrapper.JSONReader(c.googlecloudmlv1beta1__setdefaultversionrequest)
 	if err != nil {
@@ -4372,7 +4361,7 @@
 	//   ],
 	//   "parameters": {
 	//     "name": {
-	//       "description": "Required. The name of the version to make the default for the model. You\ncan get the names of all the versions of a model by calling\n[projects.models.versions.list](/ml/reference/rest/v1beta1/projects.models.versions/list).\n\nAuthorization: requires `Editor` role on the parent project.",
+	//       "description": "Required. The name of the version to make the default for the model. You\ncan get the names of all the versions of a model by calling\n[projects.models.versions.list](/ml-engine/reference/rest/v1beta1/projects.models.versions/list).\n\nAuthorization: requires `Editor` role on the parent project.",
 	//       "location": "path",
 	//       "pattern": "^projects/[^/]+/models/[^/]+/versions/[^/]+$",
 	//       "required": true,
@@ -4458,7 +4447,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	var body io.Reader = nil
 	c.urlParams_.Set("alt", alt)
 	urls := googleapi.ResolveRelative(c.s.BasePath, "v1beta1/{+name}:cancel")
@@ -4590,7 +4578,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	var body io.Reader = nil
 	c.urlParams_.Set("alt", alt)
 	urls := googleapi.ResolveRelative(c.s.BasePath, "v1beta1/{+name}")
@@ -4731,7 +4718,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	if c.ifNoneMatch_ != "" {
 		reqHeaders.Set("If-None-Match", c.ifNoneMatch_)
 	}
@@ -4899,7 +4885,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	if c.ifNoneMatch_ != "" {
 		reqHeaders.Set("If-None-Match", c.ifNoneMatch_)
 	}
diff --git a/monitoring/v3/monitoring-api.json b/monitoring/v3/monitoring-api.json
index f548747..f777f6f 100644
--- a/monitoring/v3/monitoring-api.json
+++ b/monitoring/v3/monitoring-api.json
@@ -1,1229 +1,25 @@
 {
-  "resources": {
-    "projects": {
-      "resources": {
-        "timeSeries": {
-          "methods": {
-            "list": {
-              "description": "Lists time series that match a filter. This method does not require a Stackdriver account.",
-              "response": {
-                "$ref": "ListTimeSeriesResponse"
-              },
-              "httpMethod": "GET",
-              "parameterOrder": [
-                "name"
-              ],
-              "parameters": {
-                "interval.startTime": {
-                  "location": "query",
-                  "description": "Optional. The beginning of the time interval. The default value for the start time is the end time. The start time must not be later than the end time.",
-                  "format": "google-datetime",
-                  "type": "string"
-                },
-                "view": {
-                  "location": "query",
-                  "enum": [
-                    "FULL",
-                    "HEADERS"
-                  ],
-                  "description": "Specifies which information is returned about the time series.",
-                  "type": "string"
-                },
-                "name": {
-                  "required": true,
-                  "type": "string",
-                  "pattern": "^projects/[^/]+$",
-                  "location": "path",
-                  "description": "The project on which to execute the request. The format is \"projects/{project_id_or_number}\"."
-                },
-                "aggregation.groupByFields": {
-                  "type": "string",
-                  "repeated": true,
-                  "location": "query",
-                  "description": "The set of fields to preserve when crossSeriesReducer is specified. The groupByFields determine how the time series are partitioned into subsets prior to applying the aggregation function. Each subset contains time series that have the same value for each of the grouping fields. Each individual time series is a member of exactly one subset. The crossSeriesReducer is applied to each subset of time series. It is not possible to reduce across different resource types, so this field implicitly contains resource.type. Fields not specified in groupByFields are aggregated away. If groupByFields is not specified and all the time series have the same resource type, then the time series are aggregated into a single output time series. If crossSeriesReducer is not defined, this field is ignored."
-                },
-                "interval.endTime": {
-                  "description": "Required. The end of the time interval.",
-                  "format": "google-datetime",
-                  "type": "string",
-                  "location": "query"
-                },
-                "aggregation.alignmentPeriod": {
-                  "location": "query",
-                  "description": "The alignment period for per-time series alignment. If present, alignmentPeriod must be at least 60 seconds. After per-time series alignment, each time series will contain data points only on the period boundaries. If perSeriesAligner is not specified or equals ALIGN_NONE, then this field is ignored. If perSeriesAligner is specified and does not equal ALIGN_NONE, then this field must be defined; otherwise an error is returned.",
-                  "format": "google-duration",
-                  "type": "string"
-                },
-                "pageSize": {
-                  "location": "query",
-                  "description": "A positive number that is the maximum number of results to return. When view field sets to FULL, it limits the number of Points server will return; if view field is HEADERS, it limits the number of TimeSeries server will return.",
-                  "format": "int32",
-                  "type": "integer"
-                },
-                "orderBy": {
-                  "type": "string",
-                  "location": "query",
-                  "description": "Specifies the order in which the points of the time series should be returned. By default, results are not ordered. Currently, this field must be left blank."
-                },
-                "aggregation.crossSeriesReducer": {
-                  "location": "query",
-                  "enum": [
-                    "REDUCE_NONE",
-                    "REDUCE_MEAN",
-                    "REDUCE_MIN",
-                    "REDUCE_MAX",
-                    "REDUCE_SUM",
-                    "REDUCE_STDDEV",
-                    "REDUCE_COUNT",
-                    "REDUCE_COUNT_TRUE",
-                    "REDUCE_FRACTION_TRUE",
-                    "REDUCE_PERCENTILE_99",
-                    "REDUCE_PERCENTILE_95",
-                    "REDUCE_PERCENTILE_50",
-                    "REDUCE_PERCENTILE_05"
-                  ],
-                  "description": "The approach to be used to combine time series. Not all reducer functions may be applied to all time series, depending on the metric type and the value type of the original time series. Reduction may change the metric type of value type of the time series.Time series data must be aligned in order to perform cross-time series reduction. If crossSeriesReducer is specified, then perSeriesAligner must be specified and not equal ALIGN_NONE and alignmentPeriod must be specified; otherwise, an error is returned.",
-                  "type": "string"
-                },
-                "filter": {
-                  "location": "query",
-                  "description": "A monitoring filter that specifies which time series should be returned. The filter must specify a single metric type, and can additionally specify metric labels and other information. For example:\nmetric.type = \"compute.googleapis.com/instance/cpu/usage_time\" AND\n    metric.label.instance_name = \"my-instance-name\"\n",
-                  "type": "string"
-                },
-                "pageToken": {
-                  "description": "If this field is not empty then it must contain the nextPageToken value returned by a previous call to this method. Using this field causes the method to return additional results from the previous method call.",
-                  "type": "string",
-                  "location": "query"
-                },
-                "aggregation.perSeriesAligner": {
-                  "enum": [
-                    "ALIGN_NONE",
-                    "ALIGN_DELTA",
-                    "ALIGN_RATE",
-                    "ALIGN_INTERPOLATE",
-                    "ALIGN_NEXT_OLDER",
-                    "ALIGN_MIN",
-                    "ALIGN_MAX",
-                    "ALIGN_MEAN",
-                    "ALIGN_COUNT",
-                    "ALIGN_SUM",
-                    "ALIGN_STDDEV",
-                    "ALIGN_COUNT_TRUE",
-                    "ALIGN_FRACTION_TRUE",
-                    "ALIGN_PERCENTILE_99",
-                    "ALIGN_PERCENTILE_95",
-                    "ALIGN_PERCENTILE_50",
-                    "ALIGN_PERCENTILE_05"
-                  ],
-                  "description": "The approach to be used to align individual time series. Not all alignment functions may be applied to all time series, depending on the metric type and value type of the original time series. Alignment may change the metric type or the value type of the time series.Time series data must be aligned in order to perform cross-time series reduction. If crossSeriesReducer is specified, then perSeriesAligner must be specified and not equal ALIGN_NONE and alignmentPeriod must be specified; otherwise, an error is returned.",
-                  "type": "string",
-                  "location": "query"
-                }
-              },
-              "scopes": [
-                "https://www.googleapis.com/auth/cloud-platform",
-                "https://www.googleapis.com/auth/monitoring",
-                "https://www.googleapis.com/auth/monitoring.read"
-              ],
-              "flatPath": "v3/projects/{projectsId}/timeSeries",
-              "path": "v3/{+name}/timeSeries",
-              "id": "monitoring.projects.timeSeries.list"
-            },
-            "create": {
-              "description": "Creates or adds data to one or more time series. The response is empty if all time series in the request were written. If any time series could not be written, a corresponding failure message is included in the error response.",
-              "request": {
-                "$ref": "CreateTimeSeriesRequest"
-              },
-              "httpMethod": "POST",
-              "parameterOrder": [
-                "name"
-              ],
-              "response": {
-                "$ref": "Empty"
-              },
-              "scopes": [
-                "https://www.googleapis.com/auth/cloud-platform",
-                "https://www.googleapis.com/auth/monitoring",
-                "https://www.googleapis.com/auth/monitoring.write"
-              ],
-              "parameters": {
-                "name": {
-                  "description": "The project on which to execute the request. The format is \"projects/{project_id_or_number}\".",
-                  "required": true,
-                  "type": "string",
-                  "pattern": "^projects/[^/]+$",
-                  "location": "path"
-                }
-              },
-              "flatPath": "v3/projects/{projectsId}/timeSeries",
-              "id": "monitoring.projects.timeSeries.create",
-              "path": "v3/{+name}/timeSeries"
-            }
-          }
-        },
-        "metricDescriptors": {
-          "methods": {
-            "delete": {
-              "description": "Deletes a metric descriptor. Only user-created custom metrics can be deleted.",
-              "httpMethod": "DELETE",
-              "response": {
-                "$ref": "Empty"
-              },
-              "parameterOrder": [
-                "name"
-              ],
-              "parameters": {
-                "name": {
-                  "description": "The metric descriptor on which to execute the request. The format is \"projects/{project_id_or_number}/metricDescriptors/{metric_id}\". An example of {metric_id} is: \"custom.googleapis.com/my_test_metric\".",
-                  "required": true,
-                  "type": "string",
-                  "pattern": "^projects/[^/]+/metricDescriptors/.+$",
-                  "location": "path"
-                }
-              },
-              "scopes": [
-                "https://www.googleapis.com/auth/cloud-platform",
-                "https://www.googleapis.com/auth/monitoring"
-              ],
-              "flatPath": "v3/projects/{projectsId}/metricDescriptors/{metricDescriptorsId}",
-              "id": "monitoring.projects.metricDescriptors.delete",
-              "path": "v3/{+name}"
-            },
-            "list": {
-              "response": {
-                "$ref": "ListMetricDescriptorsResponse"
-              },
-              "parameterOrder": [
-                "name"
-              ],
-              "httpMethod": "GET",
-              "scopes": [
-                "https://www.googleapis.com/auth/cloud-platform",
-                "https://www.googleapis.com/auth/monitoring",
-                "https://www.googleapis.com/auth/monitoring.read",
-                "https://www.googleapis.com/auth/monitoring.write"
-              ],
-              "parameters": {
-                "filter": {
-                  "location": "query",
-                  "description": "If this field is empty, all custom and system-defined metric descriptors are returned. Otherwise, the filter specifies which metric descriptors are to be returned. For example, the following filter matches all custom metrics:\nmetric.type = starts_with(\"custom.googleapis.com/\")\n",
-                  "type": "string"
-                },
-                "name": {
-                  "pattern": "^projects/[^/]+$",
-                  "location": "path",
-                  "description": "The project on which to execute the request. The format is \"projects/{project_id_or_number}\".",
-                  "required": true,
-                  "type": "string"
-                },
-                "pageToken": {
-                  "description": "If this field is not empty then it must contain the nextPageToken value returned by a previous call to this method. Using this field causes the method to return additional results from the previous method call.",
-                  "type": "string",
-                  "location": "query"
-                },
-                "pageSize": {
-                  "description": "A positive number that is the maximum number of results to return.",
-                  "format": "int32",
-                  "type": "integer",
-                  "location": "query"
-                }
-              },
-              "flatPath": "v3/projects/{projectsId}/metricDescriptors",
-              "path": "v3/{+name}/metricDescriptors",
-              "id": "monitoring.projects.metricDescriptors.list",
-              "description": "Lists metric descriptors that match a filter. This method does not require a Stackdriver account."
-            },
-            "get": {
-              "description": "Gets a single metric descriptor. This method does not require a Stackdriver account.",
-              "response": {
-                "$ref": "MetricDescriptor"
-              },
-              "parameterOrder": [
-                "name"
-              ],
-              "httpMethod": "GET",
-              "scopes": [
-                "https://www.googleapis.com/auth/cloud-platform",
-                "https://www.googleapis.com/auth/monitoring",
-                "https://www.googleapis.com/auth/monitoring.read",
-                "https://www.googleapis.com/auth/monitoring.write"
-              ],
-              "parameters": {
-                "name": {
-                  "location": "path",
-                  "description": "The metric descriptor on which to execute the request. The format is \"projects/{project_id_or_number}/metricDescriptors/{metric_id}\". An example value of {metric_id} is \"compute.googleapis.com/instance/disk/read_bytes_count\".",
-                  "required": true,
-                  "type": "string",
-                  "pattern": "^projects/[^/]+/metricDescriptors/.+$"
-                }
-              },
-              "flatPath": "v3/projects/{projectsId}/metricDescriptors/{metricDescriptorsId}",
-              "path": "v3/{+name}",
-              "id": "monitoring.projects.metricDescriptors.get"
-            },
-            "create": {
-              "httpMethod": "POST",
-              "parameterOrder": [
-                "name"
-              ],
-              "response": {
-                "$ref": "MetricDescriptor"
-              },
-              "parameters": {
-                "name": {
-                  "description": "The project on which to execute the request. The format is \"projects/{project_id_or_number}\".",
-                  "required": true,
-                  "type": "string",
-                  "pattern": "^projects/[^/]+$",
-                  "location": "path"
-                }
-              },
-              "scopes": [
-                "https://www.googleapis.com/auth/cloud-platform",
-                "https://www.googleapis.com/auth/monitoring",
-                "https://www.googleapis.com/auth/monitoring.write"
-              ],
-              "flatPath": "v3/projects/{projectsId}/metricDescriptors",
-              "id": "monitoring.projects.metricDescriptors.create",
-              "path": "v3/{+name}/metricDescriptors",
-              "request": {
-                "$ref": "MetricDescriptor"
-              },
-              "description": "Creates a new metric descriptor. User-created metric descriptors define custom metrics."
-            }
-          }
-        },
-        "monitoredResourceDescriptors": {
-          "methods": {
-            "list": {
-              "response": {
-                "$ref": "ListMonitoredResourceDescriptorsResponse"
-              },
-              "parameterOrder": [
-                "name"
-              ],
-              "httpMethod": "GET",
-              "scopes": [
-                "https://www.googleapis.com/auth/cloud-platform",
-                "https://www.googleapis.com/auth/monitoring",
-                "https://www.googleapis.com/auth/monitoring.read",
-                "https://www.googleapis.com/auth/monitoring.write"
-              ],
-              "parameters": {
-                "filter": {
-                  "location": "query",
-                  "description": "An optional filter describing the descriptors to be returned. The filter can reference the descriptor's type and labels. For example, the following filter returns only Google Compute Engine descriptors that have an id label:\nresource.type = starts_with(\"gce_\") AND resource.label:id\n",
-                  "type": "string"
-                },
-                "name": {
-                  "description": "The project on which to execute the request. The format is \"projects/{project_id_or_number}\".",
-                  "required": true,
-                  "type": "string",
-                  "pattern": "^projects/[^/]+$",
-                  "location": "path"
-                },
-                "pageToken": {
-                  "description": "If this field is not empty then it must contain the nextPageToken value returned by a previous call to this method. Using this field causes the method to return additional results from the previous method call.",
-                  "type": "string",
-                  "location": "query"
-                },
-                "pageSize": {
-                  "type": "integer",
-                  "location": "query",
-                  "description": "A positive number that is the maximum number of results to return.",
-                  "format": "int32"
-                }
-              },
-              "flatPath": "v3/projects/{projectsId}/monitoredResourceDescriptors",
-              "path": "v3/{+name}/monitoredResourceDescriptors",
-              "id": "monitoring.projects.monitoredResourceDescriptors.list",
-              "description": "Lists monitored resource descriptors that match a filter. This method does not require a Stackdriver account."
-            },
-            "get": {
-              "description": "Gets a single monitored resource descriptor. This method does not require a Stackdriver account.",
-              "response": {
-                "$ref": "MonitoredResourceDescriptor"
-              },
-              "parameterOrder": [
-                "name"
-              ],
-              "httpMethod": "GET",
-              "scopes": [
-                "https://www.googleapis.com/auth/cloud-platform",
-                "https://www.googleapis.com/auth/monitoring",
-                "https://www.googleapis.com/auth/monitoring.read",
-                "https://www.googleapis.com/auth/monitoring.write"
-              ],
-              "parameters": {
-                "name": {
-                  "location": "path",
-                  "description": "The monitored resource descriptor to get. The format is \"projects/{project_id_or_number}/monitoredResourceDescriptors/{resource_type}\". The {resource_type} is a predefined type, such as cloudsql_database.",
-                  "required": true,
-                  "type": "string",
-                  "pattern": "^projects/[^/]+/monitoredResourceDescriptors/[^/]+$"
-                }
-              },
-              "flatPath": "v3/projects/{projectsId}/monitoredResourceDescriptors/{monitoredResourceDescriptorsId}",
-              "path": "v3/{+name}",
-              "id": "monitoring.projects.monitoredResourceDescriptors.get"
-            }
-          }
-        },
-        "groups": {
-          "methods": {
-            "list": {
-              "response": {
-                "$ref": "ListGroupsResponse"
-              },
-              "parameterOrder": [
-                "name"
-              ],
-              "httpMethod": "GET",
-              "scopes": [
-                "https://www.googleapis.com/auth/cloud-platform",
-                "https://www.googleapis.com/auth/monitoring",
-                "https://www.googleapis.com/auth/monitoring.read"
-              ],
-              "parameters": {
-                "pageToken": {
-                  "location": "query",
-                  "description": "If this field is not empty then it must contain the nextPageToken value returned by a previous call to this method. Using this field causes the method to return additional results from the previous method call.",
-                  "type": "string"
-                },
-                "pageSize": {
-                  "location": "query",
-                  "description": "A positive number that is the maximum number of results to return.",
-                  "format": "int32",
-                  "type": "integer"
-                },
-                "ancestorsOfGroup": {
-                  "description": "A group name: \"projects/{project_id_or_number}/groups/{group_id}\". Returns groups that are ancestors of the specified group. The groups are returned in order, starting with the immediate parent and ending with the most distant ancestor. If the specified group has no immediate parent, the results are empty.",
-                  "type": "string",
-                  "location": "query"
-                },
-                "name": {
-                  "description": "The project whose groups are to be listed. The format is \"projects/{project_id_or_number}\".",
-                  "required": true,
-                  "type": "string",
-                  "pattern": "^projects/[^/]+$",
-                  "location": "path"
-                },
-                "childrenOfGroup": {
-                  "location": "query",
-                  "description": "A group name: \"projects/{project_id_or_number}/groups/{group_id}\". Returns groups whose parentName field contains the group name. If no groups have this parent, the results are empty.",
-                  "type": "string"
-                },
-                "descendantsOfGroup": {
-                  "description": "A group name: \"projects/{project_id_or_number}/groups/{group_id}\". Returns the descendants of the specified group. This is a superset of the results returned by the childrenOfGroup filter, and includes children-of-children, and so forth.",
-                  "type": "string",
-                  "location": "query"
-                }
-              },
-              "flatPath": "v3/projects/{projectsId}/groups",
-              "path": "v3/{+name}/groups",
-              "id": "monitoring.projects.groups.list",
-              "description": "Lists the existing groups."
-            },
-            "get": {
-              "path": "v3/{+name}",
-              "id": "monitoring.projects.groups.get",
-              "description": "Gets a single group.",
-              "response": {
-                "$ref": "Group"
-              },
-              "parameterOrder": [
-                "name"
-              ],
-              "httpMethod": "GET",
-              "scopes": [
-                "https://www.googleapis.com/auth/cloud-platform",
-                "https://www.googleapis.com/auth/monitoring",
-                "https://www.googleapis.com/auth/monitoring.read"
-              ],
-              "parameters": {
-                "name": {
-                  "location": "path",
-                  "description": "The group to retrieve. The format is \"projects/{project_id_or_number}/groups/{group_id}\".",
-                  "required": true,
-                  "type": "string",
-                  "pattern": "^projects/[^/]+/groups/[^/]+$"
-                }
-              },
-              "flatPath": "v3/projects/{projectsId}/groups/{groupsId}"
-            },
-            "update": {
-              "request": {
-                "$ref": "Group"
-              },
-              "description": "Updates an existing group. You can change any group attributes except name.",
-              "response": {
-                "$ref": "Group"
-              },
-              "parameterOrder": [
-                "name"
-              ],
-              "httpMethod": "PUT",
-              "parameters": {
-                "name": {
-                  "description": "Output only. The name of this group. The format is \"projects/{project_id_or_number}/groups/{group_id}\". When creating a group, this field is ignored and a new name is created consisting of the project specified in the call to CreateGroup and a unique {group_id} that is generated automatically.",
-                  "required": true,
-                  "type": "string",
-                  "pattern": "^projects/[^/]+/groups/[^/]+$",
-                  "location": "path"
-                },
-                "validateOnly": {
-                  "description": "If true, validate this request but do not update the existing group.",
-                  "type": "boolean",
-                  "location": "query"
-                }
-              },
-              "scopes": [
-                "https://www.googleapis.com/auth/cloud-platform",
-                "https://www.googleapis.com/auth/monitoring"
-              ],
-              "flatPath": "v3/projects/{projectsId}/groups/{groupsId}",
-              "path": "v3/{+name}",
-              "id": "monitoring.projects.groups.update"
-            },
-            "create": {
-              "response": {
-                "$ref": "Group"
-              },
-              "parameterOrder": [
-                "name"
-              ],
-              "httpMethod": "POST",
-              "parameters": {
-                "name": {
-                  "location": "path",
-                  "description": "The project in which to create the group. The format is \"projects/{project_id_or_number}\".",
-                  "required": true,
-                  "type": "string",
-                  "pattern": "^projects/[^/]+$"
-                },
-                "validateOnly": {
-                  "type": "boolean",
-                  "location": "query",
-                  "description": "If true, validate this request but do not create the group."
-                }
-              },
-              "scopes": [
-                "https://www.googleapis.com/auth/cloud-platform",
-                "https://www.googleapis.com/auth/monitoring"
-              ],
-              "flatPath": "v3/projects/{projectsId}/groups",
-              "path": "v3/{+name}/groups",
-              "id": "monitoring.projects.groups.create",
-              "request": {
-                "$ref": "Group"
-              },
-              "description": "Creates a new group."
-            },
-            "delete": {
-              "response": {
-                "$ref": "Empty"
-              },
-              "parameterOrder": [
-                "name"
-              ],
-              "httpMethod": "DELETE",
-              "parameters": {
-                "name": {
-                  "description": "The group to delete. The format is \"projects/{project_id_or_number}/groups/{group_id}\".",
-                  "required": true,
-                  "type": "string",
-                  "pattern": "^projects/[^/]+/groups/[^/]+$",
-                  "location": "path"
-                }
-              },
-              "scopes": [
-                "https://www.googleapis.com/auth/cloud-platform",
-                "https://www.googleapis.com/auth/monitoring"
-              ],
-              "flatPath": "v3/projects/{projectsId}/groups/{groupsId}",
-              "path": "v3/{+name}",
-              "id": "monitoring.projects.groups.delete",
-              "description": "Deletes an existing group."
-            }
-          },
-          "resources": {
-            "members": {
-              "methods": {
-                "list": {
-                  "response": {
-                    "$ref": "ListGroupMembersResponse"
-                  },
-                  "parameterOrder": [
-                    "name"
-                  ],
-                  "httpMethod": "GET",
-                  "scopes": [
-                    "https://www.googleapis.com/auth/cloud-platform",
-                    "https://www.googleapis.com/auth/monitoring",
-                    "https://www.googleapis.com/auth/monitoring.read"
-                  ],
-                  "parameters": {
-                    "interval.endTime": {
-                      "location": "query",
-                      "description": "Required. The end of the time interval.",
-                      "format": "google-datetime",
-                      "type": "string"
-                    },
-                    "filter": {
-                      "location": "query",
-                      "description": "An optional list filter describing the members to be returned. The filter may reference the type, labels, and metadata of monitored resources that comprise the group. For example, to return only resources representing Compute Engine VM instances, use this filter:\nresource.type = \"gce_instance\"\n",
-                      "type": "string"
-                    },
-                    "pageToken": {
-                      "location": "query",
-                      "description": "If this field is not empty then it must contain the nextPageToken value returned by a previous call to this method. Using this field causes the method to return additional results from the previous method call.",
-                      "type": "string"
-                    },
-                    "interval.startTime": {
-                      "location": "query",
-                      "description": "Optional. The beginning of the time interval. The default value for the start time is the end time. The start time must not be later than the end time.",
-                      "format": "google-datetime",
-                      "type": "string"
-                    },
-                    "pageSize": {
-                      "type": "integer",
-                      "location": "query",
-                      "description": "A positive number that is the maximum number of results to return.",
-                      "format": "int32"
-                    },
-                    "name": {
-                      "location": "path",
-                      "description": "The group whose members are listed. The format is \"projects/{project_id_or_number}/groups/{group_id}\".",
-                      "required": true,
-                      "type": "string",
-                      "pattern": "^projects/[^/]+/groups/[^/]+$"
-                    }
-                  },
-                  "flatPath": "v3/projects/{projectsId}/groups/{groupsId}/members",
-                  "path": "v3/{+name}/members",
-                  "id": "monitoring.projects.groups.members.list",
-                  "description": "Lists the monitored resources that are members of a group."
-                }
-              }
-            }
-          }
-        },
-        "collectdTimeSeries": {
-          "methods": {
-            "create": {
-              "response": {
-                "$ref": "Empty"
-              },
-              "parameterOrder": [
-                "name"
-              ],
-              "httpMethod": "POST",
-              "parameters": {
-                "name": {
-                  "required": true,
-                  "type": "string",
-                  "pattern": "^projects/[^/]+$",
-                  "location": "path",
-                  "description": "The project in which to create the time series. The format is \"projects/PROJECT_ID_OR_NUMBER\"."
-                }
-              },
-              "scopes": [
-                "https://www.googleapis.com/auth/cloud-platform",
-                "https://www.googleapis.com/auth/monitoring",
-                "https://www.googleapis.com/auth/monitoring.write"
-              ],
-              "flatPath": "v3/projects/{projectsId}/collectdTimeSeries",
-              "path": "v3/{+name}/collectdTimeSeries",
-              "id": "monitoring.projects.collectdTimeSeries.create",
-              "request": {
-                "$ref": "CreateCollectdTimeSeriesRequest"
-              },
-              "description": "Stackdriver Monitoring Agent only: Creates a new time series.\u003caside class=\"caution\"\u003eThis method is only for use by the Stackdriver Monitoring Agent. Use projects.timeSeries.create instead.\u003c/aside\u003e"
-            }
-          }
-        }
-      }
-    }
-  },
-  "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"
-    },
-    "access_token": {
-      "description": "OAuth access token.",
-      "type": "string",
-      "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.",
-      "type": "string",
-      "location": "query"
-    },
-    "pp": {
-      "location": "query",
-      "description": "Pretty-print response.",
-      "type": "boolean",
-      "default": "true"
-    },
-    "oauth_token": {
-      "description": "OAuth 2.0 token for the current user.",
-      "type": "string",
-      "location": "query"
-    },
-    "bearer_token": {
-      "location": "query",
-      "description": "OAuth bearer token.",
-      "type": "string"
-    },
-    "upload_protocol": {
-      "type": "string",
-      "location": "query",
-      "description": "Upload protocol for media (e.g. \"raw\", \"multipart\")."
-    },
-    "prettyPrint": {
-      "location": "query",
-      "description": "Returns response with indentations and line breaks.",
-      "type": "boolean",
-      "default": "true"
-    },
-    "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\").",
-      "type": "string",
-      "location": "query"
-    },
-    "$.xgafv": {
-      "description": "V1 error format.",
-      "type": "string",
-      "enumDescriptions": [
-        "v1 error format",
-        "v2 error format"
-      ],
-      "location": "query",
-      "enum": [
-        "1",
-        "2"
-      ]
-    },
-    "callback": {
-      "description": "JSONP",
-      "type": "string",
-      "location": "query"
-    },
-    "alt": {
-      "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",
-      "description": "Data format for response.",
-      "default": "json"
-    }
-  },
-  "version": "v3",
-  "baseUrl": "https://monitoring.googleapis.com/",
-  "servicePath": "",
-  "description": "Manages your Stackdriver Monitoring data and configurations. Most projects must be associated with a Stackdriver account, with a few exceptions as noted on the individual method pages.",
-  "kind": "discovery#restDescription",
-  "basePath": "",
-  "id": "monitoring:v3",
-  "revision": "20170306",
-  "documentationLink": "https://cloud.google.com/monitoring/api/",
-  "discoveryVersion": "v1",
-  "version_module": "True",
   "schemas": {
-    "ListGroupMembersResponse": {
-      "type": "object",
+    "Metric": {
       "properties": {
-        "members": {
-          "description": "A set of monitored resources in the group.",
-          "type": "array",
-          "items": {
-            "$ref": "MonitoredResource"
-          }
-        },
-        "nextPageToken": {
-          "type": "string",
-          "description": "If there are more results than have been returned, then this field is set to a non-empty value. To see the additional results, use that value as pageToken in the next call to this method."
-        },
-        "totalSize": {
-          "description": "The total number of elements matching this request.",
-          "format": "int32",
-          "type": "integer"
-        }
-      },
-      "id": "ListGroupMembersResponse",
-      "description": "The ListGroupMembers response."
-    },
-    "CreateCollectdTimeSeriesRequest": {
-      "description": "The CreateCollectdTimeSeries request.",
-      "type": "object",
-      "properties": {
-        "collectdVersion": {
-          "description": "The version of collectd that collected the data. Example: \"5.3.0-192.el6\".",
-          "type": "string"
-        },
-        "resource": {
-          "$ref": "MonitoredResource",
-          "description": "The monitored resource associated with the time series."
-        },
-        "collectdPayloads": {
-          "type": "array",
-          "items": {
-            "$ref": "CollectdPayload"
-          },
-          "description": "The collectd payloads representing the time series data. You must not include more than a single point for each time series, so no two payloads can have the same values for all of the fields plugin, plugin_instance, type, and type_instance."
-        }
-      },
-      "id": "CreateCollectdTimeSeriesRequest"
-    },
-    "ListMonitoredResourceDescriptorsResponse": {
-      "description": "The ListMonitoredResourcDescriptors response.",
-      "type": "object",
-      "properties": {
-        "nextPageToken": {
-          "description": "If there are more results than have been returned, then this field is set to a non-empty value. To see the additional results, use that value as pageToken in the next call to this method.",
-          "type": "string"
-        },
-        "resourceDescriptors": {
-          "description": "The monitored resource descriptors that are available to this project and that match filter, if present.",
-          "type": "array",
-          "items": {
-            "$ref": "MonitoredResourceDescriptor"
-          }
-        }
-      },
-      "id": "ListMonitoredResourceDescriptorsResponse"
-    },
-    "TimeSeries": {
-      "description": "A collection of data points that describes the time-varying values of a metric. A time series is identified by a combination of a fully-specified monitored resource and a fully-specified metric. This type is used for both listing and creating time series.",
-      "type": "object",
-      "properties": {
-        "resource": {
-          "$ref": "MonitoredResource",
-          "description": "The associated resource. A fully-specified monitored resource used to identify the time series."
-        },
-        "metricKind": {
-          "type": "string",
-          "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"
-          ],
-          "description": "The metric kind of the time series. When listing time series, this metric kind might be different from the metric kind of the associated metric if this time series is an alignment or reduction of other time series.When creating a time series, this field is optional. If present, it must be the same as the metric kind of the associated metric. If the associated metric's descriptor must be auto-created, then this field specifies the metric kind of the new descriptor and must be either GAUGE (the default) or CUMULATIVE."
-        },
-        "metric": {
-          "description": "The associated metric. A fully-specified metric used to identify the time series.",
-          "$ref": "Metric"
-        },
-        "points": {
-          "type": "array",
-          "items": {
-            "$ref": "Point"
-          },
-          "description": "The data points of this time series. When listing time series, the order of the points is specified by the list method.When creating a time series, this field must contain exactly one point and the point's type must be the same as the value type of the associated metric. If the associated metric's descriptor must be auto-created, then the value type of the descriptor is determined by the point's type, which must be BOOL, INT64, DOUBLE, or DISTRIBUTION."
-        },
-        "valueType": {
-          "enum": [
-            "VALUE_TYPE_UNSPECIFIED",
-            "BOOL",
-            "INT64",
-            "DOUBLE",
-            "STRING",
-            "DISTRIBUTION",
-            "MONEY"
-          ],
-          "description": "The value type of the time series. When listing time series, this value type might be different from the value type of the associated metric if this time series is an alignment or reduction of other time series.When creating a time series, this field is optional. If present, it must be the same as the type of the data in the points field.",
-          "type": "string",
-          "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."
-          ]
-        }
-      },
-      "id": "TimeSeries"
-    },
-    "CreateTimeSeriesRequest": {
-      "description": "The CreateTimeSeries request.",
-      "type": "object",
-      "properties": {
-        "timeSeries": {
-          "description": "The new data to be added to a list of time series. Adds at most one data point to each of several time series. The new data point must be more recent than any other point in its time series. Each TimeSeries value must fully specify a unique time series by supplying all label values for the metric and the monitored resource.",
-          "type": "array",
-          "items": {
-            "$ref": "TimeSeries"
-          }
-        }
-      },
-      "id": "CreateTimeSeriesRequest"
-    },
-    "Distribution": {
-      "description": "Distribution contains summary statistics for a population of values and, optionally, a histogram representing the distribution of those values across a specified set of histogram buckets.The summary statistics are the count, mean, sum of the squared deviation from the mean, the minimum, and the maximum of the set of population of values.The histogram is based on a sequence of buckets and gives a count of values that fall into each bucket. The boundaries of the buckets are given either explicitly or by specifying parameters for a method of computing them (buckets of fixed width or buckets of exponentially increasing width).Although it is not forbidden, it is generally a bad idea to include non-finite values (infinities or NaNs) in the population of values, as this will render the mean and sum_of_squared_deviation fields meaningless.",
-      "type": "object",
-      "properties": {
-        "mean": {
-          "description": "The arithmetic mean of the values in the population. If count is zero then this field must be zero.",
-          "format": "double",
-          "type": "number"
-        },
-        "count": {
-          "description": "The number of values in the population. Must be non-negative.",
-          "format": "int64",
-          "type": "string"
-        },
-        "bucketCounts": {
-          "description": "If bucket_options is given, then the sum of the values in bucket_counts must equal the value in count. If bucket_options is not given, no bucket_counts fields may be given.Bucket counts are given in order under the numbering scheme described above (the underflow bucket has number 0; the finite buckets, if any, have numbers 1 through N-2; the overflow bucket has number N-1).The size of bucket_counts must be no greater than N as defined in bucket_options.Any suffix of trailing zero bucket_count fields may be omitted.",
-          "type": "array",
-          "items": {
-            "format": "int64",
-            "type": "string"
-          }
-        },
-        "bucketOptions": {
-          "$ref": "BucketOptions",
-          "description": "Defines the histogram bucket boundaries."
-        },
-        "sumOfSquaredDeviation": {
-          "description": "The sum of squared deviations from the mean of the values in the population. For values x_i this is:\nSum[i=1..n]((x_i - mean)^2)\nKnuth, \"The Art of Computer Programming\", Vol. 2, page 323, 3rd edition describes Welford's method for accumulating this sum in one pass.If count is zero then this field must be zero.",
-          "format": "double",
-          "type": "number"
-        },
-        "range": {
-          "$ref": "Range",
-          "description": "If specified, contains the range of the population values. The field must not be present if the count is zero. This field is presently ignored by the Stackdriver Monitoring API v3."
-        }
-      },
-      "id": "Distribution"
-    },
-    "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\":\n{ \"type\": \"gce_instance\",\n  \"labels\": { \"instance_id\": \"12345678901234\",\n              \"zone\": \"us-central1-a\" }}\n",
-      "type": "object",
-      "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 Cloud SQL database is \"cloudsql_database\".",
-          "type": "string"
-        },
         "labels": {
           "additionalProperties": {
             "type": "string"
           },
-          "description": "Required. Values for all of the labels listed in the associated monitored resource descriptor. For example, Cloud SQL databases use the labels \"database_id\" and \"zone\".",
+          "description": "The set of label values that uniquely identify this metric. All labels listed in the MetricDescriptor must be assigned values.",
           "type": "object"
-        }
-      },
-      "id": "MonitoredResource"
-    },
-    "ListMetricDescriptorsResponse": {
-      "description": "The ListMetricDescriptors response.",
-      "type": "object",
-      "properties": {
-        "metricDescriptors": {
-          "description": "The metric descriptors that are available to the project and that match the value of filter, if present.",
-          "type": "array",
-          "items": {
-            "$ref": "MetricDescriptor"
-          }
-        },
-        "nextPageToken": {
-          "description": "If there are more results than have been returned, then this field is set to a non-empty value. To see the additional results, use that value as pageToken in the next call to this method.",
-          "type": "string"
-        }
-      },
-      "id": "ListMetricDescriptorsResponse"
-    },
-    "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.",
-      "type": "object",
-      "properties": {
-        "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"
-        },
-        "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"
-        },
-        "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. The maximum length of this value is 256 characters.",
-          "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"
-          }
-        }
-      },
-      "id": "MonitoredResourceDescriptor"
-    },
-    "TypedValue": {
-      "id": "TypedValue",
-      "description": "A single strongly-typed value.",
-      "type": "object",
-      "properties": {
-        "doubleValue": {
-          "description": "A 64-bit double-precision floating-point number. Its magnitude is approximately &plusmn;10\u003csup\u003e&plusmn;300\u003c/sup\u003e and it has 16 significant digits of precision.",
-          "format": "double",
-          "type": "number"
-        },
-        "int64Value": {
-          "description": "A 64-bit integer. Its range is approximately &plusmn;9.2x10\u003csup\u003e18\u003c/sup\u003e.",
-          "format": "int64",
-          "type": "string"
-        },
-        "distributionValue": {
-          "description": "A distribution value.",
-          "$ref": "Distribution"
-        },
-        "boolValue": {
-          "description": "A Boolean value: true or false.",
-          "type": "boolean"
-        },
-        "stringValue": {
-          "type": "string",
-          "description": "A variable-length string value."
-        }
-      }
-    },
-    "CollectdPayload": {
-      "description": "A collection of data points sent from a collectd-based plugin. See the collectd documentation for more information.",
-      "type": "object",
-      "properties": {
-        "typeInstance": {
-          "description": "The measurement type instance. Example: \"used\".",
-          "type": "string"
-        },
-        "type": {
-          "description": "The measurement type. Example: \"memory\".",
-          "type": "string"
-        },
-        "metadata": {
-          "additionalProperties": {
-            "$ref": "TypedValue"
-          },
-          "description": "The measurement metadata. Example: \"process_id\" -\u003e 12345",
-          "type": "object"
-        },
-        "plugin": {
-          "description": "The name of the plugin. Example: \"disk\".",
-          "type": "string"
-        },
-        "pluginInstance": {
-          "description": "The instance name of the plugin Example: \"hdcl\".",
-          "type": "string"
-        },
-        "endTime": {
-          "type": "string",
-          "description": "The end time of the interval.",
-          "format": "google-datetime"
-        },
-        "startTime": {
-          "description": "The start time of the interval.",
-          "format": "google-datetime",
-          "type": "string"
-        },
-        "values": {
-          "description": "The measured values during this time interval. Each value must have a different dataSourceName.",
-          "type": "array",
-          "items": {
-            "$ref": "CollectdValue"
-          }
-        }
-      },
-      "id": "CollectdPayload"
-    },
-    "Linear": {
-      "id": "Linear",
-      "description": "Specify a 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.Defines num_finite_buckets + 2 (= N) buckets with these boundaries for bucket i: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": {
-          "description": "Lower bound of the first bucket.",
-          "format": "double",
-          "type": "number"
-        },
-        "numFiniteBuckets": {
-          "description": "Must be greater than 0.",
-          "format": "int32",
-          "type": "integer"
-        },
-        "width": {
-          "description": "Must be greater than 0.",
-          "format": "double",
-          "type": "number"
-        }
-      }
-    },
-    "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:\nservice Foo {\n  rpc Bar(google.protobuf.Empty) returns (google.protobuf.Empty);\n}\nThe JSON representation for Empty is empty JSON object {}.",
-      "type": "object",
-      "properties": {}
-    },
-    "Option": {
-      "description": "A protocol buffer option, which can be attached to a message, field, enumeration, etc.",
-      "type": "object",
-      "properties": {
-        "value": {
-          "additionalProperties": {
-            "type": "any",
-            "description": "Properties of the object. Contains field @type with type URL."
-          },
-          "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"
-        },
-        "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\".",
+          "description": "An existing metric type, see google.api.MetricDescriptor. For example, custom.googleapis.com/invoice/paid/amount.",
           "type": "string"
         }
       },
-      "id": "Option"
-    },
-    "Explicit": {
-      "description": "A set of buckets with arbitrary widths.Defines size(bounds) + 1 (= N) buckets with these boundaries for bucket i:Upper bound (0 \u003c= i \u003c N-1): boundsi  Lower bound (1 \u003c= i \u003c N); boundsi - 1There must be at least one element in bounds. If bounds has only one element, there are no finite buckets, and that single element is the common boundary of the overflow and underflow buckets.",
-      "type": "object",
-      "properties": {
-        "bounds": {
-          "type": "array",
-          "items": {
-            "format": "double",
-            "type": "number"
-          },
-          "description": "The values must be monotonically increasing."
-        }
-      },
-      "id": "Explicit"
-    },
-    "TimeInterval": {
-      "description": "A time interval extending just after a start time through an end time. If the start time is the same as the end time, then the interval represents a single point in time.",
-      "type": "object",
-      "properties": {
-        "startTime": {
-          "description": "Optional. The beginning of the time interval. The default value for the start time is the end time. The start time must not be later than the end time.",
-          "format": "google-datetime",
-          "type": "string"
-        },
-        "endTime": {
-          "description": "Required. The end of the time interval.",
-          "format": "google-datetime",
-          "type": "string"
-        }
-      },
-      "id": "TimeInterval"
-    },
-    "Exponential": {
-      "type": "object",
-      "properties": {
-        "growthFactor": {
-          "description": "Must be greater than 1.",
-          "format": "double",
-          "type": "number"
-        },
-        "scale": {
-          "type": "number",
-          "description": "Must be greater than 0.",
-          "format": "double"
-        },
-        "numFiniteBuckets": {
-          "description": "Must be greater than 0.",
-          "format": "int32",
-          "type": "integer"
-        }
-      },
-      "id": "Exponential",
-      "description": "Specify a 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.Defines num_finite_buckets + 2 (= N) buckets with these boundaries for bucket i:Upper bound (0 \u003c= i \u003c N-1): scale * (growth_factor ^ i).  Lower bound (1 \u003c= i \u003c N): scale * (growth_factor ^ (i - 1))."
-    },
-    "Point": {
-      "description": "A single data point in a time series.",
-      "type": "object",
-      "properties": {
-        "interval": {
-          "description": "The time interval to which the data point applies. For GAUGE metrics, only the end time of the interval is used. For DELTA metrics, the start and end time should specify a non-zero interval, with subsequent points specifying contiguous and non-overlapping intervals. For CUMULATIVE metrics, the start and end time should specify a non-zero interval, with subsequent points specifying 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.",
-          "$ref": "TimeInterval"
-        },
-        "value": {
-          "$ref": "TypedValue",
-          "description": "The value of the data point."
-        }
-      },
-      "id": "Point"
+      "id": "Metric",
+      "description": "A specific metric, identified by specifying values for all of the labels of a MetricDescriptor.",
+      "type": "object"
     },
     "Field": {
-      "description": "A single field of a message type.",
-      "type": "object",
       "properties": {
-        "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"
-        },
-        "cardinality": {
-          "enum": [
-            "CARDINALITY_UNKNOWN",
-            "CARDINALITY_OPTIONAL",
-            "CARDINALITY_REQUIRED",
-            "CARDINALITY_REPEATED"
-          ],
-          "description": "The field cardinality.",
-          "type": "string",
-          "enumDescriptions": [
-            "For fields with unknown cardinality.",
-            "For optional fields.",
-            "For required fields. Proto2 syntax only.",
-            "For repeated fields."
-          ]
-        },
-        "packed": {
-          "description": "Whether to use alternative packed wire representation.",
-          "type": "boolean"
-        },
-        "defaultValue": {
-          "type": "string",
-          "description": "The string value of the default value of this field. Proto2 syntax only."
-        },
-        "name": {
-          "description": "The field name.",
-          "type": "string"
-        },
-        "typeUrl": {
-          "description": "The field type URL, without the scheme, for message or enumeration types. Example: \"type.googleapis.com/google.protobuf.Timestamp\".",
-          "type": "string"
-        },
-        "number": {
-          "description": "The field number.",
-          "format": "int32",
-          "type": "integer"
-        },
         "jsonName": {
           "description": "The field JSON name.",
           "type": "string"
@@ -1280,30 +76,73 @@
           "items": {
             "$ref": "Option"
           }
-        }
-      },
-      "id": "Field"
-    },
-    "Metric": {
-      "type": "object",
-      "properties": {
-        "labels": {
-          "additionalProperties": {
-            "type": "string"
-          },
-          "description": "The set of label values that uniquely identify this metric. All labels listed in the MetricDescriptor must be assigned values.",
-          "type": "object"
         },
-        "type": {
-          "description": "An existing metric type, see google.api.MetricDescriptor. For example, custom.googleapis.com/invoice/paid/amount.",
+        "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"
+        },
+        "packed": {
+          "description": "Whether to use alternative packed wire representation.",
+          "type": "boolean"
+        },
+        "cardinality": {
+          "enum": [
+            "CARDINALITY_UNKNOWN",
+            "CARDINALITY_OPTIONAL",
+            "CARDINALITY_REQUIRED",
+            "CARDINALITY_REPEATED"
+          ],
+          "description": "The field cardinality.",
+          "type": "string",
+          "enumDescriptions": [
+            "For fields with unknown cardinality.",
+            "For optional fields.",
+            "For required fields. Proto2 syntax only.",
+            "For repeated fields."
+          ]
+        },
+        "defaultValue": {
+          "description": "The string value of the default value of this field. Proto2 syntax only.",
           "type": "string"
+        },
+        "name": {
+          "description": "The field name.",
+          "type": "string"
+        },
+        "typeUrl": {
+          "description": "The field type URL, without the scheme, for message or enumeration types. Example: \"type.googleapis.com/google.protobuf.Timestamp\".",
+          "type": "string"
+        },
+        "number": {
+          "description": "The field number.",
+          "format": "int32",
+          "type": "integer"
         }
       },
-      "id": "Metric",
-      "description": "A specific metric, identified by specifying values for all of the labels of a MetricDescriptor."
+      "id": "Field",
+      "description": "A single field of a message type.",
+      "type": "object"
+    },
+    "ListTimeSeriesResponse": {
+      "properties": {
+        "nextPageToken": {
+          "description": "If there are more results than have been returned, then this field is set to a non-empty value. To see the additional results, use that value as pageToken in the next call to this method.",
+          "type": "string"
+        },
+        "timeSeries": {
+          "description": "One or more time series that match the filter included in the request.",
+          "type": "array",
+          "items": {
+            "$ref": "TimeSeries"
+          }
+        }
+      },
+      "id": "ListTimeSeriesResponse",
+      "description": "The ListTimeSeries response.",
+      "type": "object"
     },
     "LabelDescriptor": {
-      "id": "LabelDescriptor",
       "description": "A description of a label.",
       "type": "object",
       "properties": {
@@ -1316,49 +155,55 @@
           "type": "string"
         },
         "valueType": {
-          "enumDescriptions": [
-            "A variable-length string. This is the default.",
-            "Boolean; true or false.",
-            "A 64-bit signed integer."
-          ],
           "enum": [
             "STRING",
             "BOOL",
             "INT64"
           ],
           "description": "The type of data that can be assigned to the label.",
-          "type": "string"
+          "type": "string",
+          "enumDescriptions": [
+            "A variable-length string. This is the default.",
+            "Boolean; true or false.",
+            "A 64-bit signed integer."
+          ]
         }
-      }
-    },
-    "ListTimeSeriesResponse": {
-      "id": "ListTimeSeriesResponse",
-      "description": "The ListTimeSeries response.",
-      "type": "object",
-      "properties": {
-        "timeSeries": {
-          "description": "One or more time series that match the filter included in the request.",
-          "type": "array",
-          "items": {
-            "$ref": "TimeSeries"
-          }
-        },
-        "nextPageToken": {
-          "description": "If there are more results than have been returned, then this field is set to a non-empty value. To see the additional results, use that value as pageToken in the next call to this method.",
-          "type": "string"
-        }
-      }
+      },
+      "id": "LabelDescriptor"
     },
     "Type": {
       "description": "A protocol buffer message type.",
       "type": "object",
       "properties": {
+        "syntax": {
+          "enum": [
+            "SYNTAX_PROTO2",
+            "SYNTAX_PROTO3"
+          ],
+          "description": "The source syntax.",
+          "type": "string",
+          "enumDescriptions": [
+            "Syntax proto2.",
+            "Syntax proto3."
+          ]
+        },
+        "sourceContext": {
+          "$ref": "SourceContext",
+          "description": "The source context."
+        },
+        "options": {
+          "description": "The protocol buffer options.",
+          "type": "array",
+          "items": {
+            "$ref": "Option"
+          }
+        },
         "fields": {
+          "description": "The list of fields.",
           "type": "array",
           "items": {
             "$ref": "Field"
-          },
-          "description": "The list of fields."
+          }
         },
         "name": {
           "description": "The fully qualified message name.",
@@ -1370,46 +215,14 @@
           "items": {
             "type": "string"
           }
-        },
-        "syntax": {
-          "enumDescriptions": [
-            "Syntax proto2.",
-            "Syntax proto3."
-          ],
-          "enum": [
-            "SYNTAX_PROTO2",
-            "SYNTAX_PROTO3"
-          ],
-          "description": "The source syntax.",
-          "type": "string"
-        },
-        "sourceContext": {
-          "description": "The source context.",
-          "$ref": "SourceContext"
-        },
-        "options": {
-          "description": "The protocol buffer options.",
-          "type": "array",
-          "items": {
-            "$ref": "Option"
-          }
         }
       },
       "id": "Type"
     },
     "Group": {
-      "id": "Group",
       "description": "The description of a dynamic collection of monitored resources. Each group has a filter that is matched against monitored resources and their associated metadata. If a group's filter matches an available monitored resource, then that resource is a member of that group. Groups can contain any number of monitored resources, and each monitored resource can be a member of any number of groups.Groups can be nested in parent-child hierarchies. The parentName field identifies an optional parent for each group. If a group has a parent, then the only monitored resources available to be matched by the group's filter are the resources contained in the parent group. In other words, a group contains the monitored resources that match its filter and the filters of all the group's ancestors. A group without a parent can contain any monitored resource.For example, consider an infrastructure running a set of instances with two user-defined tags: \"environment\" and \"role\". A parent group has a filter, environment=\"production\". A child of that parent group has a filter, role=\"transcoder\". The parent group contains all instances in the production environment, regardless of their roles. The child group contains instances that have the transcoder role and are in the production environment.The monitored resources contained in a group can change at any moment, depending on what resources exist and what filters are associated with the group and its ancestors.",
       "type": "object",
       "properties": {
-        "isCluster": {
-          "type": "boolean",
-          "description": "If true, the members of this group are considered to be a cluster. The system can perform additional analysis on groups that are clusters."
-        },
-        "filter": {
-          "description": "The filter used to determine which monitored resources belong to this group.",
-          "type": "string"
-        },
         "name": {
           "description": "Output only. The name of this group. The format is \"projects/{project_id_or_number}/groups/{group_id}\". When creating a group, this field is ignored and a new name is created consisting of the project specified in the call to CreateGroup and a unique {group_id} that is generated automatically.",
           "type": "string"
@@ -1421,16 +234,23 @@
         "displayName": {
           "description": "A user-assigned name for this group, used only for display purposes.",
           "type": "string"
+        },
+        "isCluster": {
+          "description": "If true, the members of this group are considered to be a cluster. The system can perform additional analysis on groups that are clusters.",
+          "type": "boolean"
+        },
+        "filter": {
+          "description": "The filter used to determine which monitored resources belong to this group.",
+          "type": "string"
         }
-      }
+      },
+      "id": "Group"
     },
     "BucketOptions": {
-      "description": "A Distribution may optionally contain a histogram of the values in the population. The histogram is given in bucket_counts as counts of values that fall into one of a sequence of non-overlapping buckets. The sequence of buckets is described by bucket_options.A bucket specifies an inclusive lower bound and exclusive upper bound for the values that are counted for that bucket. The upper bound of a bucket is 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.BucketOptions describes bucket boundaries in one of three ways. Two describe the boundaries by giving parameters for a formula to generate boundaries and one gives the bucket boundaries explicitly.If bucket_options is not given, then no bucket_counts may be given.",
-      "type": "object",
       "properties": {
         "exponentialBuckets": {
-          "$ref": "Exponential",
-          "description": "The exponential buckets."
+          "description": "The exponential buckets.",
+          "$ref": "Exponential"
         },
         "linearBuckets": {
           "description": "The linear bucket.",
@@ -1441,16 +261,28 @@
           "description": "The explicit buckets."
         }
       },
-      "id": "BucketOptions"
+      "id": "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 \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.",
+      "type": "object"
     },
     "CollectdValue": {
-      "type": "object",
       "properties": {
+        "dataSourceName": {
+          "description": "The data source for the collectd value. For example there are two data sources for network measurements: \"rx\" and \"tx\".",
+          "type": "string"
+        },
         "value": {
-          "description": "The measurement value.",
-          "$ref": "TypedValue"
+          "$ref": "TypedValue",
+          "description": "The measurement value."
         },
         "dataSourceType": {
+          "enum": [
+            "UNSPECIFIED_DATA_SOURCE_TYPE",
+            "GAUGE",
+            "COUNTER",
+            "DERIVE",
+            "ABSOLUTE"
+          ],
           "description": "The type of measurement.",
           "type": "string",
           "enumDescriptions": [
@@ -1459,22 +291,12 @@
             "A cumulative value over time. This corresponds to google.api.MetricDescriptor.MetricKind.CUMULATIVE.",
             "A rate of change of the measurement.",
             "An amount of change since the last measurement interval. This corresponds to google.api.MetricDescriptor.MetricKind.DELTA."
-          ],
-          "enum": [
-            "UNSPECIFIED_DATA_SOURCE_TYPE",
-            "GAUGE",
-            "COUNTER",
-            "DERIVE",
-            "ABSOLUTE"
           ]
-        },
-        "dataSourceName": {
-          "description": "The data source for the collectd value. For example there are two data sources for network measurements: \"rx\" and \"tx\".",
-          "type": "string"
         }
       },
       "id": "CollectdValue",
-      "description": "A single data point from a collectd-based plugin."
+      "description": "A single data point from a collectd-based plugin.",
+      "type": "object"
     },
     "SourceContext": {
       "description": "SourceContext represents information about the source of a protobuf element, like the file in which it is defined.",
@@ -1507,8 +329,8 @@
           "type": "string"
         },
         "type": {
-          "type": "string",
-          "description": "The metric type, including its DNS name prefix. The type is not URL-encoded. All user-defined custom metric types have the DNS name custom.googleapis.com. Metric types should use a natural hierarchical grouping. For example:\n\"custom.googleapis.com/invoice/paid/amount\"\n\"appengine.googleapis.com/http/server/response_latencies\"\n"
+          "description": "The metric type, including its DNS name prefix. The type is not URL-encoded. All user-defined custom metric types have the DNS name custom.googleapis.com. Metric types should use a natural hierarchical grouping. For example:\n\"custom.googleapis.com/invoice/paid/amount\"\n\"appengine.googleapis.com/http/server/response_latencies\"\n",
+          "type": "string"
         },
         "valueType": {
           "enumDescriptions": [
@@ -1533,12 +355,6 @@
           "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",
@@ -1546,11 +362,17 @@
             "CUMULATIVE"
           ],
           "description": "Whether the metric records instantaneous values, changes to a value, etc. Some combinations of metric_kind and value_type might not be supported.",
-          "type": "string"
+          "type": "string",
+          "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."
+          ]
         },
         "description": {
-          "type": "string",
-          "description": "A detailed description of the metric, which can be used in documentation."
+          "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\".",
@@ -1580,41 +402,474 @@
       "description": "The ListGroups response.",
       "type": "object",
       "properties": {
+        "nextPageToken": {
+          "description": "If there are more results than have been returned, then this field is set to a non-empty value. To see the additional results, use that value as pageToken in the next call to this method.",
+          "type": "string"
+        },
         "group": {
           "description": "The groups that match the specified filters.",
           "type": "array",
           "items": {
             "$ref": "Group"
           }
-        },
-        "nextPageToken": {
-          "type": "string",
-          "description": "If there are more results than have been returned, then this field is set to a non-empty value. To see the additional results, use that value as pageToken in the next call to this method."
         }
       },
       "id": "ListGroupsResponse"
+    },
+    "CreateCollectdTimeSeriesRequest": {
+      "description": "The CreateCollectdTimeSeries request.",
+      "type": "object",
+      "properties": {
+        "resource": {
+          "$ref": "MonitoredResource",
+          "description": "The monitored resource associated with the time series."
+        },
+        "collectdPayloads": {
+          "description": "The collectd payloads representing the time series data. You must not include more than a single point for each time series, so no two payloads can have the same values for all of the fields plugin, plugin_instance, type, and type_instance.",
+          "type": "array",
+          "items": {
+            "$ref": "CollectdPayload"
+          }
+        },
+        "collectdVersion": {
+          "description": "The version of collectd that collected the data. Example: \"5.3.0-192.el6\".",
+          "type": "string"
+        }
+      },
+      "id": "CreateCollectdTimeSeriesRequest"
+    },
+    "ListGroupMembersResponse": {
+      "properties": {
+        "members": {
+          "description": "A set of monitored resources in the group.",
+          "type": "array",
+          "items": {
+            "$ref": "MonitoredResource"
+          }
+        },
+        "nextPageToken": {
+          "description": "If there are more results than have been returned, then this field is set to a non-empty value. To see the additional results, use that value as pageToken in the next call to this method.",
+          "type": "string"
+        },
+        "totalSize": {
+          "description": "The total number of elements matching this request.",
+          "format": "int32",
+          "type": "integer"
+        }
+      },
+      "id": "ListGroupMembersResponse",
+      "description": "The ListGroupMembers response.",
+      "type": "object"
+    },
+    "ListMonitoredResourceDescriptorsResponse": {
+      "description": "The ListMonitoredResourcDescriptors response.",
+      "type": "object",
+      "properties": {
+        "nextPageToken": {
+          "description": "If there are more results than have been returned, then this field is set to a non-empty value. To see the additional results, use that value as pageToken in the next call to this method.",
+          "type": "string"
+        },
+        "resourceDescriptors": {
+          "description": "The monitored resource descriptors that are available to this project and that match filter, if present.",
+          "type": "array",
+          "items": {
+            "$ref": "MonitoredResourceDescriptor"
+          }
+        }
+      },
+      "id": "ListMonitoredResourceDescriptorsResponse"
+    },
+    "TimeSeries": {
+      "properties": {
+        "valueType": {
+          "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."
+          ],
+          "enum": [
+            "VALUE_TYPE_UNSPECIFIED",
+            "BOOL",
+            "INT64",
+            "DOUBLE",
+            "STRING",
+            "DISTRIBUTION",
+            "MONEY"
+          ],
+          "description": "The value type of the time series. When listing time series, this value type might be different from the value type of the associated metric if this time series is an alignment or reduction of other time series.When creating a time series, this field is optional. If present, it must be the same as the type of the data in the points field.",
+          "type": "string"
+        },
+        "resource": {
+          "description": "The associated resource. A fully-specified monitored resource used to identify the time series.",
+          "$ref": "MonitoredResource"
+        },
+        "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"
+          ],
+          "description": "The metric kind of the time series. When listing time series, this metric kind might be different from the metric kind of the associated metric if this time series is an alignment or reduction of other time series.When creating a time series, this field is optional. If present, it must be the same as the metric kind of the associated metric. If the associated metric's descriptor must be auto-created, then this field specifies the metric kind of the new descriptor and must be either GAUGE (the default) or CUMULATIVE.",
+          "type": "string"
+        },
+        "metric": {
+          "description": "The associated metric. A fully-specified metric used to identify the time series.",
+          "$ref": "Metric"
+        },
+        "points": {
+          "description": "The data points of this time series. When listing time series, the order of the points is specified by the list method.When creating a time series, this field must contain exactly one point and the point's type must be the same as the value type of the associated metric. If the associated metric's descriptor must be auto-created, then the value type of the descriptor is determined by the point's type, which must be BOOL, INT64, DOUBLE, or DISTRIBUTION.",
+          "type": "array",
+          "items": {
+            "$ref": "Point"
+          }
+        }
+      },
+      "id": "TimeSeries",
+      "description": "A collection of data points that describes the time-varying values of a metric. A time series is identified by a combination of a fully-specified monitored resource and a fully-specified metric. This type is used for both listing and creating time series.",
+      "type": "object"
+    },
+    "CreateTimeSeriesRequest": {
+      "properties": {
+        "timeSeries": {
+          "description": "The new data to be added to a list of time series. Adds at most one data point to each of several time series. The new data point must be more recent than any other point in its time series. Each TimeSeries value must fully specify a unique time series by supplying all label values for the metric and the monitored resource.",
+          "type": "array",
+          "items": {
+            "$ref": "TimeSeries"
+          }
+        }
+      },
+      "id": "CreateTimeSeriesRequest",
+      "description": "The CreateTimeSeries request.",
+      "type": "object"
+    },
+    "Distribution": {
+      "description": "Distribution contains summary statistics for a population of values. It optionally contains a histogram representing the distribution of those values across a set of buckets.The summary statistics are the count, mean, sum of the squared deviation from the mean, the minimum, and the maximum of the set of population of values. The histogram is based on a sequence of buckets and gives a count of values that fall into each bucket. The boundaries of the buckets are given either explicitly or by formulas for buckets of fixed or exponentially increasing widths.Although it is not forbidden, it is generally a bad idea to include non-finite values (infinities or NaNs) in the population of values, as this will render the mean and sum_of_squared_deviation fields meaningless.",
+      "type": "object",
+      "properties": {
+        "range": {
+          "description": "If specified, contains the range of the population values. The field must not be present if the count is zero. This field is presently ignored by the Stackdriver Monitoring API v3.",
+          "$ref": "Range"
+        },
+        "count": {
+          "description": "The number of values in the population. Must be non-negative. This value must equal the sum of the values in bucket_counts if a histogram is provided.",
+          "format": "int64",
+          "type": "string"
+        },
+        "mean": {
+          "description": "The arithmetic mean of the values in the population. If count is zero then this field must be zero.",
+          "format": "double",
+          "type": "number"
+        },
+        "bucketCounts": {
+          "description": "Required in the Stackdriver Monitoring API v3. The values for each bucket specified in bucket_options. The sum of the values in bucketCounts must equal the value in the count field of the Distribution object. The order of the bucket counts follows the numbering schemes described for the three bucket types. The underflow bucket has number 0; the finite buckets, if any, have numbers 1 through N-2; and the overflow bucket has number N-1. The size of bucket_counts must not be greater than N. If the size is less than N, then the remaining buckets are assigned values of zero.",
+          "type": "array",
+          "items": {
+            "format": "int64",
+            "type": "string"
+          }
+        },
+        "bucketOptions": {
+          "$ref": "BucketOptions",
+          "description": "Required in the Stackdriver Monitoring API v3. Defines the histogram bucket boundaries."
+        },
+        "sumOfSquaredDeviation": {
+          "description": "The sum of squared deviations from the mean of the values in the population. For values x_i this is:\nSum[i=1..n]((x_i - mean)^2)\nKnuth, \"The Art of Computer Programming\", Vol. 2, page 323, 3rd edition describes Welford's method for accumulating this sum in one pass.If count is zero then this field must be zero.",
+          "format": "double",
+          "type": "number"
+        }
+      },
+      "id": "Distribution"
+    },
+    "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\":\n{ \"type\": \"gce_instance\",\n  \"labels\": { \"instance_id\": \"12345678901234\",\n              \"zone\": \"us-central1-a\" }}\n",
+      "type": "object",
+      "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 Cloud SQL database is \"cloudsql_database\".",
+          "type": "string"
+        },
+        "labels": {
+          "additionalProperties": {
+            "type": "string"
+          },
+          "description": "Required. Values for all of the labels listed in the associated monitored resource descriptor. For example, Cloud SQL databases use the labels \"database_id\" and \"zone\".",
+          "type": "object"
+        }
+      },
+      "id": "MonitoredResource"
+    },
+    "ListMetricDescriptorsResponse": {
+      "properties": {
+        "metricDescriptors": {
+          "description": "The metric descriptors that are available to the project and that match the value of filter, if present.",
+          "type": "array",
+          "items": {
+            "$ref": "MetricDescriptor"
+          }
+        },
+        "nextPageToken": {
+          "description": "If there are more results than have been returned, then this field is set to a non-empty value. To see the additional results, use that value as pageToken in the next call to this method.",
+          "type": "string"
+        }
+      },
+      "id": "ListMetricDescriptorsResponse",
+      "description": "The ListMetricDescriptors response.",
+      "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.",
+      "type": "object",
+      "properties": {
+        "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"
+        },
+        "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"
+        },
+        "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. The maximum length of this value is 256 characters.",
+          "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"
+          }
+        }
+      },
+      "id": "MonitoredResourceDescriptor"
+    },
+    "TypedValue": {
+      "properties": {
+        "doubleValue": {
+          "description": "A 64-bit double-precision floating-point number. Its magnitude is approximately &plusmn;10\u003csup\u003e&plusmn;300\u003c/sup\u003e and it has 16 significant digits of precision.",
+          "format": "double",
+          "type": "number"
+        },
+        "int64Value": {
+          "description": "A 64-bit integer. Its range is approximately &plusmn;9.2x10\u003csup\u003e18\u003c/sup\u003e.",
+          "format": "int64",
+          "type": "string"
+        },
+        "distributionValue": {
+          "description": "A distribution value.",
+          "$ref": "Distribution"
+        },
+        "boolValue": {
+          "description": "A Boolean value: true or false.",
+          "type": "boolean"
+        },
+        "stringValue": {
+          "description": "A variable-length string value.",
+          "type": "string"
+        }
+      },
+      "id": "TypedValue",
+      "description": "A single strongly-typed value.",
+      "type": "object"
+    },
+    "CollectdPayload": {
+      "description": "A collection of data points sent from a collectd-based plugin. See the collectd documentation for more information.",
+      "type": "object",
+      "properties": {
+        "typeInstance": {
+          "description": "The measurement type instance. Example: \"used\".",
+          "type": "string"
+        },
+        "metadata": {
+          "additionalProperties": {
+            "$ref": "TypedValue"
+          },
+          "description": "The measurement metadata. Example: \"process_id\" -\u003e 12345",
+          "type": "object"
+        },
+        "type": {
+          "description": "The measurement type. Example: \"memory\".",
+          "type": "string"
+        },
+        "plugin": {
+          "description": "The name of the plugin. Example: \"disk\".",
+          "type": "string"
+        },
+        "pluginInstance": {
+          "description": "The instance name of the plugin Example: \"hdcl\".",
+          "type": "string"
+        },
+        "endTime": {
+          "description": "The end time of the interval.",
+          "format": "google-datetime",
+          "type": "string"
+        },
+        "startTime": {
+          "description": "The start time of the interval.",
+          "format": "google-datetime",
+          "type": "string"
+        },
+        "values": {
+          "description": "The measured values during this time interval. Each value must have a different dataSourceName.",
+          "type": "array",
+          "items": {
+            "$ref": "CollectdValue"
+          }
+        }
+      },
+      "id": "CollectdPayload"
+    },
+    "Linear": {
+      "properties": {
+        "width": {
+          "description": "Must be greater than 0.",
+          "format": "double",
+          "type": "number"
+        },
+        "offset": {
+          "description": "Lower bound of the first bucket.",
+          "format": "double",
+          "type": "number"
+        },
+        "numFiniteBuckets": {
+          "description": "Must be greater than 0.",
+          "format": "int32",
+          "type": "integer"
+        }
+      },
+      "id": "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"
+    },
+    "Option": {
+      "properties": {
+        "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"
+        },
+        "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"
+        }
+      },
+      "id": "Option",
+      "description": "A protocol buffer option, which can be attached to a message, field, enumeration, etc.",
+      "type": "object"
+    },
+    "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:\nservice Foo {\n  rpc Bar(google.protobuf.Empty) returns (google.protobuf.Empty);\n}\nThe JSON representation for Empty is empty JSON object {}.",
+      "type": "object"
+    },
+    "TimeInterval": {
+      "properties": {
+        "endTime": {
+          "description": "Required. The end of the time interval.",
+          "format": "google-datetime",
+          "type": "string"
+        },
+        "startTime": {
+          "description": "Optional. The beginning of the time interval. The default value for the start time is the end time. The start time must not be later than the end time.",
+          "format": "google-datetime",
+          "type": "string"
+        }
+      },
+      "id": "TimeInterval",
+      "description": "A time interval extending just after a start time through an end time. If the start time is the same as the end time, then the interval represents a single point in time.",
+      "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": {
+          "description": "The values must be monotonically increasing.",
+          "type": "array",
+          "items": {
+            "format": "double",
+            "type": "number"
+          }
+        }
+      },
+      "id": "Explicit"
+    },
+    "Exponential": {
+      "properties": {
+        "growthFactor": {
+          "description": "Must be greater than 1.",
+          "format": "double",
+          "type": "number"
+        },
+        "scale": {
+          "description": "Must be greater than 0.",
+          "format": "double",
+          "type": "number"
+        },
+        "numFiniteBuckets": {
+          "description": "Must be greater than 0.",
+          "format": "int32",
+          "type": "integer"
+        }
+      },
+      "id": "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 \u003c= i \u003c N-1): scale * (growth_factor ^ i).  Lower bound (1 \u003c= i \u003c N): scale * (growth_factor ^ (i - 1)).",
+      "type": "object"
+    },
+    "Point": {
+      "properties": {
+        "interval": {
+          "description": "The time interval to which the data point applies. For GAUGE metrics, only the end time of the interval is used. For DELTA metrics, the start and end time should specify a non-zero interval, with subsequent points specifying contiguous and non-overlapping intervals. For CUMULATIVE metrics, the start and end time should specify a non-zero interval, with subsequent points specifying 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.",
+          "$ref": "TimeInterval"
+        },
+        "value": {
+          "description": "The value of the data point.",
+          "$ref": "TypedValue"
+        }
+      },
+      "id": "Point",
+      "description": "A single data point in a time series.",
+      "type": "object"
     }
   },
-  "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"
   },
+  "protocol": "rest",
   "canonicalName": "Monitoring",
   "auth": {
     "oauth2": {
       "scopes": {
-        "https://www.googleapis.com/auth/monitoring": {
-          "description": "View and write monitoring data for all of your Google and third-party Cloud and API projects"
-        },
-        "https://www.googleapis.com/auth/monitoring.write": {
-          "description": "Publish metric data to your Google Cloud projects"
-        },
         "https://www.googleapis.com/auth/cloud-platform": {
           "description": "View and manage your data across Google Cloud Platform services"
         },
         "https://www.googleapis.com/auth/monitoring.read": {
           "description": "View monitoring data for all of your Google Cloud and third-party projects"
+        },
+        "https://www.googleapis.com/auth/monitoring": {
+          "description": "View and write monitoring data for all of your Google and third-party Cloud and API projects"
+        },
+        "https://www.googleapis.com/auth/monitoring.write": {
+          "description": "Publish metric data to your Google Cloud projects"
         }
       }
     }
@@ -1624,5 +879,750 @@
   "name": "monitoring",
   "batchPath": "batch",
   "title": "Stackdriver Monitoring API",
-  "ownerName": "Google"
+  "ownerName": "Google",
+  "resources": {
+    "projects": {
+      "resources": {
+        "metricDescriptors": {
+          "methods": {
+            "delete": {
+              "path": "v3/{+name}",
+              "id": "monitoring.projects.metricDescriptors.delete",
+              "description": "Deletes a metric descriptor. Only user-created custom metrics can be deleted.",
+              "response": {
+                "$ref": "Empty"
+              },
+              "parameterOrder": [
+                "name"
+              ],
+              "httpMethod": "DELETE",
+              "scopes": [
+                "https://www.googleapis.com/auth/cloud-platform",
+                "https://www.googleapis.com/auth/monitoring"
+              ],
+              "parameters": {
+                "name": {
+                  "description": "The metric descriptor on which to execute the request. The format is \"projects/{project_id_or_number}/metricDescriptors/{metric_id}\". An example of {metric_id} is: \"custom.googleapis.com/my_test_metric\".",
+                  "required": true,
+                  "type": "string",
+                  "pattern": "^projects/[^/]+/metricDescriptors/.+$",
+                  "location": "path"
+                }
+              },
+              "flatPath": "v3/projects/{projectsId}/metricDescriptors/{metricDescriptorsId}"
+            },
+            "list": {
+              "description": "Lists metric descriptors that match a filter. This method does not require a Stackdriver account.",
+              "httpMethod": "GET",
+              "response": {
+                "$ref": "ListMetricDescriptorsResponse"
+              },
+              "parameterOrder": [
+                "name"
+              ],
+              "parameters": {
+                "filter": {
+                  "description": "If this field is empty, all custom and system-defined metric descriptors are returned. Otherwise, the filter specifies which metric descriptors are to be returned. For example, the following filter matches all custom metrics:\nmetric.type = starts_with(\"custom.googleapis.com/\")\n",
+                  "type": "string",
+                  "location": "query"
+                },
+                "name": {
+                  "pattern": "^projects/[^/]+$",
+                  "location": "path",
+                  "description": "The project on which to execute the request. The format is \"projects/{project_id_or_number}\".",
+                  "required": true,
+                  "type": "string"
+                },
+                "pageToken": {
+                  "description": "If this field is not empty then it must contain the nextPageToken value returned by a previous call to this method. Using this field causes the method to return additional results from the previous method call.",
+                  "type": "string",
+                  "location": "query"
+                },
+                "pageSize": {
+                  "location": "query",
+                  "description": "A positive number that is the maximum number of results to return.",
+                  "format": "int32",
+                  "type": "integer"
+                }
+              },
+              "scopes": [
+                "https://www.googleapis.com/auth/cloud-platform",
+                "https://www.googleapis.com/auth/monitoring",
+                "https://www.googleapis.com/auth/monitoring.read",
+                "https://www.googleapis.com/auth/monitoring.write"
+              ],
+              "flatPath": "v3/projects/{projectsId}/metricDescriptors",
+              "id": "monitoring.projects.metricDescriptors.list",
+              "path": "v3/{+name}/metricDescriptors"
+            },
+            "get": {
+              "httpMethod": "GET",
+              "response": {
+                "$ref": "MetricDescriptor"
+              },
+              "parameterOrder": [
+                "name"
+              ],
+              "scopes": [
+                "https://www.googleapis.com/auth/cloud-platform",
+                "https://www.googleapis.com/auth/monitoring",
+                "https://www.googleapis.com/auth/monitoring.read",
+                "https://www.googleapis.com/auth/monitoring.write"
+              ],
+              "parameters": {
+                "name": {
+                  "pattern": "^projects/[^/]+/metricDescriptors/.+$",
+                  "location": "path",
+                  "description": "The metric descriptor on which to execute the request. The format is \"projects/{project_id_or_number}/metricDescriptors/{metric_id}\". An example value of {metric_id} is \"compute.googleapis.com/instance/disk/read_bytes_count\".",
+                  "required": true,
+                  "type": "string"
+                }
+              },
+              "flatPath": "v3/projects/{projectsId}/metricDescriptors/{metricDescriptorsId}",
+              "id": "monitoring.projects.metricDescriptors.get",
+              "path": "v3/{+name}",
+              "description": "Gets a single metric descriptor. This method does not require a Stackdriver account."
+            },
+            "create": {
+              "description": "Creates a new metric descriptor. User-created metric descriptors define custom metrics.",
+              "request": {
+                "$ref": "MetricDescriptor"
+              },
+              "httpMethod": "POST",
+              "parameterOrder": [
+                "name"
+              ],
+              "response": {
+                "$ref": "MetricDescriptor"
+              },
+              "scopes": [
+                "https://www.googleapis.com/auth/cloud-platform",
+                "https://www.googleapis.com/auth/monitoring",
+                "https://www.googleapis.com/auth/monitoring.write"
+              ],
+              "parameters": {
+                "name": {
+                  "pattern": "^projects/[^/]+$",
+                  "location": "path",
+                  "description": "The project on which to execute the request. The format is \"projects/{project_id_or_number}\".",
+                  "required": true,
+                  "type": "string"
+                }
+              },
+              "flatPath": "v3/projects/{projectsId}/metricDescriptors",
+              "id": "monitoring.projects.metricDescriptors.create",
+              "path": "v3/{+name}/metricDescriptors"
+            }
+          }
+        },
+        "monitoredResourceDescriptors": {
+          "methods": {
+            "list": {
+              "response": {
+                "$ref": "ListMonitoredResourceDescriptorsResponse"
+              },
+              "parameterOrder": [
+                "name"
+              ],
+              "httpMethod": "GET",
+              "parameters": {
+                "name": {
+                  "description": "The project on which to execute the request. The format is \"projects/{project_id_or_number}\".",
+                  "required": true,
+                  "type": "string",
+                  "pattern": "^projects/[^/]+$",
+                  "location": "path"
+                },
+                "pageToken": {
+                  "location": "query",
+                  "description": "If this field is not empty then it must contain the nextPageToken value returned by a previous call to this method. Using this field causes the method to return additional results from the previous method call.",
+                  "type": "string"
+                },
+                "pageSize": {
+                  "location": "query",
+                  "description": "A positive number that is the maximum number of results to return.",
+                  "format": "int32",
+                  "type": "integer"
+                },
+                "filter": {
+                  "description": "An optional filter describing the descriptors to be returned. The filter can reference the descriptor's type and labels. For example, the following filter returns only Google Compute Engine descriptors that have an id label:\nresource.type = starts_with(\"gce_\") AND resource.label:id\n",
+                  "type": "string",
+                  "location": "query"
+                }
+              },
+              "scopes": [
+                "https://www.googleapis.com/auth/cloud-platform",
+                "https://www.googleapis.com/auth/monitoring",
+                "https://www.googleapis.com/auth/monitoring.read",
+                "https://www.googleapis.com/auth/monitoring.write"
+              ],
+              "flatPath": "v3/projects/{projectsId}/monitoredResourceDescriptors",
+              "path": "v3/{+name}/monitoredResourceDescriptors",
+              "id": "monitoring.projects.monitoredResourceDescriptors.list",
+              "description": "Lists monitored resource descriptors that match a filter. This method does not require a Stackdriver account."
+            },
+            "get": {
+              "description": "Gets a single monitored resource descriptor. This method does not require a Stackdriver account.",
+              "response": {
+                "$ref": "MonitoredResourceDescriptor"
+              },
+              "parameterOrder": [
+                "name"
+              ],
+              "httpMethod": "GET",
+              "scopes": [
+                "https://www.googleapis.com/auth/cloud-platform",
+                "https://www.googleapis.com/auth/monitoring",
+                "https://www.googleapis.com/auth/monitoring.read",
+                "https://www.googleapis.com/auth/monitoring.write"
+              ],
+              "parameters": {
+                "name": {
+                  "description": "The monitored resource descriptor to get. The format is \"projects/{project_id_or_number}/monitoredResourceDescriptors/{resource_type}\". The {resource_type} is a predefined type, such as cloudsql_database.",
+                  "required": true,
+                  "type": "string",
+                  "pattern": "^projects/[^/]+/monitoredResourceDescriptors/[^/]+$",
+                  "location": "path"
+                }
+              },
+              "flatPath": "v3/projects/{projectsId}/monitoredResourceDescriptors/{monitoredResourceDescriptorsId}",
+              "path": "v3/{+name}",
+              "id": "monitoring.projects.monitoredResourceDescriptors.get"
+            }
+          }
+        },
+        "groups": {
+          "resources": {
+            "members": {
+              "methods": {
+                "list": {
+                  "httpMethod": "GET",
+                  "parameterOrder": [
+                    "name"
+                  ],
+                  "response": {
+                    "$ref": "ListGroupMembersResponse"
+                  },
+                  "parameters": {
+                    "interval.endTime": {
+                      "description": "Required. The end of the time interval.",
+                      "format": "google-datetime",
+                      "type": "string",
+                      "location": "query"
+                    },
+                    "filter": {
+                      "description": "An optional list filter describing the members to be returned. The filter may reference the type, labels, and metadata of monitored resources that comprise the group. For example, to return only resources representing Compute Engine VM instances, use this filter:\nresource.type = \"gce_instance\"\n",
+                      "type": "string",
+                      "location": "query"
+                    },
+                    "pageToken": {
+                      "location": "query",
+                      "description": "If this field is not empty then it must contain the nextPageToken value returned by a previous call to this method. Using this field causes the method to return additional results from the previous method call.",
+                      "type": "string"
+                    },
+                    "pageSize": {
+                      "description": "A positive number that is the maximum number of results to return.",
+                      "format": "int32",
+                      "type": "integer",
+                      "location": "query"
+                    },
+                    "interval.startTime": {
+                      "description": "Optional. The beginning of the time interval. The default value for the start time is the end time. The start time must not be later than the end time.",
+                      "format": "google-datetime",
+                      "type": "string",
+                      "location": "query"
+                    },
+                    "name": {
+                      "pattern": "^projects/[^/]+/groups/[^/]+$",
+                      "location": "path",
+                      "description": "The group whose members are listed. The format is \"projects/{project_id_or_number}/groups/{group_id}\".",
+                      "required": true,
+                      "type": "string"
+                    }
+                  },
+                  "scopes": [
+                    "https://www.googleapis.com/auth/cloud-platform",
+                    "https://www.googleapis.com/auth/monitoring",
+                    "https://www.googleapis.com/auth/monitoring.read"
+                  ],
+                  "flatPath": "v3/projects/{projectsId}/groups/{groupsId}/members",
+                  "id": "monitoring.projects.groups.members.list",
+                  "path": "v3/{+name}/members",
+                  "description": "Lists the monitored resources that are members of a group."
+                }
+              }
+            }
+          },
+          "methods": {
+            "update": {
+              "id": "monitoring.projects.groups.update",
+              "path": "v3/{+name}",
+              "request": {
+                "$ref": "Group"
+              },
+              "description": "Updates an existing group. You can change any group attributes except name.",
+              "httpMethod": "PUT",
+              "parameterOrder": [
+                "name"
+              ],
+              "response": {
+                "$ref": "Group"
+              },
+              "parameters": {
+                "name": {
+                  "pattern": "^projects/[^/]+/groups/[^/]+$",
+                  "location": "path",
+                  "description": "Output only. The name of this group. The format is \"projects/{project_id_or_number}/groups/{group_id}\". When creating a group, this field is ignored and a new name is created consisting of the project specified in the call to CreateGroup and a unique {group_id} that is generated automatically.",
+                  "required": true,
+                  "type": "string"
+                },
+                "validateOnly": {
+                  "description": "If true, validate this request but do not update the existing group.",
+                  "type": "boolean",
+                  "location": "query"
+                }
+              },
+              "scopes": [
+                "https://www.googleapis.com/auth/cloud-platform",
+                "https://www.googleapis.com/auth/monitoring"
+              ],
+              "flatPath": "v3/projects/{projectsId}/groups/{groupsId}"
+            },
+            "create": {
+              "httpMethod": "POST",
+              "parameterOrder": [
+                "name"
+              ],
+              "response": {
+                "$ref": "Group"
+              },
+              "scopes": [
+                "https://www.googleapis.com/auth/cloud-platform",
+                "https://www.googleapis.com/auth/monitoring"
+              ],
+              "parameters": {
+                "name": {
+                  "pattern": "^projects/[^/]+$",
+                  "location": "path",
+                  "description": "The project in which to create the group. The format is \"projects/{project_id_or_number}\".",
+                  "required": true,
+                  "type": "string"
+                },
+                "validateOnly": {
+                  "description": "If true, validate this request but do not create the group.",
+                  "type": "boolean",
+                  "location": "query"
+                }
+              },
+              "flatPath": "v3/projects/{projectsId}/groups",
+              "id": "monitoring.projects.groups.create",
+              "path": "v3/{+name}/groups",
+              "description": "Creates a new group.",
+              "request": {
+                "$ref": "Group"
+              }
+            },
+            "delete": {
+              "response": {
+                "$ref": "Empty"
+              },
+              "parameterOrder": [
+                "name"
+              ],
+              "httpMethod": "DELETE",
+              "scopes": [
+                "https://www.googleapis.com/auth/cloud-platform",
+                "https://www.googleapis.com/auth/monitoring"
+              ],
+              "parameters": {
+                "name": {
+                  "description": "The group to delete. The format is \"projects/{project_id_or_number}/groups/{group_id}\".",
+                  "required": true,
+                  "type": "string",
+                  "pattern": "^projects/[^/]+/groups/[^/]+$",
+                  "location": "path"
+                }
+              },
+              "flatPath": "v3/projects/{projectsId}/groups/{groupsId}",
+              "path": "v3/{+name}",
+              "id": "monitoring.projects.groups.delete",
+              "description": "Deletes an existing group."
+            },
+            "list": {
+              "response": {
+                "$ref": "ListGroupsResponse"
+              },
+              "parameterOrder": [
+                "name"
+              ],
+              "httpMethod": "GET",
+              "scopes": [
+                "https://www.googleapis.com/auth/cloud-platform",
+                "https://www.googleapis.com/auth/monitoring",
+                "https://www.googleapis.com/auth/monitoring.read"
+              ],
+              "parameters": {
+                "name": {
+                  "pattern": "^projects/[^/]+$",
+                  "location": "path",
+                  "description": "The project whose groups are to be listed. The format is \"projects/{project_id_or_number}\".",
+                  "required": true,
+                  "type": "string"
+                },
+                "childrenOfGroup": {
+                  "location": "query",
+                  "description": "A group name: \"projects/{project_id_or_number}/groups/{group_id}\". Returns groups whose parentName field contains the group name. If no groups have this parent, the results are empty.",
+                  "type": "string"
+                },
+                "descendantsOfGroup": {
+                  "location": "query",
+                  "description": "A group name: \"projects/{project_id_or_number}/groups/{group_id}\". Returns the descendants of the specified group. This is a superset of the results returned by the childrenOfGroup filter, and includes children-of-children, and so forth.",
+                  "type": "string"
+                },
+                "pageToken": {
+                  "location": "query",
+                  "description": "If this field is not empty then it must contain the nextPageToken value returned by a previous call to this method. Using this field causes the method to return additional results from the previous method call.",
+                  "type": "string"
+                },
+                "pageSize": {
+                  "location": "query",
+                  "description": "A positive number that is the maximum number of results to return.",
+                  "format": "int32",
+                  "type": "integer"
+                },
+                "ancestorsOfGroup": {
+                  "location": "query",
+                  "description": "A group name: \"projects/{project_id_or_number}/groups/{group_id}\". Returns groups that are ancestors of the specified group. The groups are returned in order, starting with the immediate parent and ending with the most distant ancestor. If the specified group has no immediate parent, the results are empty.",
+                  "type": "string"
+                }
+              },
+              "flatPath": "v3/projects/{projectsId}/groups",
+              "path": "v3/{+name}/groups",
+              "id": "monitoring.projects.groups.list",
+              "description": "Lists the existing groups."
+            },
+            "get": {
+              "httpMethod": "GET",
+              "response": {
+                "$ref": "Group"
+              },
+              "parameterOrder": [
+                "name"
+              ],
+              "parameters": {
+                "name": {
+                  "pattern": "^projects/[^/]+/groups/[^/]+$",
+                  "location": "path",
+                  "description": "The group to retrieve. The format is \"projects/{project_id_or_number}/groups/{group_id}\".",
+                  "required": true,
+                  "type": "string"
+                }
+              },
+              "scopes": [
+                "https://www.googleapis.com/auth/cloud-platform",
+                "https://www.googleapis.com/auth/monitoring",
+                "https://www.googleapis.com/auth/monitoring.read"
+              ],
+              "flatPath": "v3/projects/{projectsId}/groups/{groupsId}",
+              "id": "monitoring.projects.groups.get",
+              "path": "v3/{+name}",
+              "description": "Gets a single group."
+            }
+          }
+        },
+        "collectdTimeSeries": {
+          "methods": {
+            "create": {
+              "response": {
+                "$ref": "Empty"
+              },
+              "parameterOrder": [
+                "name"
+              ],
+              "httpMethod": "POST",
+              "scopes": [
+                "https://www.googleapis.com/auth/cloud-platform",
+                "https://www.googleapis.com/auth/monitoring",
+                "https://www.googleapis.com/auth/monitoring.write"
+              ],
+              "parameters": {
+                "name": {
+                  "description": "The project in which to create the time series. The format is \"projects/PROJECT_ID_OR_NUMBER\".",
+                  "required": true,
+                  "type": "string",
+                  "pattern": "^projects/[^/]+$",
+                  "location": "path"
+                }
+              },
+              "flatPath": "v3/projects/{projectsId}/collectdTimeSeries",
+              "path": "v3/{+name}/collectdTimeSeries",
+              "id": "monitoring.projects.collectdTimeSeries.create",
+              "description": "Stackdriver Monitoring Agent only: Creates a new time series.\u003caside class=\"caution\"\u003eThis method is only for use by the Stackdriver Monitoring Agent. Use projects.timeSeries.create instead.\u003c/aside\u003e",
+              "request": {
+                "$ref": "CreateCollectdTimeSeriesRequest"
+              }
+            }
+          }
+        },
+        "timeSeries": {
+          "methods": {
+            "list": {
+              "parameterOrder": [
+                "name"
+              ],
+              "httpMethod": "GET",
+              "response": {
+                "$ref": "ListTimeSeriesResponse"
+              },
+              "scopes": [
+                "https://www.googleapis.com/auth/cloud-platform",
+                "https://www.googleapis.com/auth/monitoring",
+                "https://www.googleapis.com/auth/monitoring.read"
+              ],
+              "parameters": {
+                "orderBy": {
+                  "description": "Specifies the order in which the points of the time series should be returned. By default, results are not ordered. Currently, this field must be left blank.",
+                  "type": "string",
+                  "location": "query"
+                },
+                "aggregation.crossSeriesReducer": {
+                  "enum": [
+                    "REDUCE_NONE",
+                    "REDUCE_MEAN",
+                    "REDUCE_MIN",
+                    "REDUCE_MAX",
+                    "REDUCE_SUM",
+                    "REDUCE_STDDEV",
+                    "REDUCE_COUNT",
+                    "REDUCE_COUNT_TRUE",
+                    "REDUCE_FRACTION_TRUE",
+                    "REDUCE_PERCENTILE_99",
+                    "REDUCE_PERCENTILE_95",
+                    "REDUCE_PERCENTILE_50",
+                    "REDUCE_PERCENTILE_05"
+                  ],
+                  "description": "The approach to be used to combine time series. Not all reducer functions may be applied to all time series, depending on the metric type and the value type of the original time series. Reduction may change the metric type of value type of the time series.Time series data must be aligned in order to perform cross-time series reduction. If crossSeriesReducer is specified, then perSeriesAligner must be specified and not equal ALIGN_NONE and alignmentPeriod must be specified; otherwise, an error is returned.",
+                  "type": "string",
+                  "location": "query"
+                },
+                "filter": {
+                  "description": "A monitoring filter that specifies which time series should be returned. The filter must specify a single metric type, and can additionally specify metric labels and other information. For example:\nmetric.type = \"compute.googleapis.com/instance/cpu/usage_time\" AND\n    metric.label.instance_name = \"my-instance-name\"\n",
+                  "type": "string",
+                  "location": "query"
+                },
+                "pageToken": {
+                  "description": "If this field is not empty then it must contain the nextPageToken value returned by a previous call to this method. Using this field causes the method to return additional results from the previous method call.",
+                  "type": "string",
+                  "location": "query"
+                },
+                "aggregation.perSeriesAligner": {
+                  "location": "query",
+                  "enum": [
+                    "ALIGN_NONE",
+                    "ALIGN_DELTA",
+                    "ALIGN_RATE",
+                    "ALIGN_INTERPOLATE",
+                    "ALIGN_NEXT_OLDER",
+                    "ALIGN_MIN",
+                    "ALIGN_MAX",
+                    "ALIGN_MEAN",
+                    "ALIGN_COUNT",
+                    "ALIGN_SUM",
+                    "ALIGN_STDDEV",
+                    "ALIGN_COUNT_TRUE",
+                    "ALIGN_FRACTION_TRUE",
+                    "ALIGN_PERCENTILE_99",
+                    "ALIGN_PERCENTILE_95",
+                    "ALIGN_PERCENTILE_50",
+                    "ALIGN_PERCENTILE_05"
+                  ],
+                  "description": "The approach to be used to align individual time series. Not all alignment functions may be applied to all time series, depending on the metric type and value type of the original time series. Alignment may change the metric type or the value type of the time series.Time series data must be aligned in order to perform cross-time series reduction. If crossSeriesReducer is specified, then perSeriesAligner must be specified and not equal ALIGN_NONE and alignmentPeriod must be specified; otherwise, an error is returned.",
+                  "type": "string"
+                },
+                "interval.startTime": {
+                  "description": "Optional. The beginning of the time interval. The default value for the start time is the end time. The start time must not be later than the end time.",
+                  "format": "google-datetime",
+                  "type": "string",
+                  "location": "query"
+                },
+                "view": {
+                  "location": "query",
+                  "enum": [
+                    "FULL",
+                    "HEADERS"
+                  ],
+                  "description": "Specifies which information is returned about the time series.",
+                  "type": "string"
+                },
+                "aggregation.groupByFields": {
+                  "description": "The set of fields to preserve when crossSeriesReducer is specified. The groupByFields determine how the time series are partitioned into subsets prior to applying the aggregation function. Each subset contains time series that have the same value for each of the grouping fields. Each individual time series is a member of exactly one subset. The crossSeriesReducer is applied to each subset of time series. It is not possible to reduce across different resource types, so this field implicitly contains resource.type. Fields not specified in groupByFields are aggregated away. If groupByFields is not specified and all the time series have the same resource type, then the time series are aggregated into a single output time series. If crossSeriesReducer is not defined, this field is ignored.",
+                  "type": "string",
+                  "repeated": true,
+                  "location": "query"
+                },
+                "name": {
+                  "description": "The project on which to execute the request. The format is \"projects/{project_id_or_number}\".",
+                  "required": true,
+                  "type": "string",
+                  "pattern": "^projects/[^/]+$",
+                  "location": "path"
+                },
+                "interval.endTime": {
+                  "location": "query",
+                  "description": "Required. The end of the time interval.",
+                  "format": "google-datetime",
+                  "type": "string"
+                },
+                "aggregation.alignmentPeriod": {
+                  "location": "query",
+                  "description": "The alignment period for per-time series alignment. If present, alignmentPeriod must be at least 60 seconds. After per-time series alignment, each time series will contain data points only on the period boundaries. If perSeriesAligner is not specified or equals ALIGN_NONE, then this field is ignored. If perSeriesAligner is specified and does not equal ALIGN_NONE, then this field must be defined; otherwise an error is returned.",
+                  "format": "google-duration",
+                  "type": "string"
+                },
+                "pageSize": {
+                  "location": "query",
+                  "description": "A positive number that is the maximum number of results to return. When view field sets to FULL, it limits the number of Points server will return; if view field is HEADERS, it limits the number of TimeSeries server will return.",
+                  "format": "int32",
+                  "type": "integer"
+                }
+              },
+              "flatPath": "v3/projects/{projectsId}/timeSeries",
+              "path": "v3/{+name}/timeSeries",
+              "id": "monitoring.projects.timeSeries.list",
+              "description": "Lists time series that match a filter. This method does not require a Stackdriver account."
+            },
+            "create": {
+              "request": {
+                "$ref": "CreateTimeSeriesRequest"
+              },
+              "description": "Creates or adds data to one or more time series. The response is empty if all time series in the request were written. If any time series could not be written, a corresponding failure message is included in the error response.",
+              "httpMethod": "POST",
+              "parameterOrder": [
+                "name"
+              ],
+              "response": {
+                "$ref": "Empty"
+              },
+              "parameters": {
+                "name": {
+                  "pattern": "^projects/[^/]+$",
+                  "location": "path",
+                  "description": "The project on which to execute the request. The format is \"projects/{project_id_or_number}\".",
+                  "required": true,
+                  "type": "string"
+                }
+              },
+              "scopes": [
+                "https://www.googleapis.com/auth/cloud-platform",
+                "https://www.googleapis.com/auth/monitoring",
+                "https://www.googleapis.com/auth/monitoring.write"
+              ],
+              "flatPath": "v3/projects/{projectsId}/timeSeries",
+              "id": "monitoring.projects.timeSeries.create",
+              "path": "v3/{+name}/timeSeries"
+            }
+          }
+        }
+      }
+    }
+  },
+  "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"
+    },
+    "pp": {
+      "description": "Pretty-print response.",
+      "type": "boolean",
+      "default": "true",
+      "location": "query"
+    },
+    "oauth_token": {
+      "description": "OAuth 2.0 token for the current user.",
+      "type": "string",
+      "location": "query"
+    },
+    "bearer_token": {
+      "location": "query",
+      "description": "OAuth bearer token.",
+      "type": "string"
+    },
+    "upload_protocol": {
+      "description": "Upload protocol for media (e.g. \"raw\", \"multipart\").",
+      "type": "string",
+      "location": "query"
+    },
+    "prettyPrint": {
+      "location": "query",
+      "description": "Returns response with indentations and line breaks.",
+      "type": "boolean",
+      "default": "true"
+    },
+    "uploadType": {
+      "description": "Legacy upload protocol for media (e.g. \"media\", \"multipart\").",
+      "type": "string",
+      "location": "query"
+    },
+    "fields": {
+      "location": "query",
+      "description": "Selector specifying which fields to include in a partial response.",
+      "type": "string"
+    },
+    "$.xgafv": {
+      "enum": [
+        "1",
+        "2"
+      ],
+      "description": "V1 error format.",
+      "type": "string",
+      "enumDescriptions": [
+        "v1 error format",
+        "v2 error format"
+      ],
+      "location": "query"
+    },
+    "callback": {
+      "description": "JSONP",
+      "type": "string",
+      "location": "query"
+    },
+    "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": {
+      "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"
+    },
+    "access_token": {
+      "description": "OAuth access token.",
+      "type": "string",
+      "location": "query"
+    }
+  },
+  "version": "v3",
+  "baseUrl": "https://monitoring.googleapis.com/",
+  "kind": "discovery#restDescription",
+  "description": "Manages your Stackdriver Monitoring data and configurations. Most projects must be associated with a Stackdriver account, with a few exceptions as noted on the individual method pages.",
+  "servicePath": "",
+  "basePath": "",
+  "documentationLink": "https://cloud.google.com/monitoring/api/",
+  "id": "monitoring:v3",
+  "revision": "20170320",
+  "discoveryVersion": "v1",
+  "version_module": "True"
 }
diff --git a/monitoring/v3/monitoring-gen.go b/monitoring/v3/monitoring-gen.go
index e64c11b..2b41545 100644
--- a/monitoring/v3/monitoring-gen.go
+++ b/monitoring/v3/monitoring-gen.go
@@ -167,25 +167,21 @@
 	s *Service
 }
 
-// BucketOptions: A Distribution may optionally contain a histogram of
-// the values in the population. The histogram is given in bucket_counts
-// as counts of values that fall into one of a sequence of
-// non-overlapping buckets. The sequence of buckets is described by
-// bucket_options.A bucket specifies an inclusive lower bound and
+// BucketOptions: 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 is strictly greater than the
-// lower bound.The sequence of N buckets for a Distribution consists of
+// 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.BucketOptions
-// describes bucket boundaries in one of three ways. Two describe the
-// boundaries by giving parameters for a formula to generate boundaries
-// and one gives the bucket boundaries explicitly.If bucket_options is
-// not given, then no bucket_counts may be given.
+// buckets are so-called because both bounds are finite.
 type BucketOptions struct {
 	// ExplicitBuckets: The explicit buckets.
 	ExplicitBuckets *Explicit `json:"explicitBuckets,omitempty"`
@@ -394,34 +390,36 @@
 }
 
 // Distribution: Distribution contains summary statistics for a
-// population of values and, optionally, a histogram representing the
-// distribution of those values across a specified set of histogram
-// buckets.The summary statistics are the count, mean, sum of the
-// squared deviation from the mean, the minimum, and the maximum of the
-// set of population of values.The histogram is based on a sequence of
-// buckets and gives a count of values that fall into each bucket. The
-// boundaries of the buckets are given either explicitly or by
-// specifying parameters for a method of computing them (buckets of
-// fixed width or buckets of exponentially increasing width).Although it
-// is not forbidden, it is generally a bad idea to include non-finite
-// values (infinities or NaNs) in the population of values, as this will
-// render the mean and sum_of_squared_deviation fields meaningless.
+// population of values. It optionally contains a histogram representing
+// the distribution of those values across a set of buckets.The summary
+// statistics are the count, mean, sum of the squared deviation from the
+// mean, the minimum, and the maximum of the set of population of
+// values. The histogram is based on a sequence of buckets and gives a
+// count of values that fall into each bucket. The boundaries of the
+// buckets are given either explicitly or by formulas for buckets of
+// fixed or exponentially increasing widths.Although it is not
+// forbidden, it is generally a bad idea to include non-finite values
+// (infinities or NaNs) in the population of values, as this will render
+// the mean and sum_of_squared_deviation fields meaningless.
 type Distribution struct {
-	// BucketCounts: If bucket_options is given, then the sum of the values
-	// in bucket_counts must equal the value in count. If bucket_options is
-	// not given, no bucket_counts fields may be given.Bucket counts are
-	// given in order under the numbering scheme described above (the
-	// underflow bucket has number 0; the finite buckets, if any, have
-	// numbers 1 through N-2; the overflow bucket has number N-1).The size
-	// of bucket_counts must be no greater than N as defined in
-	// bucket_options.Any suffix of trailing zero bucket_count fields may be
-	// omitted.
+	// BucketCounts: Required in the Stackdriver Monitoring API v3. The
+	// values for each bucket specified in bucket_options. The sum of the
+	// values in bucketCounts must equal the value in the count field of the
+	// Distribution object. The order of the bucket counts follows the
+	// numbering schemes described for the three bucket types. The underflow
+	// bucket has number 0; the finite buckets, if any, have numbers 1
+	// through N-2; and the overflow bucket has number N-1. The size of
+	// bucket_counts must not be greater than N. If the size is less than N,
+	// then the remaining buckets are assigned values of zero.
 	BucketCounts googleapi.Int64s `json:"bucketCounts,omitempty"`
 
-	// BucketOptions: Defines the histogram bucket boundaries.
+	// BucketOptions: Required in the Stackdriver Monitoring API v3. Defines
+	// the histogram bucket boundaries.
 	BucketOptions *BucketOptions `json:"bucketOptions,omitempty"`
 
 	// Count: The number of values in the population. Must be non-negative.
+	// This value must equal the sum of the values in bucket_counts if a
+	// histogram is provided.
 	Count int64 `json:"count,omitempty,string"`
 
 	// Mean: The arithmetic mean of the values in the population. If count
@@ -496,12 +494,13 @@
 	googleapi.ServerResponse `json:"-"`
 }
 
-// Explicit: A set of buckets with arbitrary widths.Defines size(bounds)
-// + 1 (= N) buckets with these boundaries for bucket i:Upper bound (0
-// <= i < N-1): boundsi  Lower bound (1 <= i < N); boundsi - 1There must
-// be at least one element in bounds. If bounds has only one element,
-// there are no finite buckets, and that single element is the common
-// boundary of the overflow and underflow buckets.
+// Explicit: 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.
 type Explicit struct {
 	// Bounds: The values must be monotonically increasing.
 	Bounds []float64 `json:"bounds,omitempty"`
@@ -529,11 +528,11 @@
 	return gensupport.MarshalJSON(raw, s.ForceSendFields, s.NullFields)
 }
 
-// Exponential: Specify a 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.Defines num_finite_buckets + 2 (= N) buckets with these
-// boundaries for bucket i:Upper bound (0 <= i < N-1): scale *
+// Exponential: 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)).
 type Exponential struct {
@@ -788,12 +787,12 @@
 	return gensupport.MarshalJSON(raw, s.ForceSendFields, s.NullFields)
 }
 
-// Linear: Specify a 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.Defines
-// num_finite_buckets + 2 (= N) buckets with these boundaries for bucket
-// i:Upper bound (0 <= i < N-1): offset + (width * i).  Lower bound (1
-// <= i < N): offset + (width * (i - 1)).
+// Linear: 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)).
 type Linear struct {
 	// NumFiniteBuckets: Must be greater than 0.
 	NumFiniteBuckets int64 `json:"numFiniteBuckets,omitempty"`
diff --git a/oauth2/v1/oauth2-gen.go b/oauth2/v1/oauth2-gen.go
index 4307771..9b4a6b4 100644
--- a/oauth2/v1/oauth2-gen.go
+++ b/oauth2/v1/oauth2-gen.go
@@ -70,10 +70,9 @@
 }
 
 type Service struct {
-	client                    *http.Client
-	BasePath                  string // API endpoint base URL
-	UserAgent                 string // optional additional User-Agent fragment
-	GoogleClientHeaderElement string // client header fragment, for Google use only
+	client    *http.Client
+	BasePath  string // API endpoint base URL
+	UserAgent string // optional additional User-Agent fragment
 
 	Userinfo *UserinfoService
 }
@@ -85,10 +84,6 @@
 	return googleapi.UserAgent + " " + s.UserAgent
 }
 
-func (s *Service) clientHeader() string {
-	return gensupport.GoogleClientHeader("20170210", s.GoogleClientHeaderElement)
-}
-
 func NewUserinfoService(s *Service) *UserinfoService {
 	rs := &UserinfoService{s: s}
 	rs.V2 = NewUserinfoV2Service(s)
@@ -444,7 +439,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	if c.ifNoneMatch_ != "" {
 		reqHeaders.Set("If-None-Match", c.ifNoneMatch_)
 	}
@@ -542,7 +536,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	if c.ifNoneMatch_ != "" {
 		reqHeaders.Set("If-None-Match", c.ifNoneMatch_)
 	}
@@ -662,7 +655,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	if c.ifNoneMatch_ != "" {
 		reqHeaders.Set("If-None-Match", c.ifNoneMatch_)
 	}
@@ -796,7 +788,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	if c.ifNoneMatch_ != "" {
 		reqHeaders.Set("If-None-Match", c.ifNoneMatch_)
 	}
@@ -930,7 +921,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	if c.ifNoneMatch_ != "" {
 		reqHeaders.Set("If-None-Match", c.ifNoneMatch_)
 	}
@@ -1044,7 +1034,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	var body io.Reader = nil
 	c.urlParams_.Set("alt", alt)
 	urls := googleapi.ResolveRelative(c.s.BasePath, "oauth2/v1/tokeninfo")
@@ -1172,7 +1161,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	if c.ifNoneMatch_ != "" {
 		reqHeaders.Set("If-None-Match", c.ifNoneMatch_)
 	}
@@ -1297,7 +1285,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	if c.ifNoneMatch_ != "" {
 		reqHeaders.Set("If-None-Match", c.ifNoneMatch_)
 	}
diff --git a/oauth2/v2/oauth2-gen.go b/oauth2/v2/oauth2-gen.go
index c12d1e8..7440468 100644
--- a/oauth2/v2/oauth2-gen.go
+++ b/oauth2/v2/oauth2-gen.go
@@ -70,10 +70,9 @@
 }
 
 type Service struct {
-	client                    *http.Client
-	BasePath                  string // API endpoint base URL
-	UserAgent                 string // optional additional User-Agent fragment
-	GoogleClientHeaderElement string // client header fragment, for Google use only
+	client    *http.Client
+	BasePath  string // API endpoint base URL
+	UserAgent string // optional additional User-Agent fragment
 
 	Userinfo *UserinfoService
 }
@@ -85,10 +84,6 @@
 	return googleapi.UserAgent + " " + s.UserAgent
 }
 
-func (s *Service) clientHeader() string {
-	return gensupport.GoogleClientHeader("20170210", s.GoogleClientHeaderElement)
-}
-
 func NewUserinfoService(s *Service) *UserinfoService {
 	rs := &UserinfoService{s: s}
 	rs.V2 = NewUserinfoV2Service(s)
@@ -372,7 +367,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	if c.ifNoneMatch_ != "" {
 		reqHeaders.Set("If-None-Match", c.ifNoneMatch_)
 	}
@@ -497,7 +491,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	var body io.Reader = nil
 	c.urlParams_.Set("alt", alt)
 	urls := googleapi.ResolveRelative(c.s.BasePath, "oauth2/v2/tokeninfo")
@@ -626,7 +619,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	if c.ifNoneMatch_ != "" {
 		reqHeaders.Set("If-None-Match", c.ifNoneMatch_)
 	}
@@ -750,7 +742,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	if c.ifNoneMatch_ != "" {
 		reqHeaders.Set("If-None-Match", c.ifNoneMatch_)
 	}
diff --git a/pagespeedonline/v1/pagespeedonline-gen.go b/pagespeedonline/v1/pagespeedonline-gen.go
index 518fdb9..7fcf5f7 100644
--- a/pagespeedonline/v1/pagespeedonline-gen.go
+++ b/pagespeedonline/v1/pagespeedonline-gen.go
@@ -55,10 +55,9 @@
 }
 
 type Service struct {
-	client                    *http.Client
-	BasePath                  string // API endpoint base URL
-	UserAgent                 string // optional additional User-Agent fragment
-	GoogleClientHeaderElement string // client header fragment, for Google use only
+	client    *http.Client
+	BasePath  string // API endpoint base URL
+	UserAgent string // optional additional User-Agent fragment
 
 	Pagespeedapi *PagespeedapiService
 }
@@ -70,10 +69,6 @@
 	return googleapi.UserAgent + " " + s.UserAgent
 }
 
-func (s *Service) clientHeader() string {
-	return gensupport.GoogleClientHeader("20170210", s.GoogleClientHeaderElement)
-}
-
 func NewPagespeedapiService(s *Service) *PagespeedapiService {
 	rs := &PagespeedapiService{s: s}
 	return rs
@@ -749,7 +744,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	if c.ifNoneMatch_ != "" {
 		reqHeaders.Set("If-None-Match", c.ifNoneMatch_)
 	}
diff --git a/pagespeedonline/v2/pagespeedonline-gen.go b/pagespeedonline/v2/pagespeedonline-gen.go
index ab8a761..94b1dfe 100644
--- a/pagespeedonline/v2/pagespeedonline-gen.go
+++ b/pagespeedonline/v2/pagespeedonline-gen.go
@@ -55,10 +55,9 @@
 }
 
 type Service struct {
-	client                    *http.Client
-	BasePath                  string // API endpoint base URL
-	UserAgent                 string // optional additional User-Agent fragment
-	GoogleClientHeaderElement string // client header fragment, for Google use only
+	client    *http.Client
+	BasePath  string // API endpoint base URL
+	UserAgent string // optional additional User-Agent fragment
 
 	Pagespeedapi *PagespeedapiService
 }
@@ -70,10 +69,6 @@
 	return googleapi.UserAgent + " " + s.UserAgent
 }
 
-func (s *Service) clientHeader() string {
-	return gensupport.GoogleClientHeader("20170210", s.GoogleClientHeaderElement)
-}
-
 func NewPagespeedapiService(s *Service) *PagespeedapiService {
 	rs := &PagespeedapiService{s: s}
 	return rs
@@ -788,7 +783,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	if c.ifNoneMatch_ != "" {
 		reqHeaders.Set("If-None-Match", c.ifNoneMatch_)
 	}
diff --git a/partners/v2/partners-api.json b/partners/v2/partners-api.json
index 4bcd7fe..84db5fa 100644
--- a/partners/v2/partners-api.json
+++ b/partners/v2/partners-api.json
@@ -1,59 +1,54 @@
 {
-  "baseUrl": "https://partners.googleapis.com/",
-  "canonicalName": "Partners",
-  "servicePath": "",
-  "description": "Searches certified companies and creates contact leads with them, and also audits the usage of clients.",
-  "kind": "discovery#restDescription",
-  "rootUrl": "https://partners.googleapis.com/",
-  "basePath": "",
-  "ownerDomain": "google.com",
-  "name": "partners",
-  "batchPath": "batch",
-  "revision": "20170303",
-  "documentationLink": "https://developers.google.com/partners/",
-  "id": "partners:v2",
-  "title": "Google Partners API",
-  "ownerName": "Google",
-  "discoveryVersion": "v1",
-  "version_module": "True",
   "resources": {
+    "userEvents": {
+      "methods": {
+        "log": {
+          "httpMethod": "POST",
+          "parameterOrder": [],
+          "response": {
+            "$ref": "LogUserEventResponse"
+          },
+          "parameters": {},
+          "flatPath": "v2/userEvents:log",
+          "id": "partners.userEvents.log",
+          "path": "v2/userEvents:log",
+          "request": {
+            "$ref": "LogUserEventRequest"
+          },
+          "description": "Logs a user event."
+        }
+      }
+    },
+    "clientMessages": {
+      "methods": {
+        "log": {
+          "flatPath": "v2/clientMessages:log",
+          "id": "partners.clientMessages.log",
+          "path": "v2/clientMessages:log",
+          "request": {
+            "$ref": "LogMessageRequest"
+          },
+          "description": "Logs a generic message from the client, such as\n`Failed to render component`, `Profile page is running slow`,\n`More than 500 users have accessed this result.`, etc.",
+          "httpMethod": "POST",
+          "parameterOrder": [],
+          "response": {
+            "$ref": "LogMessageResponse"
+          },
+          "parameters": {}
+        }
+      }
+    },
     "exams": {
       "methods": {
         "getToken": {
-          "description": "Gets an Exam Token for a Partner's user to take an exam in the Exams System",
           "httpMethod": "GET",
-          "response": {
-            "$ref": "ExamToken"
-          },
           "parameterOrder": [
             "examType"
           ],
+          "response": {
+            "$ref": "ExamToken"
+          },
           "parameters": {
-            "requestMetadata.userOverrides.userId": {
-              "location": "query",
-              "description": "Logged-in user ID to impersonate instead of the user's ID.",
-              "type": "string"
-            },
-            "requestMetadata.partnersSessionId": {
-              "location": "query",
-              "description": "Google Partners session ID.",
-              "type": "string"
-            },
-            "requestMetadata.trafficSource.trafficSourceId": {
-              "location": "query",
-              "description": "Identifier to indicate where the traffic comes from.\nAn identifier has multiple letters created by a team which redirected the\ntraffic to us.",
-              "type": "string"
-            },
-            "requestMetadata.locale": {
-              "description": "Locale to use for the current request.",
-              "type": "string",
-              "location": "query"
-            },
-            "requestMetadata.userOverrides.ipAddress": {
-              "location": "query",
-              "description": "IP address to use instead of the user's geo-located IP address.",
-              "type": "string"
-            },
             "requestMetadata.experimentIds": {
               "location": "query",
               "description": "Experiment IDs the current request belongs to.",
@@ -61,12 +56,11 @@
               "repeated": true
             },
             "requestMetadata.trafficSource.trafficSubId": {
+              "location": "query",
               "description": "Second level identifier to indicate where the traffic comes from.\nAn identifier has multiple letters created by a team which redirected the\ntraffic to us.",
-              "type": "string",
-              "location": "query"
+              "type": "string"
             },
             "examType": {
-              "description": "The exam type we are requesting a token for.",
               "required": true,
               "type": "string",
               "location": "path",
@@ -82,27 +76,50 @@
                 "CET_MOBILE",
                 "CET_DIGITAL_SALES",
                 "CET_MOBILE_SITES"
-              ]
+              ],
+              "description": "The exam type we are requesting a token for."
+            },
+            "requestMetadata.userOverrides.userId": {
+              "type": "string",
+              "location": "query",
+              "description": "Logged-in user ID to impersonate instead of the user's ID."
+            },
+            "requestMetadata.partnersSessionId": {
+              "location": "query",
+              "description": "Google Partners session ID.",
+              "type": "string"
+            },
+            "requestMetadata.trafficSource.trafficSourceId": {
+              "location": "query",
+              "description": "Identifier to indicate where the traffic comes from.\nAn identifier has multiple letters created by a team which redirected the\ntraffic to us.",
+              "type": "string"
+            },
+            "requestMetadata.locale": {
+              "location": "query",
+              "description": "Locale to use for the current request.",
+              "type": "string"
+            },
+            "requestMetadata.userOverrides.ipAddress": {
+              "location": "query",
+              "description": "IP address to use instead of the user's geo-located IP address.",
+              "type": "string"
             }
           },
           "flatPath": "v2/exams/{examType}/token",
           "id": "partners.exams.getToken",
-          "path": "v2/exams/{examType}/token"
+          "path": "v2/exams/{examType}/token",
+          "description": "Gets an Exam Token for a Partner's user to take an exam in the Exams System"
         }
       }
     },
     "leads": {
       "methods": {
         "list": {
-          "flatPath": "v2/leads",
-          "id": "partners.leads.list",
-          "path": "v2/leads",
-          "description": "Lists advertiser leads for a user's associated company.\nShould only be called within the context of an authorized logged in user.",
-          "httpMethod": "GET",
-          "parameterOrder": [],
           "response": {
             "$ref": "ListLeadsResponse"
           },
+          "parameterOrder": [],
+          "httpMethod": "GET",
           "parameters": {
             "requestMetadata.userOverrides.userId": {
               "location": "query",
@@ -115,30 +132,30 @@
               "type": "string"
             },
             "pageToken": {
+              "type": "string",
               "location": "query",
-              "description": "A token identifying a page of results that the server returns.\nTypically, this is the value of `ListLeadsResponse.next_page_token`\nreturned from the previous call to\nListLeads.",
-              "type": "string"
+              "description": "A token identifying a page of results that the server returns.\nTypically, this is the value of `ListLeadsResponse.next_page_token`\nreturned from the previous call to\nListLeads."
             },
             "pageSize": {
+              "type": "integer",
               "location": "query",
               "description": "Requested page size. Server may return fewer leads than requested.\nIf unspecified, server picks an appropriate default.",
-              "format": "int32",
-              "type": "integer"
+              "format": "int32"
             },
             "requestMetadata.trafficSource.trafficSourceId": {
+              "location": "query",
               "description": "Identifier to indicate where the traffic comes from.\nAn identifier has multiple letters created by a team which redirected the\ntraffic to us.",
-              "type": "string",
-              "location": "query"
+              "type": "string"
             },
             "requestMetadata.locale": {
+              "location": "query",
               "description": "Locale to use for the current request.",
-              "type": "string",
-              "location": "query"
+              "type": "string"
             },
             "requestMetadata.userOverrides.ipAddress": {
+              "location": "query",
               "description": "IP address to use instead of the user's geo-located IP address.",
-              "type": "string",
-              "location": "query"
+              "type": "string"
             },
             "requestMetadata.experimentIds": {
               "location": "query",
@@ -146,96 +163,122 @@
               "type": "string",
               "repeated": true
             },
-            "requestMetadata.trafficSource.trafficSubId": {
-              "description": "Second level identifier to indicate where the traffic comes from.\nAn identifier has multiple letters created by a team which redirected the\ntraffic to us.",
-              "type": "string",
-              "location": "query"
-            },
             "orderBy": {
               "location": "query",
               "description": "How to order Leads. Currently, only `create_time`\nand `create_time desc` are supported",
               "type": "string"
+            },
+            "requestMetadata.trafficSource.trafficSubId": {
+              "type": "string",
+              "location": "query",
+              "description": "Second level identifier to indicate where the traffic comes from.\nAn identifier has multiple letters created by a team which redirected the\ntraffic to us."
             }
-          }
+          },
+          "flatPath": "v2/leads",
+          "path": "v2/leads",
+          "id": "partners.leads.list",
+          "description": "Lists advertiser leads for a user's associated company.\nShould only be called within the context of an authorized logged in user."
         }
       }
     },
     "offers": {
       "methods": {
         "list": {
-          "httpMethod": "GET",
+          "description": "Lists the Offers available for the current user",
           "parameterOrder": [],
           "response": {
             "$ref": "ListOffersResponse"
           },
+          "httpMethod": "GET",
           "parameters": {
-            "requestMetadata.trafficSource.trafficSourceId": {
-              "description": "Identifier to indicate where the traffic comes from.\nAn identifier has multiple letters created by a team which redirected the\ntraffic to us.",
+            "requestMetadata.experimentIds": {
               "type": "string",
-              "location": "query"
+              "repeated": true,
+              "location": "query",
+              "description": "Experiment IDs the current request belongs to."
+            },
+            "requestMetadata.trafficSource.trafficSubId": {
+              "location": "query",
+              "description": "Second level identifier to indicate where the traffic comes from.\nAn identifier has multiple letters created by a team which redirected the\ntraffic to us.",
+              "type": "string"
+            },
+            "requestMetadata.userOverrides.userId": {
+              "location": "query",
+              "description": "Logged-in user ID to impersonate instead of the user's ID.",
+              "type": "string"
+            },
+            "requestMetadata.partnersSessionId": {
+              "type": "string",
+              "location": "query",
+              "description": "Google Partners session ID."
+            },
+            "requestMetadata.trafficSource.trafficSourceId": {
+              "type": "string",
+              "location": "query",
+              "description": "Identifier to indicate where the traffic comes from.\nAn identifier has multiple letters created by a team which redirected the\ntraffic to us."
             },
             "requestMetadata.locale": {
-              "description": "Locale to use for the current request.",
               "type": "string",
-              "location": "query"
+              "location": "query",
+              "description": "Locale to use for the current request."
             },
             "requestMetadata.userOverrides.ipAddress": {
               "location": "query",
               "description": "IP address to use instead of the user's geo-located IP address.",
               "type": "string"
-            },
-            "requestMetadata.experimentIds": {
-              "description": "Experiment IDs the current request belongs to.",
-              "type": "string",
-              "repeated": true,
-              "location": "query"
-            },
-            "requestMetadata.trafficSource.trafficSubId": {
-              "description": "Second level identifier to indicate where the traffic comes from.\nAn identifier has multiple letters created by a team which redirected the\ntraffic to us.",
-              "type": "string",
-              "location": "query"
-            },
-            "requestMetadata.partnersSessionId": {
-              "location": "query",
-              "description": "Google Partners session ID.",
-              "type": "string"
-            },
-            "requestMetadata.userOverrides.userId": {
-              "description": "Logged-in user ID to impersonate instead of the user's ID.",
-              "type": "string",
-              "location": "query"
             }
           },
           "flatPath": "v2/offers",
-          "id": "partners.offers.list",
           "path": "v2/offers",
-          "description": "Lists the Offers available for the current user"
+          "id": "partners.offers.list"
         }
       },
       "resources": {
         "history": {
           "methods": {
             "list": {
+              "description": "Lists the Historical Offers for the current user (or user's entire company)",
               "response": {
                 "$ref": "ListOffersHistoryResponse"
               },
               "parameterOrder": [],
               "httpMethod": "GET",
               "parameters": {
-                "requestMetadata.partnersSessionId": {
-                  "description": "Google Partners session ID.",
+                "requestMetadata.experimentIds": {
+                  "location": "query",
+                  "description": "Experiment IDs the current request belongs to.",
                   "type": "string",
-                  "location": "query"
+                  "repeated": true
+                },
+                "entireCompany": {
+                  "type": "boolean",
+                  "location": "query",
+                  "description": "if true, show history for the entire company.  Requires user to be admin."
+                },
+                "orderBy": {
+                  "type": "string",
+                  "location": "query",
+                  "description": "Comma-separated list of fields to order by, e.g.: \"foo,bar,baz\".\nUse \"foo desc\" to sort descending.\nList of valid field names is: name, offer_code, expiration_time, status,\n    last_modified_time, sender_name, creation_time, country_code,\n    offer_type."
+                },
+                "requestMetadata.trafficSource.trafficSubId": {
+                  "location": "query",
+                  "description": "Second level identifier to indicate where the traffic comes from.\nAn identifier has multiple letters created by a team which redirected the\ntraffic to us.",
+                  "type": "string"
                 },
                 "requestMetadata.userOverrides.userId": {
+                  "location": "query",
                   "description": "Logged-in user ID to impersonate instead of the user's ID.",
+                  "type": "string"
+                },
+                "requestMetadata.partnersSessionId": {
                   "type": "string",
-                  "location": "query"
+                  "location": "query",
+                  "description": "Google Partners session ID."
                 },
                 "pageToken": {
-                  "description": "Token to retrieve a specific page.",
                   "type": "string",
-                  "location": "query"
+                  "location": "query",
+                  "description": "Token to retrieve a specific page."
                 },
                 "pageSize": {
                   "location": "query",
@@ -244,99 +287,24 @@
                   "type": "integer"
                 },
                 "requestMetadata.trafficSource.trafficSourceId": {
-                  "description": "Identifier to indicate where the traffic comes from.\nAn identifier has multiple letters created by a team which redirected the\ntraffic to us.",
                   "type": "string",
-                  "location": "query"
+                  "location": "query",
+                  "description": "Identifier to indicate where the traffic comes from.\nAn identifier has multiple letters created by a team which redirected the\ntraffic to us."
                 },
                 "requestMetadata.locale": {
+                  "location": "query",
                   "description": "Locale to use for the current request.",
-                  "type": "string",
-                  "location": "query"
+                  "type": "string"
                 },
                 "requestMetadata.userOverrides.ipAddress": {
-                  "description": "IP address to use instead of the user's geo-located IP address.",
                   "type": "string",
-                  "location": "query"
-                },
-                "entireCompany": {
                   "location": "query",
-                  "description": "if true, show history for the entire company.  Requires user to be admin.",
-                  "type": "boolean"
-                },
-                "requestMetadata.experimentIds": {
-                  "description": "Experiment IDs the current request belongs to.",
-                  "type": "string",
-                  "repeated": true,
-                  "location": "query"
-                },
-                "requestMetadata.trafficSource.trafficSubId": {
-                  "description": "Second level identifier to indicate where the traffic comes from.\nAn identifier has multiple letters created by a team which redirected the\ntraffic to us.",
-                  "type": "string",
-                  "location": "query"
-                },
-                "orderBy": {
-                  "description": "Comma-separated list of fields to order by, e.g.: \"foo,bar,baz\".\nUse \"foo desc\" to sort descending.\nList of valid field names is: name, offer_code, expiration_time, status,\n    last_modified_time, sender_name, creation_time, country_code,\n    offer_type.",
-                  "type": "string",
-                  "location": "query"
+                  "description": "IP address to use instead of the user's geo-located IP address."
                 }
               },
               "flatPath": "v2/offers/history",
               "path": "v2/offers/history",
-              "id": "partners.offers.history.list",
-              "description": "Lists the Historical Offers for the current user (or user's entire company)"
-            }
-          }
-        }
-      }
-    },
-    "userStates": {
-      "methods": {
-        "list": {
-          "flatPath": "v2/userStates",
-          "id": "partners.userStates.list",
-          "path": "v2/userStates",
-          "description": "Lists states for current user.",
-          "httpMethod": "GET",
-          "parameterOrder": [],
-          "response": {
-            "$ref": "ListUserStatesResponse"
-          },
-          "parameters": {
-            "requestMetadata.partnersSessionId": {
-              "location": "query",
-              "description": "Google Partners session ID.",
-              "type": "string"
-            },
-            "requestMetadata.userOverrides.userId": {
-              "description": "Logged-in user ID to impersonate instead of the user's ID.",
-              "type": "string",
-              "location": "query"
-            },
-            "requestMetadata.trafficSource.trafficSourceId": {
-              "location": "query",
-              "description": "Identifier to indicate where the traffic comes from.\nAn identifier has multiple letters created by a team which redirected the\ntraffic to us.",
-              "type": "string"
-            },
-            "requestMetadata.locale": {
-              "description": "Locale to use for the current request.",
-              "type": "string",
-              "location": "query"
-            },
-            "requestMetadata.userOverrides.ipAddress": {
-              "location": "query",
-              "description": "IP address to use instead of the user's geo-located IP address.",
-              "type": "string"
-            },
-            "requestMetadata.experimentIds": {
-              "description": "Experiment IDs the current request belongs to.",
-              "type": "string",
-              "repeated": true,
-              "location": "query"
-            },
-            "requestMetadata.trafficSource.trafficSubId": {
-              "location": "query",
-              "description": "Second level identifier to indicate where the traffic comes from.\nAn identifier has multiple letters created by a team which redirected the\ntraffic to us.",
-              "type": "string"
+              "id": "partners.offers.history.list"
             }
           }
         }
@@ -346,26 +314,37 @@
       "methods": {
         "list": {
           "description": "Lists analytics data for a user's associated company.\nShould only be called within the context of an authorized logged in user.",
-          "httpMethod": "GET",
-          "parameterOrder": [],
           "response": {
             "$ref": "ListAnalyticsResponse"
           },
+          "parameterOrder": [],
+          "httpMethod": "GET",
           "parameters": {
-            "requestMetadata.partnersSessionId": {
+            "requestMetadata.experimentIds": {
               "location": "query",
-              "description": "Google Partners session ID.",
+              "description": "Experiment IDs the current request belongs to.",
+              "type": "string",
+              "repeated": true
+            },
+            "requestMetadata.trafficSource.trafficSubId": {
+              "location": "query",
+              "description": "Second level identifier to indicate where the traffic comes from.\nAn identifier has multiple letters created by a team which redirected the\ntraffic to us.",
               "type": "string"
             },
             "requestMetadata.userOverrides.userId": {
+              "location": "query",
               "description": "Logged-in user ID to impersonate instead of the user's ID.",
+              "type": "string"
+            },
+            "requestMetadata.partnersSessionId": {
               "type": "string",
-              "location": "query"
+              "location": "query",
+              "description": "Google Partners session ID."
             },
             "pageToken": {
+              "type": "string",
               "location": "query",
-              "description": "A token identifying a page of results that the server returns.\nTypically, this is the value of `ListAnalyticsResponse.next_page_token`\nreturned from the previous call to\nListAnalytics.\nWill be a date string in `YYYY-MM-DD` format representing the end date\nof the date range of results to return.\nIf unspecified or set to \"\", default value is the current date.",
-              "type": "string"
+              "description": "A token identifying a page of results that the server returns.\nTypically, this is the value of `ListAnalyticsResponse.next_page_token`\nreturned from the previous call to\nListAnalytics.\nWill be a date string in `YYYY-MM-DD` format representing the end date\nof the date range of results to return.\nIf unspecified or set to \"\", default value is the current date."
             },
             "pageSize": {
               "location": "query",
@@ -374,10 +353,104 @@
               "type": "integer"
             },
             "requestMetadata.trafficSource.trafficSourceId": {
+              "type": "string",
               "location": "query",
-              "description": "Identifier to indicate where the traffic comes from.\nAn identifier has multiple letters created by a team which redirected the\ntraffic to us.",
+              "description": "Identifier to indicate where the traffic comes from.\nAn identifier has multiple letters created by a team which redirected the\ntraffic to us."
+            },
+            "requestMetadata.locale": {
+              "location": "query",
+              "description": "Locale to use for the current request.",
               "type": "string"
             },
+            "requestMetadata.userOverrides.ipAddress": {
+              "location": "query",
+              "description": "IP address to use instead of the user's geo-located IP address.",
+              "type": "string"
+            }
+          },
+          "flatPath": "v2/analytics",
+          "path": "v2/analytics",
+          "id": "partners.analytics.list"
+        }
+      }
+    },
+    "userStates": {
+      "methods": {
+        "list": {
+          "httpMethod": "GET",
+          "response": {
+            "$ref": "ListUserStatesResponse"
+          },
+          "parameterOrder": [],
+          "parameters": {
+            "requestMetadata.trafficSource.trafficSourceId": {
+              "type": "string",
+              "location": "query",
+              "description": "Identifier to indicate where the traffic comes from.\nAn identifier has multiple letters created by a team which redirected the\ntraffic to us."
+            },
+            "requestMetadata.locale": {
+              "type": "string",
+              "location": "query",
+              "description": "Locale to use for the current request."
+            },
+            "requestMetadata.userOverrides.ipAddress": {
+              "location": "query",
+              "description": "IP address to use instead of the user's geo-located IP address.",
+              "type": "string"
+            },
+            "requestMetadata.experimentIds": {
+              "location": "query",
+              "description": "Experiment IDs the current request belongs to.",
+              "type": "string",
+              "repeated": true
+            },
+            "requestMetadata.trafficSource.trafficSubId": {
+              "type": "string",
+              "location": "query",
+              "description": "Second level identifier to indicate where the traffic comes from.\nAn identifier has multiple letters created by a team which redirected the\ntraffic to us."
+            },
+            "requestMetadata.userOverrides.userId": {
+              "type": "string",
+              "location": "query",
+              "description": "Logged-in user ID to impersonate instead of the user's ID."
+            },
+            "requestMetadata.partnersSessionId": {
+              "location": "query",
+              "description": "Google Partners session ID.",
+              "type": "string"
+            }
+          },
+          "flatPath": "v2/userStates",
+          "id": "partners.userStates.list",
+          "path": "v2/userStates",
+          "description": "Lists states for current user."
+        }
+      }
+    },
+    "v2": {
+      "methods": {
+        "getPartnersstatus": {
+          "httpMethod": "GET",
+          "parameterOrder": [],
+          "response": {
+            "$ref": "GetPartnersStatusResponse"
+          },
+          "parameters": {
+            "requestMetadata.partnersSessionId": {
+              "location": "query",
+              "description": "Google Partners session ID.",
+              "type": "string"
+            },
+            "requestMetadata.userOverrides.userId": {
+              "type": "string",
+              "location": "query",
+              "description": "Logged-in user ID to impersonate instead of the user's ID."
+            },
+            "requestMetadata.trafficSource.trafficSourceId": {
+              "type": "string",
+              "location": "query",
+              "description": "Identifier to indicate where the traffic comes from.\nAn identifier has multiple letters created by a team which redirected the\ntraffic to us."
+            },
             "requestMetadata.locale": {
               "location": "query",
               "description": "Locale to use for the current request.",
@@ -389,25 +462,80 @@
               "type": "string"
             },
             "requestMetadata.experimentIds": {
-              "description": "Experiment IDs the current request belongs to.",
               "type": "string",
               "repeated": true,
-              "location": "query"
+              "location": "query",
+              "description": "Experiment IDs the current request belongs to."
             },
             "requestMetadata.trafficSource.trafficSubId": {
+              "type": "string",
               "location": "query",
-              "description": "Second level identifier to indicate where the traffic comes from.\nAn identifier has multiple letters created by a team which redirected the\ntraffic to us.",
-              "type": "string"
+              "description": "Second level identifier to indicate where the traffic comes from.\nAn identifier has multiple letters created by a team which redirected the\ntraffic to us."
             }
           },
-          "flatPath": "v2/analytics",
-          "id": "partners.analytics.list",
-          "path": "v2/analytics"
-        }
-      }
-    },
-    "v2": {
-      "methods": {
+          "flatPath": "v2/partnersstatus",
+          "id": "partners.getPartnersstatus",
+          "path": "v2/partnersstatus",
+          "description": "Gets Partners Status of the logged in user's agency.\nShould only be called if the logged in user is the admin of the agency."
+        },
+        "updateLeads": {
+          "request": {
+            "$ref": "Lead"
+          },
+          "description": "Updates the specified lead.",
+          "response": {
+            "$ref": "Lead"
+          },
+          "parameterOrder": [],
+          "httpMethod": "PATCH",
+          "parameters": {
+            "requestMetadata.userOverrides.userId": {
+              "type": "string",
+              "location": "query",
+              "description": "Logged-in user ID to impersonate instead of the user's ID."
+            },
+            "requestMetadata.partnersSessionId": {
+              "location": "query",
+              "description": "Google Partners session ID.",
+              "type": "string"
+            },
+            "requestMetadata.trafficSource.trafficSourceId": {
+              "type": "string",
+              "location": "query",
+              "description": "Identifier to indicate where the traffic comes from.\nAn identifier has multiple letters created by a team which redirected the\ntraffic to us."
+            },
+            "requestMetadata.locale": {
+              "location": "query",
+              "description": "Locale to use for the current request.",
+              "type": "string"
+            },
+            "requestMetadata.userOverrides.ipAddress": {
+              "type": "string",
+              "location": "query",
+              "description": "IP address to use instead of the user's geo-located IP address."
+            },
+            "updateMask": {
+              "type": "string",
+              "location": "query",
+              "description": "Standard field mask for the set of fields to be updated.\nRequired with at least 1 value in FieldMask's paths.\nOnly `state` and `adwords_customer_id` are currently supported.",
+              "format": "google-fieldmask"
+            },
+            "requestMetadata.experimentIds": {
+              "type": "string",
+              "repeated": true,
+              "location": "query",
+              "description": "Experiment IDs the current request belongs to."
+            },
+            "requestMetadata.trafficSource.trafficSubId": {
+              "type": "string",
+              "location": "query",
+              "description": "Second level identifier to indicate where the traffic comes from.\nAn identifier has multiple letters created by a team which redirected the\ntraffic to us."
+            }
+          },
+          "flatPath": "v2/leads",
+          "path": "v2/leads",
+          "id": "partners.updateLeads"
+        },
         "updateCompanies": {
           "description": "Update company.\nShould only be called within the context of an authorized logged in user.",
           "request": {
@@ -419,417 +547,71 @@
             "$ref": "Company"
           },
           "parameters": {
-            "requestMetadata.userOverrides.userId": {
-              "location": "query",
-              "description": "Logged-in user ID to impersonate instead of the user's ID.",
-              "type": "string"
-            },
-            "requestMetadata.partnersSessionId": {
-              "location": "query",
-              "description": "Google Partners session ID.",
-              "type": "string"
-            },
             "requestMetadata.trafficSource.trafficSourceId": {
+              "location": "query",
               "description": "Identifier to indicate where the traffic comes from.\nAn identifier has multiple letters created by a team which redirected the\ntraffic to us.",
-              "type": "string",
-              "location": "query"
+              "type": "string"
             },
             "requestMetadata.locale": {
+              "type": "string",
               "location": "query",
-              "description": "Locale to use for the current request.",
-              "type": "string"
+              "description": "Locale to use for the current request."
             },
             "requestMetadata.userOverrides.ipAddress": {
-              "description": "IP address to use instead of the user's geo-located IP address.",
               "type": "string",
-              "location": "query"
+              "location": "query",
+              "description": "IP address to use instead of the user's geo-located IP address."
             },
             "updateMask": {
+              "type": "string",
               "location": "query",
               "description": "Standard field mask for the set of fields to be updated.\nRequired with at least 1 value in FieldMask's paths.",
-              "format": "google-fieldmask",
-              "type": "string"
+              "format": "google-fieldmask"
             },
             "requestMetadata.experimentIds": {
+              "location": "query",
               "description": "Experiment IDs the current request belongs to.",
               "type": "string",
-              "repeated": true,
-              "location": "query"
+              "repeated": true
             },
             "requestMetadata.trafficSource.trafficSubId": {
               "location": "query",
               "description": "Second level identifier to indicate where the traffic comes from.\nAn identifier has multiple letters created by a team which redirected the\ntraffic to us.",
               "type": "string"
+            },
+            "requestMetadata.partnersSessionId": {
+              "type": "string",
+              "location": "query",
+              "description": "Google Partners session ID."
+            },
+            "requestMetadata.userOverrides.userId": {
+              "location": "query",
+              "description": "Logged-in user ID to impersonate instead of the user's ID.",
+              "type": "string"
             }
           },
           "flatPath": "v2/companies",
           "id": "partners.updateCompanies",
           "path": "v2/companies"
-        },
-        "getPartnersstatus": {
-          "response": {
-            "$ref": "GetPartnersStatusResponse"
-          },
-          "parameterOrder": [],
-          "httpMethod": "GET",
-          "parameters": {
-            "requestMetadata.partnersSessionId": {
-              "location": "query",
-              "description": "Google Partners session ID.",
-              "type": "string"
-            },
-            "requestMetadata.userOverrides.userId": {
-              "description": "Logged-in user ID to impersonate instead of the user's ID.",
-              "type": "string",
-              "location": "query"
-            },
-            "requestMetadata.trafficSource.trafficSourceId": {
-              "description": "Identifier to indicate where the traffic comes from.\nAn identifier has multiple letters created by a team which redirected the\ntraffic to us.",
-              "type": "string",
-              "location": "query"
-            },
-            "requestMetadata.locale": {
-              "description": "Locale to use for the current request.",
-              "type": "string",
-              "location": "query"
-            },
-            "requestMetadata.userOverrides.ipAddress": {
-              "location": "query",
-              "description": "IP address to use instead of the user's geo-located IP address.",
-              "type": "string"
-            },
-            "requestMetadata.experimentIds": {
-              "location": "query",
-              "description": "Experiment IDs the current request belongs to.",
-              "type": "string",
-              "repeated": true
-            },
-            "requestMetadata.trafficSource.trafficSubId": {
-              "location": "query",
-              "description": "Second level identifier to indicate where the traffic comes from.\nAn identifier has multiple letters created by a team which redirected the\ntraffic to us.",
-              "type": "string"
-            }
-          },
-          "flatPath": "v2/partnersstatus",
-          "path": "v2/partnersstatus",
-          "id": "partners.getPartnersstatus",
-          "description": "Gets Partners Status of the logged in user's agency.\nShould only be called if the logged in user is the admin of the agency."
-        },
-        "updateLeads": {
-          "description": "Updates the specified lead.",
-          "request": {
-            "$ref": "Lead"
-          },
-          "httpMethod": "PATCH",
-          "parameterOrder": [],
-          "response": {
-            "$ref": "Lead"
-          },
-          "parameters": {
-            "requestMetadata.trafficSource.trafficSourceId": {
-              "location": "query",
-              "description": "Identifier to indicate where the traffic comes from.\nAn identifier has multiple letters created by a team which redirected the\ntraffic to us.",
-              "type": "string"
-            },
-            "requestMetadata.locale": {
-              "description": "Locale to use for the current request.",
-              "type": "string",
-              "location": "query"
-            },
-            "requestMetadata.userOverrides.ipAddress": {
-              "description": "IP address to use instead of the user's geo-located IP address.",
-              "type": "string",
-              "location": "query"
-            },
-            "updateMask": {
-              "description": "Standard field mask for the set of fields to be updated.\nRequired with at least 1 value in FieldMask's paths.\nOnly `state` and `adwords_customer_id` are currently supported.",
-              "format": "google-fieldmask",
-              "type": "string",
-              "location": "query"
-            },
-            "requestMetadata.experimentIds": {
-              "location": "query",
-              "description": "Experiment IDs the current request belongs to.",
-              "type": "string",
-              "repeated": true
-            },
-            "requestMetadata.trafficSource.trafficSubId": {
-              "location": "query",
-              "description": "Second level identifier to indicate where the traffic comes from.\nAn identifier has multiple letters created by a team which redirected the\ntraffic to us.",
-              "type": "string"
-            },
-            "requestMetadata.partnersSessionId": {
-              "description": "Google Partners session ID.",
-              "type": "string",
-              "location": "query"
-            },
-            "requestMetadata.userOverrides.userId": {
-              "location": "query",
-              "description": "Logged-in user ID to impersonate instead of the user's ID.",
-              "type": "string"
-            }
-          },
-          "flatPath": "v2/leads",
-          "id": "partners.updateLeads",
-          "path": "v2/leads"
-        }
-      }
-    },
-    "users": {
-      "methods": {
-        "createCompanyRelation": {
-          "request": {
-            "$ref": "CompanyRelation"
-          },
-          "description": "Creates a user's company relation. Affiliates the user to a company.",
-          "response": {
-            "$ref": "CompanyRelation"
-          },
-          "parameterOrder": [
-            "userId"
-          ],
-          "httpMethod": "PUT",
-          "parameters": {
-            "requestMetadata.experimentIds": {
-              "description": "Experiment IDs the current request belongs to.",
-              "type": "string",
-              "repeated": true,
-              "location": "query"
-            },
-            "userId": {
-              "location": "path",
-              "description": "The ID of the user. Can be set to \u003ccode\u003eme\u003c/code\u003e to mean\nthe currently authenticated user.",
-              "required": true,
-              "type": "string"
-            },
-            "requestMetadata.trafficSource.trafficSubId": {
-              "description": "Second level identifier to indicate where the traffic comes from.\nAn identifier has multiple letters created by a team which redirected the\ntraffic to us.",
-              "type": "string",
-              "location": "query"
-            },
-            "requestMetadata.partnersSessionId": {
-              "description": "Google Partners session ID.",
-              "type": "string",
-              "location": "query"
-            },
-            "requestMetadata.userOverrides.userId": {
-              "location": "query",
-              "description": "Logged-in user ID to impersonate instead of the user's ID.",
-              "type": "string"
-            },
-            "requestMetadata.trafficSource.trafficSourceId": {
-              "description": "Identifier to indicate where the traffic comes from.\nAn identifier has multiple letters created by a team which redirected the\ntraffic to us.",
-              "type": "string",
-              "location": "query"
-            },
-            "requestMetadata.locale": {
-              "description": "Locale to use for the current request.",
-              "type": "string",
-              "location": "query"
-            },
-            "requestMetadata.userOverrides.ipAddress": {
-              "location": "query",
-              "description": "IP address to use instead of the user's geo-located IP address.",
-              "type": "string"
-            }
-          },
-          "flatPath": "v2/users/{userId}/companyRelation",
-          "path": "v2/users/{userId}/companyRelation",
-          "id": "partners.users.createCompanyRelation"
-        },
-        "deleteCompanyRelation": {
-          "description": "Deletes a user's company relation. Unaffiliaites the user from a company.",
-          "response": {
-            "$ref": "Empty"
-          },
-          "parameterOrder": [
-            "userId"
-          ],
-          "httpMethod": "DELETE",
-          "parameters": {
-            "requestMetadata.userOverrides.userId": {
-              "location": "query",
-              "description": "Logged-in user ID to impersonate instead of the user's ID.",
-              "type": "string"
-            },
-            "requestMetadata.partnersSessionId": {
-              "description": "Google Partners session ID.",
-              "type": "string",
-              "location": "query"
-            },
-            "requestMetadata.trafficSource.trafficSourceId": {
-              "location": "query",
-              "description": "Identifier to indicate where the traffic comes from.\nAn identifier has multiple letters created by a team which redirected the\ntraffic to us.",
-              "type": "string"
-            },
-            "requestMetadata.locale": {
-              "description": "Locale to use for the current request.",
-              "type": "string",
-              "location": "query"
-            },
-            "requestMetadata.userOverrides.ipAddress": {
-              "description": "IP address to use instead of the user's geo-located IP address.",
-              "type": "string",
-              "location": "query"
-            },
-            "requestMetadata.experimentIds": {
-              "location": "query",
-              "description": "Experiment IDs the current request belongs to.",
-              "type": "string",
-              "repeated": true
-            },
-            "requestMetadata.trafficSource.trafficSubId": {
-              "description": "Second level identifier to indicate where the traffic comes from.\nAn identifier has multiple letters created by a team which redirected the\ntraffic to us.",
-              "type": "string",
-              "location": "query"
-            },
-            "userId": {
-              "location": "path",
-              "description": "The ID of the user. Can be set to \u003ccode\u003eme\u003c/code\u003e to mean\nthe currently authenticated user.",
-              "required": true,
-              "type": "string"
-            }
-          },
-          "flatPath": "v2/users/{userId}/companyRelation",
-          "path": "v2/users/{userId}/companyRelation",
-          "id": "partners.users.deleteCompanyRelation"
-        },
-        "get": {
-          "flatPath": "v2/users/{userId}",
-          "path": "v2/users/{userId}",
-          "id": "partners.users.get",
-          "description": "Gets a user.",
-          "response": {
-            "$ref": "User"
-          },
-          "parameterOrder": [
-            "userId"
-          ],
-          "httpMethod": "GET",
-          "parameters": {
-            "requestMetadata.partnersSessionId": {
-              "description": "Google Partners session ID.",
-              "type": "string",
-              "location": "query"
-            },
-            "requestMetadata.userOverrides.userId": {
-              "location": "query",
-              "description": "Logged-in user ID to impersonate instead of the user's ID.",
-              "type": "string"
-            },
-            "userView": {
-              "description": "Specifies what parts of the user information to return.",
-              "type": "string",
-              "location": "query",
-              "enum": [
-                "BASIC",
-                "PROFILE",
-                "PUBLIC_PROFILE"
-              ]
-            },
-            "requestMetadata.trafficSource.trafficSourceId": {
-              "description": "Identifier to indicate where the traffic comes from.\nAn identifier has multiple letters created by a team which redirected the\ntraffic to us.",
-              "type": "string",
-              "location": "query"
-            },
-            "requestMetadata.locale": {
-              "description": "Locale to use for the current request.",
-              "type": "string",
-              "location": "query"
-            },
-            "requestMetadata.userOverrides.ipAddress": {
-              "location": "query",
-              "description": "IP address to use instead of the user's geo-located IP address.",
-              "type": "string"
-            },
-            "requestMetadata.experimentIds": {
-              "location": "query",
-              "description": "Experiment IDs the current request belongs to.",
-              "type": "string",
-              "repeated": true
-            },
-            "requestMetadata.trafficSource.trafficSubId": {
-              "description": "Second level identifier to indicate where the traffic comes from.\nAn identifier has multiple letters created by a team which redirected the\ntraffic to us.",
-              "type": "string",
-              "location": "query"
-            },
-            "userId": {
-              "location": "path",
-              "description": "Identifier of the user. Can be set to \u003ccode\u003eme\u003c/code\u003e to mean the currently\nauthenticated user.",
-              "required": true,
-              "type": "string"
-            }
-          }
-        },
-        "updateProfile": {
-          "flatPath": "v2/users/profile",
-          "path": "v2/users/profile",
-          "id": "partners.users.updateProfile",
-          "description": "Updates a user's profile. A user can only update their own profile and\nshould only be called within the context of a logged in user.",
-          "request": {
-            "$ref": "UserProfile"
-          },
-          "response": {
-            "$ref": "UserProfile"
-          },
-          "parameterOrder": [],
-          "httpMethod": "PATCH",
-          "parameters": {
-            "requestMetadata.partnersSessionId": {
-              "description": "Google Partners session ID.",
-              "type": "string",
-              "location": "query"
-            },
-            "requestMetadata.userOverrides.userId": {
-              "location": "query",
-              "description": "Logged-in user ID to impersonate instead of the user's ID.",
-              "type": "string"
-            },
-            "requestMetadata.trafficSource.trafficSourceId": {
-              "description": "Identifier to indicate where the traffic comes from.\nAn identifier has multiple letters created by a team which redirected the\ntraffic to us.",
-              "type": "string",
-              "location": "query"
-            },
-            "requestMetadata.locale": {
-              "description": "Locale to use for the current request.",
-              "type": "string",
-              "location": "query"
-            },
-            "requestMetadata.userOverrides.ipAddress": {
-              "description": "IP address to use instead of the user's geo-located IP address.",
-              "type": "string",
-              "location": "query"
-            },
-            "requestMetadata.experimentIds": {
-              "location": "query",
-              "description": "Experiment IDs the current request belongs to.",
-              "type": "string",
-              "repeated": true
-            },
-            "requestMetadata.trafficSource.trafficSubId": {
-              "location": "query",
-              "description": "Second level identifier to indicate where the traffic comes from.\nAn identifier has multiple letters created by a team which redirected the\ntraffic to us.",
-              "type": "string"
-            }
-          }
         }
       }
     },
     "companies": {
       "methods": {
         "get": {
-          "parameterOrder": [
-            "companyId"
-          ],
+          "description": "Gets a company.",
           "response": {
             "$ref": "GetCompanyResponse"
           },
+          "parameterOrder": [
+            "companyId"
+          ],
           "httpMethod": "GET",
           "parameters": {
             "requestMetadata.trafficSource.trafficSourceId": {
+              "type": "string",
               "location": "query",
-              "description": "Identifier to indicate where the traffic comes from.\nAn identifier has multiple letters created by a team which redirected the\ntraffic to us.",
-              "type": "string"
+              "description": "Identifier to indicate where the traffic comes from.\nAn identifier has multiple letters created by a team which redirected the\ntraffic to us."
             },
             "requestMetadata.userOverrides.ipAddress": {
               "location": "query",
@@ -837,105 +619,88 @@
               "type": "string"
             },
             "companyId": {
-              "description": "The ID of the company to retrieve.",
               "required": true,
               "type": "string",
-              "location": "path"
-            },
-            "currencyCode": {
-              "description": "If the company's budget is in a different currency code than this one, then\nthe converted budget is converted to this currency code.",
-              "type": "string",
-              "location": "query"
+              "location": "path",
+              "description": "The ID of the company to retrieve."
             },
             "requestMetadata.experimentIds": {
-              "description": "Experiment IDs the current request belongs to.",
               "type": "string",
               "repeated": true,
-              "location": "query"
-            },
-            "orderBy": {
-              "description": "How to order addresses within the returned company. Currently, only\n`address` and `address desc` is supported which will sorted by closest to\nfarthest in distance from given address and farthest to closest distance\nfrom given address respectively.",
-              "type": "string",
-              "location": "query"
-            },
-            "requestMetadata.trafficSource.trafficSubId": {
-              "description": "Second level identifier to indicate where the traffic comes from.\nAn identifier has multiple letters created by a team which redirected the\ntraffic to us.",
-              "type": "string",
-              "location": "query"
-            },
-            "requestMetadata.partnersSessionId": {
-              "description": "Google Partners session ID.",
-              "type": "string",
-              "location": "query"
-            },
-            "requestMetadata.userOverrides.userId": {
               "location": "query",
-              "description": "Logged-in user ID to impersonate instead of the user's ID.",
+              "description": "Experiment IDs the current request belongs to."
+            },
+            "currencyCode": {
+              "location": "query",
+              "description": "If the company's budget is in a different currency code than this one, then\nthe converted budget is converted to this currency code.",
               "type": "string"
             },
+            "requestMetadata.trafficSource.trafficSubId": {
+              "type": "string",
+              "location": "query",
+              "description": "Second level identifier to indicate where the traffic comes from.\nAn identifier has multiple letters created by a team which redirected the\ntraffic to us."
+            },
+            "orderBy": {
+              "location": "query",
+              "description": "How to order addresses within the returned company. Currently, only\n`address` and `address desc` is supported which will sorted by closest to\nfarthest in distance from given address and farthest to closest distance\nfrom given address respectively.",
+              "type": "string"
+            },
+            "requestMetadata.userOverrides.userId": {
+              "type": "string",
+              "location": "query",
+              "description": "Logged-in user ID to impersonate instead of the user's ID."
+            },
+            "requestMetadata.partnersSessionId": {
+              "type": "string",
+              "location": "query",
+              "description": "Google Partners session ID."
+            },
             "view": {
-              "description": "The view of `Company` resource to be returned. This must not be\n`COMPANY_VIEW_UNSPECIFIED`.",
               "type": "string",
               "location": "query",
               "enum": [
                 "COMPANY_VIEW_UNSPECIFIED",
                 "CV_GOOGLE_PARTNER_SEARCH"
-              ]
+              ],
+              "description": "The view of `Company` resource to be returned. This must not be\n`COMPANY_VIEW_UNSPECIFIED`."
             },
             "requestMetadata.locale": {
+              "type": "string",
               "location": "query",
-              "description": "Locale to use for the current request.",
-              "type": "string"
+              "description": "Locale to use for the current request."
             },
             "address": {
-              "description": "The address to use for sorting the company's addresses by proximity.\nIf not given, the geo-located address of the request is used.\nUsed when order_by is set.",
               "type": "string",
-              "location": "query"
+              "location": "query",
+              "description": "The address to use for sorting the company's addresses by proximity.\nIf not given, the geo-located address of the request is used.\nUsed when order_by is set."
             }
           },
           "flatPath": "v2/companies/{companyId}",
           "path": "v2/companies/{companyId}",
-          "id": "partners.companies.get",
-          "description": "Gets a company."
+          "id": "partners.companies.get"
         },
         "list": {
-          "flatPath": "v2/companies",
-          "id": "partners.companies.list",
-          "path": "v2/companies",
-          "description": "Lists companies.",
           "httpMethod": "GET",
-          "parameterOrder": [],
           "response": {
             "$ref": "ListCompaniesResponse"
           },
+          "parameterOrder": [],
           "parameters": {
-            "languageCodes": {
-              "location": "query",
-              "description": "List of language codes that company can support. Only primary language\nsubtags are accepted as defined by\n\u003ca href=\"https://tools.ietf.org/html/bcp47\"\u003eBCP 47\u003c/a\u003e\n(IETF BCP 47, \"Tags for Identifying Languages\").",
-              "type": "string",
-              "repeated": true
-            },
-            "pageSize": {
-              "location": "query",
-              "description": "Requested page size. Server may return fewer companies than requested.\nIf unspecified, server picks an appropriate default.",
-              "format": "int32",
-              "type": "integer"
-            },
             "requestMetadata.userOverrides.ipAddress": {
-              "description": "IP address to use instead of the user's geo-located IP address.",
               "type": "string",
-              "location": "query"
+              "location": "query",
+              "description": "IP address to use instead of the user's geo-located IP address."
             },
             "requestMetadata.experimentIds": {
-              "description": "Experiment IDs the current request belongs to.",
               "type": "string",
               "repeated": true,
-              "location": "query"
+              "location": "query",
+              "description": "Experiment IDs the current request belongs to."
             },
             "orderBy": {
-              "description": "How to order addresses within the returned companies. Currently, only\n`address` and `address desc` is supported which will sorted by closest to\nfarthest in distance from given address and farthest to closest distance\nfrom given address respectively.",
               "type": "string",
-              "location": "query"
+              "location": "query",
+              "description": "How to order addresses within the returned companies. Currently, only\n`address` and `address desc` is supported which will sorted by closest to\nfarthest in distance from given address and farthest to closest distance\nfrom given address respectively."
             },
             "specializations": {
               "location": "query",
@@ -952,38 +717,38 @@
               "repeated": true
             },
             "maxMonthlyBudget.currencyCode": {
+              "type": "string",
+              "location": "query",
+              "description": "The 3-letter currency code defined in ISO 4217."
+            },
+            "requestMetadata.userOverrides.userId": {
+              "type": "string",
+              "location": "query",
+              "description": "Logged-in user ID to impersonate instead of the user's ID."
+            },
+            "minMonthlyBudget.currencyCode": {
               "location": "query",
               "description": "The 3-letter currency code defined in ISO 4217.",
               "type": "string"
             },
-            "requestMetadata.userOverrides.userId": {
-              "description": "Logged-in user ID to impersonate instead of the user's ID.",
-              "type": "string",
-              "location": "query"
-            },
-            "minMonthlyBudget.currencyCode": {
-              "description": "The 3-letter currency code defined in ISO 4217.",
-              "type": "string",
-              "location": "query"
-            },
             "view": {
-              "description": "The view of the `Company` resource to be returned. This must not be\n`COMPANY_VIEW_UNSPECIFIED`.",
-              "type": "string",
               "location": "query",
               "enum": [
                 "COMPANY_VIEW_UNSPECIFIED",
                 "CV_GOOGLE_PARTNER_SEARCH"
-              ]
-            },
-            "address": {
-              "location": "query",
-              "description": "The address to use when searching for companies.\nIf not given, the geo-located address of the request is used.",
+              ],
+              "description": "The view of the `Company` resource to be returned. This must not be\n`COMPANY_VIEW_UNSPECIFIED`.",
               "type": "string"
             },
             "requestMetadata.locale": {
+              "location": "query",
               "description": "Locale to use for the current request.",
+              "type": "string"
+            },
+            "address": {
               "type": "string",
-              "location": "query"
+              "location": "query",
+              "description": "The address to use when searching for companies.\nIf not given, the geo-located address of the request is used."
             },
             "minMonthlyBudget.units": {
               "location": "query",
@@ -1013,36 +778,36 @@
               "repeated": true
             },
             "requestMetadata.trafficSource.trafficSourceId": {
+              "type": "string",
               "location": "query",
-              "description": "Identifier to indicate where the traffic comes from.\nAn identifier has multiple letters created by a team which redirected the\ntraffic to us.",
-              "type": "string"
+              "description": "Identifier to indicate where the traffic comes from.\nAn identifier has multiple letters created by a team which redirected the\ntraffic to us."
             },
             "maxMonthlyBudget.units": {
+              "type": "string",
               "location": "query",
               "description": "The whole units of the amount.\nFor example if `currencyCode` is `\"USD\"`, then 1 unit is one US dollar.",
-              "format": "int64",
-              "type": "string"
-            },
-            "requestMetadata.trafficSource.trafficSubId": {
-              "location": "query",
-              "description": "Second level identifier to indicate where the traffic comes from.\nAn identifier has multiple letters created by a team which redirected the\ntraffic to us.",
-              "type": "string"
+              "format": "int64"
             },
             "minMonthlyBudget.nanos": {
-              "description": "Number of nano (10^-9) units of the amount.\nThe value must be between -999,999,999 and +999,999,999 inclusive.\nIf `units` is positive, `nanos` must be positive or zero.\nIf `units` is zero, `nanos` can be positive, zero, or negative.\nIf `units` is negative, `nanos` must be negative or zero.\nFor example $-1.75 is represented as `units`=-1 and `nanos`=-750,000,000.",
-              "format": "int32",
               "type": "integer",
-              "location": "query"
+              "location": "query",
+              "description": "Number of nano (10^-9) units of the amount.\nThe value must be between -999,999,999 and +999,999,999 inclusive.\nIf `units` is positive, `nanos` must be positive or zero.\nIf `units` is zero, `nanos` can be positive, zero, or negative.\nIf `units` is negative, `nanos` must be negative or zero.\nFor example $-1.75 is represented as `units`=-1 and `nanos`=-750,000,000.",
+              "format": "int32"
+            },
+            "requestMetadata.trafficSource.trafficSubId": {
+              "type": "string",
+              "location": "query",
+              "description": "Second level identifier to indicate where the traffic comes from.\nAn identifier has multiple letters created by a team which redirected the\ntraffic to us."
             },
             "requestMetadata.partnersSessionId": {
+              "type": "string",
               "location": "query",
-              "description": "Google Partners session ID.",
-              "type": "string"
+              "description": "Google Partners session ID."
             },
             "companyName": {
+              "type": "string",
               "location": "query",
-              "description": "Company name to search for.",
-              "type": "string"
+              "description": "Company name to search for."
             },
             "pageToken": {
               "location": "query",
@@ -1050,6 +815,8 @@
               "type": "string"
             },
             "industries": {
+              "type": "string",
+              "repeated": true,
               "location": "query",
               "enum": [
                 "INDUSTRY_UNSPECIFIED",
@@ -1064,14 +831,12 @@
                 "I_TECHNOLOGY",
                 "I_TRAVEL"
               ],
-              "description": "List of industries the company can help with.",
-              "type": "string",
-              "repeated": true
+              "description": "List of industries the company can help with."
             },
             "websiteUrl": {
+              "location": "query",
               "description": "Website URL that will help to find a better matched company.\n.",
-              "type": "string",
-              "location": "query"
+              "type": "string"
             },
             "gpsMotivations": {
               "location": "query",
@@ -1084,21 +849,37 @@
               "description": "List of reasons for using Google Partner Search to get companies.",
               "type": "string",
               "repeated": true
+            },
+            "languageCodes": {
+              "location": "query",
+              "description": "List of language codes that company can support. Only primary language\nsubtags are accepted as defined by\n\u003ca href=\"https://tools.ietf.org/html/bcp47\"\u003eBCP 47\u003c/a\u003e\n(IETF BCP 47, \"Tags for Identifying Languages\").",
+              "type": "string",
+              "repeated": true
+            },
+            "pageSize": {
+              "location": "query",
+              "description": "Requested page size. Server may return fewer companies than requested.\nIf unspecified, server picks an appropriate default.",
+              "format": "int32",
+              "type": "integer"
             }
-          }
+          },
+          "flatPath": "v2/companies",
+          "id": "partners.companies.list",
+          "path": "v2/companies",
+          "description": "Lists companies."
         }
       },
       "resources": {
         "leads": {
           "methods": {
             "create": {
-              "httpMethod": "POST",
-              "parameterOrder": [
-                "companyId"
-              ],
               "response": {
                 "$ref": "CreateLeadResponse"
               },
+              "parameterOrder": [
+                "companyId"
+              ],
+              "httpMethod": "POST",
               "parameters": {
                 "companyId": {
                   "location": "path",
@@ -1108,8 +889,8 @@
                 }
               },
               "flatPath": "v2/companies/{companyId}/leads",
-              "id": "partners.companies.leads.create",
               "path": "v2/companies/{companyId}/leads",
+              "id": "partners.companies.leads.create",
               "request": {
                 "$ref": "CreateLeadRequest"
               },
@@ -1119,84 +900,260 @@
         }
       }
     },
-    "userEvents": {
+    "users": {
       "methods": {
-        "log": {
-          "description": "Logs a user event.",
-          "request": {
-            "$ref": "LogUserEventRequest"
+        "get": {
+          "description": "Gets a user.",
+          "response": {
+            "$ref": "User"
           },
-          "httpMethod": "POST",
+          "parameterOrder": [
+            "userId"
+          ],
+          "httpMethod": "GET",
+          "parameters": {
+            "requestMetadata.userOverrides.userId": {
+              "type": "string",
+              "location": "query",
+              "description": "Logged-in user ID to impersonate instead of the user's ID."
+            },
+            "requestMetadata.partnersSessionId": {
+              "type": "string",
+              "location": "query",
+              "description": "Google Partners session ID."
+            },
+            "userView": {
+              "type": "string",
+              "location": "query",
+              "enum": [
+                "BASIC",
+                "PROFILE",
+                "PUBLIC_PROFILE"
+              ],
+              "description": "Specifies what parts of the user information to return."
+            },
+            "requestMetadata.trafficSource.trafficSourceId": {
+              "type": "string",
+              "location": "query",
+              "description": "Identifier to indicate where the traffic comes from.\nAn identifier has multiple letters created by a team which redirected the\ntraffic to us."
+            },
+            "requestMetadata.locale": {
+              "type": "string",
+              "location": "query",
+              "description": "Locale to use for the current request."
+            },
+            "requestMetadata.userOverrides.ipAddress": {
+              "type": "string",
+              "location": "query",
+              "description": "IP address to use instead of the user's geo-located IP address."
+            },
+            "requestMetadata.experimentIds": {
+              "type": "string",
+              "repeated": true,
+              "location": "query",
+              "description": "Experiment IDs the current request belongs to."
+            },
+            "requestMetadata.trafficSource.trafficSubId": {
+              "location": "query",
+              "description": "Second level identifier to indicate where the traffic comes from.\nAn identifier has multiple letters created by a team which redirected the\ntraffic to us.",
+              "type": "string"
+            },
+            "userId": {
+              "location": "path",
+              "description": "Identifier of the user. Can be set to \u003ccode\u003eme\u003c/code\u003e to mean the currently\nauthenticated user.",
+              "required": true,
+              "type": "string"
+            }
+          },
+          "flatPath": "v2/users/{userId}",
+          "path": "v2/users/{userId}",
+          "id": "partners.users.get"
+        },
+        "updateProfile": {
+          "request": {
+            "$ref": "UserProfile"
+          },
+          "description": "Updates a user's profile. A user can only update their own profile and\nshould only be called within the context of a logged in user.",
+          "httpMethod": "PATCH",
           "parameterOrder": [],
           "response": {
-            "$ref": "LogUserEventResponse"
+            "$ref": "UserProfile"
           },
-          "parameters": {},
-          "flatPath": "v2/userEvents:log",
-          "id": "partners.userEvents.log",
-          "path": "v2/userEvents:log"
-        }
-      }
-    },
-    "clientMessages": {
-      "methods": {
-        "log": {
-          "flatPath": "v2/clientMessages:log",
-          "id": "partners.clientMessages.log",
-          "path": "v2/clientMessages:log",
-          "description": "Logs a generic message from the client, such as\n`Failed to render component`, `Profile page is running slow`,\n`More than 500 users have accessed this result.`, etc.",
+          "parameters": {
+            "requestMetadata.experimentIds": {
+              "type": "string",
+              "repeated": true,
+              "location": "query",
+              "description": "Experiment IDs the current request belongs to."
+            },
+            "requestMetadata.trafficSource.trafficSubId": {
+              "type": "string",
+              "location": "query",
+              "description": "Second level identifier to indicate where the traffic comes from.\nAn identifier has multiple letters created by a team which redirected the\ntraffic to us."
+            },
+            "requestMetadata.partnersSessionId": {
+              "location": "query",
+              "description": "Google Partners session ID.",
+              "type": "string"
+            },
+            "requestMetadata.userOverrides.userId": {
+              "type": "string",
+              "location": "query",
+              "description": "Logged-in user ID to impersonate instead of the user's ID."
+            },
+            "requestMetadata.trafficSource.trafficSourceId": {
+              "type": "string",
+              "location": "query",
+              "description": "Identifier to indicate where the traffic comes from.\nAn identifier has multiple letters created by a team which redirected the\ntraffic to us."
+            },
+            "requestMetadata.locale": {
+              "type": "string",
+              "location": "query",
+              "description": "Locale to use for the current request."
+            },
+            "requestMetadata.userOverrides.ipAddress": {
+              "type": "string",
+              "location": "query",
+              "description": "IP address to use instead of the user's geo-located IP address."
+            }
+          },
+          "flatPath": "v2/users/profile",
+          "id": "partners.users.updateProfile",
+          "path": "v2/users/profile"
+        },
+        "createCompanyRelation": {
+          "description": "Creates a user's company relation. Affiliates the user to a company.",
           "request": {
-            "$ref": "LogMessageRequest"
+            "$ref": "CompanyRelation"
           },
-          "httpMethod": "POST",
-          "parameterOrder": [],
           "response": {
-            "$ref": "LogMessageResponse"
+            "$ref": "CompanyRelation"
           },
-          "parameters": {}
+          "parameterOrder": [
+            "userId"
+          ],
+          "httpMethod": "PUT",
+          "parameters": {
+            "requestMetadata.experimentIds": {
+              "type": "string",
+              "repeated": true,
+              "location": "query",
+              "description": "Experiment IDs the current request belongs to."
+            },
+            "requestMetadata.trafficSource.trafficSubId": {
+              "type": "string",
+              "location": "query",
+              "description": "Second level identifier to indicate where the traffic comes from.\nAn identifier has multiple letters created by a team which redirected the\ntraffic to us."
+            },
+            "userId": {
+              "required": true,
+              "type": "string",
+              "location": "path",
+              "description": "The ID of the user. Can be set to \u003ccode\u003eme\u003c/code\u003e to mean\nthe currently authenticated user."
+            },
+            "requestMetadata.partnersSessionId": {
+              "type": "string",
+              "location": "query",
+              "description": "Google Partners session ID."
+            },
+            "requestMetadata.userOverrides.userId": {
+              "type": "string",
+              "location": "query",
+              "description": "Logged-in user ID to impersonate instead of the user's ID."
+            },
+            "requestMetadata.trafficSource.trafficSourceId": {
+              "location": "query",
+              "description": "Identifier to indicate where the traffic comes from.\nAn identifier has multiple letters created by a team which redirected the\ntraffic to us.",
+              "type": "string"
+            },
+            "requestMetadata.locale": {
+              "type": "string",
+              "location": "query",
+              "description": "Locale to use for the current request."
+            },
+            "requestMetadata.userOverrides.ipAddress": {
+              "type": "string",
+              "location": "query",
+              "description": "IP address to use instead of the user's geo-located IP address."
+            }
+          },
+          "flatPath": "v2/users/{userId}/companyRelation",
+          "path": "v2/users/{userId}/companyRelation",
+          "id": "partners.users.createCompanyRelation"
+        },
+        "deleteCompanyRelation": {
+          "flatPath": "v2/users/{userId}/companyRelation",
+          "id": "partners.users.deleteCompanyRelation",
+          "path": "v2/users/{userId}/companyRelation",
+          "description": "Deletes a user's company relation. Unaffiliaites the user from a company.",
+          "httpMethod": "DELETE",
+          "parameterOrder": [
+            "userId"
+          ],
+          "response": {
+            "$ref": "Empty"
+          },
+          "parameters": {
+            "requestMetadata.experimentIds": {
+              "location": "query",
+              "description": "Experiment IDs the current request belongs to.",
+              "type": "string",
+              "repeated": true
+            },
+            "userId": {
+              "location": "path",
+              "description": "The ID of the user. Can be set to \u003ccode\u003eme\u003c/code\u003e to mean\nthe currently authenticated user.",
+              "required": true,
+              "type": "string"
+            },
+            "requestMetadata.trafficSource.trafficSubId": {
+              "location": "query",
+              "description": "Second level identifier to indicate where the traffic comes from.\nAn identifier has multiple letters created by a team which redirected the\ntraffic to us.",
+              "type": "string"
+            },
+            "requestMetadata.partnersSessionId": {
+              "location": "query",
+              "description": "Google Partners session ID.",
+              "type": "string"
+            },
+            "requestMetadata.userOverrides.userId": {
+              "location": "query",
+              "description": "Logged-in user ID to impersonate instead of the user's ID.",
+              "type": "string"
+            },
+            "requestMetadata.trafficSource.trafficSourceId": {
+              "location": "query",
+              "description": "Identifier to indicate where the traffic comes from.\nAn identifier has multiple letters created by a team which redirected the\ntraffic to us.",
+              "type": "string"
+            },
+            "requestMetadata.locale": {
+              "type": "string",
+              "location": "query",
+              "description": "Locale to use for the current request."
+            },
+            "requestMetadata.userOverrides.ipAddress": {
+              "type": "string",
+              "location": "query",
+              "description": "IP address to use instead of the user's geo-located IP address."
+            }
+          }
         }
       }
     }
   },
   "parameters": {
-    "pp": {
-      "description": "Pretty-print response.",
-      "type": "boolean",
-      "default": "true",
-      "location": "query"
-    },
-    "oauth_token": {
-      "location": "query",
-      "description": "OAuth 2.0 token for the current user.",
-      "type": "string"
-    },
-    "bearer_token": {
-      "description": "OAuth bearer token.",
-      "type": "string",
-      "location": "query"
-    },
-    "upload_protocol": {
-      "description": "Upload protocol for media (e.g. \"raw\", \"multipart\").",
-      "type": "string",
-      "location": "query"
-    },
-    "prettyPrint": {
-      "description": "Returns response with indentations and line breaks.",
-      "type": "boolean",
-      "default": "true",
-      "location": "query"
-    },
     "uploadType": {
+      "type": "string",
       "location": "query",
-      "description": "Legacy upload protocol for media (e.g. \"media\", \"multipart\").",
-      "type": "string"
+      "description": "Legacy upload protocol for media (e.g. \"media\", \"multipart\")."
     },
     "fields": {
-      "description": "Selector specifying which fields to include in a partial response.",
       "type": "string",
-      "location": "query"
+      "location": "query",
+      "description": "Selector specifying which fields to include in a partial response."
     },
     "$.xgafv": {
+      "type": "string",
       "enumDescriptions": [
         "v1 error format",
         "v2 error format"
@@ -1206,13 +1163,12 @@
         "1",
         "2"
       ],
-      "description": "V1 error format.",
-      "type": "string"
+      "description": "V1 error format."
     },
     "callback": {
-      "description": "JSONP",
       "type": "string",
-      "location": "query"
+      "location": "query",
+      "description": "JSONP"
     },
     "alt": {
       "type": "string",
@@ -1231,720 +1187,122 @@
       ]
     },
     "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.",
-      "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."
     },
     "access_token": {
+      "location": "query",
       "description": "OAuth access token.",
-      "type": "string",
-      "location": "query"
+      "type": "string"
     },
     "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"
+    },
+    "pp": {
+      "type": "boolean",
+      "default": "true",
+      "location": "query",
+      "description": "Pretty-print response."
+    },
+    "oauth_token": {
       "type": "string",
-      "location": "query"
+      "location": "query",
+      "description": "OAuth 2.0 token for the current user."
+    },
+    "bearer_token": {
+      "location": "query",
+      "description": "OAuth bearer token.",
+      "type": "string"
+    },
+    "upload_protocol": {
+      "type": "string",
+      "location": "query",
+      "description": "Upload protocol for media (e.g. \"raw\", \"multipart\")."
+    },
+    "prettyPrint": {
+      "location": "query",
+      "description": "Returns response with indentations and line breaks.",
+      "type": "boolean",
+      "default": "true"
     }
   },
   "schemas": {
-    "LogMessageResponse": {
-      "description": "Response message for\nLogClientMessage.",
-      "type": "object",
-      "properties": {
-        "responseMetadata": {
-          "$ref": "ResponseMetadata",
-          "description": "Current response metadata."
-        }
-      },
-      "id": "LogMessageResponse"
-    },
-    "SpecializationStatus": {
-      "description": "Agency specialization status",
-      "type": "object",
-      "properties": {
-        "badgeSpecialization": {
-          "enumDescriptions": [
-            "Unknown specialization",
-            "AdWords Search specialization",
-            "AdWords Display specialization",
-            "AdWords Mobile specialization",
-            "AdWords Video specialization",
-            "AdWords Shopping specialization"
-          ],
-          "enum": [
-            "BADGE_SPECIALIZATION_UNKNOWN",
-            "BADGE_SPECIALIZATION_ADWORDS_SEARCH",
-            "BADGE_SPECIALIZATION_ADWORDS_DISPLAY",
-            "BADGE_SPECIALIZATION_ADWORDS_MOBILE",
-            "BADGE_SPECIALIZATION_ADWORDS_VIDEO",
-            "BADGE_SPECIALIZATION_ADWORDS_SHOPPING"
-          ],
-          "description": "The specialization this status is for.",
-          "type": "string"
-        },
-        "badgeSpecializationState": {
-          "enumDescriptions": [
-            "Unknown state",
-            "Specialization passed",
-            "Specialization not passed",
-            "Specialization in grace"
-          ],
-          "enum": [
-            "BADGE_SPECIALIZATION_STATE_UNKNOWN",
-            "BADGE_SPECIALIZATION_STATE_PASSED",
-            "BADGE_SPECIALIZATION_STATE_NOT_PASSED",
-            "BADGE_SPECIALIZATION_STATE_IN_GRACE"
-          ],
-          "description": "State of agency specialization.",
-          "type": "string"
-        }
-      },
-      "id": "SpecializationStatus"
-    },
-    "Certification": {
-      "description": "A user's information on a specific certification.",
-      "type": "object",
-      "properties": {
-        "achieved": {
-          "description": "Whether this certification has been achieved.",
-          "type": "boolean"
-        },
-        "expiration": {
-          "description": "Date this certification is due to expire.",
-          "format": "google-datetime",
-          "type": "string"
-        },
-        "warning": {
-          "description": "Whether this certification is in the state of warning.",
-          "type": "boolean"
-        },
-        "certificationType": {
-          "enumDescriptions": [
-            "Unchosen.",
-            "AdWords certified.",
-            "YouTube certified.",
-            "VideoAds certified.",
-            "Analytics certified.",
-            "DoubleClick certified.",
-            "Shopping certified.",
-            "Mobile certified.",
-            "Digital sales certified.",
-            "AdWords Search certified.",
-            "AdWords Display certified.",
-            "Mobile Sites certified."
-          ],
-          "enum": [
-            "CERTIFICATION_TYPE_UNSPECIFIED",
-            "CT_ADWORDS",
-            "CT_YOUTUBE",
-            "CT_VIDEOADS",
-            "CT_ANALYTICS",
-            "CT_DOUBLECLICK",
-            "CT_SHOPPING",
-            "CT_MOBILE",
-            "CT_DIGITAL_SALES",
-            "CT_ADWORDS_SEARCH",
-            "CT_ADWORDS_DISPLAY",
-            "CT_MOBILE_SITES"
-          ],
-          "description": "The type of certification, the area of expertise.",
-          "type": "string"
-        },
-        "lastAchieved": {
-          "description": "The date the user last achieved certification.",
-          "format": "google-datetime",
-          "type": "string"
-        }
-      },
-      "id": "Certification"
-    },
-    "User": {
-      "description": "A resource representing a user of the Partners platform.",
-      "type": "object",
-      "properties": {
-        "profile": {
-          "$ref": "UserProfile",
-          "description": "The profile information of a Partners user, contains all the directly\neditable user information."
-        },
-        "company": {
-          "description": "The company that the user is associated with.\nIf not present, the user is not associated with any company.",
-          "$ref": "CompanyRelation"
-        },
-        "lastAccessTime": {
-          "description": "The most recent time the user interacted with the Partners site.\n@OutputOnly",
-          "format": "google-datetime",
-          "type": "string"
-        },
-        "availableAdwordsManagerAccounts": {
-          "description": "This is the list of AdWords Manager Accounts the user has edit access to.\nIf the user has edit access to multiple accounts, the user can choose the\npreferred account and we use this when a personal account is needed. Can\nbe empty meaning the user has access to no accounts.\n@OutputOnly",
-          "type": "array",
-          "items": {
-            "$ref": "AdWordsManagerAccountInfo"
-          }
-        },
-        "primaryEmails": {
-          "description": "The list of emails the user has access to/can select as primary.\n@OutputOnly",
-          "type": "array",
-          "items": {
-            "type": "string"
-          }
-        },
-        "examStatus": {
-          "description": "The list of exams the user ever taken. For each type of exam, only one\nentry is listed.",
-          "type": "array",
-          "items": {
-            "$ref": "ExamStatus"
-          }
-        },
-        "id": {
-          "description": "The ID of the user.",
-          "type": "string"
-        },
-        "publicProfile": {
-          "description": "Information about a user's external public profile outside Google Partners.",
-          "$ref": "PublicProfile"
-        },
-        "companyVerificationEmail": {
-          "description": "The email address used by the user used for company verification.\n@OutputOnly",
-          "type": "string"
-        },
-        "certificationStatus": {
-          "description": "The list of achieved certifications. These are calculated based on exam\nresults and other requirements.\n@OutputOnly",
-          "type": "array",
-          "items": {
-            "$ref": "Certification"
-          }
-        }
-      },
-      "id": "User"
-    },
-    "ListAnalyticsResponse": {
-      "description": "Response message for\nListAnalytics.",
-      "type": "object",
-      "properties": {
-        "nextPageToken": {
-          "description": "A token to retrieve next page of results.\nPass this value in the `ListAnalyticsRequest.page_token` field in the\nsubsequent call to\nListAnalytics to retrieve the\nnext page of results.",
-          "type": "string"
-        },
-        "responseMetadata": {
-          "$ref": "ResponseMetadata",
-          "description": "Current response metadata."
-        },
-        "analyticsSummary": {
-          "description": "Aggregated information across the response's\nanalytics.",
-          "$ref": "AnalyticsSummary"
-        },
-        "analytics": {
-          "description": "The list of analytics.\nSorted in ascending order of\nAnalytics.event_date.",
-          "type": "array",
-          "items": {
-            "$ref": "Analytics"
-          }
-        }
-      },
-      "id": "ListAnalyticsResponse"
-    },
-    "ListLeadsResponse": {
-      "description": "Response message for ListLeads.",
-      "type": "object",
-      "properties": {
-        "leads": {
-          "description": "The list of leads.",
-          "type": "array",
-          "items": {
-            "$ref": "Lead"
-          }
-        },
-        "nextPageToken": {
-          "description": "A token to retrieve next page of results.\nPass this value in the `ListLeadsRequest.page_token` field in the\nsubsequent call to\nListLeads to retrieve the\nnext page of results.",
-          "type": "string"
-        },
-        "responseMetadata": {
-          "$ref": "ResponseMetadata",
-          "description": "Current response metadata."
-        },
-        "totalSize": {
-          "description": "The total count of leads for the given company.",
-          "format": "int32",
-          "type": "integer"
-        }
-      },
-      "id": "ListLeadsResponse"
-    },
-    "Company": {
-      "description": "A company resource in the Google Partners API. Once certified, it qualifies\nfor being searched by advertisers.",
-      "type": "object",
-      "properties": {
-        "industries": {
-          "enumDescriptions": [
-            "Unchosen.",
-            "The automotive industry.",
-            "The business-to-business industry.",
-            "The consumer packaged goods industry.",
-            "The education industry.",
-            "The finance industry.",
-            "The healthcare industry.",
-            "The media and entertainment industry.",
-            "The retail industry.",
-            "The technology industry.",
-            "The travel industry."
-          ],
-          "description": "Industries the company can help with.",
-          "type": "array",
-          "items": {
-            "enum": [
-              "INDUSTRY_UNSPECIFIED",
-              "I_AUTOMOTIVE",
-              "I_BUSINESS_TO_BUSINESS",
-              "I_CONSUMER_PACKAGED_GOODS",
-              "I_EDUCATION",
-              "I_FINANCE",
-              "I_HEALTHCARE",
-              "I_MEDIA_AND_ENTERTAINMENT",
-              "I_RETAIL",
-              "I_TECHNOLOGY",
-              "I_TRAVEL"
-            ],
-            "type": "string"
-          }
-        },
-        "additionalWebsites": {
-          "description": "URL of the company's additional websites used to verify the dynamic badges.\nThese are stored as full URLs as entered by the user, but only the TLD will\nbe used for the actual verification.",
-          "type": "array",
-          "items": {
-            "type": "string"
-          }
-        },
-        "websiteUrl": {
-          "description": "URL of the company's website.",
-          "type": "string"
-        },
-        "primaryAdwordsManagerAccountId": {
-          "description": "The Primary AdWords Manager Account id.",
-          "format": "int64",
-          "type": "string"
-        },
-        "name": {
-          "description": "The name of the company.",
-          "type": "string"
-        },
-        "localizedInfos": {
-          "description": "The list of localized info for the company.",
-          "type": "array",
-          "items": {
-            "$ref": "LocalizedCompanyInfo"
-          }
-        },
-        "id": {
-          "description": "The ID of the company.",
-          "type": "string"
-        },
-        "certificationStatuses": {
-          "description": "The list of Google Partners certification statuses for the company.",
-          "type": "array",
-          "items": {
-            "$ref": "CertificationStatus"
-          }
-        },
-        "services": {
-          "description": "Services the company can help with.",
-          "type": "array",
-          "items": {
-            "type": "string",
-            "enum": [
-              "SERVICE_UNSPECIFIED",
-              "S_ADVANCED_ADWORDS_SUPPORT",
-              "S_ADVERTISING_ON_GOOGLE",
-              "S_AN_ENHANCED_WEBSITE",
-              "S_AN_ONLINE_MARKETING_PLAN",
-              "S_MOBILE_AND_VIDEO_ADS",
-              "S_MOBILE_WEBSITE_SERVICES"
-            ]
-          },
-          "enumDescriptions": [
-            "Unchosen.",
-            "Help with advanced AdWords support.",
-            "Help with advertising on Google.",
-            "Help with an enhanced website.",
-            "Help with an online marketing plan.",
-            "Help with mobile and video ads.",
-            "Help with mobile websites."
-          ]
-        },
-        "publicProfile": {
-          "description": "Basic information from the company's public profile.",
-          "$ref": "PublicProfile"
-        },
-        "originalMinMonthlyBudget": {
-          "description": "The unconverted minimum monthly budget that the company accepts for partner\nbusiness.",
-          "$ref": "Money"
-        },
-        "primaryLocation": {
-          "$ref": "Location",
-          "description": "The primary location of the company."
-        },
-        "ranks": {
-          "description": "Information related to the ranking of the company within the list of\ncompanies.",
-          "type": "array",
-          "items": {
-            "$ref": "Rank"
-          }
-        },
-        "specializationStatus": {
-          "description": "The list of Google Partners specialization statuses for the company.",
-          "type": "array",
-          "items": {
-            "$ref": "SpecializationStatus"
-          }
-        },
-        "badgeTier": {
-          "description": "Partner badge tier",
-          "type": "string",
-          "enumDescriptions": [
-            "Tier badge is not set.",
-            "Agency has regular partner badge.",
-            "Agency has premier badge."
-          ],
-          "enum": [
-            "BADGE_TIER_NONE",
-            "BADGE_TIER_REGULAR",
-            "BADGE_TIER_PREMIER"
-          ]
-        },
-        "companyTypes": {
-          "enumDescriptions": [
-            "Unchosen.",
-            "Handles all aspects of the advertising process.",
-            "Focuses solely on an advertiser's media placement.",
-            "Plans/executes advertising campaigns.",
-            "Like a\nFULL_SERVICE_AGENCY,\nbut specializing in digital.",
-            "Increases visibility in search engine result pages.",
-            "Drives promotional efforts for immediate impact.",
-            "Focuses on bid management, conversion, reporting.",
-            "Establishes favorable relationship with public through low/no-cost\ncommunications.",
-            "Does not manage other company's accounts, manages own marketing programs.",
-            "Full-service AdWords account management for local businesses."
-          ],
-          "description": "Company type labels listed on the company's profile.",
-          "type": "array",
-          "items": {
-            "type": "string",
-            "enum": [
-              "COMPANY_TYPE_UNSPECIFIED",
-              "FULL_SERVICE_AGENCY",
-              "MEDIA_AGENCY",
-              "CREATIVE_AGENCY",
-              "CDIGITAL_AGENCY",
-              "SEM_SEO",
-              "PERFORMANCE_MARKETING",
-              "ADVERTISING_TOOL_DEVELOPMENT",
-              "PR",
-              "SELF_MANAGED",
-              "RESELLER"
-            ]
-          }
-        },
-        "autoApprovalEmailDomains": {
-          "description": "Email domains that allow users with a matching email address to get\nauto-approved for associating with this company.",
-          "type": "array",
-          "items": {
-            "type": "string"
-          }
-        },
-        "primaryLanguageCode": {
-          "description": "The primary language code of the company, as defined by\n\u003ca href=\"https://tools.ietf.org/html/bcp47\"\u003eBCP 47\u003c/a\u003e\n(IETF BCP 47, \"Tags for Identifying Languages\").",
-          "type": "string"
-        },
-        "profileStatus": {
-          "enumDescriptions": [
-            "Unchosen.",
-            "Company profile does not show up publicly.",
-            "Company profile can only be viewed by the profile's URL\nand not by Google Partner Search.",
-            "Company profile can be viewed by the profile's URL\nand by Google Partner Search."
-          ],
-          "enum": [
-            "COMPANY_PROFILE_STATUS_UNSPECIFIED",
-            "HIDDEN",
-            "PUBLISHED",
-            "SEARCHABLE"
-          ],
-          "description": "The public viewability status of the company's profile.",
-          "type": "string"
-        },
-        "locations": {
-          "description": "The list of all company locations.\nIf set, must include the\nprimary_location\nin the list.",
-          "type": "array",
-          "items": {
-            "$ref": "Location"
-          }
-        },
-        "convertedMinMonthlyBudget": {
-          "description": "The minimum monthly budget that the company accepts for partner business,\nconverted to the requested currency code.",
-          "$ref": "Money"
-        }
-      },
-      "id": "Company"
-    },
-    "CreateLeadResponse": {
-      "description": "Response message for CreateLead.",
-      "type": "object",
-      "properties": {
-        "lead": {
-          "description": "Lead that was created depending on the outcome of\n\u003ca href=\"https://www.google.com/recaptcha/\"\u003ereCaptcha\u003c/a\u003e validation.",
-          "$ref": "Lead"
-        },
-        "recaptchaStatus": {
-          "enumDescriptions": [
-            "Unchosen.",
-            "No reCaptcha validation needed.",
-            "reCaptcha challenge passed.",
-            "reCaptcha challenge failed."
-          ],
-          "enum": [
-            "RECAPTCHA_STATUS_UNSPECIFIED",
-            "RS_NOT_NEEDED",
-            "RS_PASSED",
-            "RS_FAILED"
-          ],
-          "description": "The outcome of \u003ca href=\"https://www.google.com/recaptcha/\"\u003ereCaptcha\u003c/a\u003e\nvalidation.",
-          "type": "string"
-        },
-        "responseMetadata": {
-          "$ref": "ResponseMetadata",
-          "description": "Current response metadata."
-        }
-      },
-      "id": "CreateLeadResponse"
-    },
-    "GetCompanyResponse": {
-      "description": "Response message for GetCompany.",
-      "type": "object",
-      "properties": {
-        "company": {
-          "description": "The company.",
-          "$ref": "Company"
-        },
-        "responseMetadata": {
-          "description": "Current response metadata.",
-          "$ref": "ResponseMetadata"
-        }
-      },
-      "id": "GetCompanyResponse"
-    },
-    "Location": {
-      "description": "A location with address and geographic coordinates. May optionally contain a\ndetailed (multi-field) version of the address.",
-      "type": "object",
-      "properties": {
-        "administrativeArea": {
-          "description": "Top-level administrative subdivision of this country.",
-          "type": "string"
-        },
-        "locality": {
-          "description": "Generally refers to the city/town portion of an address.",
-          "type": "string"
-        },
-        "latLng": {
-          "$ref": "LatLng",
-          "description": "The latitude and longitude of the location, in degrees."
-        },
-        "dependentLocality": {
-          "description": "Dependent locality or sublocality. Used for UK dependent localities, or\nneighborhoods or boroughs in other locations.",
-          "type": "string"
-        },
-        "address": {
-          "description": "The single string version of the address.",
-          "type": "string"
-        },
-        "regionCode": {
-          "description": "CLDR (Common Locale Data Repository) region code .",
-          "type": "string"
-        },
-        "postalCode": {
-          "description": "Values are frequently alphanumeric.",
-          "type": "string"
-        },
-        "sortingCode": {
-          "description": "Use of this code is very country-specific, but will refer to a secondary\nclassification code for sorting mail.",
-          "type": "string"
-        },
-        "languageCode": {
-          "description": "Language code of the address. Should be in BCP 47 format.",
-          "type": "string"
-        },
-        "addressLine": {
-          "description": "The following address lines represent the most specific part of any\naddress.",
-          "type": "array",
-          "items": {
-            "type": "string"
-          }
-        }
-      },
-      "id": "Location"
-    },
-    "ExamToken": {
-      "description": "A token that allows a user to take an exam.",
-      "type": "object",
-      "properties": {
-        "token": {
-          "description": "The token, only present if the user has access to the exam.",
-          "type": "string"
-        },
-        "examType": {
-          "enumDescriptions": [
-            "Unchosen.",
-            "Adwords Fundamentals exam.",
-            "AdWords advanced search exam.",
-            "AdWords advanced display exam.",
-            "VideoAds exam.",
-            "DoubleClick exam.",
-            "Analytics exam.",
-            "Shopping exam.",
-            "Mobile exam.",
-            "Digital Sales exam.",
-            "Mobile Sites exam."
-          ],
-          "enum": [
-            "CERTIFICATION_EXAM_TYPE_UNSPECIFIED",
-            "CET_ADWORDS_FUNDAMENTALS",
-            "CET_ADWORDS_ADVANCED_SEARCH",
-            "CET_ADWORDS_ADVANCED_DISPLAY",
-            "CET_VIDEO_ADS",
-            "CET_DOUBLECLICK",
-            "CET_ANALYTICS",
-            "CET_SHOPPING",
-            "CET_MOBILE",
-            "CET_DIGITAL_SALES",
-            "CET_MOBILE_SITES"
-          ],
-          "description": "The type of the exam the token belongs to.",
-          "type": "string"
-        },
-        "examId": {
-          "description": "The id of the exam the token is for.",
-          "format": "int64",
-          "type": "string"
-        }
-      },
-      "id": "ExamToken"
-    },
-    "CertificationExamStatus": {
-      "description": "Status for a Google Partners certification exam.",
-      "type": "object",
-      "properties": {
-        "numberUsersPass": {
-          "description": "The number of people who have passed the certification exam.",
-          "format": "int32",
-          "type": "integer"
-        },
-        "type": {
-          "description": "The type of certification exam.",
-          "type": "string",
-          "enumDescriptions": [
-            "Unchosen.",
-            "Adwords Fundamentals exam.",
-            "AdWords advanced search exam.",
-            "AdWords advanced display exam.",
-            "VideoAds exam.",
-            "DoubleClick exam.",
-            "Analytics exam.",
-            "Shopping exam.",
-            "Mobile exam.",
-            "Digital Sales exam.",
-            "Mobile Sites exam."
-          ],
-          "enum": [
-            "CERTIFICATION_EXAM_TYPE_UNSPECIFIED",
-            "CET_ADWORDS_FUNDAMENTALS",
-            "CET_ADWORDS_ADVANCED_SEARCH",
-            "CET_ADWORDS_ADVANCED_DISPLAY",
-            "CET_VIDEO_ADS",
-            "CET_DOUBLECLICK",
-            "CET_ANALYTICS",
-            "CET_SHOPPING",
-            "CET_MOBILE",
-            "CET_DIGITAL_SALES",
-            "CET_MOBILE_SITES"
-          ]
-        }
-      },
-      "id": "CertificationExamStatus"
-    },
-    "OptIns": {
-      "description": "A set of opt-ins for a user.",
-      "type": "object",
-      "properties": {
-        "specialOffers": {
-          "description": "An opt-in about receiving email regarding new features and products.",
-          "type": "boolean"
-        },
-        "performanceSuggestions": {
-          "description": "An opt-in about receiving email with customized AdWords campaign management\ntips.",
-          "type": "boolean"
-        },
-        "physicalMail": {
-          "description": "An opt-in to receive special promotional gifts and material in the mail.",
-          "type": "boolean"
-        },
-        "phoneContact": {
-          "description": "An opt-in to allow recieivng phone calls about their Partners account.",
-          "type": "boolean"
-        },
-        "marketComm": {
-          "description": "An opt-in about receiving email from Partners marketing teams. Includes\nmember-only events and special promotional offers for Google products.",
-          "type": "boolean"
-        }
-      },
-      "id": "OptIns"
-    },
     "Rank": {
-      "description": "Information related to ranking of results.",
       "type": "object",
       "properties": {
         "type": {
-          "enumDescriptions": [
-            "Unchosen.",
-            "Total final score."
-          ],
           "enum": [
             "RANK_TYPE_UNSPECIFIED",
             "RT_FINAL_SCORE"
           ],
           "description": "The type of rank.",
-          "type": "string"
+          "type": "string",
+          "enumDescriptions": [
+            "Unchosen.",
+            "Total final score."
+          ]
         },
         "value": {
+          "type": "number",
           "description": "The numerical value of the rank.",
-          "format": "double",
-          "type": "number"
+          "format": "double"
         }
       },
-      "id": "Rank"
+      "id": "Rank",
+      "description": "Information related to ranking of results."
     },
     "GetPartnersStatusResponse": {
-      "description": "Response message for\nGetPartnersStatus.",
       "type": "object",
       "properties": {
         "responseMetadata": {
-          "description": "Current response metadata.",
-          "$ref": "ResponseMetadata"
+          "$ref": "ResponseMetadata",
+          "description": "Current response metadata."
         }
       },
-      "id": "GetPartnersStatusResponse"
+      "id": "GetPartnersStatusResponse",
+      "description": "Response message for\nGetPartnersStatus."
     },
     "UserProfile": {
       "description": "The profile information of a Partners user.",
       "type": "object",
       "properties": {
-        "profilePublic": {
-          "description": "Whether the user's public profile is visible to anyone with the URL.",
-          "type": "boolean"
-        },
-        "channels": {
-          "description": "A list of ids representing which channels the user selected they were in.",
+        "markets": {
           "type": "array",
           "items": {
             "type": "string"
-          }
+          },
+          "description": "A list of ids representing which markets the user was interested in."
+        },
+        "adwordsManagerAccount": {
+          "description": "If the user has edit access to multiple accounts, the user can choose the\npreferred account and it is used when a personal account is needed. Can\nbe empty.",
+          "format": "int64",
+          "type": "string"
+        },
+        "phoneNumber": {
+          "type": "string",
+          "description": "The user's phone number."
+        },
+        "primaryCountryCode": {
+          "type": "string",
+          "description": "The user's primary country, an ISO 2-character code."
+        },
+        "emailAddress": {
+          "description": "The email address the user has selected on the Partners site as primary.",
+          "type": "string"
+        },
+        "channels": {
+          "type": "array",
+          "items": {
+            "type": "string"
+          },
+          "description": "A list of ids representing which channels the user selected they were in."
+        },
+        "profilePublic": {
+          "description": "Whether the user's public profile is visible to anyone with the URL.",
+          "type": "boolean"
         },
         "jobFunctions": {
           "description": "A list of ids represnting which job categories the user selected.",
@@ -1962,7 +1320,14 @@
           "description": "The user's mailing address, contains multiple fields."
         },
         "industries": {
-          "description": "A list of ids representing which industries the user selected.",
+          "type": "array",
+          "items": {
+            "type": "string"
+          },
+          "description": "A list of ids representing which industries the user selected."
+        },
+        "languages": {
+          "description": "The list of languages this user understands.",
           "type": "array",
           "items": {
             "type": "string"
@@ -1972,40 +1337,9 @@
           "description": "The user's family name.",
           "type": "string"
         },
-        "languages": {
-          "description": "The list of languages this user understands.",
-          "type": "array",
-          "items": {
-            "type": "string"
-          }
-        },
         "emailOptIns": {
           "$ref": "OptIns",
           "description": "The list of opt-ins for the user, related to communication preferences."
-        },
-        "markets": {
-          "description": "A list of ids representing which markets the user was interested in.",
-          "type": "array",
-          "items": {
-            "type": "string"
-          }
-        },
-        "phoneNumber": {
-          "description": "The user's phone number.",
-          "type": "string"
-        },
-        "adwordsManagerAccount": {
-          "description": "If the user has edit access to multiple accounts, the user can choose the\npreferred account and it is used when a personal account is needed. Can\nbe empty.",
-          "format": "int64",
-          "type": "string"
-        },
-        "primaryCountryCode": {
-          "description": "The user's primary country, an ISO 2-character code.",
-          "type": "string"
-        },
-        "emailAddress": {
-          "description": "The email address the user has selected on the Partners site as primary.",
-          "type": "string"
         }
       },
       "id": "UserProfile"
@@ -2014,54 +1348,12 @@
       "description": "Historical information about a Google Partners Offer.",
       "type": "object",
       "properties": {
-        "adwordsUrl": {
-          "description": "Client's AdWords page URL.",
-          "type": "string"
-        },
-        "offerType": {
-          "description": "Type of offer.",
-          "type": "string",
-          "enumDescriptions": [
-            "Unset.",
-            "AdWords spend X get Y.",
-            "Youtube video.",
-            "Spend Match up to Y."
-          ],
-          "enum": [
-            "OFFER_TYPE_UNSPECIFIED",
-            "OFFER_TYPE_SPEND_X_GET_Y",
-            "OFFER_TYPE_VIDEO",
-            "OFFER_TYPE_SPEND_MATCH"
-          ]
-        },
-        "senderName": {
-          "description": "Name (First + Last) of the partners user to whom the incentive is allocated.",
-          "type": "string"
-        },
-        "offerCountryCode": {
-          "description": "Country Code for the offer country.",
-          "type": "string"
-        },
-        "expirationTime": {
-          "description": "Time this offer expires.",
-          "format": "google-datetime",
-          "type": "string"
-        },
-        "offerCode": {
-          "description": "Offer code.",
-          "type": "string"
-        },
         "creationTime": {
+          "type": "string",
           "description": "Time offer was first created.",
-          "format": "google-datetime",
-          "type": "string"
-        },
-        "clientEmail": {
-          "description": "Email address for client.",
-          "type": "string"
+          "format": "google-datetime"
         },
         "status": {
-          "description": "Status of the offer.",
           "type": "string",
           "enumDescriptions": [
             "Unset.",
@@ -2076,46 +1368,103 @@
             "OFFER_STATUS_REDEEMED",
             "OFFER_STATUS_AWARDED",
             "OFFER_STATUS_EXPIRED"
-          ]
+          ],
+          "description": "Status of the offer."
+        },
+        "clientEmail": {
+          "type": "string",
+          "description": "Email address for client."
         },
         "clientId": {
+          "type": "string",
           "description": "ID of client.",
-          "format": "int64",
-          "type": "string"
+          "format": "int64"
         },
         "clientName": {
-          "description": "Name of the client.",
-          "type": "string"
+          "type": "string",
+          "description": "Name of the client."
         },
         "lastModifiedTime": {
           "description": "Time last action was taken.",
           "format": "google-datetime",
           "type": "string"
+        },
+        "adwordsUrl": {
+          "type": "string",
+          "description": "Client's AdWords page URL."
+        },
+        "offerType": {
+          "enum": [
+            "OFFER_TYPE_UNSPECIFIED",
+            "OFFER_TYPE_SPEND_X_GET_Y",
+            "OFFER_TYPE_VIDEO",
+            "OFFER_TYPE_SPEND_MATCH"
+          ],
+          "description": "Type of offer.",
+          "type": "string",
+          "enumDescriptions": [
+            "Unset.",
+            "AdWords spend X get Y.",
+            "Youtube video.",
+            "Spend Match up to Y."
+          ]
+        },
+        "senderName": {
+          "type": "string",
+          "description": "Name (First + Last) of the partners user to whom the incentive is allocated."
+        },
+        "offerCountryCode": {
+          "type": "string",
+          "description": "Country Code for the offer country."
+        },
+        "expirationTime": {
+          "description": "Time this offer expires.",
+          "format": "google-datetime",
+          "type": "string"
+        },
+        "offerCode": {
+          "description": "Offer code.",
+          "type": "string"
         }
       },
       "id": "HistoricalOffer"
     },
-    "UserOverrides": {
-      "description": "Values to use instead of the user's respective defaults. These are only\nhonored by whitelisted products.",
-      "type": "object",
-      "properties": {
-        "userId": {
-          "description": "Logged-in user ID to impersonate instead of the user's ID.",
-          "type": "string"
-        },
-        "ipAddress": {
-          "description": "IP address to use instead of the user's geo-located IP address.",
-          "type": "string"
-        }
-      },
-      "id": "UserOverrides"
-    },
     "LogUserEventRequest": {
       "description": "Request message for\nLogUserEvent.",
       "type": "object",
       "properties": {
+        "requestMetadata": {
+          "$ref": "RequestMetadata",
+          "description": "Current request metadata."
+        },
+        "url": {
+          "type": "string",
+          "description": "The URL where the event occurred."
+        },
+        "eventDatas": {
+          "type": "array",
+          "items": {
+            "$ref": "EventData"
+          },
+          "description": "List of event data for the event."
+        },
+        "eventScope": {
+          "enum": [
+            "EVENT_SCOPE_UNSPECIFIED",
+            "VISITOR",
+            "SESSION",
+            "PAGE"
+          ],
+          "description": "The scope of the event.",
+          "type": "string",
+          "enumDescriptions": [
+            "Unchosen.",
+            "Based on visitor.",
+            "Based on session.",
+            "Based on page visit."
+          ]
+        },
         "eventCategory": {
-          "description": "The category the action belongs to.",
           "type": "string",
           "enumDescriptions": [
             "Unchosen.",
@@ -2152,13 +1501,15 @@
             "GOOGLE_PARTNER_PORTAL_COMPANY_PROFILE",
             "EXTERNAL_LINKS",
             "GOOGLE_PARTNER_LANDING"
-          ]
+          ],
+          "description": "The category the action belongs to."
         },
         "lead": {
           "$ref": "Lead",
           "description": "Advertiser lead information."
         },
         "eventAction": {
+          "type": "string",
           "enumDescriptions": [
             "Unchosen.",
             "Advertiser clicked `Find a partner` bottom button.",
@@ -2283,6 +1634,7 @@
             "Advertiser clicked AdWords certificate help icon.",
             "Advertiser viewed Analytics certificate.",
             "Advertiser viewed DoubleClick certificate.",
+            "Advertiser viewed Mobile Sites certificate.",
             "Advertiser viewed VideoAds certificate.",
             "Advertiser clicked Shopping certificate help icon.",
             "Advertiser clicked VideoAds certificate help icon.",
@@ -2440,6 +1792,7 @@
             "SMB_CLICKED_ADWORDS_CERTIFICATE_HELP_ICON",
             "SMB_VIEWED_ANALYTICS_CERTIFICATE",
             "SMB_VIEWED_DOUBLECLICK_CERTIFICATE",
+            "SMB_VIEWED_MOBILE_SITES_CERTIFICATE",
             "SMB_VIEWED_VIDEO_ADS_CERTIFICATE",
             "SMB_VIEWED_SHOPPING_CERTIFICATE",
             "SMB_CLICKED_VIDEO_ADS_CERTIFICATE_HELP_ICON",
@@ -2473,69 +1826,52 @@
             "AGENCY_CLICKED_CANCEL_ACCEPT_TOS_BUTTON",
             "SMB_ENTERED_WEBSITE_IN_CONTACT_PARTNER_FORM"
           ],
-          "description": "The action that occurred.",
-          "type": "string"
-        },
-        "requestMetadata": {
-          "description": "Current request metadata.",
-          "$ref": "RequestMetadata"
-        },
-        "url": {
-          "description": "The URL where the event occurred.",
-          "type": "string"
-        },
-        "eventDatas": {
-          "description": "List of event data for the event.",
-          "type": "array",
-          "items": {
-            "$ref": "EventData"
-          }
-        },
-        "eventScope": {
-          "enumDescriptions": [
-            "Unchosen.",
-            "Based on visitor.",
-            "Based on session.",
-            "Based on page visit."
-          ],
-          "enum": [
-            "EVENT_SCOPE_UNSPECIFIED",
-            "VISITOR",
-            "SESSION",
-            "PAGE"
-          ],
-          "description": "The scope of the event.",
-          "type": "string"
+          "description": "The action that occurred."
         }
       },
       "id": "LogUserEventRequest"
     },
-    "AnalyticsDataPoint": {
-      "description": "Details of the analytics events for a `Company` within a single day.",
+    "UserOverrides": {
+      "description": "Values to use instead of the user's respective defaults. These are only\nhonored by whitelisted products.",
       "type": "object",
       "properties": {
-        "eventCount": {
-          "description": "Number of times the type of event occurred.\nMeaning depends on context (e.g. profile views, contacts, etc.).",
-          "format": "int32",
-          "type": "integer"
+        "userId": {
+          "type": "string",
+          "description": "Logged-in user ID to impersonate instead of the user's ID."
         },
+        "ipAddress": {
+          "description": "IP address to use instead of the user's geo-located IP address.",
+          "type": "string"
+        }
+      },
+      "id": "UserOverrides"
+    },
+    "AnalyticsDataPoint": {
+      "type": "object",
+      "properties": {
         "eventLocations": {
           "description": "Location information of where these events occurred.",
           "type": "array",
           "items": {
             "$ref": "LatLng"
           }
+        },
+        "eventCount": {
+          "type": "integer",
+          "description": "Number of times the type of event occurred.\nMeaning depends on context (e.g. profile views, contacts, etc.).",
+          "format": "int32"
         }
       },
-      "id": "AnalyticsDataPoint"
+      "id": "AnalyticsDataPoint",
+      "description": "Details of the analytics events for a `Company` within a single day."
     },
     "Analytics": {
       "description": "Analytics data for a `Company` within a single day.",
       "type": "object",
       "properties": {
         "eventDate": {
-          "description": "Date on which these events occurred.",
-          "$ref": "Date"
+          "$ref": "Date",
+          "description": "Date on which these events occurred."
         },
         "profileViews": {
           "$ref": "AnalyticsDataPoint",
@@ -2546,8 +1882,8 @@
           "description": "Instances of users seeing the `Company` in Google Partners Search results\non the specified date."
         },
         "contacts": {
-          "description": "Instances of users contacting the `Company`\non the specified date.",
-          "$ref": "AnalyticsDataPoint"
+          "$ref": "AnalyticsDataPoint",
+          "description": "Instances of users contacting the `Company`\non the specified date."
         }
       },
       "id": "Analytics"
@@ -2557,9 +1893,9 @@
       "type": "object",
       "properties": {
         "id": {
+          "type": "string",
           "description": "The AdWords Manager Account id.",
-          "format": "int64",
-          "type": "string"
+          "format": "int64"
         },
         "customerName": {
           "description": "Name of the customer this account represents.",
@@ -2572,42 +1908,41 @@
       "description": "Basic information from a public profile.",
       "type": "object",
       "properties": {
+        "profileImage": {
+          "type": "string",
+          "description": "The URL to the main profile image of the public profile."
+        },
         "displayName": {
-          "description": "The display name of the public profile.",
-          "type": "string"
+          "type": "string",
+          "description": "The display name of the public profile."
         },
         "displayImageUrl": {
-          "description": "The URL to the main display image of the public profile. Being deprecated.",
-          "type": "string"
+          "type": "string",
+          "description": "The URL to the main display image of the public profile. Being deprecated."
         },
         "id": {
-          "description": "The ID which can be used to retrieve more details about the public profile.",
-          "type": "string"
+          "type": "string",
+          "description": "The ID which can be used to retrieve more details about the public profile."
         },
         "url": {
-          "description": "The URL of the public profile.",
-          "type": "string"
-        },
-        "profileImage": {
-          "description": "The URL to the main profile image of the public profile.",
-          "type": "string"
+          "type": "string",
+          "description": "The URL of the public profile."
         }
       },
       "id": "PublicProfile"
     },
     "ResponseMetadata": {
-      "description": "Common data that is in each API response.",
       "type": "object",
       "properties": {
         "debugInfo": {
-          "description": "Debug information about this request.",
-          "$ref": "DebugInfo"
+          "$ref": "DebugInfo",
+          "description": "Debug information about this request."
         }
       },
-      "id": "ResponseMetadata"
+      "id": "ResponseMetadata",
+      "description": "Common data that is in each API response."
     },
     "RecaptchaChallenge": {
-      "description": "\u003ca href=\"https://www.google.com/recaptcha/\"\u003ereCaptcha\u003c/a\u003e challenge info.",
       "type": "object",
       "properties": {
         "response": {
@@ -2619,75 +1954,43 @@
           "type": "string"
         }
       },
-      "id": "RecaptchaChallenge"
+      "id": "RecaptchaChallenge",
+      "description": "\u003ca href=\"https://www.google.com/recaptcha/\"\u003ereCaptcha\u003c/a\u003e challenge info."
     },
     "AvailableOffer": {
       "description": "Available Offers to be distributed.",
       "type": "object",
       "properties": {
-        "id": {
-          "description": "ID of this offer.",
-          "format": "int64",
-          "type": "string"
-        },
-        "qualifiedCustomersComplete": {
-          "description": "Whether or not the list of qualified customers is definitely complete.",
-          "type": "boolean"
-        },
-        "countryOfferInfos": {
-          "description": "Offer info by country.",
-          "type": "array",
-          "items": {
-            "$ref": "CountryOfferInfo"
-          }
-        },
-        "offerType": {
-          "enumDescriptions": [
-            "Unset.",
-            "AdWords spend X get Y.",
-            "Youtube video.",
-            "Spend Match up to Y."
-          ],
-          "enum": [
-            "OFFER_TYPE_UNSPECIFIED",
-            "OFFER_TYPE_SPEND_X_GET_Y",
-            "OFFER_TYPE_VIDEO",
-            "OFFER_TYPE_SPEND_MATCH"
-          ],
-          "description": "Type of offer.",
-          "type": "string"
-        },
         "maxAccountAge": {
+          "type": "integer",
           "description": "The maximum age of an account [in days] to be eligible.",
-          "format": "int32",
-          "type": "integer"
+          "format": "int32"
         },
         "qualifiedCustomer": {
-          "description": "Customers who qualify for this offer.",
           "type": "array",
           "items": {
             "$ref": "OfferCustomer"
-          }
+          },
+          "description": "Customers who qualify for this offer."
         },
         "terms": {
           "description": "Terms of the offer.",
           "type": "string"
         },
         "showSpecialOfferCopy": {
-          "description": "Should special text be shown on the offers page.",
-          "type": "boolean"
+          "type": "boolean",
+          "description": "Should special text be shown on the offers page."
         },
         "available": {
+          "type": "integer",
           "description": "The number of codes for this offer that are available for distribution.",
-          "format": "int32",
-          "type": "integer"
+          "format": "int32"
         },
         "description": {
-          "description": "Description of the offer.",
-          "type": "string"
+          "type": "string",
+          "description": "Description of the offer."
         },
         "offerLevel": {
-          "description": "Level of this offer.",
           "type": "string",
           "enumDescriptions": [
             "Unset.",
@@ -2708,11 +2011,44 @@
             "OFFER_LEVEL_LIMIT_5",
             "OFFER_LEVEL_LIMIT_15",
             "OFFER_LEVEL_LIMIT_50"
-          ]
+          ],
+          "description": "Level of this offer."
         },
         "name": {
           "description": "Name of the offer.",
           "type": "string"
+        },
+        "id": {
+          "description": "ID of this offer.",
+          "format": "int64",
+          "type": "string"
+        },
+        "qualifiedCustomersComplete": {
+          "description": "Whether or not the list of qualified customers is definitely complete.",
+          "type": "boolean"
+        },
+        "countryOfferInfos": {
+          "type": "array",
+          "items": {
+            "$ref": "CountryOfferInfo"
+          },
+          "description": "Offer info by country."
+        },
+        "offerType": {
+          "type": "string",
+          "enumDescriptions": [
+            "Unset.",
+            "AdWords spend X get Y.",
+            "Youtube video.",
+            "Spend Match up to Y."
+          ],
+          "enum": [
+            "OFFER_TYPE_UNSPECIFIED",
+            "OFFER_TYPE_SPEND_X_GET_Y",
+            "OFFER_TYPE_VIDEO",
+            "OFFER_TYPE_SPEND_MATCH"
+          ],
+          "description": "Type of offer."
         }
       },
       "id": "AvailableOffer"
@@ -2722,9 +2058,9 @@
       "type": "object",
       "properties": {
         "latitude": {
+          "type": "number",
           "description": "The latitude in degrees. It must be in the range [-90.0, +90.0].",
-          "format": "double",
-          "type": "number"
+          "format": "double"
         },
         "longitude": {
           "description": "The longitude in degrees. It must be in the range [-180.0, +180.0].",
@@ -2735,7 +2071,6 @@
       "id": "LatLng"
     },
     "Money": {
-      "description": "Represents an amount of money with its currency type.",
       "type": "object",
       "properties": {
         "currencyCode": {
@@ -2753,36 +2088,46 @@
           "type": "string"
         }
       },
-      "id": "Money"
+      "id": "Money",
+      "description": "Represents an amount of money with its currency type."
     },
     "AnalyticsSummary": {
-      "description": "Analytics aggregated data for a `Company` for a given date range.",
       "type": "object",
       "properties": {
-        "contactsCount": {
-          "description": "Aggregated number of times users contacted the `Company`\nfor given date range.",
-          "format": "int32",
-          "type": "integer"
-        },
         "profileViewsCount": {
+          "type": "integer",
           "description": "Aggregated number of profile views for the `Company` for given date range.",
-          "format": "int32",
-          "type": "integer"
+          "format": "int32"
         },
         "searchViewsCount": {
           "description": "Aggregated number of times users saw the `Company`\nin Google Partners Search results for given date range.",
           "format": "int32",
           "type": "integer"
+        },
+        "contactsCount": {
+          "type": "integer",
+          "description": "Aggregated number of times users contacted the `Company`\nfor given date range.",
+          "format": "int32"
         }
       },
-      "id": "AnalyticsSummary"
+      "id": "AnalyticsSummary",
+      "description": "Analytics aggregated data for a `Company` for a given date range."
     },
     "LogMessageRequest": {
-      "description": "Request message for\nLogClientMessage.",
       "type": "object",
       "properties": {
+        "clientInfo": {
+          "type": "object",
+          "additionalProperties": {
+            "type": "string"
+          },
+          "description": "Map of client info, such as URL, browser navigator, browser platform, etc."
+        },
+        "requestMetadata": {
+          "$ref": "RequestMetadata",
+          "description": "Current request metadata."
+        },
         "level": {
-          "description": "Message level of client message.",
           "type": "string",
           "enumDescriptions": [
             "Unchosen.",
@@ -2797,37 +2142,77 @@
             "ML_INFO",
             "ML_WARNING",
             "ML_SEVERE"
-          ]
+          ],
+          "description": "Message level of client message."
         },
         "details": {
           "description": "Details about the client message.",
           "type": "string"
-        },
-        "clientInfo": {
-          "description": "Map of client info, such as URL, browser navigator, browser platform, etc.",
-          "type": "object",
-          "additionalProperties": {
-            "type": "string"
-          }
-        },
-        "requestMetadata": {
-          "$ref": "RequestMetadata",
-          "description": "Current request metadata."
         }
       },
-      "id": "LogMessageRequest"
+      "id": "LogMessageRequest",
+      "description": "Request message for\nLogClientMessage."
     },
     "Lead": {
       "description": "A lead resource that represents an advertiser contact for a `Company`. These\nare usually generated via Google Partner Search (the advertiser portal).",
       "type": "object",
       "properties": {
-        "familyName": {
-          "description": "Last name of lead source.",
+        "websiteUrl": {
+          "type": "string",
+          "description": "Website URL of lead source."
+        },
+        "languageCode": {
+          "type": "string",
+          "description": "Language code of the lead's language preference, as defined by\n\u003ca href=\"https://tools.ietf.org/html/bcp47\"\u003eBCP 47\u003c/a\u003e\n(IETF BCP 47, \"Tags for Identifying Languages\")."
+        },
+        "state": {
+          "type": "string",
+          "enumDescriptions": [
+            "Unchosen.",
+            "Lead not yet contacted.",
+            "Lead has been contacted.",
+            "Lead has become a client.",
+            "Lead in a state not covered by other options."
+          ],
+          "enum": [
+            "LEAD_STATE_UNSPECIFIED",
+            "LEAD",
+            "CONTACTED",
+            "CLIENT",
+            "OTHER"
+          ],
+          "description": "The lead's state in relation to the company."
+        },
+        "gpsMotivations": {
+          "type": "array",
+          "items": {
+            "type": "string",
+            "enum": [
+              "GPS_MOTIVATION_UNSPECIFIED",
+              "GPSM_HELP_WITH_ADVERTISING",
+              "GPSM_HELP_WITH_WEBSITE",
+              "GPSM_NO_WEBSITE"
+            ]
+          },
+          "enumDescriptions": [
+            "Unchosen.",
+            "Advertiser needs help with their advertising.",
+            "Advertiser needs help with their website.",
+            "Advertiser does not have a website."
+          ],
+          "description": "List of reasons for using Google Partner Search and creating a lead."
+        },
+        "email": {
+          "description": "Email address of lead source.",
           "type": "string"
         },
+        "familyName": {
+          "type": "string",
+          "description": "Last name of lead source."
+        },
         "comments": {
-          "description": "Comments lead source gave.",
-          "type": "string"
+          "type": "string",
+          "description": "Comments lead source gave."
         },
         "id": {
           "description": "ID of the lead.",
@@ -2843,15 +2228,16 @@
           "type": "string"
         },
         "createTime": {
+          "type": "string",
           "description": "Timestamp of when this lead was created.",
-          "format": "google-datetime",
-          "type": "string"
+          "format": "google-datetime"
         },
         "marketingOptIn": {
-          "description": "Whether or not the lead signed up for marketing emails",
-          "type": "boolean"
+          "type": "boolean",
+          "description": "Whether or not the lead signed up for marketing emails"
         },
         "type": {
+          "type": "string",
           "enumDescriptions": [
             "Unchosen.",
             "Google Partner Search."
@@ -2860,77 +2246,22 @@
             "LEAD_TYPE_UNSPECIFIED",
             "LT_GPS"
           ],
-          "description": "Type of lead.",
-          "type": "string"
+          "description": "Type of lead."
         },
         "givenName": {
-          "description": "First name of lead source.",
-          "type": "string"
+          "type": "string",
+          "description": "First name of lead source."
         },
         "minMonthlyBudget": {
           "$ref": "Money",
           "description": "The minimum monthly budget lead source is willing to spend."
-        },
-        "websiteUrl": {
-          "description": "Website URL of lead source.",
-          "type": "string"
-        },
-        "languageCode": {
-          "description": "Language code of the lead's language preference, as defined by\n\u003ca href=\"https://tools.ietf.org/html/bcp47\"\u003eBCP 47\u003c/a\u003e\n(IETF BCP 47, \"Tags for Identifying Languages\").",
-          "type": "string"
-        },
-        "state": {
-          "description": "The lead's state in relation to the company.",
-          "type": "string",
-          "enumDescriptions": [
-            "Unchosen.",
-            "Lead not yet contacted.",
-            "Lead has been contacted.",
-            "Lead has become a client.",
-            "Lead in a state not covered by other options."
-          ],
-          "enum": [
-            "LEAD_STATE_UNSPECIFIED",
-            "LEAD",
-            "CONTACTED",
-            "CLIENT",
-            "OTHER"
-          ]
-        },
-        "gpsMotivations": {
-          "enumDescriptions": [
-            "Unchosen.",
-            "Advertiser needs help with their advertising.",
-            "Advertiser needs help with their website.",
-            "Advertiser does not have a website."
-          ],
-          "description": "List of reasons for using Google Partner Search and creating a lead.",
-          "type": "array",
-          "items": {
-            "type": "string",
-            "enum": [
-              "GPS_MOTIVATION_UNSPECIFIED",
-              "GPSM_HELP_WITH_ADVERTISING",
-              "GPSM_HELP_WITH_WEBSITE",
-              "GPSM_NO_WEBSITE"
-            ]
-          }
-        },
-        "email": {
-          "description": "Email address of lead source.",
-          "type": "string"
         }
       },
       "id": "Lead"
     },
     "DebugInfo": {
-      "description": "Debug information about this request.",
       "type": "object",
       "properties": {
-        "serviceUrl": {
-          "description": "URL of the service that handled this request.",
-          "type": "string"
-        },
         "serverInfo": {
           "description": "Info about the server that serviced this request.",
           "type": "string"
@@ -2938,51 +2269,60 @@
         "serverTraceInfo": {
           "description": "Server-side debug stack trace.",
           "type": "string"
+        },
+        "serviceUrl": {
+          "type": "string",
+          "description": "URL of the service that handled this request."
         }
       },
-      "id": "DebugInfo"
+      "id": "DebugInfo",
+      "description": "Debug information about this request."
     },
     "ListUserStatesResponse": {
-      "description": "Response message for\nListUserStates.",
       "type": "object",
       "properties": {
         "userStates": {
+          "type": "array",
+          "items": {
+            "type": "string",
+            "enum": [
+              "USER_STATE_UNSPECIFIED",
+              "US_REQUIRES_RECAPTCHA_FOR_GPS_CONTACT"
+            ]
+          },
           "enumDescriptions": [
             "Unchosen.",
             "User must pass \u003ca href=\"https://www.google.com/recaptcha/\"\u003ereCaptcha\u003c/a\u003e to\ncontact a Partner via Google Partner Search."
           ],
-          "description": "User's states.",
-          "type": "array",
-          "items": {
-            "enum": [
-              "USER_STATE_UNSPECIFIED",
-              "US_REQUIRES_RECAPTCHA_FOR_GPS_CONTACT"
-            ],
-            "type": "string"
-          }
+          "description": "User's states."
         },
         "responseMetadata": {
           "$ref": "ResponseMetadata",
           "description": "Current response metadata."
         }
       },
-      "id": "ListUserStatesResponse"
+      "id": "ListUserStatesResponse",
+      "description": "Response message for\nListUserStates."
     },
     "CompanyRelation": {
-      "description": "A CompanyRelation resource representing information about a user's\naffiliation and standing with a company in Partners.",
       "type": "object",
       "properties": {
+        "resolvedTimestamp": {
+          "type": "string",
+          "description": "The timestamp when the user was approved.\n@OutputOnly",
+          "format": "google-datetime"
+        },
         "companyAdmin": {
           "description": "Indicates if the user is an admin for this company.",
           "type": "boolean"
         },
         "address": {
-          "description": "The primary address for this company.",
-          "type": "string"
+          "type": "string",
+          "description": "The primary address for this company."
         },
         "isPending": {
-          "description": "The flag that indicates if the company is pending verification.",
-          "type": "boolean"
+          "type": "boolean",
+          "description": "The flag that indicates if the company is pending verification."
         },
         "creationTime": {
           "description": "The timestamp of when affiliation was requested.\n@OutputOnly",
@@ -2990,7 +2330,6 @@
           "type": "string"
         },
         "state": {
-          "description": "The state of relationship, in terms of approvals.",
           "type": "string",
           "enumDescriptions": [
             "Default unspecified value.",
@@ -3003,7 +2342,8 @@
             "USER_COMPANY_RELATION_STATE_AWAIT_EMAIL",
             "USER_COMPANY_RELATION_STATE_AWAIT_ADMIN",
             "USER_COMPANY_RELATION_STATE_APPROVED"
-          ]
+          ],
+          "description": "The state of relationship, in terms of approvals."
         },
         "name": {
           "description": "The name (in the company's primary language) for the company.",
@@ -3015,32 +2355,26 @@
           "type": "string"
         },
         "segment": {
-          "description": "The segment the company is classified as.",
           "type": "array",
           "items": {
-            "type": "string",
             "enum": [
               "COMPANY_SEGMENT_UNKNOWN",
               "COMPANY_SEGMENT_NAL",
               "COMPANY_SEGMENT_PSP",
               "COMPANY_SEGMENT_PPSP"
-            ]
+            ],
+            "type": "string"
           },
           "enumDescriptions": [
             "Default segment indicates an unknown.",
             "Segment representing a selected group of Partners",
             "Segment representing Premier SMB Partners, an AdWords partnership program.",
             "A segment of Premier SMB Partners that have relationship with Google."
-          ]
-        },
-        "specializationStatus": {
-          "description": "The list of Google Partners specialization statuses for the company.",
-          "type": "array",
-          "items": {
-            "$ref": "SpecializationStatus"
-          }
+          ],
+          "description": "The segment the company is classified as."
         },
         "badgeTier": {
+          "type": "string",
           "enumDescriptions": [
             "Tier badge is not set.",
             "Agency has regular partner badge.",
@@ -3051,32 +2385,34 @@
             "BADGE_TIER_REGULAR",
             "BADGE_TIER_PREMIER"
           ],
-          "description": "Whether the company is a Partner.",
-          "type": "string"
+          "description": "Whether the company is a Partner."
+        },
+        "specializationStatus": {
+          "description": "The list of Google Partners specialization statuses for the company.",
+          "type": "array",
+          "items": {
+            "$ref": "SpecializationStatus"
+          }
         },
         "phoneNumber": {
-          "description": "The phone number for the company's primary address.",
-          "type": "string"
+          "type": "string",
+          "description": "The phone number for the company's primary address."
         },
         "website": {
-          "description": "The website URL for this company.",
-          "type": "string"
+          "type": "string",
+          "description": "The website URL for this company."
         },
         "companyId": {
           "description": "The ID of the company. There may be no id if this is a\npending company.5",
           "type": "string"
         },
         "logoUrl": {
-          "description": "A URL to a profile photo, e.g. a G+ profile photo.",
-          "type": "string"
-        },
-        "resolvedTimestamp": {
-          "description": "The timestamp when the user was approved.\n@OutputOnly",
-          "format": "google-datetime",
-          "type": "string"
+          "type": "string",
+          "description": "A URL to a profile photo, e.g. a G+ profile photo."
         }
       },
-      "id": "CompanyRelation"
+      "id": "CompanyRelation",
+      "description": "A CompanyRelation resource representing information about a user's\naffiliation and standing with a company in Partners."
     },
     "Date": {
       "description": "Represents a whole calendar date, e.g. date of birth. The time of day and\ntime zone are either specified elsewhere or are not significant. The date\nis relative to the Proleptic Gregorian Calendar. The day may be 0 to\nrepresent a year and month where the day is not significant, e.g. credit card\nexpiration date. The year may be 0 to represent a month and day independent\nof year, e.g. anniversary date. Related types are google.type.TimeOfDay\nand `google.protobuf.Timestamp`.",
@@ -3093,9 +2429,9 @@
           "type": "integer"
         },
         "month": {
+          "type": "integer",
           "description": "Month of year. Must be from 1 to 12.",
-          "format": "int32",
-          "type": "integer"
+          "format": "int32"
         }
       },
       "id": "Date"
@@ -3115,24 +2451,15 @@
           "type": "string"
         },
         "trafficSubId": {
-          "description": "Second level identifier to indicate where the traffic comes from.\nAn identifier has multiple letters created by a team which redirected the\ntraffic to us.",
-          "type": "string"
+          "type": "string",
+          "description": "Second level identifier to indicate where the traffic comes from.\nAn identifier has multiple letters created by a team which redirected the\ntraffic to us."
         }
       },
       "id": "TrafficSource"
     },
     "RequestMetadata": {
-      "description": "Common data that is in each API request.",
       "type": "object",
       "properties": {
-        "userOverrides": {
-          "$ref": "UserOverrides",
-          "description": "Values to use instead of the user's respective defaults for the current\nrequest. These are only honored by whitelisted products."
-        },
-        "partnersSessionId": {
-          "description": "Google Partners session ID.",
-          "type": "string"
-        },
         "experimentIds": {
           "description": "Experiment IDs the current request belongs to.",
           "type": "array",
@@ -3141,47 +2468,49 @@
           }
         },
         "trafficSource": {
-          "description": "Source of traffic for the current request.",
-          "$ref": "TrafficSource"
+          "$ref": "TrafficSource",
+          "description": "Source of traffic for the current request."
         },
         "locale": {
-          "description": "Locale to use for the current request.",
+          "type": "string",
+          "description": "Locale to use for the current request."
+        },
+        "userOverrides": {
+          "$ref": "UserOverrides",
+          "description": "Values to use instead of the user's respective defaults for the current\nrequest. These are only honored by whitelisted products."
+        },
+        "partnersSessionId": {
+          "description": "Google Partners session ID.",
           "type": "string"
         }
       },
-      "id": "RequestMetadata"
+      "id": "RequestMetadata",
+      "description": "Common data that is in each API request."
     },
     "CreateLeadRequest": {
       "description": "Request message for CreateLead.",
       "type": "object",
       "properties": {
-        "requestMetadata": {
-          "$ref": "RequestMetadata",
-          "description": "Current request metadata."
-        },
         "lead": {
           "$ref": "Lead",
           "description": "The lead resource. The `LeadType` must not be `LEAD_TYPE_UNSPECIFIED`\nand either `email` or `phone_number` must be provided."
         },
         "recaptchaChallenge": {
-          "description": "\u003ca href=\"https://www.google.com/recaptcha/\"\u003ereCaptcha\u003c/a\u003e challenge info.",
-          "$ref": "RecaptchaChallenge"
+          "$ref": "RecaptchaChallenge",
+          "description": "\u003ca href=\"https://www.google.com/recaptcha/\"\u003ereCaptcha\u003c/a\u003e challenge info."
+        },
+        "requestMetadata": {
+          "$ref": "RequestMetadata",
+          "description": "Current request metadata."
         }
       },
       "id": "CreateLeadRequest"
     },
     "EventData": {
-      "description": "Key value data pair for an event.",
       "type": "object",
       "properties": {
-        "values": {
-          "description": "Data values.",
-          "type": "array",
-          "items": {
-            "type": "string"
-          }
-        },
         "key": {
+          "type": "string",
           "enumDescriptions": [
             "Unchosen.",
             "Action data.",
@@ -3262,25 +2591,22 @@
             "ELEMENT_FOCUS",
             "PROGRESS"
           ],
-          "description": "Data type.",
-          "type": "string"
+          "description": "Data type."
+        },
+        "values": {
+          "description": "Data values.",
+          "type": "array",
+          "items": {
+            "type": "string"
+          }
         }
       },
-      "id": "EventData"
+      "id": "EventData",
+      "description": "Key value data pair for an event."
     },
     "ExamStatus": {
-      "description": "A user's information on a specific exam.",
       "type": "object",
       "properties": {
-        "passed": {
-          "description": "Whether this exam has been passed and not expired.",
-          "type": "boolean"
-        },
-        "taken": {
-          "description": "The date the user last taken this exam.",
-          "format": "google-datetime",
-          "type": "string"
-        },
         "warning": {
           "description": "Whether this exam is in the state of warning.",
           "type": "boolean"
@@ -3296,6 +2622,7 @@
           "type": "string"
         },
         "examType": {
+          "type": "string",
           "enumDescriptions": [
             "Unchosen.",
             "Adwords Fundamentals exam.",
@@ -3322,17 +2649,27 @@
             "CET_DIGITAL_SALES",
             "CET_MOBILE_SITES"
           ],
-          "description": "The type of the exam.",
-          "type": "string"
+          "description": "The type of the exam."
+        },
+        "passed": {
+          "type": "boolean",
+          "description": "Whether this exam has been passed and not expired."
+        },
+        "taken": {
+          "type": "string",
+          "description": "The date the user last taken this exam.",
+          "format": "google-datetime"
         }
       },
-      "id": "ExamStatus"
+      "id": "ExamStatus",
+      "description": "A user's information on a specific exam."
     },
     "ListOffersResponse": {
       "description": "Response for ListOffer.",
       "type": "object",
       "properties": {
         "noOfferReason": {
+          "type": "string",
           "enumDescriptions": [
             "Unset.",
             "Not an MCC.",
@@ -3345,15 +2682,14 @@
             "NO_OFFER_REASON_LIMIT_REACHED",
             "NO_OFFER_REASON_INELIGIBLE"
           ],
-          "description": "Reason why no Offers are available.",
-          "type": "string"
+          "description": "Reason why no Offers are available."
         },
         "availableOffers": {
-          "description": "Available Offers to be distributed.",
           "type": "array",
           "items": {
             "$ref": "AvailableOffer"
-          }
+          },
+          "description": "Available Offers to be distributed."
         },
         "responseMetadata": {
           "$ref": "ResponseMetadata",
@@ -3363,24 +2699,21 @@
       "id": "ListOffersResponse"
     },
     "CountryOfferInfo": {
-      "description": "Offer info by country.",
       "type": "object",
       "properties": {
+        "getYAmount": {
+          "type": "string",
+          "description": "(localized) Get Y amount for that country's offer."
+        },
         "offerCountryCode": {
-          "description": "Country code for which offer codes may be requested.",
-          "type": "string"
+          "type": "string",
+          "description": "Country code for which offer codes may be requested."
         },
         "spendXAmount": {
           "description": "(localized) Spend X amount for that country's offer.",
           "type": "string"
         },
         "offerType": {
-          "enumDescriptions": [
-            "Unset.",
-            "AdWords spend X get Y.",
-            "Youtube video.",
-            "Spend Match up to Y."
-          ],
           "enum": [
             "OFFER_TYPE_UNSPECIFIED",
             "OFFER_TYPE_SPEND_X_GET_Y",
@@ -3388,33 +2721,36 @@
             "OFFER_TYPE_SPEND_MATCH"
           ],
           "description": "Type of offer country is eligible for.",
-          "type": "string"
-        },
-        "getYAmount": {
-          "description": "(localized) Get Y amount for that country's offer.",
-          "type": "string"
+          "type": "string",
+          "enumDescriptions": [
+            "Unset.",
+            "AdWords spend X get Y.",
+            "Youtube video.",
+            "Spend Match up to Y."
+          ]
         }
       },
-      "id": "CountryOfferInfo"
+      "id": "CountryOfferInfo",
+      "description": "Offer info by country."
     },
     "ListCompaniesResponse": {
       "description": "Response message for\nListCompanies.",
       "type": "object",
       "properties": {
         "nextPageToken": {
-          "description": "A token to retrieve next page of results.\nPass this value in the `ListCompaniesRequest.page_token` field in the\nsubsequent call to\nListCompanies to retrieve the\nnext page of results.",
-          "type": "string"
+          "type": "string",
+          "description": "A token to retrieve next page of results.\nPass this value in the `ListCompaniesRequest.page_token` field in the\nsubsequent call to\nListCompanies to retrieve the\nnext page of results."
         },
         "responseMetadata": {
-          "description": "Current response metadata.",
-          "$ref": "ResponseMetadata"
+          "$ref": "ResponseMetadata",
+          "description": "Current response metadata."
         },
         "companies": {
-          "description": "The list of companies.",
           "type": "array",
           "items": {
             "$ref": "Company"
-          }
+          },
+          "description": "The list of companies."
         }
       },
       "id": "ListCompaniesResponse"
@@ -3423,25 +2759,43 @@
       "description": "Customers qualified for an offer.",
       "type": "object",
       "properties": {
-        "adwordsUrl": {
-          "description": "URL to the customer's AdWords page.",
+        "getYAmount": {
+          "description": "Formatted Get Y amount with currency code.",
           "type": "string"
         },
+        "name": {
+          "type": "string",
+          "description": "Name of the customer."
+        },
+        "spendXAmount": {
+          "type": "string",
+          "description": "Formatted Spend X amount with currency code."
+        },
+        "adwordsUrl": {
+          "type": "string",
+          "description": "URL to the customer's AdWords page."
+        },
+        "countryCode": {
+          "type": "string",
+          "description": "Country code of the customer."
+        },
         "eligibilityDaysLeft": {
           "description": "Days the customer is still eligible.",
           "format": "int32",
           "type": "integer"
         },
-        "countryCode": {
-          "description": "Country code of the customer.",
-          "type": "string"
-        },
-        "externalCid": {
-          "description": "External CID for the customer.",
-          "format": "int64",
-          "type": "string"
+        "creationTime": {
+          "type": "string",
+          "description": "Time the customer was created.",
+          "format": "google-datetime"
         },
         "offerType": {
+          "enum": [
+            "OFFER_TYPE_UNSPECIFIED",
+            "OFFER_TYPE_SPEND_X_GET_Y",
+            "OFFER_TYPE_VIDEO",
+            "OFFER_TYPE_SPEND_MATCH"
+          ],
           "description": "Type of the offer",
           "type": "string",
           "enumDescriptions": [
@@ -3449,29 +2803,11 @@
             "AdWords spend X get Y.",
             "Youtube video.",
             "Spend Match up to Y."
-          ],
-          "enum": [
-            "OFFER_TYPE_UNSPECIFIED",
-            "OFFER_TYPE_SPEND_X_GET_Y",
-            "OFFER_TYPE_VIDEO",
-            "OFFER_TYPE_SPEND_MATCH"
           ]
         },
-        "creationTime": {
-          "description": "Time the customer was created.",
-          "format": "google-datetime",
-          "type": "string"
-        },
-        "getYAmount": {
-          "description": "Formatted Get Y amount with currency code.",
-          "type": "string"
-        },
-        "name": {
-          "description": "Name of the customer.",
-          "type": "string"
-        },
-        "spendXAmount": {
-          "description": "Formatted Spend X amount with currency code.",
+        "externalCid": {
+          "description": "External CID for the customer.",
+          "format": "int64",
           "type": "string"
         }
       },
@@ -3481,18 +2817,8 @@
       "description": "Google Partners certification status.",
       "type": "object",
       "properties": {
-        "isCertified": {
-          "description": "Whether certification is passing.",
-          "type": "boolean"
-        },
-        "examStatuses": {
-          "description": "List of certification exam statuses.",
-          "type": "array",
-          "items": {
-            "$ref": "CertificationExamStatus"
-          }
-        },
         "type": {
+          "type": "string",
           "enumDescriptions": [
             "Unchosen.",
             "AdWords certified.",
@@ -3521,13 +2847,23 @@
             "CT_ADWORDS_DISPLAY",
             "CT_MOBILE_SITES"
           ],
-          "description": "The type of the certification.",
-          "type": "string"
+          "description": "The type of the certification."
         },
         "userCount": {
+          "type": "integer",
           "description": "Number of people who are certified,",
-          "format": "int32",
-          "type": "integer"
+          "format": "int32"
+        },
+        "isCertified": {
+          "type": "boolean",
+          "description": "Whether certification is passing."
+        },
+        "examStatuses": {
+          "description": "List of certification exam statuses.",
+          "type": "array",
+          "items": {
+            "$ref": "CertificationExamStatus"
+          }
         }
       },
       "id": "CertificationStatus"
@@ -3541,11 +2877,11 @@
           "type": "string"
         },
         "countryCodes": {
-          "description": "List of country codes for the localized company info.",
           "type": "array",
           "items": {
             "type": "string"
-          }
+          },
+          "description": "List of country codes for the localized company info."
         },
         "overview": {
           "description": "Localized brief description that the company uses to advertise themselves.",
@@ -3559,15 +2895,15 @@
       "id": "LocalizedCompanyInfo"
     },
     "LogUserEventResponse": {
-      "description": "Response message for\nLogUserEvent.",
       "type": "object",
       "properties": {
         "responseMetadata": {
-          "description": "Current response metadata.",
-          "$ref": "ResponseMetadata"
+          "$ref": "ResponseMetadata",
+          "description": "Current response metadata."
         }
       },
-      "id": "LogUserEventResponse"
+      "id": "LogUserEventResponse",
+      "description": "Response message for\nLogUserEvent."
     },
     "ListOffersHistoryResponse": {
       "description": "Response for ListOfferHistory.",
@@ -3583,8 +2919,8 @@
           "type": "integer"
         },
         "showingEntireCompany": {
-          "description": "True if this response is showing entire company history.",
-          "type": "boolean"
+          "type": "boolean",
+          "description": "True if this response is showing entire company history."
         },
         "offers": {
           "description": "Historical offers meeting request.",
@@ -3594,8 +2930,8 @@
           }
         },
         "nextPageToken": {
-          "description": "Supply this token in a ListOffersHistoryRequest to retrieve the next page.",
-          "type": "string"
+          "type": "string",
+          "description": "Supply this token in a ListOffersHistoryRequest to retrieve the next page."
         },
         "responseMetadata": {
           "$ref": "ResponseMetadata",
@@ -3603,6 +2939,655 @@
         }
       },
       "id": "ListOffersHistoryResponse"
+    },
+    "LogMessageResponse": {
+      "type": "object",
+      "properties": {
+        "responseMetadata": {
+          "$ref": "ResponseMetadata",
+          "description": "Current response metadata."
+        }
+      },
+      "id": "LogMessageResponse",
+      "description": "Response message for\nLogClientMessage."
+    },
+    "SpecializationStatus": {
+      "type": "object",
+      "properties": {
+        "badgeSpecialization": {
+          "type": "string",
+          "enumDescriptions": [
+            "Unknown specialization",
+            "AdWords Search specialization",
+            "AdWords Display specialization",
+            "AdWords Mobile specialization",
+            "AdWords Video specialization",
+            "AdWords Shopping specialization"
+          ],
+          "enum": [
+            "BADGE_SPECIALIZATION_UNKNOWN",
+            "BADGE_SPECIALIZATION_ADWORDS_SEARCH",
+            "BADGE_SPECIALIZATION_ADWORDS_DISPLAY",
+            "BADGE_SPECIALIZATION_ADWORDS_MOBILE",
+            "BADGE_SPECIALIZATION_ADWORDS_VIDEO",
+            "BADGE_SPECIALIZATION_ADWORDS_SHOPPING"
+          ],
+          "description": "The specialization this status is for."
+        },
+        "badgeSpecializationState": {
+          "enum": [
+            "BADGE_SPECIALIZATION_STATE_UNKNOWN",
+            "BADGE_SPECIALIZATION_STATE_PASSED",
+            "BADGE_SPECIALIZATION_STATE_NOT_PASSED",
+            "BADGE_SPECIALIZATION_STATE_IN_GRACE"
+          ],
+          "description": "State of agency specialization.",
+          "type": "string",
+          "enumDescriptions": [
+            "Unknown state",
+            "Specialization passed",
+            "Specialization not passed",
+            "Specialization in grace"
+          ]
+        }
+      },
+      "id": "SpecializationStatus",
+      "description": "Agency specialization status"
+    },
+    "Certification": {
+      "type": "object",
+      "properties": {
+        "lastAchieved": {
+          "description": "The date the user last achieved certification.",
+          "format": "google-datetime",
+          "type": "string"
+        },
+        "achieved": {
+          "type": "boolean",
+          "description": "Whether this certification has been achieved."
+        },
+        "expiration": {
+          "type": "string",
+          "description": "Date this certification is due to expire.",
+          "format": "google-datetime"
+        },
+        "warning": {
+          "description": "Whether this certification is in the state of warning.",
+          "type": "boolean"
+        },
+        "certificationType": {
+          "type": "string",
+          "enumDescriptions": [
+            "Unchosen.",
+            "AdWords certified.",
+            "YouTube certified.",
+            "VideoAds certified.",
+            "Analytics certified.",
+            "DoubleClick certified.",
+            "Shopping certified.",
+            "Mobile certified.",
+            "Digital sales certified.",
+            "AdWords Search certified.",
+            "AdWords Display certified.",
+            "Mobile Sites certified."
+          ],
+          "enum": [
+            "CERTIFICATION_TYPE_UNSPECIFIED",
+            "CT_ADWORDS",
+            "CT_YOUTUBE",
+            "CT_VIDEOADS",
+            "CT_ANALYTICS",
+            "CT_DOUBLECLICK",
+            "CT_SHOPPING",
+            "CT_MOBILE",
+            "CT_DIGITAL_SALES",
+            "CT_ADWORDS_SEARCH",
+            "CT_ADWORDS_DISPLAY",
+            "CT_MOBILE_SITES"
+          ],
+          "description": "The type of certification, the area of expertise."
+        }
+      },
+      "id": "Certification",
+      "description": "A user's information on a specific certification."
+    },
+    "User": {
+      "description": "A resource representing a user of the Partners platform.",
+      "type": "object",
+      "properties": {
+        "examStatus": {
+          "description": "The list of exams the user ever taken. For each type of exam, only one\nentry is listed.",
+          "type": "array",
+          "items": {
+            "$ref": "ExamStatus"
+          }
+        },
+        "id": {
+          "type": "string",
+          "description": "The ID of the user."
+        },
+        "publicProfile": {
+          "$ref": "PublicProfile",
+          "description": "Information about a user's external public profile outside Google Partners."
+        },
+        "companyVerificationEmail": {
+          "description": "The email address used by the user used for company verification.\n@OutputOnly",
+          "type": "string"
+        },
+        "certificationStatus": {
+          "type": "array",
+          "items": {
+            "$ref": "Certification"
+          },
+          "description": "The list of achieved certifications. These are calculated based on exam\nresults and other requirements.\n@OutputOnly"
+        },
+        "profile": {
+          "$ref": "UserProfile",
+          "description": "The profile information of a Partners user, contains all the directly\neditable user information."
+        },
+        "company": {
+          "$ref": "CompanyRelation",
+          "description": "The company that the user is associated with.\nIf not present, the user is not associated with any company."
+        },
+        "lastAccessTime": {
+          "description": "The most recent time the user interacted with the Partners site.\n@OutputOnly",
+          "format": "google-datetime",
+          "type": "string"
+        },
+        "availableAdwordsManagerAccounts": {
+          "type": "array",
+          "items": {
+            "$ref": "AdWordsManagerAccountInfo"
+          },
+          "description": "This is the list of AdWords Manager Accounts the user has edit access to.\nIf the user has edit access to multiple accounts, the user can choose the\npreferred account and we use this when a personal account is needed. Can\nbe empty meaning the user has access to no accounts.\n@OutputOnly"
+        },
+        "primaryEmails": {
+          "type": "array",
+          "items": {
+            "type": "string"
+          },
+          "description": "The list of emails the user has access to/can select as primary.\n@OutputOnly"
+        }
+      },
+      "id": "User"
+    },
+    "ListAnalyticsResponse": {
+      "type": "object",
+      "properties": {
+        "analytics": {
+          "description": "The list of analytics.\nSorted in ascending order of\nAnalytics.event_date.",
+          "type": "array",
+          "items": {
+            "$ref": "Analytics"
+          }
+        },
+        "nextPageToken": {
+          "description": "A token to retrieve next page of results.\nPass this value in the `ListAnalyticsRequest.page_token` field in the\nsubsequent call to\nListAnalytics to retrieve the\nnext page of results.",
+          "type": "string"
+        },
+        "responseMetadata": {
+          "$ref": "ResponseMetadata",
+          "description": "Current response metadata."
+        },
+        "analyticsSummary": {
+          "$ref": "AnalyticsSummary",
+          "description": "Aggregated information across the response's\nanalytics."
+        }
+      },
+      "id": "ListAnalyticsResponse",
+      "description": "Response message for\nListAnalytics."
+    },
+    "ListLeadsResponse": {
+      "type": "object",
+      "properties": {
+        "leads": {
+          "type": "array",
+          "items": {
+            "$ref": "Lead"
+          },
+          "description": "The list of leads."
+        },
+        "nextPageToken": {
+          "description": "A token to retrieve next page of results.\nPass this value in the `ListLeadsRequest.page_token` field in the\nsubsequent call to\nListLeads to retrieve the\nnext page of results.",
+          "type": "string"
+        },
+        "responseMetadata": {
+          "$ref": "ResponseMetadata",
+          "description": "Current response metadata."
+        },
+        "totalSize": {
+          "type": "integer",
+          "description": "The total count of leads for the given company.",
+          "format": "int32"
+        }
+      },
+      "id": "ListLeadsResponse",
+      "description": "Response message for ListLeads."
+    },
+    "Company": {
+      "type": "object",
+      "properties": {
+        "primaryAdwordsManagerAccountId": {
+          "type": "string",
+          "description": "The Primary AdWords Manager Account id.",
+          "format": "int64"
+        },
+        "name": {
+          "description": "The name of the company.",
+          "type": "string"
+        },
+        "localizedInfos": {
+          "type": "array",
+          "items": {
+            "$ref": "LocalizedCompanyInfo"
+          },
+          "description": "The list of localized info for the company."
+        },
+        "id": {
+          "type": "string",
+          "description": "The ID of the company."
+        },
+        "certificationStatuses": {
+          "type": "array",
+          "items": {
+            "$ref": "CertificationStatus"
+          },
+          "description": "The list of Google Partners certification statuses for the company."
+        },
+        "originalMinMonthlyBudget": {
+          "$ref": "Money",
+          "description": "The unconverted minimum monthly budget that the company accepts for partner\nbusiness."
+        },
+        "publicProfile": {
+          "$ref": "PublicProfile",
+          "description": "Basic information from the company's public profile."
+        },
+        "services": {
+          "type": "array",
+          "items": {
+            "enum": [
+              "SERVICE_UNSPECIFIED",
+              "S_ADVANCED_ADWORDS_SUPPORT",
+              "S_ADVERTISING_ON_GOOGLE",
+              "S_AN_ENHANCED_WEBSITE",
+              "S_AN_ONLINE_MARKETING_PLAN",
+              "S_MOBILE_AND_VIDEO_ADS",
+              "S_MOBILE_WEBSITE_SERVICES"
+            ],
+            "type": "string"
+          },
+          "enumDescriptions": [
+            "Unchosen.",
+            "Help with advanced AdWords support.",
+            "Help with advertising on Google.",
+            "Help with an enhanced website.",
+            "Help with an online marketing plan.",
+            "Help with mobile and video ads.",
+            "Help with mobile websites."
+          ],
+          "description": "Services the company can help with."
+        },
+        "primaryLocation": {
+          "$ref": "Location",
+          "description": "The primary location of the company."
+        },
+        "ranks": {
+          "type": "array",
+          "items": {
+            "$ref": "Rank"
+          },
+          "description": "Information related to the ranking of the company within the list of\ncompanies."
+        },
+        "badgeTier": {
+          "type": "string",
+          "enumDescriptions": [
+            "Tier badge is not set.",
+            "Agency has regular partner badge.",
+            "Agency has premier badge."
+          ],
+          "enum": [
+            "BADGE_TIER_NONE",
+            "BADGE_TIER_REGULAR",
+            "BADGE_TIER_PREMIER"
+          ],
+          "description": "Partner badge tier"
+        },
+        "specializationStatus": {
+          "description": "The list of Google Partners specialization statuses for the company.",
+          "type": "array",
+          "items": {
+            "$ref": "SpecializationStatus"
+          }
+        },
+        "companyTypes": {
+          "type": "array",
+          "items": {
+            "enum": [
+              "COMPANY_TYPE_UNSPECIFIED",
+              "FULL_SERVICE_AGENCY",
+              "MEDIA_AGENCY",
+              "CREATIVE_AGENCY",
+              "CDIGITAL_AGENCY",
+              "SEM_SEO",
+              "PERFORMANCE_MARKETING",
+              "ADVERTISING_TOOL_DEVELOPMENT",
+              "PR",
+              "SELF_MANAGED",
+              "RESELLER"
+            ],
+            "type": "string"
+          },
+          "enumDescriptions": [
+            "Unchosen.",
+            "Handles all aspects of the advertising process.",
+            "Focuses solely on an advertiser's media placement.",
+            "Plans/executes advertising campaigns.",
+            "Like a\nFULL_SERVICE_AGENCY,\nbut specializing in digital.",
+            "Increases visibility in search engine result pages.",
+            "Drives promotional efforts for immediate impact.",
+            "Focuses on bid management, conversion, reporting.",
+            "Establishes favorable relationship with public through low/no-cost\ncommunications.",
+            "Does not manage other company's accounts, manages own marketing programs.",
+            "Full-service AdWords account management for local businesses."
+          ],
+          "description": "Company type labels listed on the company's profile."
+        },
+        "autoApprovalEmailDomains": {
+          "description": "Email domains that allow users with a matching email address to get\nauto-approved for associating with this company.",
+          "type": "array",
+          "items": {
+            "type": "string"
+          }
+        },
+        "primaryLanguageCode": {
+          "description": "The primary language code of the company, as defined by\n\u003ca href=\"https://tools.ietf.org/html/bcp47\"\u003eBCP 47\u003c/a\u003e\n(IETF BCP 47, \"Tags for Identifying Languages\").",
+          "type": "string"
+        },
+        "profileStatus": {
+          "type": "string",
+          "enumDescriptions": [
+            "Unchosen.",
+            "Company profile does not show up publicly.",
+            "Company profile can only be viewed by the profile's URL\nand not by Google Partner Search.",
+            "Company profile can be viewed by the profile's URL\nand by Google Partner Search."
+          ],
+          "enum": [
+            "COMPANY_PROFILE_STATUS_UNSPECIFIED",
+            "HIDDEN",
+            "PUBLISHED",
+            "SEARCHABLE"
+          ],
+          "description": "The public viewability status of the company's profile."
+        },
+        "locations": {
+          "type": "array",
+          "items": {
+            "$ref": "Location"
+          },
+          "description": "The list of all company locations.\nIf set, must include the\nprimary_location\nin the list."
+        },
+        "convertedMinMonthlyBudget": {
+          "$ref": "Money",
+          "description": "The minimum monthly budget that the company accepts for partner business,\nconverted to the requested currency code."
+        },
+        "industries": {
+          "description": "Industries the company can help with.",
+          "type": "array",
+          "items": {
+            "type": "string",
+            "enum": [
+              "INDUSTRY_UNSPECIFIED",
+              "I_AUTOMOTIVE",
+              "I_BUSINESS_TO_BUSINESS",
+              "I_CONSUMER_PACKAGED_GOODS",
+              "I_EDUCATION",
+              "I_FINANCE",
+              "I_HEALTHCARE",
+              "I_MEDIA_AND_ENTERTAINMENT",
+              "I_RETAIL",
+              "I_TECHNOLOGY",
+              "I_TRAVEL"
+            ]
+          },
+          "enumDescriptions": [
+            "Unchosen.",
+            "The automotive industry.",
+            "The business-to-business industry.",
+            "The consumer packaged goods industry.",
+            "The education industry.",
+            "The finance industry.",
+            "The healthcare industry.",
+            "The media and entertainment industry.",
+            "The retail industry.",
+            "The technology industry.",
+            "The travel industry."
+          ]
+        },
+        "websiteUrl": {
+          "description": "URL of the company's website.",
+          "type": "string"
+        },
+        "additionalWebsites": {
+          "description": "URL of the company's additional websites used to verify the dynamic badges.\nThese are stored as full URLs as entered by the user, but only the TLD will\nbe used for the actual verification.",
+          "type": "array",
+          "items": {
+            "type": "string"
+          }
+        }
+      },
+      "id": "Company",
+      "description": "A company resource in the Google Partners API. Once certified, it qualifies\nfor being searched by advertisers."
+    },
+    "CreateLeadResponse": {
+      "description": "Response message for CreateLead.",
+      "type": "object",
+      "properties": {
+        "lead": {
+          "$ref": "Lead",
+          "description": "Lead that was created depending on the outcome of\n\u003ca href=\"https://www.google.com/recaptcha/\"\u003ereCaptcha\u003c/a\u003e validation."
+        },
+        "recaptchaStatus": {
+          "enum": [
+            "RECAPTCHA_STATUS_UNSPECIFIED",
+            "RS_NOT_NEEDED",
+            "RS_PASSED",
+            "RS_FAILED"
+          ],
+          "description": "The outcome of \u003ca href=\"https://www.google.com/recaptcha/\"\u003ereCaptcha\u003c/a\u003e\nvalidation.",
+          "type": "string",
+          "enumDescriptions": [
+            "Unchosen.",
+            "No reCaptcha validation needed.",
+            "reCaptcha challenge passed.",
+            "reCaptcha challenge failed."
+          ]
+        },
+        "responseMetadata": {
+          "$ref": "ResponseMetadata",
+          "description": "Current response metadata."
+        }
+      },
+      "id": "CreateLeadResponse"
+    },
+    "GetCompanyResponse": {
+      "description": "Response message for GetCompany.",
+      "type": "object",
+      "properties": {
+        "company": {
+          "$ref": "Company",
+          "description": "The company."
+        },
+        "responseMetadata": {
+          "$ref": "ResponseMetadata",
+          "description": "Current response metadata."
+        }
+      },
+      "id": "GetCompanyResponse"
+    },
+    "Location": {
+      "type": "object",
+      "properties": {
+        "address": {
+          "type": "string",
+          "description": "The single string version of the address."
+        },
+        "dependentLocality": {
+          "description": "Dependent locality or sublocality. Used for UK dependent localities, or\nneighborhoods or boroughs in other locations.",
+          "type": "string"
+        },
+        "regionCode": {
+          "type": "string",
+          "description": "CLDR (Common Locale Data Repository) region code ."
+        },
+        "postalCode": {
+          "type": "string",
+          "description": "Values are frequently alphanumeric."
+        },
+        "sortingCode": {
+          "description": "Use of this code is very country-specific, but will refer to a secondary\nclassification code for sorting mail.",
+          "type": "string"
+        },
+        "languageCode": {
+          "description": "Language code of the address. Should be in BCP 47 format.",
+          "type": "string"
+        },
+        "addressLine": {
+          "description": "The following address lines represent the most specific part of any\naddress.",
+          "type": "array",
+          "items": {
+            "type": "string"
+          }
+        },
+        "locality": {
+          "type": "string",
+          "description": "Generally refers to the city/town portion of an address."
+        },
+        "administrativeArea": {
+          "description": "Top-level administrative subdivision of this country.",
+          "type": "string"
+        },
+        "latLng": {
+          "$ref": "LatLng",
+          "description": "The latitude and longitude of the location, in degrees."
+        }
+      },
+      "id": "Location",
+      "description": "A location with address and geographic coordinates. May optionally contain a\ndetailed (multi-field) version of the address."
+    },
+    "CertificationExamStatus": {
+      "type": "object",
+      "properties": {
+        "type": {
+          "type": "string",
+          "enumDescriptions": [
+            "Unchosen.",
+            "Adwords Fundamentals exam.",
+            "AdWords advanced search exam.",
+            "AdWords advanced display exam.",
+            "VideoAds exam.",
+            "DoubleClick exam.",
+            "Analytics exam.",
+            "Shopping exam.",
+            "Mobile exam.",
+            "Digital Sales exam.",
+            "Mobile Sites exam."
+          ],
+          "enum": [
+            "CERTIFICATION_EXAM_TYPE_UNSPECIFIED",
+            "CET_ADWORDS_FUNDAMENTALS",
+            "CET_ADWORDS_ADVANCED_SEARCH",
+            "CET_ADWORDS_ADVANCED_DISPLAY",
+            "CET_VIDEO_ADS",
+            "CET_DOUBLECLICK",
+            "CET_ANALYTICS",
+            "CET_SHOPPING",
+            "CET_MOBILE",
+            "CET_DIGITAL_SALES",
+            "CET_MOBILE_SITES"
+          ],
+          "description": "The type of certification exam."
+        },
+        "numberUsersPass": {
+          "description": "The number of people who have passed the certification exam.",
+          "format": "int32",
+          "type": "integer"
+        }
+      },
+      "id": "CertificationExamStatus",
+      "description": "Status for a Google Partners certification exam."
+    },
+    "ExamToken": {
+      "type": "object",
+      "properties": {
+        "examId": {
+          "type": "string",
+          "description": "The id of the exam the token is for.",
+          "format": "int64"
+        },
+        "token": {
+          "type": "string",
+          "description": "The token, only present if the user has access to the exam."
+        },
+        "examType": {
+          "type": "string",
+          "enumDescriptions": [
+            "Unchosen.",
+            "Adwords Fundamentals exam.",
+            "AdWords advanced search exam.",
+            "AdWords advanced display exam.",
+            "VideoAds exam.",
+            "DoubleClick exam.",
+            "Analytics exam.",
+            "Shopping exam.",
+            "Mobile exam.",
+            "Digital Sales exam.",
+            "Mobile Sites exam."
+          ],
+          "enum": [
+            "CERTIFICATION_EXAM_TYPE_UNSPECIFIED",
+            "CET_ADWORDS_FUNDAMENTALS",
+            "CET_ADWORDS_ADVANCED_SEARCH",
+            "CET_ADWORDS_ADVANCED_DISPLAY",
+            "CET_VIDEO_ADS",
+            "CET_DOUBLECLICK",
+            "CET_ANALYTICS",
+            "CET_SHOPPING",
+            "CET_MOBILE",
+            "CET_DIGITAL_SALES",
+            "CET_MOBILE_SITES"
+          ],
+          "description": "The type of the exam the token belongs to."
+        }
+      },
+      "id": "ExamToken",
+      "description": "A token that allows a user to take an exam."
+    },
+    "OptIns": {
+      "type": "object",
+      "properties": {
+        "specialOffers": {
+          "description": "An opt-in about receiving email regarding new features and products.",
+          "type": "boolean"
+        },
+        "performanceSuggestions": {
+          "description": "An opt-in about receiving email with customized AdWords campaign management\ntips.",
+          "type": "boolean"
+        },
+        "physicalMail": {
+          "description": "An opt-in to receive special promotional gifts and material in the mail.",
+          "type": "boolean"
+        },
+        "phoneContact": {
+          "type": "boolean",
+          "description": "An opt-in to allow recieivng phone calls about their Partners account."
+        },
+        "marketComm": {
+          "type": "boolean",
+          "description": "An opt-in about receiving email from Partners marketing teams. Includes\nmember-only events and special promotional offers for Google products."
+        }
+      },
+      "id": "OptIns",
+      "description": "A set of opt-ins for a user."
     }
   },
   "protocol": "rest",
@@ -3610,5 +3595,22 @@
     "x32": "http://www.google.com/images/icons/product/search-32.gif",
     "x16": "http://www.google.com/images/icons/product/search-16.gif"
   },
-  "version": "v2"
+  "version": "v2",
+  "baseUrl": "https://partners.googleapis.com/",
+  "canonicalName": "Partners",
+  "servicePath": "",
+  "description": "Searches certified companies and creates contact leads with them, and also audits the usage of clients.",
+  "kind": "discovery#restDescription",
+  "rootUrl": "https://partners.googleapis.com/",
+  "basePath": "",
+  "ownerDomain": "google.com",
+  "name": "partners",
+  "batchPath": "batch",
+  "id": "partners:v2",
+  "documentationLink": "https://developers.google.com/partners/",
+  "revision": "20170316",
+  "title": "Google Partners API",
+  "ownerName": "Google",
+  "discoveryVersion": "v1",
+  "version_module": "True"
 }
diff --git a/partners/v2/partners-gen.go b/partners/v2/partners-gen.go
index fedfbe2..0502b0b 100644
--- a/partners/v2/partners-gen.go
+++ b/partners/v2/partners-gen.go
@@ -64,10 +64,9 @@
 }
 
 type Service struct {
-	client                    *http.Client
-	BasePath                  string // API endpoint base URL
-	UserAgent                 string // optional additional User-Agent fragment
-	GoogleClientHeaderElement string // client header fragment, for Google use only
+	client    *http.Client
+	BasePath  string // API endpoint base URL
+	UserAgent string // optional additional User-Agent fragment
 
 	Analytics *AnalyticsService
 
@@ -97,10 +96,6 @@
 	return googleapi.UserAgent + " " + s.UserAgent
 }
 
-func (s *Service) clientHeader() string {
-	return gensupport.GoogleClientHeader("20170210", s.GoogleClientHeaderElement)
-}
-
 func NewAnalyticsService(s *Service) *AnalyticsService {
 	rs := &AnalyticsService{s: s}
 	return rs
@@ -2354,6 +2349,8 @@
 	// certificate.
 	//   "SMB_VIEWED_DOUBLECLICK_CERTIFICATE" - Advertiser viewed
 	// DoubleClick certificate.
+	//   "SMB_VIEWED_MOBILE_SITES_CERTIFICATE" - Advertiser viewed Mobile
+	// Sites certificate.
 	//   "SMB_VIEWED_VIDEO_ADS_CERTIFICATE" - Advertiser viewed VideoAds
 	// certificate.
 	//   "SMB_VIEWED_SHOPPING_CERTIFICATE" - Advertiser clicked Shopping
@@ -3304,7 +3301,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	if c.ifNoneMatch_ != "" {
 		reqHeaders.Set("If-None-Match", c.ifNoneMatch_)
 	}
@@ -3488,7 +3484,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	var body io.Reader = nil
 	body, err := googleapi.WithoutDataWrapper.JSONReader(c.logmessagerequest)
 	if err != nil {
@@ -3719,7 +3714,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	if c.ifNoneMatch_ != "" {
 		reqHeaders.Set("If-None-Match", c.ifNoneMatch_)
 	}
@@ -4183,7 +4177,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	if c.ifNoneMatch_ != "" {
 		reqHeaders.Set("If-None-Match", c.ifNoneMatch_)
 	}
@@ -4496,7 +4489,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	var body io.Reader = nil
 	body, err := googleapi.WithoutDataWrapper.JSONReader(c.createleadrequest)
 	if err != nil {
@@ -4698,7 +4690,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	if c.ifNoneMatch_ != "" {
 		reqHeaders.Set("If-None-Match", c.ifNoneMatch_)
 	}
@@ -4970,7 +4961,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	if c.ifNoneMatch_ != "" {
 		reqHeaders.Set("If-None-Match", c.ifNoneMatch_)
 	}
@@ -5226,7 +5216,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	if c.ifNoneMatch_ != "" {
 		reqHeaders.Set("If-None-Match", c.ifNoneMatch_)
 	}
@@ -5479,7 +5468,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	if c.ifNoneMatch_ != "" {
 		reqHeaders.Set("If-None-Match", c.ifNoneMatch_)
 	}
@@ -5671,7 +5659,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	var body io.Reader = nil
 	body, err := googleapi.WithoutDataWrapper.JSONReader(c.logusereventrequest)
 	if err != nil {
@@ -5858,7 +5845,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	if c.ifNoneMatch_ != "" {
 		reqHeaders.Set("If-None-Match", c.ifNoneMatch_)
 	}
@@ -6071,7 +6057,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	var body io.Reader = nil
 	body, err := googleapi.WithoutDataWrapper.JSONReader(c.companyrelation)
 	if err != nil {
@@ -6298,7 +6283,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	var body io.Reader = nil
 	c.urlParams_.Set("alt", alt)
 	urls := googleapi.ResolveRelative(c.s.BasePath, "v2/users/{userId}/companyRelation")
@@ -6539,7 +6523,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	if c.ifNoneMatch_ != "" {
 		reqHeaders.Set("If-None-Match", c.ifNoneMatch_)
 	}
@@ -6772,7 +6755,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	var body io.Reader = nil
 	body, err := googleapi.WithoutDataWrapper.JSONReader(c.userprofile)
 	if err != nil {
@@ -6999,7 +6981,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	if c.ifNoneMatch_ != "" {
 		reqHeaders.Set("If-None-Match", c.ifNoneMatch_)
 	}
@@ -7219,7 +7200,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	var body io.Reader = nil
 	body, err := googleapi.WithoutDataWrapper.JSONReader(c.company)
 	if err != nil {
@@ -7449,7 +7429,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	var body io.Reader = nil
 	body, err := googleapi.WithoutDataWrapper.JSONReader(c.lead)
 	if err != nil {
diff --git a/people/v1/people-api.json b/people/v1/people-api.json
index a05b30a..10e4895 100644
--- a/people/v1/people-api.json
+++ b/people/v1/people-api.json
@@ -1,8 +1,8 @@
 {
   "batchPath": "batch",
   "id": "people:v1",
-  "revision": "20170309",
   "documentationLink": "https://developers.google.com/people/",
+  "revision": "20170323",
   "title": "Google People API",
   "ownerName": "Google",
   "discoveryVersion": "v1",
@@ -11,20 +11,32 @@
     "people": {
       "methods": {
         "getBatchGet": {
+          "flatPath": "v1/people:batchGet",
           "path": "v1/people:batchGet",
           "id": "people.people.getBatchGet",
           "description": "Provides information about a list of specific people by specifying a list\nof requested resource names. Use `people/me` to indicate the authenticated\nuser.",
+          "parameterOrder": [],
           "response": {
             "$ref": "GetPeopleResponse"
           },
-          "parameterOrder": [],
           "httpMethod": "GET",
+          "scopes": [
+            "https://www.googleapis.com/auth/contacts",
+            "https://www.googleapis.com/auth/contacts.readonly",
+            "https://www.googleapis.com/auth/plus.login",
+            "https://www.googleapis.com/auth/user.addresses.read",
+            "https://www.googleapis.com/auth/user.birthday.read",
+            "https://www.googleapis.com/auth/user.emails.read",
+            "https://www.googleapis.com/auth/user.phonenumbers.read",
+            "https://www.googleapis.com/auth/userinfo.email",
+            "https://www.googleapis.com/auth/userinfo.profile"
+          ],
           "parameters": {
             "requestMask.includeField": {
-              "location": "query",
               "description": "Comma-separated list of fields to be included in the response. Omitting\nthis field will include all fields except for connections.list requests,\nwhich have a default mask that includes common fields like metadata, name,\nphoto, and profile url.\nEach path should start with `person.`: for example, `person.names` or\n`person.photos`.",
               "format": "google-fieldmask",
-              "type": "string"
+              "type": "string",
+              "location": "query"
             },
             "resourceNames": {
               "location": "query",
@@ -32,41 +44,33 @@
               "type": "string",
               "repeated": true
             }
-          },
-          "scopes": [
-            "https://www.googleapis.com/auth/contacts",
-            "https://www.googleapis.com/auth/contacts.readonly",
-            "https://www.googleapis.com/auth/plus.login",
-            "https://www.googleapis.com/auth/user.addresses.read",
-            "https://www.googleapis.com/auth/user.birthday.read",
-            "https://www.googleapis.com/auth/user.emails.read",
-            "https://www.googleapis.com/auth/user.phonenumbers.read",
-            "https://www.googleapis.com/auth/userinfo.email",
-            "https://www.googleapis.com/auth/userinfo.profile"
-          ],
-          "flatPath": "v1/people:batchGet"
+          }
         },
         "get": {
+          "flatPath": "v1/people/{peopleId}",
+          "id": "people.people.get",
+          "path": "v1/{+resourceName}",
+          "description": "Provides information about a person resource for a resource name. Use\n`people/me` to indicate the authenticated user.",
           "httpMethod": "GET",
-          "response": {
-            "$ref": "Person"
-          },
           "parameterOrder": [
             "resourceName"
           ],
+          "response": {
+            "$ref": "Person"
+          },
           "parameters": {
+            "requestMask.includeField": {
+              "location": "query",
+              "description": "Comma-separated list of fields to be included in the response. Omitting\nthis field will include all fields except for connections.list requests,\nwhich have a default mask that includes common fields like metadata, name,\nphoto, and profile url.\nEach path should start with `person.`: for example, `person.names` or\n`person.photos`.",
+              "format": "google-fieldmask",
+              "type": "string"
+            },
             "resourceName": {
               "description": "The resource name of the person to provide information about.\n\n- To get information about the authenticated user, specify `people/me`.\n- To get information about any user, specify the resource name that\n  identifies the user, such as the resource names returned by\n  [`people.connections.list`](/people/api/rest/v1/people.connections/list).",
               "required": true,
               "type": "string",
               "pattern": "^people/[^/]+$",
               "location": "path"
-            },
-            "requestMask.includeField": {
-              "description": "Comma-separated list of fields to be included in the response. Omitting\nthis field will include all fields except for connections.list requests,\nwhich have a default mask that includes common fields like metadata, name,\nphoto, and profile url.\nEach path should start with `person.`: for example, `person.names` or\n`person.photos`.",
-              "format": "google-fieldmask",
-              "type": "string",
-              "location": "query"
             }
           },
           "scopes": [
@@ -79,11 +83,7 @@
             "https://www.googleapis.com/auth/user.phonenumbers.read",
             "https://www.googleapis.com/auth/userinfo.email",
             "https://www.googleapis.com/auth/userinfo.profile"
-          ],
-          "flatPath": "v1/people/{peopleId}",
-          "id": "people.people.get",
-          "path": "v1/{+resourceName}",
-          "description": "Provides information about a person resource for a resource name. Use\n`people/me` to indicate the authenticated user."
+          ]
         }
       },
       "resources": {
@@ -107,27 +107,27 @@
               ],
               "parameters": {
                 "requestSyncToken": {
-                  "location": "query",
                   "description": "Whether the response should include a sync token, which can be used to get\nall changes since the last request.",
-                  "type": "boolean"
-                },
-                "resourceName": {
-                  "location": "path",
-                  "description": "The resource name to return connections for. Only `people/me` is valid.",
-                  "required": true,
-                  "type": "string",
-                  "pattern": "^people/[^/]+$"
+                  "type": "boolean",
+                  "location": "query"
                 },
                 "pageToken": {
                   "description": "The token of the page to be returned.",
                   "type": "string",
                   "location": "query"
                 },
+                "resourceName": {
+                  "description": "The resource name to return connections for. Only `people/me` is valid.",
+                  "required": true,
+                  "type": "string",
+                  "pattern": "^people/[^/]+$",
+                  "location": "path"
+                },
                 "pageSize": {
+                  "location": "query",
                   "description": "The number of connections to include in the response. Valid values are\nbetween 1 and 500, inclusive. Defaults to 100.",
                   "format": "int32",
-                  "type": "integer",
-                  "location": "query"
+                  "type": "integer"
                 },
                 "requestMask.includeField": {
                   "location": "query",
@@ -136,19 +136,19 @@
                   "type": "string"
                 },
                 "syncToken": {
+                  "location": "query",
                   "description": "A sync token, returned by a previous call to `people.connections.list`.\nOnly resources changed since the sync token was created will be returned.",
-                  "type": "string",
-                  "location": "query"
+                  "type": "string"
                 },
                 "sortOrder": {
-                  "description": "The order in which the connections should be sorted. Defaults to\n`LAST_MODIFIED_ASCENDING`.",
-                  "type": "string",
                   "location": "query",
                   "enum": [
                     "LAST_MODIFIED_ASCENDING",
                     "FIRST_NAME_ASCENDING",
                     "LAST_NAME_ASCENDING"
-                  ]
+                  ],
+                  "description": "The order in which the connections should be sorted. Defaults to\n`LAST_MODIFIED_ASCENDING`.",
+                  "type": "string"
                 }
               }
             }
@@ -158,42 +158,15 @@
     }
   },
   "parameters": {
-    "pp": {
-      "location": "query",
-      "description": "Pretty-print response.",
-      "type": "boolean",
-      "default": "true"
-    },
-    "bearer_token": {
-      "description": "OAuth bearer token.",
-      "type": "string",
-      "location": "query"
-    },
-    "oauth_token": {
-      "location": "query",
-      "description": "OAuth 2.0 token for the current user.",
-      "type": "string"
-    },
-    "upload_protocol": {
-      "description": "Upload protocol for media (e.g. \"raw\", \"multipart\").",
-      "type": "string",
-      "location": "query"
-    },
-    "prettyPrint": {
-      "location": "query",
-      "description": "Returns response with indentations and line breaks.",
-      "type": "boolean",
-      "default": "true"
-    },
     "fields": {
       "description": "Selector specifying which fields to include in a partial response.",
       "type": "string",
       "location": "query"
     },
     "uploadType": {
+      "location": "query",
       "description": "Legacy upload protocol for media (e.g. \"media\", \"multipart\").",
-      "type": "string",
-      "location": "query"
+      "type": "string"
     },
     "callback": {
       "description": "JSONP",
@@ -214,8 +187,6 @@
       "type": "string"
     },
     "alt": {
-      "description": "Data format for response.",
-      "default": "json",
       "enum": [
         "json",
         "media",
@@ -227,7 +198,9 @@
         "Media download with context-dependent Content-Type",
         "Responses with Content-Type of application/x-protobuf"
       ],
-      "location": "query"
+      "location": "query",
+      "description": "Data format for response.",
+      "default": "json"
     },
     "access_token": {
       "location": "query",
@@ -243,491 +216,40 @@
       "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"
+    },
+    "pp": {
+      "location": "query",
+      "description": "Pretty-print response.",
+      "type": "boolean",
+      "default": "true"
+    },
+    "bearer_token": {
+      "description": "OAuth bearer token.",
+      "type": "string",
+      "location": "query"
+    },
+    "oauth_token": {
+      "description": "OAuth 2.0 token for the current user.",
+      "type": "string",
+      "location": "query"
+    },
+    "upload_protocol": {
+      "description": "Upload protocol for media (e.g. \"raw\", \"multipart\").",
+      "type": "string",
+      "location": "query"
+    },
+    "prettyPrint": {
+      "location": "query",
+      "description": "Returns response with indentations and line breaks.",
+      "type": "boolean",
+      "default": "true"
     }
   },
   "schemas": {
-    "ProfileMetadata": {
-      "description": "The read-only metadata about a profile.",
-      "type": "object",
-      "properties": {
-        "objectType": {
-          "enum": [
-            "OBJECT_TYPE_UNSPECIFIED",
-            "PERSON",
-            "PAGE"
-          ],
-          "description": "The profile object type.",
-          "type": "string",
-          "enumDescriptions": [
-            "Unspecified.",
-            "Person.",
-            "[Google+ Page.](http://www.google.com/+/brands/)"
-          ]
-        }
-      },
-      "id": "ProfileMetadata"
-    },
-    "Url": {
-      "properties": {
-        "value": {
-          "description": "The URL.",
-          "type": "string"
-        },
-        "formattedType": {
-          "description": "The read-only type of the URL translated and formatted in the viewer's\naccount locale or the `Accept-Language` HTTP header locale.",
-          "type": "string"
-        },
-        "metadata": {
-          "$ref": "FieldMetadata",
-          "description": "Metadata about the URL."
-        },
-        "type": {
-          "description": "The type of the URL. The type can be custom or predefined.\nPossible values include, but are not limited to, the following:\n\n* `home`\n* `work`\n* `blog`\n* `profile`\n* `homePage`\n* `ftp`\n* `reservations`\n* `appInstallPage`: website for a Google+ application.\n* `other`",
-          "type": "string"
-        }
-      },
-      "id": "Url",
-      "description": "A person's associated URLs.",
-      "type": "object"
-    },
-    "Gender": {
-      "properties": {
-        "metadata": {
-          "$ref": "FieldMetadata",
-          "description": "Metadata about the gender."
-        },
-        "value": {
-          "description": "The gender for the person. The gender can be custom or predefined.\nPossible values include, but are not limited to, the\nfollowing:\n\n* `male`\n* `female`\n* `other`\n* `unknown`",
-          "type": "string"
-        },
-        "formattedValue": {
-          "description": "The read-only value of the gender translated and formatted in the viewer's\naccount locale or the `Accept-Language` HTTP header locale.",
-          "type": "string"
-        }
-      },
-      "id": "Gender",
-      "description": "A person's gender.",
-      "type": "object"
-    },
-    "CoverPhoto": {
-      "description": "A person's read-only cover photo. A large image shown on the person's\nprofile page that represents who they are or what they care about.",
-      "type": "object",
-      "properties": {
-        "metadata": {
-          "$ref": "FieldMetadata",
-          "description": "Metadata about the cover photo."
-        },
-        "default": {
-          "description": "True if the cover photo is the default cover photo;\nfalse if the cover photo is a user-provided cover photo.",
-          "type": "boolean"
-        },
-        "url": {
-          "description": "The URL of the cover photo.",
-          "type": "string"
-        }
-      },
-      "id": "CoverPhoto"
-    },
-    "Interest": {
-      "description": "One of the person's interests.",
-      "type": "object",
-      "properties": {
-        "value": {
-          "description": "The interest; for example, `stargazing`.",
-          "type": "string"
-        },
-        "metadata": {
-          "$ref": "FieldMetadata",
-          "description": "Metadata about the interest."
-        }
-      },
-      "id": "Interest"
-    },
-    "ImClient": {
-      "description": "A person's instant messaging client.",
-      "type": "object",
-      "properties": {
-        "formattedProtocol": {
-          "description": "The read-only protocol of the IM client formatted in the viewer's account\nlocale or the `Accept-Language` HTTP header locale.",
-          "type": "string"
-        },
-        "formattedType": {
-          "description": "The read-only type of the IM client translated and formatted in the\nviewer's account locale or the `Accept-Language` HTTP header locale.",
-          "type": "string"
-        },
-        "metadata": {
-          "description": "Metadata about the IM client.",
-          "$ref": "FieldMetadata"
-        },
-        "type": {
-          "description": "The type of the IM client. The type can be custom or predefined.\nPossible values include, but are not limited to, the following:\n\n* `home`\n* `work`\n* `other`",
-          "type": "string"
-        },
-        "protocol": {
-          "description": "The protocol of the IM client. The protocol can be custom or predefined.\nPossible values include, but are not limited to, the following:\n\n* `aim`\n* `msn`\n* `yahoo`\n* `skype`\n* `qq`\n* `googleTalk`\n* `icq`\n* `jabber`\n* `netMeeting`",
-          "type": "string"
-        },
-        "username": {
-          "description": "The user name used in the IM client.",
-          "type": "string"
-        }
-      },
-      "id": "ImClient"
-    },
-    "Nickname": {
-      "description": "A person's nickname.",
-      "type": "object",
-      "properties": {
-        "metadata": {
-          "$ref": "FieldMetadata",
-          "description": "Metadata about the nickname."
-        },
-        "type": {
-          "enumDescriptions": [
-            "Generic nickname.",
-            "Maiden name or birth family name. Used when the person's family name has\nchanged as a result of marriage.",
-            "Initials.",
-            "Google+ profile nickname.",
-            "A professional affiliation or other name; for example, `Dr. Smith.`"
-          ],
-          "enum": [
-            "DEFAULT",
-            "MAIDEN_NAME",
-            "INITIALS",
-            "GPLUS",
-            "OTHER_NAME"
-          ],
-          "description": "The type of the nickname.",
-          "type": "string"
-        },
-        "value": {
-          "description": "The nickname.",
-          "type": "string"
-        }
-      },
-      "id": "Nickname"
-    },
-    "EmailAddress": {
-      "description": "A person's email address.",
-      "type": "object",
-      "properties": {
-        "formattedType": {
-          "description": "The read-only type of the email address translated and formatted in the\nviewer's account locale or the `Accept-Language` HTTP header locale.",
-          "type": "string"
-        },
-        "displayName": {
-          "description": "The display name of the email.",
-          "type": "string"
-        },
-        "metadata": {
-          "$ref": "FieldMetadata",
-          "description": "Metadata about the email address."
-        },
-        "type": {
-          "description": "The type of the email address. The type can be custom or predefined.\nPossible values include, but are not limited to, the following:\n\n* `home`\n* `work`\n* `other`",
-          "type": "string"
-        },
-        "value": {
-          "description": "The email address.",
-          "type": "string"
-        }
-      },
-      "id": "EmailAddress"
-    },
-    "Skill": {
-      "properties": {
-        "metadata": {
-          "$ref": "FieldMetadata",
-          "description": "Metadata about the skill."
-        },
-        "value": {
-          "description": "The skill; for example, `underwater basket weaving`.",
-          "type": "string"
-        }
-      },
-      "id": "Skill",
-      "description": "A skill that the person has.",
-      "type": "object"
-    },
-    "DomainMembership": {
-      "description": "A Google Apps Domain membership.",
-      "type": "object",
-      "properties": {
-        "inViewerDomain": {
-          "description": "True if the person is in the viewer's Google Apps domain.",
-          "type": "boolean"
-        }
-      },
-      "id": "DomainMembership"
-    },
-    "Membership": {
-      "description": "A person's read-only membership in a group.",
-      "type": "object",
-      "properties": {
-        "metadata": {
-          "description": "Metadata about the membership.",
-          "$ref": "FieldMetadata"
-        },
-        "contactGroupMembership": {
-          "$ref": "ContactGroupMembership",
-          "description": "The contact group membership."
-        },
-        "domainMembership": {
-          "description": "The domain membership.",
-          "$ref": "DomainMembership"
-        }
-      },
-      "id": "Membership"
-    },
-    "RelationshipStatus": {
-      "description": "A person's read-only relationship status.",
-      "type": "object",
-      "properties": {
-        "formattedValue": {
-          "description": "The read-only value of the relationship status translated and formatted in\nthe viewer's account locale or the `Accept-Language` HTTP header locale.",
-          "type": "string"
-        },
-        "metadata": {
-          "$ref": "FieldMetadata",
-          "description": "Metadata about the relationship status."
-        },
-        "value": {
-          "description": "The relationship status. The value can be custom or predefined.\nPossible values include, but are not limited to, the following:\n\n* `single`\n* `inARelationship`\n* `engaged`\n* `married`\n* `itsComplicated`\n* `openRelationship`\n* `widowed`\n* `inDomesticPartnership`\n* `inCivilUnion`",
-          "type": "string"
-        }
-      },
-      "id": "RelationshipStatus"
-    },
-    "Date": {
-      "description": "Represents a whole calendar date, for example a date of birth. The time\nof day and time zone are either specified elsewhere or are not\nsignificant. The date is relative to the\n[Proleptic Gregorian Calendar](https://en.wikipedia.org/wiki/Proleptic_Gregorian_calendar).\nThe day may be 0 to represent a year and month where the day is not\nsignificant. The year may be 0 to represent a month and day independent\nof year; for example, anniversary date.",
-      "type": "object",
-      "properties": {
-        "year": {
-          "description": "Year of date. Must be from 1 to 9999, or 0 if specifying a date without\na year.",
-          "format": "int32",
-          "type": "integer"
-        },
-        "day": {
-          "description": "Day of month. Must be from 1 to 31 and valid for the year and month, or 0\nif specifying a year/month where the day is not significant.",
-          "format": "int32",
-          "type": "integer"
-        },
-        "month": {
-          "description": "Month of year. Must be from 1 to 12.",
-          "format": "int32",
-          "type": "integer"
-        }
-      },
-      "id": "Date"
-    },
-    "Tagline": {
-      "properties": {
-        "metadata": {
-          "description": "Metadata about the tagline.",
-          "$ref": "FieldMetadata"
-        },
-        "value": {
-          "description": "The tagline.",
-          "type": "string"
-        }
-      },
-      "id": "Tagline",
-      "description": "A read-only brief one-line description of the person.",
-      "type": "object"
-    },
-    "Name": {
-      "description": "A person's name. If the name is a mononym, the family name is empty.",
-      "type": "object",
-      "properties": {
-        "honorificPrefix": {
-          "description": "The honorific prefixes, such as `Mrs.` or `Dr.`",
-          "type": "string"
-        },
-        "phoneticHonorificSuffix": {
-          "description": "The honorific suffixes spelled as they sound.",
-          "type": "string"
-        },
-        "middleName": {
-          "description": "The middle name(s).",
-          "type": "string"
-        },
-        "givenName": {
-          "description": "The given name.",
-          "type": "string"
-        },
-        "phoneticHonorificPrefix": {
-          "description": "The honorific prefixes spelled as they sound.",
-          "type": "string"
-        },
-        "phoneticGivenName": {
-          "description": "The given name spelled as it sounds.",
-          "type": "string"
-        },
-        "phoneticFamilyName": {
-          "description": "The family name spelled as it sounds.",
-          "type": "string"
-        },
-        "familyName": {
-          "description": "The family name.",
-          "type": "string"
-        },
-        "phoneticMiddleName": {
-          "description": "The middle name(s) spelled as they sound.",
-          "type": "string"
-        },
-        "metadata": {
-          "$ref": "FieldMetadata",
-          "description": "Metadata about the name."
-        },
-        "phoneticFullName": {
-          "description": "The full name spelled as it sounds.",
-          "type": "string"
-        },
-        "displayNameLastFirst": {
-          "description": "The read-only display name with the last name first formatted according to\nthe locale specified by the viewer's account or the\n\u003ccode\u003eAccept-Language\u003c/code\u003e HTTP header.",
-          "type": "string"
-        },
-        "displayName": {
-          "description": "The read-only display name formatted according to the locale specified by\nthe viewer's account or the \u003ccode\u003eAccept-Language\u003c/code\u003e HTTP header.",
-          "type": "string"
-        },
-        "honorificSuffix": {
-          "description": "The honorific suffixes, such as `Jr.`",
-          "type": "string"
-        }
-      },
-      "id": "Name"
-    },
-    "BraggingRights": {
-      "description": "A person's bragging rights.",
-      "type": "object",
-      "properties": {
-        "value": {
-          "description": "The bragging rights; for example, `climbed mount everest`.",
-          "type": "string"
-        },
-        "metadata": {
-          "$ref": "FieldMetadata",
-          "description": "Metadata about the bragging rights."
-        }
-      },
-      "id": "BraggingRights"
-    },
-    "Locale": {
-      "description": "A person's locale preference.",
-      "type": "object",
-      "properties": {
-        "metadata": {
-          "description": "Metadata about the locale.",
-          "$ref": "FieldMetadata"
-        },
-        "value": {
-          "description": "The well-formed [IETF BCP 47](https://tools.ietf.org/html/bcp47)\nlanguage tag representing the locale.",
-          "type": "string"
-        }
-      },
-      "id": "Locale"
-    },
-    "Organization": {
-      "description": "A person's past or current organization. Overlapping date ranges are\npermitted.",
-      "type": "object",
-      "properties": {
-        "current": {
-          "description": "True if the organization is the person's current organization;\nfalse if the organization is a past organization.",
-          "type": "boolean"
-        },
-        "startDate": {
-          "description": "The start date when the person joined the organization.",
-          "$ref": "Date"
-        },
-        "formattedType": {
-          "description": "The read-only type of the organization translated and formatted in the\nviewer's account locale or the `Accept-Language` HTTP header locale.",
-          "type": "string"
-        },
-        "domain": {
-          "description": "The domain name associated with the organization; for example, `google.com`.",
-          "type": "string"
-        },
-        "department": {
-          "description": "The person's department at the organization.",
-          "type": "string"
-        },
-        "phoneticName": {
-          "description": "The phonetic name of the organization.",
-          "type": "string"
-        },
-        "type": {
-          "description": "The type of the organization. The type can be custom or predefined.\nPossible values include, but are not limited to, the following:\n\n* `work`\n* `school`",
-          "type": "string"
-        },
-        "jobDescription": {
-          "description": "The person's job description at the organization.",
-          "type": "string"
-        },
-        "endDate": {
-          "description": "The end date when the person left the organization.",
-          "$ref": "Date"
-        },
-        "symbol": {
-          "description": "The symbol associated with the organization; for example, a stock ticker\nsymbol, abbreviation, or acronym.",
-          "type": "string"
-        },
-        "name": {
-          "description": "The name of the organization.",
-          "type": "string"
-        },
-        "metadata": {
-          "$ref": "FieldMetadata",
-          "description": "Metadata about the organization."
-        },
-        "title": {
-          "description": "The person's job title at the organization.",
-          "type": "string"
-        },
-        "location": {
-          "description": "The location of the organization office the person works at.",
-          "type": "string"
-        }
-      },
-      "id": "Organization"
-    },
-    "Biography": {
-      "description": "A person's short biography.",
-      "type": "object",
-      "properties": {
-        "contentType": {
-          "enumDescriptions": [
-            "Unspecified.",
-            "Plain text.",
-            "HTML text."
-          ],
-          "enum": [
-            "CONTENT_TYPE_UNSPECIFIED",
-            "TEXT_PLAIN",
-            "TEXT_HTML"
-          ],
-          "description": "The content type of the biography.",
-          "type": "string"
-        },
-        "metadata": {
-          "$ref": "FieldMetadata",
-          "description": "Metadata about the biography."
-        },
-        "value": {
-          "description": "The short biography.",
-          "type": "string"
-        }
-      },
-      "id": "Biography"
-    },
     "AgeRangeType": {
       "description": "A person's age range.",
       "type": "object",
       "properties": {
-        "metadata": {
-          "$ref": "FieldMetadata",
-          "description": "Metadata about the age range."
-        },
         "ageRange": {
           "enumDescriptions": [
             "Unspecified.",
@@ -743,6 +265,10 @@
           ],
           "description": "The age range.",
           "type": "string"
+        },
+        "metadata": {
+          "description": "Metadata about the age range.",
+          "$ref": "FieldMetadata"
         }
       },
       "id": "AgeRangeType"
@@ -751,6 +277,10 @@
       "description": "Metadata about a field.",
       "type": "object",
       "properties": {
+        "source": {
+          "description": "The source of the field.",
+          "$ref": "Source"
+        },
         "verified": {
           "description": "True if the field is verified; false if the field is unverified. A\nverified field is typically a name, email address, phone number, or\nwebsite that has been confirmed to be owned by the person.",
           "type": "boolean"
@@ -758,18 +288,55 @@
         "primary": {
           "description": "True if the field is the primary field; false if the field is a secondary\nfield.",
           "type": "boolean"
-        },
-        "source": {
-          "$ref": "Source",
-          "description": "The source of the field."
         }
       },
       "id": "FieldMetadata"
     },
+    "Source": {
+      "description": "The source of a field.",
+      "type": "object",
+      "properties": {
+        "profileMetadata": {
+          "description": "Metadata about a source of type PROFILE.",
+          "$ref": "ProfileMetadata"
+        },
+        "type": {
+          "enumDescriptions": [
+            "Unspecified.",
+            "[Google Account](https://accounts.google.com).",
+            "[Google profile](https://profiles.google.com). You can view the\nprofile at https://profiles.google.com/\u003cid\u003e where \u003cid\u003e is the source\nid.",
+            "[Google Apps domain profile](https://admin.google.com).",
+            "[Google contact](https://contacts.google.com). You can view the\ncontact at https://contact.google.com/\u003cid\u003e where \u003cid\u003e is the source\nid."
+          ],
+          "enum": [
+            "SOURCE_TYPE_UNSPECIFIED",
+            "ACCOUNT",
+            "PROFILE",
+            "DOMAIN_PROFILE",
+            "CONTACT"
+          ],
+          "description": "The source type.",
+          "type": "string"
+        },
+        "etag": {
+          "description": "The [HTTP entity tag](https://en.wikipedia.org/wiki/HTTP_ETag) of the\nsource. Used for web cache validation. Only populated in\nperson.metadata.sources.",
+          "type": "string"
+        },
+        "id": {
+          "description": "The unique identifier within the source type generated by the server.",
+          "type": "string"
+        }
+      },
+      "id": "Source"
+    },
     "PersonResponse": {
       "description": "The response for a single person",
       "type": "object",
       "properties": {
+        "person": {
+          "$ref": "Person",
+          "description": "The person."
+        },
         "httpStatusCode": {
           "description": "[HTTP 1.1 status code](http://www.w3.org/Protocols/rfc2616/rfc2616-sec10.html).",
           "format": "int32",
@@ -778,10 +345,6 @@
         "requestedResourceName": {
           "description": "The original requested resource name. May be different than the resource\nname on the returned person.\n\nThe resource name can change when adding or removing fields that link a\ncontact and profile such as a verified email, verified phone number, or a\nprofile URL.",
           "type": "string"
-        },
-        "person": {
-          "$ref": "Person",
-          "description": "The person."
         }
       },
       "id": "PersonResponse"
@@ -805,43 +368,6 @@
       },
       "id": "RelationshipInterest"
     },
-    "Source": {
-      "description": "The source of a field.",
-      "type": "object",
-      "properties": {
-        "type": {
-          "description": "The source type.",
-          "type": "string",
-          "enumDescriptions": [
-            "Unspecified.",
-            "[Google Account](https://accounts.google.com).",
-            "[Google profile](https://profiles.google.com). You can view the\nprofile at https://profiles.google.com/\u003cid\u003e where \u003cid\u003e is the source\nid.",
-            "[Google Apps domain profile](https://admin.google.com).",
-            "[Google contact](https://contacts.google.com). You can view the\ncontact at https://contact.google.com/\u003cid\u003e where \u003cid\u003e is the source\nid."
-          ],
-          "enum": [
-            "SOURCE_TYPE_UNSPECIFIED",
-            "ACCOUNT",
-            "PROFILE",
-            "DOMAIN_PROFILE",
-            "CONTACT"
-          ]
-        },
-        "etag": {
-          "description": "The [HTTP entity tag](https://en.wikipedia.org/wiki/HTTP_ETag) of the\nsource. Used for web cache validation. Only populated in\nperson.metadata.sources.",
-          "type": "string"
-        },
-        "id": {
-          "description": "The unique identifier within the source type generated by the server.",
-          "type": "string"
-        },
-        "profileMetadata": {
-          "$ref": "ProfileMetadata",
-          "description": "Metadata about a source of type PROFILE."
-        }
-      },
-      "id": "Source"
-    },
     "Relation": {
       "description": "A person's relation to another person.",
       "type": "object",
@@ -855,8 +381,8 @@
           "type": "string"
         },
         "metadata": {
-          "$ref": "FieldMetadata",
-          "description": "Metadata about the relation."
+          "description": "Metadata about the relation.",
+          "$ref": "FieldMetadata"
         },
         "type": {
           "description": "The person's relation to the other person. The type can be custom or predefined.\nPossible values include, but are not limited to, the following values:\n\n* `spouse`\n* `child`\n* `mother`\n* `father`\n* `parent`\n* `brother`\n* `sister`\n* `friend`\n* `relative`\n* `domesticPartner`\n* `manager`\n* `assistant`\n* `referredBy`\n* `partner`",
@@ -884,6 +410,41 @@
       "description": "Information about a person merged from various data sources such as the\nauthenticated user's contacts and profile data. Fields other than IDs,\nmetadata, and group memberships are user-edited.\n\nMost fields can have multiple items. The items in a field have no guaranteed\norder, but each non-empty field is guaranteed to have exactly one field with\n`metadata.primary` set to true.\nNEXT_ID: 31",
       "type": "object",
       "properties": {
+        "imClients": {
+          "description": "The person's instant messaging clients.",
+          "type": "array",
+          "items": {
+            "$ref": "ImClient"
+          }
+        },
+        "birthdays": {
+          "description": "The person's birthdays.",
+          "type": "array",
+          "items": {
+            "$ref": "Birthday"
+          }
+        },
+        "locales": {
+          "description": "The person's locale preferences.",
+          "type": "array",
+          "items": {
+            "$ref": "Locale"
+          }
+        },
+        "relationshipInterests": {
+          "description": "The kind of relationship the person is looking for.",
+          "type": "array",
+          "items": {
+            "$ref": "RelationshipInterest"
+          }
+        },
+        "urls": {
+          "description": "The person's associated URLs.",
+          "type": "array",
+          "items": {
+            "$ref": "Url"
+          }
+        },
         "nicknames": {
           "description": "The person's nicknames.",
           "type": "array",
@@ -938,8 +499,8 @@
           }
         },
         "metadata": {
-          "$ref": "PersonMetadata",
-          "description": "Metadata about the person."
+          "description": "Metadata about the person.",
+          "$ref": "PersonMetadata"
         },
         "residences": {
           "description": "The person's residences.",
@@ -955,10 +516,6 @@
             "$ref": "Gender"
           }
         },
-        "resourceName": {
-          "description": "The resource name for the person, assigned by the server. An ASCII string\nwith a max length of 27 characters. Always starts with `people/`.",
-          "type": "string"
-        },
         "interests": {
           "description": "The person's interests.",
           "type": "array",
@@ -966,6 +523,10 @@
             "$ref": "Interest"
           }
         },
+        "resourceName": {
+          "description": "The resource name for the person, assigned by the server. An ASCII string\nwith a max length of 27 characters. Always starts with `people/`.",
+          "type": "string"
+        },
         "biographies": {
           "description": "The person's biographies.",
           "type": "array",
@@ -995,6 +556,8 @@
           }
         },
         "ageRange": {
+          "description": "DEPRECATED(Please read person.age_ranges instead). The person's age range.",
+          "type": "string",
           "enumDescriptions": [
             "Unspecified.",
             "Younger than eighteen.",
@@ -1006,9 +569,7 @@
             "LESS_THAN_EIGHTEEN",
             "EIGHTEEN_TO_TWENTY",
             "TWENTY_ONE_OR_OLDER"
-          ],
-          "description": "DEPRECATED(Please read person.age_ranges instead). The person's age range.",
-          "type": "string"
+          ]
         },
         "taglines": {
           "description": "The person's taglines.",
@@ -1058,46 +619,12 @@
           "items": {
             "$ref": "CoverPhoto"
           }
-        },
-        "imClients": {
-          "description": "The person's instant messaging clients.",
-          "type": "array",
-          "items": {
-            "$ref": "ImClient"
-          }
-        },
-        "birthdays": {
-          "description": "The person's birthdays.",
-          "type": "array",
-          "items": {
-            "$ref": "Birthday"
-          }
-        },
-        "locales": {
-          "description": "The person's locale preferences.",
-          "type": "array",
-          "items": {
-            "$ref": "Locale"
-          }
-        },
-        "relationshipInterests": {
-          "description": "The kind of relationship the person is looking for.",
-          "type": "array",
-          "items": {
-            "$ref": "RelationshipInterest"
-          }
-        },
-        "urls": {
-          "description": "The person's associated URLs.",
-          "type": "array",
-          "items": {
-            "$ref": "Url"
-          }
         }
       },
       "id": "Person"
     },
     "GetPeopleResponse": {
+      "type": "object",
       "properties": {
         "responses": {
           "description": "The response for each requested resource name.",
@@ -1107,29 +634,38 @@
           }
         }
       },
-      "id": "GetPeopleResponse",
-      "type": "object"
+      "id": "GetPeopleResponse"
     },
     "Photo": {
       "description": "A person's read-only photo. A picture shown next to the person's name to\nhelp others recognize the person.",
       "type": "object",
       "properties": {
-        "url": {
-          "description": "The URL of the photo.",
-          "type": "string"
-        },
         "metadata": {
           "$ref": "FieldMetadata",
           "description": "Metadata about the photo."
+        },
+        "url": {
+          "description": "The URL of the photo.",
+          "type": "string"
         }
       },
       "id": "Photo"
     },
     "PhoneNumber": {
+      "description": "A person's phone number.",
+      "type": "object",
       "properties": {
+        "formattedType": {
+          "description": "The read-only type of the phone number translated and formatted in the\nviewer's account locale or the the `Accept-Language` HTTP header locale.",
+          "type": "string"
+        },
+        "canonicalForm": {
+          "description": "The read-only canonicalized [ITU-T E.164](https://law.resource.org/pub/us/cfr/ibr/004/itu-t.E.164.1.2008.pdf)\nform of the phone number.",
+          "type": "string"
+        },
         "metadata": {
-          "$ref": "FieldMetadata",
-          "description": "Metadata about the phone number."
+          "description": "Metadata about the phone number.",
+          "$ref": "FieldMetadata"
         },
         "type": {
           "description": "The type of the phone number. The type can be custom or predefined.\nPossible values include, but are not limited to, the following:\n\n* `home`\n* `work`\n* `mobile`\n* `homeFax`\n* `workFax`\n* `otherFax`\n* `pager`\n* `workMobile`\n* `workPager`\n* `main`\n* `googleVoice`\n* `other`",
@@ -1138,19 +674,9 @@
         "value": {
           "description": "The phone number.",
           "type": "string"
-        },
-        "formattedType": {
-          "description": "The read-only type of the phone number translated and formatted in the\nviewer's account locale or the the `Accept-Language` HTTP header locale.",
-          "type": "string"
-        },
-        "canonicalForm": {
-          "description": "The read-only canonicalized [ITU-T E.164](https://law.resource.org/pub/us/cfr/ibr/004/itu-t.E.164.1.2008.pdf)\nform of the phone number.",
-          "type": "string"
         }
       },
-      "id": "PhoneNumber",
-      "description": "A person's phone number.",
-      "type": "object"
+      "id": "PhoneNumber"
     },
     "ListConnectionsResponse": {
       "type": "object",
@@ -1169,6 +695,11 @@
         "nextSyncToken": {
           "description": "The token that can be used to retrieve changes since the last request.",
           "type": "string"
+        },
+        "totalPeople": {
+          "description": "The total number of people in the list without pagination.",
+          "format": "int32",
+          "type": "integer"
         }
       },
       "id": "ListConnectionsResponse"
@@ -1186,17 +717,19 @@
           "type": "string"
         },
         "date": {
-          "$ref": "Date",
-          "description": "The date of the birthday."
+          "description": "The date of the birthday.",
+          "$ref": "Date"
         }
       },
       "id": "Birthday"
     },
     "Residence": {
+      "description": "A person's past or current residence.",
+      "type": "object",
       "properties": {
         "metadata": {
-          "$ref": "FieldMetadata",
-          "description": "Metadata about the residence."
+          "description": "Metadata about the residence.",
+          "$ref": "FieldMetadata"
         },
         "current": {
           "description": "True if the residence is the person's current residence;\nfalse if the residence is a past residence.",
@@ -1207,30 +740,12 @@
           "type": "string"
         }
       },
-      "id": "Residence",
-      "description": "A person's past or current residence.",
-      "type": "object"
+      "id": "Residence"
     },
     "Address": {
       "description": "A person's physical address. May be a P.O. box or street address. All fields\nare optional.",
       "type": "object",
       "properties": {
-        "formattedType": {
-          "description": "The read-only type of the address translated and formatted in the viewer's\naccount locale or the `Accept-Language` HTTP header locale.",
-          "type": "string"
-        },
-        "city": {
-          "description": "The city of the address.",
-          "type": "string"
-        },
-        "formattedValue": {
-          "description": "The unstructured value of the address. If this is not set by the user it\nwill be automatically constructed from structured values.",
-          "type": "string"
-        },
-        "country": {
-          "description": "The country of the address.",
-          "type": "string"
-        },
         "type": {
           "description": "The type of the address. The type can be custom or predefined.\nPossible values include, but are not limited to, the following:\n\n* `home`\n* `work`\n* `other`",
           "type": "string"
@@ -1256,26 +771,42 @@
           "type": "string"
         },
         "metadata": {
-          "$ref": "FieldMetadata",
-          "description": "Metadata about the address."
+          "description": "Metadata about the address.",
+          "$ref": "FieldMetadata"
         },
         "countryCode": {
           "description": "The [ISO 3166-1 alpha-2](http://www.iso.org/iso/country_codes.htm) country\ncode of the address.",
           "type": "string"
+        },
+        "formattedType": {
+          "description": "The read-only type of the address translated and formatted in the viewer's\naccount locale or the `Accept-Language` HTTP header locale.",
+          "type": "string"
+        },
+        "city": {
+          "description": "The city of the address.",
+          "type": "string"
+        },
+        "formattedValue": {
+          "description": "The unstructured value of the address. If this is not set by the user it\nwill be automatically constructed from structured values.",
+          "type": "string"
+        },
+        "country": {
+          "description": "The country of the address.",
+          "type": "string"
         }
       },
       "id": "Address"
     },
     "ContactGroupMembership": {
+      "description": "A Google contact group membership.",
+      "type": "object",
       "properties": {
         "contactGroupId": {
           "description": "The contact group ID for the contact group membership. The contact group\nID can be custom or predefined. Possible values include, but are not\nlimited to, the following:\n\n*  `myContacts`\n*  `starred`\n*  A numerical ID for user-created groups.",
           "type": "string"
         }
       },
-      "id": "ContactGroupMembership",
-      "description": "A Google contact group membership.",
-      "type": "object"
+      "id": "ContactGroupMembership"
     },
     "Event": {
       "description": "An event related to the person.",
@@ -1345,51 +876,525 @@
         }
       },
       "id": "PersonMetadata"
+    },
+    "ProfileMetadata": {
+      "description": "The read-only metadata about a profile.",
+      "type": "object",
+      "properties": {
+        "objectType": {
+          "enumDescriptions": [
+            "Unspecified.",
+            "Person.",
+            "[Google+ Page.](http://www.google.com/+/brands/)"
+          ],
+          "enum": [
+            "OBJECT_TYPE_UNSPECIFIED",
+            "PERSON",
+            "PAGE"
+          ],
+          "description": "The profile object type.",
+          "type": "string"
+        }
+      },
+      "id": "ProfileMetadata"
+    },
+    "Gender": {
+      "description": "A person's gender.",
+      "type": "object",
+      "properties": {
+        "metadata": {
+          "$ref": "FieldMetadata",
+          "description": "Metadata about the gender."
+        },
+        "value": {
+          "description": "The gender for the person. The gender can be custom or predefined.\nPossible values include, but are not limited to, the\nfollowing:\n\n* `male`\n* `female`\n* `other`\n* `unknown`",
+          "type": "string"
+        },
+        "formattedValue": {
+          "description": "The read-only value of the gender translated and formatted in the viewer's\naccount locale or the `Accept-Language` HTTP header locale.",
+          "type": "string"
+        }
+      },
+      "id": "Gender"
+    },
+    "Url": {
+      "description": "A person's associated URLs.",
+      "type": "object",
+      "properties": {
+        "metadata": {
+          "$ref": "FieldMetadata",
+          "description": "Metadata about the URL."
+        },
+        "type": {
+          "description": "The type of the URL. The type can be custom or predefined.\nPossible values include, but are not limited to, the following:\n\n* `home`\n* `work`\n* `blog`\n* `profile`\n* `homePage`\n* `ftp`\n* `reservations`\n* `appInstallPage`: website for a Google+ application.\n* `other`",
+          "type": "string"
+        },
+        "value": {
+          "description": "The URL.",
+          "type": "string"
+        },
+        "formattedType": {
+          "description": "The read-only type of the URL translated and formatted in the viewer's\naccount locale or the `Accept-Language` HTTP header locale.",
+          "type": "string"
+        }
+      },
+      "id": "Url"
+    },
+    "CoverPhoto": {
+      "description": "A person's read-only cover photo. A large image shown on the person's\nprofile page that represents who they are or what they care about.",
+      "type": "object",
+      "properties": {
+        "metadata": {
+          "description": "Metadata about the cover photo.",
+          "$ref": "FieldMetadata"
+        },
+        "default": {
+          "description": "True if the cover photo is the default cover photo;\nfalse if the cover photo is a user-provided cover photo.",
+          "type": "boolean"
+        },
+        "url": {
+          "description": "The URL of the cover photo.",
+          "type": "string"
+        }
+      },
+      "id": "CoverPhoto"
+    },
+    "Interest": {
+      "description": "One of the person's interests.",
+      "type": "object",
+      "properties": {
+        "metadata": {
+          "description": "Metadata about the interest.",
+          "$ref": "FieldMetadata"
+        },
+        "value": {
+          "description": "The interest; for example, `stargazing`.",
+          "type": "string"
+        }
+      },
+      "id": "Interest"
+    },
+    "ImClient": {
+      "description": "A person's instant messaging client.",
+      "type": "object",
+      "properties": {
+        "formattedType": {
+          "description": "The read-only type of the IM client translated and formatted in the\nviewer's account locale or the `Accept-Language` HTTP header locale.",
+          "type": "string"
+        },
+        "protocol": {
+          "description": "The protocol of the IM client. The protocol can be custom or predefined.\nPossible values include, but are not limited to, the following:\n\n* `aim`\n* `msn`\n* `yahoo`\n* `skype`\n* `qq`\n* `googleTalk`\n* `icq`\n* `jabber`\n* `netMeeting`",
+          "type": "string"
+        },
+        "metadata": {
+          "description": "Metadata about the IM client.",
+          "$ref": "FieldMetadata"
+        },
+        "type": {
+          "description": "The type of the IM client. The type can be custom or predefined.\nPossible values include, but are not limited to, the following:\n\n* `home`\n* `work`\n* `other`",
+          "type": "string"
+        },
+        "username": {
+          "description": "The user name used in the IM client.",
+          "type": "string"
+        },
+        "formattedProtocol": {
+          "description": "The read-only protocol of the IM client formatted in the viewer's account\nlocale or the `Accept-Language` HTTP header locale.",
+          "type": "string"
+        }
+      },
+      "id": "ImClient"
+    },
+    "Nickname": {
+      "description": "A person's nickname.",
+      "type": "object",
+      "properties": {
+        "metadata": {
+          "description": "Metadata about the nickname.",
+          "$ref": "FieldMetadata"
+        },
+        "type": {
+          "enumDescriptions": [
+            "Generic nickname.",
+            "Maiden name or birth family name. Used when the person's family name has\nchanged as a result of marriage.",
+            "Initials.",
+            "Google+ profile nickname.",
+            "A professional affiliation or other name; for example, `Dr. Smith.`"
+          ],
+          "enum": [
+            "DEFAULT",
+            "MAIDEN_NAME",
+            "INITIALS",
+            "GPLUS",
+            "OTHER_NAME"
+          ],
+          "description": "The type of the nickname.",
+          "type": "string"
+        },
+        "value": {
+          "description": "The nickname.",
+          "type": "string"
+        }
+      },
+      "id": "Nickname"
+    },
+    "EmailAddress": {
+      "description": "A person's email address.",
+      "type": "object",
+      "properties": {
+        "formattedType": {
+          "description": "The read-only type of the email address translated and formatted in the\nviewer's account locale or the `Accept-Language` HTTP header locale.",
+          "type": "string"
+        },
+        "displayName": {
+          "description": "The display name of the email.",
+          "type": "string"
+        },
+        "metadata": {
+          "description": "Metadata about the email address.",
+          "$ref": "FieldMetadata"
+        },
+        "type": {
+          "description": "The type of the email address. The type can be custom or predefined.\nPossible values include, but are not limited to, the following:\n\n* `home`\n* `work`\n* `other`",
+          "type": "string"
+        },
+        "value": {
+          "description": "The email address.",
+          "type": "string"
+        }
+      },
+      "id": "EmailAddress"
+    },
+    "Skill": {
+      "description": "A skill that the person has.",
+      "type": "object",
+      "properties": {
+        "metadata": {
+          "description": "Metadata about the skill.",
+          "$ref": "FieldMetadata"
+        },
+        "value": {
+          "description": "The skill; for example, `underwater basket weaving`.",
+          "type": "string"
+        }
+      },
+      "id": "Skill"
+    },
+    "DomainMembership": {
+      "description": "A Google Apps Domain membership.",
+      "type": "object",
+      "properties": {
+        "inViewerDomain": {
+          "description": "True if the person is in the viewer's Google Apps domain.",
+          "type": "boolean"
+        }
+      },
+      "id": "DomainMembership"
+    },
+    "Membership": {
+      "description": "A person's read-only membership in a group.",
+      "type": "object",
+      "properties": {
+        "contactGroupMembership": {
+          "$ref": "ContactGroupMembership",
+          "description": "The contact group membership."
+        },
+        "domainMembership": {
+          "description": "The domain membership.",
+          "$ref": "DomainMembership"
+        },
+        "metadata": {
+          "$ref": "FieldMetadata",
+          "description": "Metadata about the membership."
+        }
+      },
+      "id": "Membership"
+    },
+    "RelationshipStatus": {
+      "description": "A person's read-only relationship status.",
+      "type": "object",
+      "properties": {
+        "formattedValue": {
+          "description": "The read-only value of the relationship status translated and formatted in\nthe viewer's account locale or the `Accept-Language` HTTP header locale.",
+          "type": "string"
+        },
+        "metadata": {
+          "description": "Metadata about the relationship status.",
+          "$ref": "FieldMetadata"
+        },
+        "value": {
+          "description": "The relationship status. The value can be custom or predefined.\nPossible values include, but are not limited to, the following:\n\n* `single`\n* `inARelationship`\n* `engaged`\n* `married`\n* `itsComplicated`\n* `openRelationship`\n* `widowed`\n* `inDomesticPartnership`\n* `inCivilUnion`",
+          "type": "string"
+        }
+      },
+      "id": "RelationshipStatus"
+    },
+    "Tagline": {
+      "description": "A read-only brief one-line description of the person.",
+      "type": "object",
+      "properties": {
+        "metadata": {
+          "$ref": "FieldMetadata",
+          "description": "Metadata about the tagline."
+        },
+        "value": {
+          "description": "The tagline.",
+          "type": "string"
+        }
+      },
+      "id": "Tagline"
+    },
+    "Date": {
+      "description": "Represents a whole calendar date, for example a date of birth. The time\nof day and time zone are either specified elsewhere or are not\nsignificant. The date is relative to the\n[Proleptic Gregorian Calendar](https://en.wikipedia.org/wiki/Proleptic_Gregorian_calendar).\nThe day may be 0 to represent a year and month where the day is not\nsignificant. The year may be 0 to represent a month and day independent\nof year; for example, anniversary date.",
+      "type": "object",
+      "properties": {
+        "year": {
+          "description": "Year of date. Must be from 1 to 9999, or 0 if specifying a date without\na year.",
+          "format": "int32",
+          "type": "integer"
+        },
+        "day": {
+          "description": "Day of month. Must be from 1 to 31 and valid for the year and month, or 0\nif specifying a year/month where the day is not significant.",
+          "format": "int32",
+          "type": "integer"
+        },
+        "month": {
+          "description": "Month of year. Must be from 1 to 12.",
+          "format": "int32",
+          "type": "integer"
+        }
+      },
+      "id": "Date"
+    },
+    "Name": {
+      "description": "A person's name. If the name is a mononym, the family name is empty.",
+      "type": "object",
+      "properties": {
+        "honorificPrefix": {
+          "description": "The honorific prefixes, such as `Mrs.` or `Dr.`",
+          "type": "string"
+        },
+        "phoneticHonorificSuffix": {
+          "description": "The honorific suffixes spelled as they sound.",
+          "type": "string"
+        },
+        "middleName": {
+          "description": "The middle name(s).",
+          "type": "string"
+        },
+        "givenName": {
+          "description": "The given name.",
+          "type": "string"
+        },
+        "phoneticHonorificPrefix": {
+          "description": "The honorific prefixes spelled as they sound.",
+          "type": "string"
+        },
+        "phoneticGivenName": {
+          "description": "The given name spelled as it sounds.",
+          "type": "string"
+        },
+        "phoneticFamilyName": {
+          "description": "The family name spelled as it sounds.",
+          "type": "string"
+        },
+        "familyName": {
+          "description": "The family name.",
+          "type": "string"
+        },
+        "phoneticMiddleName": {
+          "description": "The middle name(s) spelled as they sound.",
+          "type": "string"
+        },
+        "metadata": {
+          "$ref": "FieldMetadata",
+          "description": "Metadata about the name."
+        },
+        "phoneticFullName": {
+          "description": "The full name spelled as it sounds.",
+          "type": "string"
+        },
+        "displayNameLastFirst": {
+          "description": "The read-only display name with the last name first formatted according to\nthe locale specified by the viewer's account or the\n\u003ccode\u003eAccept-Language\u003c/code\u003e HTTP header.",
+          "type": "string"
+        },
+        "displayName": {
+          "description": "The read-only display name formatted according to the locale specified by\nthe viewer's account or the \u003ccode\u003eAccept-Language\u003c/code\u003e HTTP header.",
+          "type": "string"
+        },
+        "honorificSuffix": {
+          "description": "The honorific suffixes, such as `Jr.`",
+          "type": "string"
+        }
+      },
+      "id": "Name"
+    },
+    "BraggingRights": {
+      "description": "A person's bragging rights.",
+      "type": "object",
+      "properties": {
+        "metadata": {
+          "description": "Metadata about the bragging rights.",
+          "$ref": "FieldMetadata"
+        },
+        "value": {
+          "description": "The bragging rights; for example, `climbed mount everest`.",
+          "type": "string"
+        }
+      },
+      "id": "BraggingRights"
+    },
+    "Locale": {
+      "description": "A person's locale preference.",
+      "type": "object",
+      "properties": {
+        "metadata": {
+          "description": "Metadata about the locale.",
+          "$ref": "FieldMetadata"
+        },
+        "value": {
+          "description": "The well-formed [IETF BCP 47](https://tools.ietf.org/html/bcp47)\nlanguage tag representing the locale.",
+          "type": "string"
+        }
+      },
+      "id": "Locale"
+    },
+    "Organization": {
+      "description": "A person's past or current organization. Overlapping date ranges are\npermitted.",
+      "type": "object",
+      "properties": {
+        "metadata": {
+          "description": "Metadata about the organization.",
+          "$ref": "FieldMetadata"
+        },
+        "title": {
+          "description": "The person's job title at the organization.",
+          "type": "string"
+        },
+        "location": {
+          "description": "The location of the organization office the person works at.",
+          "type": "string"
+        },
+        "current": {
+          "description": "True if the organization is the person's current organization;\nfalse if the organization is a past organization.",
+          "type": "boolean"
+        },
+        "formattedType": {
+          "description": "The read-only type of the organization translated and formatted in the\nviewer's account locale or the `Accept-Language` HTTP header locale.",
+          "type": "string"
+        },
+        "startDate": {
+          "description": "The start date when the person joined the organization.",
+          "$ref": "Date"
+        },
+        "domain": {
+          "description": "The domain name associated with the organization; for example, `google.com`.",
+          "type": "string"
+        },
+        "department": {
+          "description": "The person's department at the organization.",
+          "type": "string"
+        },
+        "type": {
+          "description": "The type of the organization. The type can be custom or predefined.\nPossible values include, but are not limited to, the following:\n\n* `work`\n* `school`",
+          "type": "string"
+        },
+        "phoneticName": {
+          "description": "The phonetic name of the organization.",
+          "type": "string"
+        },
+        "jobDescription": {
+          "description": "The person's job description at the organization.",
+          "type": "string"
+        },
+        "endDate": {
+          "description": "The end date when the person left the organization.",
+          "$ref": "Date"
+        },
+        "symbol": {
+          "description": "The symbol associated with the organization; for example, a stock ticker\nsymbol, abbreviation, or acronym.",
+          "type": "string"
+        },
+        "name": {
+          "description": "The name of the organization.",
+          "type": "string"
+        }
+      },
+      "id": "Organization"
+    },
+    "Biography": {
+      "description": "A person's short biography.",
+      "type": "object",
+      "properties": {
+        "contentType": {
+          "enumDescriptions": [
+            "Unspecified.",
+            "Plain text.",
+            "HTML text."
+          ],
+          "enum": [
+            "CONTENT_TYPE_UNSPECIFIED",
+            "TEXT_PLAIN",
+            "TEXT_HTML"
+          ],
+          "description": "The content type of the biography.",
+          "type": "string"
+        },
+        "metadata": {
+          "description": "Metadata about the biography.",
+          "$ref": "FieldMetadata"
+        },
+        "value": {
+          "description": "The short biography.",
+          "type": "string"
+        }
+      },
+      "id": "Biography"
     }
   },
-  "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"
+    "x16": "http://www.google.com/images/icons/product/search-16.gif",
+    "x32": "http://www.google.com/images/icons/product/search-32.gif"
   },
+  "protocol": "rest",
   "version": "v1",
   "baseUrl": "https://people.googleapis.com/",
   "auth": {
     "oauth2": {
       "scopes": {
-        "https://www.googleapis.com/auth/user.phonenumbers.read": {
-          "description": "View your phone numbers"
-        },
-        "https://www.googleapis.com/auth/userinfo.email": {
-          "description": "View your email address"
-        },
-        "https://www.googleapis.com/auth/user.birthday.read": {
-          "description": "View your complete date of birth"
-        },
-        "https://www.googleapis.com/auth/contacts.readonly": {
-          "description": "View your contacts"
-        },
         "https://www.googleapis.com/auth/plus.login": {
           "description": "Know the list of people in your circles, your age range, and language"
         },
         "https://www.googleapis.com/auth/userinfo.profile": {
           "description": "View your basic profile info"
         },
-        "https://www.googleapis.com/auth/user.emails.read": {
-          "description": "View your email addresses"
+        "https://www.googleapis.com/auth/user.addresses.read": {
+          "description": "View your street addresses"
         },
         "https://www.googleapis.com/auth/contacts": {
           "description": "Manage your contacts"
         },
-        "https://www.googleapis.com/auth/user.addresses.read": {
-          "description": "View your street addresses"
+        "https://www.googleapis.com/auth/user.emails.read": {
+          "description": "View your email addresses"
+        },
+        "https://www.googleapis.com/auth/userinfo.email": {
+          "description": "View your email address"
+        },
+        "https://www.googleapis.com/auth/user.phonenumbers.read": {
+          "description": "View your phone numbers"
+        },
+        "https://www.googleapis.com/auth/contacts.readonly": {
+          "description": "View your contacts"
+        },
+        "https://www.googleapis.com/auth/user.birthday.read": {
+          "description": "View your complete date of birth"
         }
       }
     }
   },
-  "kind": "discovery#restDescription",
-  "description": "Provides access to information about profiles and contacts.",
   "servicePath": "",
+  "description": "Provides access to information about profiles and contacts.",
+  "kind": "discovery#restDescription",
   "rootUrl": "https://people.googleapis.com/",
   "basePath": "",
   "ownerDomain": "google.com",
diff --git a/people/v1/people-gen.go b/people/v1/people-gen.go
index 36b6a99..bf6ccdf 100644
--- a/people/v1/people-gen.go
+++ b/people/v1/people-gen.go
@@ -85,10 +85,9 @@
 }
 
 type Service struct {
-	client                    *http.Client
-	BasePath                  string // API endpoint base URL
-	UserAgent                 string // optional additional User-Agent fragment
-	GoogleClientHeaderElement string // client header fragment, for Google use only
+	client    *http.Client
+	BasePath  string // API endpoint base URL
+	UserAgent string // optional additional User-Agent fragment
 
 	People *PeopleService
 }
@@ -100,10 +99,6 @@
 	return googleapi.UserAgent + " " + s.UserAgent
 }
 
-func (s *Service) clientHeader() string {
-	return gensupport.GoogleClientHeader("20170210", s.GoogleClientHeaderElement)
-}
-
 func NewPeopleService(s *Service) *PeopleService {
 	rs := &PeopleService{s: s}
 	rs.Connections = NewPeopleConnectionsService(s)
@@ -818,6 +813,10 @@
 	// the last request.
 	NextSyncToken string `json:"nextSyncToken,omitempty"`
 
+	// TotalPeople: The total number of people in the list without
+	// pagination.
+	TotalPeople int64 `json:"totalPeople,omitempty"`
+
 	// ServerResponse contains the HTTP response code and headers from the
 	// server.
 	googleapi.ServerResponse `json:"-"`
@@ -1962,7 +1961,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	if c.ifNoneMatch_ != "" {
 		reqHeaders.Set("If-None-Match", c.ifNoneMatch_)
 	}
@@ -2147,7 +2145,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	if c.ifNoneMatch_ != "" {
 		reqHeaders.Set("If-None-Match", c.ifNoneMatch_)
 	}
@@ -2360,7 +2357,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	if c.ifNoneMatch_ != "" {
 		reqHeaders.Set("If-None-Match", c.ifNoneMatch_)
 	}
diff --git a/playmoviespartner/v1/playmoviespartner-api.json b/playmoviespartner/v1/playmoviespartner-api.json
index efd7ea3..1b9d946 100644
--- a/playmoviespartner/v1/playmoviespartner-api.json
+++ b/playmoviespartner/v1/playmoviespartner-api.json
@@ -1,66 +1,56 @@
 {
-  "discoveryVersion": "v1",
+  "title": "Google Play Movies Partner API",
   "ownerName": "Google",
+  "discoveryVersion": "v1",
   "resources": {
     "accounts": {
       "resources": {
         "avails": {
           "methods": {
             "get": {
-              "httpMethod": "GET",
+              "description": "Get an Avail given its avail group id and avail id.",
+              "response": {
+                "$ref": "Avail"
+              },
               "parameterOrder": [
                 "accountId",
                 "availId"
               ],
-              "response": {
-                "$ref": "Avail"
-              },
-              "parameters": {
-                "availId": {
-                  "required": true,
-                  "type": "string",
-                  "location": "path",
-                  "description": "REQUIRED. Avail ID."
-                },
-                "accountId": {
-                  "location": "path",
-                  "description": "REQUIRED. See _General rules_ for more information about this field.",
-                  "required": true,
-                  "type": "string"
-                }
-              },
-              "scopes": [
-                "https://www.googleapis.com/auth/playmovies_partner.readonly"
-              ],
-              "flatPath": "v1/accounts/{accountId}/avails/{availId}",
-              "id": "playmoviespartner.accounts.avails.get",
-              "path": "v1/accounts/{accountId}/avails/{availId}",
-              "description": "Get an Avail given its avail group id and avail id."
-            },
-            "list": {
-              "description": "List Avails owned or managed by the partner.\n\nSee _Authentication and Authorization rules_ and\n_List methods rules_ for more information about this method.",
-              "response": {
-                "$ref": "ListAvailsResponse"
-              },
-              "parameterOrder": [
-                "accountId"
-              ],
               "httpMethod": "GET",
               "scopes": [
                 "https://www.googleapis.com/auth/playmovies_partner.readonly"
               ],
               "parameters": {
-                "altId": {
-                  "description": "Filter Avails that match a case-insensitive, partner-specific custom id.\nNOTE: this field is deprecated and will be removed on V2; `alt_ids`\nshould be used instead.",
+                "availId": {
+                  "description": "REQUIRED. Avail ID.",
+                  "required": true,
                   "type": "string",
-                  "location": "query"
+                  "location": "path"
                 },
-                "studioNames": {
-                  "description": "See _List methods rules_ for info about this field.",
+                "accountId": {
+                  "description": "REQUIRED. See _General rules_ for more information about this field.",
+                  "required": true,
                   "type": "string",
-                  "repeated": true,
-                  "location": "query"
-                },
+                  "location": "path"
+                }
+              },
+              "flatPath": "v1/accounts/{accountId}/avails/{availId}",
+              "path": "v1/accounts/{accountId}/avails/{availId}",
+              "id": "playmoviespartner.accounts.avails.get"
+            },
+            "list": {
+              "flatPath": "v1/accounts/{accountId}/avails",
+              "id": "playmoviespartner.accounts.avails.list",
+              "path": "v1/accounts/{accountId}/avails",
+              "description": "List Avails owned or managed by the partner.\n\nSee _Authentication and Authorization rules_ and\n_List methods rules_ for more information about this method.",
+              "httpMethod": "GET",
+              "parameterOrder": [
+                "accountId"
+              ],
+              "response": {
+                "$ref": "ListAvailsResponse"
+              },
+              "parameters": {
                 "accountId": {
                   "location": "path",
                   "description": "REQUIRED. See _General rules_ for more information about this field.",
@@ -68,15 +58,15 @@
                   "type": "string"
                 },
                 "territories": {
+                  "description": "Filter Avails that match (case-insensitive) any of the given country codes,\nusing the \"ISO 3166-1 alpha-2\" format (examples: \"US\", \"us\", \"Us\").",
                   "type": "string",
                   "repeated": true,
-                  "location": "query",
-                  "description": "Filter Avails that match (case-insensitive) any of the given country codes,\nusing the \"ISO 3166-1 alpha-2\" format (examples: \"US\", \"us\", \"Us\")."
+                  "location": "query"
                 },
                 "title": {
-                  "location": "query",
                   "description": "Filter that matches Avails with a `title_internal_alias`,\n`series_title_internal_alias`, `season_title_internal_alias`,\nor `episode_title_internal_alias` that contains the given\ncase-insensitive title.",
-                  "type": "string"
+                  "type": "string",
+                  "location": "query"
                 },
                 "videoIds": {
                   "location": "query",
@@ -90,10 +80,10 @@
                   "type": "string"
                 },
                 "pageSize": {
-                  "location": "query",
                   "description": "See _List methods rules_ for info about this field.",
                   "format": "int32",
-                  "type": "integer"
+                  "type": "integer",
+                  "location": "query"
                 },
                 "altIds": {
                   "description": "Filter Avails that match (case-insensitive) any of the given partner-specific custom ids.",
@@ -102,23 +92,36 @@
                   "location": "query"
                 },
                 "pphNames": {
+                  "description": "See _List methods rules_ for info about this field.",
+                  "type": "string",
+                  "repeated": true,
+                  "location": "query"
+                },
+                "altId": {
+                  "description": "Filter Avails that match a case-insensitive, partner-specific custom id.\nNOTE: this field is deprecated and will be removed on V2; `alt_ids`\nshould be used instead.",
+                  "type": "string",
+                  "location": "query"
+                },
+                "studioNames": {
                   "location": "query",
                   "description": "See _List methods rules_ for info about this field.",
                   "type": "string",
                   "repeated": true
                 }
               },
-              "flatPath": "v1/accounts/{accountId}/avails",
-              "path": "v1/accounts/{accountId}/avails",
-              "id": "playmoviespartner.accounts.avails.list"
+              "scopes": [
+                "https://www.googleapis.com/auth/playmovies_partner.readonly"
+              ]
             }
           }
         },
         "orders": {
           "methods": {
             "get": {
+              "flatPath": "v1/accounts/{accountId}/orders/{orderId}",
+              "path": "v1/accounts/{accountId}/orders/{orderId}",
+              "id": "playmoviespartner.accounts.orders.get",
               "description": "Get an Order given its id.\n\nSee _Authentication and Authorization rules_ and\n_Get methods rules_ for more information about this method.",
-              "httpMethod": "GET",
               "response": {
                 "$ref": "Order"
               },
@@ -126,6 +129,7 @@
                 "accountId",
                 "orderId"
               ],
+              "httpMethod": "GET",
               "parameters": {
                 "accountId": {
                   "location": "path",
@@ -134,58 +138,55 @@
                   "type": "string"
                 },
                 "orderId": {
+                  "location": "path",
                   "description": "REQUIRED. Order ID.",
                   "required": true,
-                  "type": "string",
-                  "location": "path"
+                  "type": "string"
                 }
               },
               "scopes": [
                 "https://www.googleapis.com/auth/playmovies_partner.readonly"
-              ],
-              "flatPath": "v1/accounts/{accountId}/orders/{orderId}",
-              "id": "playmoviespartner.accounts.orders.get",
-              "path": "v1/accounts/{accountId}/orders/{orderId}"
+              ]
             },
             "list": {
-              "description": "List Orders owned or managed by the partner.\n\nSee _Authentication and Authorization rules_ and\n_List methods rules_ for more information about this method.",
-              "httpMethod": "GET",
               "response": {
                 "$ref": "ListOrdersResponse"
               },
               "parameterOrder": [
                 "accountId"
               ],
+              "httpMethod": "GET",
               "parameters": {
+                "videoIds": {
+                  "location": "query",
+                  "description": "Filter Orders that match any of the given `video_id`s.",
+                  "type": "string",
+                  "repeated": true
+                },
+                "customId": {
+                  "location": "query",
+                  "description": "Filter Orders that match a case-insensitive, partner-specific custom id.",
+                  "type": "string"
+                },
                 "pageToken": {
                   "location": "query",
                   "description": "See _List methods rules_ for info about this field.",
                   "type": "string"
                 },
-                "videoIds": {
-                  "type": "string",
-                  "repeated": true,
-                  "location": "query",
-                  "description": "Filter Orders that match any of the given `video_id`s."
-                },
-                "customId": {
-                  "description": "Filter Orders that match a case-insensitive, partner-specific custom id.",
-                  "type": "string",
-                  "location": "query"
-                },
                 "pageSize": {
-                  "location": "query",
                   "description": "See _List methods rules_ for info about this field.",
                   "format": "int32",
-                  "type": "integer"
-                },
-                "pphNames": {
-                  "description": "See _List methods rules_ for info about this field.",
-                  "type": "string",
-                  "repeated": true,
+                  "type": "integer",
                   "location": "query"
                 },
+                "pphNames": {
+                  "location": "query",
+                  "description": "See _List methods rules_ for info about this field.",
+                  "type": "string",
+                  "repeated": true
+                },
                 "status": {
+                  "description": "Filter Orders that match one of the given status.",
                   "type": "string",
                   "repeated": true,
                   "location": "query",
@@ -196,117 +197,117 @@
                     "STATUS_PROCESSING",
                     "STATUS_UNFULFILLED",
                     "STATUS_NOT_AVAILABLE"
-                  ],
-                  "description": "Filter Orders that match one of the given status."
-                },
-                "name": {
-                  "location": "query",
-                  "description": "Filter that matches Orders with a `name`, `show`, `season` or `episode`\nthat contains the given case-insensitive name.",
-                  "type": "string"
+                  ]
                 },
                 "studioNames": {
-                  "repeated": true,
-                  "location": "query",
-                  "description": "See _List methods rules_ for info about this field.",
-                  "type": "string"
-                },
-                "accountId": {
-                  "description": "REQUIRED. See _General rules_ for more information about this field.",
-                  "required": true,
-                  "type": "string",
-                  "location": "path"
-                }
-              },
-              "scopes": [
-                "https://www.googleapis.com/auth/playmovies_partner.readonly"
-              ],
-              "flatPath": "v1/accounts/{accountId}/orders",
-              "id": "playmoviespartner.accounts.orders.list",
-              "path": "v1/accounts/{accountId}/orders"
-            }
-          }
-        },
-        "storeInfos": {
-          "methods": {
-            "list": {
-              "parameters": {
-                "pphNames": {
                   "description": "See _List methods rules_ for info about this field.",
                   "type": "string",
                   "repeated": true,
                   "location": "query"
                 },
-                "countries": {
-                  "type": "string",
-                  "repeated": true,
-                  "location": "query",
-                  "description": "Filter StoreInfos that match (case-insensitive) any of the given country\ncodes, using the \"ISO 3166-1 alpha-2\" format (examples: \"US\", \"us\", \"Us\")."
-                },
-                "studioNames": {
-                  "repeated": true,
-                  "location": "query",
-                  "description": "See _List methods rules_ for info about this field.",
-                  "type": "string"
-                },
                 "name": {
-                  "location": "query",
-                  "description": "Filter that matches StoreInfos with a `name` or `show_name`\nthat contains the given case-insensitive name.",
-                  "type": "string"
+                  "description": "Filter that matches Orders with a `name`, `show`, `season` or `episode`\nthat contains the given case-insensitive name.",
+                  "type": "string",
+                  "location": "query"
                 },
                 "accountId": {
                   "location": "path",
                   "description": "REQUIRED. See _General rules_ for more information about this field.",
                   "required": true,
                   "type": "string"
-                },
-                "seasonIds": {
-                  "repeated": true,
-                  "location": "query",
-                  "description": "Filter StoreInfos that match any of the given `season_id`s.",
-                  "type": "string"
-                },
-                "videoIds": {
-                  "repeated": true,
-                  "location": "query",
-                  "description": "Filter StoreInfos that match any of the given `video_id`s.",
-                  "type": "string"
-                },
-                "videoId": {
-                  "location": "query",
-                  "description": "Filter StoreInfos that match a given `video_id`.\nNOTE: this field is deprecated and will be removed on V2; `video_ids`\nshould be used instead.",
-                  "type": "string"
-                },
-                "pageToken": {
-                  "description": "See _List methods rules_ for info about this field.",
-                  "type": "string",
-                  "location": "query"
-                },
-                "pageSize": {
-                  "description": "See _List methods rules_ for info about this field.",
-                  "format": "int32",
-                  "type": "integer",
-                  "location": "query"
-                },
-                "mids": {
-                  "type": "string",
-                  "repeated": true,
-                  "location": "query",
-                  "description": "Filter StoreInfos that match any of the given `mid`s."
                 }
               },
               "scopes": [
                 "https://www.googleapis.com/auth/playmovies_partner.readonly"
               ],
+              "flatPath": "v1/accounts/{accountId}/orders",
+              "path": "v1/accounts/{accountId}/orders",
+              "id": "playmoviespartner.accounts.orders.list",
+              "description": "List Orders owned or managed by the partner.\n\nSee _Authentication and Authorization rules_ and\n_List methods rules_ for more information about this method."
+            }
+          }
+        },
+        "storeInfos": {
+          "methods": {
+            "list": {
               "flatPath": "v1/accounts/{accountId}/storeInfos",
-              "id": "playmoviespartner.accounts.storeInfos.list",
               "path": "v1/accounts/{accountId}/storeInfos",
+              "id": "playmoviespartner.accounts.storeInfos.list",
               "description": "List StoreInfos owned or managed by the partner.\n\nSee _Authentication and Authorization rules_ and\n_List methods rules_ for more information about this method.",
-              "httpMethod": "GET",
+              "response": {
+                "$ref": "ListStoreInfosResponse"
+              },
               "parameterOrder": [
                 "accountId"
               ],
-              "response": {
-                "$ref": "ListStoreInfosResponse"
+              "httpMethod": "GET",
+              "scopes": [
+                "https://www.googleapis.com/auth/playmovies_partner.readonly"
+              ],
+              "parameters": {
+                "pageSize": {
+                  "location": "query",
+                  "description": "See _List methods rules_ for info about this field.",
+                  "format": "int32",
+                  "type": "integer"
+                },
+                "mids": {
+                  "location": "query",
+                  "description": "Filter StoreInfos that match any of the given `mid`s.",
+                  "type": "string",
+                  "repeated": true
+                },
+                "pphNames": {
+                  "location": "query",
+                  "description": "See _List methods rules_ for info about this field.",
+                  "type": "string",
+                  "repeated": true
+                },
+                "countries": {
+                  "location": "query",
+                  "description": "Filter StoreInfos that match (case-insensitive) any of the given country\ncodes, using the \"ISO 3166-1 alpha-2\" format (examples: \"US\", \"us\", \"Us\").",
+                  "type": "string",
+                  "repeated": true
+                },
+                "name": {
+                  "description": "Filter that matches StoreInfos with a `name` or `show_name`\nthat contains the given case-insensitive name.",
+                  "type": "string",
+                  "location": "query"
+                },
+                "studioNames": {
+                  "location": "query",
+                  "description": "See _List methods rules_ for info about this field.",
+                  "type": "string",
+                  "repeated": true
+                },
+                "accountId": {
+                  "description": "REQUIRED. See _General rules_ for more information about this field.",
+                  "required": true,
+                  "type": "string",
+                  "location": "path"
+                },
+                "seasonIds": {
+                  "location": "query",
+                  "description": "Filter StoreInfos that match any of the given `season_id`s.",
+                  "type": "string",
+                  "repeated": true
+                },
+                "videoIds": {
+                  "location": "query",
+                  "description": "Filter StoreInfos that match any of the given `video_id`s.",
+                  "type": "string",
+                  "repeated": true
+                },
+                "videoId": {
+                  "description": "Filter StoreInfos that match a given `video_id`.\nNOTE: this field is deprecated and will be removed on V2; `video_ids`\nshould be used instead.",
+                  "type": "string",
+                  "location": "query"
+                },
+                "pageToken": {
+                  "description": "See _List methods rules_ for info about this field.",
+                  "type": "string",
+                  "location": "query"
+                }
               }
             }
           },
@@ -314,25 +315,17 @@
             "country": {
               "methods": {
                 "get": {
-                  "httpMethod": "GET",
+                  "description": "Get a StoreInfo given its video id and country.\n\nSee _Authentication and Authorization rules_ and\n_Get methods rules_ for more information about this method.",
+                  "response": {
+                    "$ref": "StoreInfo"
+                  },
                   "parameterOrder": [
                     "accountId",
                     "videoId",
                     "country"
                   ],
-                  "response": {
-                    "$ref": "StoreInfo"
-                  },
-                  "scopes": [
-                    "https://www.googleapis.com/auth/playmovies_partner.readonly"
-                  ],
+                  "httpMethod": "GET",
                   "parameters": {
-                    "accountId": {
-                      "description": "REQUIRED. See _General rules_ for more information about this field.",
-                      "required": true,
-                      "type": "string",
-                      "location": "path"
-                    },
                     "videoId": {
                       "location": "path",
                       "description": "REQUIRED. Video ID.",
@@ -344,12 +337,20 @@
                       "description": "REQUIRED. Edit country.",
                       "required": true,
                       "type": "string"
+                    },
+                    "accountId": {
+                      "location": "path",
+                      "description": "REQUIRED. See _General rules_ for more information about this field.",
+                      "required": true,
+                      "type": "string"
                     }
                   },
+                  "scopes": [
+                    "https://www.googleapis.com/auth/playmovies_partner.readonly"
+                  ],
                   "flatPath": "v1/accounts/{accountId}/storeInfos/{videoId}/country/{country}",
-                  "id": "playmoviespartner.accounts.storeInfos.country.get",
                   "path": "v1/accounts/{accountId}/storeInfos/{videoId}/country/{country}",
-                  "description": "Get a StoreInfo given its video id and country.\n\nSee _Authentication and Authorization rules_ and\n_Get methods rules_ for more information about this method."
+                  "id": "playmoviespartner.accounts.storeInfos.country.get"
                 }
               }
             }
@@ -359,11 +360,32 @@
     }
   },
   "parameters": {
-    "upload_protocol": {
+    "quotaUser": {
       "location": "query",
-      "description": "Upload protocol for media (e.g. \"raw\", \"multipart\").",
+      "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"
     },
+    "pp": {
+      "description": "Pretty-print response.",
+      "type": "boolean",
+      "default": "true",
+      "location": "query"
+    },
+    "bearer_token": {
+      "description": "OAuth bearer token.",
+      "type": "string",
+      "location": "query"
+    },
+    "oauth_token": {
+      "location": "query",
+      "description": "OAuth 2.0 token for the current user.",
+      "type": "string"
+    },
+    "upload_protocol": {
+      "description": "Upload protocol for media (e.g. \"raw\", \"multipart\").",
+      "type": "string",
+      "location": "query"
+    },
     "prettyPrint": {
       "location": "query",
       "description": "Returns response with indentations and line breaks.",
@@ -376,16 +398,18 @@
       "location": "query"
     },
     "uploadType": {
+      "location": "query",
       "description": "Legacy upload protocol for media (e.g. \"media\", \"multipart\").",
+      "type": "string"
+    },
+    "callback": {
+      "description": "JSONP",
       "type": "string",
       "location": "query"
     },
-    "callback": {
-      "location": "query",
-      "description": "JSONP",
-      "type": "string"
-    },
     "$.xgafv": {
+      "description": "V1 error format.",
+      "type": "string",
       "enumDescriptions": [
         "v1 error format",
         "v2 error format"
@@ -394,11 +418,15 @@
       "enum": [
         "1",
         "2"
-      ],
-      "description": "V1 error format.",
-      "type": "string"
+      ]
     },
     "alt": {
+      "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",
       "description": "Data format for response.",
       "default": "json",
@@ -406,69 +434,41 @@
         "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"
       ]
     },
     "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."
-    },
-    "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"
     },
-    "pp": {
-      "location": "query",
-      "description": "Pretty-print response.",
-      "type": "boolean",
-      "default": "true"
-    },
-    "bearer_token": {
-      "location": "query",
-      "description": "OAuth bearer token.",
-      "type": "string"
-    },
-    "oauth_token": {
-      "location": "query",
-      "description": "OAuth 2.0 token for the current user.",
-      "type": "string"
+    "access_token": {
+      "description": "OAuth access token.",
+      "type": "string",
+      "location": "query"
     }
   },
   "schemas": {
     "Order": {
-      "id": "Order",
       "description": "An Order tracks the fulfillment of an Edit when delivered using the\nlegacy, non-component-based delivery.\n\nEach Order is uniquely identified by an `order_id`, which is generated\nby Google.\n\nExternally, Orders can also be identified by partners using its `custom_id`\n(when provided).",
       "type": "object",
       "properties": {
+        "legacyPriority": {
+          "description": "Legacy Order priority, as defined by Google.\nExample: 'P0'",
+          "type": "string"
+        },
         "pphName": {
           "description": "Name of the post-production house that manages the Edit ordered.",
           "type": "string"
         },
-        "legacyPriority": {
-          "type": "string",
-          "description": "Legacy Order priority, as defined by Google.\nExample: 'P0'"
-        },
         "orderedTime": {
           "description": "Timestamp when the Order was created.",
           "format": "google-datetime",
           "type": "string"
         },
         "priority": {
-          "type": "number",
           "description": "Order priority, as defined by Google.\nThe higher the value, the higher the priority.\nExample: 90",
-          "format": "double"
+          "format": "double",
+          "type": "number"
         },
         "videoId": {
           "description": "Google-generated ID identifying the video linked to this Order, once\ndelivered.\nExample: 'gtry456_xc'.",
@@ -486,6 +486,8 @@
           }
         },
         "statusDetail": {
+          "description": "Detailed status of the order",
+          "type": "string",
           "enumDescriptions": [
             "Value could not be determined, please contact technical support if\nit should.",
             "Approved by Google's Quality Control team.",
@@ -507,18 +509,9 @@
             "ORDER_STATUS_AWAITING_REDELIVERY",
             "ORDER_STATUS_READY_FOR_QC",
             "ORDER_STATUS_FILE_PROCESSING"
-          ],
-          "description": "Detailed status of the order",
-          "type": "string"
-        },
-        "earliestAvailStartTime": {
-          "description": "Timestamp of the earliest start date of the Avails\nlinked to this Order.",
-          "format": "google-datetime",
-          "type": "string"
+          ]
         },
         "status": {
-          "description": "High-level status of the order.",
-          "type": "string",
           "enumDescriptions": [
             "Value could not be determined, please contact technical support if\nit should.",
             "Approved by Google.",
@@ -534,7 +527,14 @@
             "STATUS_PROCESSING",
             "STATUS_UNFULFILLED",
             "STATUS_NOT_AVAILABLE"
-          ]
+          ],
+          "description": "High-level status of the order.",
+          "type": "string"
+        },
+        "earliestAvailStartTime": {
+          "description": "Timestamp of the earliest start date of the Avails\nlinked to this Order.",
+          "format": "google-datetime",
+          "type": "string"
         },
         "name": {
           "description": "Default Edit name,\nusually in the language of the country of origin.\nExample: \"Googlers, The\".",
@@ -545,9 +545,9 @@
           "type": "string"
         },
         "receivedTime": {
-          "type": "string",
           "description": "Timestamp when the Order was fulfilled.",
-          "format": "google-datetime"
+          "format": "google-datetime",
+          "type": "string"
         },
         "seasonName": {
           "description": "Default Season name,\nusually in the language of the country of origin.\nOnly available for TV Edits\nExample: \"Googlers, The - A Brave New World\".",
@@ -571,17 +571,17 @@
           "type": "string"
         },
         "normalizedPriority": {
-          "enum": [
-            "NORMALIZED_PRIORITY_UNSPECIFIED",
-            "LOW_PRIORITY",
-            "HIGH_PRIORITY"
-          ],
           "description": "A simpler representation of the priority.",
           "type": "string",
           "enumDescriptions": [
             "Value could not be determined, please contact technical support if\nit should.",
             "A low-priority asset, typically from a library movie.",
             "A high-priority asset, typically from a new release or box office hit."
+          ],
+          "enum": [
+            "NORMALIZED_PRIORITY_UNSPECIFIED",
+            "LOW_PRIORITY",
+            "HIGH_PRIORITY"
           ]
         },
         "orderId": {
@@ -614,10 +614,10 @@
           "description": "YouTube Channel ID that should be used to fulfill the Order.\nExample: \"UCRG64darCZhb\".",
           "type": "string"
         }
-      }
+      },
+      "id": "Order"
     },
     "ListStoreInfosResponse": {
-      "id": "ListStoreInfosResponse",
       "description": "Response to the 'ListStoreInfos' method.",
       "type": "object",
       "properties": {
@@ -637,41 +637,37 @@
           "format": "int32",
           "type": "integer"
         }
-      }
+      },
+      "id": "ListStoreInfosResponse"
     },
     "ListAvailsResponse": {
+      "description": "Response to the 'ListAvails' method.",
+      "type": "object",
       "properties": {
-        "totalSize": {
-          "description": "See _List methods rules_ for more information about this field.",
-          "format": "int32",
-          "type": "integer"
-        },
         "avails": {
+          "description": "List of Avails that match the request criteria.",
           "type": "array",
           "items": {
             "$ref": "Avail"
-          },
-          "description": "List of Avails that match the request criteria."
+          }
         },
         "nextPageToken": {
           "description": "See _List methods rules_ for info about this field.",
           "type": "string"
+        },
+        "totalSize": {
+          "description": "See _List methods rules_ for more information about this field.",
+          "format": "int32",
+          "type": "integer"
         }
       },
-      "id": "ListAvailsResponse",
-      "description": "Response to the 'ListAvails' method.",
-      "type": "object"
+      "id": "ListAvailsResponse"
     },
     "Avail": {
+      "description": "An Avail describes the Availability Window of a specific Edit in a given\ncountry, which means the period Google is allowed to sell or rent the Edit.\n\nAvails are exposed in EMA format Version 1.6b (available at\nhttp://www.movielabs.com/md/avails/)\n\nStudios can see the Avails for the Titles they own.\nPost-production houses cannot see any Avails.",
+      "type": "object",
       "properties": {
         "workType": {
-          "enum": [
-            "TITLE_TYPE_UNSPECIFIED",
-            "MOVIE",
-            "SEASON",
-            "EPISODE",
-            "BUNDLE"
-          ],
           "description": "Work type as enumerated in EMA.",
           "type": "string",
           "enumDescriptions": [
@@ -680,6 +676,13 @@
             "A season of a TV show.",
             "An episode of a TV show.",
             "A collection of movies, i.e. \"Googlers 1 and Googlers, the return\""
+          ],
+          "enum": [
+            "TITLE_TYPE_UNSPECIFIED",
+            "MOVIE",
+            "SEASON",
+            "EPISODE",
+            "BUNDLE"
           ]
         },
         "availId": {
@@ -707,14 +710,16 @@
           "type": "string"
         },
         "priceType": {
-          "type": "string",
-          "description": "Type of pricing that should be applied to this Avail\nbased on how the partner classify them.\nExample: \"Tier\", \"WSP\", \"SRP\", or \"Category\"."
+          "description": "Type of pricing that should be applied to this Avail\nbased on how the partner classify them.\nExample: \"Tier\", \"WSP\", \"SRP\", or \"Category\".",
+          "type": "string"
         },
         "captionIncluded": {
           "description": "Communicating if caption file will be delivered.",
           "type": "boolean"
         },
         "licenseType": {
+          "description": "Type of transaction.",
+          "type": "string",
           "enumDescriptions": [
             "Value could not be determined, please contact technical support if\nit should.",
             "Electronic Sell Through - purchase policy for unlimited viewing.",
@@ -728,9 +733,7 @@
             "VOD",
             "SVOD",
             "POEST"
-          ],
-          "description": "Type of transaction.",
-          "type": "string"
+          ]
         },
         "seasonNumber": {
           "description": "The number assigned to the season within a series.\nOnly available on TV Avails.\nExample: \"1\".",
@@ -749,11 +752,7 @@
           "type": "string"
         },
         "start": {
-          "type": "string",
-          "description": "Start of term in YYYY-MM-DD format in the timezone of the\ncountry of the Avail.\nExample: \"2013-05-14\"."
-        },
-        "ratingSystem": {
-          "description": "Rating system applied to the version of title within territory\nof Avail.\nRating systems should be formatted as per\n[EMA ratings spec](http://www.movielabs.com/md/ratings/)\nExample: \"MPAA\"",
+          "description": "Start of term in YYYY-MM-DD format in the timezone of the\ncountry of the Avail.\nExample: \"2013-05-14\".",
           "type": "string"
         },
         "pphNames": {
@@ -763,6 +762,10 @@
             "type": "string"
           }
         },
+        "ratingSystem": {
+          "description": "Rating system applied to the version of title within territory\nof Avail.\nRating systems should be formatted as per\n[EMA ratings spec](http://www.movielabs.com/md/ratings/)\nExample: \"MPAA\"",
+          "type": "string"
+        },
         "seriesAltId": {
           "description": "Other identifier referring to the series, as defined by partner.\nOnly available on TV avails.\nExample: \"rs_googlers\".",
           "type": "string"
@@ -780,8 +783,6 @@
           "type": "string"
         },
         "formatProfile": {
-          "description": "Indicates the format profile covered by the transaction.",
-          "type": "string",
           "enumDescriptions": [
             "Value could not be determined, please contact technical support if\nit should.",
             "Standard-definition format.",
@@ -793,7 +794,9 @@
             "SD",
             "HD",
             "UHD"
-          ]
+          ],
+          "description": "Indicates the format profile covered by the transaction.",
+          "type": "string"
         },
         "ratingValue": {
           "description": "Value representing the rating.\nRatings should be formatted as per http://www.movielabs.com/md/ratings/\nExample: \"PG\"",
@@ -811,16 +814,16 @@
           "description": "Spoken language of the intended audience.\nLanguage shall be encoded in accordance with RFC 5646.\nExample: \"fr\".",
           "type": "string"
         },
-        "captionExemption": {
-          "description": "Communicating an exempt category as defined by FCC regulations.\nIt is not required for non-US Avails.\nExample: \"1\"",
+        "productId": {
+          "description": "Edit Identifier. This should be the Edit Level EIDR.\nExample: \"10.2340/1489-49A2-3956-4B2D-FE16-6\"",
           "type": "string"
         },
         "displayName": {
           "description": "The name of the studio that owns the Edit referred in the Avail.\nThis is the equivalent of `studio_name` in other resources, but it follows\nthe EMA nomenclature.\nExample: \"Google Films\".",
           "type": "string"
         },
-        "productId": {
-          "description": "Edit Identifier. This should be the Edit Level EIDR.\nExample: \"10.2340/1489-49A2-3956-4B2D-FE16-6\"",
+        "captionExemption": {
+          "description": "Communicating an exempt category as defined by FCC regulations.\nIt is not required for non-US Avails.\nExample: \"1\"",
           "type": "string"
         },
         "seasonTitleInternalAlias": {
@@ -840,11 +843,11 @@
           "type": "string"
         }
       },
-      "id": "Avail",
-      "description": "An Avail describes the Availability Window of a specific Edit in a given\ncountry, which means the period Google is allowed to sell or rent the Edit.\n\nAvails are exposed in EMA format Version 1.6b (available at\nhttp://www.movielabs.com/md/avails/)\n\nStudios can see the Avails for the Titles they own.\nPost-production houses cannot see any Avails.",
-      "type": "object"
+      "id": "Avail"
     },
     "ListOrdersResponse": {
+      "description": "Response to the 'ListOrders' method.",
+      "type": "object",
       "properties": {
         "orders": {
           "description": "List of Orders that match the request criteria.",
@@ -863,62 +866,12 @@
           "type": "integer"
         }
       },
-      "id": "ListOrdersResponse",
-      "description": "Response to the 'ListOrders' method.",
-      "type": "object"
+      "id": "ListOrdersResponse"
     },
     "StoreInfo": {
       "description": "Information about a playable sequence (video) associated with an Edit\nand available at the Google Play Store.\n\nInternally, each StoreInfo is uniquely identified by a `video_id`\nand `country`.\n\nExternally, Title-level EIDR or Edit-level EIDR, if provided,\ncan also be used to identify a specific title or edit in a country.",
       "type": "object",
       "properties": {
-        "seasonNumber": {
-          "description": "The number assigned to the season within a show.\nOnly available on TV Edits.\nExample: \"1\".",
-          "type": "string"
-        },
-        "editLevelEidr": {
-          "description": "Edit-level EIDR ID.\nExample: \"10.5240/1489-49A2-3956-4B2D-FE16-6\".",
-          "type": "string"
-        },
-        "hasEstOffer": {
-          "description": "Whether the Edit has a EST offer.",
-          "type": "boolean"
-        },
-        "hasSdOffer": {
-          "description": "Whether the Edit has a SD offer.",
-          "type": "boolean"
-        },
-        "videoId": {
-          "description": "Google-generated ID identifying the video linked to the Edit.\nExample: 'gtry456_xc'",
-          "type": "string"
-        },
-        "liveTime": {
-          "description": "Timestamp when the Edit went live on the Store.",
-          "format": "google-datetime",
-          "type": "string"
-        },
-        "hasInfoCards": {
-          "type": "boolean",
-          "description": "Whether the Edit has info cards."
-        },
-        "hasVodOffer": {
-          "description": "Whether the Edit has a VOD offer.",
-          "type": "boolean"
-        },
-        "pphNames": {
-          "description": "Name of the post-production houses that manage the Edit.",
-          "type": "array",
-          "items": {
-            "type": "string"
-          }
-        },
-        "episodeNumber": {
-          "description": "The number assigned to the episode within a season.\nOnly available on TV Edits.\nExample: \"1\".",
-          "type": "string"
-        },
-        "studioName": {
-          "type": "string",
-          "description": "Name of the studio that owns the Edit ordered."
-        },
         "subtitles": {
           "description": "Subtitles available for this Edit.",
           "type": "array",
@@ -942,12 +895,10 @@
           "type": "string"
         },
         "showId": {
-          "type": "string",
-          "description": "Google-generated ID identifying the show linked to the Edit.\nOnly available for TV Edits.\nExample: 'et2hsue_x'"
+          "description": "Google-generated ID identifying the show linked to the Edit.\nOnly available for TV Edits.\nExample: 'et2hsue_x'",
+          "type": "string"
         },
         "type": {
-          "description": "Edit type, like Movie, Episode or Season.",
-          "type": "string",
           "enumDescriptions": [
             "Value could not be determined, please contact technical support if\nit should.",
             "A movie picture.",
@@ -961,7 +912,9 @@
             "SEASON",
             "EPISODE",
             "BUNDLE"
-          ]
+          ],
+          "description": "Edit type, like Movie, Episode or Season.",
+          "type": "string"
         },
         "trailerId": {
           "description": "Google-generated ID identifying the trailer linked to the Edit.\nExample: 'bhd_4e_cx'",
@@ -992,18 +945,66 @@
           "type": "string"
         },
         "seasonName": {
-          "type": "string",
-          "description": "Default Season name, usually in the language of the country of\norigin.\nOnly available for TV Edits\nExample: \"Googlers, The - A Brave New World\"."
+          "description": "Default Season name, usually in the language of the country of\norigin.\nOnly available for TV Edits\nExample: \"Googlers, The - A Brave New World\".",
+          "type": "string"
+        },
+        "seasonNumber": {
+          "description": "The number assigned to the season within a show.\nOnly available on TV Edits.\nExample: \"1\".",
+          "type": "string"
+        },
+        "editLevelEidr": {
+          "description": "Edit-level EIDR ID.\nExample: \"10.5240/1489-49A2-3956-4B2D-FE16-6\".",
+          "type": "string"
+        },
+        "hasEstOffer": {
+          "description": "Whether the Edit has a EST offer.",
+          "type": "boolean"
+        },
+        "hasSdOffer": {
+          "description": "Whether the Edit has a SD offer.",
+          "type": "boolean"
+        },
+        "videoId": {
+          "description": "Google-generated ID identifying the video linked to the Edit.\nExample: 'gtry456_xc'",
+          "type": "string"
+        },
+        "liveTime": {
+          "description": "Timestamp when the Edit went live on the Store.",
+          "format": "google-datetime",
+          "type": "string"
+        },
+        "hasInfoCards": {
+          "description": "Whether the Edit has info cards.",
+          "type": "boolean"
+        },
+        "hasVodOffer": {
+          "description": "Whether the Edit has a VOD offer.",
+          "type": "boolean"
+        },
+        "pphNames": {
+          "description": "Name of the post-production houses that manage the Edit.",
+          "type": "array",
+          "items": {
+            "type": "string"
+          }
+        },
+        "episodeNumber": {
+          "description": "The number assigned to the episode within a season.\nOnly available on TV Edits.\nExample: \"1\".",
+          "type": "string"
+        },
+        "studioName": {
+          "description": "Name of the studio that owns the Edit ordered.",
+          "type": "string"
         }
       },
       "id": "StoreInfo"
     }
   },
+  "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"
   },
-  "protocol": "rest",
   "version": "v1",
   "baseUrl": "https://playmoviespartner.googleapis.com/",
   "canonicalName": "Play Movies",
@@ -1016,9 +1017,9 @@
       }
     }
   },
-  "servicePath": "",
   "description": "Gets the delivery status of titles for Google Play Movies Partners.",
   "kind": "discovery#restDescription",
+  "servicePath": "",
   "rootUrl": "https://playmoviespartner.googleapis.com/",
   "basePath": "",
   "ownerDomain": "google.com",
@@ -1026,6 +1027,5 @@
   "batchPath": "batch",
   "id": "playmoviespartner:v1",
   "documentationLink": "https://developers.google.com/playmoviespartner/",
-  "revision": "20170228",
-  "title": "Google Play Movies Partner API"
+  "revision": "20170321"
 }
diff --git a/playmoviespartner/v1/playmoviespartner-gen.go b/playmoviespartner/v1/playmoviespartner-gen.go
index 5db5ac8..96b85a3 100644
--- a/playmoviespartner/v1/playmoviespartner-gen.go
+++ b/playmoviespartner/v1/playmoviespartner-gen.go
@@ -61,10 +61,9 @@
 }
 
 type Service struct {
-	client                    *http.Client
-	BasePath                  string // API endpoint base URL
-	UserAgent                 string // optional additional User-Agent fragment
-	GoogleClientHeaderElement string // client header fragment, for Google use only
+	client    *http.Client
+	BasePath  string // API endpoint base URL
+	UserAgent string // optional additional User-Agent fragment
 
 	Accounts *AccountsService
 }
@@ -76,10 +75,6 @@
 	return googleapi.UserAgent + " " + s.UserAgent
 }
 
-func (s *Service) clientHeader() string {
-	return gensupport.GoogleClientHeader("20170210", s.GoogleClientHeaderElement)
-}
-
 func NewAccountsService(s *Service) *AccountsService {
 	rs := &AccountsService{s: s}
 	rs.Avails = NewAccountsAvailsService(s)
@@ -943,7 +938,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	if c.ifNoneMatch_ != "" {
 		reqHeaders.Set("If-None-Match", c.ifNoneMatch_)
 	}
@@ -1164,7 +1158,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	if c.ifNoneMatch_ != "" {
 		reqHeaders.Set("If-None-Match", c.ifNoneMatch_)
 	}
@@ -1380,7 +1373,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	if c.ifNoneMatch_ != "" {
 		reqHeaders.Set("If-None-Match", c.ifNoneMatch_)
 	}
@@ -1595,7 +1587,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	if c.ifNoneMatch_ != "" {
 		reqHeaders.Set("If-None-Match", c.ifNoneMatch_)
 	}
@@ -1887,7 +1878,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	if c.ifNoneMatch_ != "" {
 		reqHeaders.Set("If-None-Match", c.ifNoneMatch_)
 	}
@@ -2111,7 +2101,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	if c.ifNoneMatch_ != "" {
 		reqHeaders.Set("If-None-Match", c.ifNoneMatch_)
 	}
diff --git a/plus/v1/plus-gen.go b/plus/v1/plus-gen.go
index 89f427a..2240e83 100644
--- a/plus/v1/plus-gen.go
+++ b/plus/v1/plus-gen.go
@@ -72,10 +72,9 @@
 }
 
 type Service struct {
-	client                    *http.Client
-	BasePath                  string // API endpoint base URL
-	UserAgent                 string // optional additional User-Agent fragment
-	GoogleClientHeaderElement string // client header fragment, for Google use only
+	client    *http.Client
+	BasePath  string // API endpoint base URL
+	UserAgent string // optional additional User-Agent fragment
 
 	Activities *ActivitiesService
 
@@ -91,10 +90,6 @@
 	return googleapi.UserAgent + " " + s.UserAgent
 }
 
-func (s *Service) clientHeader() string {
-	return gensupport.GoogleClientHeader("20170210", s.GoogleClientHeaderElement)
-}
-
 func NewActivitiesService(s *Service) *ActivitiesService {
 	rs := &ActivitiesService{s: s}
 	return rs
@@ -2287,7 +2282,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	if c.ifNoneMatch_ != "" {
 		reqHeaders.Set("If-None-Match", c.ifNoneMatch_)
 	}
@@ -2447,7 +2441,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	if c.ifNoneMatch_ != "" {
 		reqHeaders.Set("If-None-Match", c.ifNoneMatch_)
 	}
@@ -2674,7 +2667,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	if c.ifNoneMatch_ != "" {
 		reqHeaders.Set("If-None-Match", c.ifNoneMatch_)
 	}
@@ -2865,7 +2857,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	if c.ifNoneMatch_ != "" {
 		reqHeaders.Set("If-None-Match", c.ifNoneMatch_)
 	}
@@ -3033,7 +3024,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	if c.ifNoneMatch_ != "" {
 		reqHeaders.Set("If-None-Match", c.ifNoneMatch_)
 	}
@@ -3223,7 +3213,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	if c.ifNoneMatch_ != "" {
 		reqHeaders.Set("If-None-Match", c.ifNoneMatch_)
 	}
@@ -3395,7 +3384,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	if c.ifNoneMatch_ != "" {
 		reqHeaders.Set("If-None-Match", c.ifNoneMatch_)
 	}
@@ -3619,7 +3607,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	if c.ifNoneMatch_ != "" {
 		reqHeaders.Set("If-None-Match", c.ifNoneMatch_)
 	}
@@ -3835,7 +3822,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	if c.ifNoneMatch_ != "" {
 		reqHeaders.Set("If-None-Match", c.ifNoneMatch_)
 	}
diff --git a/plusdomains/v1/plusdomains-gen.go b/plusdomains/v1/plusdomains-gen.go
index 63e8a0e..74cc39a 100644
--- a/plusdomains/v1/plusdomains-gen.go
+++ b/plusdomains/v1/plusdomains-gen.go
@@ -95,10 +95,9 @@
 }
 
 type Service struct {
-	client                    *http.Client
-	BasePath                  string // API endpoint base URL
-	UserAgent                 string // optional additional User-Agent fragment
-	GoogleClientHeaderElement string // client header fragment, for Google use only
+	client    *http.Client
+	BasePath  string // API endpoint base URL
+	UserAgent string // optional additional User-Agent fragment
 
 	Activities *ActivitiesService
 
@@ -120,10 +119,6 @@
 	return googleapi.UserAgent + " " + s.UserAgent
 }
 
-func (s *Service) clientHeader() string {
-	return gensupport.GoogleClientHeader("20170210", s.GoogleClientHeaderElement)
-}
-
 func NewActivitiesService(s *Service) *ActivitiesService {
 	rs := &ActivitiesService{s: s}
 	return rs
@@ -2828,7 +2823,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	if c.ifNoneMatch_ != "" {
 		reqHeaders.Set("If-None-Match", c.ifNoneMatch_)
 	}
@@ -2968,7 +2962,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	var body io.Reader = nil
 	body, err := googleapi.WithoutDataWrapper.JSONReader(c.activity)
 	if err != nil {
@@ -3139,7 +3132,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	if c.ifNoneMatch_ != "" {
 		reqHeaders.Set("If-None-Match", c.ifNoneMatch_)
 	}
@@ -3346,7 +3338,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	if c.ifNoneMatch_ != "" {
 		reqHeaders.Set("If-None-Match", c.ifNoneMatch_)
 	}
@@ -3525,7 +3516,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	var body io.Reader = nil
 	c.urlParams_.Set("alt", alt)
 	urls := googleapi.ResolveRelative(c.s.BasePath, "circles/{circleId}/people")
@@ -3673,7 +3663,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	if c.ifNoneMatch_ != "" {
 		reqHeaders.Set("If-None-Match", c.ifNoneMatch_)
 	}
@@ -3803,7 +3792,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	var body io.Reader = nil
 	body, err := googleapi.WithoutDataWrapper.JSONReader(c.circle)
 	if err != nil {
@@ -3966,7 +3954,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	if c.ifNoneMatch_ != "" {
 		reqHeaders.Set("If-None-Match", c.ifNoneMatch_)
 	}
@@ -4133,7 +4120,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	var body io.Reader = nil
 	body, err := googleapi.WithoutDataWrapper.JSONReader(c.circle)
 	if err != nil {
@@ -4266,7 +4252,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	var body io.Reader = nil
 	c.urlParams_.Set("alt", alt)
 	urls := googleapi.ResolveRelative(c.s.BasePath, "circles/{circleId}")
@@ -4377,7 +4362,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	var body io.Reader = nil
 	c.urlParams_.Set("alt", alt)
 	urls := googleapi.ResolveRelative(c.s.BasePath, "circles/{circleId}/people")
@@ -4488,7 +4472,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	var body io.Reader = nil
 	body, err := googleapi.WithoutDataWrapper.JSONReader(c.circle)
 	if err != nil {
@@ -4632,7 +4615,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	if c.ifNoneMatch_ != "" {
 		reqHeaders.Set("If-None-Match", c.ifNoneMatch_)
 	}
@@ -4762,7 +4744,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	var body io.Reader = nil
 	body, err := googleapi.WithoutDataWrapper.JSONReader(c.comment)
 	if err != nil {
@@ -4935,7 +4916,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	if c.ifNoneMatch_ != "" {
 		reqHeaders.Set("If-None-Match", c.ifNoneMatch_)
 	}
@@ -5172,7 +5152,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	var body io.Reader = nil
 	body, err := googleapi.WithoutDataWrapper.JSONReader(c.media)
 	if err != nil {
@@ -5395,7 +5374,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	if c.ifNoneMatch_ != "" {
 		reqHeaders.Set("If-None-Match", c.ifNoneMatch_)
 	}
@@ -5568,7 +5546,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	if c.ifNoneMatch_ != "" {
 		reqHeaders.Set("If-None-Match", c.ifNoneMatch_)
 	}
@@ -5791,7 +5768,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	if c.ifNoneMatch_ != "" {
 		reqHeaders.Set("If-None-Match", c.ifNoneMatch_)
 	}
@@ -6001,7 +5977,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	if c.ifNoneMatch_ != "" {
 		reqHeaders.Set("If-None-Match", c.ifNoneMatch_)
 	}
diff --git a/prediction/v1.2/prediction-gen.go b/prediction/v1.2/prediction-gen.go
index 9ae3c2c..5bdc138 100644
--- a/prediction/v1.2/prediction-gen.go
+++ b/prediction/v1.2/prediction-gen.go
@@ -71,10 +71,9 @@
 }
 
 type Service struct {
-	client                    *http.Client
-	BasePath                  string // API endpoint base URL
-	UserAgent                 string // optional additional User-Agent fragment
-	GoogleClientHeaderElement string // client header fragment, for Google use only
+	client    *http.Client
+	BasePath  string // API endpoint base URL
+	UserAgent string // optional additional User-Agent fragment
 
 	Hostedmodels *HostedmodelsService
 
@@ -88,10 +87,6 @@
 	return googleapi.UserAgent + " " + s.UserAgent
 }
 
-func (s *Service) clientHeader() string {
-	return gensupport.GoogleClientHeader("20170210", s.GoogleClientHeaderElement)
-}
-
 func NewHostedmodelsService(s *Service) *HostedmodelsService {
 	rs := &HostedmodelsService{s: s}
 	return rs
@@ -424,7 +419,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	var body io.Reader = nil
 	body, err := googleapi.WithoutDataWrapper.JSONReader(c.input)
 	if err != nil {
@@ -558,7 +552,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	var body io.Reader = nil
 	body, err := googleapi.WithoutDataWrapper.JSONReader(c.input)
 	if err != nil {
@@ -690,7 +683,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	var body io.Reader = nil
 	c.urlParams_.Set("alt", alt)
 	urls := googleapi.ResolveRelative(c.s.BasePath, "training/{data}")
@@ -797,7 +789,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	if c.ifNoneMatch_ != "" {
 		reqHeaders.Set("If-None-Match", c.ifNoneMatch_)
 	}
@@ -931,7 +922,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	var body io.Reader = nil
 	body, err := googleapi.WithoutDataWrapper.JSONReader(c.training)
 	if err != nil {
@@ -1061,7 +1051,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	var body io.Reader = nil
 	body, err := googleapi.WithoutDataWrapper.JSONReader(c.update)
 	if err != nil {
diff --git a/prediction/v1.3/prediction-gen.go b/prediction/v1.3/prediction-gen.go
index c865faf..519821d 100644
--- a/prediction/v1.3/prediction-gen.go
+++ b/prediction/v1.3/prediction-gen.go
@@ -71,10 +71,9 @@
 }
 
 type Service struct {
-	client                    *http.Client
-	BasePath                  string // API endpoint base URL
-	UserAgent                 string // optional additional User-Agent fragment
-	GoogleClientHeaderElement string // client header fragment, for Google use only
+	client    *http.Client
+	BasePath  string // API endpoint base URL
+	UserAgent string // optional additional User-Agent fragment
 
 	Hostedmodels *HostedmodelsService
 
@@ -88,10 +87,6 @@
 	return googleapi.UserAgent + " " + s.UserAgent
 }
 
-func (s *Service) clientHeader() string {
-	return gensupport.GoogleClientHeader("20170210", s.GoogleClientHeaderElement)
-}
-
 func NewHostedmodelsService(s *Service) *HostedmodelsService {
 	rs := &HostedmodelsService{s: s}
 	return rs
@@ -484,7 +479,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	var body io.Reader = nil
 	body, err := googleapi.WithoutDataWrapper.JSONReader(c.input)
 	if err != nil {
@@ -616,7 +610,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	var body io.Reader = nil
 	c.urlParams_.Set("alt", alt)
 	urls := googleapi.ResolveRelative(c.s.BasePath, "training/{data}")
@@ -723,7 +716,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	if c.ifNoneMatch_ != "" {
 		reqHeaders.Set("If-None-Match", c.ifNoneMatch_)
 	}
@@ -850,7 +842,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	var body io.Reader = nil
 	body, err := googleapi.WithoutDataWrapper.JSONReader(c.training)
 	if err != nil {
@@ -973,7 +964,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	var body io.Reader = nil
 	body, err := googleapi.WithoutDataWrapper.JSONReader(c.input)
 	if err != nil {
@@ -1107,7 +1097,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	var body io.Reader = nil
 	body, err := googleapi.WithoutDataWrapper.JSONReader(c.update)
 	if err != nil {
diff --git a/prediction/v1.4/prediction-gen.go b/prediction/v1.4/prediction-gen.go
index 8033ca3..3829c72 100644
--- a/prediction/v1.4/prediction-gen.go
+++ b/prediction/v1.4/prediction-gen.go
@@ -71,10 +71,9 @@
 }
 
 type Service struct {
-	client                    *http.Client
-	BasePath                  string // API endpoint base URL
-	UserAgent                 string // optional additional User-Agent fragment
-	GoogleClientHeaderElement string // client header fragment, for Google use only
+	client    *http.Client
+	BasePath  string // API endpoint base URL
+	UserAgent string // optional additional User-Agent fragment
 
 	Hostedmodels *HostedmodelsService
 
@@ -88,10 +87,6 @@
 	return googleapi.UserAgent + " " + s.UserAgent
 }
 
-func (s *Service) clientHeader() string {
-	return gensupport.GoogleClientHeader("20170210", s.GoogleClientHeaderElement)
-}
-
 func NewHostedmodelsService(s *Service) *HostedmodelsService {
 	rs := &HostedmodelsService{s: s}
 	return rs
@@ -530,7 +525,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	var body io.Reader = nil
 	body, err := googleapi.WithoutDataWrapper.JSONReader(c.input)
 	if err != nil {
@@ -662,7 +656,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	var body io.Reader = nil
 	c.urlParams_.Set("alt", alt)
 	urls := googleapi.ResolveRelative(c.s.BasePath, "trainedmodels/{id}")
@@ -769,7 +762,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	if c.ifNoneMatch_ != "" {
 		reqHeaders.Set("If-None-Match", c.ifNoneMatch_)
 	}
@@ -896,7 +888,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	var body io.Reader = nil
 	body, err := googleapi.WithoutDataWrapper.JSONReader(c.training)
 	if err != nil {
@@ -1019,7 +1010,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	var body io.Reader = nil
 	body, err := googleapi.WithoutDataWrapper.JSONReader(c.input)
 	if err != nil {
@@ -1153,7 +1143,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	var body io.Reader = nil
 	body, err := googleapi.WithoutDataWrapper.JSONReader(c.update)
 	if err != nil {
diff --git a/prediction/v1.5/prediction-gen.go b/prediction/v1.5/prediction-gen.go
index 0d4fc8d..55cef8a 100644
--- a/prediction/v1.5/prediction-gen.go
+++ b/prediction/v1.5/prediction-gen.go
@@ -71,10 +71,9 @@
 }
 
 type Service struct {
-	client                    *http.Client
-	BasePath                  string // API endpoint base URL
-	UserAgent                 string // optional additional User-Agent fragment
-	GoogleClientHeaderElement string // client header fragment, for Google use only
+	client    *http.Client
+	BasePath  string // API endpoint base URL
+	UserAgent string // optional additional User-Agent fragment
 
 	Hostedmodels *HostedmodelsService
 
@@ -88,10 +87,6 @@
 	return googleapi.UserAgent + " " + s.UserAgent
 }
 
-func (s *Service) clientHeader() string {
-	return gensupport.GoogleClientHeader("20170210", s.GoogleClientHeaderElement)
-}
-
 func NewHostedmodelsService(s *Service) *HostedmodelsService {
 	rs := &HostedmodelsService{s: s}
 	return rs
@@ -983,7 +978,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	var body io.Reader = nil
 	body, err := googleapi.WithoutDataWrapper.JSONReader(c.input)
 	if err != nil {
@@ -1127,7 +1121,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	if c.ifNoneMatch_ != "" {
 		reqHeaders.Set("If-None-Match", c.ifNoneMatch_)
 	}
@@ -1254,7 +1247,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	var body io.Reader = nil
 	c.urlParams_.Set("alt", alt)
 	urls := googleapi.ResolveRelative(c.s.BasePath, "trainedmodels/{id}")
@@ -1361,7 +1353,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	if c.ifNoneMatch_ != "" {
 		reqHeaders.Set("If-None-Match", c.ifNoneMatch_)
 	}
@@ -1488,7 +1479,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	var body io.Reader = nil
 	body, err := googleapi.WithoutDataWrapper.JSONReader(c.training)
 	if err != nil {
@@ -1631,7 +1621,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	if c.ifNoneMatch_ != "" {
 		reqHeaders.Set("If-None-Match", c.ifNoneMatch_)
 	}
@@ -1781,7 +1770,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	var body io.Reader = nil
 	body, err := googleapi.WithoutDataWrapper.JSONReader(c.input)
 	if err != nil {
@@ -1915,7 +1903,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	var body io.Reader = nil
 	body, err := googleapi.WithoutDataWrapper.JSONReader(c.update)
 	if err != nil {
diff --git a/prediction/v1.6/prediction-gen.go b/prediction/v1.6/prediction-gen.go
index 5f535e3..51b0a18 100644
--- a/prediction/v1.6/prediction-gen.go
+++ b/prediction/v1.6/prediction-gen.go
@@ -74,10 +74,9 @@
 }
 
 type Service struct {
-	client                    *http.Client
-	BasePath                  string // API endpoint base URL
-	UserAgent                 string // optional additional User-Agent fragment
-	GoogleClientHeaderElement string // client header fragment, for Google use only
+	client    *http.Client
+	BasePath  string // API endpoint base URL
+	UserAgent string // optional additional User-Agent fragment
 
 	Hostedmodels *HostedmodelsService
 
@@ -91,10 +90,6 @@
 	return googleapi.UserAgent + " " + s.UserAgent
 }
 
-func (s *Service) clientHeader() string {
-	return gensupport.GoogleClientHeader("20170210", s.GoogleClientHeaderElement)
-}
-
 func NewHostedmodelsService(s *Service) *HostedmodelsService {
 	rs := &HostedmodelsService{s: s}
 	return rs
@@ -953,7 +948,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	var body io.Reader = nil
 	body, err := googleapi.WithoutDataWrapper.JSONReader(c.input)
 	if err != nil {
@@ -1108,7 +1102,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	if c.ifNoneMatch_ != "" {
 		reqHeaders.Set("If-None-Match", c.ifNoneMatch_)
 	}
@@ -1246,7 +1239,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	var body io.Reader = nil
 	c.urlParams_.Set("alt", alt)
 	urls := googleapi.ResolveRelative(c.s.BasePath, "{project}/trainedmodels/{id}")
@@ -1364,7 +1356,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	if c.ifNoneMatch_ != "" {
 		reqHeaders.Set("If-None-Match", c.ifNoneMatch_)
 	}
@@ -1502,7 +1493,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	var body io.Reader = nil
 	body, err := googleapi.WithoutDataWrapper.JSONReader(c.insert)
 	if err != nil {
@@ -1662,7 +1652,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	if c.ifNoneMatch_ != "" {
 		reqHeaders.Set("If-None-Match", c.ifNoneMatch_)
 	}
@@ -1827,7 +1816,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	var body io.Reader = nil
 	body, err := googleapi.WithoutDataWrapper.JSONReader(c.input)
 	if err != nil {
@@ -1972,7 +1960,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	var body io.Reader = nil
 	body, err := googleapi.WithoutDataWrapper.JSONReader(c.update)
 	if err != nil {
diff --git a/proximitybeacon/v1beta1/proximitybeacon-api.json b/proximitybeacon/v1beta1/proximitybeacon-api.json
index 6277fc0..58a576a 100644
--- a/proximitybeacon/v1beta1/proximitybeacon-api.json
+++ b/proximitybeacon/v1beta1/proximitybeacon-api.json
@@ -1,786 +1,640 @@
 {
+  "revision": "20170320",
+  "documentationLink": "https://developers.google.com/beacons/proximity/",
   "id": "proximitybeacon:v1beta1",
-  "auth": {
-    "oauth2": {
-      "scopes": {
-        "https://www.googleapis.com/auth/userlocation.beacon.registry": {
-          "description": "View and modify your beacons"
+  "title": "Google Proximity Beacon API",
+  "discoveryVersion": "v1",
+  "ownerName": "Google",
+  "version_module": "True",
+  "resources": {
+    "beaconinfo": {
+      "methods": {
+        "getforobserved": {
+          "path": "v1beta1/beaconinfo:getforobserved",
+          "id": "proximitybeacon.beaconinfo.getforobserved",
+          "request": {
+            "$ref": "GetInfoForObservedBeaconsRequest"
+          },
+          "description": "Given one or more beacon observations, returns any beacon information\nand attachments accessible to your application. Authorize by using the\n[API key](https://developers.google.com/beacons/proximity/how-tos/authorizing#APIKey)\nfor the application.",
+          "response": {
+            "$ref": "GetInfoForObservedBeaconsResponse"
+          },
+          "parameterOrder": [],
+          "httpMethod": "POST",
+          "parameters": {},
+          "flatPath": "v1beta1/beaconinfo:getforobserved"
         }
       }
-    }
-  },
-  "description": "Registers, manages, indexes, and searches beacons.",
-  "protocol": "rest",
-  "title": "Google Proximity Beacon API",
-  "resources": {
+    },
+    "namespaces": {
+      "methods": {
+        "list": {
+          "id": "proximitybeacon.namespaces.list",
+          "path": "v1beta1/namespaces",
+          "description": "Lists all attachment namespaces owned by your Google Developers Console\nproject. Attachment data associated with a beacon must include a\nnamespaced type, and the namespace must be owned by your project.\n\nAuthenticate using an [OAuth access token](https://developers.google.com/identity/protocols/OAuth2)\nfrom a signed-in user with **viewer**, **Is owner** or **Can edit**\npermissions in the Google Developers Console project.",
+          "httpMethod": "GET",
+          "response": {
+            "$ref": "ListNamespacesResponse"
+          },
+          "parameterOrder": [],
+          "parameters": {
+            "projectId": {
+              "description": "The project id to list namespaces under.\nOptional.",
+              "type": "string",
+              "location": "query"
+            }
+          },
+          "scopes": [
+            "https://www.googleapis.com/auth/userlocation.beacon.registry"
+          ],
+          "flatPath": "v1beta1/namespaces"
+        },
+        "update": {
+          "httpMethod": "PUT",
+          "parameterOrder": [
+            "namespaceName"
+          ],
+          "response": {
+            "$ref": "Namespace"
+          },
+          "parameters": {
+            "namespaceName": {
+              "pattern": "^namespaces/[^/]+$",
+              "location": "path",
+              "description": "Resource name of this namespace. Namespaces names have the format:\n\u003ccode\u003enamespaces/\u003cvar\u003enamespace\u003c/var\u003e\u003c/code\u003e.",
+              "required": true,
+              "type": "string"
+            },
+            "projectId": {
+              "location": "query",
+              "description": "The project id of the namespace to update. If the project id is not\nspecified then the project making the request is used. The project id\nmust match the project that owns the beacon.\nOptional.",
+              "type": "string"
+            }
+          },
+          "scopes": [
+            "https://www.googleapis.com/auth/userlocation.beacon.registry"
+          ],
+          "flatPath": "v1beta1/namespaces/{namespacesId}",
+          "id": "proximitybeacon.namespaces.update",
+          "path": "v1beta1/{+namespaceName}",
+          "request": {
+            "$ref": "Namespace"
+          },
+          "description": "Updates the information about the specified namespace. Only the namespace\nvisibility can be updated."
+        }
+      }
+    },
     "v1beta1": {
       "methods": {
         "getEidparams": {
-          "id": "proximitybeacon.getEidparams",
+          "description": "Gets the Proximity Beacon API's current public key and associated\nparameters used to initiate the Diffie-Hellman key exchange required to\nregister a beacon that broadcasts the Eddystone-EID format. This key\nchanges periodically; clients may cache it and re-use the same public key\nto provision and register multiple beacons. However, clients should be\nprepared to refresh this key when they encounter an error registering an\nEddystone-EID beacon.",
           "response": {
             "$ref": "EphemeralIdRegistrationParams"
           },
           "parameterOrder": [],
-          "description": "Gets the Proximity Beacon API's current public key and associated\nparameters used to initiate the Diffie-Hellman key exchange required to\nregister a beacon that broadcasts the Eddystone-EID format. This key\nchanges periodically; clients may cache it and re-use the same public key\nto provision and register multiple beacons. However, clients should be\nprepared to refresh this key when they encounter an error registering an\nEddystone-EID beacon.",
-          "flatPath": "v1beta1/eidparams",
           "httpMethod": "GET",
           "parameters": {},
-          "path": "v1beta1/eidparams",
           "scopes": [
             "https://www.googleapis.com/auth/userlocation.beacon.registry"
-          ]
+          ],
+          "flatPath": "v1beta1/eidparams",
+          "path": "v1beta1/eidparams",
+          "id": "proximitybeacon.getEidparams"
         }
       }
     },
     "beacons": {
       "resources": {
-        "attachments": {
-          "methods": {
-            "create": {
-              "id": "proximitybeacon.beacons.attachments.create",
-              "response": {
-                "$ref": "BeaconAttachment"
-              },
-              "parameterOrder": [
-                "beaconName"
-              ],
-              "description": "Associates the given data with the specified beacon. Attachment data must\ncontain two parts:\n\u003cul\u003e\n\u003cli\u003eA namespaced type.\u003c/li\u003e\n\u003cli\u003eThe actual attachment data itself.\u003c/li\u003e\n\u003c/ul\u003e\nThe namespaced type consists of two parts, the namespace and the type.\nThe namespace must be one of the values returned by the `namespaces`\nendpoint, while the type can be a string of any characters except for the\nforward slash (`/`) up to 100 characters in length.\n\nAttachment data can be up to 1024 bytes long.\n\nAuthenticate using an [OAuth access token](https://developers.google.com/identity/protocols/OAuth2)\nfrom a signed-in user with **Is owner** or **Can edit** permissions in the\nGoogle Developers Console project.",
-              "request": {
-                "$ref": "BeaconAttachment"
-              },
-              "flatPath": "v1beta1/beacons/{beaconsId}/attachments",
-              "httpMethod": "POST",
-              "parameters": {
-                "beaconName": {
-                  "description": "Beacon on which the attachment should be created. A beacon name has the\nformat \"beacons/N!beaconId\" where the beaconId is the base16 ID broadcast\nby the beacon and N is a code for the beacon's type. Possible values are\n`3` for Eddystone-UID, `4` for Eddystone-EID, `1` for iBeacon, or `5`\nfor AltBeacon. For Eddystone-EID beacons, you may use either the\ncurrent EID or the beacon's \"stable\" UID.\nRequired.",
-                  "required": true,
-                  "pattern": "^beacons/[^/]+$",
-                  "location": "path",
-                  "type": "string"
-                },
-                "projectId": {
-                  "description": "The project id of the project the attachment will belong to. If\nthe project id is not specified then the project making the request\nis used.\nOptional.",
-                  "location": "query",
-                  "type": "string"
-                }
-              },
-              "path": "v1beta1/{+beaconName}/attachments",
-              "scopes": [
-                "https://www.googleapis.com/auth/userlocation.beacon.registry"
-              ]
-            },
-            "list": {
-              "id": "proximitybeacon.beacons.attachments.list",
-              "response": {
-                "$ref": "ListBeaconAttachmentsResponse"
-              },
-              "parameterOrder": [
-                "beaconName"
-              ],
-              "description": "Returns the attachments for the specified beacon that match the specified\nnamespaced-type pattern.\n\nTo control which namespaced types are returned, you add the\n`namespacedType` query parameter to the request. You must either use\n`*/*`, to return all attachments, or the namespace must be one of\nthe ones returned from the  `namespaces` endpoint.\n\nAuthenticate using an [OAuth access token](https://developers.google.com/identity/protocols/OAuth2)\nfrom a signed-in user with **viewer**, **Is owner** or **Can edit**\npermissions in the Google Developers Console project.",
-              "flatPath": "v1beta1/beacons/{beaconsId}/attachments",
-              "httpMethod": "GET",
-              "parameters": {
-                "namespacedType": {
-                  "description": "Specifies the namespace and type of attachment to include in response in\n\u003cvar\u003enamespace/type\u003c/var\u003e format. Accepts `*/*` to specify\n\"all types in all namespaces\".",
-                  "location": "query",
-                  "type": "string"
-                },
-                "beaconName": {
-                  "description": "Beacon whose attachments should be fetched. A beacon name has the\nformat \"beacons/N!beaconId\" where the beaconId is the base16 ID broadcast\nby the beacon and N is a code for the beacon's type. Possible values are\n`3` for Eddystone-UID, `4` for Eddystone-EID, `1` for iBeacon, or `5`\nfor AltBeacon. For Eddystone-EID beacons, you may use either the\ncurrent EID or the beacon's \"stable\" UID.\nRequired.",
-                  "required": true,
-                  "pattern": "^beacons/[^/]+$",
-                  "location": "path",
-                  "type": "string"
-                },
-                "projectId": {
-                  "description": "The project id to list beacon attachments under. This field can be\nused when \"*\" is specified to mean all attachment namespaces. Projects\nmay have multiple attachments with multiple namespaces. If \"*\" is\nspecified and the projectId string is empty, then the project\nmaking the request is used.\nOptional.",
-                  "location": "query",
-                  "type": "string"
-                }
-              },
-              "path": "v1beta1/{+beaconName}/attachments",
-              "scopes": [
-                "https://www.googleapis.com/auth/userlocation.beacon.registry"
-              ]
-            },
-            "batchDelete": {
-              "id": "proximitybeacon.beacons.attachments.batchDelete",
-              "response": {
-                "$ref": "DeleteAttachmentsResponse"
-              },
-              "parameterOrder": [
-                "beaconName"
-              ],
-              "description": "Deletes multiple attachments on a given beacon. This operation is\npermanent and cannot be undone.\n\nYou can optionally specify `namespacedType` to choose which attachments\nshould be deleted. If you do not specify `namespacedType`,  all your\nattachments on the given beacon will be deleted. You also may explicitly\nspecify `*/*` to delete all.\n\nAuthenticate using an [OAuth access token](https://developers.google.com/identity/protocols/OAuth2)\nfrom a signed-in user with **Is owner** or **Can edit** permissions in the\nGoogle Developers Console project.",
-              "flatPath": "v1beta1/beacons/{beaconsId}/attachments:batchDelete",
-              "httpMethod": "POST",
-              "parameters": {
-                "namespacedType": {
-                  "description": "Specifies the namespace and type of attachments to delete in\n`namespace/type` format. Accepts `*/*` to specify\n\"all types in all namespaces\".\nOptional.",
-                  "location": "query",
-                  "type": "string"
-                },
-                "beaconName": {
-                  "description": "The beacon whose attachments should be deleted. A beacon name has the\nformat \"beacons/N!beaconId\" where the beaconId is the base16 ID broadcast\nby the beacon and N is a code for the beacon's type. Possible values are\n`3` for Eddystone-UID, `4` for Eddystone-EID, `1` for iBeacon, or `5`\nfor AltBeacon. For Eddystone-EID beacons, you may use either the\ncurrent EID or the beacon's \"stable\" UID.\nRequired.",
-                  "required": true,
-                  "pattern": "^beacons/[^/]+$",
-                  "location": "path",
-                  "type": "string"
-                },
-                "projectId": {
-                  "description": "The project id to delete beacon attachments under. This field can be\nused when \"*\" is specified to mean all attachment namespaces. Projects\nmay have multiple attachments with multiple namespaces. If \"*\" is\nspecified and the projectId string is empty, then the project\nmaking the request is used.\nOptional.",
-                  "location": "query",
-                  "type": "string"
-                }
-              },
-              "path": "v1beta1/{+beaconName}/attachments:batchDelete",
-              "scopes": [
-                "https://www.googleapis.com/auth/userlocation.beacon.registry"
-              ]
-            },
-            "delete": {
-              "id": "proximitybeacon.beacons.attachments.delete",
-              "response": {
-                "$ref": "Empty"
-              },
-              "parameterOrder": [
-                "attachmentName"
-              ],
-              "description": "Deletes the specified attachment for the given beacon. Each attachment has\na unique attachment name (`attachmentName`) which is returned when you\nfetch the attachment data via this API. You specify this with the delete\nrequest to control which attachment is removed. This operation cannot be\nundone.\n\nAuthenticate using an [OAuth access token](https://developers.google.com/identity/protocols/OAuth2)\nfrom a signed-in user with **Is owner** or **Can edit** permissions in the\nGoogle Developers Console project.",
-              "flatPath": "v1beta1/beacons/{beaconsId}/attachments/{attachmentsId}",
-              "httpMethod": "DELETE",
-              "parameters": {
-                "attachmentName": {
-                  "description": "The attachment name (`attachmentName`) of\nthe attachment to remove. For example:\n`beacons/3!893737abc9/attachments/c5e937-af0-494-959-ec49d12738`. For\nEddystone-EID beacons, the beacon ID portion (`3!893737abc9`) may be the\nbeacon's current EID, or its \"stable\" Eddystone-UID.\nRequired.",
-                  "required": true,
-                  "pattern": "^beacons/[^/]+/attachments/[^/]+$",
-                  "location": "path",
-                  "type": "string"
-                },
-                "projectId": {
-                  "description": "The project id of the attachment to delete. If not provided, the project\nthat is making the request is used.\nOptional.",
-                  "location": "query",
-                  "type": "string"
-                }
-              },
-              "path": "v1beta1/{+attachmentName}",
-              "scopes": [
-                "https://www.googleapis.com/auth/userlocation.beacon.registry"
-              ]
-            }
-          }
-        },
         "diagnostics": {
           "methods": {
             "list": {
-              "id": "proximitybeacon.beacons.diagnostics.list",
+              "description": "List the diagnostics for a single beacon. You can also list diagnostics for\nall the beacons owned by your Google Developers Console project by using\nthe beacon name `beacons/-`.\n\nAuthenticate using an [OAuth access token](https://developers.google.com/identity/protocols/OAuth2)\nfrom a signed-in user with **viewer**, **Is owner** or **Can edit**\npermissions in the Google Developers Console project.",
               "response": {
                 "$ref": "ListDiagnosticsResponse"
               },
               "parameterOrder": [
                 "beaconName"
               ],
-              "description": "List the diagnostics for a single beacon. You can also list diagnostics for\nall the beacons owned by your Google Developers Console project by using\nthe beacon name `beacons/-`.\n\nAuthenticate using an [OAuth access token](https://developers.google.com/identity/protocols/OAuth2)\nfrom a signed-in user with **viewer**, **Is owner** or **Can edit**\npermissions in the Google Developers Console project.",
-              "flatPath": "v1beta1/beacons/{beaconsId}/diagnostics",
               "httpMethod": "GET",
               "parameters": {
-                "pageSize": {
-                  "description": "Specifies the maximum number of results to return. Defaults to\n10. Maximum 1000. Optional.",
+                "beaconName": {
+                  "description": "Beacon that the diagnostics are for.",
+                  "required": true,
+                  "type": "string",
+                  "pattern": "^beacons/[^/]+$",
+                  "location": "path"
+                },
+                "pageToken": {
                   "location": "query",
-                  "type": "integer",
-                  "format": "int32"
+                  "description": "Requests results that occur after the `page_token`, obtained from the\nresponse to a previous request. Optional.",
+                  "type": "string"
+                },
+                "pageSize": {
+                  "location": "query",
+                  "description": "Specifies the maximum number of results to return. Defaults to\n10. Maximum 1000. Optional.",
+                  "format": "int32",
+                  "type": "integer"
                 },
                 "alertFilter": {
-                  "description": "Requests only beacons that have the given alert. For example, to find\nbeacons that have low batteries use `alert_filter=LOW_BATTERY`.",
                   "enum": [
                     "ALERT_UNSPECIFIED",
                     "WRONG_LOCATION",
                     "LOW_BATTERY"
                   ],
-                  "location": "query",
-                  "type": "string"
-                },
-                "beaconName": {
-                  "description": "Beacon that the diagnostics are for.",
-                  "required": true,
-                  "pattern": "^beacons/[^/]+$",
-                  "location": "path",
-                  "type": "string"
-                },
-                "pageToken": {
-                  "description": "Requests results that occur after the `page_token`, obtained from the\nresponse to a previous request. Optional.",
-                  "location": "query",
-                  "type": "string"
+                  "description": "Requests only beacons that have the given alert. For example, to find\nbeacons that have low batteries use `alert_filter=LOW_BATTERY`.",
+                  "type": "string",
+                  "location": "query"
                 },
                 "projectId": {
                   "description": "Requests only diagnostic records for the given project id. If not set,\nthen the project making the request will be used for looking up\ndiagnostic records. Optional.",
+                  "type": "string",
+                  "location": "query"
+                }
+              },
+              "scopes": [
+                "https://www.googleapis.com/auth/userlocation.beacon.registry"
+              ],
+              "flatPath": "v1beta1/beacons/{beaconsId}/diagnostics",
+              "path": "v1beta1/{+beaconName}/diagnostics",
+              "id": "proximitybeacon.beacons.diagnostics.list"
+            }
+          }
+        },
+        "attachments": {
+          "methods": {
+            "delete": {
+              "id": "proximitybeacon.beacons.attachments.delete",
+              "path": "v1beta1/{+attachmentName}",
+              "description": "Deletes the specified attachment for the given beacon. Each attachment has\na unique attachment name (`attachmentName`) which is returned when you\nfetch the attachment data via this API. You specify this with the delete\nrequest to control which attachment is removed. This operation cannot be\nundone.\n\nAuthenticate using an [OAuth access token](https://developers.google.com/identity/protocols/OAuth2)\nfrom a signed-in user with **Is owner** or **Can edit** permissions in the\nGoogle Developers Console project.",
+              "httpMethod": "DELETE",
+              "response": {
+                "$ref": "Empty"
+              },
+              "parameterOrder": [
+                "attachmentName"
+              ],
+              "parameters": {
+                "projectId": {
                   "location": "query",
+                  "description": "The project id of the attachment to delete. If not provided, the project\nthat is making the request is used.\nOptional.",
+                  "type": "string"
+                },
+                "attachmentName": {
+                  "pattern": "^beacons/[^/]+/attachments/[^/]+$",
+                  "location": "path",
+                  "description": "The attachment name (`attachmentName`) of\nthe attachment to remove. For example:\n`beacons/3!893737abc9/attachments/c5e937-af0-494-959-ec49d12738`. For\nEddystone-EID beacons, the beacon ID portion (`3!893737abc9`) may be the\nbeacon's current EID, or its \"stable\" Eddystone-UID.\nRequired.",
+                  "required": true,
                   "type": "string"
                 }
               },
-              "path": "v1beta1/{+beaconName}/diagnostics",
               "scopes": [
                 "https://www.googleapis.com/auth/userlocation.beacon.registry"
-              ]
+              ],
+              "flatPath": "v1beta1/beacons/{beaconsId}/attachments/{attachmentsId}"
+            },
+            "list": {
+              "description": "Returns the attachments for the specified beacon that match the specified\nnamespaced-type pattern.\n\nTo control which namespaced types are returned, you add the\n`namespacedType` query parameter to the request. You must either use\n`*/*`, to return all attachments, or the namespace must be one of\nthe ones returned from the  `namespaces` endpoint.\n\nAuthenticate using an [OAuth access token](https://developers.google.com/identity/protocols/OAuth2)\nfrom a signed-in user with **viewer**, **Is owner** or **Can edit**\npermissions in the Google Developers Console project.",
+              "httpMethod": "GET",
+              "response": {
+                "$ref": "ListBeaconAttachmentsResponse"
+              },
+              "parameterOrder": [
+                "beaconName"
+              ],
+              "parameters": {
+                "beaconName": {
+                  "description": "Beacon whose attachments should be fetched. A beacon name has the\nformat \"beacons/N!beaconId\" where the beaconId is the base16 ID broadcast\nby the beacon and N is a code for the beacon's type. Possible values are\n`3` for Eddystone-UID, `4` for Eddystone-EID, `1` for iBeacon, or `5`\nfor AltBeacon. For Eddystone-EID beacons, you may use either the\ncurrent EID or the beacon's \"stable\" UID.\nRequired.",
+                  "required": true,
+                  "type": "string",
+                  "pattern": "^beacons/[^/]+$",
+                  "location": "path"
+                },
+                "projectId": {
+                  "location": "query",
+                  "description": "The project id to list beacon attachments under. This field can be\nused when \"*\" is specified to mean all attachment namespaces. Projects\nmay have multiple attachments with multiple namespaces. If \"*\" is\nspecified and the projectId string is empty, then the project\nmaking the request is used.\nOptional.",
+                  "type": "string"
+                },
+                "namespacedType": {
+                  "location": "query",
+                  "description": "Specifies the namespace and type of attachment to include in response in\n\u003cvar\u003enamespace/type\u003c/var\u003e format. Accepts `*/*` to specify\n\"all types in all namespaces\".",
+                  "type": "string"
+                }
+              },
+              "scopes": [
+                "https://www.googleapis.com/auth/userlocation.beacon.registry"
+              ],
+              "flatPath": "v1beta1/beacons/{beaconsId}/attachments",
+              "id": "proximitybeacon.beacons.attachments.list",
+              "path": "v1beta1/{+beaconName}/attachments"
+            },
+            "create": {
+              "description": "Associates the given data with the specified beacon. Attachment data must\ncontain two parts:\n\u003cul\u003e\n\u003cli\u003eA namespaced type.\u003c/li\u003e\n\u003cli\u003eThe actual attachment data itself.\u003c/li\u003e\n\u003c/ul\u003e\nThe namespaced type consists of two parts, the namespace and the type.\nThe namespace must be one of the values returned by the `namespaces`\nendpoint, while the type can be a string of any characters except for the\nforward slash (`/`) up to 100 characters in length.\n\nAttachment data can be up to 1024 bytes long.\n\nAuthenticate using an [OAuth access token](https://developers.google.com/identity/protocols/OAuth2)\nfrom a signed-in user with **Is owner** or **Can edit** permissions in the\nGoogle Developers Console project.",
+              "request": {
+                "$ref": "BeaconAttachment"
+              },
+              "httpMethod": "POST",
+              "parameterOrder": [
+                "beaconName"
+              ],
+              "response": {
+                "$ref": "BeaconAttachment"
+              },
+              "scopes": [
+                "https://www.googleapis.com/auth/userlocation.beacon.registry"
+              ],
+              "parameters": {
+                "beaconName": {
+                  "description": "Beacon on which the attachment should be created. A beacon name has the\nformat \"beacons/N!beaconId\" where the beaconId is the base16 ID broadcast\nby the beacon and N is a code for the beacon's type. Possible values are\n`3` for Eddystone-UID, `4` for Eddystone-EID, `1` for iBeacon, or `5`\nfor AltBeacon. For Eddystone-EID beacons, you may use either the\ncurrent EID or the beacon's \"stable\" UID.\nRequired.",
+                  "required": true,
+                  "type": "string",
+                  "pattern": "^beacons/[^/]+$",
+                  "location": "path"
+                },
+                "projectId": {
+                  "location": "query",
+                  "description": "The project id of the project the attachment will belong to. If\nthe project id is not specified then the project making the request\nis used.\nOptional.",
+                  "type": "string"
+                }
+              },
+              "flatPath": "v1beta1/beacons/{beaconsId}/attachments",
+              "id": "proximitybeacon.beacons.attachments.create",
+              "path": "v1beta1/{+beaconName}/attachments"
+            },
+            "batchDelete": {
+              "response": {
+                "$ref": "DeleteAttachmentsResponse"
+              },
+              "parameterOrder": [
+                "beaconName"
+              ],
+              "httpMethod": "POST",
+              "scopes": [
+                "https://www.googleapis.com/auth/userlocation.beacon.registry"
+              ],
+              "parameters": {
+                "beaconName": {
+                  "description": "The beacon whose attachments should be deleted. A beacon name has the\nformat \"beacons/N!beaconId\" where the beaconId is the base16 ID broadcast\nby the beacon and N is a code for the beacon's type. Possible values are\n`3` for Eddystone-UID, `4` for Eddystone-EID, `1` for iBeacon, or `5`\nfor AltBeacon. For Eddystone-EID beacons, you may use either the\ncurrent EID or the beacon's \"stable\" UID.\nRequired.",
+                  "required": true,
+                  "type": "string",
+                  "pattern": "^beacons/[^/]+$",
+                  "location": "path"
+                },
+                "projectId": {
+                  "description": "The project id to delete beacon attachments under. This field can be\nused when \"*\" is specified to mean all attachment namespaces. Projects\nmay have multiple attachments with multiple namespaces. If \"*\" is\nspecified and the projectId string is empty, then the project\nmaking the request is used.\nOptional.",
+                  "type": "string",
+                  "location": "query"
+                },
+                "namespacedType": {
+                  "description": "Specifies the namespace and type of attachments to delete in\n`namespace/type` format. Accepts `*/*` to specify\n\"all types in all namespaces\".\nOptional.",
+                  "type": "string",
+                  "location": "query"
+                }
+              },
+              "flatPath": "v1beta1/beacons/{beaconsId}/attachments:batchDelete",
+              "path": "v1beta1/{+beaconName}/attachments:batchDelete",
+              "id": "proximitybeacon.beacons.attachments.batchDelete",
+              "description": "Deletes multiple attachments on a given beacon. This operation is\npermanent and cannot be undone.\n\nYou can optionally specify `namespacedType` to choose which attachments\nshould be deleted. If you do not specify `namespacedType`,  all your\nattachments on the given beacon will be deleted. You also may explicitly\nspecify `*/*` to delete all.\n\nAuthenticate using an [OAuth access token](https://developers.google.com/identity/protocols/OAuth2)\nfrom a signed-in user with **Is owner** or **Can edit** permissions in the\nGoogle Developers Console project."
             }
           }
         }
       },
       "methods": {
-        "decommission": {
-          "id": "proximitybeacon.beacons.decommission",
-          "response": {
-            "$ref": "Empty"
-          },
-          "parameterOrder": [
-            "beaconName"
-          ],
-          "description": "Decommissions the specified beacon in the service. This beacon will no\nlonger be returned from `beaconinfo.getforobserved`. This operation is\npermanent -- you will not be able to re-register a beacon with this ID\nagain.\n\nAuthenticate using an [OAuth access token](https://developers.google.com/identity/protocols/OAuth2)\nfrom a signed-in user with **Is owner** or **Can edit** permissions in the\nGoogle Developers Console project.",
-          "flatPath": "v1beta1/beacons/{beaconsId}:decommission",
-          "httpMethod": "POST",
-          "parameters": {
-            "beaconName": {
-              "description": "Beacon that should be decommissioned. A beacon name has the format\n\"beacons/N!beaconId\" where the beaconId is the base16 ID broadcast by\nthe beacon and N is a code for the beacon's type. Possible values are\n`3` for Eddystone-UID, `4` for Eddystone-EID, `1` for iBeacon, or `5`\nfor AltBeacon. For Eddystone-EID beacons, you may use either the\ncurrent EID of the beacon's \"stable\" UID.\nRequired.",
-              "required": true,
-              "pattern": "^beacons/[^/]+$",
-              "location": "path",
-              "type": "string"
-            },
-            "projectId": {
-              "description": "The project id of the beacon to decommission. If the project id is not\nspecified then the project making the request is used. The project id\nmust match the project that owns the beacon.\nOptional.",
-              "location": "query",
-              "type": "string"
-            }
-          },
-          "path": "v1beta1/{+beaconName}:decommission",
-          "scopes": [
-            "https://www.googleapis.com/auth/userlocation.beacon.registry"
-          ]
-        },
         "activate": {
-          "id": "proximitybeacon.beacons.activate",
+          "httpMethod": "POST",
           "response": {
             "$ref": "Empty"
           },
           "parameterOrder": [
             "beaconName"
           ],
-          "description": "Activates a beacon. A beacon that is active will return information\nand attachment data when queried via `beaconinfo.getforobserved`.\nCalling this method on an already active beacon will do nothing (but\nwill return a successful response code).\n\nAuthenticate using an [OAuth access token](https://developers.google.com/identity/protocols/OAuth2)\nfrom a signed-in user with **Is owner** or **Can edit** permissions in the\nGoogle Developers Console project.",
-          "flatPath": "v1beta1/beacons/{beaconsId}:activate",
-          "httpMethod": "POST",
           "parameters": {
             "beaconName": {
               "description": "Beacon that should be activated. A beacon name has the format\n\"beacons/N!beaconId\" where the beaconId is the base16 ID broadcast by\nthe beacon and N is a code for the beacon's type. Possible values are\n`3` for Eddystone-UID, `4` for Eddystone-EID, `1` for iBeacon, or `5`\nfor AltBeacon. For Eddystone-EID beacons, you may use either the\ncurrent EID or the beacon's \"stable\" UID.\nRequired.",
               "required": true,
+              "type": "string",
               "pattern": "^beacons/[^/]+$",
-              "location": "path",
-              "type": "string"
+              "location": "path"
             },
             "projectId": {
+              "location": "query",
               "description": "The project id of the beacon to activate. If the project id is not\nspecified then the project making the request is used. The project id\nmust match the project that owns the beacon.\nOptional.",
-              "location": "query",
               "type": "string"
             }
           },
-          "path": "v1beta1/{+beaconName}:activate",
           "scopes": [
             "https://www.googleapis.com/auth/userlocation.beacon.registry"
-          ]
-        },
-        "deactivate": {
-          "id": "proximitybeacon.beacons.deactivate",
-          "response": {
-            "$ref": "Empty"
-          },
-          "parameterOrder": [
-            "beaconName"
           ],
-          "description": "Deactivates a beacon. Once deactivated, the API will not return\ninformation nor attachment data for the beacon when queried via\n`beaconinfo.getforobserved`. Calling this method on an already inactive\nbeacon will do nothing (but will return a successful response code).\n\nAuthenticate using an [OAuth access token](https://developers.google.com/identity/protocols/OAuth2)\nfrom a signed-in user with **Is owner** or **Can edit** permissions in the\nGoogle Developers Console project.",
-          "flatPath": "v1beta1/beacons/{beaconsId}:deactivate",
-          "httpMethod": "POST",
-          "parameters": {
-            "beaconName": {
-              "description": "Beacon that should be deactivated. A beacon name has the format\n\"beacons/N!beaconId\" where the beaconId is the base16 ID broadcast by\nthe beacon and N is a code for the beacon's type. Possible values are\n`3` for Eddystone-UID, `4` for Eddystone-EID, `1` for iBeacon, or `5`\nfor AltBeacon. For Eddystone-EID beacons, you may use either the\ncurrent EID or the beacon's \"stable\" UID.\nRequired.",
-              "required": true,
-              "pattern": "^beacons/[^/]+$",
-              "location": "path",
-              "type": "string"
-            },
-            "projectId": {
-              "description": "The project id of the beacon to deactivate. If the project id is not\nspecified then the project making the request is used. The project id must\nmatch the project that owns the beacon.\nOptional.",
-              "location": "query",
-              "type": "string"
-            }
-          },
-          "path": "v1beta1/{+beaconName}:deactivate",
-          "scopes": [
-            "https://www.googleapis.com/auth/userlocation.beacon.registry"
-          ]
-        },
-        "list": {
-          "id": "proximitybeacon.beacons.list",
-          "response": {
-            "$ref": "ListBeaconsResponse"
-          },
-          "parameterOrder": [],
-          "description": "Searches the beacon registry for beacons that match the given search\ncriteria. Only those beacons that the client has permission to list\nwill be returned.\n\nAuthenticate using an [OAuth access token](https://developers.google.com/identity/protocols/OAuth2)\nfrom a signed-in user with **viewer**, **Is owner** or **Can edit**\npermissions in the Google Developers Console project.",
-          "flatPath": "v1beta1/beacons",
-          "httpMethod": "GET",
-          "parameters": {
-            "q": {
-              "description": "Filter query string that supports the following field filters:\n\n* **description:`\"\u003cstring\u003e\"`**\n  For example: **description:\"Room 3\"**\n  Returns beacons whose description matches tokens in the string \"Room 3\"\n  (not necessarily that exact string).\n  The string must be double-quoted.\n* **status:`\u003cenum\u003e`**\n  For example: **status:active**\n  Returns beacons whose status matches the given value. Values must be\n  one of the Beacon.Status enum values (case insensitive). Accepts\n  multiple filters which will be combined with OR logic.\n* **stability:`\u003cenum\u003e`**\n  For example: **stability:mobile**\n  Returns beacons whose expected stability matches the given value.\n  Values must be one of the Beacon.Stability enum values (case\n  insensitive). Accepts multiple filters which will be combined with\n  OR logic.\n* **place\\_id:`\"\u003cstring\u003e\"`**\n  For example: **place\\_id:\"ChIJVSZzVR8FdkgRXGmmm6SslKw=\"**\n  Returns beacons explicitly registered at the given place, expressed as\n  a Place ID obtained from [Google Places API](/places/place-id). Does not\n  match places inside the given place. Does not consider the beacon's\n  actual location (which may be different from its registered place).\n  Accepts multiple filters that will be combined with OR logic. The place\n  ID must be double-quoted.\n* **registration\\_time`[\u003c|\u003e|\u003c=|\u003e=]\u003cinteger\u003e`**\n  For example: **registration\\_time\u003e=1433116800**\n  Returns beacons whose registration time matches the given filter.\n  Supports the operators: \u003c, \u003e, \u003c=, and \u003e=. Timestamp must be expressed as\n  an integer number of seconds since midnight January 1, 1970 UTC. Accepts\n  at most two filters that will be combined with AND logic, to support\n  \"between\" semantics. If more than two are supplied, the latter ones are\n  ignored.\n* **lat:`\u003cdouble\u003e lng:\u003cdouble\u003e radius:\u003cinteger\u003e`**\n  For example: **lat:51.1232343 lng:-1.093852 radius:1000**\n  Returns beacons whose registered location is within the given circle.\n  When any of these fields are given, all are required. Latitude and\n  longitude must be decimal degrees between -90.0 and 90.0 and between\n  -180.0 and 180.0 respectively. Radius must be an integer number of\n  meters between 10 and 1,000,000 (1000 km).\n* **property:`\"\u003cstring\u003e=\u003cstring\u003e\"`**\n  For example: **property:\"battery-type=CR2032\"**\n  Returns beacons which have a property of the given name and value.\n  Supports multiple filters which will be combined with OR logic.\n  The entire name=value string must be double-quoted as one string.\n* **attachment\\_type:`\"\u003cstring\u003e\"`**\n  For example: **attachment_type:\"my-namespace/my-type\"**\n  Returns beacons having at least one attachment of the given namespaced\n  type. Supports \"any within this namespace\" via the partial wildcard\n  syntax: \"my-namespace/*\". Supports multiple filters which will be\n  combined with OR logic. The string must be double-quoted.\n* **indoor\\_level:`\"\u003cstring\u003e\"`**\n  For example: **indoor\\_level:\"1\"**\n  Returns beacons which are located on the given indoor level. Accepts\n  multiple filters that will be combined with OR logic.\n\nMultiple filters on the same field are combined with OR logic (except\nregistration_time which is combined with AND logic).\nMultiple filters on different fields are combined with AND logic.\nFilters should be separated by spaces.\n\nAs with any HTTP query string parameter, the whole filter expression must\nbe URL-encoded.\n\nExample REST request:\n`GET /v1beta1/beacons?q=status:active%20lat:51.123%20lng:-1.095%20radius:1000`",
-              "location": "query",
-              "type": "string"
-            },
-            "pageSize": {
-              "description": "The maximum number of records to return for this request, up to a\nserver-defined upper limit.",
-              "location": "query",
-              "type": "integer",
-              "format": "int32"
-            },
-            "pageToken": {
-              "description": "A pagination token obtained from a previous request to list beacons.",
-              "location": "query",
-              "type": "string"
-            },
-            "projectId": {
-              "description": "The project id to list beacons under. If not present then the project\ncredential that made the request is used as the project.\nOptional.",
-              "location": "query",
-              "type": "string"
-            }
-          },
-          "path": "v1beta1/beacons",
-          "scopes": [
-            "https://www.googleapis.com/auth/userlocation.beacon.registry"
-          ]
+          "flatPath": "v1beta1/beacons/{beaconsId}:activate",
+          "id": "proximitybeacon.beacons.activate",
+          "path": "v1beta1/{+beaconName}:activate",
+          "description": "Activates a beacon. A beacon that is active will return information\nand attachment data when queried via `beaconinfo.getforobserved`.\nCalling this method on an already active beacon will do nothing (but\nwill return a successful response code).\n\nAuthenticate using an [OAuth access token](https://developers.google.com/identity/protocols/OAuth2)\nfrom a signed-in user with **Is owner** or **Can edit** permissions in the\nGoogle Developers Console project."
         },
         "get": {
-          "id": "proximitybeacon.beacons.get",
           "response": {
             "$ref": "Beacon"
           },
           "parameterOrder": [
             "beaconName"
           ],
-          "description": "Returns detailed information about the specified beacon.\n\nAuthenticate using an [OAuth access token](https://developers.google.com/identity/protocols/OAuth2)\nfrom a signed-in user with **viewer**, **Is owner** or **Can edit**\npermissions in the Google Developers Console project.\n\nRequests may supply an Eddystone-EID beacon name in the form:\n`beacons/4!beaconId` where the `beaconId` is the base16 ephemeral ID\nbroadcast by the beacon. The returned `Beacon` object will contain the\nbeacon's stable Eddystone-UID. Clients not authorized to resolve the\nbeacon's ephemeral Eddystone-EID broadcast will receive an error.",
-          "flatPath": "v1beta1/beacons/{beaconsId}",
           "httpMethod": "GET",
           "parameters": {
             "beaconName": {
               "description": "Resource name of this beacon. A beacon name has the format\n\"beacons/N!beaconId\" where the beaconId is the base16 ID broadcast by\nthe beacon and N is a code for the beacon's type. Possible values are\n`3` for Eddystone-UID, `4` for Eddystone-EID, `1` for iBeacon, or `5`\nfor AltBeacon. For Eddystone-EID beacons, you may use either the\ncurrent EID or the beacon's \"stable\" UID.\nRequired.",
               "required": true,
+              "type": "string",
               "pattern": "^beacons/[^/]+$",
-              "location": "path",
-              "type": "string"
+              "location": "path"
             },
             "projectId": {
-              "description": "The project id of the beacon to request. If the project id is not specified\nthen the project making the request is used. The project id must match the\nproject that owns the beacon.\nOptional.",
               "location": "query",
+              "description": "The project id of the beacon to request. If the project id is not specified\nthen the project making the request is used. The project id must match the\nproject that owns the beacon.\nOptional.",
               "type": "string"
             }
           },
-          "path": "v1beta1/{+beaconName}",
           "scopes": [
             "https://www.googleapis.com/auth/userlocation.beacon.registry"
-          ]
+          ],
+          "flatPath": "v1beta1/beacons/{beaconsId}",
+          "path": "v1beta1/{+beaconName}",
+          "id": "proximitybeacon.beacons.get",
+          "description": "Returns detailed information about the specified beacon.\n\nAuthenticate using an [OAuth access token](https://developers.google.com/identity/protocols/OAuth2)\nfrom a signed-in user with **viewer**, **Is owner** or **Can edit**\npermissions in the Google Developers Console project.\n\nRequests may supply an Eddystone-EID beacon name in the form:\n`beacons/4!beaconId` where the `beaconId` is the base16 ephemeral ID\nbroadcast by the beacon. The returned `Beacon` object will contain the\nbeacon's stable Eddystone-UID. Clients not authorized to resolve the\nbeacon's ephemeral Eddystone-EID broadcast will receive an error."
         },
         "update": {
-          "id": "proximitybeacon.beacons.update",
-          "response": {
-            "$ref": "Beacon"
-          },
+          "httpMethod": "PUT",
           "parameterOrder": [
             "beaconName"
           ],
-          "description": "Updates the information about the specified beacon. **Any field that you do\nnot populate in the submitted beacon will be permanently erased**, so you\nshould follow the \"read, modify, write\" pattern to avoid inadvertently\ndestroying data.\n\nChanges to the beacon status via this method will be  silently ignored.\nTo update beacon status, use the separate methods on this API for\nactivation, deactivation, and decommissioning.\nAuthenticate using an [OAuth access token](https://developers.google.com/identity/protocols/OAuth2)\nfrom a signed-in user with **Is owner** or **Can edit** permissions in the\nGoogle Developers Console project.",
-          "request": {
+          "response": {
             "$ref": "Beacon"
           },
-          "flatPath": "v1beta1/beacons/{beaconsId}",
-          "httpMethod": "PUT",
+          "scopes": [
+            "https://www.googleapis.com/auth/userlocation.beacon.registry"
+          ],
           "parameters": {
             "beaconName": {
               "description": "Resource name of this beacon. A beacon name has the format\n\"beacons/N!beaconId\" where the beaconId is the base16 ID broadcast by\nthe beacon and N is a code for the beacon's type. Possible values are\n`3` for Eddystone, `1` for iBeacon, or `5` for AltBeacon.\n\nThis field must be left empty when registering. After reading a beacon,\nclients can use the name for future operations.",
               "required": true,
+              "type": "string",
               "pattern": "^beacons/[^/]+$",
-              "location": "path",
-              "type": "string"
+              "location": "path"
             },
             "projectId": {
               "description": "The project id of the beacon to update. If the project id is not\nspecified then the project making the request is used. The project id\nmust match the project that owns the beacon.\nOptional.",
-              "location": "query",
-              "type": "string"
+              "type": "string",
+              "location": "query"
             }
           },
+          "flatPath": "v1beta1/beacons/{beaconsId}",
+          "id": "proximitybeacon.beacons.update",
           "path": "v1beta1/{+beaconName}",
-          "scopes": [
-            "https://www.googleapis.com/auth/userlocation.beacon.registry"
-          ]
-        },
-        "register": {
-          "id": "proximitybeacon.beacons.register",
-          "response": {
-            "$ref": "Beacon"
-          },
-          "parameterOrder": [],
-          "description": "Registers a previously unregistered beacon given its `advertisedId`.\nThese IDs are unique within the system. An ID can be registered only once.\n\nAuthenticate using an [OAuth access token](https://developers.google.com/identity/protocols/OAuth2)\nfrom a signed-in user with **Is owner** or **Can edit** permissions in the\nGoogle Developers Console project.",
+          "description": "Updates the information about the specified beacon. **Any field that you do\nnot populate in the submitted beacon will be permanently erased**, so you\nshould follow the \"read, modify, write\" pattern to avoid inadvertently\ndestroying data.\n\nChanges to the beacon status via this method will be  silently ignored.\nTo update beacon status, use the separate methods on this API for\nactivation, deactivation, and decommissioning.\nAuthenticate using an [OAuth access token](https://developers.google.com/identity/protocols/OAuth2)\nfrom a signed-in user with **Is owner** or **Can edit** permissions in the\nGoogle Developers Console project.",
           "request": {
             "$ref": "Beacon"
-          },
-          "flatPath": "v1beta1/beacons:register",
-          "httpMethod": "POST",
-          "parameters": {
-            "projectId": {
-              "description": "The project id of the project the beacon will be registered to. If\nthe project id is not specified then the project making the request\nis used.\nOptional.",
-              "location": "query",
-              "type": "string"
-            }
-          },
-          "path": "v1beta1/beacons:register",
-          "scopes": [
-            "https://www.googleapis.com/auth/userlocation.beacon.registry"
-          ]
+          }
         },
-        "delete": {
-          "id": "proximitybeacon.beacons.delete",
+        "decommission": {
+          "httpMethod": "POST",
           "response": {
             "$ref": "Empty"
           },
           "parameterOrder": [
             "beaconName"
           ],
-          "description": "Deletes the specified beacon including all diagnostics data for the beacon\nas well as any attachments on the beacon (including those belonging to\nother projects). This operation cannot be undone.\n\nAuthenticate using an [OAuth access token](https://developers.google.com/identity/protocols/OAuth2)\nfrom a signed-in user with **Is owner** or **Can edit** permissions in the\nGoogle Developers Console project.",
-          "flatPath": "v1beta1/beacons/{beaconsId}",
+          "scopes": [
+            "https://www.googleapis.com/auth/userlocation.beacon.registry"
+          ],
+          "parameters": {
+            "beaconName": {
+              "pattern": "^beacons/[^/]+$",
+              "location": "path",
+              "description": "Beacon that should be decommissioned. A beacon name has the format\n\"beacons/N!beaconId\" where the beaconId is the base16 ID broadcast by\nthe beacon and N is a code for the beacon's type. Possible values are\n`3` for Eddystone-UID, `4` for Eddystone-EID, `1` for iBeacon, or `5`\nfor AltBeacon. For Eddystone-EID beacons, you may use either the\ncurrent EID of the beacon's \"stable\" UID.\nRequired.",
+              "required": true,
+              "type": "string"
+            },
+            "projectId": {
+              "location": "query",
+              "description": "The project id of the beacon to decommission. If the project id is not\nspecified then the project making the request is used. The project id\nmust match the project that owns the beacon.\nOptional.",
+              "type": "string"
+            }
+          },
+          "flatPath": "v1beta1/beacons/{beaconsId}:decommission",
+          "id": "proximitybeacon.beacons.decommission",
+          "path": "v1beta1/{+beaconName}:decommission",
+          "description": "Decommissions the specified beacon in the service. This beacon will no\nlonger be returned from `beaconinfo.getforobserved`. This operation is\npermanent -- you will not be able to re-register a beacon with this ID\nagain.\n\nAuthenticate using an [OAuth access token](https://developers.google.com/identity/protocols/OAuth2)\nfrom a signed-in user with **Is owner** or **Can edit** permissions in the\nGoogle Developers Console project."
+        },
+        "delete": {
+          "response": {
+            "$ref": "Empty"
+          },
+          "parameterOrder": [
+            "beaconName"
+          ],
           "httpMethod": "DELETE",
           "parameters": {
             "beaconName": {
               "description": "Beacon that should be deleted. A beacon name has the format\n\"beacons/N!beaconId\" where the beaconId is the base16 ID broadcast by\nthe beacon and N is a code for the beacon's type. Possible values are\n`3` for Eddystone-UID, `4` for Eddystone-EID, `1` for iBeacon, or `5`\nfor AltBeacon. For Eddystone-EID beacons, you may use either the\ncurrent EID or the beacon's \"stable\" UID.\nRequired.",
               "required": true,
+              "type": "string",
               "pattern": "^beacons/[^/]+$",
-              "location": "path",
-              "type": "string"
+              "location": "path"
             },
             "projectId": {
+              "location": "query",
               "description": "The project id of the beacon to delete. If not provided, the project\nthat is making the request is used.\nOptional.",
-              "location": "query",
               "type": "string"
             }
           },
-          "path": "v1beta1/{+beaconName}",
           "scopes": [
             "https://www.googleapis.com/auth/userlocation.beacon.registry"
-          ]
-        }
-      }
-    },
-    "beaconinfo": {
-      "methods": {
-        "getforobserved": {
-          "id": "proximitybeacon.beaconinfo.getforobserved",
-          "response": {
-            "$ref": "GetInfoForObservedBeaconsResponse"
-          },
-          "parameterOrder": [],
-          "description": "Given one or more beacon observations, returns any beacon information\nand attachments accessible to your application. Authorize by using the\n[API key](https://developers.google.com/beacons/proximity/how-tos/authorizing#APIKey)\nfor the application.",
-          "request": {
-            "$ref": "GetInfoForObservedBeaconsRequest"
-          },
-          "flatPath": "v1beta1/beaconinfo:getforobserved",
-          "httpMethod": "POST",
-          "parameters": {},
-          "path": "v1beta1/beaconinfo:getforobserved"
-        }
-      }
-    },
-    "namespaces": {
-      "methods": {
-        "update": {
-          "id": "proximitybeacon.namespaces.update",
-          "response": {
-            "$ref": "Namespace"
-          },
-          "parameterOrder": [
-            "namespaceName"
           ],
-          "description": "Updates the information about the specified namespace. Only the namespace\nvisibility can be updated.",
-          "request": {
-            "$ref": "Namespace"
+          "flatPath": "v1beta1/beacons/{beaconsId}",
+          "path": "v1beta1/{+beaconName}",
+          "id": "proximitybeacon.beacons.delete",
+          "description": "Deletes the specified beacon including all diagnostics data for the beacon\nas well as any attachments on the beacon (including those belonging to\nother projects). This operation cannot be undone.\n\nAuthenticate using an [OAuth access token](https://developers.google.com/identity/protocols/OAuth2)\nfrom a signed-in user with **Is owner** or **Can edit** permissions in the\nGoogle Developers Console project."
+        },
+        "deactivate": {
+          "parameterOrder": [
+            "beaconName"
+          ],
+          "httpMethod": "POST",
+          "response": {
+            "$ref": "Empty"
           },
-          "flatPath": "v1beta1/namespaces/{namespacesId}",
-          "httpMethod": "PUT",
           "parameters": {
-            "namespaceName": {
-              "description": "Resource name of this namespace. Namespaces names have the format:\n\u003ccode\u003enamespaces/\u003cvar\u003enamespace\u003c/var\u003e\u003c/code\u003e.",
+            "beaconName": {
+              "description": "Beacon that should be deactivated. A beacon name has the format\n\"beacons/N!beaconId\" where the beaconId is the base16 ID broadcast by\nthe beacon and N is a code for the beacon's type. Possible values are\n`3` for Eddystone-UID, `4` for Eddystone-EID, `1` for iBeacon, or `5`\nfor AltBeacon. For Eddystone-EID beacons, you may use either the\ncurrent EID or the beacon's \"stable\" UID.\nRequired.",
               "required": true,
-              "pattern": "^namespaces/[^/]+$",
-              "location": "path",
-              "type": "string"
+              "type": "string",
+              "pattern": "^beacons/[^/]+$",
+              "location": "path"
             },
             "projectId": {
-              "description": "The project id of the namespace to update. If the project id is not\nspecified then the project making the request is used. The project id\nmust match the project that owns the beacon.\nOptional.",
-              "location": "query",
-              "type": "string"
+              "description": "The project id of the beacon to deactivate. If the project id is not\nspecified then the project making the request is used. The project id must\nmatch the project that owns the beacon.\nOptional.",
+              "type": "string",
+              "location": "query"
             }
           },
-          "path": "v1beta1/{+namespaceName}",
           "scopes": [
             "https://www.googleapis.com/auth/userlocation.beacon.registry"
-          ]
+          ],
+          "flatPath": "v1beta1/beacons/{beaconsId}:deactivate",
+          "path": "v1beta1/{+beaconName}:deactivate",
+          "id": "proximitybeacon.beacons.deactivate",
+          "description": "Deactivates a beacon. Once deactivated, the API will not return\ninformation nor attachment data for the beacon when queried via\n`beaconinfo.getforobserved`. Calling this method on an already inactive\nbeacon will do nothing (but will return a successful response code).\n\nAuthenticate using an [OAuth access token](https://developers.google.com/identity/protocols/OAuth2)\nfrom a signed-in user with **Is owner** or **Can edit** permissions in the\nGoogle Developers Console project."
         },
         "list": {
-          "id": "proximitybeacon.namespaces.list",
+          "path": "v1beta1/beacons",
+          "id": "proximitybeacon.beacons.list",
+          "description": "Searches the beacon registry for beacons that match the given search\ncriteria. Only those beacons that the client has permission to list\nwill be returned.\n\nAuthenticate using an [OAuth access token](https://developers.google.com/identity/protocols/OAuth2)\nfrom a signed-in user with **viewer**, **Is owner** or **Can edit**\npermissions in the Google Developers Console project.",
           "response": {
-            "$ref": "ListNamespacesResponse"
+            "$ref": "ListBeaconsResponse"
           },
           "parameterOrder": [],
-          "description": "Lists all attachment namespaces owned by your Google Developers Console\nproject. Attachment data associated with a beacon must include a\nnamespaced type, and the namespace must be owned by your project.\n\nAuthenticate using an [OAuth access token](https://developers.google.com/identity/protocols/OAuth2)\nfrom a signed-in user with **viewer**, **Is owner** or **Can edit**\npermissions in the Google Developers Console project.",
-          "flatPath": "v1beta1/namespaces",
           "httpMethod": "GET",
+          "scopes": [
+            "https://www.googleapis.com/auth/userlocation.beacon.registry"
+          ],
           "parameters": {
-            "projectId": {
-              "description": "The project id to list namespaces under.\nOptional.",
+            "pageToken": {
+              "description": "A pagination token obtained from a previous request to list beacons.",
+              "type": "string",
+              "location": "query"
+            },
+            "q": {
+              "description": "Filter query string that supports the following field filters:\n\n* **description:`\"\u003cstring\u003e\"`**\n  For example: **description:\"Room 3\"**\n  Returns beacons whose description matches tokens in the string \"Room 3\"\n  (not necessarily that exact string).\n  The string must be double-quoted.\n* **status:`\u003cenum\u003e`**\n  For example: **status:active**\n  Returns beacons whose status matches the given value. Values must be\n  one of the Beacon.Status enum values (case insensitive). Accepts\n  multiple filters which will be combined with OR logic.\n* **stability:`\u003cenum\u003e`**\n  For example: **stability:mobile**\n  Returns beacons whose expected stability matches the given value.\n  Values must be one of the Beacon.Stability enum values (case\n  insensitive). Accepts multiple filters which will be combined with\n  OR logic.\n* **place\\_id:`\"\u003cstring\u003e\"`**\n  For example: **place\\_id:\"ChIJVSZzVR8FdkgRXGmmm6SslKw=\"**\n  Returns beacons explicitly registered at the given place, expressed as\n  a Place ID obtained from [Google Places API](/places/place-id). Does not\n  match places inside the given place. Does not consider the beacon's\n  actual location (which may be different from its registered place).\n  Accepts multiple filters that will be combined with OR logic. The place\n  ID must be double-quoted.\n* **registration\\_time`[\u003c|\u003e|\u003c=|\u003e=]\u003cinteger\u003e`**\n  For example: **registration\\_time\u003e=1433116800**\n  Returns beacons whose registration time matches the given filter.\n  Supports the operators: \u003c, \u003e, \u003c=, and \u003e=. Timestamp must be expressed as\n  an integer number of seconds since midnight January 1, 1970 UTC. Accepts\n  at most two filters that will be combined with AND logic, to support\n  \"between\" semantics. If more than two are supplied, the latter ones are\n  ignored.\n* **lat:`\u003cdouble\u003e lng:\u003cdouble\u003e radius:\u003cinteger\u003e`**\n  For example: **lat:51.1232343 lng:-1.093852 radius:1000**\n  Returns beacons whose registered location is within the given circle.\n  When any of these fields are given, all are required. Latitude and\n  longitude must be decimal degrees between -90.0 and 90.0 and between\n  -180.0 and 180.0 respectively. Radius must be an integer number of\n  meters between 10 and 1,000,000 (1000 km).\n* **property:`\"\u003cstring\u003e=\u003cstring\u003e\"`**\n  For example: **property:\"battery-type=CR2032\"**\n  Returns beacons which have a property of the given name and value.\n  Supports multiple filters which will be combined with OR logic.\n  The entire name=value string must be double-quoted as one string.\n* **attachment\\_type:`\"\u003cstring\u003e\"`**\n  For example: **attachment_type:\"my-namespace/my-type\"**\n  Returns beacons having at least one attachment of the given namespaced\n  type. Supports \"any within this namespace\" via the partial wildcard\n  syntax: \"my-namespace/*\". Supports multiple filters which will be\n  combined with OR logic. The string must be double-quoted.\n* **indoor\\_level:`\"\u003cstring\u003e\"`**\n  For example: **indoor\\_level:\"1\"**\n  Returns beacons which are located on the given indoor level. Accepts\n  multiple filters that will be combined with OR logic.\n\nMultiple filters on the same field are combined with OR logic (except\nregistration_time which is combined with AND logic).\nMultiple filters on different fields are combined with AND logic.\nFilters should be separated by spaces.\n\nAs with any HTTP query string parameter, the whole filter expression must\nbe URL-encoded.\n\nExample REST request:\n`GET /v1beta1/beacons?q=status:active%20lat:51.123%20lng:-1.095%20radius:1000`",
+              "type": "string",
+              "location": "query"
+            },
+            "pageSize": {
               "location": "query",
+              "description": "The maximum number of records to return for this request, up to a\nserver-defined upper limit.",
+              "format": "int32",
+              "type": "integer"
+            },
+            "projectId": {
+              "location": "query",
+              "description": "The project id to list beacons under. If not present then the project\ncredential that made the request is used as the project.\nOptional.",
               "type": "string"
             }
           },
-          "path": "v1beta1/namespaces",
+          "flatPath": "v1beta1/beacons"
+        },
+        "register": {
+          "description": "Registers a previously unregistered beacon given its `advertisedId`.\nThese IDs are unique within the system. An ID can be registered only once.\n\nAuthenticate using an [OAuth access token](https://developers.google.com/identity/protocols/OAuth2)\nfrom a signed-in user with **Is owner** or **Can edit** permissions in the\nGoogle Developers Console project.",
+          "request": {
+            "$ref": "Beacon"
+          },
+          "httpMethod": "POST",
+          "parameterOrder": [],
+          "response": {
+            "$ref": "Beacon"
+          },
           "scopes": [
             "https://www.googleapis.com/auth/userlocation.beacon.registry"
-          ]
+          ],
+          "parameters": {
+            "projectId": {
+              "description": "The project id of the project the beacon will be registered to. If\nthe project id is not specified then the project making the request\nis used.\nOptional.",
+              "type": "string",
+              "location": "query"
+            }
+          },
+          "flatPath": "v1beta1/beacons:register",
+          "id": "proximitybeacon.beacons.register",
+          "path": "v1beta1/beacons:register"
         }
       }
     }
   },
+  "parameters": {
+    "oauth_token": {
+      "description": "OAuth 2.0 token for the current user.",
+      "type": "string",
+      "location": "query"
+    },
+    "bearer_token": {
+      "location": "query",
+      "description": "OAuth bearer token.",
+      "type": "string"
+    },
+    "upload_protocol": {
+      "description": "Upload protocol for media (e.g. \"raw\", \"multipart\").",
+      "type": "string",
+      "location": "query"
+    },
+    "prettyPrint": {
+      "description": "Returns response with indentations and line breaks.",
+      "type": "boolean",
+      "default": "true",
+      "location": "query"
+    },
+    "fields": {
+      "description": "Selector specifying which fields to include in a partial response.",
+      "type": "string",
+      "location": "query"
+    },
+    "uploadType": {
+      "location": "query",
+      "description": "Legacy upload protocol for media (e.g. \"media\", \"multipart\").",
+      "type": "string"
+    },
+    "$.xgafv": {
+      "enum": [
+        "1",
+        "2"
+      ],
+      "description": "V1 error format.",
+      "type": "string",
+      "enumDescriptions": [
+        "v1 error format",
+        "v2 error format"
+      ],
+      "location": "query"
+    },
+    "callback": {
+      "description": "JSONP",
+      "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",
+      "description": "Data format for response.",
+      "default": "json",
+      "enum": [
+        "json",
+        "media",
+        "proto"
+      ],
+      "type": "string"
+    },
+    "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"
+    },
+    "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"
+    },
+    "pp": {
+      "location": "query",
+      "description": "Pretty-print response.",
+      "type": "boolean",
+      "default": "true"
+    }
+  },
   "schemas": {
-    "ListBeaconsResponse": {
-      "description": "Response that contains list beacon results and pagination help.",
-      "type": "object",
-      "properties": {
-        "beacons": {
-          "description": "The beacons that matched the search criteria.",
-          "type": "array",
-          "items": {
-            "$ref": "Beacon"
-          }
-        },
-        "nextPageToken": {
-          "description": "An opaque pagination token that the client may provide in their next\nrequest to retrieve the next page of results.",
-          "type": "string"
-        },
-        "totalCount": {
-          "description": "Estimate of the total number of beacons matched by the query. Higher\nvalues may be less accurate.",
-          "type": "string",
-          "format": "int64"
-        }
-      },
-      "id": "ListBeaconsResponse"
-    },
-    "Observation": {
-      "description": "Represents one beacon observed once.",
-      "type": "object",
-      "properties": {
-        "advertisedId": {
-          "description": "The ID advertised by the beacon the client has encountered.\n\nIf the submitted `advertised_id` type is Eddystone-EID, then the client\nmust be authorized to resolve the given beacon. Otherwise no data will be\nreturned for that beacon.\nRequired.",
-          "$ref": "AdvertisedId"
-        },
-        "telemetry": {
-          "description": "The array of telemetry bytes received from the beacon. The server is\nresponsible for parsing it. This field may frequently be empty, as\nwith a beacon that transmits telemetry only occasionally.",
-          "type": "string",
-          "format": "byte"
-        },
-        "timestampMs": {
-          "description": "Time when the beacon was observed.",
-          "type": "string",
-          "format": "google-datetime"
-        }
-      },
-      "id": "Observation"
-    },
-    "Diagnostics": {
-      "description": "Diagnostics for a single beacon.",
-      "type": "object",
-      "properties": {
-        "alerts": {
-          "description": "An unordered list of Alerts that the beacon has.",
-          "enumDescriptions": [
-            "Invalid value. Should never appear.",
-            "The beacon has been reported in a location different than its registered\nlocation. This may indicate that the beacon has been moved. This signal\nis not 100% accurate, but indicates that further investigation is worth\nwhile.",
-            "The battery level for the beacon is low enough that, given the beacon's\ncurrent use, its battery will run out with in the next 60 days. This\nindicates that the battery should be replaced soon."
-          ],
-          "type": "array",
-          "items": {
-            "enum": [
-              "ALERT_UNSPECIFIED",
-              "WRONG_LOCATION",
-              "LOW_BATTERY"
-            ],
-            "type": "string"
-          }
-        },
-        "beaconName": {
-          "description": "Resource name of the beacon. For Eddystone-EID beacons, this may\nbe the beacon's current EID, or the beacon's \"stable\" Eddystone-UID.",
-          "type": "string"
-        },
-        "estimatedLowBatteryDate": {
-          "description": "The date when the battery is expected to be low. If the value is missing\nthen there is no estimate for when the battery will be low.\nThis value is only an estimate, not an exact date.",
-          "$ref": "Date"
-        }
-      },
-      "id": "Diagnostics"
-    },
-    "AdvertisedId": {
-      "description": "Defines a unique identifier of a beacon as broadcast by the device.",
-      "type": "object",
-      "properties": {
-        "type": {
-          "description": "Specifies the identifier type.\nRequired.",
-          "enum": [
-            "TYPE_UNSPECIFIED",
-            "EDDYSTONE",
-            "IBEACON",
-            "ALTBEACON",
-            "EDDYSTONE_EID"
-          ],
-          "enumDescriptions": [
-            "Do not use this value.",
-            "Eddystone, an open beacon format that supports Android and iOS devices\nhttps://github.com/google/eddystone/wiki/Beacon-Specification",
-            "Apple iBeacon compatible beacon",
-            "See http://altbeacon.org and/or https://github.com/AltBeacon/spec.",
-            "Eddystone Ephemeral ID"
-          ],
-          "type": "string"
-        },
-        "id": {
-          "description": "The actual beacon identifier, as broadcast by the beacon hardware. Must be\n[base64](http://tools.ietf.org/html/rfc4648#section-4) encoded in HTTP\nrequests, and will be so encoded (with padding) in responses. The base64\nencoding should be of the binary byte-stream and not any textual (such as\nhex) representation thereof.\nRequired.",
-          "type": "string",
-          "format": "byte"
-        }
-      },
-      "id": "AdvertisedId"
-    },
-    "DeleteAttachmentsResponse": {
-      "description": "Response for a request to delete attachments.",
-      "type": "object",
-      "properties": {
-        "numDeleted": {
-          "description": "The number of attachments that were deleted.",
-          "type": "integer",
-          "format": "int32"
-        }
-      },
-      "id": "DeleteAttachmentsResponse"
-    },
-    "EphemeralIdRegistration": {
-      "description": "Write-only registration parameters for beacons using Eddystone-EID format.\nTwo ways of securely registering an Eddystone-EID beacon with the service\nare supported:\n\n1. Perform an ECDH key exchange via this API, including a previous call\n   to `GET /v1beta1/eidparams`. In this case the fields\n   `beacon_ecdh_public_key` and `service_ecdh_public_key` should be\n   populated and `beacon_identity_key` should not be populated. This\n   method ensures that only the two parties in the ECDH key exchange can\n   compute the identity key, which becomes a secret between them.\n2. Derive or obtain the beacon's identity key via other secure means\n   (perhaps an ECDH key exchange between the beacon and a mobile device\n   or any other secure method), and then submit the resulting identity key\n   to the service. In this case `beacon_identity_key` field should be\n   populated, and neither of `beacon_ecdh_public_key` nor\n   `service_ecdh_public_key` fields should be. The security of this method\n   depends on how securely the parties involved (in particular the\n   bluetooth client) handle the identity key, and obviously on how\n   securely the identity key was generated.\n\nSee [the Eddystone specification](https://github.com/google/eddystone/tree/master/eddystone-eid) at GitHub.",
-      "type": "object",
-      "properties": {
-        "beaconEcdhPublicKey": {
-          "description": "The beacon's public key used for the Elliptic curve Diffie-Hellman\nkey exchange. When this field is populated, `service_ecdh_public_key`\nmust also be populated, and `beacon_identity_key` must not be.",
-          "type": "string",
-          "format": "byte"
-        },
-        "initialClockValue": {
-          "description": "The initial clock value of the beacon. The beacon's clock must have\nbegun counting at this value immediately prior to transmitting this\nvalue to the resolving service. Significant delay in transmitting this\nvalue to the service risks registration or resolution failures. If a\nvalue is not provided, the default is zero.",
-          "type": "string",
-          "format": "uint64"
-        },
-        "beaconIdentityKey": {
-          "description": "The private key of the beacon. If this field is populated,\n`beacon_ecdh_public_key` and `service_ecdh_public_key` must not be\npopulated.",
-          "type": "string",
-          "format": "byte"
-        },
-        "serviceEcdhPublicKey": {
-          "description": "The service's public key used for the Elliptic curve Diffie-Hellman\nkey exchange. When this field is populated, `beacon_ecdh_public_key`\nmust also be populated, and `beacon_identity_key` must not be.",
-          "type": "string",
-          "format": "byte"
-        },
-        "rotationPeriodExponent": {
-          "description": "Indicates the nominal period between each rotation of the beacon's\nephemeral ID. \"Nominal\" because the beacon should randomize the\nactual interval. See [the spec at github](https://github.com/google/eddystone/tree/master/eddystone-eid)\nfor details. This value corresponds to a power-of-two scaler on the\nbeacon's clock: when the scaler value is K, the beacon will begin\nbroadcasting a new ephemeral ID on average every 2^K seconds.",
-          "type": "integer",
-          "format": "uint32"
-        },
-        "initialEid": {
-          "description": "An initial ephemeral ID calculated using the clock value submitted as\n`initial_clock_value`, and the secret key generated by the\nDiffie-Hellman key exchange using `service_ecdh_public_key` and\n`service_ecdh_public_key`. This initial EID value will be used by the\nservice to confirm that the key exchange process was successful.",
-          "type": "string",
-          "format": "byte"
-        }
-      },
-      "id": "EphemeralIdRegistration"
-    },
-    "ListDiagnosticsResponse": {
-      "description": "Response that contains the requested diagnostics.",
-      "type": "object",
-      "properties": {
-        "nextPageToken": {
-          "description": "Token that can be used for pagination. Returned only if the\nrequest matches more beacons than can be returned in this response.",
-          "type": "string"
-        },
-        "diagnostics": {
-          "description": "The diagnostics matching the given request.",
-          "type": "array",
-          "items": {
-            "$ref": "Diagnostics"
-          }
-        }
-      },
-      "id": "ListDiagnosticsResponse"
-    },
-    "BeaconInfo": {
-      "description": "A subset of beacon information served via the `beaconinfo.getforobserved`\nmethod, which you call when users of your app encounter your beacons.",
-      "type": "object",
-      "properties": {
-        "attachments": {
-          "description": "Attachments matching the type(s) requested.\nMay be empty if no attachment types were requested.",
-          "type": "array",
-          "items": {
-            "$ref": "AttachmentInfo"
-          }
-        },
-        "beaconName": {
-          "description": "The name under which the beacon is registered.",
-          "type": "string"
-        },
-        "advertisedId": {
-          "description": "The ID advertised by the beacon.",
-          "$ref": "AdvertisedId"
-        }
-      },
-      "id": "BeaconInfo"
-    },
-    "IndoorLevel": {
-      "description": "Indoor level, a human-readable string as returned by Google Maps APIs,\nuseful to indicate which floor of a building a beacon is located on.",
-      "type": "object",
-      "properties": {
-        "name": {
-          "description": "The name of this level.",
-          "type": "string"
-        }
-      },
-      "id": "IndoorLevel"
-    },
-    "EphemeralIdRegistrationParams": {
-      "description": "Information a client needs to provision and register beacons that\nbroadcast Eddystone-EID format beacon IDs, using Elliptic curve\nDiffie-Hellman key exchange. See\n[the Eddystone specification](https://github.com/google/eddystone/tree/master/eddystone-eid) at GitHub.",
-      "type": "object",
-      "properties": {
-        "serviceEcdhPublicKey": {
-          "description": "The beacon service's public key for use by a beacon to derive its\nIdentity Key using Elliptic Curve Diffie-Hellman key exchange.",
-          "type": "string",
-          "format": "byte"
-        },
-        "minRotationPeriodExponent": {
-          "description": "Indicates the minimum rotation period supported by the service.\nSee EddystoneEidRegistration.rotation_period_exponent",
-          "type": "integer",
-          "format": "uint32"
-        },
-        "maxRotationPeriodExponent": {
-          "description": "Indicates the maximum rotation period supported by the service.\nSee EddystoneEidRegistration.rotation_period_exponent",
-          "type": "integer",
-          "format": "uint32"
-        }
-      },
-      "id": "EphemeralIdRegistrationParams"
-    },
     "ListBeaconAttachmentsResponse": {
       "description": "Response to `ListBeaconAttachments` that contains the requested attachments.",
       "type": "object",
@@ -796,157 +650,140 @@
       "id": "ListBeaconAttachmentsResponse"
     },
     "Namespace": {
-      "description": "An attachment namespace defines read and write access for all the attachments\ncreated under it. Each namespace is globally unique, and owned by one\nproject which is the only project that can create attachments under it.",
-      "type": "object",
       "properties": {
-        "namespaceName": {
-          "description": "Resource name of this namespace. Namespaces names have the format:\n\u003ccode\u003enamespaces/\u003cvar\u003enamespace\u003c/var\u003e\u003c/code\u003e.",
-          "type": "string"
-        },
         "servingVisibility": {
-          "description": "Specifies what clients may receive attachments under this namespace\nvia `beaconinfo.getforobserved`.",
-          "enum": [
-            "VISIBILITY_UNSPECIFIED",
-            "UNLISTED",
-            "PUBLIC"
-          ],
           "enumDescriptions": [
             "Do not use this value.",
             "Served only to the project that owns the namespace.",
             "Any project can subscribe to attachments under the namespace."
           ],
-          "type": "string"
-        }
-      },
-      "id": "Namespace"
-    },
-    "AttachmentInfo": {
-      "description": "A subset of attachment information served via the\n`beaconinfo.getforobserved` method, used when your users encounter your\nbeacons.",
-      "type": "object",
-      "properties": {
-        "data": {
-          "description": "An opaque data container for client-provided data.",
-          "type": "string",
-          "format": "byte"
-        },
-        "namespacedType": {
-          "description": "Specifies what kind of attachment this is. Tells a client how to\ninterpret the `data` field. Format is \u003cvar\u003enamespace/type\u003c/var\u003e, for\nexample \u003ccode\u003escrupulous-wombat-12345/welcome-message\u003c/code\u003e",
-          "type": "string"
-        }
-      },
-      "id": "AttachmentInfo"
-    },
-    "Beacon": {
-      "description": "Details of a beacon device.",
-      "type": "object",
-      "properties": {
-        "description": {
-          "description": "Free text used to identify and describe the beacon. Maximum length 140\ncharacters.\nOptional.",
-          "type": "string"
-        },
-        "provisioningKey": {
-          "description": "Some beacons may require a user to provide an authorization key before\nchanging any of its configuration (e.g. broadcast frames, transmit power).\nThis field provides a place to store and control access to that key.\nThis field is populated in responses to `GET /v1beta1/beacons/3!beaconId`\nfrom users with write access to the given beacon. That is to say: If the\nuser is authorized to write the beacon's confidential data in the service,\nthe service considers them authorized to configure the beacon. Note\nthat this key grants nothing on the service, only on the beacon itself.",
-          "type": "string",
-          "format": "byte"
-        },
-        "status": {
-          "description": "Current status of the beacon.\nRequired.",
           "enum": [
-            "STATUS_UNSPECIFIED",
-            "ACTIVE",
-            "DECOMMISSIONED",
-            "INACTIVE"
+            "VISIBILITY_UNSPECIFIED",
+            "UNLISTED",
+            "PUBLIC"
           ],
-          "enumDescriptions": [
-            "Do not use this value.",
-            "The \"normal\" in-use state of a beacon.",
-            "Beacon should no longer be used for any purpose. This is irreversible.",
-            "The beacon should not be visible to mobile devices. This is reversible."
-          ],
+          "description": "Specifies what clients may receive attachments under this namespace\nvia `beaconinfo.getforobserved`.",
           "type": "string"
         },
-        "properties": {
-          "description": "Properties of the beacon device, for example battery type or firmware\nversion.\nOptional.",
-          "additionalProperties": {
-            "type": "string"
-          },
-          "type": "object"
-        },
-        "ephemeralIdRegistration": {
-          "description": "Write-only registration parameters for beacons using Eddystone-EID\n(remotely resolved ephemeral ID) format. This information will not be\npopulated in API responses. When submitting this data, the `advertised_id`\nfield must contain an ID of type Eddystone-UID. Any other ID type will\nresult in an error.",
-          "$ref": "EphemeralIdRegistration"
-        },
-        "placeId": {
-          "description": "The [Google Places API](/places/place-id) Place ID of the place where\nthe beacon is deployed. This is given when the beacon is registered or\nupdated, not automatically detected in any way.\nOptional.",
+        "namespaceName": {
+          "description": "Resource name of this namespace. Namespaces names have the format:\n\u003ccode\u003enamespaces/\u003cvar\u003enamespace\u003c/var\u003e\u003c/code\u003e.",
+          "type": "string"
+        }
+      },
+      "id": "Namespace",
+      "description": "An attachment namespace defines read and write access for all the attachments\ncreated under it. Each namespace is globally unique, and owned by one\nproject which is the only project that can create attachments under it.",
+      "type": "object"
+    },
+    "BeaconInfo": {
+      "properties": {
+        "beaconName": {
+          "description": "The name under which the beacon is registered.",
           "type": "string"
         },
         "advertisedId": {
-          "description": "The identifier of a beacon as advertised by it. This field must be\npopulated when registering. It may be empty when updating a beacon\nrecord because it is ignored in updates.\n\nWhen registering a beacon that broadcasts Eddystone-EID, this field\nshould contain a \"stable\" Eddystone-UID that identifies the beacon and\nlinks it to its attachments. The stable Eddystone-UID is only used for\nadministering the beacon.",
-          "$ref": "AdvertisedId"
+          "$ref": "AdvertisedId",
+          "description": "The ID advertised by the beacon."
         },
-        "latLng": {
-          "description": "The location of the beacon, expressed as a latitude and longitude pair.\nThis location is given when the beacon is registered or updated. It does\nnot necessarily indicate the actual current location of the beacon.\nOptional.",
-          "$ref": "LatLng"
-        },
-        "beaconName": {
-          "description": "Resource name of this beacon. A beacon name has the format\n\"beacons/N!beaconId\" where the beaconId is the base16 ID broadcast by\nthe beacon and N is a code for the beacon's type. Possible values are\n`3` for Eddystone, `1` for iBeacon, or `5` for AltBeacon.\n\nThis field must be left empty when registering. After reading a beacon,\nclients can use the name for future operations.",
-          "type": "string"
-        },
-        "expectedStability": {
-          "description": "Expected location stability. This is set when the beacon is registered or\nupdated, not automatically detected in any way.\nOptional.",
-          "enum": [
-            "STABILITY_UNSPECIFIED",
-            "STABLE",
-            "PORTABLE",
-            "MOBILE",
-            "ROVING"
-          ],
-          "enumDescriptions": [
-            "Do not use this value.",
-            "Not expected to move, for example a store's front door.",
-            "Usually stable but may move rarely, usually within a single place,\nfor example a store display.",
-            "Moves frequently, for example a personal item or food truck.",
-            "Moves continuously in service, for example a bus or train."
-          ],
-          "type": "string"
-        },
-        "indoorLevel": {
-          "description": "The indoor level information for this beacon, if known. As returned by the\nGoogle Maps API.\nOptional.",
-          "$ref": "IndoorLevel"
+        "attachments": {
+          "description": "Attachments matching the type(s) requested.\nMay be empty if no attachment types were requested.",
+          "type": "array",
+          "items": {
+            "$ref": "AttachmentInfo"
+          }
         }
       },
-      "id": "Beacon"
+      "id": "BeaconInfo",
+      "description": "A subset of beacon information served via the `beaconinfo.getforobserved`\nmethod, which you call when users of your app encounter your beacons.",
+      "type": "object"
     },
-    "Empty": {
-      "description": "A generic empty message that you can re-use to avoid defining duplicated\nempty messages in your APIs. A typical example is to use it as the request\nor the response type of an API method. For instance:\n\n    service Foo {\n      rpc Bar(google.protobuf.Empty) returns (google.protobuf.Empty);\n    }\n\nThe JSON representation for `Empty` is empty JSON object `{}`.",
-      "type": "object",
-      "properties": {},
-      "id": "Empty"
+    "AttachmentInfo": {
+      "properties": {
+        "namespacedType": {
+          "description": "Specifies what kind of attachment this is. Tells a client how to\ninterpret the `data` field. Format is \u003cvar\u003enamespace/type\u003c/var\u003e, for\nexample \u003ccode\u003escrupulous-wombat-12345/welcome-message\u003c/code\u003e",
+          "type": "string"
+        },
+        "data": {
+          "description": "An opaque data container for client-provided data.",
+          "format": "byte",
+          "type": "string"
+        }
+      },
+      "id": "AttachmentInfo",
+      "description": "A subset of attachment information served via the\n`beaconinfo.getforobserved` method, used when your users encounter your\nbeacons.",
+      "type": "object"
     },
-    "BeaconAttachment": {
-      "description": "Project-specific data associated with a beacon.",
+    "EphemeralIdRegistrationParams": {
+      "properties": {
+        "serviceEcdhPublicKey": {
+          "description": "The beacon service's public key for use by a beacon to derive its\nIdentity Key using Elliptic Curve Diffie-Hellman key exchange.",
+          "format": "byte",
+          "type": "string"
+        },
+        "minRotationPeriodExponent": {
+          "description": "Indicates the minimum rotation period supported by the service.\nSee EddystoneEidRegistration.rotation_period_exponent",
+          "format": "uint32",
+          "type": "integer"
+        },
+        "maxRotationPeriodExponent": {
+          "description": "Indicates the maximum rotation period supported by the service.\nSee EddystoneEidRegistration.rotation_period_exponent",
+          "format": "uint32",
+          "type": "integer"
+        }
+      },
+      "id": "EphemeralIdRegistrationParams",
+      "description": "Information a client needs to provision and register beacons that\nbroadcast Eddystone-EID format beacon IDs, using Elliptic curve\nDiffie-Hellman key exchange. See\n[the Eddystone specification](https://github.com/google/eddystone/tree/master/eddystone-eid) at GitHub.",
+      "type": "object"
+    },
+    "DeleteAttachmentsResponse": {
+      "properties": {
+        "numDeleted": {
+          "description": "The number of attachments that were deleted.",
+          "format": "int32",
+          "type": "integer"
+        }
+      },
+      "id": "DeleteAttachmentsResponse",
+      "description": "Response for a request to delete attachments.",
+      "type": "object"
+    },
+    "Observation": {
+      "description": "Represents one beacon observed once.",
       "type": "object",
       "properties": {
-        "data": {
-          "description": "An opaque data container for client-provided data. Must be\n[base64](http://tools.ietf.org/html/rfc4648#section-4) encoded in HTTP\nrequests, and will be so encoded (with padding) in responses.\nRequired.",
-          "type": "string",
-          "format": "byte"
-        },
-        "namespacedType": {
-          "description": "Specifies what kind of attachment this is. Tells a client how to\ninterpret the `data` field. Format is \u003cvar\u003enamespace/type\u003c/var\u003e. Namespace\nprovides type separation between clients. Type describes the type of\n`data`, for use by the client when parsing the `data` field.\nRequired.",
+        "timestampMs": {
+          "description": "Time when the beacon was observed.",
+          "format": "google-datetime",
           "type": "string"
         },
-        "attachmentName": {
-          "description": "Resource name of this attachment. Attachment names have the format:\n\u003ccode\u003ebeacons/\u003cvar\u003ebeacon_id\u003c/var\u003e/attachments/\u003cvar\u003eattachment_id\u003c/var\u003e\u003c/code\u003e.\nLeave this empty on creation.",
-          "type": "string"
+        "advertisedId": {
+          "$ref": "AdvertisedId",
+          "description": "The ID advertised by the beacon the client has encountered.\n\nIf the submitted `advertised_id` type is Eddystone-EID, then the client\nmust be authorized to resolve the given beacon. Otherwise no data will be\nreturned for that beacon.\nRequired."
         },
-        "creationTimeMs": {
-          "description": "The UTC time when this attachment was created, in milliseconds since the\nUNIX epoch.",
-          "type": "string",
-          "format": "google-datetime"
+        "telemetry": {
+          "description": "The array of telemetry bytes received from the beacon. The server is\nresponsible for parsing it. This field may frequently be empty, as\nwith a beacon that transmits telemetry only occasionally.",
+          "format": "byte",
+          "type": "string"
         }
       },
-      "id": "BeaconAttachment"
+      "id": "Observation"
+    },
+    "ListDiagnosticsResponse": {
+      "properties": {
+        "nextPageToken": {
+          "description": "Token that can be used for pagination. Returned only if the\nrequest matches more beacons than can be returned in this response.",
+          "type": "string"
+        },
+        "diagnostics": {
+          "description": "The diagnostics matching the given request.",
+          "type": "array",
+          "items": {
+            "$ref": "Diagnostics"
+          }
+        }
+      },
+      "id": "ListDiagnosticsResponse",
+      "description": "Response that contains the requested diagnostics.",
+      "type": "object"
     },
     "GetInfoForObservedBeaconsResponse": {
       "description": "Information about the requested beacons, optionally including attachment\ndata.",
@@ -962,10 +799,227 @@
       },
       "id": "GetInfoForObservedBeaconsResponse"
     },
-    "GetInfoForObservedBeaconsRequest": {
-      "description": "Request for beacon and attachment information about beacons that\na mobile client has encountered \"in the wild\".",
+    "Beacon": {
+      "description": "Details of a beacon device.",
       "type": "object",
       "properties": {
+        "latLng": {
+          "description": "The location of the beacon, expressed as a latitude and longitude pair.\nThis location is given when the beacon is registered or updated. It does\nnot necessarily indicate the actual current location of the beacon.\nOptional.",
+          "$ref": "LatLng"
+        },
+        "placeId": {
+          "description": "The [Google Places API](/places/place-id) Place ID of the place where\nthe beacon is deployed. This is given when the beacon is registered or\nupdated, not automatically detected in any way.\nOptional.",
+          "type": "string"
+        },
+        "description": {
+          "description": "Free text used to identify and describe the beacon. Maximum length 140\ncharacters.\nOptional.",
+          "type": "string"
+        },
+        "properties": {
+          "additionalProperties": {
+            "type": "string"
+          },
+          "description": "Properties of the beacon device, for example battery type or firmware\nversion.\nOptional.",
+          "type": "object"
+        },
+        "indoorLevel": {
+          "description": "The indoor level information for this beacon, if known. As returned by the\nGoogle Maps API.\nOptional.",
+          "$ref": "IndoorLevel"
+        },
+        "status": {
+          "enumDescriptions": [
+            "Do not use this value.",
+            "The \"normal\" in-use state of a beacon.",
+            "Beacon should no longer be used for any purpose. This is irreversible.",
+            "The beacon should not be visible to mobile devices. This is reversible."
+          ],
+          "enum": [
+            "STATUS_UNSPECIFIED",
+            "ACTIVE",
+            "DECOMMISSIONED",
+            "INACTIVE"
+          ],
+          "description": "Current status of the beacon.\nRequired.",
+          "type": "string"
+        },
+        "beaconName": {
+          "description": "Resource name of this beacon. A beacon name has the format\n\"beacons/N!beaconId\" where the beaconId is the base16 ID broadcast by\nthe beacon and N is a code for the beacon's type. Possible values are\n`3` for Eddystone, `1` for iBeacon, or `5` for AltBeacon.\n\nThis field must be left empty when registering. After reading a beacon,\nclients can use the name for future operations.",
+          "type": "string"
+        },
+        "expectedStability": {
+          "enumDescriptions": [
+            "Do not use this value.",
+            "Not expected to move, for example a store's front door.",
+            "Usually stable but may move rarely, usually within a single place,\nfor example a store display.",
+            "Moves frequently, for example a personal item or food truck.",
+            "Moves continuously in service, for example a bus or train."
+          ],
+          "enum": [
+            "STABILITY_UNSPECIFIED",
+            "STABLE",
+            "PORTABLE",
+            "MOBILE",
+            "ROVING"
+          ],
+          "description": "Expected location stability. This is set when the beacon is registered or\nupdated, not automatically detected in any way.\nOptional.",
+          "type": "string"
+        },
+        "advertisedId": {
+          "description": "The identifier of a beacon as advertised by it. This field must be\npopulated when registering. It may be empty when updating a beacon\nrecord because it is ignored in updates.\n\nWhen registering a beacon that broadcasts Eddystone-EID, this field\nshould contain a \"stable\" Eddystone-UID that identifies the beacon and\nlinks it to its attachments. The stable Eddystone-UID is only used for\nadministering the beacon.",
+          "$ref": "AdvertisedId"
+        },
+        "provisioningKey": {
+          "description": "Some beacons may require a user to provide an authorization key before\nchanging any of its configuration (e.g. broadcast frames, transmit power).\nThis field provides a place to store and control access to that key.\nThis field is populated in responses to `GET /v1beta1/beacons/3!beaconId`\nfrom users with write access to the given beacon. That is to say: If the\nuser is authorized to write the beacon's confidential data in the service,\nthe service considers them authorized to configure the beacon. Note\nthat this key grants nothing on the service, only on the beacon itself.",
+          "format": "byte",
+          "type": "string"
+        },
+        "ephemeralIdRegistration": {
+          "description": "Write-only registration parameters for beacons using Eddystone-EID\n(remotely resolved ephemeral ID) format. This information will not be\npopulated in API responses. When submitting this data, the `advertised_id`\nfield must contain an ID of type Eddystone-UID. Any other ID type will\nresult in an error.",
+          "$ref": "EphemeralIdRegistration"
+        }
+      },
+      "id": "Beacon"
+    },
+    "AdvertisedId": {
+      "properties": {
+        "type": {
+          "enumDescriptions": [
+            "Do not use this value.",
+            "Eddystone, an open beacon format that supports Android and iOS devices\nhttps://github.com/google/eddystone/wiki/Beacon-Specification",
+            "Apple iBeacon compatible beacon",
+            "See http://altbeacon.org and/or https://github.com/AltBeacon/spec.",
+            "Eddystone Ephemeral ID"
+          ],
+          "enum": [
+            "TYPE_UNSPECIFIED",
+            "EDDYSTONE",
+            "IBEACON",
+            "ALTBEACON",
+            "EDDYSTONE_EID"
+          ],
+          "description": "Specifies the identifier type.\nRequired.",
+          "type": "string"
+        },
+        "id": {
+          "description": "The actual beacon identifier, as broadcast by the beacon hardware. Must be\n[base64](http://tools.ietf.org/html/rfc4648#section-4) encoded in HTTP\nrequests, and will be so encoded (with padding) in responses. The base64\nencoding should be of the binary byte-stream and not any textual (such as\nhex) representation thereof.\nRequired.",
+          "format": "byte",
+          "type": "string"
+        }
+      },
+      "id": "AdvertisedId",
+      "description": "Defines a unique identifier of a beacon as broadcast by the device.",
+      "type": "object"
+    },
+    "IndoorLevel": {
+      "properties": {
+        "name": {
+          "description": "The name of this level.",
+          "type": "string"
+        }
+      },
+      "id": "IndoorLevel",
+      "description": "Indoor level, a human-readable string as returned by Google Maps APIs,\nuseful to indicate which floor of a building a beacon is located on.",
+      "type": "object"
+    },
+    "Date": {
+      "properties": {
+        "month": {
+          "description": "Month of year. Must be from 1 to 12.",
+          "format": "int32",
+          "type": "integer"
+        },
+        "year": {
+          "description": "Year of date. Must be from 1 to 9999, or 0 if specifying a date without\na year.",
+          "format": "int32",
+          "type": "integer"
+        },
+        "day": {
+          "description": "Day of month. Must be from 1 to 31 and valid for the year and month, or 0\nif specifying a year/month where the day is not significant.",
+          "format": "int32",
+          "type": "integer"
+        }
+      },
+      "id": "Date",
+      "description": "Represents a whole calendar date, e.g. date of birth. The time of day and\ntime zone are either specified elsewhere or are not significant. The date\nis relative to the Proleptic Gregorian Calendar. The day may be 0 to\nrepresent a year and month where the day is not significant, e.g. credit card\nexpiration date. The year may be 0 to represent a month and day independent\nof year, e.g. anniversary date. Related types are google.type.TimeOfDay\nand `google.protobuf.Timestamp`.",
+      "type": "object"
+    },
+    "ListNamespacesResponse": {
+      "description": "Response to ListNamespacesRequest that contains all the project's namespaces.",
+      "type": "object",
+      "properties": {
+        "namespaces": {
+          "description": "The attachments that corresponded to the request params.",
+          "type": "array",
+          "items": {
+            "$ref": "Namespace"
+          }
+        }
+      },
+      "id": "ListNamespacesResponse"
+    },
+    "ListBeaconsResponse": {
+      "properties": {
+        "nextPageToken": {
+          "description": "An opaque pagination token that the client may provide in their next\nrequest to retrieve the next page of results.",
+          "type": "string"
+        },
+        "beacons": {
+          "description": "The beacons that matched the search criteria.",
+          "type": "array",
+          "items": {
+            "$ref": "Beacon"
+          }
+        },
+        "totalCount": {
+          "description": "Estimate of the total number of beacons matched by the query. Higher\nvalues may be less accurate.",
+          "format": "int64",
+          "type": "string"
+        }
+      },
+      "id": "ListBeaconsResponse",
+      "description": "Response that contains list beacon results and pagination help.",
+      "type": "object"
+    },
+    "Diagnostics": {
+      "description": "Diagnostics for a single beacon.",
+      "type": "object",
+      "properties": {
+        "beaconName": {
+          "description": "Resource name of the beacon. For Eddystone-EID beacons, this may\nbe the beacon's current EID, or the beacon's \"stable\" Eddystone-UID.",
+          "type": "string"
+        },
+        "alerts": {
+          "description": "An unordered list of Alerts that the beacon has.",
+          "type": "array",
+          "items": {
+            "enum": [
+              "ALERT_UNSPECIFIED",
+              "WRONG_LOCATION",
+              "LOW_BATTERY"
+            ],
+            "type": "string"
+          },
+          "enumDescriptions": [
+            "Invalid value. Should never appear.",
+            "The beacon has been reported in a location different than its registered\nlocation. This may indicate that the beacon has been moved. This signal\nis not 100% accurate, but indicates that further investigation is worth\nwhile.",
+            "The battery level for the beacon is low enough that, given the beacon's\ncurrent use, its battery will run out with in the next 60 days. This\nindicates that the battery should be replaced soon."
+          ]
+        },
+        "estimatedLowBatteryDate": {
+          "$ref": "Date",
+          "description": "The date when the battery is expected to be low. If the value is missing\nthen there is no estimate for when the battery will be low.\nThis value is only an estimate, not an exact date."
+        }
+      },
+      "id": "Diagnostics"
+    },
+    "Empty": {
+      "description": "A generic empty message that you can re-use to avoid defining duplicated\nempty messages in your APIs. A typical example is to use it as the request\nor the response type of an API method. For instance:\n\n    service Foo {\n      rpc Bar(google.protobuf.Empty) returns (google.protobuf.Empty);\n    }\n\nThe JSON representation for `Empty` is empty JSON object `{}`.",
+      "type": "object",
+      "properties": {},
+      "id": "Empty"
+    },
+    "GetInfoForObservedBeaconsRequest": {
+      "properties": {
         "observations": {
           "description": "The beacons that the client has encountered.\nAt least one must be given.",
           "type": "array",
@@ -981,166 +1035,112 @@
           }
         }
       },
-      "id": "GetInfoForObservedBeaconsRequest"
+      "id": "GetInfoForObservedBeaconsRequest",
+      "description": "Request for beacon and attachment information about beacons that\na mobile client has encountered \"in the wild\".",
+      "type": "object"
     },
-    "ListNamespacesResponse": {
-      "description": "Response to ListNamespacesRequest that contains all the project's namespaces.",
-      "type": "object",
+    "BeaconAttachment": {
       "properties": {
-        "namespaces": {
-          "description": "The attachments that corresponded to the request params.",
-          "type": "array",
-          "items": {
-            "$ref": "Namespace"
-          }
+        "attachmentName": {
+          "description": "Resource name of this attachment. Attachment names have the format:\n\u003ccode\u003ebeacons/\u003cvar\u003ebeacon_id\u003c/var\u003e/attachments/\u003cvar\u003eattachment_id\u003c/var\u003e\u003c/code\u003e.\nLeave this empty on creation.",
+          "type": "string"
+        },
+        "namespacedType": {
+          "description": "Specifies what kind of attachment this is. Tells a client how to\ninterpret the `data` field. Format is \u003cvar\u003enamespace/type\u003c/var\u003e. Namespace\nprovides type separation between clients. Type describes the type of\n`data`, for use by the client when parsing the `data` field.\nRequired.",
+          "type": "string"
+        },
+        "data": {
+          "description": "An opaque data container for client-provided data. Must be\n[base64](http://tools.ietf.org/html/rfc4648#section-4) encoded in HTTP\nrequests, and will be so encoded (with padding) in responses.\nRequired.",
+          "format": "byte",
+          "type": "string"
+        },
+        "creationTimeMs": {
+          "description": "The UTC time when this attachment was created, in milliseconds since the\nUNIX epoch.",
+          "format": "google-datetime",
+          "type": "string"
         }
       },
-      "id": "ListNamespacesResponse"
+      "id": "BeaconAttachment",
+      "description": "Project-specific data associated with a beacon.",
+      "type": "object"
     },
-    "Date": {
-      "description": "Represents a whole calendar date, e.g. date of birth. The time of day and\ntime zone are either specified elsewhere or are not significant. The date\nis relative to the Proleptic Gregorian Calendar. The day may be 0 to\nrepresent a year and month where the day is not significant, e.g. credit card\nexpiration date. The year may be 0 to represent a month and day independent\nof year, e.g. anniversary date. Related types are google.type.TimeOfDay\nand `google.protobuf.Timestamp`.",
-      "type": "object",
+    "EphemeralIdRegistration": {
       "properties": {
-        "month": {
-          "description": "Month of year. Must be from 1 to 12.",
-          "type": "integer",
-          "format": "int32"
+        "initialClockValue": {
+          "description": "The initial clock value of the beacon. The beacon's clock must have\nbegun counting at this value immediately prior to transmitting this\nvalue to the resolving service. Significant delay in transmitting this\nvalue to the service risks registration or resolution failures. If a\nvalue is not provided, the default is zero.",
+          "format": "uint64",
+          "type": "string"
         },
-        "year": {
-          "description": "Year of date. Must be from 1 to 9999, or 0 if specifying a date without\na year.",
-          "type": "integer",
-          "format": "int32"
+        "beaconEcdhPublicKey": {
+          "description": "The beacon's public key used for the Elliptic curve Diffie-Hellman\nkey exchange. When this field is populated, `service_ecdh_public_key`\nmust also be populated, and `beacon_identity_key` must not be.",
+          "format": "byte",
+          "type": "string"
         },
-        "day": {
-          "description": "Day of month. Must be from 1 to 31 and valid for the year and month, or 0\nif specifying a year/month where the day is not significant.",
-          "type": "integer",
-          "format": "int32"
+        "rotationPeriodExponent": {
+          "description": "Indicates the nominal period between each rotation of the beacon's\nephemeral ID. \"Nominal\" because the beacon should randomize the\nactual interval. See [the spec at github](https://github.com/google/eddystone/tree/master/eddystone-eid)\nfor details. This value corresponds to a power-of-two scaler on the\nbeacon's clock: when the scaler value is K, the beacon will begin\nbroadcasting a new ephemeral ID on average every 2^K seconds.",
+          "format": "uint32",
+          "type": "integer"
+        },
+        "serviceEcdhPublicKey": {
+          "description": "The service's public key used for the Elliptic curve Diffie-Hellman\nkey exchange. When this field is populated, `beacon_ecdh_public_key`\nmust also be populated, and `beacon_identity_key` must not be.",
+          "format": "byte",
+          "type": "string"
+        },
+        "beaconIdentityKey": {
+          "description": "The private key of the beacon. If this field is populated,\n`beacon_ecdh_public_key` and `service_ecdh_public_key` must not be\npopulated.",
+          "format": "byte",
+          "type": "string"
+        },
+        "initialEid": {
+          "description": "An initial ephemeral ID calculated using the clock value submitted as\n`initial_clock_value`, and the secret key generated by the\nDiffie-Hellman key exchange using `service_ecdh_public_key` and\n`service_ecdh_public_key`. This initial EID value will be used by the\nservice to confirm that the key exchange process was successful.",
+          "format": "byte",
+          "type": "string"
         }
       },
-      "id": "Date"
+      "id": "EphemeralIdRegistration",
+      "description": "Write-only registration parameters for beacons using Eddystone-EID format.\nTwo ways of securely registering an Eddystone-EID beacon with the service\nare supported:\n\n1. Perform an ECDH key exchange via this API, including a previous call\n   to `GET /v1beta1/eidparams`. In this case the fields\n   `beacon_ecdh_public_key` and `service_ecdh_public_key` should be\n   populated and `beacon_identity_key` should not be populated. This\n   method ensures that only the two parties in the ECDH key exchange can\n   compute the identity key, which becomes a secret between them.\n2. Derive or obtain the beacon's identity key via other secure means\n   (perhaps an ECDH key exchange between the beacon and a mobile device\n   or any other secure method), and then submit the resulting identity key\n   to the service. In this case `beacon_identity_key` field should be\n   populated, and neither of `beacon_ecdh_public_key` nor\n   `service_ecdh_public_key` fields should be. The security of this method\n   depends on how securely the parties involved (in particular the\n   bluetooth client) handle the identity key, and obviously on how\n   securely the identity key was generated.\n\nSee [the Eddystone specification](https://github.com/google/eddystone/tree/master/eddystone-eid) at GitHub.",
+      "type": "object"
     },
     "LatLng": {
-      "description": "An object representing a latitude/longitude pair. This is expressed as a pair\nof doubles representing degrees latitude and degrees longitude. Unless\nspecified otherwise, this must conform to the\n\u003ca href=\"http://www.unoosa.org/pdf/icg/2012/template/WGS_84.pdf\"\u003eWGS84\nstandard\u003c/a\u003e. Values must be within normalized ranges.\n\nExample of normalization code in Python:\n\n    def NormalizeLongitude(longitude):\n      \"\"\"Wraps decimal degrees longitude to [-180.0, 180.0].\"\"\"\n      q, r = divmod(longitude, 360.0)\n      if r \u003e 180.0 or (r == 180.0 and q \u003c= -1.0):\n        return r - 360.0\n      return r\n\n    def NormalizeLatLng(latitude, longitude):\n      \"\"\"Wraps decimal degrees latitude and longitude to\n      [-90.0, 90.0] and [-180.0, 180.0], respectively.\"\"\"\n      r = latitude % 360.0\n      if r \u003c= 90.0:\n        return r, NormalizeLongitude(longitude)\n      elif r \u003e= 270.0:\n        return r - 360, NormalizeLongitude(longitude)\n      else:\n        return 180 - r, NormalizeLongitude(longitude + 180.0)\n\n    assert 180.0 == NormalizeLongitude(180.0)\n    assert -180.0 == NormalizeLongitude(-180.0)\n    assert -179.0 == NormalizeLongitude(181.0)\n    assert (0.0, 0.0) == NormalizeLatLng(360.0, 0.0)\n    assert (0.0, 0.0) == NormalizeLatLng(-360.0, 0.0)\n    assert (85.0, 180.0) == NormalizeLatLng(95.0, 0.0)\n    assert (-85.0, -170.0) == NormalizeLatLng(-95.0, 10.0)\n    assert (90.0, 10.0) == NormalizeLatLng(90.0, 10.0)\n    assert (-90.0, -10.0) == NormalizeLatLng(-90.0, -10.0)\n    assert (0.0, -170.0) == NormalizeLatLng(-180.0, 10.0)\n    assert (0.0, -170.0) == NormalizeLatLng(180.0, 10.0)\n    assert (-90.0, 10.0) == NormalizeLatLng(270.0, 10.0)\n    assert (90.0, 10.0) == NormalizeLatLng(-270.0, 10.0)\n\nThe code in logs/storage/validator/logs_validator_traits.cc treats this type\nas if it were annotated as ST_LOCATION.",
-      "type": "object",
       "properties": {
-        "latitude": {
-          "description": "The latitude in degrees. It must be in the range [-90.0, +90.0].",
-          "type": "number",
-          "format": "double"
-        },
         "longitude": {
           "description": "The longitude in degrees. It must be in the range [-180.0, +180.0].",
-          "type": "number",
-          "format": "double"
+          "format": "double",
+          "type": "number"
+        },
+        "latitude": {
+          "description": "The latitude in degrees. It must be in the range [-90.0, +90.0].",
+          "format": "double",
+          "type": "number"
         }
       },
-      "id": "LatLng"
+      "id": "LatLng",
+      "description": "An object representing a latitude/longitude pair. This is expressed as a pair\nof doubles representing degrees latitude and degrees longitude. Unless\nspecified otherwise, this must conform to the\n\u003ca href=\"http://www.unoosa.org/pdf/icg/2012/template/WGS_84.pdf\"\u003eWGS84\nstandard\u003c/a\u003e. Values must be within normalized ranges.\n\nExample of normalization code in Python:\n\n    def NormalizeLongitude(longitude):\n      \"\"\"Wraps decimal degrees longitude to [-180.0, 180.0].\"\"\"\n      q, r = divmod(longitude, 360.0)\n      if r \u003e 180.0 or (r == 180.0 and q \u003c= -1.0):\n        return r - 360.0\n      return r\n\n    def NormalizeLatLng(latitude, longitude):\n      \"\"\"Wraps decimal degrees latitude and longitude to\n      [-90.0, 90.0] and [-180.0, 180.0], respectively.\"\"\"\n      r = latitude % 360.0\n      if r \u003c= 90.0:\n        return r, NormalizeLongitude(longitude)\n      elif r \u003e= 270.0:\n        return r - 360, NormalizeLongitude(longitude)\n      else:\n        return 180 - r, NormalizeLongitude(longitude + 180.0)\n\n    assert 180.0 == NormalizeLongitude(180.0)\n    assert -180.0 == NormalizeLongitude(-180.0)\n    assert -179.0 == NormalizeLongitude(181.0)\n    assert (0.0, 0.0) == NormalizeLatLng(360.0, 0.0)\n    assert (0.0, 0.0) == NormalizeLatLng(-360.0, 0.0)\n    assert (85.0, 180.0) == NormalizeLatLng(95.0, 0.0)\n    assert (-85.0, -170.0) == NormalizeLatLng(-95.0, 10.0)\n    assert (90.0, 10.0) == NormalizeLatLng(90.0, 10.0)\n    assert (-90.0, -10.0) == NormalizeLatLng(-90.0, -10.0)\n    assert (0.0, -170.0) == NormalizeLatLng(-180.0, 10.0)\n    assert (0.0, -170.0) == NormalizeLatLng(180.0, 10.0)\n    assert (-90.0, 10.0) == NormalizeLatLng(270.0, 10.0)\n    assert (90.0, 10.0) == NormalizeLatLng(-270.0, 10.0)\n\nThe code in logs/storage/validator/logs_validator_traits.cc treats this type\nas if it were annotated as ST_LOCATION.",
+      "type": "object"
     }
   },
-  "revision": "20170220",
-  "basePath": "",
   "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",
-  "discoveryVersion": "v1",
+  "protocol": "rest",
+  "version": "v1beta1",
   "baseUrl": "https://proximitybeacon.googleapis.com/",
-  "name": "proximitybeacon",
-  "parameters": {
-    "access_token": {
-      "description": "OAuth access token.",
-      "type": "string",
-      "location": "query"
-    },
-    "prettyPrint": {
-      "description": "Returns response with indentations and line breaks.",
-      "default": "true",
-      "type": "boolean",
-      "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"
-    },
-    "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"
-    },
-    "pp": {
-      "description": "Pretty-print response.",
-      "default": "true",
-      "type": "boolean",
-      "location": "query"
-    },
-    "fields": {
-      "description": "Selector specifying which fields to include in a partial response.",
-      "type": "string",
-      "location": "query"
-    },
-    "alt": {
-      "description": "Data format for response.",
-      "location": "query",
-      "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"
-      ],
-      "type": "string"
-    },
-    "$.xgafv": {
-      "description": "V1 error format.",
-      "enum": [
-        "1",
-        "2"
-      ],
-      "enumDescriptions": [
-        "v1 error format",
-        "v2 error format"
-      ],
-      "type": "string",
-      "location": "query"
-    },
-    "callback": {
-      "description": "JSONP",
-      "type": "string",
-      "location": "query"
-    },
-    "oauth_token": {
-      "description": "OAuth 2.0 token for the current user.",
-      "type": "string",
-      "location": "query"
-    },
-    "uploadType": {
-      "description": "Legacy upload protocol for media (e.g. \"media\", \"multipart\").",
-      "type": "string",
-      "location": "query"
-    },
-    "bearer_token": {
-      "description": "OAuth bearer token.",
-      "type": "string",
-      "location": "query"
-    },
-    "upload_protocol": {
-      "description": "Upload protocol for media (e.g. \"raw\", \"multipart\").",
-      "type": "string",
-      "location": "query"
+  "auth": {
+    "oauth2": {
+      "scopes": {
+        "https://www.googleapis.com/auth/userlocation.beacon.registry": {
+          "description": "View and modify your beacons"
+        }
+      }
     }
   },
-  "documentationLink": "https://developers.google.com/beacons/proximity/",
-  "ownerDomain": "google.com",
-  "batchPath": "batch",
   "servicePath": "",
-  "ownerName": "Google",
-  "version": "v1beta1",
+  "description": "Registers, manages, indexes, and searches beacons.",
+  "kind": "discovery#restDescription",
   "rootUrl": "https://proximitybeacon.googleapis.com/",
-  "kind": "discovery#restDescription"
+  "basePath": "",
+  "ownerDomain": "google.com",
+  "name": "proximitybeacon",
+  "batchPath": "batch"
 }
diff --git a/proximitybeacon/v1beta1/proximitybeacon-gen.go b/proximitybeacon/v1beta1/proximitybeacon-gen.go
index bc1e863..67df856 100644
--- a/proximitybeacon/v1beta1/proximitybeacon-gen.go
+++ b/proximitybeacon/v1beta1/proximitybeacon-gen.go
@@ -64,10 +64,9 @@
 }
 
 type Service struct {
-	client                    *http.Client
-	BasePath                  string // API endpoint base URL
-	UserAgent                 string // optional additional User-Agent fragment
-	GoogleClientHeaderElement string // client header fragment, for Google use only
+	client    *http.Client
+	BasePath  string // API endpoint base URL
+	UserAgent string // optional additional User-Agent fragment
 
 	Beaconinfo *BeaconinfoService
 
@@ -85,10 +84,6 @@
 	return googleapi.UserAgent + " " + s.UserAgent
 }
 
-func (s *Service) clientHeader() string {
-	return gensupport.GoogleClientHeader("20170210", s.GoogleClientHeaderElement)
-}
-
 func NewBeaconinfoService(s *Service) *BeaconinfoService {
 	rs := &BeaconinfoService{s: s}
 	return rs
@@ -1314,7 +1309,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	var body io.Reader = nil
 	body, err := googleapi.WithoutDataWrapper.JSONReader(c.getinfoforobservedbeaconsrequest)
 	if err != nil {
@@ -1455,7 +1449,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	var body io.Reader = nil
 	c.urlParams_.Set("alt", alt)
 	urls := googleapi.ResolveRelative(c.s.BasePath, "v1beta1/{+beaconName}:activate")
@@ -1609,7 +1602,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	var body io.Reader = nil
 	c.urlParams_.Set("alt", alt)
 	urls := googleapi.ResolveRelative(c.s.BasePath, "v1beta1/{+beaconName}:deactivate")
@@ -1762,7 +1754,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	var body io.Reader = nil
 	c.urlParams_.Set("alt", alt)
 	urls := googleapi.ResolveRelative(c.s.BasePath, "v1beta1/{+beaconName}:decommission")
@@ -1911,7 +1902,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	var body io.Reader = nil
 	c.urlParams_.Set("alt", alt)
 	urls := googleapi.ResolveRelative(c.s.BasePath, "v1beta1/{+beaconName}")
@@ -2080,7 +2070,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	if c.ifNoneMatch_ != "" {
 		reqHeaders.Set("If-None-Match", c.ifNoneMatch_)
 	}
@@ -2350,7 +2339,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	if c.ifNoneMatch_ != "" {
 		reqHeaders.Set("If-None-Match", c.ifNoneMatch_)
 	}
@@ -2528,7 +2516,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	var body io.Reader = nil
 	body, err := googleapi.WithoutDataWrapper.JSONReader(c.beacon)
 	if err != nil {
@@ -2684,7 +2671,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	var body io.Reader = nil
 	body, err := googleapi.WithoutDataWrapper.JSONReader(c.beacon)
 	if err != nil {
@@ -2862,7 +2848,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	var body io.Reader = nil
 	c.urlParams_.Set("alt", alt)
 	urls := googleapi.ResolveRelative(c.s.BasePath, "v1beta1/{+beaconName}/attachments:batchDelete")
@@ -3031,7 +3016,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	var body io.Reader = nil
 	body, err := googleapi.WithoutDataWrapper.JSONReader(c.beaconattachment)
 	if err != nil {
@@ -3192,7 +3176,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	var body io.Reader = nil
 	c.urlParams_.Set("alt", alt)
 	urls := googleapi.ResolveRelative(c.s.BasePath, "v1beta1/{+attachmentName}")
@@ -3372,7 +3355,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	if c.ifNoneMatch_ != "" {
 		reqHeaders.Set("If-None-Match", c.ifNoneMatch_)
 	}
@@ -3571,7 +3553,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	if c.ifNoneMatch_ != "" {
 		reqHeaders.Set("If-None-Match", c.ifNoneMatch_)
 	}
@@ -3774,7 +3755,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	if c.ifNoneMatch_ != "" {
 		reqHeaders.Set("If-None-Match", c.ifNoneMatch_)
 	}
@@ -3910,7 +3890,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	var body io.Reader = nil
 	body, err := googleapi.WithoutDataWrapper.JSONReader(c.namespace)
 	if err != nil {
@@ -4070,7 +4049,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	if c.ifNoneMatch_ != "" {
 		reqHeaders.Set("If-None-Match", c.ifNoneMatch_)
 	}
diff --git a/pubsub/v1/pubsub-api.json b/pubsub/v1/pubsub-api.json
index acd6989..283543a 100644
--- a/pubsub/v1/pubsub-api.json
+++ b/pubsub/v1/pubsub-api.json
@@ -1,46 +1,12 @@
 {
-  "name": "pubsub",
-  "batchPath": "batch",
-  "revision": "20170214",
-  "documentationLink": "https://cloud.google.com/pubsub/docs",
-  "id": "pubsub:v1",
   "title": "Google Cloud Pub/Sub API",
-  "ownerName": "Google",
   "discoveryVersion": "v1",
+  "ownerName": "Google",
   "resources": {
     "projects": {
       "resources": {
         "subscriptions": {
           "methods": {
-            "testIamPermissions": {
-              "response": {
-                "$ref": "TestIamPermissionsResponse"
-              },
-              "parameterOrder": [
-                "resource"
-              ],
-              "httpMethod": "POST",
-              "scopes": [
-                "https://www.googleapis.com/auth/cloud-platform",
-                "https://www.googleapis.com/auth/pubsub"
-              ],
-              "parameters": {
-                "resource": {
-                  "pattern": "^projects/[^/]+/subscriptions/[^/]+$",
-                  "location": "path",
-                  "description": "REQUIRED: The resource for which the policy detail is being requested.\n`resource` is usually specified as a path. For example, a Project\nresource is specified as `projects/{project}`.",
-                  "required": true,
-                  "type": "string"
-                }
-              },
-              "flatPath": "v1/projects/{projectsId}/subscriptions/{subscriptionsId}:testIamPermissions",
-              "path": "v1/{+resource}:testIamPermissions",
-              "id": "pubsub.projects.subscriptions.testIamPermissions",
-              "description": "Returns permissions that a caller has on the specified resource.\nIf the resource does not exist, this will return an empty set of\npermissions, not a NOT_FOUND error.\n\nNote: This operation is designed to be used for building permission-aware\nUIs and command-line tools, not for authorization checking. This operation\nmay \"fail open\" without warning.",
-              "request": {
-                "$ref": "TestIamPermissionsRequest"
-              }
-            },
             "modifyPushConfig": {
               "request": {
                 "$ref": "ModifyPushConfigRequest"
@@ -55,11 +21,11 @@
               "httpMethod": "POST",
               "parameters": {
                 "subscription": {
+                  "required": true,
+                  "type": "string",
                   "pattern": "^projects/[^/]+/subscriptions/[^/]+$",
                   "location": "path",
-                  "description": "The name of the subscription.\nFormat is `projects/{project}/subscriptions/{sub}`.",
-                  "required": true,
-                  "type": "string"
+                  "description": "The name of the subscription.\nFormat is `projects/{project}/subscriptions/{sub}`."
                 }
               },
               "scopes": [
@@ -70,9 +36,33 @@
               "path": "v1/{+subscription}:modifyPushConfig",
               "id": "pubsub.projects.subscriptions.modifyPushConfig"
             },
+            "delete": {
+              "httpMethod": "DELETE",
+              "parameterOrder": [
+                "subscription"
+              ],
+              "response": {
+                "$ref": "Empty"
+              },
+              "scopes": [
+                "https://www.googleapis.com/auth/cloud-platform",
+                "https://www.googleapis.com/auth/pubsub"
+              ],
+              "parameters": {
+                "subscription": {
+                  "required": true,
+                  "type": "string",
+                  "pattern": "^projects/[^/]+/subscriptions/[^/]+$",
+                  "location": "path",
+                  "description": "The subscription to delete.\nFormat is `projects/{project}/subscriptions/{sub}`."
+                }
+              },
+              "flatPath": "v1/projects/{projectsId}/subscriptions/{subscriptionsId}",
+              "id": "pubsub.projects.subscriptions.delete",
+              "path": "v1/{+subscription}",
+              "description": "Deletes an existing subscription. All messages retained in the subscription\nare immediately dropped. Calls to `Pull` after deletion will return\n`NOT_FOUND`. After a subscription is deleted, a new one may be created with\nthe same name, but the new one has no association with the old\nsubscription or its topic unless the same topic is specified."
+            },
             "pull": {
-              "path": "v1/{+subscription}:pull",
-              "id": "pubsub.projects.subscriptions.pull",
               "description": "Pulls messages from the server. Returns an empty list if there are no\nmessages available in the backlog. The server may return `UNAVAILABLE` if\nthere are too many concurrent pull requests pending for the given\nsubscription.",
               "request": {
                 "$ref": "PullRequest"
@@ -90,83 +80,62 @@
               ],
               "parameters": {
                 "subscription": {
-                  "description": "The subscription from which messages should be pulled.\nFormat is `projects/{project}/subscriptions/{sub}`.",
                   "required": true,
                   "type": "string",
                   "pattern": "^projects/[^/]+/subscriptions/[^/]+$",
-                  "location": "path"
+                  "location": "path",
+                  "description": "The subscription from which messages should be pulled.\nFormat is `projects/{project}/subscriptions/{sub}`."
                 }
               },
-              "flatPath": "v1/projects/{projectsId}/subscriptions/{subscriptionsId}:pull"
-            },
-            "delete": {
-              "scopes": [
-                "https://www.googleapis.com/auth/cloud-platform",
-                "https://www.googleapis.com/auth/pubsub"
-              ],
-              "parameters": {
-                "subscription": {
-                  "description": "The subscription to delete.\nFormat is `projects/{project}/subscriptions/{sub}`.",
-                  "required": true,
-                  "type": "string",
-                  "pattern": "^projects/[^/]+/subscriptions/[^/]+$",
-                  "location": "path"
-                }
-              },
-              "flatPath": "v1/projects/{projectsId}/subscriptions/{subscriptionsId}",
-              "path": "v1/{+subscription}",
-              "id": "pubsub.projects.subscriptions.delete",
-              "description": "Deletes an existing subscription. All messages retained in the subscription\nare immediately dropped. Calls to `Pull` after deletion will return\n`NOT_FOUND`. After a subscription is deleted, a new one may be created with\nthe same name, but the new one has no association with the old\nsubscription or its topic unless the same topic is specified.",
-              "response": {
-                "$ref": "Empty"
-              },
-              "parameterOrder": [
-                "subscription"
-              ],
-              "httpMethod": "DELETE"
+              "flatPath": "v1/projects/{projectsId}/subscriptions/{subscriptionsId}:pull",
+              "path": "v1/{+subscription}:pull",
+              "id": "pubsub.projects.subscriptions.pull"
             },
             "list": {
-              "path": "v1/{+project}/subscriptions",
-              "id": "pubsub.projects.subscriptions.list",
               "description": "Lists matching subscriptions.",
               "response": {
                 "$ref": "ListSubscriptionsResponse"
               },
-              "httpMethod": "GET",
               "parameterOrder": [
                 "project"
               ],
+              "httpMethod": "GET",
               "parameters": {
                 "pageToken": {
-                  "description": "The value returned by the last `ListSubscriptionsResponse`; indicates that\nthis is a continuation of a prior `ListSubscriptions` call, and that the\nsystem should return the next page of data.",
                   "type": "string",
-                  "location": "query"
+                  "location": "query",
+                  "description": "The value returned by the last `ListSubscriptionsResponse`; indicates that\nthis is a continuation of a prior `ListSubscriptions` call, and that the\nsystem should return the next page of data."
                 },
                 "pageSize": {
+                  "location": "query",
                   "description": "Maximum number of subscriptions to return.",
                   "format": "int32",
-                  "type": "integer",
-                  "location": "query"
+                  "type": "integer"
                 },
                 "project": {
-                  "pattern": "^projects/[^/]+$",
                   "location": "path",
                   "description": "The name of the cloud project that subscriptions belong to.\nFormat is `projects/{project}`.",
                   "required": true,
-                  "type": "string"
+                  "type": "string",
+                  "pattern": "^projects/[^/]+$"
                 }
               },
               "scopes": [
                 "https://www.googleapis.com/auth/cloud-platform",
                 "https://www.googleapis.com/auth/pubsub"
               ],
-              "flatPath": "v1/projects/{projectsId}/subscriptions"
+              "flatPath": "v1/projects/{projectsId}/subscriptions",
+              "path": "v1/{+project}/subscriptions",
+              "id": "pubsub.projects.subscriptions.list"
             },
             "setIamPolicy": {
+              "flatPath": "v1/projects/{projectsId}/subscriptions/{subscriptionsId}:setIamPolicy",
+              "id": "pubsub.projects.subscriptions.setIamPolicy",
+              "path": "v1/{+resource}:setIamPolicy",
+              "description": "Sets the access control policy on the specified resource. Replaces any\nexisting policy.",
               "request": {
                 "$ref": "SetIamPolicyRequest"
               },
-              "description": "Sets the access control policy on the specified resource. Replaces any\nexisting policy.",
               "httpMethod": "POST",
               "parameterOrder": [
                 "resource"
@@ -174,124 +143,76 @@
               "response": {
                 "$ref": "Policy"
               },
-              "parameters": {
-                "resource": {
-                  "pattern": "^projects/[^/]+/subscriptions/[^/]+$",
-                  "location": "path",
-                  "description": "REQUIRED: The resource for which the policy is being specified.\n`resource` is usually specified as a path. For example, a Project\nresource is specified as `projects/{project}`.",
-                  "required": true,
-                  "type": "string"
-                }
-              },
               "scopes": [
                 "https://www.googleapis.com/auth/cloud-platform",
                 "https://www.googleapis.com/auth/pubsub"
               ],
-              "flatPath": "v1/projects/{projectsId}/subscriptions/{subscriptionsId}:setIamPolicy",
-              "id": "pubsub.projects.subscriptions.setIamPolicy",
-              "path": "v1/{+resource}:setIamPolicy"
+              "parameters": {
+                "resource": {
+                  "location": "path",
+                  "description": "REQUIRED: The resource for which the policy is being specified.\nSee the operation documentation for the appropriate value for this field.",
+                  "required": true,
+                  "type": "string",
+                  "pattern": "^projects/[^/]+/subscriptions/[^/]+$"
+                }
+              }
             },
             "create": {
-              "id": "pubsub.projects.subscriptions.create",
+              "flatPath": "v1/projects/{projectsId}/subscriptions/{subscriptionsId}",
               "path": "v1/{+name}",
-              "description": "Creates a subscription to a given topic.\nIf the subscription already exists, returns `ALREADY_EXISTS`.\nIf the corresponding topic doesn't exist, returns `NOT_FOUND`.\n\nIf the name is not provided in the request, the server will assign a random\nname for this subscription on the same project as the topic, conforming\nto the\n[resource name format](https://cloud.google.com/pubsub/docs/overview#names).\nThe generated name is populated in the returned Subscription object.\nNote that for REST API requests, you must specify a name in the request.",
+              "id": "pubsub.projects.subscriptions.create",
               "request": {
                 "$ref": "Subscription"
               },
-              "httpMethod": "PUT",
+              "description": "Creates a subscription to a given topic.\nIf the subscription already exists, returns `ALREADY_EXISTS`.\nIf the corresponding topic doesn't exist, returns `NOT_FOUND`.\n\nIf the name is not provided in the request, the server will assign a random\nname for this subscription on the same project as the topic, conforming\nto the\n[resource name format](https://cloud.google.com/pubsub/docs/overview#names).\nThe generated name is populated in the returned Subscription object.\nNote that for REST API requests, you must specify a name in the request.",
+              "response": {
+                "$ref": "Subscription"
+              },
               "parameterOrder": [
                 "name"
               ],
-              "response": {
-                "$ref": "Subscription"
+              "httpMethod": "PUT",
+              "parameters": {
+                "name": {
+                  "required": true,
+                  "type": "string",
+                  "pattern": "^projects/[^/]+/subscriptions/[^/]+$",
+                  "location": "path",
+                  "description": "The name of the subscription. It must have the format\n`\"projects/{project}/subscriptions/{subscription}\"`. `{subscription}` must\nstart with a letter, and contain only letters (`[A-Za-z]`), numbers\n(`[0-9]`), dashes (`-`), underscores (`_`), periods (`.`), tildes (`~`),\nplus (`+`) or percent signs (`%`). It must be between 3 and 255 characters\nin length, and it must not start with `\"goog\"`."
+                }
               },
               "scopes": [
                 "https://www.googleapis.com/auth/cloud-platform",
                 "https://www.googleapis.com/auth/pubsub"
-              ],
-              "parameters": {
-                "name": {
-                  "description": "The name of the subscription. It must have the format\n`\"projects/{project}/subscriptions/{subscription}\"`. `{subscription}` must\nstart with a letter, and contain only letters (`[A-Za-z]`), numbers\n(`[0-9]`), dashes (`-`), underscores (`_`), periods (`.`), tildes (`~`),\nplus (`+`) or percent signs (`%`). It must be between 3 and 255 characters\nin length, and it must not start with `\"goog\"`.",
-                  "required": true,
-                  "type": "string",
-                  "pattern": "^projects/[^/]+/subscriptions/[^/]+$",
-                  "location": "path"
-                }
-              },
-              "flatPath": "v1/projects/{projectsId}/subscriptions/{subscriptionsId}"
+              ]
             },
             "getIamPolicy": {
-              "description": "Gets the access control policy for a resource.\nReturns an empty policy if the resource exists and does not have a policy\nset.",
+              "httpMethod": "GET",
               "parameterOrder": [
                 "resource"
               ],
               "response": {
                 "$ref": "Policy"
               },
-              "httpMethod": "GET",
+              "scopes": [
+                "https://www.googleapis.com/auth/cloud-platform",
+                "https://www.googleapis.com/auth/pubsub"
+              ],
               "parameters": {
                 "resource": {
-                  "description": "REQUIRED: The resource for which the policy is being requested.\n`resource` is usually specified as a path. For example, a Project\nresource is specified as `projects/{project}`.",
+                  "location": "path",
+                  "description": "REQUIRED: The resource for which the policy is being requested.\nSee the operation documentation for the appropriate value for this field.",
                   "required": true,
                   "type": "string",
-                  "pattern": "^projects/[^/]+/subscriptions/[^/]+$",
-                  "location": "path"
+                  "pattern": "^projects/[^/]+/subscriptions/[^/]+$"
                 }
               },
-              "scopes": [
-                "https://www.googleapis.com/auth/cloud-platform",
-                "https://www.googleapis.com/auth/pubsub"
-              ],
               "flatPath": "v1/projects/{projectsId}/subscriptions/{subscriptionsId}:getIamPolicy",
+              "id": "pubsub.projects.subscriptions.getIamPolicy",
               "path": "v1/{+resource}:getIamPolicy",
-              "id": "pubsub.projects.subscriptions.getIamPolicy"
-            },
-            "modifyAckDeadline": {
-              "id": "pubsub.projects.subscriptions.modifyAckDeadline",
-              "path": "v1/{+subscription}:modifyAckDeadline",
-              "request": {
-                "$ref": "ModifyAckDeadlineRequest"
-              },
-              "description": "Modifies the ack deadline for a specific message. This method is useful\nto indicate that more time is needed to process a message by the\nsubscriber, or to make the message available for redelivery if the\nprocessing was interrupted. Note that this does not modify the\nsubscription-level `ackDeadlineSeconds` used for subsequent messages.",
-              "httpMethod": "POST",
-              "parameterOrder": [
-                "subscription"
-              ],
-              "response": {
-                "$ref": "Empty"
-              },
-              "parameters": {
-                "subscription": {
-                  "description": "The name of the subscription.\nFormat is `projects/{project}/subscriptions/{sub}`.",
-                  "required": true,
-                  "type": "string",
-                  "pattern": "^projects/[^/]+/subscriptions/[^/]+$",
-                  "location": "path"
-                }
-              },
-              "scopes": [
-                "https://www.googleapis.com/auth/cloud-platform",
-                "https://www.googleapis.com/auth/pubsub"
-              ],
-              "flatPath": "v1/projects/{projectsId}/subscriptions/{subscriptionsId}:modifyAckDeadline"
+              "description": "Gets the access control policy for a resource.\nReturns an empty policy if the resource exists and does not have a policy\nset."
             },
             "acknowledge": {
-              "scopes": [
-                "https://www.googleapis.com/auth/cloud-platform",
-                "https://www.googleapis.com/auth/pubsub"
-              ],
-              "parameters": {
-                "subscription": {
-                  "pattern": "^projects/[^/]+/subscriptions/[^/]+$",
-                  "location": "path",
-                  "description": "The subscription whose message is being acknowledged.\nFormat is `projects/{project}/subscriptions/{sub}`.",
-                  "required": true,
-                  "type": "string"
-                }
-              },
-              "flatPath": "v1/projects/{projectsId}/subscriptions/{subscriptionsId}:acknowledge",
-              "id": "pubsub.projects.subscriptions.acknowledge",
-              "path": "v1/{+subscription}:acknowledge",
               "description": "Acknowledges the messages associated with the `ack_ids` in the\n`AcknowledgeRequest`. The Pub/Sub system can remove the relevant messages\nfrom the subscription.\n\nAcknowledging a message whose ack deadline has expired may succeed,\nbut such a message may be redelivered later. Acknowledging a message more\nthan once will not result in an error.",
               "request": {
                 "$ref": "AcknowledgeRequest"
@@ -302,92 +223,78 @@
               ],
               "response": {
                 "$ref": "Empty"
-              }
+              },
+              "scopes": [
+                "https://www.googleapis.com/auth/cloud-platform",
+                "https://www.googleapis.com/auth/pubsub"
+              ],
+              "parameters": {
+                "subscription": {
+                  "required": true,
+                  "type": "string",
+                  "pattern": "^projects/[^/]+/subscriptions/[^/]+$",
+                  "location": "path",
+                  "description": "The subscription whose message is being acknowledged.\nFormat is `projects/{project}/subscriptions/{sub}`."
+                }
+              },
+              "flatPath": "v1/projects/{projectsId}/subscriptions/{subscriptionsId}:acknowledge",
+              "id": "pubsub.projects.subscriptions.acknowledge",
+              "path": "v1/{+subscription}:acknowledge"
+            },
+            "modifyAckDeadline": {
+              "httpMethod": "POST",
+              "parameterOrder": [
+                "subscription"
+              ],
+              "response": {
+                "$ref": "Empty"
+              },
+              "parameters": {
+                "subscription": {
+                  "required": true,
+                  "type": "string",
+                  "pattern": "^projects/[^/]+/subscriptions/[^/]+$",
+                  "location": "path",
+                  "description": "The name of the subscription.\nFormat is `projects/{project}/subscriptions/{sub}`."
+                }
+              },
+              "scopes": [
+                "https://www.googleapis.com/auth/cloud-platform",
+                "https://www.googleapis.com/auth/pubsub"
+              ],
+              "flatPath": "v1/projects/{projectsId}/subscriptions/{subscriptionsId}:modifyAckDeadline",
+              "id": "pubsub.projects.subscriptions.modifyAckDeadline",
+              "path": "v1/{+subscription}:modifyAckDeadline",
+              "request": {
+                "$ref": "ModifyAckDeadlineRequest"
+              },
+              "description": "Modifies the ack deadline for a specific message. This method is useful\nto indicate that more time is needed to process a message by the\nsubscriber, or to make the message available for redelivery if the\nprocessing was interrupted. Note that this does not modify the\nsubscription-level `ackDeadlineSeconds` used for subsequent messages."
             },
             "get": {
-              "httpMethod": "GET",
               "response": {
                 "$ref": "Subscription"
               },
               "parameterOrder": [
                 "subscription"
               ],
-              "parameters": {
-                "subscription": {
-                  "description": "The name of the subscription to get.\nFormat is `projects/{project}/subscriptions/{sub}`.",
-                  "required": true,
-                  "type": "string",
-                  "pattern": "^projects/[^/]+/subscriptions/[^/]+$",
-                  "location": "path"
-                }
-              },
-              "scopes": [
-                "https://www.googleapis.com/auth/cloud-platform",
-                "https://www.googleapis.com/auth/pubsub"
-              ],
-              "flatPath": "v1/projects/{projectsId}/subscriptions/{subscriptionsId}",
-              "id": "pubsub.projects.subscriptions.get",
-              "path": "v1/{+subscription}",
-              "description": "Gets the configuration details of a subscription."
-            }
-          }
-        },
-        "snapshots": {
-          "methods": {
-            "getIamPolicy": {
-              "path": "v1/{+resource}:getIamPolicy",
-              "id": "pubsub.projects.snapshots.getIamPolicy",
-              "description": "Gets the access control policy for a resource.\nReturns an empty policy if the resource exists and does not have a policy\nset.",
-              "response": {
-                "$ref": "Policy"
-              },
-              "parameterOrder": [
-                "resource"
-              ],
               "httpMethod": "GET",
               "scopes": [
                 "https://www.googleapis.com/auth/cloud-platform",
                 "https://www.googleapis.com/auth/pubsub"
               ],
               "parameters": {
-                "resource": {
-                  "pattern": "^projects/[^/]+/snapshots/[^/]+$",
-                  "location": "path",
-                  "description": "REQUIRED: The resource for which the policy is being requested.\n`resource` is usually specified as a path. For example, a Project\nresource is specified as `projects/{project}`.",
-                  "required": true,
-                  "type": "string"
-                }
-              },
-              "flatPath": "v1/projects/{projectsId}/snapshots/{snapshotsId}:getIamPolicy"
-            },
-            "setIamPolicy": {
-              "httpMethod": "POST",
-              "parameterOrder": [
-                "resource"
-              ],
-              "response": {
-                "$ref": "Policy"
-              },
-              "scopes": [
-                "https://www.googleapis.com/auth/cloud-platform",
-                "https://www.googleapis.com/auth/pubsub"
-              ],
-              "parameters": {
-                "resource": {
-                  "description": "REQUIRED: The resource for which the policy is being specified.\n`resource` is usually specified as a path. For example, a Project\nresource is specified as `projects/{project}`.",
+                "subscription": {
                   "required": true,
                   "type": "string",
-                  "pattern": "^projects/[^/]+/snapshots/[^/]+$",
-                  "location": "path"
+                  "pattern": "^projects/[^/]+/subscriptions/[^/]+$",
+                  "location": "path",
+                  "description": "The name of the subscription to get.\nFormat is `projects/{project}/subscriptions/{sub}`."
                 }
               },
-              "flatPath": "v1/projects/{projectsId}/snapshots/{snapshotsId}:setIamPolicy",
-              "id": "pubsub.projects.snapshots.setIamPolicy",
-              "path": "v1/{+resource}:setIamPolicy",
-              "description": "Sets the access control policy on the specified resource. Replaces any\nexisting policy.",
-              "request": {
-                "$ref": "SetIamPolicyRequest"
-              }
+              "flatPath": "v1/projects/{projectsId}/subscriptions/{subscriptionsId}",
+              "path": "v1/{+subscription}",
+              "id": "pubsub.projects.subscriptions.get",
+              "description": "Gets the configuration details of a subscription."
             },
             "testIamPermissions": {
               "response": {
@@ -399,20 +306,20 @@
               "httpMethod": "POST",
               "parameters": {
                 "resource": {
-                  "pattern": "^projects/[^/]+/snapshots/[^/]+$",
-                  "location": "path",
-                  "description": "REQUIRED: The resource for which the policy detail is being requested.\n`resource` is usually specified as a path. For example, a Project\nresource is specified as `projects/{project}`.",
                   "required": true,
-                  "type": "string"
+                  "type": "string",
+                  "pattern": "^projects/[^/]+/subscriptions/[^/]+$",
+                  "location": "path",
+                  "description": "REQUIRED: The resource for which the policy detail is being requested.\nSee the operation documentation for the appropriate value for this field."
                 }
               },
               "scopes": [
                 "https://www.googleapis.com/auth/cloud-platform",
                 "https://www.googleapis.com/auth/pubsub"
               ],
-              "flatPath": "v1/projects/{projectsId}/snapshots/{snapshotsId}:testIamPermissions",
+              "flatPath": "v1/projects/{projectsId}/subscriptions/{subscriptionsId}:testIamPermissions",
               "path": "v1/{+resource}:testIamPermissions",
-              "id": "pubsub.projects.snapshots.testIamPermissions",
+              "id": "pubsub.projects.subscriptions.testIamPermissions",
               "request": {
                 "$ref": "TestIamPermissionsRequest"
               },
@@ -420,38 +327,181 @@
             }
           }
         },
-        "topics": {
+        "snapshots": {
           "methods": {
-            "publish": {
-              "description": "Adds one or more messages to the topic. Returns `NOT_FOUND` if the topic\ndoes not exist. The message payload must not be empty; it must contain\n either a non-empty data field, or at least one attribute.",
+            "setIamPolicy": {
+              "description": "Sets the access control policy on the specified resource. Replaces any\nexisting policy.",
               "request": {
-                "$ref": "PublishRequest"
+                "$ref": "SetIamPolicyRequest"
               },
               "httpMethod": "POST",
               "parameterOrder": [
-                "topic"
+                "resource"
               ],
               "response": {
-                "$ref": "PublishResponse"
+                "$ref": "Policy"
               },
               "scopes": [
                 "https://www.googleapis.com/auth/cloud-platform",
                 "https://www.googleapis.com/auth/pubsub"
               ],
               "parameters": {
+                "resource": {
+                  "location": "path",
+                  "description": "REQUIRED: The resource for which the policy is being specified.\nSee the operation documentation for the appropriate value for this field.",
+                  "required": true,
+                  "type": "string",
+                  "pattern": "^projects/[^/]+/snapshots/[^/]+$"
+                }
+              },
+              "flatPath": "v1/projects/{projectsId}/snapshots/{snapshotsId}:setIamPolicy",
+              "id": "pubsub.projects.snapshots.setIamPolicy",
+              "path": "v1/{+resource}:setIamPolicy"
+            },
+            "testIamPermissions": {
+              "description": "Returns permissions that a caller has on the specified resource.\nIf the resource does not exist, this will return an empty set of\npermissions, not a NOT_FOUND error.\n\nNote: This operation is designed to be used for building permission-aware\nUIs and command-line tools, not for authorization checking. This operation\nmay \"fail open\" without warning.",
+              "request": {
+                "$ref": "TestIamPermissionsRequest"
+              },
+              "response": {
+                "$ref": "TestIamPermissionsResponse"
+              },
+              "parameterOrder": [
+                "resource"
+              ],
+              "httpMethod": "POST",
+              "scopes": [
+                "https://www.googleapis.com/auth/cloud-platform",
+                "https://www.googleapis.com/auth/pubsub"
+              ],
+              "parameters": {
+                "resource": {
+                  "required": true,
+                  "type": "string",
+                  "pattern": "^projects/[^/]+/snapshots/[^/]+$",
+                  "location": "path",
+                  "description": "REQUIRED: The resource for which the policy detail is being requested.\nSee the operation documentation for the appropriate value for this field."
+                }
+              },
+              "flatPath": "v1/projects/{projectsId}/snapshots/{snapshotsId}:testIamPermissions",
+              "path": "v1/{+resource}:testIamPermissions",
+              "id": "pubsub.projects.snapshots.testIamPermissions"
+            },
+            "getIamPolicy": {
+              "description": "Gets the access control policy for a resource.\nReturns an empty policy if the resource exists and does not have a policy\nset.",
+              "httpMethod": "GET",
+              "response": {
+                "$ref": "Policy"
+              },
+              "parameterOrder": [
+                "resource"
+              ],
+              "parameters": {
+                "resource": {
+                  "required": true,
+                  "type": "string",
+                  "pattern": "^projects/[^/]+/snapshots/[^/]+$",
+                  "location": "path",
+                  "description": "REQUIRED: The resource for which the policy is being requested.\nSee the operation documentation for the appropriate value for this field."
+                }
+              },
+              "scopes": [
+                "https://www.googleapis.com/auth/cloud-platform",
+                "https://www.googleapis.com/auth/pubsub"
+              ],
+              "flatPath": "v1/projects/{projectsId}/snapshots/{snapshotsId}:getIamPolicy",
+              "id": "pubsub.projects.snapshots.getIamPolicy",
+              "path": "v1/{+resource}:getIamPolicy"
+            }
+          }
+        },
+        "topics": {
+          "methods": {
+            "getIamPolicy": {
+              "flatPath": "v1/projects/{projectsId}/topics/{topicsId}:getIamPolicy",
+              "path": "v1/{+resource}:getIamPolicy",
+              "id": "pubsub.projects.topics.getIamPolicy",
+              "description": "Gets the access control policy for a resource.\nReturns an empty policy if the resource exists and does not have a policy\nset.",
+              "response": {
+                "$ref": "Policy"
+              },
+              "parameterOrder": [
+                "resource"
+              ],
+              "httpMethod": "GET",
+              "scopes": [
+                "https://www.googleapis.com/auth/cloud-platform",
+                "https://www.googleapis.com/auth/pubsub"
+              ],
+              "parameters": {
+                "resource": {
+                  "location": "path",
+                  "description": "REQUIRED: The resource for which the policy is being requested.\nSee the operation documentation for the appropriate value for this field.",
+                  "required": true,
+                  "type": "string",
+                  "pattern": "^projects/[^/]+/topics/[^/]+$"
+                }
+              }
+            },
+            "get": {
+              "httpMethod": "GET",
+              "response": {
+                "$ref": "Topic"
+              },
+              "parameterOrder": [
+                "topic"
+              ],
+              "parameters": {
                 "topic": {
+                  "required": true,
+                  "type": "string",
                   "pattern": "^projects/[^/]+/topics/[^/]+$",
                   "location": "path",
-                  "description": "The messages in the request will be published on this topic.\nFormat is `projects/{project}/topics/{topic}`.",
+                  "description": "The name of the topic to get.\nFormat is `projects/{project}/topics/{topic}`."
+                }
+              },
+              "scopes": [
+                "https://www.googleapis.com/auth/cloud-platform",
+                "https://www.googleapis.com/auth/pubsub"
+              ],
+              "flatPath": "v1/projects/{projectsId}/topics/{topicsId}",
+              "id": "pubsub.projects.topics.get",
+              "path": "v1/{+topic}",
+              "description": "Gets the configuration of a topic."
+            },
+            "publish": {
+              "response": {
+                "$ref": "PublishResponse"
+              },
+              "parameterOrder": [
+                "topic"
+              ],
+              "httpMethod": "POST",
+              "scopes": [
+                "https://www.googleapis.com/auth/cloud-platform",
+                "https://www.googleapis.com/auth/pubsub"
+              ],
+              "parameters": {
+                "topic": {
                   "required": true,
-                  "type": "string"
+                  "type": "string",
+                  "pattern": "^projects/[^/]+/topics/[^/]+$",
+                  "location": "path",
+                  "description": "The messages in the request will be published on this topic.\nFormat is `projects/{project}/topics/{topic}`."
                 }
               },
               "flatPath": "v1/projects/{projectsId}/topics/{topicsId}:publish",
+              "path": "v1/{+topic}:publish",
               "id": "pubsub.projects.topics.publish",
-              "path": "v1/{+topic}:publish"
+              "description": "Adds one or more messages to the topic. Returns `NOT_FOUND` if the topic\ndoes not exist. The message payload must not be empty; it must contain\n either a non-empty data field, or at least one attribute.",
+              "request": {
+                "$ref": "PublishRequest"
+              }
             },
             "testIamPermissions": {
+              "flatPath": "v1/projects/{projectsId}/topics/{topicsId}:testIamPermissions",
+              "path": "v1/{+resource}:testIamPermissions",
+              "id": "pubsub.projects.topics.testIamPermissions",
               "request": {
                 "$ref": "TestIamPermissionsRequest"
               },
@@ -465,20 +515,17 @@
               "httpMethod": "POST",
               "parameters": {
                 "resource": {
+                  "required": true,
+                  "type": "string",
                   "pattern": "^projects/[^/]+/topics/[^/]+$",
                   "location": "path",
-                  "description": "REQUIRED: The resource for which the policy detail is being requested.\n`resource` is usually specified as a path. For example, a Project\nresource is specified as `projects/{project}`.",
-                  "required": true,
-                  "type": "string"
+                  "description": "REQUIRED: The resource for which the policy detail is being requested.\nSee the operation documentation for the appropriate value for this field."
                 }
               },
               "scopes": [
                 "https://www.googleapis.com/auth/cloud-platform",
                 "https://www.googleapis.com/auth/pubsub"
-              ],
-              "flatPath": "v1/projects/{projectsId}/topics/{topicsId}:testIamPermissions",
-              "path": "v1/{+resource}:testIamPermissions",
-              "id": "pubsub.projects.topics.testIamPermissions"
+              ]
             },
             "delete": {
               "response": {
@@ -490,11 +537,11 @@
               "httpMethod": "DELETE",
               "parameters": {
                 "topic": {
+                  "location": "path",
                   "description": "Name of the topic to delete.\nFormat is `projects/{project}/topics/{topic}`.",
                   "required": true,
                   "type": "string",
-                  "pattern": "^projects/[^/]+/topics/[^/]+$",
-                  "location": "path"
+                  "pattern": "^projects/[^/]+/topics/[^/]+$"
                 }
               },
               "scopes": [
@@ -507,78 +554,50 @@
               "description": "Deletes the topic with the given name. Returns `NOT_FOUND` if the topic\ndoes not exist. After a topic is deleted, a new topic may be created with\nthe same name; this is an entirely new topic with none of the old\nconfiguration or subscriptions. Existing subscriptions to this topic are\nnot deleted, but their `topic` field is set to `_deleted-topic_`."
             },
             "list": {
+              "flatPath": "v1/projects/{projectsId}/topics",
+              "id": "pubsub.projects.topics.list",
+              "path": "v1/{+project}/topics",
               "description": "Lists matching topics.",
-              "response": {
-                "$ref": "ListTopicsResponse"
-              },
+              "httpMethod": "GET",
               "parameterOrder": [
                 "project"
               ],
-              "httpMethod": "GET",
+              "response": {
+                "$ref": "ListTopicsResponse"
+              },
               "scopes": [
                 "https://www.googleapis.com/auth/cloud-platform",
                 "https://www.googleapis.com/auth/pubsub"
               ],
               "parameters": {
                 "pageToken": {
+                  "type": "string",
                   "location": "query",
-                  "description": "The value returned by the last `ListTopicsResponse`; indicates that this is\na continuation of a prior `ListTopics` call, and that the system should\nreturn the next page of data.",
-                  "type": "string"
+                  "description": "The value returned by the last `ListTopicsResponse`; indicates that this is\na continuation of a prior `ListTopics` call, and that the system should\nreturn the next page of data."
                 },
                 "pageSize": {
-                  "description": "Maximum number of topics to return.",
-                  "format": "int32",
                   "type": "integer",
-                  "location": "query"
+                  "location": "query",
+                  "description": "Maximum number of topics to return.",
+                  "format": "int32"
                 },
                 "project": {
+                  "location": "path",
                   "description": "The name of the cloud project that topics belong to.\nFormat is `projects/{project}`.",
                   "required": true,
                   "type": "string",
-                  "pattern": "^projects/[^/]+$",
-                  "location": "path"
+                  "pattern": "^projects/[^/]+$"
                 }
-              },
-              "flatPath": "v1/projects/{projectsId}/topics",
-              "path": "v1/{+project}/topics",
-              "id": "pubsub.projects.topics.list"
-            },
-            "setIamPolicy": {
-              "request": {
-                "$ref": "SetIamPolicyRequest"
-              },
-              "description": "Sets the access control policy on the specified resource. Replaces any\nexisting policy.",
-              "httpMethod": "POST",
-              "parameterOrder": [
-                "resource"
-              ],
-              "response": {
-                "$ref": "Policy"
-              },
-              "parameters": {
-                "resource": {
-                  "pattern": "^projects/[^/]+/topics/[^/]+$",
-                  "location": "path",
-                  "description": "REQUIRED: The resource for which the policy is being specified.\n`resource` is usually specified as a path. For example, a Project\nresource is specified as `projects/{project}`.",
-                  "required": true,
-                  "type": "string"
-                }
-              },
-              "scopes": [
-                "https://www.googleapis.com/auth/cloud-platform",
-                "https://www.googleapis.com/auth/pubsub"
-              ],
-              "flatPath": "v1/projects/{projectsId}/topics/{topicsId}:setIamPolicy",
-              "id": "pubsub.projects.topics.setIamPolicy",
-              "path": "v1/{+resource}:setIamPolicy"
+              }
             },
             "create": {
+              "flatPath": "v1/projects/{projectsId}/topics/{topicsId}",
               "path": "v1/{+name}",
               "id": "pubsub.projects.topics.create",
-              "description": "Creates the given topic with the given name.",
               "request": {
                 "$ref": "Topic"
               },
+              "description": "Creates the given topic with the given name.",
               "response": {
                 "$ref": "Topic"
               },
@@ -586,72 +605,48 @@
                 "name"
               ],
               "httpMethod": "PUT",
-              "scopes": [
-                "https://www.googleapis.com/auth/cloud-platform",
-                "https://www.googleapis.com/auth/pubsub"
-              ],
               "parameters": {
                 "name": {
-                  "description": "The name of the topic. It must have the format\n`\"projects/{project}/topics/{topic}\"`. `{topic}` must start with a letter,\nand contain only letters (`[A-Za-z]`), numbers (`[0-9]`), dashes (`-`),\nunderscores (`_`), periods (`.`), tildes (`~`), plus (`+`) or percent\nsigns (`%`). It must be between 3 and 255 characters in length, and it\nmust not start with `\"goog\"`.",
                   "required": true,
                   "type": "string",
                   "pattern": "^projects/[^/]+/topics/[^/]+$",
-                  "location": "path"
+                  "location": "path",
+                  "description": "The name of the topic. It must have the format\n`\"projects/{project}/topics/{topic}\"`. `{topic}` must start with a letter,\nand contain only letters (`[A-Za-z]`), numbers (`[0-9]`), dashes (`-`),\nunderscores (`_`), periods (`.`), tildes (`~`), plus (`+`) or percent\nsigns (`%`). It must be between 3 and 255 characters in length, and it\nmust not start with `\"goog\"`."
                 }
               },
-              "flatPath": "v1/projects/{projectsId}/topics/{topicsId}"
+              "scopes": [
+                "https://www.googleapis.com/auth/cloud-platform",
+                "https://www.googleapis.com/auth/pubsub"
+              ]
             },
-            "getIamPolicy": {
+            "setIamPolicy": {
+              "response": {
+                "$ref": "Policy"
+              },
+              "parameterOrder": [
+                "resource"
+              ],
+              "httpMethod": "POST",
               "scopes": [
                 "https://www.googleapis.com/auth/cloud-platform",
                 "https://www.googleapis.com/auth/pubsub"
               ],
               "parameters": {
                 "resource": {
-                  "pattern": "^projects/[^/]+/topics/[^/]+$",
                   "location": "path",
-                  "description": "REQUIRED: The resource for which the policy is being requested.\n`resource` is usually specified as a path. For example, a Project\nresource is specified as `projects/{project}`.",
-                  "required": true,
-                  "type": "string"
-                }
-              },
-              "flatPath": "v1/projects/{projectsId}/topics/{topicsId}:getIamPolicy",
-              "id": "pubsub.projects.topics.getIamPolicy",
-              "path": "v1/{+resource}:getIamPolicy",
-              "description": "Gets the access control policy for a resource.\nReturns an empty policy if the resource exists and does not have a policy\nset.",
-              "httpMethod": "GET",
-              "parameterOrder": [
-                "resource"
-              ],
-              "response": {
-                "$ref": "Policy"
-              }
-            },
-            "get": {
-              "path": "v1/{+topic}",
-              "id": "pubsub.projects.topics.get",
-              "description": "Gets the configuration of a topic.",
-              "parameterOrder": [
-                "topic"
-              ],
-              "httpMethod": "GET",
-              "response": {
-                "$ref": "Topic"
-              },
-              "parameters": {
-                "topic": {
-                  "description": "The name of the topic to get.\nFormat is `projects/{project}/topics/{topic}`.",
+                  "description": "REQUIRED: The resource for which the policy is being specified.\nSee the operation documentation for the appropriate value for this field.",
                   "required": true,
                   "type": "string",
-                  "pattern": "^projects/[^/]+/topics/[^/]+$",
-                  "location": "path"
+                  "pattern": "^projects/[^/]+/topics/[^/]+$"
                 }
               },
-              "scopes": [
-                "https://www.googleapis.com/auth/cloud-platform",
-                "https://www.googleapis.com/auth/pubsub"
-              ],
-              "flatPath": "v1/projects/{projectsId}/topics/{topicsId}"
+              "flatPath": "v1/projects/{projectsId}/topics/{topicsId}:setIamPolicy",
+              "path": "v1/{+resource}:setIamPolicy",
+              "id": "pubsub.projects.topics.setIamPolicy",
+              "description": "Sets the access control policy on the specified resource. Replaces any\nexisting policy.",
+              "request": {
+                "$ref": "SetIamPolicyRequest"
+              }
             }
           },
           "resources": {
@@ -659,31 +654,31 @@
               "methods": {
                 "list": {
                   "description": "Lists the name of the subscriptions for this topic.",
+                  "httpMethod": "GET",
                   "parameterOrder": [
                     "topic"
                   ],
-                  "httpMethod": "GET",
                   "response": {
                     "$ref": "ListTopicSubscriptionsResponse"
                   },
                   "parameters": {
+                    "topic": {
+                      "required": true,
+                      "type": "string",
+                      "pattern": "^projects/[^/]+/topics/[^/]+$",
+                      "location": "path",
+                      "description": "The name of the topic that subscriptions are attached to.\nFormat is `projects/{project}/topics/{topic}`."
+                    },
                     "pageToken": {
                       "location": "query",
                       "description": "The value returned by the last `ListTopicSubscriptionsResponse`; indicates\nthat this is a continuation of a prior `ListTopicSubscriptions` call, and\nthat the system should return the next page of data.",
                       "type": "string"
                     },
                     "pageSize": {
-                      "description": "Maximum number of subscription names to return.",
-                      "format": "int32",
                       "type": "integer",
-                      "location": "query"
-                    },
-                    "topic": {
-                      "description": "The name of the topic that subscriptions are attached to.\nFormat is `projects/{project}/topics/{topic}`.",
-                      "required": true,
-                      "type": "string",
-                      "pattern": "^projects/[^/]+/topics/[^/]+$",
-                      "location": "path"
+                      "location": "query",
+                      "description": "Maximum number of subscription names to return.",
+                      "format": "int32"
                     }
                   },
                   "scopes": [
@@ -691,8 +686,8 @@
                     "https://www.googleapis.com/auth/pubsub"
                   ],
                   "flatPath": "v1/projects/{projectsId}/topics/{topicsId}/subscriptions",
-                  "path": "v1/{+topic}/subscriptions",
-                  "id": "pubsub.projects.topics.subscriptions.list"
+                  "id": "pubsub.projects.topics.subscriptions.list",
+                  "path": "v1/{+topic}/subscriptions"
                 }
               }
             }
@@ -703,49 +698,48 @@
   },
   "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.",
       "type": "string",
-      "location": "query"
+      "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."
     },
     "pp": {
-      "description": "Pretty-print response.",
       "type": "boolean",
       "default": "true",
-      "location": "query"
-    },
-    "bearer_token": {
-      "description": "OAuth bearer token.",
-      "type": "string",
-      "location": "query"
+      "location": "query",
+      "description": "Pretty-print response."
     },
     "oauth_token": {
       "location": "query",
       "description": "OAuth 2.0 token for the current user.",
       "type": "string"
     },
-    "upload_protocol": {
-      "description": "Upload protocol for media (e.g. \"raw\", \"multipart\").",
+    "bearer_token": {
       "type": "string",
-      "location": "query"
+      "location": "query",
+      "description": "OAuth bearer token."
+    },
+    "upload_protocol": {
+      "location": "query",
+      "description": "Upload protocol for media (e.g. \"raw\", \"multipart\").",
+      "type": "string"
     },
     "prettyPrint": {
-      "location": "query",
-      "description": "Returns response with indentations and line breaks.",
       "type": "boolean",
-      "default": "true"
+      "default": "true",
+      "location": "query",
+      "description": "Returns response with indentations and line breaks."
     },
     "fields": {
+      "location": "query",
       "description": "Selector specifying which fields to include in a partial response.",
-      "type": "string",
-      "location": "query"
+      "type": "string"
     },
     "uploadType": {
+      "location": "query",
       "description": "Legacy upload protocol for media (e.g. \"media\", \"multipart\").",
-      "type": "string",
-      "location": "query"
+      "type": "string"
     },
     "$.xgafv": {
-      "description": "V1 error format.",
       "type": "string",
       "enumDescriptions": [
         "v1 error format",
@@ -755,7 +749,8 @@
       "enum": [
         "1",
         "2"
-      ]
+      ],
+      "description": "V1 error format."
     },
     "callback": {
       "location": "query",
@@ -763,6 +758,12 @@
       "type": "string"
     },
     "alt": {
+      "enum": [
+        "json",
+        "media",
+        "proto"
+      ],
+      "type": "string",
       "enumDescriptions": [
         "Responses with Content-Type of application/json",
         "Media download with context-dependent Content-Type",
@@ -770,13 +771,7 @@
       ],
       "location": "query",
       "description": "Data format for response.",
-      "default": "json",
-      "enum": [
-        "json",
-        "media",
-        "proto"
-      ],
-      "type": "string"
+      "default": "json"
     },
     "access_token": {
       "location": "query",
@@ -790,143 +785,37 @@
     }
   },
   "schemas": {
-    "SetIamPolicyRequest": {
-      "id": "SetIamPolicyRequest",
-      "description": "Request message for `SetIamPolicy` method.",
-      "type": "object",
-      "properties": {
-        "policy": {
-          "$ref": "Policy",
-          "description": "REQUIRED: The complete policy to be applied to the `resource`. The size of\nthe policy is limited to a few 10s of KB. An empty policy is a\nvalid policy but certain Cloud Platform services (such as Projects)\nmight reject them."
-        }
-      }
-    },
-    "ModifyPushConfigRequest": {
-      "id": "ModifyPushConfigRequest",
-      "description": "Request for the ModifyPushConfig method.",
-      "type": "object",
-      "properties": {
-        "pushConfig": {
-          "description": "The push configuration for future deliveries.\n\nAn empty `pushConfig` indicates that the Pub/Sub system should\nstop pushing messages from the given subscription and allow\nmessages to be pulled and acknowledged - effectively pausing\nthe subscription if `Pull` is not called.",
-          "$ref": "PushConfig"
-        }
-      }
-    },
-    "PubsubMessage": {
-      "id": "PubsubMessage",
-      "description": "A message data and its attributes. The message payload must not be empty;\nit must contain either a non-empty data field, or at least one attribute.",
-      "type": "object",
-      "properties": {
-        "attributes": {
-          "additionalProperties": {
-            "type": "string"
-          },
-          "description": "Optional attributes for this message.",
-          "type": "object"
-        },
-        "messageId": {
-          "description": "ID of this message, assigned by the server when the message is published.\nGuaranteed to be unique within the topic. This value may be read by a\nsubscriber that receives a `PubsubMessage` via a `Pull` call or a push\ndelivery. It must not be populated by the publisher in a `Publish` call.",
-          "type": "string"
-        },
-        "publishTime": {
-          "description": "The time at which the message was published, populated by the server when\nit receives the `Publish` call. It must not be populated by the\npublisher in a `Publish` call.",
-          "format": "google-datetime",
-          "type": "string"
-        },
-        "data": {
-          "description": "The message payload.",
-          "format": "byte",
-          "type": "string"
-        }
-      }
-    },
-    "Binding": {
-      "description": "Associates `members` with a `role`.",
-      "type": "object",
-      "properties": {
-        "members": {
-          "description": "Specifies the identities requesting access for a Cloud Platform resource.\n`members` can have the following values:\n\n* `allUsers`: A special identifier that represents anyone who is\n   on the internet; with or without a Google account.\n\n* `allAuthenticatedUsers`: A special identifier that represents anyone\n   who is authenticated with a Google account or a service account.\n\n* `user:{emailid}`: An email address that represents a specific Google\n   account. For example, `alice@gmail.com` or `joe@example.com`.\n\n\n* `serviceAccount:{emailid}`: An email address that represents a service\n   account. For example, `my-other-app@appspot.gserviceaccount.com`.\n\n* `group:{emailid}`: An email address that represents a Google group.\n   For example, `admins@example.com`.\n\n* `domain:{domain}`: A Google Apps domain name that represents all the\n   users of that domain. For example, `google.com` or `example.com`.\n\n",
-          "type": "array",
-          "items": {
-            "type": "string"
-          }
-        },
-        "role": {
-          "description": "Role that is assigned to `members`.\nFor example, `roles/viewer`, `roles/editor`, or `roles/owner`.\nRequired",
-          "type": "string"
-        }
-      },
-      "id": "Binding"
-    },
-    "AcknowledgeRequest": {
-      "description": "Request for the Acknowledge method.",
-      "type": "object",
-      "properties": {
-        "ackIds": {
-          "description": "The acknowledgment ID for the messages being acknowledged that was returned\nby the Pub/Sub system in the `Pull` response. Must not be empty.",
-          "type": "array",
-          "items": {
-            "type": "string"
-          }
-        }
-      },
-      "id": "AcknowledgeRequest"
-    },
-    "Empty": {
-      "id": "Empty",
-      "description": "A generic empty message that you can re-use to avoid defining duplicated\nempty messages in your APIs. A typical example is to use it as the request\nor the response type of an API method. For instance:\n\n    service Foo {\n      rpc Bar(google.protobuf.Empty) returns (google.protobuf.Empty);\n    }\n\nThe JSON representation for `Empty` is empty JSON object `{}`.",
-      "type": "object",
-      "properties": {}
-    },
-    "ListTopicsResponse": {
-      "description": "Response for the `ListTopics` method.",
-      "type": "object",
-      "properties": {
-        "topics": {
-          "description": "The resulting topics.",
-          "type": "array",
-          "items": {
-            "$ref": "Topic"
-          }
-        },
-        "nextPageToken": {
-          "description": "If not empty, indicates that there may be more topics that match the\nrequest; this value should be passed in a new `ListTopicsRequest`.",
-          "type": "string"
-        }
-      },
-      "id": "ListTopicsResponse"
-    },
     "ListTopicSubscriptionsResponse": {
-      "id": "ListTopicSubscriptionsResponse",
-      "description": "Response for the `ListTopicSubscriptions` method.",
       "type": "object",
       "properties": {
-        "subscriptions": {
-          "description": "The names of the subscriptions that match the request.",
-          "type": "array",
-          "items": {
-            "type": "string"
-          }
-        },
         "nextPageToken": {
           "description": "If not empty, indicates that there may be more subscriptions that match\nthe request; this value should be passed in a new\n`ListTopicSubscriptionsRequest` to get more subscriptions.",
           "type": "string"
+        },
+        "subscriptions": {
+          "type": "array",
+          "items": {
+            "type": "string"
+          },
+          "description": "The names of the subscriptions that match the request."
         }
-      }
+      },
+      "id": "ListTopicSubscriptionsResponse",
+      "description": "Response for the `ListTopicSubscriptions` method."
     },
     "PullResponse": {
-      "id": "PullResponse",
       "description": "Response for the `Pull` method.",
       "type": "object",
       "properties": {
         "receivedMessages": {
-          "description": "Received Pub/Sub messages. The Pub/Sub system will return zero messages if\nthere are no more available in the backlog. The Pub/Sub system may return\nfewer than the `maxMessages` requested even if there are more messages\navailable in the backlog.",
           "type": "array",
           "items": {
             "$ref": "ReceivedMessage"
-          }
+          },
+          "description": "Received Pub/Sub messages. The Pub/Sub system will return zero messages if\nthere are no more available in the backlog. The Pub/Sub system may return\nfewer than the `maxMessages` requested even if there are more messages\navailable in the backlog."
         }
-      }
+      },
+      "id": "PullResponse"
     },
     "ReceivedMessage": {
       "description": "A message and its corresponding acknowledgment ID.",
@@ -952,28 +841,28 @@
           "type": "string"
         },
         "attributes": {
-          "description": "Endpoint configuration attributes.\n\nEvery endpoint has a set of API supported attributes that can be used to\ncontrol different aspects of the message delivery.\n\nThe currently supported attribute is `x-goog-version`, which you can\nuse to change the format of the push message. This attribute\nindicates the version of the data expected by the endpoint. This\ncontrols the shape of the envelope (i.e. its fields and metadata).\nThe endpoint version is based on the version of the Pub/Sub\nAPI.\n\nIf not present during the `CreateSubscription` call, it will default to\nthe version of the API used to make such call. If not present during a\n`ModifyPushConfig` call, its value will not be changed. `GetSubscription`\ncalls will always return a valid version, even if the subscription was\ncreated without this attribute.\n\nThe possible values for this attribute are:\n\n* `v1beta1`: uses the push format defined in the v1beta1 Pub/Sub API.\n* `v1` or `v1beta2`: uses the push format defined in the v1 Pub/Sub API.",
           "type": "object",
           "additionalProperties": {
             "type": "string"
-          }
+          },
+          "description": "Endpoint configuration attributes.\n\nEvery endpoint has a set of API supported attributes that can be used to\ncontrol different aspects of the message delivery.\n\nThe currently supported attribute is `x-goog-version`, which you can\nuse to change the format of the pushed message. This attribute\nindicates the version of the data expected by the endpoint. This\ncontrols the shape of the pushed message (i.e., its fields and metadata).\nThe endpoint version is based on the version of the Pub/Sub API.\n\nIf not present during the `CreateSubscription` call, it will default to\nthe version of the API used to make such call. If not present during a\n`ModifyPushConfig` call, its value will not be changed. `GetSubscription`\ncalls will always return a valid version, even if the subscription was\ncreated without this attribute.\n\nThe possible values for this attribute are:\n\n* `v1beta1`: uses the push format defined in the v1beta1 Pub/Sub API.\n* `v1` or `v1beta2`: uses the push format defined in the v1 Pub/Sub API."
         }
       },
       "id": "PushConfig"
     },
     "TestIamPermissionsResponse": {
-      "description": "Response message for `TestIamPermissions` method.",
       "type": "object",
       "properties": {
         "permissions": {
-          "description": "A subset of `TestPermissionsRequest.permissions` that the caller is\nallowed.",
           "type": "array",
           "items": {
             "type": "string"
-          }
+          },
+          "description": "A subset of `TestPermissionsRequest.permissions` that the caller is\nallowed."
         }
       },
-      "id": "TestIamPermissionsResponse"
+      "id": "TestIamPermissionsResponse",
+      "description": "Response message for `TestIamPermissions` method."
     },
     "PullRequest": {
       "description": "Request for the `Pull` method.",
@@ -984,79 +873,79 @@
           "type": "boolean"
         },
         "maxMessages": {
+          "type": "integer",
           "description": "The maximum number of messages returned for this request. The Pub/Sub\nsystem may return fewer than the number specified.",
-          "format": "int32",
-          "type": "integer"
+          "format": "int32"
         }
       },
       "id": "PullRequest"
     },
     "ListSubscriptionsResponse": {
-      "id": "ListSubscriptionsResponse",
-      "description": "Response for the `ListSubscriptions` method.",
       "type": "object",
       "properties": {
+        "nextPageToken": {
+          "description": "If not empty, indicates that there may be more subscriptions that match\nthe request; this value should be passed in a new\n`ListSubscriptionsRequest` to get more subscriptions.",
+          "type": "string"
+        },
         "subscriptions": {
           "description": "The subscriptions that match the request.",
           "type": "array",
           "items": {
             "$ref": "Subscription"
           }
-        },
-        "nextPageToken": {
-          "description": "If not empty, indicates that there may be more subscriptions that match\nthe request; this value should be passed in a new\n`ListSubscriptionsRequest` to get more subscriptions.",
-          "type": "string"
         }
-      }
+      },
+      "id": "ListSubscriptionsResponse",
+      "description": "Response for the `ListSubscriptions` method."
     },
     "PublishRequest": {
-      "id": "PublishRequest",
-      "description": "Request for the Publish method.",
       "type": "object",
       "properties": {
         "messages": {
-          "description": "The messages to publish.",
           "type": "array",
           "items": {
             "$ref": "PubsubMessage"
-          }
+          },
+          "description": "The messages to publish."
         }
-      }
+      },
+      "id": "PublishRequest",
+      "description": "Request for the Publish method."
     },
     "PublishResponse": {
-      "description": "Response for the `Publish` method.",
       "type": "object",
       "properties": {
         "messageIds": {
-          "description": "The server-assigned ID of each published message, in the same order as\nthe messages in the request. IDs are guaranteed to be unique within\nthe topic.",
           "type": "array",
           "items": {
             "type": "string"
-          }
+          },
+          "description": "The server-assigned ID of each published message, in the same order as\nthe messages in the request. IDs are guaranteed to be unique within\nthe topic."
         }
       },
-      "id": "PublishResponse"
+      "id": "PublishResponse",
+      "description": "Response for the `Publish` method."
     },
     "Subscription": {
       "description": "A subscription resource.",
       "type": "object",
       "properties": {
-        "pushConfig": {
-          "$ref": "PushConfig",
-          "description": "If push delivery is used with this subscription, this field is\nused to configure it. An empty `pushConfig` signifies that the subscriber\nwill pull and ack messages using API methods."
-        },
         "ackDeadlineSeconds": {
+          "type": "integer",
           "description": "This value is the maximum time after a subscriber receives a message\nbefore the subscriber should acknowledge the message. After message\ndelivery but before the ack deadline expires and before the message is\nacknowledged, it is an outstanding message and will not be delivered\nagain during that time (on a best-effort basis).\n\nFor pull subscriptions, this value is used as the initial value for the ack\ndeadline. To override this value for a given message, call\n`ModifyAckDeadline` with the corresponding `ack_id` if using\npull.\nThe minimum custom deadline you can specify is 10 seconds.\nThe maximum custom deadline you can specify is 600 seconds (10 minutes).\nIf this parameter is 0, a default value of 10 seconds is used.\n\nFor push delivery, this value is also used to set the request timeout for\nthe call to the push endpoint.\n\nIf the subscriber never acknowledges the message, the Pub/Sub\nsystem will eventually redeliver the message.",
-          "format": "int32",
-          "type": "integer"
+          "format": "int32"
         },
         "name": {
           "description": "The name of the subscription. It must have the format\n`\"projects/{project}/subscriptions/{subscription}\"`. `{subscription}` must\nstart with a letter, and contain only letters (`[A-Za-z]`), numbers\n(`[0-9]`), dashes (`-`), underscores (`_`), periods (`.`), tildes (`~`),\nplus (`+`) or percent signs (`%`). It must be between 3 and 255 characters\nin length, and it must not start with `\"goog\"`.",
           "type": "string"
         },
         "topic": {
-          "description": "The name of the topic from which this subscription is receiving messages.\nFormat is `projects/{project}/topics/{topic}`.\nThe value of this field will be `_deleted-topic_` if the topic has been\ndeleted.",
-          "type": "string"
+          "type": "string",
+          "description": "The name of the topic from which this subscription is receiving messages.\nFormat is `projects/{project}/topics/{topic}`.\nThe value of this field will be `_deleted-topic_` if the topic has been\ndeleted."
+        },
+        "pushConfig": {
+          "$ref": "PushConfig",
+          "description": "If push delivery is used with this subscription, this field is\nused to configure it. An empty `pushConfig` signifies that the subscriber\nwill pull and ack messages using API methods."
         }
       },
       "id": "Subscription"
@@ -1076,31 +965,30 @@
       "id": "TestIamPermissionsRequest"
     },
     "Policy": {
-      "id": "Policy",
       "description": "Defines an Identity and Access Management (IAM) policy. It is used to\nspecify access control policies for Cloud Platform resources.\n\n\nA `Policy` consists of a list of `bindings`. A `Binding` binds a list of\n`members` to a `role`, where the members can be user accounts, Google groups,\nGoogle domains, and service accounts. A `role` is a named list of permissions\ndefined by IAM.\n\n**Example**\n\n    {\n      \"bindings\": [\n        {\n          \"role\": \"roles/owner\",\n          \"members\": [\n            \"user:mike@example.com\",\n            \"group:admins@example.com\",\n            \"domain:google.com\",\n            \"serviceAccount:my-other-app@appspot.gserviceaccount.com\",\n          ]\n        },\n        {\n          \"role\": \"roles/viewer\",\n          \"members\": [\"user:sean@example.com\"]\n        }\n      ]\n    }\n\nFor a description of IAM and its features, see the\n[IAM developer's guide](https://cloud.google.com/iam).",
       "type": "object",
       "properties": {
-        "version": {
-          "description": "Version of the `Policy`. The default version is 0.",
-          "format": "int32",
-          "type": "integer"
-        },
         "bindings": {
-          "description": "Associates a list of `members` to a `role`.\nMultiple `bindings` must not be specified for the same `role`.\n`bindings` with no members will result in an error.",
           "type": "array",
           "items": {
             "$ref": "Binding"
-          }
+          },
+          "description": "Associates a list of `members` to a `role`.\nMultiple `bindings` must not be specified for the same `role`.\n`bindings` with no members will result in an error."
         },
         "etag": {
           "description": "`etag` is used for optimistic concurrency control as a way to help\nprevent simultaneous updates of a policy from overwriting each other.\nIt is strongly suggested that systems make use of the `etag` in the\nread-modify-write cycle to perform policy updates in order to avoid race\nconditions: An `etag` is returned in the response to `getIamPolicy`, and\nsystems are expected to put that etag in the request to `setIamPolicy` to\nensure that their change will be applied to the same version of the policy.\n\nIf no `etag` is provided in the call to `setIamPolicy`, then the existing\npolicy is overwritten blindly.",
           "format": "byte",
           "type": "string"
+        },
+        "version": {
+          "description": "Version of the `Policy`. The default version is 0.",
+          "format": "int32",
+          "type": "integer"
         }
-      }
+      },
+      "id": "Policy"
     },
     "Topic": {
-      "description": "A topic resource.",
       "type": "object",
       "properties": {
         "name": {
@@ -1108,11 +996,10 @@
           "type": "string"
         }
       },
-      "id": "Topic"
+      "id": "Topic",
+      "description": "A topic resource."
     },
     "ModifyAckDeadlineRequest": {
-      "id": "ModifyAckDeadlineRequest",
-      "description": "Request for the ModifyAckDeadline method.",
       "type": "object",
       "properties": {
         "ackDeadlineSeconds": {
@@ -1121,39 +1008,152 @@
           "type": "integer"
         },
         "ackIds": {
-          "description": "List of acknowledgment IDs.",
           "type": "array",
           "items": {
             "type": "string"
-          }
+          },
+          "description": "List of acknowledgment IDs."
         }
-      }
+      },
+      "id": "ModifyAckDeadlineRequest",
+      "description": "Request for the ModifyAckDeadline method."
+    },
+    "SetIamPolicyRequest": {
+      "description": "Request message for `SetIamPolicy` method.",
+      "type": "object",
+      "properties": {
+        "policy": {
+          "$ref": "Policy",
+          "description": "REQUIRED: The complete policy to be applied to the `resource`. The size of\nthe policy is limited to a few 10s of KB. An empty policy is a\nvalid policy but certain Cloud Platform services (such as Projects)\nmight reject them."
+        }
+      },
+      "id": "SetIamPolicyRequest"
+    },
+    "PubsubMessage": {
+      "type": "object",
+      "properties": {
+        "attributes": {
+          "type": "object",
+          "additionalProperties": {
+            "type": "string"
+          },
+          "description": "Optional attributes for this message."
+        },
+        "messageId": {
+          "description": "ID of this message, assigned by the server when the message is published.\nGuaranteed to be unique within the topic. This value may be read by a\nsubscriber that receives a `PubsubMessage` via a `Pull` call or a push\ndelivery. It must not be populated by the publisher in a `Publish` call.",
+          "type": "string"
+        },
+        "publishTime": {
+          "description": "The time at which the message was published, populated by the server when\nit receives the `Publish` call. It must not be populated by the\npublisher in a `Publish` call.",
+          "format": "google-datetime",
+          "type": "string"
+        },
+        "data": {
+          "description": "The message payload.",
+          "format": "byte",
+          "type": "string"
+        }
+      },
+      "id": "PubsubMessage",
+      "description": "A message data and its attributes. The message payload must not be empty;\nit must contain either a non-empty data field, or at least one attribute."
+    },
+    "ModifyPushConfigRequest": {
+      "description": "Request for the ModifyPushConfig method.",
+      "type": "object",
+      "properties": {
+        "pushConfig": {
+          "$ref": "PushConfig",
+          "description": "The push configuration for future deliveries.\n\nAn empty `pushConfig` indicates that the Pub/Sub system should\nstop pushing messages from the given subscription and allow\nmessages to be pulled and acknowledged - effectively pausing\nthe subscription if `Pull` is not called."
+        }
+      },
+      "id": "ModifyPushConfigRequest"
+    },
+    "Binding": {
+      "type": "object",
+      "properties": {
+        "members": {
+          "type": "array",
+          "items": {
+            "type": "string"
+          },
+          "description": "Specifies the identities requesting access for a Cloud Platform resource.\n`members` can have the following values:\n\n* `allUsers`: A special identifier that represents anyone who is\n   on the internet; with or without a Google account.\n\n* `allAuthenticatedUsers`: A special identifier that represents anyone\n   who is authenticated with a Google account or a service account.\n\n* `user:{emailid}`: An email address that represents a specific Google\n   account. For example, `alice@gmail.com` or `joe@example.com`.\n\n\n* `serviceAccount:{emailid}`: An email address that represents a service\n   account. For example, `my-other-app@appspot.gserviceaccount.com`.\n\n* `group:{emailid}`: An email address that represents a Google group.\n   For example, `admins@example.com`.\n\n* `domain:{domain}`: A Google Apps domain name that represents all the\n   users of that domain. For example, `google.com` or `example.com`.\n\n"
+        },
+        "role": {
+          "type": "string",
+          "description": "Role that is assigned to `members`.\nFor example, `roles/viewer`, `roles/editor`, or `roles/owner`.\nRequired"
+        }
+      },
+      "id": "Binding",
+      "description": "Associates `members` with a `role`."
+    },
+    "ListTopicsResponse": {
+      "type": "object",
+      "properties": {
+        "topics": {
+          "type": "array",
+          "items": {
+            "$ref": "Topic"
+          },
+          "description": "The resulting topics."
+        },
+        "nextPageToken": {
+          "type": "string",
+          "description": "If not empty, indicates that there may be more topics that match the\nrequest; this value should be passed in a new `ListTopicsRequest`."
+        }
+      },
+      "id": "ListTopicsResponse",
+      "description": "Response for the `ListTopics` method."
+    },
+    "Empty": {
+      "type": "object",
+      "properties": {},
+      "id": "Empty",
+      "description": "A generic empty message that you can re-use to avoid defining duplicated\nempty messages in your APIs. A typical example is to use it as the request\nor the response type of an API method. For instance:\n\n    service Foo {\n      rpc Bar(google.protobuf.Empty) returns (google.protobuf.Empty);\n    }\n\nThe JSON representation for `Empty` is empty JSON object `{}`."
+    },
+    "AcknowledgeRequest": {
+      "description": "Request for the Acknowledge method.",
+      "type": "object",
+      "properties": {
+        "ackIds": {
+          "type": "array",
+          "items": {
+            "type": "string"
+          },
+          "description": "The acknowledgment ID for the messages being acknowledged that was returned\nby the Pub/Sub system in the `Pull` response. Must not be empty."
+        }
+      },
+      "id": "AcknowledgeRequest"
     }
   },
+  "protocol": "rest",
   "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",
   "version": "v1",
   "baseUrl": "https://pubsub.googleapis.com/",
   "canonicalName": "Pubsub",
   "auth": {
     "oauth2": {
       "scopes": {
-        "https://www.googleapis.com/auth/pubsub": {
-          "description": "View and manage Pub/Sub topics and subscriptions"
-        },
         "https://www.googleapis.com/auth/cloud-platform": {
           "description": "View and manage your data across Google Cloud Platform services"
+        },
+        "https://www.googleapis.com/auth/pubsub": {
+          "description": "View and manage Pub/Sub topics and subscriptions"
         }
       }
     }
   },
-  "kind": "discovery#restDescription",
-  "description": "Provides reliable, many-to-many, asynchronous messaging between applications.\n",
   "servicePath": "",
+  "description": "Provides reliable, many-to-many, asynchronous messaging between applications.\n",
+  "kind": "discovery#restDescription",
   "rootUrl": "https://pubsub.googleapis.com/",
   "basePath": "",
-  "ownerDomain": "google.com"
+  "ownerDomain": "google.com",
+  "name": "pubsub",
+  "batchPath": "batch",
+  "revision": "20170308",
+  "documentationLink": "https://cloud.google.com/pubsub/docs",
+  "id": "pubsub:v1"
 }
diff --git a/pubsub/v1/pubsub-gen.go b/pubsub/v1/pubsub-gen.go
index 0fff084..f14f12a 100644
--- a/pubsub/v1/pubsub-gen.go
+++ b/pubsub/v1/pubsub-gen.go
@@ -64,10 +64,9 @@
 }
 
 type Service struct {
-	client                    *http.Client
-	BasePath                  string // API endpoint base URL
-	UserAgent                 string // optional additional User-Agent fragment
-	GoogleClientHeaderElement string // client header fragment, for Google use only
+	client    *http.Client
+	BasePath  string // API endpoint base URL
+	UserAgent string // optional additional User-Agent fragment
 
 	Projects *ProjectsService
 }
@@ -79,10 +78,6 @@
 	return googleapi.UserAgent + " " + s.UserAgent
 }
 
-func (s *Service) clientHeader() string {
-	return gensupport.GoogleClientHeader("20170210", s.GoogleClientHeaderElement)
-}
-
 func NewProjectsService(s *Service) *ProjectsService {
 	rs := &ProjectsService{s: s}
 	rs.Snapshots = NewProjectsSnapshotsService(s)
@@ -744,14 +739,13 @@
 	//
 	// The currently supported attribute is `x-goog-version`, which you
 	// can
-	// use to change the format of the push message. This
+	// use to change the format of the pushed message. This
 	// attribute
 	// indicates the version of the data expected by the endpoint.
 	// This
-	// controls the shape of the envelope (i.e. its fields and
+	// controls the shape of the pushed message (i.e., its fields and
 	// metadata).
-	// The endpoint version is based on the version of the Pub/Sub
-	// API.
+	// The endpoint version is based on the version of the Pub/Sub API.
 	//
 	// If not present during the `CreateSubscription` call, it will default
 	// to
@@ -1125,7 +1119,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	if c.ifNoneMatch_ != "" {
 		reqHeaders.Set("If-None-Match", c.ifNoneMatch_)
 	}
@@ -1188,7 +1181,7 @@
 	//   ],
 	//   "parameters": {
 	//     "resource": {
-	//       "description": "REQUIRED: The resource for which the policy is being requested.\n`resource` is usually specified as a path. For example, a Project\nresource is specified as `projects/{project}`.",
+	//       "description": "REQUIRED: The resource for which the policy is being requested.\nSee the operation documentation for the appropriate value for this field.",
 	//       "location": "path",
 	//       "pattern": "^projects/[^/]+/snapshots/[^/]+$",
 	//       "required": true,
@@ -1259,7 +1252,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	var body io.Reader = nil
 	body, err := googleapi.WithoutDataWrapper.JSONReader(c.setiampolicyrequest)
 	if err != nil {
@@ -1324,7 +1316,7 @@
 	//   ],
 	//   "parameters": {
 	//     "resource": {
-	//       "description": "REQUIRED: The resource for which the policy is being specified.\n`resource` is usually specified as a path. For example, a Project\nresource is specified as `projects/{project}`.",
+	//       "description": "REQUIRED: The resource for which the policy is being specified.\nSee the operation documentation for the appropriate value for this field.",
 	//       "location": "path",
 	//       "pattern": "^projects/[^/]+/snapshots/[^/]+$",
 	//       "required": true,
@@ -1406,7 +1398,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	var body io.Reader = nil
 	body, err := googleapi.WithoutDataWrapper.JSONReader(c.testiampermissionsrequest)
 	if err != nil {
@@ -1471,7 +1462,7 @@
 	//   ],
 	//   "parameters": {
 	//     "resource": {
-	//       "description": "REQUIRED: The resource for which the policy detail is being requested.\n`resource` is usually specified as a path. For example, a Project\nresource is specified as `projects/{project}`.",
+	//       "description": "REQUIRED: The resource for which the policy detail is being requested.\nSee the operation documentation for the appropriate value for this field.",
 	//       "location": "path",
 	//       "pattern": "^projects/[^/]+/snapshots/[^/]+$",
 	//       "required": true,
@@ -1553,7 +1544,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	var body io.Reader = nil
 	body, err := googleapi.WithoutDataWrapper.JSONReader(c.acknowledgerequest)
 	if err != nil {
@@ -1704,7 +1694,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	var body io.Reader = nil
 	body, err := googleapi.WithoutDataWrapper.JSONReader(c.subscription)
 	if err != nil {
@@ -1847,7 +1836,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	var body io.Reader = nil
 	c.urlParams_.Set("alt", alt)
 	urls := googleapi.ResolveRelative(c.s.BasePath, "v1/{+subscription}")
@@ -1985,7 +1973,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	if c.ifNoneMatch_ != "" {
 		reqHeaders.Set("If-None-Match", c.ifNoneMatch_)
 	}
@@ -2129,7 +2116,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	if c.ifNoneMatch_ != "" {
 		reqHeaders.Set("If-None-Match", c.ifNoneMatch_)
 	}
@@ -2192,7 +2178,7 @@
 	//   ],
 	//   "parameters": {
 	//     "resource": {
-	//       "description": "REQUIRED: The resource for which the policy is being requested.\n`resource` is usually specified as a path. For example, a Project\nresource is specified as `projects/{project}`.",
+	//       "description": "REQUIRED: The resource for which the policy is being requested.\nSee the operation documentation for the appropriate value for this field.",
 	//       "location": "path",
 	//       "pattern": "^projects/[^/]+/subscriptions/[^/]+$",
 	//       "required": true,
@@ -2287,7 +2273,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	if c.ifNoneMatch_ != "" {
 		reqHeaders.Set("If-None-Match", c.ifNoneMatch_)
 	}
@@ -2459,7 +2444,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	var body io.Reader = nil
 	body, err := googleapi.WithoutDataWrapper.JSONReader(c.modifyackdeadlinerequest)
 	if err != nil {
@@ -2606,7 +2590,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	var body io.Reader = nil
 	body, err := googleapi.WithoutDataWrapper.JSONReader(c.modifypushconfigrequest)
 	if err != nil {
@@ -2749,7 +2732,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	var body io.Reader = nil
 	body, err := googleapi.WithoutDataWrapper.JSONReader(c.pullrequest)
 	if err != nil {
@@ -2888,7 +2870,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	var body io.Reader = nil
 	body, err := googleapi.WithoutDataWrapper.JSONReader(c.setiampolicyrequest)
 	if err != nil {
@@ -2953,7 +2934,7 @@
 	//   ],
 	//   "parameters": {
 	//     "resource": {
-	//       "description": "REQUIRED: The resource for which the policy is being specified.\n`resource` is usually specified as a path. For example, a Project\nresource is specified as `projects/{project}`.",
+	//       "description": "REQUIRED: The resource for which the policy is being specified.\nSee the operation documentation for the appropriate value for this field.",
 	//       "location": "path",
 	//       "pattern": "^projects/[^/]+/subscriptions/[^/]+$",
 	//       "required": true,
@@ -3035,7 +3016,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	var body io.Reader = nil
 	body, err := googleapi.WithoutDataWrapper.JSONReader(c.testiampermissionsrequest)
 	if err != nil {
@@ -3100,7 +3080,7 @@
 	//   ],
 	//   "parameters": {
 	//     "resource": {
-	//       "description": "REQUIRED: The resource for which the policy detail is being requested.\n`resource` is usually specified as a path. For example, a Project\nresource is specified as `projects/{project}`.",
+	//       "description": "REQUIRED: The resource for which the policy detail is being requested.\nSee the operation documentation for the appropriate value for this field.",
 	//       "location": "path",
 	//       "pattern": "^projects/[^/]+/subscriptions/[^/]+$",
 	//       "required": true,
@@ -3172,7 +3152,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	var body io.Reader = nil
 	body, err := googleapi.WithoutDataWrapper.JSONReader(c.topic)
 	if err != nil {
@@ -3315,7 +3294,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	var body io.Reader = nil
 	c.urlParams_.Set("alt", alt)
 	urls := googleapi.ResolveRelative(c.s.BasePath, "v1/{+topic}")
@@ -3453,7 +3431,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	if c.ifNoneMatch_ != "" {
 		reqHeaders.Set("If-None-Match", c.ifNoneMatch_)
 	}
@@ -3597,7 +3574,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	if c.ifNoneMatch_ != "" {
 		reqHeaders.Set("If-None-Match", c.ifNoneMatch_)
 	}
@@ -3660,7 +3636,7 @@
 	//   ],
 	//   "parameters": {
 	//     "resource": {
-	//       "description": "REQUIRED: The resource for which the policy is being requested.\n`resource` is usually specified as a path. For example, a Project\nresource is specified as `projects/{project}`.",
+	//       "description": "REQUIRED: The resource for which the policy is being requested.\nSee the operation documentation for the appropriate value for this field.",
 	//       "location": "path",
 	//       "pattern": "^projects/[^/]+/topics/[^/]+$",
 	//       "required": true,
@@ -3755,7 +3731,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	if c.ifNoneMatch_ != "" {
 		reqHeaders.Set("If-None-Match", c.ifNoneMatch_)
 	}
@@ -3923,7 +3898,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	var body io.Reader = nil
 	body, err := googleapi.WithoutDataWrapper.JSONReader(c.publishrequest)
 	if err != nil {
@@ -4062,7 +4036,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	var body io.Reader = nil
 	body, err := googleapi.WithoutDataWrapper.JSONReader(c.setiampolicyrequest)
 	if err != nil {
@@ -4127,7 +4100,7 @@
 	//   ],
 	//   "parameters": {
 	//     "resource": {
-	//       "description": "REQUIRED: The resource for which the policy is being specified.\n`resource` is usually specified as a path. For example, a Project\nresource is specified as `projects/{project}`.",
+	//       "description": "REQUIRED: The resource for which the policy is being specified.\nSee the operation documentation for the appropriate value for this field.",
 	//       "location": "path",
 	//       "pattern": "^projects/[^/]+/topics/[^/]+$",
 	//       "required": true,
@@ -4209,7 +4182,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	var body io.Reader = nil
 	body, err := googleapi.WithoutDataWrapper.JSONReader(c.testiampermissionsrequest)
 	if err != nil {
@@ -4274,7 +4246,7 @@
 	//   ],
 	//   "parameters": {
 	//     "resource": {
-	//       "description": "REQUIRED: The resource for which the policy detail is being requested.\n`resource` is usually specified as a path. For example, a Project\nresource is specified as `projects/{project}`.",
+	//       "description": "REQUIRED: The resource for which the policy detail is being requested.\nSee the operation documentation for the appropriate value for this field.",
 	//       "location": "path",
 	//       "pattern": "^projects/[^/]+/topics/[^/]+$",
 	//       "required": true,
@@ -4372,7 +4344,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	if c.ifNoneMatch_ != "" {
 		reqHeaders.Set("If-None-Match", c.ifNoneMatch_)
 	}
diff --git a/pubsub/v1beta1a/pubsub-api.json b/pubsub/v1beta1a/pubsub-api.json
index c57abf6..af5e670 100644
--- a/pubsub/v1beta1a/pubsub-api.json
+++ b/pubsub/v1beta1a/pubsub-api.json
@@ -1,261 +1,54 @@
 {
-  "batchPath": "batch",
-  "revision": "20170214",
-  "documentationLink": "https://cloud.google.com/pubsub/docs",
-  "id": "pubsub:v1beta1a",
   "title": "Google Cloud Pub/Sub API",
   "discoveryVersion": "v1",
   "ownerName": "Google",
   "resources": {
-    "subscriptions": {
-      "methods": {
-        "modifyAckDeadline": {
-          "description": "Modifies the Ack deadline for a message received from a pull request.",
-          "request": {
-            "$ref": "ModifyAckDeadlineRequest"
-          },
-          "httpMethod": "POST",
-          "parameterOrder": [],
-          "response": {
-            "$ref": "Empty"
-          },
-          "scopes": [
-            "https://www.googleapis.com/auth/cloud-platform",
-            "https://www.googleapis.com/auth/pubsub"
-          ],
-          "parameters": {},
-          "flatPath": "v1beta1a/subscriptions/modifyAckDeadline",
-          "id": "pubsub.subscriptions.modifyAckDeadline",
-          "path": "v1beta1a/subscriptions/modifyAckDeadline"
-        },
-        "acknowledge": {
-          "httpMethod": "POST",
-          "parameterOrder": [],
-          "response": {
-            "$ref": "Empty"
-          },
-          "parameters": {},
-          "scopes": [
-            "https://www.googleapis.com/auth/cloud-platform",
-            "https://www.googleapis.com/auth/pubsub"
-          ],
-          "flatPath": "v1beta1a/subscriptions/acknowledge",
-          "id": "pubsub.subscriptions.acknowledge",
-          "path": "v1beta1a/subscriptions/acknowledge",
-          "request": {
-            "$ref": "AcknowledgeRequest"
-          },
-          "description": "Acknowledges a particular received message: the Pub/Sub system can remove\nthe given message from the subscription. Acknowledging a message whose\nAck deadline has expired may succeed, but the message could have been\nalready redelivered. Acknowledging a message more than once will not\nresult in an error. This is only used for messages received via pull."
-        },
-        "pullBatch": {
-          "description": "Pulls messages from the server. Returns an empty list if there are no\nmessages available in the backlog. The system is free to return UNAVAILABLE\nif there are too many pull requests outstanding for the given subscription.",
-          "request": {
-            "$ref": "PullBatchRequest"
-          },
-          "httpMethod": "POST",
-          "parameterOrder": [],
-          "response": {
-            "$ref": "PullBatchResponse"
-          },
-          "scopes": [
-            "https://www.googleapis.com/auth/cloud-platform",
-            "https://www.googleapis.com/auth/pubsub"
-          ],
-          "parameters": {},
-          "flatPath": "v1beta1a/subscriptions/pullBatch",
-          "id": "pubsub.subscriptions.pullBatch",
-          "path": "v1beta1a/subscriptions/pullBatch"
-        },
-        "get": {
-          "description": "Gets the configuration details of a subscription.",
-          "response": {
-            "$ref": "Subscription"
-          },
-          "parameterOrder": [
-            "subscription"
-          ],
-          "httpMethod": "GET",
-          "parameters": {
-            "subscription": {
-              "description": "The name of the subscription to get.",
-              "required": true,
-              "type": "string",
-              "pattern": "^.+$",
-              "location": "path"
-            }
-          },
-          "scopes": [
-            "https://www.googleapis.com/auth/cloud-platform",
-            "https://www.googleapis.com/auth/pubsub"
-          ],
-          "flatPath": "v1beta1a/subscriptions/{subscriptionsId}",
-          "path": "v1beta1a/subscriptions/{+subscription}",
-          "id": "pubsub.subscriptions.get"
-        },
-        "modifyPushConfig": {
-          "flatPath": "v1beta1a/subscriptions/modifyPushConfig",
-          "id": "pubsub.subscriptions.modifyPushConfig",
-          "path": "v1beta1a/subscriptions/modifyPushConfig",
-          "request": {
-            "$ref": "ModifyPushConfigRequest"
-          },
-          "description": "Modifies the \u003ccode\u003ePushConfig\u003c/code\u003e for a specified subscription.\nThis method can be used to suspend the flow of messages to an endpoint\nby clearing the \u003ccode\u003ePushConfig\u003c/code\u003e field in the request. Messages\nwill be accumulated for delivery even if no push configuration is\ndefined or while the configuration is modified.",
-          "httpMethod": "POST",
-          "parameterOrder": [],
-          "response": {
-            "$ref": "Empty"
-          },
-          "parameters": {},
-          "scopes": [
-            "https://www.googleapis.com/auth/cloud-platform",
-            "https://www.googleapis.com/auth/pubsub"
-          ]
-        },
-        "pull": {
-          "description": "Pulls a single message from the server.\nIf return_immediately is true, and no messages are available in the\nsubscription, this method returns FAILED_PRECONDITION. The system is free\nto return an UNAVAILABLE error if no messages are available in a\nreasonable amount of time (to reduce system load).",
-          "request": {
-            "$ref": "PullRequest"
-          },
-          "response": {
-            "$ref": "PullResponse"
-          },
-          "parameterOrder": [],
-          "httpMethod": "POST",
-          "scopes": [
-            "https://www.googleapis.com/auth/cloud-platform",
-            "https://www.googleapis.com/auth/pubsub"
-          ],
-          "parameters": {},
-          "flatPath": "v1beta1a/subscriptions/pull",
-          "path": "v1beta1a/subscriptions/pull",
-          "id": "pubsub.subscriptions.pull"
-        },
-        "delete": {
-          "description": "Deletes an existing subscription. All pending messages in the subscription\nare immediately dropped. Calls to Pull after deletion will return\nNOT_FOUND.",
-          "httpMethod": "DELETE",
-          "parameterOrder": [
-            "subscription"
-          ],
-          "response": {
-            "$ref": "Empty"
-          },
-          "parameters": {
-            "subscription": {
-              "location": "path",
-              "description": "The subscription to delete.",
-              "required": true,
-              "type": "string",
-              "pattern": "^.+$"
-            }
-          },
-          "scopes": [
-            "https://www.googleapis.com/auth/cloud-platform",
-            "https://www.googleapis.com/auth/pubsub"
-          ],
-          "flatPath": "v1beta1a/subscriptions/{subscriptionsId}",
-          "id": "pubsub.subscriptions.delete",
-          "path": "v1beta1a/subscriptions/{+subscription}"
-        },
-        "list": {
-          "description": "Lists matching subscriptions.",
-          "response": {
-            "$ref": "ListSubscriptionsResponse"
-          },
-          "parameterOrder": [],
-          "httpMethod": "GET",
-          "parameters": {
-            "pageToken": {
-              "location": "query",
-              "description": "The value obtained in the last \u003ccode\u003eListSubscriptionsResponse\u003c/code\u003e\nfor continuation.",
-              "type": "string"
-            },
-            "query": {
-              "location": "query",
-              "description": "A valid label query expression.",
-              "type": "string"
-            },
-            "maxResults": {
-              "description": "Maximum number of subscriptions to return.",
-              "format": "int32",
-              "type": "integer",
-              "location": "query"
-            }
-          },
-          "scopes": [
-            "https://www.googleapis.com/auth/cloud-platform",
-            "https://www.googleapis.com/auth/pubsub"
-          ],
-          "flatPath": "v1beta1a/subscriptions",
-          "path": "v1beta1a/subscriptions",
-          "id": "pubsub.subscriptions.list"
-        },
-        "create": {
-          "request": {
-            "$ref": "Subscription"
-          },
-          "description": "Creates a subscription on a given topic for a given subscriber.\nIf the subscription already exists, returns ALREADY_EXISTS.\nIf the corresponding topic doesn't exist, returns NOT_FOUND.\n\nIf the name is not provided in the request, the server will assign a random\nname for this subscription on the same project as the topic.",
-          "httpMethod": "POST",
-          "parameterOrder": [],
-          "response": {
-            "$ref": "Subscription"
-          },
-          "parameters": {},
-          "scopes": [
-            "https://www.googleapis.com/auth/cloud-platform",
-            "https://www.googleapis.com/auth/pubsub"
-          ],
-          "flatPath": "v1beta1a/subscriptions",
-          "id": "pubsub.subscriptions.create",
-          "path": "v1beta1a/subscriptions"
-        }
-      }
-    },
     "topics": {
       "methods": {
         "get": {
           "description": "Gets the configuration of a topic. Since the topic only has the name\nattribute, this method is only useful to check the existence of a topic.\nIf other attributes are added in the future, they will be returned here.",
-          "response": {
-            "$ref": "Topic"
-          },
+          "httpMethod": "GET",
           "parameterOrder": [
             "topic"
           ],
-          "httpMethod": "GET",
+          "response": {
+            "$ref": "Topic"
+          },
           "scopes": [
             "https://www.googleapis.com/auth/cloud-platform",
             "https://www.googleapis.com/auth/pubsub"
           ],
           "parameters": {
             "topic": {
-              "location": "path",
               "description": "The name of the topic to get.",
               "required": true,
               "type": "string",
-              "pattern": "^.+$"
+              "pattern": "^.+$",
+              "location": "path"
             }
           },
           "flatPath": "v1beta1a/topics/{topicsId}",
-          "path": "v1beta1a/topics/{+topic}",
-          "id": "pubsub.topics.get"
+          "id": "pubsub.topics.get",
+          "path": "v1beta1a/topics/{+topic}"
         },
         "publish": {
-          "request": {
-            "$ref": "PublishRequest"
-          },
-          "description": "Adds a message to the topic.  Returns NOT_FOUND if the topic does not\nexist.",
-          "httpMethod": "POST",
-          "parameterOrder": [],
           "response": {
             "$ref": "Empty"
           },
+          "parameterOrder": [],
+          "httpMethod": "POST",
           "parameters": {},
           "scopes": [
             "https://www.googleapis.com/auth/cloud-platform",
             "https://www.googleapis.com/auth/pubsub"
           ],
           "flatPath": "v1beta1a/topics/publish",
+          "path": "v1beta1a/topics/publish",
           "id": "pubsub.topics.publish",
-          "path": "v1beta1a/topics/publish"
+          "request": {
+            "$ref": "PublishRequest"
+          },
+          "description": "Adds a message to the topic.  Returns NOT_FOUND if the topic does not\nexist."
         },
         "delete": {
           "description": "Deletes the topic with the given name. Returns NOT_FOUND if the topic does\nnot exist. After a topic is deleted, a new topic may be created with the\nsame name.",
@@ -266,6 +59,10 @@
             "topic"
           ],
           "httpMethod": "DELETE",
+          "scopes": [
+            "https://www.googleapis.com/auth/cloud-platform",
+            "https://www.googleapis.com/auth/pubsub"
+          ],
           "parameters": {
             "topic": {
               "location": "path",
@@ -275,39 +72,39 @@
               "pattern": "^.+$"
             }
           },
-          "scopes": [
-            "https://www.googleapis.com/auth/cloud-platform",
-            "https://www.googleapis.com/auth/pubsub"
-          ],
           "flatPath": "v1beta1a/topics/{topicsId}",
           "path": "v1beta1a/topics/{+topic}",
           "id": "pubsub.topics.delete"
         },
         "publishBatch": {
+          "flatPath": "v1beta1a/topics/publishBatch",
+          "path": "v1beta1a/topics/publishBatch",
+          "id": "pubsub.topics.publishBatch",
+          "request": {
+            "$ref": "PublishBatchRequest"
+          },
+          "description": "Adds one or more messages to the topic. Returns NOT_FOUND if the topic does\nnot exist.",
           "response": {
             "$ref": "PublishBatchResponse"
           },
           "parameterOrder": [],
           "httpMethod": "POST",
+          "parameters": {},
           "scopes": [
             "https://www.googleapis.com/auth/cloud-platform",
             "https://www.googleapis.com/auth/pubsub"
-          ],
-          "parameters": {},
-          "flatPath": "v1beta1a/topics/publishBatch",
-          "path": "v1beta1a/topics/publishBatch",
-          "id": "pubsub.topics.publishBatch",
-          "description": "Adds one or more messages to the topic. Returns NOT_FOUND if the topic does\nnot exist.",
-          "request": {
-            "$ref": "PublishBatchRequest"
-          }
+          ]
         },
         "list": {
-          "httpMethod": "GET",
+          "flatPath": "v1beta1a/topics",
+          "path": "v1beta1a/topics",
+          "id": "pubsub.topics.list",
+          "description": "Lists matching topics.",
           "response": {
             "$ref": "ListTopicsResponse"
           },
           "parameterOrder": [],
+          "httpMethod": "GET",
           "parameters": {
             "pageToken": {
               "location": "query",
@@ -320,108 +117,252 @@
               "type": "string"
             },
             "maxResults": {
+              "location": "query",
               "description": "Maximum number of topics to return.",
               "format": "int32",
-              "type": "integer",
-              "location": "query"
+              "type": "integer"
             }
           },
           "scopes": [
             "https://www.googleapis.com/auth/cloud-platform",
             "https://www.googleapis.com/auth/pubsub"
-          ],
-          "flatPath": "v1beta1a/topics",
-          "id": "pubsub.topics.list",
-          "path": "v1beta1a/topics",
-          "description": "Lists matching topics."
+          ]
         },
         "create": {
           "description": "Creates the given topic with the given name.",
           "request": {
             "$ref": "Topic"
           },
-          "httpMethod": "POST",
-          "parameterOrder": [],
           "response": {
             "$ref": "Topic"
           },
+          "parameterOrder": [],
+          "httpMethod": "POST",
           "scopes": [
             "https://www.googleapis.com/auth/cloud-platform",
             "https://www.googleapis.com/auth/pubsub"
           ],
           "parameters": {},
           "flatPath": "v1beta1a/topics",
-          "id": "pubsub.topics.create",
-          "path": "v1beta1a/topics"
+          "path": "v1beta1a/topics",
+          "id": "pubsub.topics.create"
+        }
+      }
+    },
+    "subscriptions": {
+      "methods": {
+        "acknowledge": {
+          "description": "Acknowledges a particular received message: the Pub/Sub system can remove\nthe given message from the subscription. Acknowledging a message whose\nAck deadline has expired may succeed, but the message could have been\nalready redelivered. Acknowledging a message more than once will not\nresult in an error. This is only used for messages received via pull.",
+          "request": {
+            "$ref": "AcknowledgeRequest"
+          },
+          "response": {
+            "$ref": "Empty"
+          },
+          "parameterOrder": [],
+          "httpMethod": "POST",
+          "scopes": [
+            "https://www.googleapis.com/auth/cloud-platform",
+            "https://www.googleapis.com/auth/pubsub"
+          ],
+          "parameters": {},
+          "flatPath": "v1beta1a/subscriptions/acknowledge",
+          "path": "v1beta1a/subscriptions/acknowledge",
+          "id": "pubsub.subscriptions.acknowledge"
+        },
+        "modifyAckDeadline": {
+          "flatPath": "v1beta1a/subscriptions/modifyAckDeadline",
+          "id": "pubsub.subscriptions.modifyAckDeadline",
+          "path": "v1beta1a/subscriptions/modifyAckDeadline",
+          "request": {
+            "$ref": "ModifyAckDeadlineRequest"
+          },
+          "description": "Modifies the Ack deadline for a message received from a pull request.",
+          "httpMethod": "POST",
+          "parameterOrder": [],
+          "response": {
+            "$ref": "Empty"
+          },
+          "parameters": {},
+          "scopes": [
+            "https://www.googleapis.com/auth/cloud-platform",
+            "https://www.googleapis.com/auth/pubsub"
+          ]
+        },
+        "get": {
+          "flatPath": "v1beta1a/subscriptions/{subscriptionsId}",
+          "id": "pubsub.subscriptions.get",
+          "path": "v1beta1a/subscriptions/{+subscription}",
+          "description": "Gets the configuration details of a subscription.",
+          "httpMethod": "GET",
+          "parameterOrder": [
+            "subscription"
+          ],
+          "response": {
+            "$ref": "Subscription"
+          },
+          "scopes": [
+            "https://www.googleapis.com/auth/cloud-platform",
+            "https://www.googleapis.com/auth/pubsub"
+          ],
+          "parameters": {
+            "subscription": {
+              "location": "path",
+              "description": "The name of the subscription to get.",
+              "required": true,
+              "type": "string",
+              "pattern": "^.+$"
+            }
+          }
+        },
+        "pullBatch": {
+          "flatPath": "v1beta1a/subscriptions/pullBatch",
+          "id": "pubsub.subscriptions.pullBatch",
+          "path": "v1beta1a/subscriptions/pullBatch",
+          "request": {
+            "$ref": "PullBatchRequest"
+          },
+          "description": "Pulls messages from the server. Returns an empty list if there are no\nmessages available in the backlog. The system is free to return UNAVAILABLE\nif there are too many pull requests outstanding for the given subscription.",
+          "httpMethod": "POST",
+          "parameterOrder": [],
+          "response": {
+            "$ref": "PullBatchResponse"
+          },
+          "parameters": {},
+          "scopes": [
+            "https://www.googleapis.com/auth/cloud-platform",
+            "https://www.googleapis.com/auth/pubsub"
+          ]
+        },
+        "modifyPushConfig": {
+          "httpMethod": "POST",
+          "parameterOrder": [],
+          "response": {
+            "$ref": "Empty"
+          },
+          "parameters": {},
+          "scopes": [
+            "https://www.googleapis.com/auth/cloud-platform",
+            "https://www.googleapis.com/auth/pubsub"
+          ],
+          "flatPath": "v1beta1a/subscriptions/modifyPushConfig",
+          "id": "pubsub.subscriptions.modifyPushConfig",
+          "path": "v1beta1a/subscriptions/modifyPushConfig",
+          "request": {
+            "$ref": "ModifyPushConfigRequest"
+          },
+          "description": "Modifies the \u003ccode\u003ePushConfig\u003c/code\u003e for a specified subscription.\nThis method can be used to suspend the flow of messages to an endpoint\nby clearing the \u003ccode\u003ePushConfig\u003c/code\u003e field in the request. Messages\nwill be accumulated for delivery even if no push configuration is\ndefined or while the configuration is modified."
+        },
+        "delete": {
+          "response": {
+            "$ref": "Empty"
+          },
+          "parameterOrder": [
+            "subscription"
+          ],
+          "httpMethod": "DELETE",
+          "scopes": [
+            "https://www.googleapis.com/auth/cloud-platform",
+            "https://www.googleapis.com/auth/pubsub"
+          ],
+          "parameters": {
+            "subscription": {
+              "location": "path",
+              "description": "The subscription to delete.",
+              "required": true,
+              "type": "string",
+              "pattern": "^.+$"
+            }
+          },
+          "flatPath": "v1beta1a/subscriptions/{subscriptionsId}",
+          "path": "v1beta1a/subscriptions/{+subscription}",
+          "id": "pubsub.subscriptions.delete",
+          "description": "Deletes an existing subscription. All pending messages in the subscription\nare immediately dropped. Calls to Pull after deletion will return\nNOT_FOUND."
+        },
+        "pull": {
+          "request": {
+            "$ref": "PullRequest"
+          },
+          "description": "Pulls a single message from the server.\nIf return_immediately is true, and no messages are available in the\nsubscription, this method returns FAILED_PRECONDITION. The system is free\nto return an UNAVAILABLE error if no messages are available in a\nreasonable amount of time (to reduce system load).",
+          "response": {
+            "$ref": "PullResponse"
+          },
+          "parameterOrder": [],
+          "httpMethod": "POST",
+          "parameters": {},
+          "scopes": [
+            "https://www.googleapis.com/auth/cloud-platform",
+            "https://www.googleapis.com/auth/pubsub"
+          ],
+          "flatPath": "v1beta1a/subscriptions/pull",
+          "path": "v1beta1a/subscriptions/pull",
+          "id": "pubsub.subscriptions.pull"
+        },
+        "list": {
+          "description": "Lists matching subscriptions.",
+          "response": {
+            "$ref": "ListSubscriptionsResponse"
+          },
+          "parameterOrder": [],
+          "httpMethod": "GET",
+          "scopes": [
+            "https://www.googleapis.com/auth/cloud-platform",
+            "https://www.googleapis.com/auth/pubsub"
+          ],
+          "parameters": {
+            "query": {
+              "description": "A valid label query expression.",
+              "type": "string",
+              "location": "query"
+            },
+            "maxResults": {
+              "description": "Maximum number of subscriptions to return.",
+              "format": "int32",
+              "type": "integer",
+              "location": "query"
+            },
+            "pageToken": {
+              "description": "The value obtained in the last \u003ccode\u003eListSubscriptionsResponse\u003c/code\u003e\nfor continuation.",
+              "type": "string",
+              "location": "query"
+            }
+          },
+          "flatPath": "v1beta1a/subscriptions",
+          "path": "v1beta1a/subscriptions",
+          "id": "pubsub.subscriptions.list"
+        },
+        "create": {
+          "httpMethod": "POST",
+          "parameterOrder": [],
+          "response": {
+            "$ref": "Subscription"
+          },
+          "parameters": {},
+          "scopes": [
+            "https://www.googleapis.com/auth/cloud-platform",
+            "https://www.googleapis.com/auth/pubsub"
+          ],
+          "flatPath": "v1beta1a/subscriptions",
+          "id": "pubsub.subscriptions.create",
+          "path": "v1beta1a/subscriptions",
+          "request": {
+            "$ref": "Subscription"
+          },
+          "description": "Creates a subscription on a given topic for a given subscriber.\nIf the subscription already exists, returns ALREADY_EXISTS.\nIf the corresponding topic doesn't exist, returns NOT_FOUND.\n\nIf the name is not provided in the request, the server will assign a random\nname for this subscription on the same project as the topic."
         }
       }
     }
   },
   "parameters": {
-    "upload_protocol": {
-      "description": "Upload protocol for media (e.g. \"raw\", \"multipart\").",
-      "type": "string",
-      "location": "query"
-    },
-    "prettyPrint": {
-      "location": "query",
-      "description": "Returns response with indentations and line breaks.",
-      "type": "boolean",
-      "default": "true"
-    },
-    "fields": {
-      "description": "Selector specifying which fields to include in a partial response.",
-      "type": "string",
-      "location": "query"
-    },
-    "uploadType": {
-      "location": "query",
-      "description": "Legacy upload protocol for media (e.g. \"media\", \"multipart\").",
-      "type": "string"
-    },
-    "$.xgafv": {
-      "enumDescriptions": [
-        "v1 error format",
-        "v2 error format"
-      ],
-      "location": "query",
-      "enum": [
-        "1",
-        "2"
-      ],
-      "description": "V1 error format.",
-      "type": "string"
-    },
-    "callback": {
-      "location": "query",
-      "description": "JSONP",
-      "type": "string"
-    },
-    "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"
-    },
     "access_token": {
+      "location": "query",
       "description": "OAuth access token.",
-      "type": "string",
-      "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"
+      "type": "string",
+      "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.",
@@ -435,28 +376,72 @@
       "default": "true"
     },
     "oauth_token": {
-      "location": "query",
       "description": "OAuth 2.0 token for the current user.",
-      "type": "string"
-    },
-    "bearer_token": {
-      "description": "OAuth bearer token.",
       "type": "string",
       "location": "query"
+    },
+    "bearer_token": {
+      "location": "query",
+      "description": "OAuth bearer token.",
+      "type": "string"
+    },
+    "upload_protocol": {
+      "description": "Upload protocol for media (e.g. \"raw\", \"multipart\").",
+      "type": "string",
+      "location": "query"
+    },
+    "prettyPrint": {
+      "location": "query",
+      "description": "Returns response with indentations and line breaks.",
+      "type": "boolean",
+      "default": "true"
+    },
+    "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\").",
+      "type": "string",
+      "location": "query"
+    },
+    "$.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": {
+      "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",
+      "enum": [
+        "json",
+        "media",
+        "proto"
+      ],
+      "type": "string"
     }
   },
   "schemas": {
-    "Topic": {
-      "description": "A topic resource.",
-      "type": "object",
-      "properties": {
-        "name": {
-          "description": "Name of the topic.",
-          "type": "string"
-        }
-      },
-      "id": "Topic"
-    },
     "Label": {
       "description": "A key-value pair applied to a given object.",
       "type": "object",
@@ -508,6 +493,11 @@
       "description": "Request for the PullBatch method.",
       "type": "object",
       "properties": {
+        "maxEvents": {
+          "description": "The maximum number of PubsubEvents returned for this request. The Pub/Sub\nsystem may return fewer than the number of events specified.",
+          "format": "int32",
+          "type": "integer"
+        },
         "subscription": {
           "description": "The subscription from which messages should be pulled.",
           "type": "string"
@@ -515,30 +505,10 @@
         "returnImmediately": {
           "description": "If this is specified as true the system will respond immediately even if\nit is not able to return a message in the Pull response. Otherwise the\nsystem is allowed to wait until at least one message is available rather\nthan returning no messages. The client may cancel the request if it does\nnot wish to wait any longer for the response.",
           "type": "boolean"
-        },
-        "maxEvents": {
-          "description": "The maximum number of PubsubEvents returned for this request. The Pub/Sub\nsystem may return fewer than the number of events specified.",
-          "format": "int32",
-          "type": "integer"
         }
       },
       "id": "PullBatchRequest"
     },
-    "ModifyPushConfigRequest": {
-      "description": "Request for the ModifyPushConfig method.",
-      "type": "object",
-      "properties": {
-        "pushConfig": {
-          "description": "An empty \u003ccode\u003epush_config\u003c/code\u003e indicates that the Pub/Sub system should\npause pushing messages from the given subscription.",
-          "$ref": "PushConfig"
-        },
-        "subscription": {
-          "description": "The name of the subscription.",
-          "type": "string"
-        }
-      },
-      "id": "ModifyPushConfigRequest"
-    },
     "PubsubMessage": {
       "description": "A message data and its labels.",
       "type": "object",
@@ -567,6 +537,21 @@
       },
       "id": "PubsubMessage"
     },
+    "ModifyPushConfigRequest": {
+      "description": "Request for the ModifyPushConfig method.",
+      "type": "object",
+      "properties": {
+        "subscription": {
+          "description": "The name of the subscription.",
+          "type": "string"
+        },
+        "pushConfig": {
+          "description": "An empty \u003ccode\u003epush_config\u003c/code\u003e indicates that the Pub/Sub system should\npause pushing messages from the given subscription.",
+          "$ref": "PushConfig"
+        }
+      },
+      "id": "ModifyPushConfigRequest"
+    },
     "Empty": {
       "description": "An empty message that you can re-use to avoid defining duplicated empty\nmessages in your project. A typical example is to use it as argument or the\nreturn value of a service API. For instance:\n\n  service Foo {\n    rpc Bar (proto2.Empty) returns (proto2.Empty) { };\n  };\n\nBEGIN GOOGLE-INTERNAL\nThe difference between this one and net/rpc/empty-message.proto is that\n1) The generated message here is in proto2 C++ API.\n2) The proto2.Empty has minimum dependencies\n   (no message_set or net/rpc dependencies)\nEND GOOGLE-INTERNAL",
       "type": "object",
@@ -609,16 +594,16 @@
       "description": "Request for the PublishBatch method.",
       "type": "object",
       "properties": {
+        "topic": {
+          "description": "The messages in the request will be published on this topic.",
+          "type": "string"
+        },
         "messages": {
           "description": "The messages to publish.",
           "type": "array",
           "items": {
             "$ref": "PubsubMessage"
           }
-        },
-        "topic": {
-          "description": "The messages in the request will be published on this topic.",
-          "type": "string"
         }
       },
       "id": "PublishBatchRequest"
@@ -650,8 +635,8 @@
           "type": "string"
         },
         "pubsubEvent": {
-          "$ref": "PubsubEvent",
-          "description": "A pubsub message or truncation event."
+          "description": "A pubsub message or truncation event.",
+          "$ref": "PubsubEvent"
         }
       },
       "id": "PullResponse"
@@ -682,24 +667,6 @@
       },
       "id": "PullRequest"
     },
-    "ListSubscriptionsResponse": {
-      "description": "Response for the ListSubscriptions method.",
-      "type": "object",
-      "properties": {
-        "subscription": {
-          "description": "The subscriptions that match the request.",
-          "type": "array",
-          "items": {
-            "$ref": "Subscription"
-          }
-        },
-        "nextPageToken": {
-          "description": "If not empty, indicates that there are more subscriptions that match the\nrequest and this value should be passed to the next\n\u003ccode\u003eListSubscriptionsRequest\u003c/code\u003e to continue.",
-          "type": "string"
-        }
-      },
-      "id": "ListSubscriptionsResponse"
-    },
     "PubsubEvent": {
       "description": "An event indicating a received message or truncation event.",
       "type": "object",
@@ -723,6 +690,24 @@
       },
       "id": "PubsubEvent"
     },
+    "ListSubscriptionsResponse": {
+      "description": "Response for the ListSubscriptions method.",
+      "type": "object",
+      "properties": {
+        "subscription": {
+          "description": "The subscriptions that match the request.",
+          "type": "array",
+          "items": {
+            "$ref": "Subscription"
+          }
+        },
+        "nextPageToken": {
+          "description": "If not empty, indicates that there are more subscriptions that match the\nrequest and this value should be passed to the next\n\u003ccode\u003eListSubscriptionsRequest\u003c/code\u003e to continue.",
+          "type": "string"
+        }
+      },
+      "id": "ListSubscriptionsResponse"
+    },
     "PublishRequest": {
       "description": "Request for the Publish method.",
       "type": "object",
@@ -732,8 +717,8 @@
           "type": "string"
         },
         "message": {
-          "description": "The message to publish.",
-          "$ref": "PubsubMessage"
+          "$ref": "PubsubMessage",
+          "description": "The message to publish."
         }
       },
       "id": "PublishRequest"
@@ -775,13 +760,24 @@
         }
       },
       "id": "Subscription"
+    },
+    "Topic": {
+      "description": "A topic resource.",
+      "type": "object",
+      "properties": {
+        "name": {
+          "description": "Name of the topic.",
+          "type": "string"
+        }
+      },
+      "id": "Topic"
     }
   },
+  "protocol": "rest",
   "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",
   "version": "v1beta1a",
   "baseUrl": "https://pubsub.googleapis.com/",
   "canonicalName": "Pubsub",
@@ -797,11 +793,15 @@
       }
     }
   },
-  "servicePath": "",
   "kind": "discovery#restDescription",
   "description": "Provides reliable, many-to-many, asynchronous messaging between applications.\n",
+  "servicePath": "",
   "rootUrl": "https://pubsub.googleapis.com/",
   "basePath": "",
   "ownerDomain": "google.com",
-  "name": "pubsub"
+  "name": "pubsub",
+  "batchPath": "batch",
+  "revision": "20170308",
+  "documentationLink": "https://cloud.google.com/pubsub/docs",
+  "id": "pubsub:v1beta1a"
 }
diff --git a/pubsub/v1beta1a/pubsub-gen.go b/pubsub/v1beta1a/pubsub-gen.go
index faa6272..dd370e1 100644
--- a/pubsub/v1beta1a/pubsub-gen.go
+++ b/pubsub/v1beta1a/pubsub-gen.go
@@ -65,10 +65,9 @@
 }
 
 type Service struct {
-	client                    *http.Client
-	BasePath                  string // API endpoint base URL
-	UserAgent                 string // optional additional User-Agent fragment
-	GoogleClientHeaderElement string // client header fragment, for Google use only
+	client    *http.Client
+	BasePath  string // API endpoint base URL
+	UserAgent string // optional additional User-Agent fragment
 
 	Subscriptions *SubscriptionsService
 
@@ -82,10 +81,6 @@
 	return googleapi.UserAgent + " " + s.UserAgent
 }
 
-func (s *Service) clientHeader() string {
-	return gensupport.GoogleClientHeader("20170210", s.GoogleClientHeaderElement)
-}
-
 func NewSubscriptionsService(s *Service) *SubscriptionsService {
 	rs := &SubscriptionsService{s: s}
 	return rs
@@ -920,7 +915,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	var body io.Reader = nil
 	body, err := googleapi.WithoutDataWrapper.JSONReader(c.acknowledgerequest)
 	if err != nil {
@@ -1049,7 +1043,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	var body io.Reader = nil
 	body, err := googleapi.WithoutDataWrapper.JSONReader(c.subscription)
 	if err != nil {
@@ -1175,7 +1168,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	var body io.Reader = nil
 	c.urlParams_.Set("alt", alt)
 	urls := googleapi.ResolveRelative(c.s.BasePath, "v1beta1a/subscriptions/{+subscription}")
@@ -1313,7 +1305,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	if c.ifNoneMatch_ != "" {
 		reqHeaders.Set("If-None-Match", c.ifNoneMatch_)
 	}
@@ -1474,7 +1465,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	if c.ifNoneMatch_ != "" {
 		reqHeaders.Set("If-None-Match", c.ifNoneMatch_)
 	}
@@ -1630,7 +1620,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	var body io.Reader = nil
 	body, err := googleapi.WithoutDataWrapper.JSONReader(c.modifyackdeadlinerequest)
 	if err != nil {
@@ -1760,7 +1749,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	var body io.Reader = nil
 	body, err := googleapi.WithoutDataWrapper.JSONReader(c.modifypushconfigrequest)
 	if err != nil {
@@ -1889,7 +1877,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	var body io.Reader = nil
 	body, err := googleapi.WithoutDataWrapper.JSONReader(c.pullrequest)
 	if err != nil {
@@ -2016,7 +2003,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	var body io.Reader = nil
 	body, err := googleapi.WithoutDataWrapper.JSONReader(c.pullbatchrequest)
 	if err != nil {
@@ -2138,7 +2124,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	var body io.Reader = nil
 	body, err := googleapi.WithoutDataWrapper.JSONReader(c.topic)
 	if err != nil {
@@ -2264,7 +2249,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	var body io.Reader = nil
 	c.urlParams_.Set("alt", alt)
 	urls := googleapi.ResolveRelative(c.s.BasePath, "v1beta1a/topics/{+topic}")
@@ -2407,7 +2391,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	if c.ifNoneMatch_ != "" {
 		reqHeaders.Set("If-None-Match", c.ifNoneMatch_)
 	}
@@ -2568,7 +2551,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	if c.ifNoneMatch_ != "" {
 		reqHeaders.Set("If-None-Match", c.ifNoneMatch_)
 	}
@@ -2725,7 +2707,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	var body io.Reader = nil
 	body, err := googleapi.WithoutDataWrapper.JSONReader(c.publishrequest)
 	if err != nil {
@@ -2849,7 +2830,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	var body io.Reader = nil
 	body, err := googleapi.WithoutDataWrapper.JSONReader(c.publishbatchrequest)
 	if err != nil {
diff --git a/pubsub/v1beta2/pubsub-api.json b/pubsub/v1beta2/pubsub-api.json
index b5bdd64..eeaac7b 100644
--- a/pubsub/v1beta2/pubsub-api.json
+++ b/pubsub/v1beta2/pubsub-api.json
@@ -1,9 +1,343 @@
 {
-  "ownerName": "Google",
+  "kind": "discovery#restDescription",
+  "servicePath": "",
+  "description": "Provides reliable, many-to-many, asynchronous messaging between applications.\n",
+  "rootUrl": "https://pubsub.googleapis.com/",
+  "basePath": "",
+  "ownerDomain": "google.com",
+  "name": "pubsub",
+  "batchPath": "batch",
+  "revision": "20170308",
+  "documentationLink": "https://cloud.google.com/pubsub/docs",
+  "id": "pubsub:v1beta2",
+  "title": "Google Cloud Pub/Sub API",
   "discoveryVersion": "v1",
+  "ownerName": "Google",
   "resources": {
     "projects": {
       "resources": {
+        "subscriptions": {
+          "methods": {
+            "get": {
+              "httpMethod": "GET",
+              "parameterOrder": [
+                "subscription"
+              ],
+              "response": {
+                "$ref": "Subscription"
+              },
+              "parameters": {
+                "subscription": {
+                  "description": "The name of the subscription to get.",
+                  "required": true,
+                  "type": "string",
+                  "pattern": "^projects/[^/]+/subscriptions/[^/]+$",
+                  "location": "path"
+                }
+              },
+              "scopes": [
+                "https://www.googleapis.com/auth/cloud-platform",
+                "https://www.googleapis.com/auth/pubsub"
+              ],
+              "flatPath": "v1beta2/projects/{projectsId}/subscriptions/{subscriptionsId}",
+              "id": "pubsub.projects.subscriptions.get",
+              "path": "v1beta2/{+subscription}",
+              "description": "Gets the configuration details of a subscription."
+            },
+            "testIamPermissions": {
+              "request": {
+                "$ref": "TestIamPermissionsRequest"
+              },
+              "description": "Returns permissions that a caller has on the specified resource.\nIf the resource does not exist, this will return an empty set of\npermissions, not a NOT_FOUND error.\n\nNote: This operation is designed to be used for building permission-aware\nUIs and command-line tools, not for authorization checking. This operation\nmay \"fail open\" without warning.",
+              "httpMethod": "POST",
+              "parameterOrder": [
+                "resource"
+              ],
+              "response": {
+                "$ref": "TestIamPermissionsResponse"
+              },
+              "parameters": {
+                "resource": {
+                  "location": "path",
+                  "description": "REQUIRED: The resource for which the policy detail is being requested.\nSee the operation documentation for the appropriate value for this field.",
+                  "required": true,
+                  "type": "string",
+                  "pattern": "^projects/[^/]+/subscriptions/[^/]+$"
+                }
+              },
+              "scopes": [
+                "https://www.googleapis.com/auth/cloud-platform",
+                "https://www.googleapis.com/auth/pubsub"
+              ],
+              "flatPath": "v1beta2/projects/{projectsId}/subscriptions/{subscriptionsId}:testIamPermissions",
+              "id": "pubsub.projects.subscriptions.testIamPermissions",
+              "path": "v1beta2/{+resource}:testIamPermissions"
+            },
+            "modifyPushConfig": {
+              "request": {
+                "$ref": "ModifyPushConfigRequest"
+              },
+              "description": "Modifies the `PushConfig` for a specified subscription.\n\nThis may be used to change a push subscription to a pull one (signified by\nan empty `PushConfig`) or vice versa, or change the endpoint URL and other\nattributes of a push subscription. Messages will accumulate for delivery\ncontinuously through the call regardless of changes to the `PushConfig`.",
+              "httpMethod": "POST",
+              "parameterOrder": [
+                "subscription"
+              ],
+              "response": {
+                "$ref": "Empty"
+              },
+              "parameters": {
+                "subscription": {
+                  "location": "path",
+                  "description": "The name of the subscription.",
+                  "required": true,
+                  "type": "string",
+                  "pattern": "^projects/[^/]+/subscriptions/[^/]+$"
+                }
+              },
+              "scopes": [
+                "https://www.googleapis.com/auth/cloud-platform",
+                "https://www.googleapis.com/auth/pubsub"
+              ],
+              "flatPath": "v1beta2/projects/{projectsId}/subscriptions/{subscriptionsId}:modifyPushConfig",
+              "id": "pubsub.projects.subscriptions.modifyPushConfig",
+              "path": "v1beta2/{+subscription}:modifyPushConfig"
+            },
+            "pull": {
+              "description": "Pulls messages from the server. Returns an empty list if there are no\nmessages available in the backlog. The server may return `UNAVAILABLE` if\nthere are too many concurrent pull requests pending for the given\nsubscription.",
+              "request": {
+                "$ref": "PullRequest"
+              },
+              "httpMethod": "POST",
+              "parameterOrder": [
+                "subscription"
+              ],
+              "response": {
+                "$ref": "PullResponse"
+              },
+              "scopes": [
+                "https://www.googleapis.com/auth/cloud-platform",
+                "https://www.googleapis.com/auth/pubsub"
+              ],
+              "parameters": {
+                "subscription": {
+                  "location": "path",
+                  "description": "The subscription from which messages should be pulled.",
+                  "required": true,
+                  "type": "string",
+                  "pattern": "^projects/[^/]+/subscriptions/[^/]+$"
+                }
+              },
+              "flatPath": "v1beta2/projects/{projectsId}/subscriptions/{subscriptionsId}:pull",
+              "id": "pubsub.projects.subscriptions.pull",
+              "path": "v1beta2/{+subscription}:pull"
+            },
+            "delete": {
+              "httpMethod": "DELETE",
+              "parameterOrder": [
+                "subscription"
+              ],
+              "response": {
+                "$ref": "Empty"
+              },
+              "scopes": [
+                "https://www.googleapis.com/auth/cloud-platform",
+                "https://www.googleapis.com/auth/pubsub"
+              ],
+              "parameters": {
+                "subscription": {
+                  "description": "The subscription to delete.",
+                  "required": true,
+                  "type": "string",
+                  "pattern": "^projects/[^/]+/subscriptions/[^/]+$",
+                  "location": "path"
+                }
+              },
+              "flatPath": "v1beta2/projects/{projectsId}/subscriptions/{subscriptionsId}",
+              "id": "pubsub.projects.subscriptions.delete",
+              "path": "v1beta2/{+subscription}",
+              "description": "Deletes an existing subscription. All pending messages in the subscription\nare immediately dropped. Calls to `Pull` after deletion will return\n`NOT_FOUND`. After a subscription is deleted, a new one may be created with\nthe same name, but the new one has no association with the old\nsubscription, or its topic unless the same topic is specified."
+            },
+            "list": {
+              "flatPath": "v1beta2/projects/{projectsId}/subscriptions",
+              "path": "v1beta2/{+project}/subscriptions",
+              "id": "pubsub.projects.subscriptions.list",
+              "description": "Lists matching subscriptions.",
+              "response": {
+                "$ref": "ListSubscriptionsResponse"
+              },
+              "parameterOrder": [
+                "project"
+              ],
+              "httpMethod": "GET",
+              "parameters": {
+                "pageToken": {
+                  "description": "The value returned by the last `ListSubscriptionsResponse`; indicates that\nthis is a continuation of a prior `ListSubscriptions` call, and that the\nsystem should return the next page of data.",
+                  "type": "string",
+                  "location": "query"
+                },
+                "pageSize": {
+                  "location": "query",
+                  "description": "Maximum number of subscriptions to return.",
+                  "format": "int32",
+                  "type": "integer"
+                },
+                "project": {
+                  "location": "path",
+                  "description": "The name of the cloud project that subscriptions belong to.",
+                  "required": true,
+                  "type": "string",
+                  "pattern": "^projects/[^/]+$"
+                }
+              },
+              "scopes": [
+                "https://www.googleapis.com/auth/cloud-platform",
+                "https://www.googleapis.com/auth/pubsub"
+              ]
+            },
+            "setIamPolicy": {
+              "response": {
+                "$ref": "Policy"
+              },
+              "parameterOrder": [
+                "resource"
+              ],
+              "httpMethod": "POST",
+              "scopes": [
+                "https://www.googleapis.com/auth/cloud-platform",
+                "https://www.googleapis.com/auth/pubsub"
+              ],
+              "parameters": {
+                "resource": {
+                  "location": "path",
+                  "description": "REQUIRED: The resource for which the policy is being specified.\nSee the operation documentation for the appropriate value for this field.",
+                  "required": true,
+                  "type": "string",
+                  "pattern": "^projects/[^/]+/subscriptions/[^/]+$"
+                }
+              },
+              "flatPath": "v1beta2/projects/{projectsId}/subscriptions/{subscriptionsId}:setIamPolicy",
+              "path": "v1beta2/{+resource}:setIamPolicy",
+              "id": "pubsub.projects.subscriptions.setIamPolicy",
+              "description": "Sets the access control policy on the specified resource. Replaces any\nexisting policy.",
+              "request": {
+                "$ref": "SetIamPolicyRequest"
+              }
+            },
+            "create": {
+              "request": {
+                "$ref": "Subscription"
+              },
+              "description": "Creates a subscription to a given topic.\nIf the subscription already exists, returns `ALREADY_EXISTS`.\nIf the corresponding topic doesn't exist, returns `NOT_FOUND`.\n\nIf the name is not provided in the request, the server will assign a random\nname for this subscription on the same project as the topic. Note that\nfor REST API requests, you must specify a name.",
+              "httpMethod": "PUT",
+              "parameterOrder": [
+                "name"
+              ],
+              "response": {
+                "$ref": "Subscription"
+              },
+              "parameters": {
+                "name": {
+                  "location": "path",
+                  "description": "The name of the subscription. It must have the format\n`\"projects/{project}/subscriptions/{subscription}\"`. `{subscription}` must\nstart with a letter, and contain only letters (`[A-Za-z]`), numbers\n(`[0-9]`), dashes (`-`), underscores (`_`), periods (`.`), tildes (`~`),\nplus (`+`) or percent signs (`%`). It must be between 3 and 255 characters\nin length, and it must not start with `\"goog\"`.",
+                  "required": true,
+                  "type": "string",
+                  "pattern": "^projects/[^/]+/subscriptions/[^/]+$"
+                }
+              },
+              "scopes": [
+                "https://www.googleapis.com/auth/cloud-platform",
+                "https://www.googleapis.com/auth/pubsub"
+              ],
+              "flatPath": "v1beta2/projects/{projectsId}/subscriptions/{subscriptionsId}",
+              "id": "pubsub.projects.subscriptions.create",
+              "path": "v1beta2/{+name}"
+            },
+            "modifyAckDeadline": {
+              "flatPath": "v1beta2/projects/{projectsId}/subscriptions/{subscriptionsId}:modifyAckDeadline",
+              "id": "pubsub.projects.subscriptions.modifyAckDeadline",
+              "path": "v1beta2/{+subscription}:modifyAckDeadline",
+              "description": "Modifies the ack deadline for a specific message. This method is useful\nto indicate that more time is needed to process a message by the\nsubscriber, or to make the message available for redelivery if the\nprocessing was interrupted. Note that this does not modify the\nsubscription-level `ackDeadlineSeconds` used for subsequent messages.",
+              "request": {
+                "$ref": "ModifyAckDeadlineRequest"
+              },
+              "httpMethod": "POST",
+              "parameterOrder": [
+                "subscription"
+              ],
+              "response": {
+                "$ref": "Empty"
+              },
+              "scopes": [
+                "https://www.googleapis.com/auth/cloud-platform",
+                "https://www.googleapis.com/auth/pubsub"
+              ],
+              "parameters": {
+                "subscription": {
+                  "location": "path",
+                  "description": "The name of the subscription.",
+                  "required": true,
+                  "type": "string",
+                  "pattern": "^projects/[^/]+/subscriptions/[^/]+$"
+                }
+              }
+            },
+            "acknowledge": {
+              "request": {
+                "$ref": "AcknowledgeRequest"
+              },
+              "description": "Acknowledges the messages associated with the `ack_ids` in the\n`AcknowledgeRequest`. The Pub/Sub system can remove the relevant messages\nfrom the subscription.\n\nAcknowledging a message whose ack deadline has expired may succeed,\nbut such a message may be redelivered later. Acknowledging a message more\nthan once will not result in an error.",
+              "response": {
+                "$ref": "Empty"
+              },
+              "parameterOrder": [
+                "subscription"
+              ],
+              "httpMethod": "POST",
+              "parameters": {
+                "subscription": {
+                  "location": "path",
+                  "description": "The subscription whose message is being acknowledged.",
+                  "required": true,
+                  "type": "string",
+                  "pattern": "^projects/[^/]+/subscriptions/[^/]+$"
+                }
+              },
+              "scopes": [
+                "https://www.googleapis.com/auth/cloud-platform",
+                "https://www.googleapis.com/auth/pubsub"
+              ],
+              "flatPath": "v1beta2/projects/{projectsId}/subscriptions/{subscriptionsId}:acknowledge",
+              "path": "v1beta2/{+subscription}:acknowledge",
+              "id": "pubsub.projects.subscriptions.acknowledge"
+            },
+            "getIamPolicy": {
+              "description": "Gets the access control policy for a resource.\nReturns an empty policy if the resource exists and does not have a policy\nset.",
+              "response": {
+                "$ref": "Policy"
+              },
+              "parameterOrder": [
+                "resource"
+              ],
+              "httpMethod": "GET",
+              "parameters": {
+                "resource": {
+                  "location": "path",
+                  "description": "REQUIRED: The resource for which the policy is being requested.\nSee the operation documentation for the appropriate value for this field.",
+                  "required": true,
+                  "type": "string",
+                  "pattern": "^projects/[^/]+/subscriptions/[^/]+$"
+                }
+              },
+              "scopes": [
+                "https://www.googleapis.com/auth/cloud-platform",
+                "https://www.googleapis.com/auth/pubsub"
+              ],
+              "flatPath": "v1beta2/projects/{projectsId}/subscriptions/{subscriptionsId}:getIamPolicy",
+              "path": "v1beta2/{+resource}:getIamPolicy",
+              "id": "pubsub.projects.subscriptions.getIamPolicy"
+            }
+          }
+        },
         "topics": {
           "methods": {
             "getIamPolicy": {
@@ -17,7 +351,7 @@
               "parameters": {
                 "resource": {
                   "location": "path",
-                  "description": "REQUIRED: The resource for which the policy is being requested.\n`resource` is usually specified as a path. For example, a Project\nresource is specified as `projects/{project}`.",
+                  "description": "REQUIRED: The resource for which the policy is being requested.\nSee the operation documentation for the appropriate value for this field.",
                   "required": true,
                   "type": "string",
                   "pattern": "^projects/[^/]+/topics/[^/]+$"
@@ -34,20 +368,20 @@
             },
             "get": {
               "description": "Gets the configuration of a topic.",
-              "response": {
-                "$ref": "Topic"
-              },
               "parameterOrder": [
                 "topic"
               ],
+              "response": {
+                "$ref": "Topic"
+              },
               "httpMethod": "GET",
               "parameters": {
                 "topic": {
-                  "location": "path",
                   "description": "The name of the topic to get.",
                   "required": true,
                   "type": "string",
-                  "pattern": "^projects/[^/]+/topics/[^/]+$"
+                  "pattern": "^projects/[^/]+/topics/[^/]+$",
+                  "location": "path"
                 }
               },
               "scopes": [
@@ -59,10 +393,6 @@
               "id": "pubsub.projects.topics.get"
             },
             "publish": {
-              "request": {
-                "$ref": "PublishRequest"
-              },
-              "description": "Adds one or more messages to the topic. Returns `NOT_FOUND` if the topic\ndoes not exist. The message payload must not be empty; it must contain\n either a non-empty data field, or at least one attribute.",
               "response": {
                 "$ref": "PublishResponse"
               },
@@ -72,11 +402,11 @@
               "httpMethod": "POST",
               "parameters": {
                 "topic": {
+                  "location": "path",
                   "description": "The messages in the request will be published on this topic.",
                   "required": true,
                   "type": "string",
-                  "pattern": "^projects/[^/]+/topics/[^/]+$",
-                  "location": "path"
+                  "pattern": "^projects/[^/]+/topics/[^/]+$"
                 }
               },
               "scopes": [
@@ -85,7 +415,11 @@
               ],
               "flatPath": "v1beta2/projects/{projectsId}/topics/{topicsId}:publish",
               "path": "v1beta2/{+topic}:publish",
-              "id": "pubsub.projects.topics.publish"
+              "id": "pubsub.projects.topics.publish",
+              "request": {
+                "$ref": "PublishRequest"
+              },
+              "description": "Adds one or more messages to the topic. Returns `NOT_FOUND` if the topic\ndoes not exist. The message payload must not be empty; it must contain\n either a non-empty data field, or at least one attribute."
             },
             "testIamPermissions": {
               "request": {
@@ -102,7 +436,7 @@
               "parameters": {
                 "resource": {
                   "location": "path",
-                  "description": "REQUIRED: The resource for which the policy detail is being requested.\n`resource` is usually specified as a path. For example, a Project\nresource is specified as `projects/{project}`.",
+                  "description": "REQUIRED: The resource for which the policy detail is being requested.\nSee the operation documentation for the appropriate value for this field.",
                   "required": true,
                   "type": "string",
                   "pattern": "^projects/[^/]+/topics/[^/]+$"
@@ -117,17 +451,17 @@
               "id": "pubsub.projects.topics.testIamPermissions"
             },
             "delete": {
-              "httpMethod": "DELETE",
-              "parameterOrder": [
-                "topic"
-              ],
+              "flatPath": "v1beta2/projects/{projectsId}/topics/{topicsId}",
+              "path": "v1beta2/{+topic}",
+              "id": "pubsub.projects.topics.delete",
+              "description": "Deletes the topic with the given name. Returns `NOT_FOUND` if the topic\ndoes not exist. After a topic is deleted, a new topic may be created with\nthe same name; this is an entirely new topic with none of the old\nconfiguration or subscriptions. Existing subscriptions to this topic are\nnot deleted, but their `topic` field is set to `_deleted-topic_`.",
               "response": {
                 "$ref": "Empty"
               },
-              "scopes": [
-                "https://www.googleapis.com/auth/cloud-platform",
-                "https://www.googleapis.com/auth/pubsub"
+              "parameterOrder": [
+                "topic"
               ],
+              "httpMethod": "DELETE",
               "parameters": {
                 "topic": {
                   "description": "Name of the topic to delete.",
@@ -137,37 +471,38 @@
                   "location": "path"
                 }
               },
-              "flatPath": "v1beta2/projects/{projectsId}/topics/{topicsId}",
-              "id": "pubsub.projects.topics.delete",
-              "path": "v1beta2/{+topic}",
-              "description": "Deletes the topic with the given name. Returns `NOT_FOUND` if the topic\ndoes not exist. After a topic is deleted, a new topic may be created with\nthe same name; this is an entirely new topic with none of the old\nconfiguration or subscriptions. Existing subscriptions to this topic are\nnot deleted, but their `topic` field is set to `_deleted-topic_`."
+              "scopes": [
+                "https://www.googleapis.com/auth/cloud-platform",
+                "https://www.googleapis.com/auth/pubsub"
+              ]
             },
             "list": {
-              "httpMethod": "GET",
-              "parameterOrder": [
-                "project"
-              ],
+              "description": "Lists matching topics.",
               "response": {
                 "$ref": "ListTopicsResponse"
               },
+              "parameterOrder": [
+                "project"
+              ],
+              "httpMethod": "GET",
               "parameters": {
-                "pageToken": {
-                  "location": "query",
-                  "description": "The value returned by the last `ListTopicsResponse`; indicates that this is\na continuation of a prior `ListTopics` call, and that the system should\nreturn the next page of data.",
-                  "type": "string"
-                },
                 "pageSize": {
-                  "location": "query",
                   "description": "Maximum number of topics to return.",
                   "format": "int32",
-                  "type": "integer"
+                  "type": "integer",
+                  "location": "query"
                 },
                 "project": {
-                  "location": "path",
                   "description": "The name of the cloud project that topics belong to.",
                   "required": true,
                   "type": "string",
-                  "pattern": "^projects/[^/]+$"
+                  "pattern": "^projects/[^/]+$",
+                  "location": "path"
+                },
+                "pageToken": {
+                  "description": "The value returned by the last `ListTopicsResponse`; indicates that this is\na continuation of a prior `ListTopics` call, and that the system should\nreturn the next page of data.",
+                  "type": "string",
+                  "location": "query"
                 }
               },
               "scopes": [
@@ -175,40 +510,14 @@
                 "https://www.googleapis.com/auth/pubsub"
               ],
               "flatPath": "v1beta2/projects/{projectsId}/topics",
-              "id": "pubsub.projects.topics.list",
               "path": "v1beta2/{+project}/topics",
-              "description": "Lists matching topics."
-            },
-            "setIamPolicy": {
-              "response": {
-                "$ref": "Policy"
-              },
-              "parameterOrder": [
-                "resource"
-              ],
-              "httpMethod": "POST",
-              "parameters": {
-                "resource": {
-                  "location": "path",
-                  "description": "REQUIRED: The resource for which the policy is being specified.\n`resource` is usually specified as a path. For example, a Project\nresource is specified as `projects/{project}`.",
-                  "required": true,
-                  "type": "string",
-                  "pattern": "^projects/[^/]+/topics/[^/]+$"
-                }
-              },
-              "scopes": [
-                "https://www.googleapis.com/auth/cloud-platform",
-                "https://www.googleapis.com/auth/pubsub"
-              ],
-              "flatPath": "v1beta2/projects/{projectsId}/topics/{topicsId}:setIamPolicy",
-              "path": "v1beta2/{+resource}:setIamPolicy",
-              "id": "pubsub.projects.topics.setIamPolicy",
-              "request": {
-                "$ref": "SetIamPolicyRequest"
-              },
-              "description": "Sets the access control policy on the specified resource. Replaces any\nexisting policy."
+              "id": "pubsub.projects.topics.list"
             },
             "create": {
+              "description": "Creates the given topic with the given name.",
+              "request": {
+                "$ref": "Topic"
+              },
               "response": {
                 "$ref": "Topic"
               },
@@ -222,20 +531,45 @@
               ],
               "parameters": {
                 "name": {
-                  "location": "path",
                   "description": "The name of the topic. It must have the format\n`\"projects/{project}/topics/{topic}\"`. `{topic}` must start with a letter,\nand contain only letters (`[A-Za-z]`), numbers (`[0-9]`), dashes (`-`),\nunderscores (`_`), periods (`.`), tildes (`~`), plus (`+`) or percent\nsigns (`%`). It must be between 3 and 255 characters in length, and it\nmust not start with `\"goog\"`.",
                   "required": true,
                   "type": "string",
-                  "pattern": "^projects/[^/]+/topics/[^/]+$"
+                  "pattern": "^projects/[^/]+/topics/[^/]+$",
+                  "location": "path"
                 }
               },
               "flatPath": "v1beta2/projects/{projectsId}/topics/{topicsId}",
               "path": "v1beta2/{+name}",
-              "id": "pubsub.projects.topics.create",
-              "description": "Creates the given topic with the given name.",
+              "id": "pubsub.projects.topics.create"
+            },
+            "setIamPolicy": {
+              "flatPath": "v1beta2/projects/{projectsId}/topics/{topicsId}:setIamPolicy",
+              "id": "pubsub.projects.topics.setIamPolicy",
+              "path": "v1beta2/{+resource}:setIamPolicy",
               "request": {
-                "$ref": "Topic"
-              }
+                "$ref": "SetIamPolicyRequest"
+              },
+              "description": "Sets the access control policy on the specified resource. Replaces any\nexisting policy.",
+              "httpMethod": "POST",
+              "parameterOrder": [
+                "resource"
+              ],
+              "response": {
+                "$ref": "Policy"
+              },
+              "parameters": {
+                "resource": {
+                  "description": "REQUIRED: The resource for which the policy is being specified.\nSee the operation documentation for the appropriate value for this field.",
+                  "required": true,
+                  "type": "string",
+                  "pattern": "^projects/[^/]+/topics/[^/]+$",
+                  "location": "path"
+                }
+              },
+              "scopes": [
+                "https://www.googleapis.com/auth/cloud-platform",
+                "https://www.googleapis.com/auth/pubsub"
+              ]
             }
           },
           "resources": {
@@ -281,349 +615,11 @@
               }
             }
           }
-        },
-        "subscriptions": {
-          "methods": {
-            "testIamPermissions": {
-              "description": "Returns permissions that a caller has on the specified resource.\nIf the resource does not exist, this will return an empty set of\npermissions, not a NOT_FOUND error.\n\nNote: This operation is designed to be used for building permission-aware\nUIs and command-line tools, not for authorization checking. This operation\nmay \"fail open\" without warning.",
-              "request": {
-                "$ref": "TestIamPermissionsRequest"
-              },
-              "response": {
-                "$ref": "TestIamPermissionsResponse"
-              },
-              "parameterOrder": [
-                "resource"
-              ],
-              "httpMethod": "POST",
-              "scopes": [
-                "https://www.googleapis.com/auth/cloud-platform",
-                "https://www.googleapis.com/auth/pubsub"
-              ],
-              "parameters": {
-                "resource": {
-                  "description": "REQUIRED: The resource for which the policy detail is being requested.\n`resource` is usually specified as a path. For example, a Project\nresource is specified as `projects/{project}`.",
-                  "required": true,
-                  "type": "string",
-                  "pattern": "^projects/[^/]+/subscriptions/[^/]+$",
-                  "location": "path"
-                }
-              },
-              "flatPath": "v1beta2/projects/{projectsId}/subscriptions/{subscriptionsId}:testIamPermissions",
-              "path": "v1beta2/{+resource}:testIamPermissions",
-              "id": "pubsub.projects.subscriptions.testIamPermissions"
-            },
-            "modifyPushConfig": {
-              "flatPath": "v1beta2/projects/{projectsId}/subscriptions/{subscriptionsId}:modifyPushConfig",
-              "path": "v1beta2/{+subscription}:modifyPushConfig",
-              "id": "pubsub.projects.subscriptions.modifyPushConfig",
-              "request": {
-                "$ref": "ModifyPushConfigRequest"
-              },
-              "description": "Modifies the `PushConfig` for a specified subscription.\n\nThis may be used to change a push subscription to a pull one (signified by\nan empty `PushConfig`) or vice versa, or change the endpoint URL and other\nattributes of a push subscription. Messages will accumulate for delivery\ncontinuously through the call regardless of changes to the `PushConfig`.",
-              "response": {
-                "$ref": "Empty"
-              },
-              "parameterOrder": [
-                "subscription"
-              ],
-              "httpMethod": "POST",
-              "parameters": {
-                "subscription": {
-                  "location": "path",
-                  "description": "The name of the subscription.",
-                  "required": true,
-                  "type": "string",
-                  "pattern": "^projects/[^/]+/subscriptions/[^/]+$"
-                }
-              },
-              "scopes": [
-                "https://www.googleapis.com/auth/cloud-platform",
-                "https://www.googleapis.com/auth/pubsub"
-              ]
-            },
-            "pull": {
-              "httpMethod": "POST",
-              "parameterOrder": [
-                "subscription"
-              ],
-              "response": {
-                "$ref": "PullResponse"
-              },
-              "parameters": {
-                "subscription": {
-                  "description": "The subscription from which messages should be pulled.",
-                  "required": true,
-                  "type": "string",
-                  "pattern": "^projects/[^/]+/subscriptions/[^/]+$",
-                  "location": "path"
-                }
-              },
-              "scopes": [
-                "https://www.googleapis.com/auth/cloud-platform",
-                "https://www.googleapis.com/auth/pubsub"
-              ],
-              "flatPath": "v1beta2/projects/{projectsId}/subscriptions/{subscriptionsId}:pull",
-              "id": "pubsub.projects.subscriptions.pull",
-              "path": "v1beta2/{+subscription}:pull",
-              "request": {
-                "$ref": "PullRequest"
-              },
-              "description": "Pulls messages from the server. Returns an empty list if there are no\nmessages available in the backlog. The server may return `UNAVAILABLE` if\nthere are too many concurrent pull requests pending for the given\nsubscription."
-            },
-            "delete": {
-              "description": "Deletes an existing subscription. All pending messages in the subscription\nare immediately dropped. Calls to `Pull` after deletion will return\n`NOT_FOUND`. After a subscription is deleted, a new one may be created with\nthe same name, but the new one has no association with the old\nsubscription, or its topic unless the same topic is specified.",
-              "response": {
-                "$ref": "Empty"
-              },
-              "parameterOrder": [
-                "subscription"
-              ],
-              "httpMethod": "DELETE",
-              "parameters": {
-                "subscription": {
-                  "description": "The subscription to delete.",
-                  "required": true,
-                  "type": "string",
-                  "pattern": "^projects/[^/]+/subscriptions/[^/]+$",
-                  "location": "path"
-                }
-              },
-              "scopes": [
-                "https://www.googleapis.com/auth/cloud-platform",
-                "https://www.googleapis.com/auth/pubsub"
-              ],
-              "flatPath": "v1beta2/projects/{projectsId}/subscriptions/{subscriptionsId}",
-              "path": "v1beta2/{+subscription}",
-              "id": "pubsub.projects.subscriptions.delete"
-            },
-            "list": {
-              "description": "Lists matching subscriptions.",
-              "response": {
-                "$ref": "ListSubscriptionsResponse"
-              },
-              "parameterOrder": [
-                "project"
-              ],
-              "httpMethod": "GET",
-              "scopes": [
-                "https://www.googleapis.com/auth/cloud-platform",
-                "https://www.googleapis.com/auth/pubsub"
-              ],
-              "parameters": {
-                "pageSize": {
-                  "description": "Maximum number of subscriptions to return.",
-                  "format": "int32",
-                  "type": "integer",
-                  "location": "query"
-                },
-                "project": {
-                  "location": "path",
-                  "description": "The name of the cloud project that subscriptions belong to.",
-                  "required": true,
-                  "type": "string",
-                  "pattern": "^projects/[^/]+$"
-                },
-                "pageToken": {
-                  "location": "query",
-                  "description": "The value returned by the last `ListSubscriptionsResponse`; indicates that\nthis is a continuation of a prior `ListSubscriptions` call, and that the\nsystem should return the next page of data.",
-                  "type": "string"
-                }
-              },
-              "flatPath": "v1beta2/projects/{projectsId}/subscriptions",
-              "path": "v1beta2/{+project}/subscriptions",
-              "id": "pubsub.projects.subscriptions.list"
-            },
-            "create": {
-              "response": {
-                "$ref": "Subscription"
-              },
-              "parameterOrder": [
-                "name"
-              ],
-              "httpMethod": "PUT",
-              "scopes": [
-                "https://www.googleapis.com/auth/cloud-platform",
-                "https://www.googleapis.com/auth/pubsub"
-              ],
-              "parameters": {
-                "name": {
-                  "description": "The name of the subscription. It must have the format\n`\"projects/{project}/subscriptions/{subscription}\"`. `{subscription}` must\nstart with a letter, and contain only letters (`[A-Za-z]`), numbers\n(`[0-9]`), dashes (`-`), underscores (`_`), periods (`.`), tildes (`~`),\nplus (`+`) or percent signs (`%`). It must be between 3 and 255 characters\nin length, and it must not start with `\"goog\"`.",
-                  "required": true,
-                  "type": "string",
-                  "pattern": "^projects/[^/]+/subscriptions/[^/]+$",
-                  "location": "path"
-                }
-              },
-              "flatPath": "v1beta2/projects/{projectsId}/subscriptions/{subscriptionsId}",
-              "path": "v1beta2/{+name}",
-              "id": "pubsub.projects.subscriptions.create",
-              "description": "Creates a subscription to a given topic.\nIf the subscription already exists, returns `ALREADY_EXISTS`.\nIf the corresponding topic doesn't exist, returns `NOT_FOUND`.\n\nIf the name is not provided in the request, the server will assign a random\nname for this subscription on the same project as the topic. Note that\nfor REST API requests, you must specify a name.",
-              "request": {
-                "$ref": "Subscription"
-              }
-            },
-            "setIamPolicy": {
-              "request": {
-                "$ref": "SetIamPolicyRequest"
-              },
-              "description": "Sets the access control policy on the specified resource. Replaces any\nexisting policy.",
-              "response": {
-                "$ref": "Policy"
-              },
-              "parameterOrder": [
-                "resource"
-              ],
-              "httpMethod": "POST",
-              "parameters": {
-                "resource": {
-                  "location": "path",
-                  "description": "REQUIRED: The resource for which the policy is being specified.\n`resource` is usually specified as a path. For example, a Project\nresource is specified as `projects/{project}`.",
-                  "required": true,
-                  "type": "string",
-                  "pattern": "^projects/[^/]+/subscriptions/[^/]+$"
-                }
-              },
-              "scopes": [
-                "https://www.googleapis.com/auth/cloud-platform",
-                "https://www.googleapis.com/auth/pubsub"
-              ],
-              "flatPath": "v1beta2/projects/{projectsId}/subscriptions/{subscriptionsId}:setIamPolicy",
-              "path": "v1beta2/{+resource}:setIamPolicy",
-              "id": "pubsub.projects.subscriptions.setIamPolicy"
-            },
-            "acknowledge": {
-              "flatPath": "v1beta2/projects/{projectsId}/subscriptions/{subscriptionsId}:acknowledge",
-              "id": "pubsub.projects.subscriptions.acknowledge",
-              "path": "v1beta2/{+subscription}:acknowledge",
-              "request": {
-                "$ref": "AcknowledgeRequest"
-              },
-              "description": "Acknowledges the messages associated with the `ack_ids` in the\n`AcknowledgeRequest`. The Pub/Sub system can remove the relevant messages\nfrom the subscription.\n\nAcknowledging a message whose ack deadline has expired may succeed,\nbut such a message may be redelivered later. Acknowledging a message more\nthan once will not result in an error.",
-              "httpMethod": "POST",
-              "parameterOrder": [
-                "subscription"
-              ],
-              "response": {
-                "$ref": "Empty"
-              },
-              "parameters": {
-                "subscription": {
-                  "location": "path",
-                  "description": "The subscription whose message is being acknowledged.",
-                  "required": true,
-                  "type": "string",
-                  "pattern": "^projects/[^/]+/subscriptions/[^/]+$"
-                }
-              },
-              "scopes": [
-                "https://www.googleapis.com/auth/cloud-platform",
-                "https://www.googleapis.com/auth/pubsub"
-              ]
-            },
-            "getIamPolicy": {
-              "response": {
-                "$ref": "Policy"
-              },
-              "parameterOrder": [
-                "resource"
-              ],
-              "httpMethod": "GET",
-              "scopes": [
-                "https://www.googleapis.com/auth/cloud-platform",
-                "https://www.googleapis.com/auth/pubsub"
-              ],
-              "parameters": {
-                "resource": {
-                  "description": "REQUIRED: The resource for which the policy is being requested.\n`resource` is usually specified as a path. For example, a Project\nresource is specified as `projects/{project}`.",
-                  "required": true,
-                  "type": "string",
-                  "pattern": "^projects/[^/]+/subscriptions/[^/]+$",
-                  "location": "path"
-                }
-              },
-              "flatPath": "v1beta2/projects/{projectsId}/subscriptions/{subscriptionsId}:getIamPolicy",
-              "path": "v1beta2/{+resource}:getIamPolicy",
-              "id": "pubsub.projects.subscriptions.getIamPolicy",
-              "description": "Gets the access control policy for a resource.\nReturns an empty policy if the resource exists and does not have a policy\nset."
-            },
-            "modifyAckDeadline": {
-              "flatPath": "v1beta2/projects/{projectsId}/subscriptions/{subscriptionsId}:modifyAckDeadline",
-              "path": "v1beta2/{+subscription}:modifyAckDeadline",
-              "id": "pubsub.projects.subscriptions.modifyAckDeadline",
-              "request": {
-                "$ref": "ModifyAckDeadlineRequest"
-              },
-              "description": "Modifies the ack deadline for a specific message. This method is useful\nto indicate that more time is needed to process a message by the\nsubscriber, or to make the message available for redelivery if the\nprocessing was interrupted. Note that this does not modify the\nsubscription-level `ackDeadlineSeconds` used for subsequent messages.",
-              "response": {
-                "$ref": "Empty"
-              },
-              "parameterOrder": [
-                "subscription"
-              ],
-              "httpMethod": "POST",
-              "parameters": {
-                "subscription": {
-                  "description": "The name of the subscription.",
-                  "required": true,
-                  "type": "string",
-                  "pattern": "^projects/[^/]+/subscriptions/[^/]+$",
-                  "location": "path"
-                }
-              },
-              "scopes": [
-                "https://www.googleapis.com/auth/cloud-platform",
-                "https://www.googleapis.com/auth/pubsub"
-              ]
-            },
-            "get": {
-              "description": "Gets the configuration details of a subscription.",
-              "httpMethod": "GET",
-              "parameterOrder": [
-                "subscription"
-              ],
-              "response": {
-                "$ref": "Subscription"
-              },
-              "scopes": [
-                "https://www.googleapis.com/auth/cloud-platform",
-                "https://www.googleapis.com/auth/pubsub"
-              ],
-              "parameters": {
-                "subscription": {
-                  "location": "path",
-                  "description": "The name of the subscription to get.",
-                  "required": true,
-                  "type": "string",
-                  "pattern": "^projects/[^/]+/subscriptions/[^/]+$"
-                }
-              },
-              "flatPath": "v1beta2/projects/{projectsId}/subscriptions/{subscriptionsId}",
-              "id": "pubsub.projects.subscriptions.get",
-              "path": "v1beta2/{+subscription}"
-            }
-          }
         }
       }
     }
   },
   "parameters": {
-    "pp": {
-      "description": "Pretty-print response.",
-      "type": "boolean",
-      "default": "true",
-      "location": "query"
-    },
-    "oauth_token": {
-      "description": "OAuth 2.0 token for the current user.",
-      "type": "string",
-      "location": "query"
-    },
-    "bearer_token": {
-      "location": "query",
-      "description": "OAuth bearer token.",
-      "type": "string"
-    },
     "upload_protocol": {
       "location": "query",
       "description": "Upload protocol for media (e.g. \"raw\", \"multipart\").",
@@ -636,15 +632,20 @@
       "location": "query"
     },
     "fields": {
-      "location": "query",
       "description": "Selector specifying which fields to include in a partial response.",
-      "type": "string"
+      "type": "string",
+      "location": "query"
     },
     "uploadType": {
       "location": "query",
       "description": "Legacy upload protocol for media (e.g. \"media\", \"multipart\").",
       "type": "string"
     },
+    "callback": {
+      "location": "query",
+      "description": "JSONP",
+      "type": "string"
+    },
     "$.xgafv": {
       "description": "V1 error format.",
       "type": "string",
@@ -658,11 +659,6 @@
         "2"
       ]
     },
-    "callback": {
-      "location": "query",
-      "description": "JSONP",
-      "type": "string"
-    },
     "alt": {
       "description": "Data format for response.",
       "default": "json",
@@ -679,110 +675,39 @@
       ],
       "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"
     },
-    "access_token": {
-      "location": "query",
-      "description": "OAuth access token.",
-      "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"
+    },
+    "pp": {
+      "location": "query",
+      "description": "Pretty-print response.",
+      "type": "boolean",
+      "default": "true"
+    },
+    "bearer_token": {
+      "location": "query",
+      "description": "OAuth bearer token.",
+      "type": "string"
+    },
+    "oauth_token": {
+      "location": "query",
+      "description": "OAuth 2.0 token for the current user.",
+      "type": "string"
     }
   },
   "schemas": {
-    "PublishResponse": {
-      "description": "Response for the `Publish` method.",
-      "type": "object",
-      "properties": {
-        "messageIds": {
-          "description": "The server-assigned ID of each published message, in the same order as\nthe messages in the request. IDs are guaranteed to be unique within\nthe topic.",
-          "type": "array",
-          "items": {
-            "type": "string"
-          }
-        }
-      },
-      "id": "PublishResponse"
-    },
-    "Subscription": {
-      "description": "A subscription resource.",
-      "type": "object",
-      "properties": {
-        "ackDeadlineSeconds": {
-          "description": "This value is the maximum time after a subscriber receives a message\nbefore the subscriber should acknowledge the message. After message\ndelivery but before the ack deadline expires and before the message is\nacknowledged, it is an outstanding message and will not be delivered\nagain during that time (on a best-effort basis).\n\nFor pull subscriptions, this value is used as the initial value for the ack\ndeadline. To override this value for a given message, call\n`ModifyAckDeadline` with the corresponding `ack_id` if using pull.\nThe maximum custom deadline you can specify is 600 seconds (10 minutes).\n\nFor push delivery, this value is also used to set the request timeout for\nthe call to the push endpoint.\n\nIf the subscriber never acknowledges the message, the Pub/Sub\nsystem will eventually redeliver the message.\n\nIf this parameter is 0, a default value of 10 seconds is used.",
-          "format": "int32",
-          "type": "integer"
-        },
-        "name": {
-          "description": "The name of the subscription. It must have the format\n`\"projects/{project}/subscriptions/{subscription}\"`. `{subscription}` must\nstart with a letter, and contain only letters (`[A-Za-z]`), numbers\n(`[0-9]`), dashes (`-`), underscores (`_`), periods (`.`), tildes (`~`),\nplus (`+`) or percent signs (`%`). It must be between 3 and 255 characters\nin length, and it must not start with `\"goog\"`.",
-          "type": "string"
-        },
-        "topic": {
-          "description": "The name of the topic from which this subscription is receiving messages.\nThe value of this field will be `_deleted-topic_` if the topic has been\ndeleted.",
-          "type": "string"
-        },
-        "pushConfig": {
-          "$ref": "PushConfig",
-          "description": "If push delivery is used with this subscription, this field is\nused to configure it. An empty `pushConfig` signifies that the subscriber\nwill pull and ack messages using API methods."
-        }
-      },
-      "id": "Subscription"
-    },
-    "TestIamPermissionsRequest": {
-      "description": "Request message for `TestIamPermissions` method.",
-      "type": "object",
-      "properties": {
-        "permissions": {
-          "description": "The set of permissions to check for the `resource`. Permissions with\nwildcards (such as '*' or 'storage.*') are not allowed. For more\ninformation see\n[IAM Overview](https://cloud.google.com/iam/docs/overview#permissions).",
-          "type": "array",
-          "items": {
-            "type": "string"
-          }
-        }
-      },
-      "id": "TestIamPermissionsRequest"
-    },
-    "Policy": {
-      "description": "Defines an Identity and Access Management (IAM) policy. It is used to\nspecify access control policies for Cloud Platform resources.\n\n\nA `Policy` consists of a list of `bindings`. A `Binding` binds a list of\n`members` to a `role`, where the members can be user accounts, Google groups,\nGoogle domains, and service accounts. A `role` is a named list of permissions\ndefined by IAM.\n\n**Example**\n\n    {\n      \"bindings\": [\n        {\n          \"role\": \"roles/owner\",\n          \"members\": [\n            \"user:mike@example.com\",\n            \"group:admins@example.com\",\n            \"domain:google.com\",\n            \"serviceAccount:my-other-app@appspot.gserviceaccount.com\",\n          ]\n        },\n        {\n          \"role\": \"roles/viewer\",\n          \"members\": [\"user:sean@example.com\"]\n        }\n      ]\n    }\n\nFor a description of IAM and its features, see the\n[IAM developer's guide](https://cloud.google.com/iam).",
-      "type": "object",
-      "properties": {
-        "etag": {
-          "description": "`etag` is used for optimistic concurrency control as a way to help\nprevent simultaneous updates of a policy from overwriting each other.\nIt is strongly suggested that systems make use of the `etag` in the\nread-modify-write cycle to perform policy updates in order to avoid race\nconditions: An `etag` is returned in the response to `getIamPolicy`, and\nsystems are expected to put that etag in the request to `setIamPolicy` to\nensure that their change will be applied to the same version of the policy.\n\nIf no `etag` is provided in the call to `setIamPolicy`, then the existing\npolicy is overwritten blindly.",
-          "format": "byte",
-          "type": "string"
-        },
-        "version": {
-          "description": "Version of the `Policy`. The default version is 0.",
-          "format": "int32",
-          "type": "integer"
-        },
-        "bindings": {
-          "description": "Associates a list of `members` to a `role`.\nMultiple `bindings` must not be specified for the same `role`.\n`bindings` with no members will result in an error.",
-          "type": "array",
-          "items": {
-            "$ref": "Binding"
-          }
-        }
-      },
-      "id": "Policy"
-    },
-    "Topic": {
-      "description": "A topic resource.",
-      "type": "object",
-      "properties": {
-        "name": {
-          "description": "The name of the topic. It must have the format\n`\"projects/{project}/topics/{topic}\"`. `{topic}` must start with a letter,\nand contain only letters (`[A-Za-z]`), numbers (`[0-9]`), dashes (`-`),\nunderscores (`_`), periods (`.`), tildes (`~`), plus (`+`) or percent\nsigns (`%`). It must be between 3 and 255 characters in length, and it\nmust not start with `\"goog\"`.",
-          "type": "string"
-        }
-      },
-      "id": "Topic"
-    },
     "ModifyAckDeadlineRequest": {
       "description": "Request for the ModifyAckDeadline method.",
       "type": "object",
@@ -822,8 +747,8 @@
       "type": "object",
       "properties": {
         "pushConfig": {
-          "description": "The push configuration for future deliveries.\n\nAn empty `pushConfig` indicates that the Pub/Sub system should\nstop pushing messages from the given subscription and allow\nmessages to be pulled and acknowledged - effectively pausing\nthe subscription if `Pull` is not called.",
-          "$ref": "PushConfig"
+          "$ref": "PushConfig",
+          "description": "The push configuration for future deliveries.\n\nAn empty `pushConfig` indicates that the Pub/Sub system should\nstop pushing messages from the given subscription and allow\nmessages to be pulled and acknowledged - effectively pausing\nthe subscription if `Pull` is not called."
         }
       },
       "id": "ModifyPushConfigRequest"
@@ -833,11 +758,11 @@
       "type": "object",
       "properties": {
         "attributes": {
+          "description": "Optional attributes for this message.",
+          "type": "object",
           "additionalProperties": {
             "type": "string"
-          },
-          "description": "Optional attributes for this message.",
-          "type": "object"
+          }
         },
         "messageId": {
           "description": "ID of this message, assigned by the server when the message is published.\nGuaranteed to be unique within the topic. This value may be read by a\nsubscriber that receives a `PubsubMessage` via a `Pull` call or a push\ndelivery. It must not be populated by the publisher in a `Publish` call.",
@@ -874,26 +799,6 @@
       },
       "id": "Binding"
     },
-    "AcknowledgeRequest": {
-      "description": "Request for the Acknowledge method.",
-      "type": "object",
-      "properties": {
-        "ackIds": {
-          "description": "The acknowledgment ID for the messages being acknowledged that was returned\nby the Pub/Sub system in the `Pull` response. Must not be empty.",
-          "type": "array",
-          "items": {
-            "type": "string"
-          }
-        }
-      },
-      "id": "AcknowledgeRequest"
-    },
-    "Empty": {
-      "description": "A generic empty message that you can re-use to avoid defining duplicated\nempty messages in your APIs. A typical example is to use it as the request\nor the response type of an API method. For instance:\n\n    service Foo {\n      rpc Bar(google.protobuf.Empty) returns (google.protobuf.Empty);\n    }\n\nThe JSON representation for `Empty` is empty JSON object `{}`.",
-      "type": "object",
-      "properties": {},
-      "id": "Empty"
-    },
     "ListTopicsResponse": {
       "description": "Response for the `ListTopics` method.",
       "type": "object",
@@ -912,6 +817,26 @@
       },
       "id": "ListTopicsResponse"
     },
+    "Empty": {
+      "description": "A generic empty message that you can re-use to avoid defining duplicated\nempty messages in your APIs. A typical example is to use it as the request\nor the response type of an API method. For instance:\n\n    service Foo {\n      rpc Bar(google.protobuf.Empty) returns (google.protobuf.Empty);\n    }\n\nThe JSON representation for `Empty` is empty JSON object `{}`.",
+      "type": "object",
+      "properties": {},
+      "id": "Empty"
+    },
+    "AcknowledgeRequest": {
+      "description": "Request for the Acknowledge method.",
+      "type": "object",
+      "properties": {
+        "ackIds": {
+          "description": "The acknowledgment ID for the messages being acknowledged that was returned\nby the Pub/Sub system in the `Pull` response. Must not be empty.",
+          "type": "array",
+          "items": {
+            "type": "string"
+          }
+        }
+      },
+      "id": "AcknowledgeRequest"
+    },
     "ListTopicSubscriptionsResponse": {
       "description": "Response for the `ListTopicSubscriptions` method.",
       "type": "object",
@@ -1038,6 +963,93 @@
         }
       },
       "id": "PublishRequest"
+    },
+    "PublishResponse": {
+      "description": "Response for the `Publish` method.",
+      "type": "object",
+      "properties": {
+        "messageIds": {
+          "description": "The server-assigned ID of each published message, in the same order as\nthe messages in the request. IDs are guaranteed to be unique within\nthe topic.",
+          "type": "array",
+          "items": {
+            "type": "string"
+          }
+        }
+      },
+      "id": "PublishResponse"
+    },
+    "Subscription": {
+      "description": "A subscription resource.",
+      "type": "object",
+      "properties": {
+        "ackDeadlineSeconds": {
+          "description": "This value is the maximum time after a subscriber receives a message\nbefore the subscriber should acknowledge the message. After message\ndelivery but before the ack deadline expires and before the message is\nacknowledged, it is an outstanding message and will not be delivered\nagain during that time (on a best-effort basis).\n\nFor pull subscriptions, this value is used as the initial value for the ack\ndeadline. To override this value for a given message, call\n`ModifyAckDeadline` with the corresponding `ack_id` if using pull.\nThe maximum custom deadline you can specify is 600 seconds (10 minutes).\n\nFor push delivery, this value is also used to set the request timeout for\nthe call to the push endpoint.\n\nIf the subscriber never acknowledges the message, the Pub/Sub\nsystem will eventually redeliver the message.\n\nIf this parameter is 0, a default value of 10 seconds is used.",
+          "format": "int32",
+          "type": "integer"
+        },
+        "name": {
+          "description": "The name of the subscription. It must have the format\n`\"projects/{project}/subscriptions/{subscription}\"`. `{subscription}` must\nstart with a letter, and contain only letters (`[A-Za-z]`), numbers\n(`[0-9]`), dashes (`-`), underscores (`_`), periods (`.`), tildes (`~`),\nplus (`+`) or percent signs (`%`). It must be between 3 and 255 characters\nin length, and it must not start with `\"goog\"`.",
+          "type": "string"
+        },
+        "topic": {
+          "description": "The name of the topic from which this subscription is receiving messages.\nThe value of this field will be `_deleted-topic_` if the topic has been\ndeleted.",
+          "type": "string"
+        },
+        "pushConfig": {
+          "$ref": "PushConfig",
+          "description": "If push delivery is used with this subscription, this field is\nused to configure it. An empty `pushConfig` signifies that the subscriber\nwill pull and ack messages using API methods."
+        }
+      },
+      "id": "Subscription"
+    },
+    "TestIamPermissionsRequest": {
+      "description": "Request message for `TestIamPermissions` method.",
+      "type": "object",
+      "properties": {
+        "permissions": {
+          "description": "The set of permissions to check for the `resource`. Permissions with\nwildcards (such as '*' or 'storage.*') are not allowed. For more\ninformation see\n[IAM Overview](https://cloud.google.com/iam/docs/overview#permissions).",
+          "type": "array",
+          "items": {
+            "type": "string"
+          }
+        }
+      },
+      "id": "TestIamPermissionsRequest"
+    },
+    "Policy": {
+      "description": "Defines an Identity and Access Management (IAM) policy. It is used to\nspecify access control policies for Cloud Platform resources.\n\n\nA `Policy` consists of a list of `bindings`. A `Binding` binds a list of\n`members` to a `role`, where the members can be user accounts, Google groups,\nGoogle domains, and service accounts. A `role` is a named list of permissions\ndefined by IAM.\n\n**Example**\n\n    {\n      \"bindings\": [\n        {\n          \"role\": \"roles/owner\",\n          \"members\": [\n            \"user:mike@example.com\",\n            \"group:admins@example.com\",\n            \"domain:google.com\",\n            \"serviceAccount:my-other-app@appspot.gserviceaccount.com\",\n          ]\n        },\n        {\n          \"role\": \"roles/viewer\",\n          \"members\": [\"user:sean@example.com\"]\n        }\n      ]\n    }\n\nFor a description of IAM and its features, see the\n[IAM developer's guide](https://cloud.google.com/iam).",
+      "type": "object",
+      "properties": {
+        "bindings": {
+          "description": "Associates a list of `members` to a `role`.\nMultiple `bindings` must not be specified for the same `role`.\n`bindings` with no members will result in an error.",
+          "type": "array",
+          "items": {
+            "$ref": "Binding"
+          }
+        },
+        "etag": {
+          "description": "`etag` is used for optimistic concurrency control as a way to help\nprevent simultaneous updates of a policy from overwriting each other.\nIt is strongly suggested that systems make use of the `etag` in the\nread-modify-write cycle to perform policy updates in order to avoid race\nconditions: An `etag` is returned in the response to `getIamPolicy`, and\nsystems are expected to put that etag in the request to `setIamPolicy` to\nensure that their change will be applied to the same version of the policy.\n\nIf no `etag` is provided in the call to `setIamPolicy`, then the existing\npolicy is overwritten blindly.",
+          "format": "byte",
+          "type": "string"
+        },
+        "version": {
+          "description": "Version of the `Policy`. The default version is 0.",
+          "format": "int32",
+          "type": "integer"
+        }
+      },
+      "id": "Policy"
+    },
+    "Topic": {
+      "description": "A topic resource.",
+      "type": "object",
+      "properties": {
+        "name": {
+          "description": "The name of the topic. It must have the format\n`\"projects/{project}/topics/{topic}\"`. `{topic}` must start with a letter,\nand contain only letters (`[A-Za-z]`), numbers (`[0-9]`), dashes (`-`),\nunderscores (`_`), periods (`.`), tildes (`~`), plus (`+`) or percent\nsigns (`%`). It must be between 3 and 255 characters in length, and it\nmust not start with `\"goog\"`.",
+          "type": "string"
+        }
+      },
+      "id": "Topic"
     }
   },
   "icons": {
@@ -1051,25 +1063,13 @@
   "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/pubsub": {
           "description": "View and manage Pub/Sub topics and subscriptions"
+        },
+        "https://www.googleapis.com/auth/cloud-platform": {
+          "description": "View and manage your data across Google Cloud Platform services"
         }
       }
     }
-  },
-  "kind": "discovery#restDescription",
-  "description": "Provides reliable, many-to-many, asynchronous messaging between applications.\n",
-  "servicePath": "",
-  "rootUrl": "https://pubsub.googleapis.com/",
-  "basePath": "",
-  "ownerDomain": "google.com",
-  "name": "pubsub",
-  "batchPath": "batch",
-  "revision": "20170214",
-  "documentationLink": "https://cloud.google.com/pubsub/docs",
-  "id": "pubsub:v1beta2",
-  "title": "Google Cloud Pub/Sub API"
+  }
 }
diff --git a/pubsub/v1beta2/pubsub-gen.go b/pubsub/v1beta2/pubsub-gen.go
index 40cab13..e743113 100644
--- a/pubsub/v1beta2/pubsub-gen.go
+++ b/pubsub/v1beta2/pubsub-gen.go
@@ -64,10 +64,9 @@
 }
 
 type Service struct {
-	client                    *http.Client
-	BasePath                  string // API endpoint base URL
-	UserAgent                 string // optional additional User-Agent fragment
-	GoogleClientHeaderElement string // client header fragment, for Google use only
+	client    *http.Client
+	BasePath  string // API endpoint base URL
+	UserAgent string // optional additional User-Agent fragment
 
 	Projects *ProjectsService
 }
@@ -79,10 +78,6 @@
 	return googleapi.UserAgent + " " + s.UserAgent
 }
 
-func (s *Service) clientHeader() string {
-	return gensupport.GoogleClientHeader("20170210", s.GoogleClientHeaderElement)
-}
-
 func NewProjectsService(s *Service) *ProjectsService {
 	rs := &ProjectsService{s: s}
 	rs.Subscriptions = NewProjectsSubscriptionsService(s)
@@ -1113,7 +1108,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	var body io.Reader = nil
 	body, err := googleapi.WithoutDataWrapper.JSONReader(c.acknowledgerequest)
 	if err != nil {
@@ -1258,7 +1252,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	var body io.Reader = nil
 	body, err := googleapi.WithoutDataWrapper.JSONReader(c.subscription)
 	if err != nil {
@@ -1401,7 +1394,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	var body io.Reader = nil
 	c.urlParams_.Set("alt", alt)
 	urls := googleapi.ResolveRelative(c.s.BasePath, "v1beta2/{+subscription}")
@@ -1539,7 +1531,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	if c.ifNoneMatch_ != "" {
 		reqHeaders.Set("If-None-Match", c.ifNoneMatch_)
 	}
@@ -1683,7 +1674,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	if c.ifNoneMatch_ != "" {
 		reqHeaders.Set("If-None-Match", c.ifNoneMatch_)
 	}
@@ -1746,7 +1736,7 @@
 	//   ],
 	//   "parameters": {
 	//     "resource": {
-	//       "description": "REQUIRED: The resource for which the policy is being requested.\n`resource` is usually specified as a path. For example, a Project\nresource is specified as `projects/{project}`.",
+	//       "description": "REQUIRED: The resource for which the policy is being requested.\nSee the operation documentation for the appropriate value for this field.",
 	//       "location": "path",
 	//       "pattern": "^projects/[^/]+/subscriptions/[^/]+$",
 	//       "required": true,
@@ -1841,7 +1831,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	if c.ifNoneMatch_ != "" {
 		reqHeaders.Set("If-None-Match", c.ifNoneMatch_)
 	}
@@ -2013,7 +2002,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	var body io.Reader = nil
 	body, err := googleapi.WithoutDataWrapper.JSONReader(c.modifyackdeadlinerequest)
 	if err != nil {
@@ -2160,7 +2148,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	var body io.Reader = nil
 	body, err := googleapi.WithoutDataWrapper.JSONReader(c.modifypushconfigrequest)
 	if err != nil {
@@ -2303,7 +2290,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	var body io.Reader = nil
 	body, err := googleapi.WithoutDataWrapper.JSONReader(c.pullrequest)
 	if err != nil {
@@ -2442,7 +2428,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	var body io.Reader = nil
 	body, err := googleapi.WithoutDataWrapper.JSONReader(c.setiampolicyrequest)
 	if err != nil {
@@ -2507,7 +2492,7 @@
 	//   ],
 	//   "parameters": {
 	//     "resource": {
-	//       "description": "REQUIRED: The resource for which the policy is being specified.\n`resource` is usually specified as a path. For example, a Project\nresource is specified as `projects/{project}`.",
+	//       "description": "REQUIRED: The resource for which the policy is being specified.\nSee the operation documentation for the appropriate value for this field.",
 	//       "location": "path",
 	//       "pattern": "^projects/[^/]+/subscriptions/[^/]+$",
 	//       "required": true,
@@ -2589,7 +2574,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	var body io.Reader = nil
 	body, err := googleapi.WithoutDataWrapper.JSONReader(c.testiampermissionsrequest)
 	if err != nil {
@@ -2654,7 +2638,7 @@
 	//   ],
 	//   "parameters": {
 	//     "resource": {
-	//       "description": "REQUIRED: The resource for which the policy detail is being requested.\n`resource` is usually specified as a path. For example, a Project\nresource is specified as `projects/{project}`.",
+	//       "description": "REQUIRED: The resource for which the policy detail is being requested.\nSee the operation documentation for the appropriate value for this field.",
 	//       "location": "path",
 	//       "pattern": "^projects/[^/]+/subscriptions/[^/]+$",
 	//       "required": true,
@@ -2726,7 +2710,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	var body io.Reader = nil
 	body, err := googleapi.WithoutDataWrapper.JSONReader(c.topic)
 	if err != nil {
@@ -2869,7 +2852,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	var body io.Reader = nil
 	c.urlParams_.Set("alt", alt)
 	urls := googleapi.ResolveRelative(c.s.BasePath, "v1beta2/{+topic}")
@@ -3007,7 +2989,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	if c.ifNoneMatch_ != "" {
 		reqHeaders.Set("If-None-Match", c.ifNoneMatch_)
 	}
@@ -3151,7 +3132,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	if c.ifNoneMatch_ != "" {
 		reqHeaders.Set("If-None-Match", c.ifNoneMatch_)
 	}
@@ -3214,7 +3194,7 @@
 	//   ],
 	//   "parameters": {
 	//     "resource": {
-	//       "description": "REQUIRED: The resource for which the policy is being requested.\n`resource` is usually specified as a path. For example, a Project\nresource is specified as `projects/{project}`.",
+	//       "description": "REQUIRED: The resource for which the policy is being requested.\nSee the operation documentation for the appropriate value for this field.",
 	//       "location": "path",
 	//       "pattern": "^projects/[^/]+/topics/[^/]+$",
 	//       "required": true,
@@ -3309,7 +3289,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	if c.ifNoneMatch_ != "" {
 		reqHeaders.Set("If-None-Match", c.ifNoneMatch_)
 	}
@@ -3477,7 +3456,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	var body io.Reader = nil
 	body, err := googleapi.WithoutDataWrapper.JSONReader(c.publishrequest)
 	if err != nil {
@@ -3616,7 +3594,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	var body io.Reader = nil
 	body, err := googleapi.WithoutDataWrapper.JSONReader(c.setiampolicyrequest)
 	if err != nil {
@@ -3681,7 +3658,7 @@
 	//   ],
 	//   "parameters": {
 	//     "resource": {
-	//       "description": "REQUIRED: The resource for which the policy is being specified.\n`resource` is usually specified as a path. For example, a Project\nresource is specified as `projects/{project}`.",
+	//       "description": "REQUIRED: The resource for which the policy is being specified.\nSee the operation documentation for the appropriate value for this field.",
 	//       "location": "path",
 	//       "pattern": "^projects/[^/]+/topics/[^/]+$",
 	//       "required": true,
@@ -3763,7 +3740,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	var body io.Reader = nil
 	body, err := googleapi.WithoutDataWrapper.JSONReader(c.testiampermissionsrequest)
 	if err != nil {
@@ -3828,7 +3804,7 @@
 	//   ],
 	//   "parameters": {
 	//     "resource": {
-	//       "description": "REQUIRED: The resource for which the policy detail is being requested.\n`resource` is usually specified as a path. For example, a Project\nresource is specified as `projects/{project}`.",
+	//       "description": "REQUIRED: The resource for which the policy detail is being requested.\nSee the operation documentation for the appropriate value for this field.",
 	//       "location": "path",
 	//       "pattern": "^projects/[^/]+/topics/[^/]+$",
 	//       "required": true,
@@ -3926,7 +3902,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	if c.ifNoneMatch_ != "" {
 		reqHeaders.Set("If-None-Match", c.ifNoneMatch_)
 	}
diff --git a/qpxexpress/v1/qpxexpress-gen.go b/qpxexpress/v1/qpxexpress-gen.go
index b14aeb2..84605ed 100644
--- a/qpxexpress/v1/qpxexpress-gen.go
+++ b/qpxexpress/v1/qpxexpress-gen.go
@@ -55,10 +55,9 @@
 }
 
 type Service struct {
-	client                    *http.Client
-	BasePath                  string // API endpoint base URL
-	UserAgent                 string // optional additional User-Agent fragment
-	GoogleClientHeaderElement string // client header fragment, for Google use only
+	client    *http.Client
+	BasePath  string // API endpoint base URL
+	UserAgent string // optional additional User-Agent fragment
 
 	Trips *TripsService
 }
@@ -70,10 +69,6 @@
 	return googleapi.UserAgent + " " + s.UserAgent
 }
 
-func (s *Service) clientHeader() string {
-	return gensupport.GoogleClientHeader("20170210", s.GoogleClientHeaderElement)
-}
-
 func NewTripsService(s *Service) *TripsService {
 	rs := &TripsService{s: s}
 	return rs
@@ -1298,7 +1293,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	var body io.Reader = nil
 	body, err := googleapi.WithoutDataWrapper.JSONReader(c.tripssearchrequest)
 	if err != nil {
diff --git a/replicapool/v1beta1/replicapool-gen.go b/replicapool/v1beta1/replicapool-gen.go
index f0354f5..9518bfa 100644
--- a/replicapool/v1beta1/replicapool-gen.go
+++ b/replicapool/v1beta1/replicapool-gen.go
@@ -79,10 +79,9 @@
 }
 
 type Service struct {
-	client                    *http.Client
-	BasePath                  string // API endpoint base URL
-	UserAgent                 string // optional additional User-Agent fragment
-	GoogleClientHeaderElement string // client header fragment, for Google use only
+	client    *http.Client
+	BasePath  string // API endpoint base URL
+	UserAgent string // optional additional User-Agent fragment
 
 	Pools *PoolsService
 
@@ -96,10 +95,6 @@
 	return googleapi.UserAgent + " " + s.UserAgent
 }
 
-func (s *Service) clientHeader() string {
-	return gensupport.GoogleClientHeader("20170210", s.GoogleClientHeaderElement)
-}
-
 func NewPoolsService(s *Service) *PoolsService {
 	rs := &PoolsService{s: s}
 	return rs
@@ -1123,7 +1118,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	var body io.Reader = nil
 	body, err := googleapi.WithoutDataWrapper.JSONReader(c.poolsdeleterequest)
 	if err != nil {
@@ -1260,7 +1254,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	if c.ifNoneMatch_ != "" {
 		reqHeaders.Set("If-None-Match", c.ifNoneMatch_)
 	}
@@ -1412,7 +1405,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	var body io.Reader = nil
 	body, err := googleapi.WithoutDataWrapper.JSONReader(c.pool)
 	if err != nil {
@@ -1583,7 +1575,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	if c.ifNoneMatch_ != "" {
 		reqHeaders.Set("If-None-Match", c.ifNoneMatch_)
 	}
@@ -1773,7 +1764,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	var body io.Reader = nil
 	c.urlParams_.Set("alt", alt)
 	urls := googleapi.ResolveRelative(c.s.BasePath, "{projectName}/zones/{zone}/pools/{poolName}/resize")
@@ -1927,7 +1917,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	var body io.Reader = nil
 	body, err := googleapi.WithoutDataWrapper.JSONReader(c.template)
 	if err != nil {
@@ -2057,7 +2046,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	var body io.Reader = nil
 	body, err := googleapi.WithoutDataWrapper.JSONReader(c.replicasdeleterequest)
 	if err != nil {
@@ -2232,7 +2220,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	if c.ifNoneMatch_ != "" {
 		reqHeaders.Set("If-None-Match", c.ifNoneMatch_)
 	}
@@ -2419,7 +2406,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	if c.ifNoneMatch_ != "" {
 		reqHeaders.Set("If-None-Match", c.ifNoneMatch_)
 	}
@@ -2608,7 +2594,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	var body io.Reader = nil
 	c.urlParams_.Set("alt", alt)
 	urls := googleapi.ResolveRelative(c.s.BasePath, "{projectName}/zones/{zone}/pools/{poolName}/replicas/{replicaName}/restart")
diff --git a/replicapool/v1beta2/replicapool-gen.go b/replicapool/v1beta2/replicapool-gen.go
index c4a420c..a52b3be 100644
--- a/replicapool/v1beta2/replicapool-gen.go
+++ b/replicapool/v1beta2/replicapool-gen.go
@@ -71,10 +71,9 @@
 }
 
 type Service struct {
-	client                    *http.Client
-	BasePath                  string // API endpoint base URL
-	UserAgent                 string // optional additional User-Agent fragment
-	GoogleClientHeaderElement string // client header fragment, for Google use only
+	client    *http.Client
+	BasePath  string // API endpoint base URL
+	UserAgent string // optional additional User-Agent fragment
 
 	InstanceGroupManagers *InstanceGroupManagersService
 
@@ -88,10 +87,6 @@
 	return googleapi.UserAgent + " " + s.UserAgent
 }
 
-func (s *Service) clientHeader() string {
-	return gensupport.GoogleClientHeader("20170210", s.GoogleClientHeaderElement)
-}
-
 func NewInstanceGroupManagersService(s *Service) *InstanceGroupManagersService {
 	rs := &InstanceGroupManagersService{s: s}
 	return rs
@@ -809,7 +804,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	var body io.Reader = nil
 	body, err := googleapi.WithoutDataWrapper.JSONReader(c.instancegroupmanagersabandoninstancesrequest)
 	if err != nil {
@@ -968,7 +962,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	var body io.Reader = nil
 	c.urlParams_.Set("alt", alt)
 	urls := googleapi.ResolveRelative(c.s.BasePath, "{project}/zones/{zone}/instanceGroupManagers/{instanceGroupManager}")
@@ -1121,7 +1114,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	var body io.Reader = nil
 	body, err := googleapi.WithoutDataWrapper.JSONReader(c.instancegroupmanagersdeleteinstancesrequest)
 	if err != nil {
@@ -1288,7 +1280,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	if c.ifNoneMatch_ != "" {
 		reqHeaders.Set("If-None-Match", c.ifNoneMatch_)
 	}
@@ -1443,7 +1434,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	var body io.Reader = nil
 	body, err := googleapi.WithoutDataWrapper.JSONReader(c.instancegroupmanager)
 	if err != nil {
@@ -1632,7 +1622,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	if c.ifNoneMatch_ != "" {
 		reqHeaders.Set("If-None-Match", c.ifNoneMatch_)
 	}
@@ -1820,7 +1809,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	var body io.Reader = nil
 	body, err := googleapi.WithoutDataWrapper.JSONReader(c.instancegroupmanagersrecreateinstancesrequest)
 	if err != nil {
@@ -1980,7 +1968,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	var body io.Reader = nil
 	c.urlParams_.Set("alt", alt)
 	urls := googleapi.ResolveRelative(c.s.BasePath, "{project}/zones/{zone}/instanceGroupManagers/{instanceGroupManager}/resize")
@@ -2140,7 +2127,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	var body io.Reader = nil
 	body, err := googleapi.WithoutDataWrapper.JSONReader(c.instancegroupmanagerssetinstancetemplaterequest)
 	if err != nil {
@@ -2300,7 +2286,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	var body io.Reader = nil
 	body, err := googleapi.WithoutDataWrapper.JSONReader(c.instancegroupmanagerssettargetpoolsrequest)
 	if err != nil {
@@ -2467,7 +2452,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	if c.ifNoneMatch_ != "" {
 		reqHeaders.Set("If-None-Match", c.ifNoneMatch_)
 	}
@@ -2651,7 +2635,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	if c.ifNoneMatch_ != "" {
 		reqHeaders.Set("If-None-Match", c.ifNoneMatch_)
 	}
diff --git a/replicapoolupdater/v1beta1/replicapoolupdater-gen.go b/replicapoolupdater/v1beta1/replicapoolupdater-gen.go
index 3c44f86..750c013 100644
--- a/replicapoolupdater/v1beta1/replicapoolupdater-gen.go
+++ b/replicapoolupdater/v1beta1/replicapoolupdater-gen.go
@@ -71,10 +71,9 @@
 }
 
 type Service struct {
-	client                    *http.Client
-	BasePath                  string // API endpoint base URL
-	UserAgent                 string // optional additional User-Agent fragment
-	GoogleClientHeaderElement string // client header fragment, for Google use only
+	client    *http.Client
+	BasePath  string // API endpoint base URL
+	UserAgent string // optional additional User-Agent fragment
 
 	RollingUpdates *RollingUpdatesService
 
@@ -88,10 +87,6 @@
 	return googleapi.UserAgent + " " + s.UserAgent
 }
 
-func (s *Service) clientHeader() string {
-	return gensupport.GoogleClientHeader("20170210", s.GoogleClientHeaderElement)
-}
-
 func NewRollingUpdatesService(s *Service) *RollingUpdatesService {
 	rs := &RollingUpdatesService{s: s}
 	return rs
@@ -855,7 +850,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	var body io.Reader = nil
 	c.urlParams_.Set("alt", alt)
 	urls := googleapi.ResolveRelative(c.s.BasePath, "{project}/zones/{zone}/rollingUpdates/{rollingUpdate}/cancel")
@@ -1013,7 +1007,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	if c.ifNoneMatch_ != "" {
 		reqHeaders.Set("If-None-Match", c.ifNoneMatch_)
 	}
@@ -1165,7 +1158,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	var body io.Reader = nil
 	body, err := googleapi.WithoutDataWrapper.JSONReader(c.rollingupdate)
 	if err != nil {
@@ -1345,7 +1337,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	if c.ifNoneMatch_ != "" {
 		reqHeaders.Set("If-None-Match", c.ifNoneMatch_)
 	}
@@ -1564,7 +1555,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	if c.ifNoneMatch_ != "" {
 		reqHeaders.Set("If-None-Match", c.ifNoneMatch_)
 	}
@@ -1758,7 +1748,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	var body io.Reader = nil
 	c.urlParams_.Set("alt", alt)
 	urls := googleapi.ResolveRelative(c.s.BasePath, "{project}/zones/{zone}/rollingUpdates/{rollingUpdate}/pause")
@@ -1906,7 +1895,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	var body io.Reader = nil
 	c.urlParams_.Set("alt", alt)
 	urls := googleapi.ResolveRelative(c.s.BasePath, "{project}/zones/{zone}/rollingUpdates/{rollingUpdate}/resume")
@@ -2055,7 +2043,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	var body io.Reader = nil
 	c.urlParams_.Set("alt", alt)
 	urls := googleapi.ResolveRelative(c.s.BasePath, "{project}/zones/{zone}/rollingUpdates/{rollingUpdate}/rollback")
@@ -2212,7 +2199,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	if c.ifNoneMatch_ != "" {
 		reqHeaders.Set("If-None-Match", c.ifNoneMatch_)
 	}
@@ -2394,7 +2380,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	if c.ifNoneMatch_ != "" {
 		reqHeaders.Set("If-None-Match", c.ifNoneMatch_)
 	}
diff --git a/reseller/v1/reseller-gen.go b/reseller/v1/reseller-gen.go
index 928e481..f349708 100644
--- a/reseller/v1/reseller-gen.go
+++ b/reseller/v1/reseller-gen.go
@@ -66,10 +66,9 @@
 }
 
 type Service struct {
-	client                    *http.Client
-	BasePath                  string // API endpoint base URL
-	UserAgent                 string // optional additional User-Agent fragment
-	GoogleClientHeaderElement string // client header fragment, for Google use only
+	client    *http.Client
+	BasePath  string // API endpoint base URL
+	UserAgent string // optional additional User-Agent fragment
 
 	Customers *CustomersService
 
@@ -85,10 +84,6 @@
 	return googleapi.UserAgent + " " + s.UserAgent
 }
 
-func (s *Service) clientHeader() string {
-	return gensupport.GoogleClientHeader("20170210", s.GoogleClientHeaderElement)
-}
-
 func NewCustomersService(s *Service) *CustomersService {
 	rs := &CustomersService{s: s}
 	return rs
@@ -894,7 +889,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	if c.ifNoneMatch_ != "" {
 		reqHeaders.Set("If-None-Match", c.ifNoneMatch_)
 	}
@@ -1034,7 +1028,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	var body io.Reader = nil
 	body, err := googleapi.WithoutDataWrapper.JSONReader(c.customer)
 	if err != nil {
@@ -1162,7 +1155,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	var body io.Reader = nil
 	body, err := googleapi.WithoutDataWrapper.JSONReader(c.customer)
 	if err != nil {
@@ -1296,7 +1288,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	var body io.Reader = nil
 	body, err := googleapi.WithoutDataWrapper.JSONReader(c.customer)
 	if err != nil {
@@ -1438,7 +1429,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	if c.ifNoneMatch_ != "" {
 		reqHeaders.Set("If-None-Match", c.ifNoneMatch_)
 	}
@@ -1559,7 +1549,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	var body io.Reader = nil
 	c.urlParams_.Set("alt", alt)
 	urls := googleapi.ResolveRelative(c.s.BasePath, "resellernotify/register")
@@ -1682,7 +1671,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	var body io.Reader = nil
 	c.urlParams_.Set("alt", alt)
 	urls := googleapi.ResolveRelative(c.s.BasePath, "resellernotify/unregister")
@@ -1802,7 +1790,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	var body io.Reader = nil
 	c.urlParams_.Set("alt", alt)
 	urls := googleapi.ResolveRelative(c.s.BasePath, "customers/{customerId}/subscriptions/{subscriptionId}/activate")
@@ -1940,7 +1927,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	var body io.Reader = nil
 	body, err := googleapi.WithoutDataWrapper.JSONReader(c.changeplanrequest)
 	if err != nil {
@@ -2085,7 +2071,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	var body io.Reader = nil
 	body, err := googleapi.WithoutDataWrapper.JSONReader(c.renewalsettings)
 	if err != nil {
@@ -2229,7 +2214,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	var body io.Reader = nil
 	body, err := googleapi.WithoutDataWrapper.JSONReader(c.seats)
 	if err != nil {
@@ -2372,7 +2356,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	var body io.Reader = nil
 	c.urlParams_.Set("alt", alt)
 	urls := googleapi.ResolveRelative(c.s.BasePath, "customers/{customerId}/subscriptions/{subscriptionId}")
@@ -2508,7 +2491,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	if c.ifNoneMatch_ != "" {
 		reqHeaders.Set("If-None-Match", c.ifNoneMatch_)
 	}
@@ -2658,7 +2640,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	var body io.Reader = nil
 	body, err := googleapi.WithoutDataWrapper.JSONReader(c.subscription)
 	if err != nil {
@@ -2858,7 +2839,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	if c.ifNoneMatch_ != "" {
 		reqHeaders.Set("If-None-Match", c.ifNoneMatch_)
 	}
@@ -3026,7 +3006,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	var body io.Reader = nil
 	c.urlParams_.Set("alt", alt)
 	urls := googleapi.ResolveRelative(c.s.BasePath, "customers/{customerId}/subscriptions/{subscriptionId}/startPaidService")
@@ -3160,7 +3139,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	var body io.Reader = nil
 	c.urlParams_.Set("alt", alt)
 	urls := googleapi.ResolveRelative(c.s.BasePath, "customers/{customerId}/subscriptions/{subscriptionId}/suspend")
diff --git a/resourceviews/v1beta1/resourceviews-gen.go b/resourceviews/v1beta1/resourceviews-gen.go
index f56ca7b..27ac84b 100644
--- a/resourceviews/v1beta1/resourceviews-gen.go
+++ b/resourceviews/v1beta1/resourceviews-gen.go
@@ -79,10 +79,9 @@
 }
 
 type Service struct {
-	client                    *http.Client
-	BasePath                  string // API endpoint base URL
-	UserAgent                 string // optional additional User-Agent fragment
-	GoogleClientHeaderElement string // client header fragment, for Google use only
+	client    *http.Client
+	BasePath  string // API endpoint base URL
+	UserAgent string // optional additional User-Agent fragment
 
 	RegionViews *RegionViewsService
 
@@ -96,10 +95,6 @@
 	return googleapi.UserAgent + " " + s.UserAgent
 }
 
-func (s *Service) clientHeader() string {
-	return gensupport.GoogleClientHeader("20170210", s.GoogleClientHeaderElement)
-}
-
 func NewRegionViewsService(s *Service) *RegionViewsService {
 	rs := &RegionViewsService{s: s}
 	return rs
@@ -587,7 +582,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	var body io.Reader = nil
 	body, err := googleapi.WithoutDataWrapper.JSONReader(c.regionviewsaddresourcesrequest)
 	if err != nil {
@@ -713,7 +707,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	var body io.Reader = nil
 	c.urlParams_.Set("alt", alt)
 	urls := googleapi.ResolveRelative(c.s.BasePath, "{projectName}/regions/{region}/resourceViews/{resourceViewName}")
@@ -842,7 +835,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	if c.ifNoneMatch_ != "" {
 		reqHeaders.Set("If-None-Match", c.ifNoneMatch_)
 	}
@@ -994,7 +986,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	var body io.Reader = nil
 	body, err := googleapi.WithoutDataWrapper.JSONReader(c.resourceview)
 	if err != nil {
@@ -1166,7 +1157,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	if c.ifNoneMatch_ != "" {
 		reqHeaders.Set("If-None-Match", c.ifNoneMatch_)
 	}
@@ -1362,7 +1352,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	var body io.Reader = nil
 	c.urlParams_.Set("alt", alt)
 	urls := googleapi.ResolveRelative(c.s.BasePath, "{projectName}/regions/{region}/resourceViews/{resourceViewName}/resources")
@@ -1548,7 +1537,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	var body io.Reader = nil
 	body, err := googleapi.WithoutDataWrapper.JSONReader(c.regionviewsremoveresourcesrequest)
 	if err != nil {
@@ -1676,7 +1664,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	var body io.Reader = nil
 	body, err := googleapi.WithoutDataWrapper.JSONReader(c.zoneviewsaddresourcesrequest)
 	if err != nil {
@@ -1802,7 +1789,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	var body io.Reader = nil
 	c.urlParams_.Set("alt", alt)
 	urls := googleapi.ResolveRelative(c.s.BasePath, "{projectName}/zones/{zone}/resourceViews/{resourceViewName}")
@@ -1931,7 +1917,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	if c.ifNoneMatch_ != "" {
 		reqHeaders.Set("If-None-Match", c.ifNoneMatch_)
 	}
@@ -2083,7 +2068,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	var body io.Reader = nil
 	body, err := googleapi.WithoutDataWrapper.JSONReader(c.resourceview)
 	if err != nil {
@@ -2255,7 +2239,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	if c.ifNoneMatch_ != "" {
 		reqHeaders.Set("If-None-Match", c.ifNoneMatch_)
 	}
@@ -2451,7 +2434,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	var body io.Reader = nil
 	c.urlParams_.Set("alt", alt)
 	urls := googleapi.ResolveRelative(c.s.BasePath, "{projectName}/zones/{zone}/resourceViews/{resourceViewName}/resources")
@@ -2637,7 +2619,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	var body io.Reader = nil
 	body, err := googleapi.WithoutDataWrapper.JSONReader(c.zoneviewsremoveresourcesrequest)
 	if err != nil {
diff --git a/resourceviews/v1beta2/resourceviews-gen.go b/resourceviews/v1beta2/resourceviews-gen.go
index 32dede3..79f061d 100644
--- a/resourceviews/v1beta2/resourceviews-gen.go
+++ b/resourceviews/v1beta2/resourceviews-gen.go
@@ -79,10 +79,9 @@
 }
 
 type Service struct {
-	client                    *http.Client
-	BasePath                  string // API endpoint base URL
-	UserAgent                 string // optional additional User-Agent fragment
-	GoogleClientHeaderElement string // client header fragment, for Google use only
+	client    *http.Client
+	BasePath  string // API endpoint base URL
+	UserAgent string // optional additional User-Agent fragment
 
 	ZoneOperations *ZoneOperationsService
 
@@ -96,10 +95,6 @@
 	return googleapi.UserAgent + " " + s.UserAgent
 }
 
-func (s *Service) clientHeader() string {
-	return gensupport.GoogleClientHeader("20170210", s.GoogleClientHeaderElement)
-}
-
 func NewZoneOperationsService(s *Service) *ZoneOperationsService {
 	rs := &ZoneOperationsService{s: s}
 	return rs
@@ -845,7 +840,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	if c.ifNoneMatch_ != "" {
 		reqHeaders.Set("If-None-Match", c.ifNoneMatch_)
 	}
@@ -1033,7 +1027,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	if c.ifNoneMatch_ != "" {
 		reqHeaders.Set("If-None-Match", c.ifNoneMatch_)
 	}
@@ -1221,7 +1214,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	var body io.Reader = nil
 	body, err := googleapi.WithoutDataWrapper.JSONReader(c.zoneviewsaddresourcesrequest)
 	if err != nil {
@@ -1375,7 +1367,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	var body io.Reader = nil
 	c.urlParams_.Set("alt", alt)
 	urls := googleapi.ResolveRelative(c.s.BasePath, "{project}/zones/{zone}/resourceViews/{resourceView}")
@@ -1532,7 +1523,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	if c.ifNoneMatch_ != "" {
 		reqHeaders.Set("If-None-Match", c.ifNoneMatch_)
 	}
@@ -1693,7 +1683,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	var body io.Reader = nil
 	c.urlParams_.Set("alt", alt)
 	urls := googleapi.ResolveRelative(c.s.BasePath, "{project}/zones/{zone}/resourceViews/{resourceView}/getService")
@@ -1844,7 +1833,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	var body io.Reader = nil
 	body, err := googleapi.WithoutDataWrapper.JSONReader(c.resourceview)
 	if err != nil {
@@ -2016,7 +2004,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	if c.ifNoneMatch_ != "" {
 		reqHeaders.Set("If-None-Match", c.ifNoneMatch_)
 	}
@@ -2256,7 +2243,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	if c.ifNoneMatch_ != "" {
 		reqHeaders.Set("If-None-Match", c.ifNoneMatch_)
 	}
@@ -2479,7 +2465,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	var body io.Reader = nil
 	body, err := googleapi.WithoutDataWrapper.JSONReader(c.zoneviewsremoveresourcesrequest)
 	if err != nil {
@@ -2636,7 +2621,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	var body io.Reader = nil
 	body, err := googleapi.WithoutDataWrapper.JSONReader(c.zoneviewssetservicerequest)
 	if err != nil {
diff --git a/runtimeconfig/v1/runtimeconfig-api.json b/runtimeconfig/v1/runtimeconfig-api.json
index ed168d9..eec8360 100644
--- a/runtimeconfig/v1/runtimeconfig-api.json
+++ b/runtimeconfig/v1/runtimeconfig-api.json
@@ -1,105 +1,9 @@
 {
-  "discoveryVersion": "v1",
-  "version_module": "True",
-  "schemas": {
-    "CancelOperationRequest": {
-      "properties": {},
-      "id": "CancelOperationRequest",
-      "description": "The request message for Operations.CancelOperation.",
-      "type": "object"
-    },
-    "Status": {
-      "description": "The `Status` type defines a logical error model that is suitable for different\nprogramming environments, including REST APIs and RPC APIs. It is used by\n[gRPC](https://github.com/grpc). The error model is designed to be:\n\n- Simple to use and understand for most users\n- Flexible enough to meet unexpected needs\n\n# Overview\n\nThe `Status` message contains three pieces of data: error code, error message,\nand error details. The error code should be an enum value of\ngoogle.rpc.Code, but it may accept additional error codes if needed.  The\nerror message should be a developer-facing English message that helps\ndevelopers *understand* and *resolve* the error. If a localized user-facing\nerror message is needed, put the localized message in the error details or\nlocalize it in the client. The optional error details may contain arbitrary\ninformation about the error. There is a predefined set of error detail types\nin the package `google.rpc` which can be used for common error conditions.\n\n# Language mapping\n\nThe `Status` message is the logical representation of the error model, but it\nis not necessarily the actual wire format. When the `Status` message is\nexposed in different client libraries and different wire protocols, it can be\nmapped differently. For example, it will likely be mapped to some exceptions\nin Java, but more likely mapped to some error codes in C.\n\n# Other uses\n\nThe error model and the `Status` message can be used in a variety of\nenvironments, either with or without APIs, to provide a\nconsistent developer experience across different environments.\n\nExample uses of this error model include:\n\n- Partial errors. If a service needs to return partial errors to the client,\n    it may embed the `Status` in the normal response to indicate the partial\n    errors.\n\n- Workflow errors. A typical workflow has multiple steps. Each step may\n    have a `Status` message for error reporting purpose.\n\n- Batch operations. If a client uses batch request and batch response, the\n    `Status` message should be used directly inside batch response, one for\n    each error sub-response.\n\n- Asynchronous operations. If an API call embeds asynchronous operation\n    results in its response, the status of those operations should be\n    represented directly using the `Status` message.\n\n- Logging. If some API errors are stored in logs, the message `Status` could\n    be used directly after any stripping needed for security/privacy reasons.",
-      "type": "object",
-      "properties": {
-        "message": {
-          "description": "A developer-facing error message, which should be in English. Any\nuser-facing error message should be localized and sent in the\ngoogle.rpc.Status.details field, or localized by the client.",
-          "type": "string"
-        },
-        "details": {
-          "description": "A list of messages that carry the error details.  There will be a\ncommon 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"
-            },
-            "type": "object"
-          }
-        },
-        "code": {
-          "description": "The status code, which should be an enum value of google.rpc.Code.",
-          "format": "int32",
-          "type": "integer"
-        }
-      },
-      "id": "Status"
-    },
-    "ListOperationsResponse": {
-      "description": "The response message for Operations.ListOperations.",
-      "type": "object",
-      "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.",
-          "type": "array",
-          "items": {
-            "$ref": "Operation"
-          }
-        }
-      },
-      "id": "ListOperationsResponse"
-    },
-    "Operation": {
-      "properties": {
-        "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\nmethod returns no data on success, such as `Delete`, the response is\n`google.protobuf.Empty`.  If the original method is standard\n`Get`/`Create`/`Update`, the response should be the resource.  For other\nmethods, the response should have the type `XxxResponse`, where `Xxx`\nis the original method name.  For example, if the original method name\nis `TakeSnapshot()`, the inferred response type is\n`TakeSnapshotResponse`.",
-          "type": "object"
-        },
-        "name": {
-          "description": "The server-assigned name, which is only unique within the same service that\noriginally returns it. If you use the default HTTP mapping, the\n`name` should have the format of `operations/some/unique/name`.",
-          "type": "string"
-        },
-        "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\ncontains progress information and common metadata such as create time.\nSome services might not provide such metadata.  Any method that returns a\nlong-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.\nIf true, the operation is completed, and either `error` or `response` is\navailable.",
-          "type": "boolean"
-        }
-      },
-      "id": "Operation",
-      "description": "This resource represents a long-running operation that is the result of a\nnetwork API call.",
-      "type": "object"
-    },
-    "Empty": {
-      "properties": {},
-      "id": "Empty",
-      "description": "A generic empty message that you can re-use to avoid defining duplicated\nempty messages in your APIs. A typical example is to use it as the request\nor the response type of an API method. For instance:\n\n    service Foo {\n      rpc Bar(google.protobuf.Empty) returns (google.protobuf.Empty);\n    }\n\nThe JSON representation for `Empty` is empty JSON object `{}`.",
-      "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"
-  },
   "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"
+  },
   "canonicalName": "Cloud RuntimeConfig",
   "auth": {
     "oauth2": {
@@ -123,84 +27,88 @@
     "operations": {
       "methods": {
         "cancel": {
-          "path": "v1/{+name}:cancel",
+          "flatPath": "v1/operations/{operationsId}:cancel",
           "id": "runtimeconfig.operations.cancel",
+          "path": "v1/{+name}:cancel",
+          "description": "Starts asynchronous cancellation on a long-running operation.  The server\nmakes a best effort to cancel the operation, but success is not\nguaranteed.  If the server doesn't support this method, it returns\n`google.rpc.Code.UNIMPLEMENTED`.  Clients can use\nOperations.GetOperation or\nother methods to check whether the cancellation succeeded or whether the\noperation completed despite cancellation. On successful cancellation,\nthe operation is not deleted; instead, it becomes an operation with\nan Operation.error value with a google.rpc.Status.code of 1,\ncorresponding to `Code.CANCELLED`.",
           "request": {
             "$ref": "CancelOperationRequest"
           },
-          "description": "Starts asynchronous cancellation on a long-running operation.  The server\nmakes a best effort to cancel the operation, but success is not\nguaranteed.  If the server doesn't support this method, it returns\n`google.rpc.Code.UNIMPLEMENTED`.  Clients can use\nOperations.GetOperation or\nother methods to check whether the cancellation succeeded or whether the\noperation completed despite cancellation. On successful cancellation,\nthe operation is not deleted; instead, it becomes an operation with\nan Operation.error value with a google.rpc.Status.code of 1,\ncorresponding to `Code.CANCELLED`.",
-          "response": {
-            "$ref": "Empty"
-          },
+          "httpMethod": "POST",
           "parameterOrder": [
             "name"
           ],
-          "httpMethod": "POST",
+          "response": {
+            "$ref": "Empty"
+          },
+          "scopes": [
+            "https://www.googleapis.com/auth/cloud-platform",
+            "https://www.googleapis.com/auth/cloudruntimeconfig"
+          ],
           "parameters": {
             "name": {
-              "pattern": "^operations/.+$",
               "location": "path",
               "description": "The name of the operation resource to be cancelled.",
               "required": true,
-              "type": "string"
+              "type": "string",
+              "pattern": "^operations/.+$"
             }
-          },
-          "scopes": [
-            "https://www.googleapis.com/auth/cloud-platform",
-            "https://www.googleapis.com/auth/cloudruntimeconfig"
-          ],
-          "flatPath": "v1/operations/{operationsId}:cancel"
+          }
         },
         "delete": {
-          "httpMethod": "DELETE",
-          "parameterOrder": [
-            "name"
-          ],
           "response": {
             "$ref": "Empty"
           },
-          "scopes": [
-            "https://www.googleapis.com/auth/cloud-platform",
-            "https://www.googleapis.com/auth/cloudruntimeconfig"
-          ],
-          "parameters": {
-            "name": {
-              "pattern": "^operations/.+$",
-              "location": "path",
-              "description": "The name of the operation resource to be deleted.",
-              "required": true,
-              "type": "string"
-            }
-          },
-          "flatPath": "v1/operations/{operationsId}",
-          "id": "runtimeconfig.operations.delete",
-          "path": "v1/{+name}",
-          "description": "Deletes a long-running operation. This method indicates that the client is\nno longer interested in the operation result. It does not cancel the\noperation. If the server doesn't support this method, it returns\n`google.rpc.Code.UNIMPLEMENTED`."
-        },
-        "list": {
-          "httpMethod": "GET",
-          "response": {
-            "$ref": "ListOperationsResponse"
-          },
           "parameterOrder": [
             "name"
           ],
+          "httpMethod": "DELETE",
           "scopes": [
             "https://www.googleapis.com/auth/cloud-platform",
             "https://www.googleapis.com/auth/cloudruntimeconfig"
           ],
           "parameters": {
             "name": {
-              "description": "The name of the operation collection.",
+              "location": "path",
+              "description": "The name of the operation resource to be deleted.",
+              "required": true,
+              "type": "string",
+              "pattern": "^operations/.+$"
+            }
+          },
+          "flatPath": "v1/operations/{operationsId}",
+          "path": "v1/{+name}",
+          "id": "runtimeconfig.operations.delete",
+          "description": "Deletes a long-running operation. This method indicates that the client is\nno longer interested in the operation result. It does not cancel the\noperation. If the server doesn't support this method, it returns\n`google.rpc.Code.UNIMPLEMENTED`."
+        },
+        "list": {
+          "flatPath": "v1/operations",
+          "id": "runtimeconfig.operations.list",
+          "path": "v1/{+name}",
+          "description": "Lists operations that match the specified filter in the request. If the\nserver doesn't support this method, it returns `UNIMPLEMENTED`.\n\nNOTE: the `name` binding below allows API services to override the binding\nto use different resource name schemes, such as `users/*/operations`.",
+          "httpMethod": "GET",
+          "parameterOrder": [
+            "name"
+          ],
+          "response": {
+            "$ref": "ListOperationsResponse"
+          },
+          "scopes": [
+            "https://www.googleapis.com/auth/cloud-platform",
+            "https://www.googleapis.com/auth/cloudruntimeconfig"
+          ],
+          "parameters": {
+            "name": {
               "required": true,
               "type": "string",
               "pattern": "^operations$",
-              "location": "path"
+              "location": "path",
+              "description": "The name of the operation collection."
             },
             "pageToken": {
-              "description": "The standard list page token.",
               "type": "string",
-              "location": "query"
+              "location": "query",
+              "description": "The standard list page token."
             },
             "pageSize": {
               "location": "query",
@@ -209,48 +117,16 @@
               "type": "integer"
             },
             "filter": {
+              "location": "query",
               "description": "The standard list filter.",
-              "type": "string",
-              "location": "query"
+              "type": "string"
             }
-          },
-          "flatPath": "v1/operations",
-          "id": "runtimeconfig.operations.list",
-          "path": "v1/{+name}",
-          "description": "Lists operations that match the specified filter in the request. If the\nserver doesn't support this method, it returns `UNIMPLEMENTED`.\n\nNOTE: the `name` binding below allows API services to override the binding\nto use different resource name schemes, such as `users/*/operations`."
+          }
         }
       }
     }
   },
   "parameters": {
-    "uploadType": {
-      "location": "query",
-      "description": "Legacy upload protocol for media (e.g. \"media\", \"multipart\").",
-      "type": "string"
-    },
-    "fields": {
-      "description": "Selector specifying which fields to include in a partial response.",
-      "type": "string",
-      "location": "query"
-    },
-    "$.xgafv": {
-      "enum": [
-        "1",
-        "2"
-      ],
-      "description": "V1 error format.",
-      "type": "string",
-      "enumDescriptions": [
-        "v1 error format",
-        "v2 error format"
-      ],
-      "location": "query"
-    },
-    "callback": {
-      "location": "query",
-      "description": "JSONP",
-      "type": "string"
-    },
     "alt": {
       "enum": [
         "json",
@@ -273,25 +149,25 @@
       "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"
+      "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."
     },
     "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",
-      "location": "query"
+      "type": "string"
     },
     "pp": {
-      "description": "Pretty-print response.",
       "type": "boolean",
       "default": "true",
-      "location": "query"
+      "location": "query",
+      "description": "Pretty-print response."
     },
     "oauth_token": {
-      "description": "OAuth 2.0 token for the current user.",
       "type": "string",
-      "location": "query"
+      "location": "query",
+      "description": "OAuth 2.0 token for the current user."
     },
     "bearer_token": {
       "location": "query",
@@ -299,15 +175,43 @@
       "type": "string"
     },
     "upload_protocol": {
+      "type": "string",
       "location": "query",
-      "description": "Upload protocol for media (e.g. \"raw\", \"multipart\").",
-      "type": "string"
+      "description": "Upload protocol for media (e.g. \"raw\", \"multipart\")."
     },
     "prettyPrint": {
-      "description": "Returns response with indentations and line breaks.",
       "type": "boolean",
       "default": "true",
-      "location": "query"
+      "location": "query",
+      "description": "Returns response with indentations and line breaks."
+    },
+    "fields": {
+      "location": "query",
+      "description": "Selector specifying which fields to include in a partial response.",
+      "type": "string"
+    },
+    "uploadType": {
+      "type": "string",
+      "location": "query",
+      "description": "Legacy upload protocol for media (e.g. \"media\", \"multipart\")."
+    },
+    "$.xgafv": {
+      "location": "query",
+      "enum": [
+        "1",
+        "2"
+      ],
+      "description": "V1 error format.",
+      "type": "string",
+      "enumDescriptions": [
+        "v1 error format",
+        "v2 error format"
+      ]
+    },
+    "callback": {
+      "type": "string",
+      "location": "query",
+      "description": "JSONP"
     }
   },
   "version": "v1",
@@ -316,7 +220,103 @@
   "description": "Provides capabilities for dynamic configuration and coordination for applications running on Google Cloud Platform.\n",
   "servicePath": "",
   "basePath": "",
+  "revision": "20170224",
   "id": "runtimeconfig:v1",
   "documentationLink": "https://cloud.google.com/deployment-manager/runtime-configurator/",
-  "revision": "20170224"
+  "discoveryVersion": "v1",
+  "version_module": "True",
+  "schemas": {
+    "CancelOperationRequest": {
+      "description": "The request message for Operations.CancelOperation.",
+      "type": "object",
+      "properties": {},
+      "id": "CancelOperationRequest"
+    },
+    "Status": {
+      "type": "object",
+      "properties": {
+        "code": {
+          "type": "integer",
+          "description": "The status code, which should be an enum value of google.rpc.Code.",
+          "format": "int32"
+        },
+        "message": {
+          "description": "A developer-facing error message, which should be in English. Any\nuser-facing error message should be localized and sent in the\ngoogle.rpc.Status.details field, or localized by the client.",
+          "type": "string"
+        },
+        "details": {
+          "description": "A list of messages that carry the error details.  There will be a\ncommon set of message types for APIs to use.",
+          "type": "array",
+          "items": {
+            "type": "object",
+            "additionalProperties": {
+              "type": "any",
+              "description": "Properties of the object. Contains field @type with type URL."
+            }
+          }
+        }
+      },
+      "id": "Status",
+      "description": "The `Status` type defines a logical error model that is suitable for different\nprogramming environments, including REST APIs and RPC APIs. It is used by\n[gRPC](https://github.com/grpc). The error model is designed to be:\n\n- Simple to use and understand for most users\n- Flexible enough to meet unexpected needs\n\n# Overview\n\nThe `Status` message contains three pieces of data: error code, error message,\nand error details. The error code should be an enum value of\ngoogle.rpc.Code, but it may accept additional error codes if needed.  The\nerror message should be a developer-facing English message that helps\ndevelopers *understand* and *resolve* the error. If a localized user-facing\nerror message is needed, put the localized message in the error details or\nlocalize it in the client. The optional error details may contain arbitrary\ninformation about the error. There is a predefined set of error detail types\nin the package `google.rpc` which can be used for common error conditions.\n\n# Language mapping\n\nThe `Status` message is the logical representation of the error model, but it\nis not necessarily the actual wire format. When the `Status` message is\nexposed in different client libraries and different wire protocols, it can be\nmapped differently. For example, it will likely be mapped to some exceptions\nin Java, but more likely mapped to some error codes in C.\n\n# Other uses\n\nThe error model and the `Status` message can be used in a variety of\nenvironments, either with or without APIs, to provide a\nconsistent developer experience across different environments.\n\nExample uses of this error model include:\n\n- Partial errors. If a service needs to return partial errors to the client,\n    it may embed the `Status` in the normal response to indicate the partial\n    errors.\n\n- Workflow errors. A typical workflow has multiple steps. Each step may\n    have a `Status` message for error reporting purpose.\n\n- Batch operations. If a client uses batch request and batch response, the\n    `Status` message should be used directly inside batch response, one for\n    each error sub-response.\n\n- Asynchronous operations. If an API call embeds asynchronous operation\n    results in its response, the status of those operations should be\n    represented directly using the `Status` message.\n\n- Logging. If some API errors are stored in logs, the message `Status` could\n    be used directly after any stripping needed for security/privacy reasons."
+    },
+    "ListOperationsResponse": {
+      "type": "object",
+      "properties": {
+        "nextPageToken": {
+          "description": "The standard List next-page token.",
+          "type": "string"
+        },
+        "operations": {
+          "type": "array",
+          "items": {
+            "$ref": "Operation"
+          },
+          "description": "A list of operations that matches the specified filter in the request."
+        }
+      },
+      "id": "ListOperationsResponse",
+      "description": "The response message for Operations.ListOperations."
+    },
+    "Operation": {
+      "type": "object",
+      "properties": {
+        "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\ncontains progress information and common metadata such as create time.\nSome services might not provide such metadata.  Any method that returns a\nlong-running operation should document the metadata type, if any."
+        },
+        "done": {
+          "type": "boolean",
+          "description": "If the value is `false`, it means the operation is still in progress.\nIf true, the operation is completed, and either `error` or `response` is\navailable."
+        },
+        "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\nmethod returns no data on success, such as `Delete`, the response is\n`google.protobuf.Empty`.  If the original method is standard\n`Get`/`Create`/`Update`, the response should be the resource.  For other\nmethods, the response should have the type `XxxResponse`, where `Xxx`\nis the original method name.  For example, if the original method name\nis `TakeSnapshot()`, the inferred response type is\n`TakeSnapshotResponse`.",
+          "type": "object"
+        },
+        "name": {
+          "description": "The server-assigned name, which is only unique within the same service that\noriginally returns it. If you use the default HTTP mapping, the\n`name` should have the format of `operations/some/unique/name`.",
+          "type": "string"
+        },
+        "error": {
+          "$ref": "Status",
+          "description": "The error result of the operation in case of failure or cancellation."
+        }
+      },
+      "id": "Operation",
+      "description": "This resource represents a long-running operation that is the result of a\nnetwork API call."
+    },
+    "Empty": {
+      "type": "object",
+      "properties": {},
+      "id": "Empty",
+      "description": "A generic empty message that you can re-use to avoid defining duplicated\nempty messages in your APIs. A typical example is to use it as the request\nor the response type of an API method. For instance:\n\n    service Foo {\n      rpc Bar(google.protobuf.Empty) returns (google.protobuf.Empty);\n    }\n\nThe JSON representation for `Empty` is empty JSON object `{}`."
+    }
+  }
 }
diff --git a/runtimeconfig/v1/runtimeconfig-gen.go b/runtimeconfig/v1/runtimeconfig-gen.go
index e4afffc..a1dc854 100644
--- a/runtimeconfig/v1/runtimeconfig-gen.go
+++ b/runtimeconfig/v1/runtimeconfig-gen.go
@@ -64,10 +64,9 @@
 }
 
 type Service struct {
-	client                    *http.Client
-	BasePath                  string // API endpoint base URL
-	UserAgent                 string // optional additional User-Agent fragment
-	GoogleClientHeaderElement string // client header fragment, for Google use only
+	client    *http.Client
+	BasePath  string // API endpoint base URL
+	UserAgent string // optional additional User-Agent fragment
 
 	Operations *OperationsService
 }
@@ -79,10 +78,6 @@
 	return googleapi.UserAgent + " " + s.UserAgent
 }
 
-func (s *Service) clientHeader() string {
-	return gensupport.GoogleClientHeader("20170210", s.GoogleClientHeaderElement)
-}
-
 func NewOperationsService(s *Service) *OperationsService {
 	rs := &OperationsService{s: s}
 	return rs
@@ -409,7 +404,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	var body io.Reader = nil
 	body, err := googleapi.WithoutDataWrapper.JSONReader(c.canceloperationrequest)
 	if err != nil {
@@ -550,7 +544,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	var body io.Reader = nil
 	c.urlParams_.Set("alt", alt)
 	urls := googleapi.ResolveRelative(c.s.BasePath, "v1/{+name}")
@@ -716,7 +709,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	if c.ifNoneMatch_ != "" {
 		reqHeaders.Set("If-None-Match", c.ifNoneMatch_)
 	}
diff --git a/runtimeconfig/v1beta1/runtimeconfig-api.json b/runtimeconfig/v1beta1/runtimeconfig-api.json
index 65cc47f..8b78822 100644
--- a/runtimeconfig/v1beta1/runtimeconfig-api.json
+++ b/runtimeconfig/v1beta1/runtimeconfig-api.json
@@ -1,13 +1,12 @@
 {
-  "canonicalName": "Cloud RuntimeConfig",
   "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/cloudruntimeconfig": {
           "description": "Manage your Google Cloud Platform services' runtime configuration"
+        },
+        "https://www.googleapis.com/auth/cloud-platform": {
+          "description": "View and manage your data across Google Cloud Platform services"
         }
       }
     }
@@ -23,23 +22,55 @@
       "resources": {
         "configs": {
           "methods": {
-            "update": {
-              "path": "v1beta1/{+name}",
-              "id": "runtimeconfig.projects.configs.update",
+            "create": {
               "request": {
                 "$ref": "RuntimeConfig"
               },
-              "description": "Updates a RuntimeConfig resource. The configuration must exist beforehand.",
+              "description": "Creates a new RuntimeConfig resource. The configuration name must be\nunique within project.",
               "response": {
                 "$ref": "RuntimeConfig"
               },
               "parameterOrder": [
-                "name"
+                "parent"
               ],
-              "httpMethod": "PUT",
+              "httpMethod": "POST",
               "parameters": {
-                "name": {
-                  "description": "The name of the RuntimeConfig resource to update, in the format:\n\n`projects/[PROJECT_ID]/configs/[CONFIG_NAME]`",
+                "requestId": {
+                  "description": "An optional but recommended unique `request_id`. If the server\nreceives two `create()` requests  with the same\n`request_id`, then the second request will be ignored and the\nfirst resource created and stored in the backend is returned.\nEmpty `request_id` fields are ignored.\n\nIt is responsibility of the client to ensure uniqueness of the\n`request_id` strings.\n\n`request_id` strings are limited to 64 characters.",
+                  "type": "string",
+                  "location": "query"
+                },
+                "parent": {
+                  "pattern": "^projects/[^/]+$",
+                  "location": "path",
+                  "description": "The [project ID](https://support.google.com/cloud/answer/6158840?hl=en&ref_topic=6158848)\nfor this request, in the format `projects/[PROJECT_ID]`.",
+                  "required": true,
+                  "type": "string"
+                }
+              },
+              "scopes": [
+                "https://www.googleapis.com/auth/cloud-platform",
+                "https://www.googleapis.com/auth/cloudruntimeconfig"
+              ],
+              "flatPath": "v1beta1/projects/{projectsId}/configs",
+              "path": "v1beta1/{+parent}/configs",
+              "id": "runtimeconfig.projects.configs.create"
+            },
+            "setIamPolicy": {
+              "request": {
+                "$ref": "SetIamPolicyRequest"
+              },
+              "description": "Sets the access control policy on the specified resource. Replaces any\nexisting policy.",
+              "httpMethod": "POST",
+              "parameterOrder": [
+                "resource"
+              ],
+              "response": {
+                "$ref": "Policy"
+              },
+              "parameters": {
+                "resource": {
+                  "description": "REQUIRED: The resource for which the policy is being specified.\nSee the operation documentation for the appropriate value for this field.",
                   "required": true,
                   "type": "string",
                   "pattern": "^projects/[^/]+/configs/[^/]+$",
@@ -50,15 +81,92 @@
                 "https://www.googleapis.com/auth/cloud-platform",
                 "https://www.googleapis.com/auth/cloudruntimeconfig"
               ],
-              "flatPath": "v1beta1/projects/{projectsId}/configs/{configsId}"
+              "flatPath": "v1beta1/projects/{projectsId}/configs/{configsId}:setIamPolicy",
+              "id": "runtimeconfig.projects.configs.setIamPolicy",
+              "path": "v1beta1/{+resource}:setIamPolicy"
+            },
+            "getIamPolicy": {
+              "response": {
+                "$ref": "Policy"
+              },
+              "httpMethod": "GET",
+              "parameterOrder": [
+                "resource"
+              ],
+              "parameters": {
+                "resource": {
+                  "pattern": "^projects/[^/]+/configs/[^/]+$",
+                  "location": "path",
+                  "description": "REQUIRED: The resource for which the policy is being requested.\nSee the operation documentation for the appropriate value for this field.",
+                  "required": true,
+                  "type": "string"
+                }
+              },
+              "scopes": [
+                "https://www.googleapis.com/auth/cloud-platform",
+                "https://www.googleapis.com/auth/cloudruntimeconfig"
+              ],
+              "flatPath": "v1beta1/projects/{projectsId}/configs/{configsId}:getIamPolicy",
+              "path": "v1beta1/{+resource}:getIamPolicy",
+              "id": "runtimeconfig.projects.configs.getIamPolicy",
+              "description": "Gets the access control policy for a resource.\nReturns an empty policy if the resource exists and does not have a policy\nset."
+            },
+            "get": {
+              "description": "Gets information about a RuntimeConfig resource.",
+              "parameterOrder": [
+                "name"
+              ],
+              "httpMethod": "GET",
+              "response": {
+                "$ref": "RuntimeConfig"
+              },
+              "scopes": [
+                "https://www.googleapis.com/auth/cloud-platform",
+                "https://www.googleapis.com/auth/cloudruntimeconfig"
+              ],
+              "parameters": {
+                "name": {
+                  "pattern": "^projects/[^/]+/configs/[^/]+$",
+                  "location": "path",
+                  "description": "The name of the RuntimeConfig resource to retrieve, in the format:\n\n`projects/[PROJECT_ID]/configs/[CONFIG_NAME]`",
+                  "required": true,
+                  "type": "string"
+                }
+              },
+              "flatPath": "v1beta1/projects/{projectsId}/configs/{configsId}",
+              "id": "runtimeconfig.projects.configs.get",
+              "path": "v1beta1/{+name}"
+            },
+            "update": {
+              "response": {
+                "$ref": "RuntimeConfig"
+              },
+              "parameterOrder": [
+                "name"
+              ],
+              "httpMethod": "PUT",
+              "scopes": [
+                "https://www.googleapis.com/auth/cloud-platform",
+                "https://www.googleapis.com/auth/cloudruntimeconfig"
+              ],
+              "parameters": {
+                "name": {
+                  "pattern": "^projects/[^/]+/configs/[^/]+$",
+                  "location": "path",
+                  "description": "The name of the RuntimeConfig resource to update, in the format:\n\n`projects/[PROJECT_ID]/configs/[CONFIG_NAME]`",
+                  "required": true,
+                  "type": "string"
+                }
+              },
+              "flatPath": "v1beta1/projects/{projectsId}/configs/{configsId}",
+              "path": "v1beta1/{+name}",
+              "id": "runtimeconfig.projects.configs.update",
+              "description": "Updates a RuntimeConfig resource. The configuration must exist beforehand.",
+              "request": {
+                "$ref": "RuntimeConfig"
+              }
             },
             "testIamPermissions": {
-              "path": "v1beta1/{+resource}:testIamPermissions",
-              "id": "runtimeconfig.projects.configs.testIamPermissions",
-              "description": "Returns permissions that a caller has on the specified resource.\nIf the resource does not exist, this will return an empty set of\npermissions, not a NOT_FOUND error.\n\nNote: This operation is designed to be used for building permission-aware\nUIs and command-line tools, not for authorization checking. This operation\nmay \"fail open\" without warning.",
-              "request": {
-                "$ref": "TestIamPermissionsRequest"
-              },
               "response": {
                 "$ref": "TestIamPermissionsResponse"
               },
@@ -66,29 +174,35 @@
                 "resource"
               ],
               "httpMethod": "POST",
+              "parameters": {
+                "resource": {
+                  "description": "REQUIRED: The resource for which the policy detail is being requested.\nSee the operation documentation for the appropriate value for this field.",
+                  "required": true,
+                  "type": "string",
+                  "pattern": "^projects/[^/]+/configs/[^/]+$",
+                  "location": "path"
+                }
+              },
               "scopes": [
                 "https://www.googleapis.com/auth/cloud-platform",
                 "https://www.googleapis.com/auth/cloudruntimeconfig"
               ],
-              "parameters": {
-                "resource": {
-                  "pattern": "^projects/[^/]+/configs/[^/]+$",
-                  "location": "path",
-                  "description": "REQUIRED: The resource for which the policy detail is being requested.\nSee the operation documentation for the appropriate value for this field.",
-                  "required": true,
-                  "type": "string"
-                }
+              "flatPath": "v1beta1/projects/{projectsId}/configs/{configsId}:testIamPermissions",
+              "path": "v1beta1/{+resource}:testIamPermissions",
+              "id": "runtimeconfig.projects.configs.testIamPermissions",
+              "request": {
+                "$ref": "TestIamPermissionsRequest"
               },
-              "flatPath": "v1beta1/projects/{projectsId}/configs/{configsId}:testIamPermissions"
+              "description": "Returns permissions that a caller has on the specified resource.\nIf the resource does not exist, this will return an empty set of\npermissions, not a NOT_FOUND error.\n\nNote: This operation is designed to be used for building permission-aware\nUIs and command-line tools, not for authorization checking. This operation\nmay \"fail open\" without warning."
             },
             "delete": {
               "parameterOrder": [
                 "name"
               ],
-              "httpMethod": "DELETE",
               "response": {
                 "$ref": "Empty"
               },
+              "httpMethod": "DELETE",
               "scopes": [
                 "https://www.googleapis.com/auth/cloud-platform",
                 "https://www.googleapis.com/auth/cloudruntimeconfig"
@@ -108,31 +222,31 @@
               "description": "Deletes a RuntimeConfig resource."
             },
             "list": {
+              "parameterOrder": [
+                "parent"
+              ],
               "httpMethod": "GET",
               "response": {
                 "$ref": "ListConfigsResponse"
               },
-              "parameterOrder": [
-                "parent"
-              ],
               "parameters": {
+                "parent": {
+                  "pattern": "^projects/[^/]+$",
+                  "location": "path",
+                  "description": "The [project ID](https://support.google.com/cloud/answer/6158840?hl=en&ref_topic=6158848)\nfor this request, in the format `projects/[PROJECT_ID]`.",
+                  "required": true,
+                  "type": "string"
+                },
                 "pageToken": {
                   "location": "query",
                   "description": "Specifies a page token to use. Set `pageToken` to a `nextPageToken`\nreturned by a previous list request to get the next page of results.",
                   "type": "string"
                 },
                 "pageSize": {
+                  "location": "query",
                   "description": "Specifies the number of results to return per page. If there are fewer\nelements than the specified number, returns all elements.",
                   "format": "int32",
-                  "type": "integer",
-                  "location": "query"
-                },
-                "parent": {
-                  "pattern": "^projects/[^/]+$",
-                  "location": "path",
-                  "description": "The [project ID](https://support.google.com/cloud/answer/6158840?hl=en&ref_topic=6158848)\nfor this request, in the format `projects/[PROJECT_ID]`.",
-                  "required": true,
-                  "type": "string"
+                  "type": "integer"
                 }
               },
               "scopes": [
@@ -140,164 +254,133 @@
                 "https://www.googleapis.com/auth/cloudruntimeconfig"
               ],
               "flatPath": "v1beta1/projects/{projectsId}/configs",
+              "path": "v1beta1/{+parent}/configs",
               "id": "runtimeconfig.projects.configs.list",
-              "path": "v1beta1/{+parent}/configs",
               "description": "Lists all the RuntimeConfig resources within project."
-            },
-            "create": {
-              "httpMethod": "POST",
-              "parameterOrder": [
-                "parent"
-              ],
-              "response": {
-                "$ref": "RuntimeConfig"
-              },
-              "scopes": [
-                "https://www.googleapis.com/auth/cloud-platform",
-                "https://www.googleapis.com/auth/cloudruntimeconfig"
-              ],
-              "parameters": {
-                "requestId": {
-                  "location": "query",
-                  "description": "An optional but recommended unique `request_id`. If the server\nreceives two `create()` requests  with the same\n`request_id`, then the second request will be ignored and the\nfirst resource created and stored in the backend is returned.\nEmpty `request_id` fields are ignored.\n\nIt is responsibility of the client to ensure uniqueness of the\n`request_id` strings.\n\n`request_id` strings are limited to 64 characters.",
-                  "type": "string"
-                },
-                "parent": {
-                  "pattern": "^projects/[^/]+$",
-                  "location": "path",
-                  "description": "The [project ID](https://support.google.com/cloud/answer/6158840?hl=en&ref_topic=6158848)\nfor this request, in the format `projects/[PROJECT_ID]`.",
-                  "required": true,
-                  "type": "string"
-                }
-              },
-              "flatPath": "v1beta1/projects/{projectsId}/configs",
-              "id": "runtimeconfig.projects.configs.create",
-              "path": "v1beta1/{+parent}/configs",
-              "description": "Creates a new RuntimeConfig resource. The configuration name must be\nunique within project.",
-              "request": {
-                "$ref": "RuntimeConfig"
-              }
-            },
-            "setIamPolicy": {
-              "response": {
-                "$ref": "Policy"
-              },
-              "parameterOrder": [
-                "resource"
-              ],
-              "httpMethod": "POST",
-              "parameters": {
-                "resource": {
-                  "pattern": "^projects/[^/]+/configs/[^/]+$",
-                  "location": "path",
-                  "description": "REQUIRED: The resource for which the policy is being specified.\nSee the operation documentation for the appropriate value for this field.",
-                  "required": true,
-                  "type": "string"
-                }
-              },
-              "scopes": [
-                "https://www.googleapis.com/auth/cloud-platform",
-                "https://www.googleapis.com/auth/cloudruntimeconfig"
-              ],
-              "flatPath": "v1beta1/projects/{projectsId}/configs/{configsId}:setIamPolicy",
-              "path": "v1beta1/{+resource}:setIamPolicy",
-              "id": "runtimeconfig.projects.configs.setIamPolicy",
-              "request": {
-                "$ref": "SetIamPolicyRequest"
-              },
-              "description": "Sets the access control policy on the specified resource. Replaces any\nexisting policy."
-            },
-            "getIamPolicy": {
-              "path": "v1beta1/{+resource}:getIamPolicy",
-              "id": "runtimeconfig.projects.configs.getIamPolicy",
-              "description": "Gets the access control policy for a resource.\nReturns an empty policy if the resource exists and does not have a policy\nset.",
-              "response": {
-                "$ref": "Policy"
-              },
-              "parameterOrder": [
-                "resource"
-              ],
-              "httpMethod": "GET",
-              "scopes": [
-                "https://www.googleapis.com/auth/cloud-platform",
-                "https://www.googleapis.com/auth/cloudruntimeconfig"
-              ],
-              "parameters": {
-                "resource": {
-                  "pattern": "^projects/[^/]+/configs/[^/]+$",
-                  "location": "path",
-                  "description": "REQUIRED: The resource for which the policy is being requested.\nSee the operation documentation for the appropriate value for this field.",
-                  "required": true,
-                  "type": "string"
-                }
-              },
-              "flatPath": "v1beta1/projects/{projectsId}/configs/{configsId}:getIamPolicy"
-            },
-            "get": {
-              "httpMethod": "GET",
-              "parameterOrder": [
-                "name"
-              ],
-              "response": {
-                "$ref": "RuntimeConfig"
-              },
-              "scopes": [
-                "https://www.googleapis.com/auth/cloud-platform",
-                "https://www.googleapis.com/auth/cloudruntimeconfig"
-              ],
-              "parameters": {
-                "name": {
-                  "pattern": "^projects/[^/]+/configs/[^/]+$",
-                  "location": "path",
-                  "description": "The name of the RuntimeConfig resource to retrieve, in the format:\n\n`projects/[PROJECT_ID]/configs/[CONFIG_NAME]`",
-                  "required": true,
-                  "type": "string"
-                }
-              },
-              "flatPath": "v1beta1/projects/{projectsId}/configs/{configsId}",
-              "id": "runtimeconfig.projects.configs.get",
-              "path": "v1beta1/{+name}",
-              "description": "Gets information about a RuntimeConfig resource."
             }
           },
           "resources": {
             "variables": {
               "methods": {
-                "create": {
+                "delete": {
+                  "parameters": {
+                    "recursive": {
+                      "description": "Set to `true` to recursively delete multiple variables with the same\nprefix.",
+                      "type": "boolean",
+                      "location": "query"
+                    },
+                    "name": {
+                      "pattern": "^projects/[^/]+/configs/[^/]+/variables/.+$",
+                      "location": "path",
+                      "description": "The name of the variable to delete, in the format:\n\n`projects/[PROJECT_ID]/configs/[CONFIG_NAME]/variables/[VARIABLE_NAME]`",
+                      "required": true,
+                      "type": "string"
+                    }
+                  },
+                  "scopes": [
+                    "https://www.googleapis.com/auth/cloud-platform",
+                    "https://www.googleapis.com/auth/cloudruntimeconfig"
+                  ],
+                  "flatPath": "v1beta1/projects/{projectsId}/configs/{configsId}/variables/{variablesId}",
+                  "path": "v1beta1/{+name}",
+                  "id": "runtimeconfig.projects.configs.variables.delete",
+                  "description": "Deletes a variable or multiple variables.\n\nIf you specify a variable name, then that variable is deleted. If you\nspecify a prefix and `recursive` is true, then all variables with that\nprefix are deleted. You must set a `recursive` to true if you delete\nvariables by prefix.",
                   "response": {
-                    "$ref": "Variable"
+                    "$ref": "Empty"
                   },
                   "parameterOrder": [
-                    "parent"
+                    "name"
                   ],
-                  "httpMethod": "POST",
+                  "httpMethod": "DELETE"
+                },
+                "list": {
                   "scopes": [
                     "https://www.googleapis.com/auth/cloud-platform",
                     "https://www.googleapis.com/auth/cloudruntimeconfig"
                   ],
                   "parameters": {
-                    "requestId": {
-                      "description": "An optional but recommended unique `request_id`. If the server\nreceives two `create()` requests  with the same\n`request_id`, then the second request will be ignored and the\nfirst resource created and stored in the backend is returned.\nEmpty `request_id` fields are ignored.\n\nIt is responsibility of the client to ensure uniqueness of the\n`request_id` strings.\n\n`request_id` strings are limited to 64 characters.",
+                    "pageToken": {
+                      "description": "Specifies a page token to use. Set `pageToken` to a `nextPageToken`\nreturned by a previous list request to get the next page of results.",
                       "type": "string",
                       "location": "query"
                     },
+                    "returnValues": {
+                      "location": "query",
+                      "description": "The flag indicates whether the user wants to return values of variables.\nIf true, then only those variables that user has IAM GetVariable permission\nwill be returned along with their values.",
+                      "type": "boolean"
+                    },
+                    "pageSize": {
+                      "location": "query",
+                      "description": "Specifies the number of results to return per page. If there are fewer\nelements than the specified number, returns all elements.",
+                      "format": "int32",
+                      "type": "integer"
+                    },
+                    "parent": {
+                      "description": "The path to the RuntimeConfig resource for which you want to list variables.\nThe configuration must exist beforehand; the path must by in the format:\n\n`projects/[PROJECT_ID]/configs/[CONFIG_NAME]`",
+                      "required": true,
+                      "type": "string",
+                      "pattern": "^projects/[^/]+/configs/[^/]+$",
+                      "location": "path"
+                    },
+                    "filter": {
+                      "location": "query",
+                      "description": "Filters variables by matching the specified filter. For example:\n\n`projects/example-project/config/[CONFIG_NAME]/variables/example-variable`.",
+                      "type": "string"
+                    }
+                  },
+                  "flatPath": "v1beta1/projects/{projectsId}/configs/{configsId}/variables",
+                  "path": "v1beta1/{+parent}/variables",
+                  "id": "runtimeconfig.projects.configs.variables.list",
+                  "description": "Lists variables within given a configuration, matching any provided filters.\nThis only lists variable names, not the values, unless `return_values` is\ntrue, in which case only variables that user has IAM permission to GetVariable\nwill be returned.",
+                  "parameterOrder": [
+                    "parent"
+                  ],
+                  "response": {
+                    "$ref": "ListVariablesResponse"
+                  },
+                  "httpMethod": "GET"
+                },
+                "create": {
+                  "scopes": [
+                    "https://www.googleapis.com/auth/cloud-platform",
+                    "https://www.googleapis.com/auth/cloudruntimeconfig"
+                  ],
+                  "parameters": {
                     "parent": {
                       "pattern": "^projects/[^/]+/configs/[^/]+$",
                       "location": "path",
                       "description": "The path to the RutimeConfig resource that this variable should belong to.\nThe configuration must exist beforehand; the path must by in the format:\n\n`projects/[PROJECT_ID]/configs/[CONFIG_NAME]`",
                       "required": true,
                       "type": "string"
+                    },
+                    "requestId": {
+                      "description": "An optional but recommended unique `request_id`. If the server\nreceives two `create()` requests  with the same\n`request_id`, then the second request will be ignored and the\nfirst resource created and stored in the backend is returned.\nEmpty `request_id` fields are ignored.\n\nIt is responsibility of the client to ensure uniqueness of the\n`request_id` strings.\n\n`request_id` strings are limited to 64 characters.",
+                      "type": "string",
+                      "location": "query"
                     }
                   },
                   "flatPath": "v1beta1/projects/{projectsId}/configs/{configsId}/variables",
-                  "path": "v1beta1/{+parent}/variables",
                   "id": "runtimeconfig.projects.configs.variables.create",
+                  "path": "v1beta1/{+parent}/variables",
                   "description": "Creates a variable within the given configuration. You cannot create\na variable with a name that is a prefix of an existing variable name, or a\nname that has an existing variable name as a prefix.\n\nTo learn more about creating a variable, read the\n[Setting and Getting Data](/deployment-manager/runtime-configurator/set-and-get-variables)\ndocumentation.",
                   "request": {
                     "$ref": "Variable"
+                  },
+                  "httpMethod": "POST",
+                  "parameterOrder": [
+                    "parent"
+                  ],
+                  "response": {
+                    "$ref": "Variable"
                   }
                 },
                 "watch": {
+                  "path": "v1beta1/{+name}:watch",
+                  "id": "runtimeconfig.projects.configs.variables.watch",
+                  "description": "Watches a specific variable and waits for a change in the variable's value.\nWhen there is a change, this method returns the new value or times out.\n\nIf a variable is deleted while being watched, the `variableState` state is\nset to `DELETED` and the method returns the last known variable `value`.\n\nIf you set the deadline for watching to a larger value than internal timeout\n(60 seconds), the current variable value is returned and the `variableState`\nwill be `VARIABLE_STATE_UNSPECIFIED`.\n\nTo learn more about creating a watcher, read the\n[Watching a Variable for Changes](/deployment-manager/runtime-configurator/watching-a-variable)\ndocumentation.",
+                  "request": {
+                    "$ref": "WatchVariableRequest"
+                  },
                   "response": {
                     "$ref": "Variable"
                   },
@@ -305,6 +388,10 @@
                     "name"
                   ],
                   "httpMethod": "POST",
+                  "scopes": [
+                    "https://www.googleapis.com/auth/cloud-platform",
+                    "https://www.googleapis.com/auth/cloudruntimeconfig"
+                  ],
                   "parameters": {
                     "name": {
                       "description": "The name of the variable to watch, in the format:\n\n`projects/[PROJECT_ID]/configs/[CONFIG_NAME]`",
@@ -314,23 +401,14 @@
                       "location": "path"
                     }
                   },
-                  "scopes": [
-                    "https://www.googleapis.com/auth/cloud-platform",
-                    "https://www.googleapis.com/auth/cloudruntimeconfig"
-                  ],
-                  "flatPath": "v1beta1/projects/{projectsId}/configs/{configsId}/variables/{variablesId}:watch",
-                  "path": "v1beta1/{+name}:watch",
-                  "id": "runtimeconfig.projects.configs.variables.watch",
-                  "request": {
-                    "$ref": "WatchVariableRequest"
-                  },
-                  "description": "Watches a specific variable and waits for a change in the variable's value.\nWhen there is a change, this method returns the new value or times out.\n\nIf a variable is deleted while being watched, the `variableState` state is\nset to `DELETED` and the method returns the last known variable `value`.\n\nIf you set the deadline for watching to a larger value than internal timeout\n(60 seconds), the current variable value is returned and the `variableState`\nwill be `VARIABLE_STATE_UNSPECIFIED`.\n\nTo learn more about creating a watcher, read the\n[Watching a Variable for Changes](/deployment-manager/runtime-configurator/watching-a-variable)\ndocumentation."
+                  "flatPath": "v1beta1/projects/{projectsId}/configs/{configsId}/variables/{variablesId}:watch"
                 },
                 "get": {
-                  "httpMethod": "GET",
+                  "description": "Gets information about a single variable.",
                   "response": {
                     "$ref": "Variable"
                   },
+                  "httpMethod": "GET",
                   "parameterOrder": [
                     "name"
                   ],
@@ -348,13 +426,10 @@
                     }
                   },
                   "flatPath": "v1beta1/projects/{projectsId}/configs/{configsId}/variables/{variablesId}",
-                  "id": "runtimeconfig.projects.configs.variables.get",
                   "path": "v1beta1/{+name}",
-                  "description": "Gets information about a single variable."
+                  "id": "runtimeconfig.projects.configs.variables.get"
                 },
                 "update": {
-                  "id": "runtimeconfig.projects.configs.variables.update",
-                  "path": "v1beta1/{+name}",
                   "description": "Updates an existing variable with a new value.",
                   "request": {
                     "$ref": "Variable"
@@ -379,27 +454,30 @@
                       "location": "path"
                     }
                   },
-                  "flatPath": "v1beta1/projects/{projectsId}/configs/{configsId}/variables/{variablesId}"
+                  "flatPath": "v1beta1/projects/{projectsId}/configs/{configsId}/variables/{variablesId}",
+                  "id": "runtimeconfig.projects.configs.variables.update",
+                  "path": "v1beta1/{+name}"
                 },
                 "testIamPermissions": {
+                  "description": "Returns permissions that a caller has on the specified resource.\nIf the resource does not exist, this will return an empty set of\npermissions, not a NOT_FOUND error.\n\nNote: This operation is designed to be used for building permission-aware\nUIs and command-line tools, not for authorization checking. This operation\nmay \"fail open\" without warning.",
+                  "parameterOrder": [
+                    "resource"
+                  ],
                   "httpMethod": "GET",
                   "response": {
                     "$ref": "TestIamPermissionsResponse"
                   },
-                  "parameterOrder": [
-                    "resource"
-                  ],
                   "scopes": [
                     "https://www.googleapis.com/auth/cloud-platform",
                     "https://www.googleapis.com/auth/cloudruntimeconfig"
                   ],
                   "parameters": {
                     "resource": {
+                      "pattern": "^projects/[^/]+/configs/[^/]+/variables/.+$",
+                      "location": "path",
                       "description": "REQUIRED: The resource for which the policy detail is being requested.\nSee the operation documentation for the appropriate value for this field.",
                       "required": true,
-                      "type": "string",
-                      "pattern": "^projects/[^/]+/configs/[^/]+/variables/.+$",
-                      "location": "path"
+                      "type": "string"
                     },
                     "permissions": {
                       "description": "The set of permissions to check for the `resource`. Permissions with\nwildcards (such as '*' or 'storage.*') are not allowed. For more\ninformation see\n[IAM Overview](https://cloud.google.com/iam/docs/overview#permissions).",
@@ -409,103 +487,22 @@
                     }
                   },
                   "flatPath": "v1beta1/projects/{projectsId}/configs/{configsId}/variables/{variablesId}:testIamPermissions",
-                  "id": "runtimeconfig.projects.configs.variables.testIamPermissions",
                   "path": "v1beta1/{+resource}:testIamPermissions",
-                  "description": "Returns permissions that a caller has on the specified resource.\nIf the resource does not exist, this will return an empty set of\npermissions, not a NOT_FOUND error.\n\nNote: This operation is designed to be used for building permission-aware\nUIs and command-line tools, not for authorization checking. This operation\nmay \"fail open\" without warning."
-                },
-                "delete": {
-                  "httpMethod": "DELETE",
-                  "parameterOrder": [
-                    "name"
-                  ],
-                  "response": {
-                    "$ref": "Empty"
-                  },
-                  "scopes": [
-                    "https://www.googleapis.com/auth/cloud-platform",
-                    "https://www.googleapis.com/auth/cloudruntimeconfig"
-                  ],
-                  "parameters": {
-                    "recursive": {
-                      "description": "Set to `true` to recursively delete multiple variables with the same\nprefix.",
-                      "type": "boolean",
-                      "location": "query"
-                    },
-                    "name": {
-                      "description": "The name of the variable to delete, in the format:\n\n`projects/[PROJECT_ID]/configs/[CONFIG_NAME]/variables/[VARIABLE_NAME]`",
-                      "required": true,
-                      "type": "string",
-                      "pattern": "^projects/[^/]+/configs/[^/]+/variables/.+$",
-                      "location": "path"
-                    }
-                  },
-                  "flatPath": "v1beta1/projects/{projectsId}/configs/{configsId}/variables/{variablesId}",
-                  "id": "runtimeconfig.projects.configs.variables.delete",
-                  "path": "v1beta1/{+name}",
-                  "description": "Deletes a variable or multiple variables.\n\nIf you specify a variable name, then that variable is deleted. If you\nspecify a prefix and `recursive` is true, then all variables with that\nprefix are deleted. You must set a `recursive` to true if you delete\nvariables by prefix."
-                },
-                "list": {
-                  "description": "Lists variables within given a configuration, matching any provided filters.\nThis only lists variable names, not the values, unless `return_values` is\ntrue, in which case only variables that user has IAM permission to GetVariable\nwill be returned.",
-                  "httpMethod": "GET",
-                  "response": {
-                    "$ref": "ListVariablesResponse"
-                  },
-                  "parameterOrder": [
-                    "parent"
-                  ],
-                  "scopes": [
-                    "https://www.googleapis.com/auth/cloud-platform",
-                    "https://www.googleapis.com/auth/cloudruntimeconfig"
-                  ],
-                  "parameters": {
-                    "parent": {
-                      "pattern": "^projects/[^/]+/configs/[^/]+$",
-                      "location": "path",
-                      "description": "The path to the RuntimeConfig resource for which you want to list variables.\nThe configuration must exist beforehand; the path must by in the format:\n\n`projects/[PROJECT_ID]/configs/[CONFIG_NAME]`",
-                      "required": true,
-                      "type": "string"
-                    },
-                    "filter": {
-                      "description": "Filters variables by matching the specified filter. For example:\n\n`projects/example-project/config/[CONFIG_NAME]/variables/example-variable`.",
-                      "type": "string",
-                      "location": "query"
-                    },
-                    "pageToken": {
-                      "description": "Specifies a page token to use. Set `pageToken` to a `nextPageToken`\nreturned by a previous list request to get the next page of results.",
-                      "type": "string",
-                      "location": "query"
-                    },
-                    "returnValues": {
-                      "location": "query",
-                      "description": "The flag indicates whether the user wants to return values of variables.\nIf true, then only those variables that user has IAM GetVariable permission\nwill be returned along with their values.",
-                      "type": "boolean"
-                    },
-                    "pageSize": {
-                      "location": "query",
-                      "description": "Specifies the number of results to return per page. If there are fewer\nelements than the specified number, returns all elements.",
-                      "format": "int32",
-                      "type": "integer"
-                    }
-                  },
-                  "flatPath": "v1beta1/projects/{projectsId}/configs/{configsId}/variables",
-                  "id": "runtimeconfig.projects.configs.variables.list",
-                  "path": "v1beta1/{+parent}/variables"
+                  "id": "runtimeconfig.projects.configs.variables.testIamPermissions"
                 }
               }
             },
             "operations": {
               "methods": {
                 "testIamPermissions": {
-                  "path": "v1beta1/{+resource}:testIamPermissions",
-                  "id": "runtimeconfig.projects.configs.operations.testIamPermissions",
                   "description": "Returns permissions that a caller has on the specified resource.\nIf the resource does not exist, this will return an empty set of\npermissions, not a NOT_FOUND error.\n\nNote: This operation is designed to be used for building permission-aware\nUIs and command-line tools, not for authorization checking. This operation\nmay \"fail open\" without warning.",
-                  "response": {
-                    "$ref": "TestIamPermissionsResponse"
-                  },
                   "parameterOrder": [
                     "resource"
                   ],
                   "httpMethod": "GET",
+                  "response": {
+                    "$ref": "TestIamPermissionsResponse"
+                  },
                   "scopes": [
                     "https://www.googleapis.com/auth/cloud-platform",
                     "https://www.googleapis.com/auth/cloudruntimeconfig"
@@ -519,95 +516,96 @@
                       "location": "path"
                     },
                     "permissions": {
-                      "repeated": true,
-                      "location": "query",
                       "description": "The set of permissions to check for the `resource`. Permissions with\nwildcards (such as '*' or 'storage.*') are not allowed. For more\ninformation see\n[IAM Overview](https://cloud.google.com/iam/docs/overview#permissions).",
-                      "type": "string"
+                      "type": "string",
+                      "repeated": true,
+                      "location": "query"
                     }
                   },
-                  "flatPath": "v1beta1/projects/{projectsId}/configs/{configsId}/operations/{operationsId}:testIamPermissions"
+                  "flatPath": "v1beta1/projects/{projectsId}/configs/{configsId}/operations/{operationsId}:testIamPermissions",
+                  "path": "v1beta1/{+resource}:testIamPermissions",
+                  "id": "runtimeconfig.projects.configs.operations.testIamPermissions"
                 },
                 "get": {
+                  "path": "v1beta1/{+name}",
+                  "id": "runtimeconfig.projects.configs.operations.get",
+                  "description": "Gets the latest state of a long-running operation.  Clients can use this\nmethod to poll the operation result at intervals as recommended by the API\nservice.",
+                  "response": {
+                    "$ref": "Operation"
+                  },
                   "httpMethod": "GET",
                   "parameterOrder": [
                     "name"
                   ],
-                  "response": {
-                    "$ref": "Operation"
+                  "parameters": {
+                    "name": {
+                      "pattern": "^projects/[^/]+/configs/[^/]+/operations/.+$",
+                      "location": "path",
+                      "description": "The name of the operation resource.",
+                      "required": true,
+                      "type": "string"
+                    }
                   },
                   "scopes": [
                     "https://www.googleapis.com/auth/cloud-platform",
                     "https://www.googleapis.com/auth/cloudruntimeconfig"
                   ],
-                  "parameters": {
-                    "name": {
-                      "description": "The name of the operation resource.",
-                      "required": true,
-                      "type": "string",
-                      "pattern": "^projects/[^/]+/configs/[^/]+/operations/.+$",
-                      "location": "path"
-                    }
-                  },
-                  "flatPath": "v1beta1/projects/{projectsId}/configs/{configsId}/operations/{operationsId}",
-                  "id": "runtimeconfig.projects.configs.operations.get",
-                  "path": "v1beta1/{+name}",
-                  "description": "Gets the latest state of a long-running operation.  Clients can use this\nmethod to poll the operation result at intervals as recommended by the API\nservice."
+                  "flatPath": "v1beta1/projects/{projectsId}/configs/{configsId}/operations/{operationsId}"
                 }
               }
             },
             "waiters": {
               "methods": {
                 "delete": {
+                  "scopes": [
+                    "https://www.googleapis.com/auth/cloud-platform",
+                    "https://www.googleapis.com/auth/cloudruntimeconfig"
+                  ],
+                  "parameters": {
+                    "name": {
+                      "pattern": "^projects/[^/]+/configs/[^/]+/waiters/[^/]+$",
+                      "location": "path",
+                      "description": "The Waiter resource to delete, in the format:\n\n `projects/[PROJECT_ID]/configs/[CONFIG_NAME]/waiters/[WAITER_NAME]`",
+                      "required": true,
+                      "type": "string"
+                    }
+                  },
+                  "flatPath": "v1beta1/projects/{projectsId}/configs/{configsId}/waiters/{waitersId}",
+                  "path": "v1beta1/{+name}",
+                  "id": "runtimeconfig.projects.configs.waiters.delete",
+                  "description": "Deletes the waiter with the specified name.",
                   "response": {
                     "$ref": "Empty"
                   },
                   "httpMethod": "DELETE",
                   "parameterOrder": [
                     "name"
-                  ],
-                  "parameters": {
-                    "name": {
-                      "description": "The Waiter resource to delete, in the format:\n\n `projects/[PROJECT_ID]/configs/[CONFIG_NAME]/waiters/[WAITER_NAME]`",
-                      "required": true,
-                      "type": "string",
-                      "pattern": "^projects/[^/]+/configs/[^/]+/waiters/[^/]+$",
-                      "location": "path"
-                    }
-                  },
-                  "scopes": [
-                    "https://www.googleapis.com/auth/cloud-platform",
-                    "https://www.googleapis.com/auth/cloudruntimeconfig"
-                  ],
-                  "flatPath": "v1beta1/projects/{projectsId}/configs/{configsId}/waiters/{waitersId}",
-                  "path": "v1beta1/{+name}",
-                  "id": "runtimeconfig.projects.configs.waiters.delete",
-                  "description": "Deletes the waiter with the specified name."
+                  ]
                 },
                 "list": {
-                  "description": "List waiters within the given configuration.",
                   "response": {
                     "$ref": "ListWaitersResponse"
                   },
+                  "httpMethod": "GET",
                   "parameterOrder": [
                     "parent"
                   ],
-                  "httpMethod": "GET",
                   "scopes": [
                     "https://www.googleapis.com/auth/cloud-platform",
                     "https://www.googleapis.com/auth/cloudruntimeconfig"
                   ],
                   "parameters": {
                     "parent": {
-                      "pattern": "^projects/[^/]+/configs/[^/]+$",
-                      "location": "path",
                       "description": "The path to the configuration for which you want to get a list of waiters.\nThe configuration must exist beforehand; the path must by in the format:\n\n`projects/[PROJECT_ID]/configs/[CONFIG_NAME]`",
                       "required": true,
-                      "type": "string"
+                      "type": "string",
+                      "pattern": "^projects/[^/]+/configs/[^/]+$",
+                      "location": "path"
                     },
                     "pageToken": {
-                      "location": "query",
                       "description": "Specifies a page token to use. Set `pageToken` to a `nextPageToken`\nreturned by a previous list request to get the next page of results.",
-                      "type": "string"
+                      "type": "string",
+                      "location": "query"
                     },
                     "pageSize": {
                       "location": "query",
@@ -618,16 +616,17 @@
                   },
                   "flatPath": "v1beta1/projects/{projectsId}/configs/{configsId}/waiters",
                   "path": "v1beta1/{+parent}/waiters",
-                  "id": "runtimeconfig.projects.configs.waiters.list"
+                  "id": "runtimeconfig.projects.configs.waiters.list",
+                  "description": "List waiters within the given configuration."
                 },
                 "get": {
+                  "httpMethod": "GET",
                   "response": {
                     "$ref": "Waiter"
                   },
                   "parameterOrder": [
                     "name"
                   ],
-                  "httpMethod": "GET",
                   "parameters": {
                     "name": {
                       "pattern": "^projects/[^/]+/configs/[^/]+/waiters/[^/]+$",
@@ -642,8 +641,8 @@
                     "https://www.googleapis.com/auth/cloudruntimeconfig"
                   ],
                   "flatPath": "v1beta1/projects/{projectsId}/configs/{configsId}/waiters/{waitersId}",
-                  "path": "v1beta1/{+name}",
                   "id": "runtimeconfig.projects.configs.waiters.get",
+                  "path": "v1beta1/{+name}",
                   "description": "Gets information about a single waiter."
                 },
                 "create": {
@@ -682,25 +681,25 @@
                 },
                 "testIamPermissions": {
                   "httpMethod": "GET",
-                  "response": {
-                    "$ref": "TestIamPermissionsResponse"
-                  },
                   "parameterOrder": [
                     "resource"
                   ],
+                  "response": {
+                    "$ref": "TestIamPermissionsResponse"
+                  },
                   "parameters": {
                     "resource": {
+                      "pattern": "^projects/[^/]+/configs/[^/]+/waiters/[^/]+$",
+                      "location": "path",
                       "description": "REQUIRED: The resource for which the policy detail is being requested.\nSee the operation documentation for the appropriate value for this field.",
                       "required": true,
-                      "type": "string",
-                      "pattern": "^projects/[^/]+/configs/[^/]+/waiters/[^/]+$",
-                      "location": "path"
+                      "type": "string"
                     },
                     "permissions": {
-                      "repeated": true,
-                      "location": "query",
                       "description": "The set of permissions to check for the `resource`. Permissions with\nwildcards (such as '*' or 'storage.*') are not allowed. For more\ninformation see\n[IAM Overview](https://cloud.google.com/iam/docs/overview#permissions).",
-                      "type": "string"
+                      "type": "string",
+                      "repeated": true,
+                      "location": "query"
                     }
                   },
                   "scopes": [
@@ -720,62 +719,10 @@
     }
   },
   "parameters": {
-    "access_token": {
-      "description": "OAuth access token.",
-      "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"
-    },
-    "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"
-    },
-    "pp": {
-      "description": "Pretty-print response.",
-      "type": "boolean",
-      "default": "true",
-      "location": "query"
-    },
-    "bearer_token": {
-      "description": "OAuth bearer token.",
-      "type": "string",
-      "location": "query"
-    },
-    "oauth_token": {
-      "description": "OAuth 2.0 token for the current user.",
-      "type": "string",
-      "location": "query"
-    },
-    "upload_protocol": {
-      "description": "Upload protocol for media (e.g. \"raw\", \"multipart\").",
-      "type": "string",
-      "location": "query"
-    },
-    "prettyPrint": {
-      "location": "query",
-      "description": "Returns response with indentations and line breaks.",
-      "type": "boolean",
-      "default": "true"
-    },
-    "fields": {
-      "description": "Selector specifying which fields to include in a partial response.",
-      "type": "string",
-      "location": "query"
-    },
-    "uploadType": {
-      "description": "Legacy upload protocol for media (e.g. \"media\", \"multipart\").",
-      "type": "string",
-      "location": "query"
-    },
     "callback": {
-      "location": "query",
       "description": "JSONP",
-      "type": "string"
+      "type": "string",
+      "location": "query"
     },
     "$.xgafv": {
       "enumDescriptions": [
@@ -791,6 +738,12 @@
       "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"
+      ],
+      "location": "query",
       "description": "Data format for response.",
       "default": "json",
       "enum": [
@@ -798,42 +751,88 @@
         "media",
         "proto"
       ],
+      "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",
-      "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"
+    },
+    "access_token": {
+      "location": "query",
+      "description": "OAuth access token.",
+      "type": "string"
+    },
+    "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"
+    },
+    "pp": {
+      "location": "query",
+      "description": "Pretty-print response.",
+      "type": "boolean",
+      "default": "true"
+    },
+    "bearer_token": {
+      "description": "OAuth bearer token.",
+      "type": "string",
+      "location": "query"
+    },
+    "oauth_token": {
+      "location": "query",
+      "description": "OAuth 2.0 token for the current user.",
+      "type": "string"
+    },
+    "upload_protocol": {
+      "description": "Upload protocol for media (e.g. \"raw\", \"multipart\").",
+      "type": "string",
+      "location": "query"
+    },
+    "prettyPrint": {
+      "description": "Returns response with indentations and line breaks.",
+      "type": "boolean",
+      "default": "true",
+      "location": "query"
+    },
+    "fields": {
+      "description": "Selector specifying which fields to include in a partial response.",
+      "type": "string",
+      "location": "query"
+    },
+    "uploadType": {
+      "description": "Legacy upload protocol for media (e.g. \"media\", \"multipart\").",
+      "type": "string",
       "location": "query"
     }
   },
   "version": "v1beta1",
   "baseUrl": "https://runtimeconfig.googleapis.com/",
   "servicePath": "",
-  "description": "Provides capabilities for dynamic configuration and coordination for applications running on Google Cloud Platform.\n",
   "kind": "discovery#restDescription",
+  "description": "Provides capabilities for dynamic configuration and coordination for applications running on Google Cloud Platform.\n",
   "basePath": "",
-  "id": "runtimeconfig:v1beta1",
-  "documentationLink": "https://cloud.google.com/deployment-manager/runtime-configurator/",
   "revision": "20170224",
+  "documentationLink": "https://cloud.google.com/deployment-manager/runtime-configurator/",
+  "id": "runtimeconfig:v1beta1",
   "discoveryVersion": "v1",
   "version_module": "True",
   "schemas": {
+    "SetIamPolicyRequest": {
+      "id": "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\nthe policy is limited to a few 10s of KB. An empty policy is a\nvalid policy but certain Cloud Platform services (such as Projects)\nmight reject them.",
+          "$ref": "Policy"
+        }
+      }
+    },
     "Status": {
       "description": "The `Status` type defines a logical error model that is suitable for different\nprogramming environments, including REST APIs and RPC APIs. It is used by\n[gRPC](https://github.com/grpc). The error model is designed to be:\n\n- Simple to use and understand for most users\n- Flexible enough to meet unexpected needs\n\n# Overview\n\nThe `Status` message contains three pieces of data: error code, error message,\nand error details. The error code should be an enum value of\ngoogle.rpc.Code, but it may accept additional error codes if needed.  The\nerror message should be a developer-facing English message that helps\ndevelopers *understand* and *resolve* the error. If a localized user-facing\nerror message is needed, put the localized message in the error details or\nlocalize it in the client. The optional error details may contain arbitrary\ninformation about the error. There is a predefined set of error detail types\nin the package `google.rpc` which can be used for common error conditions.\n\n# Language mapping\n\nThe `Status` message is the logical representation of the error model, but it\nis not necessarily the actual wire format. When the `Status` message is\nexposed in different client libraries and different wire protocols, it can be\nmapped differently. For example, it will likely be mapped to some exceptions\nin Java, but more likely mapped to some error codes in C.\n\n# Other uses\n\nThe error model and the `Status` message can be used in a variety of\nenvironments, either with or without APIs, to provide a\nconsistent developer experience across different environments.\n\nExample uses of this error model include:\n\n- Partial errors. If a service needs to return partial errors to the client,\n    it may embed the `Status` in the normal response to indicate the partial\n    errors.\n\n- Workflow errors. A typical workflow has multiple steps. Each step may\n    have a `Status` message for error reporting purpose.\n\n- Batch operations. If a client uses batch request and batch response, the\n    `Status` message should be used directly inside batch response, one for\n    each error sub-response.\n\n- Asynchronous operations. If an API call embeds asynchronous operation\n    results in its response, the status of those operations should be\n    represented directly using the `Status` message.\n\n- Logging. If some API errors are stored in logs, the message `Status` could\n    be used directly after any stripping needed for security/privacy reasons.",
       "type": "object",
       "properties": {
-        "details": {
-          "description": "A list of messages that carry the error details.  There will be a\ncommon 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"
-            },
-            "type": "object"
-          }
-        },
         "code": {
           "description": "The status code, which should be an enum value of google.rpc.Code.",
           "format": "int32",
@@ -842,11 +841,25 @@
         "message": {
           "description": "A developer-facing error message, which should be in English. Any\nuser-facing error message should be localized and sent in the\ngoogle.rpc.Status.details field, or localized by the client.",
           "type": "string"
+        },
+        "details": {
+          "description": "A list of messages that carry the error details.  There will be a\ncommon 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"
+            }
+          }
         }
       },
       "id": "Status"
     },
     "Binding": {
+      "id": "Binding",
+      "description": "Associates `members` with a `role`.",
+      "type": "object",
       "properties": {
         "members": {
           "description": "Specifies the identities requesting access for a Cloud Platform resource.\n`members` can have the following values:\n\n* `allUsers`: A special identifier that represents anyone who is\n   on the internet; with or without a Google account.\n\n* `allAuthenticatedUsers`: A special identifier that represents anyone\n   who is authenticated with a Google account or a service account.\n\n* `user:{emailid}`: An email address that represents a specific Google\n   account. For example, `alice@gmail.com` or `joe@example.com`.\n\n\n* `serviceAccount:{emailid}`: An email address that represents a service\n   account. For example, `my-other-app@appspot.gserviceaccount.com`.\n\n* `group:{emailid}`: An email address that represents a Google group.\n   For example, `admins@example.com`.\n\n* `domain:{domain}`: A Google Apps domain name that represents all the\n   users of that domain. For example, `google.com` or `example.com`.\n\n",
@@ -859,18 +872,18 @@
           "description": "Role that is assigned to `members`.\nFor example, `roles/viewer`, `roles/editor`, or `roles/owner`.\nRequired",
           "type": "string"
         }
-      },
-      "id": "Binding",
-      "description": "Associates `members` with a `role`.",
-      "type": "object"
+      }
     },
     "Empty": {
-      "properties": {},
       "id": "Empty",
       "description": "A generic empty message that you can re-use to avoid defining duplicated\nempty messages in your APIs. A typical example is to use it as the request\nor the response type of an API method. For instance:\n\n    service Foo {\n      rpc Bar(google.protobuf.Empty) returns (google.protobuf.Empty);\n    }\n\nThe JSON representation for `Empty` is empty JSON object `{}`.",
-      "type": "object"
+      "type": "object",
+      "properties": {}
     },
     "Cardinality": {
+      "id": "Cardinality",
+      "description": "A Cardinality condition for the Waiter resource. A cardinality condition is\nmet when the number of variables under a specified path prefix reaches a\npredefined number. For example, if you set a Cardinality condition where\nthe `path` is set to `/foo` and the number of paths is set to 2, the\nfollowing variables would meet the condition in a RuntimeConfig resource:\n\n+ `/foo/variable1 = \"value1\"`\n+ `/foo/variable2 = \"value2\"`\n+ `/bar/variable3 = \"value3\"`\n\nIt would not would not satisify the same condition with the `number` set to\n3, however, because there is only 2 paths that start with `/foo`.\nCardinality conditions are recursive; all subtrees under the specific\npath prefix are counted.",
+      "type": "object",
       "properties": {
         "path": {
           "description": "The root of the variable subtree to monitor. For example, `/foo`.",
@@ -881,28 +894,25 @@
           "format": "int32",
           "type": "integer"
         }
-      },
-      "id": "Cardinality",
-      "description": "A Cardinality condition for the Waiter resource. A cardinality condition is\nmet when the number of variables under a specified path prefix reaches a\npredefined number. For example, if you set a Cardinality condition where\nthe `path` is set to `/foo` and the number of paths is set to 2, the\nfollowing variables would meet the condition in a RuntimeConfig resource:\n\n+ `/foo/variable1 = \"value1\"`\n+ `/foo/variable2 = \"value2\"`\n+ `/bar/variable3 = \"value3\"`\n\nIt would not would not satisify the same condition with the `number` set to\n3, however, because there is only 2 paths that start with `/foo`.\nCardinality conditions are recursive; all subtrees under the specific\npath prefix are counted.",
-      "type": "object"
+      }
     },
     "ListConfigsResponse": {
+      "description": "`ListConfigs()` returns the following response. The order of returned\nobjects is arbitrary; that is, it is not ordered in any particular way.",
+      "type": "object",
       "properties": {
-        "nextPageToken": {
-          "description": "This token allows you to get the next page of results for list requests.\nIf the number of results is larger than `pageSize`, use the `nextPageToken`\nas a value for the query parameter `pageToken` in the next list request.\nSubsequent list requests will have their own `nextPageToken` to continue\npaging through the results",
-          "type": "string"
-        },
         "configs": {
           "description": "A list of the configurations in the project. The order of returned\nobjects is arbitrary; that is, it is not ordered in any particular way.",
           "type": "array",
           "items": {
             "$ref": "RuntimeConfig"
           }
+        },
+        "nextPageToken": {
+          "description": "This token allows you to get the next page of results for list requests.\nIf the number of results is larger than `pageSize`, use the `nextPageToken`\nas a value for the query parameter `pageToken` in the next list request.\nSubsequent list requests will have their own `nextPageToken` to continue\npaging through the results",
+          "type": "string"
         }
       },
-      "id": "ListConfigsResponse",
-      "description": "`ListConfigs()` returns the following response. The order of returned\nobjects is arbitrary; that is, it is not ordered in any particular way.",
-      "type": "object"
+      "id": "ListConfigsResponse"
     },
     "EndCondition": {
       "description": "The condition that a Waiter resource is waiting for.",
@@ -916,6 +926,8 @@
       "id": "EndCondition"
     },
     "TestIamPermissionsResponse": {
+      "description": "Response message for `TestIamPermissions` method.",
+      "type": "object",
       "properties": {
         "permissions": {
           "description": "A subset of `TestPermissionsRequest.permissions` that the caller is\nallowed.",
@@ -925,11 +937,12 @@
           }
         }
       },
-      "id": "TestIamPermissionsResponse",
-      "description": "Response message for `TestIamPermissions` method.",
-      "type": "object"
+      "id": "TestIamPermissionsResponse"
     },
     "ListVariablesResponse": {
+      "id": "ListVariablesResponse",
+      "description": "Response for the `ListVariables()` method.",
+      "type": "object",
       "properties": {
         "variables": {
           "description": "A list of variables and their values. The order of returned variable\nobjects is arbitrary.",
@@ -942,12 +955,10 @@
           "description": "This token allows you to get the next page of results for list requests.\nIf the number of results is larger than `pageSize`, use the `nextPageToken`\nas a value for the query parameter `pageToken` in the next list request.\nSubsequent list requests will have their own `nextPageToken` to continue\npaging through the results",
           "type": "string"
         }
-      },
-      "id": "ListVariablesResponse",
-      "description": "Response for the `ListVariables()` method.",
-      "type": "object"
+      }
     },
     "RuntimeConfig": {
+      "id": "RuntimeConfig",
       "description": "A RuntimeConfig resource is the primary resource in the Cloud RuntimeConfig\nservice. A RuntimeConfig resource consists of metadata and a hierarchy of\nvariables.",
       "type": "object",
       "properties": {
@@ -959,10 +970,11 @@
           "description": "An optional description of the RuntimeConfig object.",
           "type": "string"
         }
-      },
-      "id": "RuntimeConfig"
+      }
     },
     "WatchVariableRequest": {
+      "description": "Request for the `WatchVariable()` method.",
+      "type": "object",
       "properties": {
         "newerThan": {
           "description": "If specified, checks the current timestamp of the variable and if the\ncurrent timestamp is newer than `newerThan` timestamp, the method returns\nimmediately.\n\nIf not specified or the variable has an older timestamp, the watcher waits\nfor a the value to change before returning.",
@@ -970,11 +982,12 @@
           "type": "string"
         }
       },
-      "id": "WatchVariableRequest",
-      "description": "Request for the `WatchVariable()` method.",
-      "type": "object"
+      "id": "WatchVariableRequest"
     },
     "ListWaitersResponse": {
+      "id": "ListWaitersResponse",
+      "description": "Response for the `ListWaiters()` method.\nOrder of returned waiter objects is arbitrary.",
+      "type": "object",
       "properties": {
         "nextPageToken": {
           "description": "This token allows you to get the next page of results for list requests.\nIf the number of results is larger than `pageSize`, use the `nextPageToken`\nas a value for the query parameter `pageToken` in the next list request.\nSubsequent list requests will have their own `nextPageToken` to continue\npaging through the results",
@@ -987,12 +1000,10 @@
             "$ref": "Waiter"
           }
         }
-      },
-      "id": "ListWaitersResponse",
-      "description": "Response for the `ListWaiters()` method.\nOrder of returned waiter objects is arbitrary.",
-      "type": "object"
+      }
     },
     "TestIamPermissionsRequest": {
+      "id": "TestIamPermissionsRequest",
       "description": "Request message for `TestIamPermissions` method.",
       "type": "object",
       "properties": {
@@ -1003,22 +1014,27 @@
             "type": "string"
           }
         }
-      },
-      "id": "TestIamPermissionsRequest"
+      }
     },
     "Waiter": {
+      "description": "A Waiter resource waits for some end condition within a RuntimeConfig resource\nto be met before it returns. For example, assume you have a distributed\nsystem where each node writes to a Variable resource indidicating the node's\nreadiness as part of the startup process.\n\nYou then configure a Waiter resource with the success condition set to wait\nuntil some number of nodes have checked in. Afterwards, your application\nruns some arbitrary code after the condition has been met and the waiter\nreturns successfully.\n\nOnce created, a Waiter resource is immutable.\n\nTo learn more about using waiters, read the\n[Creating a Waiter](/deployment-manager/runtime-configurator/creating-a-waiter)\ndocumentation.",
+      "type": "object",
       "properties": {
+        "name": {
+          "description": "The name of the Waiter resource, in the format:\n\n    projects/[PROJECT_ID]/configs/[CONFIG_NAME]/waiters/[WAITER_NAME]\n\nThe `[PROJECT_ID]` must be a valid Google Cloud project ID,\nthe `[CONFIG_NAME]` must be a valid RuntimeConfig resource, the\n`[WAITER_NAME]` must match RFC 1035 segment specification, and the length\nof `[WAITER_NAME]` must be less than 64 bytes.\n\nAfter you create a Waiter resource, you cannot change the resource name.",
+          "type": "string"
+        },
         "error": {
           "$ref": "Status",
           "description": "[Output Only] If the waiter ended due to a failure or timeout, this value\nwill be set."
         },
         "failure": {
-          "description": "[Optional] The failure condition of this waiter. If this condition is met,\n`done` will be set to `true` and the `error` code will be set to `ABORTED`.\nThe failure condition takes precedence over the success condition. If both\nconditions are met, a failure will be indicated. This value is optional; if\nno failure condition is set, the only failure scenario will be a timeout.",
-          "$ref": "EndCondition"
+          "$ref": "EndCondition",
+          "description": "[Optional] The failure condition of this waiter. If this condition is met,\n`done` will be set to `true` and the `error` code will be set to `ABORTED`.\nThe failure condition takes precedence over the success condition. If both\nconditions are met, a failure will be indicated. This value is optional; if\nno failure condition is set, the only failure scenario will be a timeout."
         },
         "success": {
-          "description": "[Required] The success condition. If this condition is met, `done` will be\nset to `true` and the `error` value will remain unset. The failure condition\ntakes precedence over the success condition. If both conditions are met, a\nfailure will be indicated.",
-          "$ref": "EndCondition"
+          "$ref": "EndCondition",
+          "description": "[Required] The success condition. If this condition is met, `done` will be\nset to `true` and the `error` value will remain unset. The failure condition\ntakes precedence over the success condition. If both conditions are met, a\nfailure will be indicated."
         },
         "done": {
           "description": "[Output Only] If the value is `false`, it means the waiter is still waiting\nfor one of its conditions to be met.\n\nIf true, the waiter has finished. If the waiter finished due to a timeout\nor failure, `error` will be set.",
@@ -1033,17 +1049,12 @@
           "description": "[Required] Specifies the timeout of the waiter in seconds, beginning from\nthe instant that `waiters().create` method is called. If this time elapses\nbefore the success or failure conditions are met, the waiter fails and sets\nthe `error` code to `DEADLINE_EXCEEDED`.",
           "format": "google-duration",
           "type": "string"
-        },
-        "name": {
-          "description": "The name of the Waiter resource, in the format:\n\n    projects/[PROJECT_ID]/configs/[CONFIG_NAME]/waiters/[WAITER_NAME]\n\nThe `[PROJECT_ID]` must be a valid Google Cloud project ID,\nthe `[CONFIG_NAME]` must be a valid RuntimeConfig resource, the\n`[WAITER_NAME]` must match RFC 1035 segment specification, and the length\nof `[WAITER_NAME]` must be less than 64 bytes.\n\nAfter you create a Waiter resource, you cannot change the resource name.",
-          "type": "string"
         }
       },
-      "id": "Waiter",
-      "description": "A Waiter resource waits for some end condition within a RuntimeConfig resource\nto be met before it returns. For example, assume you have a distributed\nsystem where each node writes to a Variable resource indidicating the node's\nreadiness as part of the startup process.\n\nYou then configure a Waiter resource with the success condition set to wait\nuntil some number of nodes have checked in. Afterwards, your application\nruns some arbitrary code after the condition has been met and the waiter\nreturns successfully.\n\nOnce created, a Waiter resource is immutable.\n\nTo learn more about using waiters, read the\n[Creating a Waiter](/deployment-manager/runtime-configurator/creating-a-waiter)\ndocumentation.",
-      "type": "object"
+      "id": "Waiter"
     },
     "Policy": {
+      "id": "Policy",
       "description": "Defines an Identity and Access Management (IAM) policy. It is used to\nspecify access control policies for Cloud Platform resources.\n\n\nA `Policy` consists of a list of `bindings`. A `Binding` binds a list of\n`members` to a `role`, where the members can be user accounts, Google groups,\nGoogle domains, and service accounts. A `role` is a named list of permissions\ndefined by IAM.\n\n**Example**\n\n    {\n      \"bindings\": [\n        {\n          \"role\": \"roles/owner\",\n          \"members\": [\n            \"user:mike@example.com\",\n            \"group:admins@example.com\",\n            \"domain:google.com\",\n            \"serviceAccount:my-other-app@appspot.gserviceaccount.com\",\n          ]\n        },\n        {\n          \"role\": \"roles/viewer\",\n          \"members\": [\"user:sean@example.com\"]\n        }\n      ]\n    }\n\nFor a description of IAM and its features, see the\n[IAM developer's guide](https://cloud.google.com/iam).",
       "type": "object",
       "properties": {
@@ -1064,13 +1075,20 @@
             "$ref": "Binding"
           }
         }
-      },
-      "id": "Policy"
+      }
     },
     "Variable": {
       "description": "Describes a single variable within a RuntimeConfig resource.\nThe name denotes the hierarchical variable name. For example,\n`ports/serving_port` is a valid variable name. The variable value is an\nopaque string and only leaf variables can have values (that is, variables\nthat do not have any child variables).",
       "type": "object",
       "properties": {
+        "name": {
+          "description": "The name of the variable resource, in the format:\n\n    projects/[PROJECT_ID]/configs/[CONFIG_NAME]/variables/[VARIABLE_NAME]\n\nThe `[PROJECT_ID]` must be a valid project ID, `[CONFIG_NAME]` must be a\nvalid RuntimeConfig reource and `[VARIABLE_NAME]` follows Unix file system\nfile path naming.\n\nThe `[VARIABLE_NAME]` can contain ASCII letters, numbers, slashes and\ndashes. Slashes are used as path element separators and are not part of the\n`[VARIABLE_NAME]` itself, so `[VARIABLE_NAME]` must contain at least one\nnon-slash character. Multiple slashes are coalesced into single slash\ncharacter. Each path segment should follow RFC 1035 segment specification.\nThe length of a `[VARIABLE_NAME]` must be less than 256 bytes.\n\nOnce you create a variable, you cannot change the variable name.",
+          "type": "string"
+        },
+        "text": {
+          "description": "The string value of the variable. The length of the value must be less\nthan 4096 bytes. Empty values are also accepted. For example,\n`text: \"my text value\"`. The string must be valid UTF-8.",
+          "type": "string"
+        },
         "value": {
           "description": "The binary value of the variable. The length of the value must be less\nthan 4096 bytes. Empty values are also accepted. The value must be\nbase64 encoded. Only one of `value` or `text` can be set.",
           "format": "byte",
@@ -1082,32 +1100,42 @@
           "type": "string"
         },
         "state": {
-          "enum": [
-            "VARIABLE_STATE_UNSPECIFIED",
-            "UPDATED",
-            "DELETED"
-          ],
           "description": "[Ouput only] The current state of the variable. The variable state indicates\nthe outcome of the `variables().watch` call and is visible through the\n`get` and `list` calls.",
           "type": "string",
           "enumDescriptions": [
             "Default variable state.",
             "The variable was updated, while `variables().watch` was executing.",
             "The variable was deleted, while `variables().watch` was executing."
+          ],
+          "enum": [
+            "VARIABLE_STATE_UNSPECIFIED",
+            "UPDATED",
+            "DELETED"
           ]
-        },
-        "name": {
-          "description": "The name of the variable resource, in the format:\n\n    projects/[PROJECT_ID]/configs/[CONFIG_NAME]/variables/[VARIABLE_NAME]\n\nThe `[PROJECT_ID]` must be a valid project ID, `[CONFIG_NAME]` must be a\nvalid RuntimeConfig reource and `[VARIABLE_NAME]` follows Unix file system\nfile path naming.\n\nThe `[VARIABLE_NAME]` can contain ASCII letters, numbers, slashes and\ndashes. Slashes are used as path element separators and are not part of the\n`[VARIABLE_NAME]` itself, so `[VARIABLE_NAME]` must contain at least one\nnon-slash character. Multiple slashes are coalesced into single slash\ncharacter. Each path segment should follow RFC 1035 segment specification.\nThe length of a `[VARIABLE_NAME]` must be less than 256 bytes.\n\nOnce you create a variable, you cannot change the variable name.",
-          "type": "string"
-        },
-        "text": {
-          "description": "The string value of the variable. The length of the value must be less\nthan 4096 bytes. Empty values are also accepted. For example,\n`text: \"my text value\"`. The string must be valid UTF-8.",
-          "type": "string"
         }
       },
       "id": "Variable"
     },
     "Operation": {
+      "description": "This resource represents a long-running operation that is the result of a\nnetwork API call.",
+      "type": "object",
       "properties": {
+        "name": {
+          "description": "The server-assigned name, which is only unique within the same service that\noriginally returns it. If you use the default HTTP mapping, the\n`name` should have the format of `operations/some/unique/name`.",
+          "type": "string"
+        },
+        "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\ncontains progress information and common metadata such as create time.\nSome services might not provide such metadata.  Any method that returns a\nlong-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.\nIf true, the operation is completed, and either `error` or `response` is\navailable.",
           "type": "boolean"
@@ -1119,43 +1147,15 @@
           },
           "description": "The normal response of the operation in case of success.  If the original\nmethod returns no data on success, such as `Delete`, the response is\n`google.protobuf.Empty`.  If the original method is standard\n`Get`/`Create`/`Update`, the response should be the resource.  For other\nmethods, the response should have the type `XxxResponse`, where `Xxx`\nis the original method name.  For example, if the original method name\nis `TakeSnapshot()`, the inferred response type is\n`TakeSnapshotResponse`.",
           "type": "object"
-        },
-        "name": {
-          "description": "The server-assigned name, which is only unique within the same service that\noriginally returns it. If you use the default HTTP mapping, the\n`name` should have the format of `operations/some/unique/name`.",
-          "type": "string"
-        },
-        "error": {
-          "description": "The error result of the operation in case of failure or cancellation.",
-          "$ref": "Status"
-        },
-        "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\ncontains progress information and common metadata such as create time.\nSome services might not provide such metadata.  Any method that returns a\nlong-running operation should document the metadata type, if any.",
-          "type": "object"
         }
       },
-      "id": "Operation",
-      "description": "This resource represents a long-running operation that is the result of a\nnetwork API call.",
-      "type": "object"
-    },
-    "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\nthe policy is limited to a few 10s of KB. An empty policy is a\nvalid policy but certain Cloud Platform services (such as Projects)\nmight reject them.",
-          "$ref": "Policy"
-        }
-      },
-      "id": "SetIamPolicyRequest"
+      "id": "Operation"
     }
   },
   "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"
+  "protocol": "rest",
+  "canonicalName": "Cloud RuntimeConfig"
 }
diff --git a/runtimeconfig/v1beta1/runtimeconfig-gen.go b/runtimeconfig/v1beta1/runtimeconfig-gen.go
index 7006287..f6b1dab9 100644
--- a/runtimeconfig/v1beta1/runtimeconfig-gen.go
+++ b/runtimeconfig/v1beta1/runtimeconfig-gen.go
@@ -64,10 +64,9 @@
 }
 
 type Service struct {
-	client                    *http.Client
-	BasePath                  string // API endpoint base URL
-	UserAgent                 string // optional additional User-Agent fragment
-	GoogleClientHeaderElement string // client header fragment, for Google use only
+	client    *http.Client
+	BasePath  string // API endpoint base URL
+	UserAgent string // optional additional User-Agent fragment
 
 	Projects *ProjectsService
 }
@@ -79,10 +78,6 @@
 	return googleapi.UserAgent + " " + s.UserAgent
 }
 
-func (s *Service) clientHeader() string {
-	return gensupport.GoogleClientHeader("20170210", s.GoogleClientHeaderElement)
-}
-
 func NewProjectsService(s *Service) *ProjectsService {
 	rs := &ProjectsService{s: s}
 	rs.Configs = NewProjectsConfigsService(s)
@@ -1206,7 +1201,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	var body io.Reader = nil
 	body, err := googleapi.WithoutDataWrapper.JSONReader(c.runtimeconfig)
 	if err != nil {
@@ -1346,7 +1340,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	var body io.Reader = nil
 	c.urlParams_.Set("alt", alt)
 	urls := googleapi.ResolveRelative(c.s.BasePath, "v1beta1/{+name}")
@@ -1484,7 +1477,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	if c.ifNoneMatch_ != "" {
 		reqHeaders.Set("If-None-Match", c.ifNoneMatch_)
 	}
@@ -1628,7 +1620,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	if c.ifNoneMatch_ != "" {
 		reqHeaders.Set("If-None-Match", c.ifNoneMatch_)
 	}
@@ -1785,7 +1776,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	if c.ifNoneMatch_ != "" {
 		reqHeaders.Set("If-None-Match", c.ifNoneMatch_)
 	}
@@ -1951,7 +1941,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	var body io.Reader = nil
 	body, err := googleapi.WithoutDataWrapper.JSONReader(c.setiampolicyrequest)
 	if err != nil {
@@ -2098,7 +2087,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	var body io.Reader = nil
 	body, err := googleapi.WithoutDataWrapper.JSONReader(c.testiampermissionsrequest)
 	if err != nil {
@@ -2236,7 +2224,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	var body io.Reader = nil
 	body, err := googleapi.WithoutDataWrapper.JSONReader(c.runtimeconfig)
 	if err != nil {
@@ -2386,7 +2373,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	if c.ifNoneMatch_ != "" {
 		reqHeaders.Set("If-None-Match", c.ifNoneMatch_)
 	}
@@ -2549,7 +2535,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	if c.ifNoneMatch_ != "" {
 		reqHeaders.Set("If-None-Match", c.ifNoneMatch_)
 	}
@@ -2714,7 +2699,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	var body io.Reader = nil
 	body, err := googleapi.WithoutDataWrapper.JSONReader(c.variable)
 	if err != nil {
@@ -2870,7 +2854,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	var body io.Reader = nil
 	c.urlParams_.Set("alt", alt)
 	urls := googleapi.ResolveRelative(c.s.BasePath, "v1beta1/{+name}")
@@ -3013,7 +2996,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	if c.ifNoneMatch_ != "" {
 		reqHeaders.Set("If-None-Match", c.ifNoneMatch_)
 	}
@@ -3197,7 +3179,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	if c.ifNoneMatch_ != "" {
 		reqHeaders.Set("If-None-Match", c.ifNoneMatch_)
 	}
@@ -3402,7 +3383,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	if c.ifNoneMatch_ != "" {
 		reqHeaders.Set("If-None-Match", c.ifNoneMatch_)
 	}
@@ -3540,7 +3520,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	var body io.Reader = nil
 	body, err := googleapi.WithoutDataWrapper.JSONReader(c.variable)
 	if err != nil {
@@ -3697,7 +3676,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	var body io.Reader = nil
 	body, err := googleapi.WithoutDataWrapper.JSONReader(c.watchvariablerequest)
 	if err != nil {
@@ -3860,7 +3838,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	var body io.Reader = nil
 	body, err := googleapi.WithoutDataWrapper.JSONReader(c.waiter)
 	if err != nil {
@@ -4000,7 +3977,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	var body io.Reader = nil
 	c.urlParams_.Set("alt", alt)
 	urls := googleapi.ResolveRelative(c.s.BasePath, "v1beta1/{+name}")
@@ -4138,7 +4114,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	if c.ifNoneMatch_ != "" {
 		reqHeaders.Set("If-None-Match", c.ifNoneMatch_)
 	}
@@ -4295,7 +4270,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	if c.ifNoneMatch_ != "" {
 		reqHeaders.Set("If-None-Match", c.ifNoneMatch_)
 	}
@@ -4490,7 +4464,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	if c.ifNoneMatch_ != "" {
 		reqHeaders.Set("If-None-Match", c.ifNoneMatch_)
 	}
diff --git a/safebrowsing/v4/safebrowsing-api.json b/safebrowsing/v4/safebrowsing-api.json
index b2b2378..1fb3eb1 100644
--- a/safebrowsing/v4/safebrowsing-api.json
+++ b/safebrowsing/v4/safebrowsing-api.json
@@ -1,12 +1,14 @@
 {
+  "discoveryVersion": "v1",
+  "ownerName": "Google",
   "resources": {
     "threatListUpdates": {
       "methods": {
         "fetch": {
+          "description": "Fetches the most recent threat list updates. A client can request updates\nfor multiple lists at once.",
           "request": {
             "$ref": "FetchThreatListUpdatesRequest"
           },
-          "description": "Fetches the most recent threat list updates. A client can request updates\nfor multiple lists at once.",
           "response": {
             "$ref": "FetchThreatListUpdatesResponse"
           },
@@ -22,10 +24,6 @@
     "encodedFullHashes": {
       "methods": {
         "get": {
-          "flatPath": "v4/encodedFullHashes/{encodedRequest}",
-          "path": "v4/encodedFullHashes/{encodedRequest}",
-          "id": "safebrowsing.encodedFullHashes.get",
-          "description": "",
           "response": {
             "$ref": "FindFullHashesResponse"
           },
@@ -34,69 +32,69 @@
           ],
           "httpMethod": "GET",
           "parameters": {
+            "clientId": {
+              "location": "query",
+              "description": "A client ID that (hopefully) uniquely identifies the client implementation\nof the Safe Browsing API.",
+              "type": "string"
+            },
             "clientVersion": {
               "location": "query",
               "description": "The version of the client implementation.",
               "type": "string"
             },
             "encodedRequest": {
-              "location": "path",
               "description": "A serialized FindFullHashesRequest proto.",
               "format": "byte",
               "required": true,
-              "type": "string"
-            },
-            "clientId": {
-              "description": "A client ID that (hopefully) uniquely identifies the client implementation\nof the Safe Browsing API.",
               "type": "string",
-              "location": "query"
+              "location": "path"
             }
-          }
+          },
+          "flatPath": "v4/encodedFullHashes/{encodedRequest}",
+          "path": "v4/encodedFullHashes/{encodedRequest}",
+          "id": "safebrowsing.encodedFullHashes.get",
+          "description": ""
         }
       }
     },
     "threatLists": {
       "methods": {
         "list": {
+          "flatPath": "v4/threatLists",
+          "id": "safebrowsing.threatLists.list",
+          "path": "v4/threatLists",
           "description": "Lists the Safe Browsing threat lists available for download.",
+          "httpMethod": "GET",
           "response": {
             "$ref": "ListThreatListsResponse"
           },
           "parameterOrder": [],
-          "httpMethod": "GET",
-          "parameters": {},
-          "flatPath": "v4/threatLists",
-          "path": "v4/threatLists",
-          "id": "safebrowsing.threatLists.list"
+          "parameters": {}
         }
       }
     },
     "threatMatches": {
       "methods": {
         "find": {
+          "id": "safebrowsing.threatMatches.find",
+          "path": "v4/threatMatches:find",
+          "description": "Finds the threat entries that match the Safe Browsing lists.",
           "request": {
             "$ref": "FindThreatMatchesRequest"
           },
-          "description": "Finds the threat entries that match the Safe Browsing lists.",
+          "httpMethod": "POST",
+          "parameterOrder": [],
           "response": {
             "$ref": "FindThreatMatchesResponse"
           },
-          "parameterOrder": [],
-          "httpMethod": "POST",
           "parameters": {},
-          "flatPath": "v4/threatMatches:find",
-          "path": "v4/threatMatches:find",
-          "id": "safebrowsing.threatMatches.find"
+          "flatPath": "v4/threatMatches:find"
         }
       }
     },
     "fullHashes": {
       "methods": {
         "find": {
-          "request": {
-            "$ref": "FindFullHashesRequest"
-          },
-          "description": "Finds the full hashes that match the requested hash prefixes.",
           "httpMethod": "POST",
           "parameterOrder": [],
           "response": {
@@ -105,13 +103,20 @@
           "parameters": {},
           "flatPath": "v4/fullHashes:find",
           "id": "safebrowsing.fullHashes.find",
-          "path": "v4/fullHashes:find"
+          "path": "v4/fullHashes:find",
+          "request": {
+            "$ref": "FindFullHashesRequest"
+          },
+          "description": "Finds the full hashes that match the requested hash prefixes."
         }
       }
     },
     "encodedUpdates": {
       "methods": {
         "get": {
+          "path": "v4/encodedUpdates/{encodedRequest}",
+          "id": "safebrowsing.encodedUpdates.get",
+          "description": "",
           "response": {
             "$ref": "FetchThreatListUpdatesResponse"
           },
@@ -120,10 +125,15 @@
           ],
           "httpMethod": "GET",
           "parameters": {
+            "clientId": {
+              "description": "A client ID that uniquely identifies the client implementation of the Safe\nBrowsing API.",
+              "type": "string",
+              "location": "query"
+            },
             "clientVersion": {
-              "location": "query",
               "description": "The version of the client implementation.",
-              "type": "string"
+              "type": "string",
+              "location": "query"
             },
             "encodedRequest": {
               "location": "path",
@@ -131,74 +141,15 @@
               "format": "byte",
               "required": true,
               "type": "string"
-            },
-            "clientId": {
-              "location": "query",
-              "description": "A client ID that uniquely identifies the client implementation of the Safe\nBrowsing API.",
-              "type": "string"
             }
           },
-          "flatPath": "v4/encodedUpdates/{encodedRequest}",
-          "path": "v4/encodedUpdates/{encodedRequest}",
-          "id": "safebrowsing.encodedUpdates.get",
-          "description": ""
+          "flatPath": "v4/encodedUpdates/{encodedRequest}"
         }
       }
     }
   },
   "parameters": {
-    "oauth_token": {
-      "description": "OAuth 2.0 token for the current user.",
-      "type": "string",
-      "location": "query"
-    },
-    "bearer_token": {
-      "location": "query",
-      "description": "OAuth bearer token.",
-      "type": "string"
-    },
-    "upload_protocol": {
-      "description": "Upload protocol for media (e.g. \"raw\", \"multipart\").",
-      "type": "string",
-      "location": "query"
-    },
-    "prettyPrint": {
-      "description": "Returns response with indentations and line breaks.",
-      "type": "boolean",
-      "default": "true",
-      "location": "query"
-    },
-    "fields": {
-      "description": "Selector specifying which fields to include in a partial response.",
-      "type": "string",
-      "location": "query"
-    },
-    "uploadType": {
-      "location": "query",
-      "description": "Legacy upload protocol for media (e.g. \"media\", \"multipart\").",
-      "type": "string"
-    },
-    "$.xgafv": {
-      "description": "V1 error format.",
-      "type": "string",
-      "enumDescriptions": [
-        "v1 error format",
-        "v2 error format"
-      ],
-      "location": "query",
-      "enum": [
-        "1",
-        "2"
-      ]
-    },
-    "callback": {
-      "description": "JSONP",
-      "type": "string",
-      "location": "query"
-    },
     "alt": {
-      "description": "Data format for response.",
-      "default": "json",
       "enum": [
         "json",
         "media",
@@ -210,7 +161,9 @@
         "Media download with context-dependent Content-Type",
         "Responses with Content-Type of application/x-protobuf"
       ],
-      "location": "query"
+      "location": "query",
+      "description": "Data format for response.",
+      "default": "json"
     },
     "access_token": {
       "location": "query",
@@ -232,22 +185,144 @@
       "type": "boolean",
       "default": "true",
       "location": "query"
+    },
+    "oauth_token": {
+      "type": "string",
+      "location": "query",
+      "description": "OAuth 2.0 token for the current user."
+    },
+    "bearer_token": {
+      "description": "OAuth bearer token.",
+      "type": "string",
+      "location": "query"
+    },
+    "upload_protocol": {
+      "description": "Upload protocol for media (e.g. \"raw\", \"multipart\").",
+      "type": "string",
+      "location": "query"
+    },
+    "prettyPrint": {
+      "location": "query",
+      "description": "Returns response with indentations and line breaks.",
+      "type": "boolean",
+      "default": "true"
+    },
+    "fields": {
+      "description": "Selector specifying which fields to include in a partial response.",
+      "type": "string",
+      "location": "query"
+    },
+    "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."
+    },
+    "callback": {
+      "description": "JSONP",
+      "type": "string",
+      "location": "query"
     }
   },
   "schemas": {
+    "ThreatListDescriptor": {
+      "description": "Describes an individual threat list. A list is defined by three parameters:\nthe type of threat posed, the type of platform targeted by the threat, and\nthe type of entries in the list.",
+      "type": "object",
+      "properties": {
+        "threatType": {
+          "description": "The threat type posed by the list's entries.",
+          "type": "string",
+          "enumDescriptions": [
+            "Unknown.",
+            "Malware threat type.",
+            "Social engineering threat type.",
+            "Unwanted software threat type.",
+            "Potentially harmful application threat type."
+          ],
+          "enum": [
+            "THREAT_TYPE_UNSPECIFIED",
+            "MALWARE",
+            "SOCIAL_ENGINEERING",
+            "UNWANTED_SOFTWARE",
+            "POTENTIALLY_HARMFUL_APPLICATION"
+          ]
+        },
+        "threatEntryType": {
+          "description": "The entry types contained in the list.",
+          "type": "string",
+          "enumDescriptions": [
+            "Unspecified.",
+            "A URL.",
+            "An executable program.",
+            "An IP range.",
+            "Chrome extension.",
+            "Filename.",
+            "CERT"
+          ],
+          "enum": [
+            "THREAT_ENTRY_TYPE_UNSPECIFIED",
+            "URL",
+            "EXECUTABLE",
+            "IP_RANGE",
+            "CHROME_EXTENSION",
+            "FILENAME",
+            "CERT"
+          ]
+        },
+        "platformType": {
+          "enumDescriptions": [
+            "Unknown platform.",
+            "Threat posed to Windows.",
+            "Threat posed to Linux.",
+            "Threat posed to Android.",
+            "Threat posed to OS X.",
+            "Threat posed to iOS.",
+            "Threat posed to at least one of the defined platforms.",
+            "Threat posed to all defined platforms.",
+            "Threat posed to Chrome."
+          ],
+          "enum": [
+            "PLATFORM_TYPE_UNSPECIFIED",
+            "WINDOWS",
+            "LINUX",
+            "ANDROID",
+            "OSX",
+            "IOS",
+            "ANY_PLATFORM",
+            "ALL_PLATFORMS",
+            "CHROME"
+          ],
+          "description": "The platform type targeted by the list's entries.",
+          "type": "string"
+        }
+      },
+      "id": "ThreatListDescriptor"
+    },
     "MetadataEntry": {
       "description": "A single metadata entry.",
       "type": "object",
       "properties": {
-        "value": {
-          "description": "The metadata entry value. For JSON requests, the value is base64-encoded.",
-          "format": "byte",
-          "type": "string"
-        },
         "key": {
           "description": "The metadata entry key. For JSON requests, the key is base64-encoded.",
           "format": "byte",
           "type": "string"
+        },
+        "value": {
+          "type": "string",
+          "description": "The metadata entry value. For JSON requests, the value is base64-encoded.",
+          "format": "byte"
         }
       },
       "id": "MetadataEntry"
@@ -267,25 +342,17 @@
       },
       "id": "ClientInfo"
     },
-    "FindThreatMatchesRequest": {
-      "description": "Request to check entries against lists.",
-      "type": "object",
-      "properties": {
-        "client": {
-          "$ref": "ClientInfo",
-          "description": "The client metadata."
-        },
-        "threatInfo": {
-          "$ref": "ThreatInfo",
-          "description": "The lists and entries to be checked for matches."
-        }
-      },
-      "id": "FindThreatMatchesRequest"
-    },
     "ThreatInfo": {
       "description": "The information regarding one or more threats that a client submits when\nchecking for matches in threat lists.",
       "type": "object",
       "properties": {
+        "threatEntries": {
+          "description": "The threat entries to be checked.",
+          "type": "array",
+          "items": {
+            "$ref": "ThreatEntry"
+          }
+        },
         "threatEntryTypes": {
           "enumDescriptions": [
             "Unspecified.",
@@ -336,6 +403,7 @@
           "description": "The platform types to be checked.",
           "type": "array",
           "items": {
+            "type": "string",
             "enum": [
               "PLATFORM_TYPE_UNSPECIFIED",
               "WINDOWS",
@@ -346,8 +414,7 @@
               "ANY_PLATFORM",
               "ALL_PLATFORMS",
               "CHROME"
-            ],
-            "type": "string"
+            ]
           },
           "enumDescriptions": [
             "Unknown platform.",
@@ -360,17 +427,25 @@
             "Threat posed to all defined platforms.",
             "Threat posed to Chrome."
           ]
-        },
-        "threatEntries": {
-          "description": "The threat entries to be checked.",
-          "type": "array",
-          "items": {
-            "$ref": "ThreatEntry"
-          }
         }
       },
       "id": "ThreatInfo"
     },
+    "FindThreatMatchesRequest": {
+      "id": "FindThreatMatchesRequest",
+      "description": "Request to check entries against lists.",
+      "type": "object",
+      "properties": {
+        "client": {
+          "description": "The client metadata.",
+          "$ref": "ClientInfo"
+        },
+        "threatInfo": {
+          "$ref": "ThreatInfo",
+          "description": "The lists and entries to be checked for matches."
+        }
+      }
+    },
     "ThreatEntryMetadata": {
       "description": "The metadata associated with a specific threat entry. The client is expected\nto know the metadata key/value pairs associated with each threat type.",
       "type": "object",
@@ -435,9 +510,26 @@
       },
       "id": "FetchThreatListUpdatesResponse"
     },
+    "Checksum": {
+      "description": "The expected state of a client's local database.",
+      "type": "object",
+      "properties": {
+        "sha256": {
+          "type": "string",
+          "description": "The SHA256 hash of the client state; that is, of the sorted list of all\nhashes present in the database.",
+          "format": "byte"
+        }
+      },
+      "id": "Checksum"
+    },
     "FindFullHashesResponse": {
       "type": "object",
       "properties": {
+        "minimumWaitDuration": {
+          "description": "The minimum duration the client must wait before issuing any find hashes\nrequest. If this field is not set, clients can issue a request as soon as\nthey want.",
+          "format": "google-duration",
+          "type": "string"
+        },
         "matches": {
           "description": "The full hashes that matched the requested prefixes.",
           "type": "array",
@@ -449,31 +541,27 @@
           "description": "For requested entities that did not match the threat list, how long to\ncache the response.",
           "format": "google-duration",
           "type": "string"
-        },
-        "minimumWaitDuration": {
-          "description": "The minimum duration the client must wait before issuing any find hashes\nrequest. If this field is not set, clients can issue a request as soon as\nthey want.",
-          "format": "google-duration",
-          "type": "string"
         }
       },
       "id": "FindFullHashesResponse"
     },
-    "Checksum": {
-      "description": "The expected state of a client's local database.",
-      "type": "object",
-      "properties": {
-        "sha256": {
-          "description": "The SHA256 hash of the client state; that is, of the sorted list of all\nhashes present in the database.",
-          "format": "byte",
-          "type": "string"
-        }
-      },
-      "id": "Checksum"
-    },
     "ThreatEntrySet": {
+      "id": "ThreatEntrySet",
       "description": "A set of threats that should be added or removed from a client's local\ndatabase.",
       "type": "object",
       "properties": {
+        "rawIndices": {
+          "$ref": "RawIndices",
+          "description": "The raw removal indices for a local list."
+        },
+        "rawHashes": {
+          "$ref": "RawHashes",
+          "description": "The raw SHA256-formatted entries."
+        },
+        "riceHashes": {
+          "$ref": "RiceDeltaEncoding",
+          "description": "The encoded 4-byte prefixes of SHA256-formatted entries, using a\nGolomb-Rice encoding. The hashes are converted to uint32, sorted in\nascending order, then delta encoded and stored as encoded_data."
+        },
         "compressionType": {
           "description": "The compression type for the entries in this set.",
           "type": "string",
@@ -489,36 +577,14 @@
           ]
         },
         "riceIndices": {
-          "description": "The encoded local, lexicographically-sorted list indices, using a\nGolomb-Rice encoding. Used for sending compressed removal indices. The\nremoval indices (uint32) are sorted in ascending order, then delta encoded\nand stored as encoded_data.",
-          "$ref": "RiceDeltaEncoding"
-        },
-        "rawIndices": {
-          "description": "The raw removal indices for a local list.",
-          "$ref": "RawIndices"
-        },
-        "rawHashes": {
-          "description": "The raw SHA256-formatted entries.",
-          "$ref": "RawHashes"
-        },
-        "riceHashes": {
-          "description": "The encoded 4-byte prefixes of SHA256-formatted entries, using a\nGolomb-Rice encoding. The hashes are converted to uint32, sorted in\nascending order, then delta encoded and stored as encoded_data.",
-          "$ref": "RiceDeltaEncoding"
+          "$ref": "RiceDeltaEncoding",
+          "description": "The encoded local, lexicographically-sorted list indices, using a\nGolomb-Rice encoding. Used for sending compressed removal indices. The\nremoval indices (uint32) are sorted in ascending order, then delta encoded\nand stored as encoded_data."
         }
-      },
-      "id": "ThreatEntrySet"
+      }
     },
     "FindFullHashesRequest": {
-      "description": "Request to return full hashes matched by the provided hash prefixes.",
       "type": "object",
       "properties": {
-        "client": {
-          "description": "The client metadata.",
-          "$ref": "ClientInfo"
-        },
-        "threatInfo": {
-          "$ref": "ThreatInfo",
-          "description": "The lists and hashes to be checked."
-        },
         "apiClient": {
           "$ref": "ClientInfo",
           "description": "Client metadata associated with callers of higher-level APIs built on top\nof the client's implementation."
@@ -530,17 +596,30 @@
             "format": "byte",
             "type": "string"
           }
+        },
+        "client": {
+          "description": "The client metadata.",
+          "$ref": "ClientInfo"
+        },
+        "threatInfo": {
+          "$ref": "ThreatInfo",
+          "description": "The lists and hashes to be checked."
         }
       },
-      "id": "FindFullHashesRequest"
+      "id": "FindFullHashesRequest",
+      "description": "Request to return full hashes matched by the provided hash prefixes."
     },
     "ListUpdateRequest": {
+      "id": "ListUpdateRequest",
       "description": "A single list update request.",
       "type": "object",
       "properties": {
-        "platformType": {
-          "description": "The type of platform at risk by entries present in the list.",
+        "state": {
           "type": "string",
+          "description": "The current state of the client for the requested list (the encrypted\nclient state that was received from the last successful list update).",
+          "format": "byte"
+        },
+        "platformType": {
           "enumDescriptions": [
             "Unknown platform.",
             "Threat posed to Windows.",
@@ -562,11 +641,11 @@
             "ANY_PLATFORM",
             "ALL_PLATFORMS",
             "CHROME"
-          ]
+          ],
+          "description": "The type of platform at risk by entries present in the list.",
+          "type": "string"
         },
         "threatType": {
-          "description": "The type of threat posed by entries present in the list.",
-          "type": "string",
           "enumDescriptions": [
             "Unknown.",
             "Malware threat type.",
@@ -580,22 +659,15 @@
             "SOCIAL_ENGINEERING",
             "UNWANTED_SOFTWARE",
             "POTENTIALLY_HARMFUL_APPLICATION"
-          ]
+          ],
+          "description": "The type of threat posed by entries present in the list.",
+          "type": "string"
         },
         "constraints": {
           "$ref": "Constraints",
           "description": "The constraints associated with this request."
         },
         "threatEntryType": {
-          "enumDescriptions": [
-            "Unspecified.",
-            "A URL.",
-            "An executable program.",
-            "An IP range.",
-            "Chrome extension.",
-            "Filename.",
-            "CERT"
-          ],
           "enum": [
             "THREAT_ENTRY_TYPE_UNSPECIFIED",
             "URL",
@@ -606,66 +678,6 @@
             "CERT"
           ],
           "description": "The types of entries present in the list.",
-          "type": "string"
-        },
-        "state": {
-          "description": "The current state of the client for the requested list (the encrypted\nclient state that was received from the last successful list update).",
-          "format": "byte",
-          "type": "string"
-        }
-      },
-      "id": "ListUpdateRequest"
-    },
-    "FetchThreatListUpdatesRequest": {
-      "description": "Describes a Safe Browsing API update request. Clients can request updates for\nmultiple lists in a single request.\nNOTE: Field index 2 is unused.\nNEXT: 5",
-      "type": "object",
-      "properties": {
-        "client": {
-          "$ref": "ClientInfo",
-          "description": "The client metadata."
-        },
-        "listUpdateRequests": {
-          "description": "The requested threat list updates.",
-          "type": "array",
-          "items": {
-            "$ref": "ListUpdateRequest"
-          }
-        }
-      },
-      "id": "FetchThreatListUpdatesRequest"
-    },
-    "ListUpdateResponse": {
-      "description": "An update to an individual list.",
-      "type": "object",
-      "properties": {
-        "platformType": {
-          "description": "The platform type for which data is returned.",
-          "type": "string",
-          "enumDescriptions": [
-            "Unknown platform.",
-            "Threat posed to Windows.",
-            "Threat posed to Linux.",
-            "Threat posed to Android.",
-            "Threat posed to OS X.",
-            "Threat posed to iOS.",
-            "Threat posed to at least one of the defined platforms.",
-            "Threat posed to all defined platforms.",
-            "Threat posed to Chrome."
-          ],
-          "enum": [
-            "PLATFORM_TYPE_UNSPECIFIED",
-            "WINDOWS",
-            "LINUX",
-            "ANDROID",
-            "OSX",
-            "IOS",
-            "ANY_PLATFORM",
-            "ALL_PLATFORMS",
-            "CHROME"
-          ]
-        },
-        "threatEntryType": {
-          "description": "The format of the threats.",
           "type": "string",
           "enumDescriptions": [
             "Unspecified.",
@@ -675,17 +687,32 @@
             "Chrome extension.",
             "Filename.",
             "CERT"
-          ],
-          "enum": [
-            "THREAT_ENTRY_TYPE_UNSPECIFIED",
-            "URL",
-            "EXECUTABLE",
-            "IP_RANGE",
-            "CHROME_EXTENSION",
-            "FILENAME",
-            "CERT"
           ]
+        }
+      }
+    },
+    "FetchThreatListUpdatesRequest": {
+      "id": "FetchThreatListUpdatesRequest",
+      "description": "Describes a Safe Browsing API update request. Clients can request updates for\nmultiple lists in a single request.\nNOTE: Field index 2 is unused.\nNEXT: 5",
+      "type": "object",
+      "properties": {
+        "listUpdateRequests": {
+          "description": "The requested threat list updates.",
+          "type": "array",
+          "items": {
+            "$ref": "ListUpdateRequest"
+          }
         },
+        "client": {
+          "$ref": "ClientInfo",
+          "description": "The client metadata."
+        }
+      }
+    },
+    "ListUpdateResponse": {
+      "description": "An update to an individual list.",
+      "type": "object",
+      "properties": {
         "additions": {
           "description": "A set of entries to add to a local threat type's list. Repeated to allow\nfor a combination of compressed and raw data to be sent in a single\nresponse.",
           "type": "array",
@@ -694,8 +721,8 @@
           }
         },
         "checksum": {
-          "description": "The expected SHA256 hash of the client state; that is, of the sorted list\nof all hashes present in the database after applying the provided update.\nIf the client state doesn't match the expected state, the client must\ndisregard this update and retry later.",
-          "$ref": "Checksum"
+          "$ref": "Checksum",
+          "description": "The expected SHA256 hash of the client state; that is, of the sorted list\nof all hashes present in the database after applying the provided update.\nIf the client state doesn't match the expected state, the client must\ndisregard this update and retry later."
         },
         "responseType": {
           "enumDescriptions": [
@@ -712,6 +739,8 @@
           "type": "string"
         },
         "threatType": {
+          "description": "The threat type for which data is returned.",
+          "type": "string",
           "enumDescriptions": [
             "Unknown.",
             "Malware threat type.",
@@ -725,21 +754,67 @@
             "SOCIAL_ENGINEERING",
             "UNWANTED_SOFTWARE",
             "POTENTIALLY_HARMFUL_APPLICATION"
-          ],
-          "description": "The threat type for which data is returned.",
-          "type": "string"
+          ]
         },
         "removals": {
-          "description": "A set of entries to remove from a local threat type's list. In practice,\nthis field is empty or contains exactly one ThreatEntrySet.",
           "type": "array",
           "items": {
             "$ref": "ThreatEntrySet"
-          }
+          },
+          "description": "A set of entries to remove from a local threat type's list. In practice,\nthis field is empty or contains exactly one ThreatEntrySet."
         },
         "newClientState": {
           "description": "The new client state, in encrypted format. Opaque to clients.",
           "format": "byte",
           "type": "string"
+        },
+        "platformType": {
+          "type": "string",
+          "enumDescriptions": [
+            "Unknown platform.",
+            "Threat posed to Windows.",
+            "Threat posed to Linux.",
+            "Threat posed to Android.",
+            "Threat posed to OS X.",
+            "Threat posed to iOS.",
+            "Threat posed to at least one of the defined platforms.",
+            "Threat posed to all defined platforms.",
+            "Threat posed to Chrome."
+          ],
+          "enum": [
+            "PLATFORM_TYPE_UNSPECIFIED",
+            "WINDOWS",
+            "LINUX",
+            "ANDROID",
+            "OSX",
+            "IOS",
+            "ANY_PLATFORM",
+            "ALL_PLATFORMS",
+            "CHROME"
+          ],
+          "description": "The platform type for which data is returned."
+        },
+        "threatEntryType": {
+          "type": "string",
+          "enumDescriptions": [
+            "Unspecified.",
+            "A URL.",
+            "An executable program.",
+            "An IP range.",
+            "Chrome extension.",
+            "Filename.",
+            "CERT"
+          ],
+          "enum": [
+            "THREAT_ENTRY_TYPE_UNSPECIFIED",
+            "URL",
+            "EXECUTABLE",
+            "IP_RANGE",
+            "CHROME_EXTENSION",
+            "FILENAME",
+            "CERT"
+          ],
+          "description": "The format of the threats."
         }
       },
       "id": "ListUpdateResponse"
@@ -758,11 +833,6 @@
           "type": "string"
         },
         "supportedCompressions": {
-          "enumDescriptions": [
-            "Unknown.",
-            "Raw, uncompressed data.",
-            "Rice-Golomb encoded data."
-          ],
           "description": "The compression types supported by the client.",
           "type": "array",
           "items": {
@@ -772,7 +842,12 @@
               "RAW",
               "RICE"
             ]
-          }
+          },
+          "enumDescriptions": [
+            "Unknown.",
+            "Raw, uncompressed data.",
+            "Rice-Golomb encoded data."
+          ]
         },
         "maxUpdateEntries": {
           "description": "The maximum size in number of entries. The update will not contain more\nentries than this value.  This should be a power of 2 between 2**10 and\n2**20.  If zero, no update size limit is set.",
@@ -786,36 +861,6 @@
       "description": "A match when checking a threat entry in the Safe Browsing threat lists.",
       "type": "object",
       "properties": {
-        "threat": {
-          "description": "The threat matching this threat.",
-          "$ref": "ThreatEntry"
-        },
-        "platformType": {
-          "enumDescriptions": [
-            "Unknown platform.",
-            "Threat posed to Windows.",
-            "Threat posed to Linux.",
-            "Threat posed to Android.",
-            "Threat posed to OS X.",
-            "Threat posed to iOS.",
-            "Threat posed to at least one of the defined platforms.",
-            "Threat posed to all defined platforms.",
-            "Threat posed to Chrome."
-          ],
-          "enum": [
-            "PLATFORM_TYPE_UNSPECIFIED",
-            "WINDOWS",
-            "LINUX",
-            "ANDROID",
-            "OSX",
-            "IOS",
-            "ANY_PLATFORM",
-            "ALL_PLATFORMS",
-            "CHROME"
-          ],
-          "description": "The platform type matching this threat.",
-          "type": "string"
-        },
         "threatEntryType": {
           "enumDescriptions": [
             "Unspecified.",
@@ -843,8 +888,11 @@
           "format": "google-duration",
           "type": "string"
         },
+        "threatEntryMetadata": {
+          "$ref": "ThreatEntryMetadata",
+          "description": "Optional metadata associated with this threat."
+        },
         "threatType": {
-          "description": "The threat type matching this threat.",
           "type": "string",
           "enumDescriptions": [
             "Unknown.",
@@ -859,95 +907,15 @@
             "SOCIAL_ENGINEERING",
             "UNWANTED_SOFTWARE",
             "POTENTIALLY_HARMFUL_APPLICATION"
-          ]
+          ],
+          "description": "The threat type matching this threat."
         },
-        "threatEntryMetadata": {
-          "description": "Optional metadata associated with this threat.",
-          "$ref": "ThreatEntryMetadata"
-        }
-      },
-      "id": "ThreatMatch"
-    },
-    "RiceDeltaEncoding": {
-      "description": "The Rice-Golomb encoded data. Used for sending compressed 4-byte hashes or\ncompressed removal indices.",
-      "type": "object",
-      "properties": {
-        "firstValue": {
-          "description": "The offset of the first entry in the encoded data, or, if only a single\ninteger was encoded, that single integer's value.",
-          "format": "int64",
-          "type": "string"
+        "threat": {
+          "description": "The threat matching this threat.",
+          "$ref": "ThreatEntry"
         },
-        "encodedData": {
-          "description": "The encoded deltas that are encoded using the Golomb-Rice coder.",
-          "format": "byte",
-          "type": "string"
-        },
-        "numEntries": {
-          "description": "The number of entries that are delta encoded in the encoded data. If only a\nsingle integer was encoded, this will be zero and the single value will be\nstored in `first_value`.",
-          "format": "int32",
-          "type": "integer"
-        },
-        "riceParameter": {
-          "description": "The Golomb-Rice parameter, which is a number between 2 and 28. This field\nis missing (that is, zero) if `num_entries` is zero.",
-          "format": "int32",
-          "type": "integer"
-        }
-      },
-      "id": "RiceDeltaEncoding"
-    },
-    "ListThreatListsResponse": {
-      "type": "object",
-      "properties": {
-        "threatLists": {
-          "description": "The lists available for download by the client.",
-          "type": "array",
-          "items": {
-            "$ref": "ThreatListDescriptor"
-          }
-        }
-      },
-      "id": "ListThreatListsResponse"
-    },
-    "FindThreatMatchesResponse": {
-      "type": "object",
-      "properties": {
-        "matches": {
-          "description": "The threat list matches.",
-          "type": "array",
-          "items": {
-            "$ref": "ThreatMatch"
-          }
-        }
-      },
-      "id": "FindThreatMatchesResponse"
-    },
-    "ThreatEntry": {
-      "description": "An individual threat; for example, a malicious URL or its hash\nrepresentation. Only one of these fields should be set.",
-      "type": "object",
-      "properties": {
-        "digest": {
-          "description": "The digest of an executable in SHA256 format. The API supports both\nbinary and hex digests. For JSON requests, digests are base64-encoded.",
-          "format": "byte",
-          "type": "string"
-        },
-        "hash": {
-          "description": "A hash prefix, consisting of the most significant 4-32 bytes of a SHA256\nhash. This field is in binary format. For JSON requests, hashes are\nbase64-encoded.",
-          "format": "byte",
-          "type": "string"
-        },
-        "url": {
-          "description": "A URL.",
-          "type": "string"
-        }
-      },
-      "id": "ThreatEntry"
-    },
-    "ThreatListDescriptor": {
-      "description": "Describes an individual threat list. A list is defined by three parameters:\nthe type of threat posed, the type of platform targeted by the threat, and\nthe type of entries in the list.",
-      "type": "object",
-      "properties": {
         "platformType": {
-          "description": "The platform type targeted by the list's entries.",
+          "description": "The platform type matching this threat.",
           "type": "string",
           "enumDescriptions": [
             "Unknown platform.",
@@ -971,70 +939,102 @@
             "ALL_PLATFORMS",
             "CHROME"
           ]
-        },
-        "threatType": {
-          "description": "The threat type posed by the list's entries.",
-          "type": "string",
-          "enumDescriptions": [
-            "Unknown.",
-            "Malware threat type.",
-            "Social engineering threat type.",
-            "Unwanted software threat type.",
-            "Potentially harmful application threat type."
-          ],
-          "enum": [
-            "THREAT_TYPE_UNSPECIFIED",
-            "MALWARE",
-            "SOCIAL_ENGINEERING",
-            "UNWANTED_SOFTWARE",
-            "POTENTIALLY_HARMFUL_APPLICATION"
-          ]
-        },
-        "threatEntryType": {
-          "description": "The entry types contained in the list.",
-          "type": "string",
-          "enumDescriptions": [
-            "Unspecified.",
-            "A URL.",
-            "An executable program.",
-            "An IP range.",
-            "Chrome extension.",
-            "Filename.",
-            "CERT"
-          ],
-          "enum": [
-            "THREAT_ENTRY_TYPE_UNSPECIFIED",
-            "URL",
-            "EXECUTABLE",
-            "IP_RANGE",
-            "CHROME_EXTENSION",
-            "FILENAME",
-            "CERT"
-          ]
         }
       },
-      "id": "ThreatListDescriptor"
+      "id": "ThreatMatch"
+    },
+    "RiceDeltaEncoding": {
+      "id": "RiceDeltaEncoding",
+      "description": "The Rice-Golomb encoded data. Used for sending compressed 4-byte hashes or\ncompressed removal indices.",
+      "type": "object",
+      "properties": {
+        "numEntries": {
+          "description": "The number of entries that are delta encoded in the encoded data. If only a\nsingle integer was encoded, this will be zero and the single value will be\nstored in `first_value`.",
+          "format": "int32",
+          "type": "integer"
+        },
+        "riceParameter": {
+          "description": "The Golomb-Rice parameter, which is a number between 2 and 28. This field\nis missing (that is, zero) if `num_entries` is zero.",
+          "format": "int32",
+          "type": "integer"
+        },
+        "firstValue": {
+          "description": "The offset of the first entry in the encoded data, or, if only a single\ninteger was encoded, that single integer's value.",
+          "format": "int64",
+          "type": "string"
+        },
+        "encodedData": {
+          "description": "The encoded deltas that are encoded using the Golomb-Rice coder.",
+          "format": "byte",
+          "type": "string"
+        }
+      }
+    },
+    "ListThreatListsResponse": {
+      "properties": {
+        "threatLists": {
+          "description": "The lists available for download by the client.",
+          "type": "array",
+          "items": {
+            "$ref": "ThreatListDescriptor"
+          }
+        }
+      },
+      "id": "ListThreatListsResponse",
+      "type": "object"
+    },
+    "FindThreatMatchesResponse": {
+      "properties": {
+        "matches": {
+          "type": "array",
+          "items": {
+            "$ref": "ThreatMatch"
+          },
+          "description": "The threat list matches."
+        }
+      },
+      "id": "FindThreatMatchesResponse",
+      "type": "object"
+    },
+    "ThreatEntry": {
+      "properties": {
+        "hash": {
+          "description": "A hash prefix, consisting of the most significant 4-32 bytes of a SHA256\nhash. This field is in binary format. For JSON requests, hashes are\nbase64-encoded.",
+          "format": "byte",
+          "type": "string"
+        },
+        "url": {
+          "description": "A URL.",
+          "type": "string"
+        },
+        "digest": {
+          "type": "string",
+          "description": "The digest of an executable in SHA256 format. The API supports both\nbinary and hex digests. For JSON requests, digests are base64-encoded.",
+          "format": "byte"
+        }
+      },
+      "id": "ThreatEntry",
+      "description": "An individual threat; for example, a malicious URL or its hash\nrepresentation. Only one of these fields should be set.",
+      "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"
-  },
   "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"
+  },
   "version": "v4",
   "baseUrl": "https://safebrowsing.googleapis.com/",
-  "kind": "discovery#restDescription",
   "servicePath": "",
   "description": "The Safe Browsing API is an experimental API that allows client applications to check URLs against Google's constantly-updated blacklists of suspected phishing and malware pages. Your client application can use the API to download an encrypted table for local, client-side lookups of URLs.",
+  "kind": "discovery#restDescription",
   "rootUrl": "https://safebrowsing.googleapis.com/",
   "basePath": "",
   "ownerDomain": "google.com",
   "name": "safebrowsing",
   "batchPath": "batch",
-  "id": "safebrowsing:v4",
   "documentationLink": "https://developers.google.com/safe-browsing/",
-  "revision": "20170306",
-  "title": "Google Safe Browsing API",
-  "ownerName": "Google",
-  "discoveryVersion": "v1"
+  "revision": "20170319",
+  "id": "safebrowsing:v4",
+  "title": "Google Safe Browsing API"
 }
diff --git a/safebrowsing/v4/safebrowsing-gen.go b/safebrowsing/v4/safebrowsing-gen.go
index 39b6128..41ccc8e 100644
--- a/safebrowsing/v4/safebrowsing-gen.go
+++ b/safebrowsing/v4/safebrowsing-gen.go
@@ -60,10 +60,9 @@
 }
 
 type Service struct {
-	client                    *http.Client
-	BasePath                  string // API endpoint base URL
-	UserAgent                 string // optional additional User-Agent fragment
-	GoogleClientHeaderElement string // client header fragment, for Google use only
+	client    *http.Client
+	BasePath  string // API endpoint base URL
+	UserAgent string // optional additional User-Agent fragment
 
 	EncodedFullHashes *EncodedFullHashesService
 
@@ -85,10 +84,6 @@
 	return googleapi.UserAgent + " " + s.UserAgent
 }
 
-func (s *Service) clientHeader() string {
-	return gensupport.GoogleClientHeader("20170210", s.GoogleClientHeaderElement)
-}
-
 func NewEncodedFullHashesService(s *Service) *EncodedFullHashesService {
 	rs := &EncodedFullHashesService{s: s}
 	return rs
@@ -1261,7 +1256,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	if c.ifNoneMatch_ != "" {
 		reqHeaders.Set("If-None-Match", c.ifNoneMatch_)
 	}
@@ -1423,7 +1417,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	if c.ifNoneMatch_ != "" {
 		reqHeaders.Set("If-None-Match", c.ifNoneMatch_)
 	}
@@ -1559,7 +1552,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	var body io.Reader = nil
 	body, err := googleapi.WithoutDataWrapper.JSONReader(c.findfullhashesrequest)
 	if err != nil {
@@ -1679,7 +1671,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	var body io.Reader = nil
 	body, err := googleapi.WithoutDataWrapper.JSONReader(c.fetchthreatlistupdatesrequest)
 	if err != nil {
@@ -1806,7 +1797,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	if c.ifNoneMatch_ != "" {
 		reqHeaders.Set("If-None-Match", c.ifNoneMatch_)
 	}
@@ -1919,7 +1909,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	var body io.Reader = nil
 	body, err := googleapi.WithoutDataWrapper.JSONReader(c.findthreatmatchesrequest)
 	if err != nil {
diff --git a/script/v1/script-api.json b/script/v1/script-api.json
index 1c0584d..c081feb 100644
--- a/script/v1/script-api.json
+++ b/script/v1/script-api.json
@@ -1,26 +1,17 @@
 {
-  "rootUrl": "https://script.googleapis.com/",
-  "basePath": "",
-  "ownerDomain": "google.com",
-  "name": "script",
-  "batchPath": "batch",
-  "documentationLink": "https://developers.google.com/apps-script/execution/rest/v1/scripts/run",
-  "revision": "20170228",
-  "id": "script:v1",
-  "title": "Google Apps Script Execution API",
-  "discoveryVersion": "v1",
   "ownerName": "Google",
+  "discoveryVersion": "v1",
   "resources": {
     "scripts": {
       "methods": {
         "run": {
-          "httpMethod": "POST",
-          "parameterOrder": [
-            "scriptId"
-          ],
           "response": {
             "$ref": "Operation"
           },
+          "parameterOrder": [
+            "scriptId"
+          ],
+          "httpMethod": "POST",
           "scopes": [
             "https://mail.google.com/",
             "https://www.google.com/calendar/feeds",
@@ -36,15 +27,15 @@
           ],
           "parameters": {
             "scriptId": {
+              "location": "path",
               "description": "The project key of the script to be executed. To find the project key, open\nthe project in the script editor and select **File \u003e Project properties**.",
               "required": true,
-              "type": "string",
-              "location": "path"
+              "type": "string"
             }
           },
           "flatPath": "v1/scripts/{scriptId}:run",
-          "id": "script.scripts.run",
           "path": "v1/scripts/{scriptId}:run",
+          "id": "script.scripts.run",
           "description": "Runs a function in an Apps Script project. The project must be deployed\nfor use with the Apps Script Execution API.\n\nThis method requires authorization with an OAuth 2.0 token that includes at\nleast one of the scopes listed in the [Authorization](#authorization)\nsection; script projects that do not require authorization cannot be\nexecuted through this API. To find the correct scopes to include in the\nauthentication token, open the project in the script editor, then select\n**File \u003e Project properties** and click the **Scopes** tab.",
           "request": {
             "$ref": "ExecutionRequest"
@@ -54,26 +45,73 @@
     }
   },
   "parameters": {
-    "upload_protocol": {
+    "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",
-      "description": "Upload protocol for media (e.g. \"raw\", \"multipart\").",
+      "description": "Data format for response.",
+      "default": "json",
+      "enum": [
+        "json",
+        "media",
+        "proto"
+      ],
       "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"
+    },
+    "access_token": {
+      "description": "OAuth access token.",
+      "type": "string",
+      "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"
+    },
+    "pp": {
+      "location": "query",
+      "description": "Pretty-print response.",
+      "type": "boolean",
+      "default": "true"
+    },
+    "bearer_token": {
+      "description": "OAuth bearer token.",
+      "type": "string",
+      "location": "query"
+    },
+    "oauth_token": {
+      "description": "OAuth 2.0 token for the current user.",
+      "type": "string",
+      "location": "query"
+    },
+    "upload_protocol": {
+      "description": "Upload protocol for media (e.g. \"raw\", \"multipart\").",
+      "type": "string",
+      "location": "query"
+    },
     "prettyPrint": {
+      "location": "query",
       "description": "Returns response with indentations and line breaks.",
       "type": "boolean",
-      "default": "true",
-      "location": "query"
+      "default": "true"
     },
     "uploadType": {
+      "location": "query",
       "description": "Legacy upload protocol for media (e.g. \"media\", \"multipart\").",
-      "type": "string",
-      "location": "query"
+      "type": "string"
     },
     "fields": {
+      "location": "query",
       "description": "Selector specifying which fields to include in a partial response.",
-      "type": "string",
-      "location": "query"
+      "type": "string"
     },
     "callback": {
       "location": "query",
@@ -92,140 +130,9 @@
         "v2 error format"
       ],
       "location": "query"
-    },
-    "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"
-    },
-    "access_token": {
-      "location": "query",
-      "description": "OAuth access token.",
-      "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"
-    },
-    "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"
-    },
-    "pp": {
-      "description": "Pretty-print response.",
-      "type": "boolean",
-      "default": "true",
-      "location": "query"
-    },
-    "bearer_token": {
-      "description": "OAuth bearer token.",
-      "type": "string",
-      "location": "query"
-    },
-    "oauth_token": {
-      "description": "OAuth 2.0 token for the current user.",
-      "type": "string",
-      "location": "query"
     }
   },
   "schemas": {
-    "ExecutionResponse": {
-      "description": "An object that provides the return value of a function executed through the\nApps Script Execution API. If a\n`run` call succeeds and the\nscript function returns successfully, the response body's\n`response` field contains this\n`ExecutionResponse` object.",
-      "type": "object",
-      "properties": {
-        "result": {
-          "description": "The return value of the script function. The type matches the object type\nreturned in Apps Script. Functions called through the Execution API cannot\nreturn Apps Script-specific objects (such as a `Document` or a `Calendar`);\nthey can only return primitive types such as a `string`, `number`, `array`,\n`object`, or `boolean`.",
-          "type": "any"
-        }
-      },
-      "id": "ExecutionResponse"
-    },
-    "Operation": {
-      "properties": {
-        "done": {
-          "description": "This field is not used.",
-          "type": "boolean"
-        },
-        "response": {
-          "additionalProperties": {
-            "description": "Properties of the object. Contains field @type with type URL.",
-            "type": "any"
-          },
-          "description": "If the script function returns successfully, this field will contain an `ExecutionResponse` object with the function's return value as the object's `result` field.",
-          "type": "object"
-        },
-        "name": {
-          "description": "This field is not used.",
-          "type": "string"
-        },
-        "error": {
-          "description": "If a `run` call succeeds but the script function (or Apps Script itself) throws an exception, this field will contain a `Status` object. The `Status` object's `details` field will contain an array with a single `ExecutionError` object that provides information about the nature of the error.",
-          "$ref": "Status"
-        },
-        "metadata": {
-          "additionalProperties": {
-            "description": "Properties of the object. Contains field @type with type URL.",
-            "type": "any"
-          },
-          "description": "This field is not used.",
-          "type": "object"
-        }
-      },
-      "id": "Operation",
-      "description": "The response will not arrive until the function finishes executing. The maximum runtime is listed in the guide to [limitations in Apps Script](https://developers.google.com/apps-script/guides/services/quotas#current_limitations).\n\u003cp\u003eIf the script function returns successfully, the `response` field will contain an `ExecutionResponse` object with the function's return value in the object's `result` field.\u003c/p\u003e\n\u003cp\u003eIf the script function (or Apps Script itself) throws an exception, the `error` field will contain a `Status` object. The `Status` object's `details` field will contain an array with a single `ExecutionError` object that provides information about the nature of the error.\u003c/p\u003e\n\u003cp\u003eIf the `run` call itself fails (for example, because of a malformed request or an authorization error), the method will return an HTTP response code in the 4XX range with a different format for the response body. Client libraries will automatically convert a 4XX response into an exception class.\u003c/p\u003e",
-      "type": "object"
-    },
-    "ScriptStackTraceElement": {
-      "description": "A stack trace through the script that shows where the execution failed.",
-      "type": "object",
-      "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"
-        }
-      },
-      "id": "ScriptStackTraceElement"
-    },
-    "ExecutionError": {
-      "properties": {
-        "scriptStackTraceElements": {
-          "description": "An array of objects that provide a stack trace through the script to show\nwhere the execution failed, with the deepest call first.",
-          "type": "array",
-          "items": {
-            "$ref": "ScriptStackTraceElement"
-          }
-        },
-        "errorType": {
-          "description": "The error type, for example `TypeError` or `ReferenceError`. If the error\ntype is unavailable, this field is not included.",
-          "type": "string"
-        },
-        "errorMessage": {
-          "description": "The error message thrown by Apps Script, usually localized into the user's\nlanguage.",
-          "type": "string"
-        }
-      },
-      "id": "ExecutionError",
-      "description": "An object that provides information about the nature of an error in the Apps\nScript Execution API. If an\n`run` call succeeds but the\nscript function (or Apps Script itself) throws an exception, the response\nbody's `error` field contains a\n`Status` object. The `Status` object's `details` field\ncontains an array with a single one of these `ExecutionError` objects.",
-      "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 will contain this `Status` object.",
       "type": "object",
@@ -278,18 +185,108 @@
       "id": "ExecutionRequest",
       "description": "A request to run the function in a script. The script is identified by the\nspecified `script_id`. Executing a function on a script returns results\nbased on the implementation of the script.",
       "type": "object"
+    },
+    "ExecutionResponse": {
+      "description": "An object that provides the return value of a function executed through the\nApps Script Execution API. If a\n`run` call succeeds and the\nscript function returns successfully, the response body's\n`response` field contains this\n`ExecutionResponse` object.",
+      "type": "object",
+      "properties": {
+        "result": {
+          "description": "The return value of the script function. The type matches the object type\nreturned in Apps Script. Functions called through the Execution API cannot\nreturn Apps Script-specific objects (such as a `Document` or a `Calendar`);\nthey can only return primitive types such as a `string`, `number`, `array`,\n`object`, or `boolean`.",
+          "type": "any"
+        }
+      },
+      "id": "ExecutionResponse"
+    },
+    "Operation": {
+      "description": "The response will not arrive until the function finishes executing. The maximum runtime is listed in the guide to [limitations in Apps Script](https://developers.google.com/apps-script/guides/services/quotas#current_limitations).\n\u003cp\u003eIf the script function returns successfully, the `response` field will contain an `ExecutionResponse` object with the function's return value in the object's `result` field.\u003c/p\u003e\n\u003cp\u003eIf the script function (or Apps Script itself) throws an exception, the `error` field will contain a `Status` object. The `Status` object's `details` field will contain an array with a single `ExecutionError` object that provides information about the nature of the error.\u003c/p\u003e\n\u003cp\u003eIf the `run` call itself fails (for example, because of a malformed request or an authorization error), the method will return an HTTP response code in the 4XX range with a different format for the response body. Client libraries will automatically convert a 4XX response into an exception class.\u003c/p\u003e",
+      "type": "object",
+      "properties": {
+        "done": {
+          "description": "This field is not used.",
+          "type": "boolean"
+        },
+        "response": {
+          "additionalProperties": {
+            "description": "Properties of the object. Contains field @type with type URL.",
+            "type": "any"
+          },
+          "description": "If the script function returns successfully, this field will contain an `ExecutionResponse` object with the function's return value as the object's `result` field.",
+          "type": "object"
+        },
+        "name": {
+          "description": "This field is not used.",
+          "type": "string"
+        },
+        "error": {
+          "description": "If a `run` call succeeds but the script function (or Apps Script itself) throws an exception, this field will contain a `Status` object. The `Status` object's `details` field will contain an array with a single `ExecutionError` object that provides information about the nature of the error.",
+          "$ref": "Status"
+        },
+        "metadata": {
+          "additionalProperties": {
+            "description": "Properties of the object. Contains field @type with type URL.",
+            "type": "any"
+          },
+          "description": "This field is not used.",
+          "type": "object"
+        }
+      },
+      "id": "Operation"
+    },
+    "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"
+        }
+      },
+      "id": "ScriptStackTraceElement",
+      "description": "A stack trace through the script that shows where the execution failed.",
+      "type": "object"
+    },
+    "ExecutionError": {
+      "properties": {
+        "errorType": {
+          "description": "The error type, for example `TypeError` or `ReferenceError`. If the error\ntype is unavailable, this field is not included.",
+          "type": "string"
+        },
+        "errorMessage": {
+          "description": "The error message thrown by Apps Script, usually localized into the user's\nlanguage.",
+          "type": "string"
+        },
+        "scriptStackTraceElements": {
+          "description": "An array of objects that provide a stack trace through the script to show\nwhere the execution failed, with the deepest call first.",
+          "type": "array",
+          "items": {
+            "$ref": "ScriptStackTraceElement"
+          }
+        }
+      },
+      "id": "ExecutionError",
+      "description": "An object that provides information about the nature of an error in the Apps\nScript Execution API. If an\n`run` call succeeds but the\nscript function (or Apps Script itself) throws an exception, the response\nbody's `error` field contains a\n`Status` object. The `Status` object's `details` field\ncontains an array with a single one of these `ExecutionError` objects.",
+      "type": "object"
     }
   },
   "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"
+    "x16": "http://www.google.com/images/icons/product/search-16.gif",
+    "x32": "http://www.google.com/images/icons/product/search-32.gif"
   },
   "version": "v1",
   "baseUrl": "https://script.googleapis.com/",
   "auth": {
     "oauth2": {
       "scopes": {
+        "https://www.googleapis.com/auth/forms": {
+          "description": "View and manage your forms in Google Drive"
+        },
+        "https://www.google.com/m8/feeds": {
+          "description": "Manage your contacts"
+        },
         "https://www.googleapis.com/auth/userinfo.email": {
           "description": "View your email address"
         },
@@ -305,28 +302,31 @@
         "https://www.googleapis.com/auth/drive": {
           "description": "View and manage the files in your Google Drive"
         },
-        "https://www.googleapis.com/auth/admin.directory.user": {
-          "description": "View and manage the provisioning of users on your domain"
-        },
         "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/spreadsheets": {
           "description": "View and manage your spreadsheets in Google Drive"
         },
         "https://mail.google.com/": {
           "description": "Read, send, delete, and manage your email"
-        },
-        "https://www.googleapis.com/auth/forms": {
-          "description": "View and manage your forms in Google Drive"
-        },
-        "https://www.google.com/m8/feeds": {
-          "description": "Manage your contacts"
         }
       }
     }
   },
-  "kind": "discovery#restDescription",
+  "servicePath": "",
   "description": "Executes Google Apps Script projects.",
-  "servicePath": ""
+  "kind": "discovery#restDescription",
+  "rootUrl": "https://script.googleapis.com/",
+  "basePath": "",
+  "ownerDomain": "google.com",
+  "name": "script",
+  "batchPath": "batch",
+  "id": "script:v1",
+  "documentationLink": "https://developers.google.com/apps-script/execution/rest/v1/scripts/run",
+  "revision": "20170321",
+  "title": "Google Apps Script Execution API"
 }
diff --git a/script/v1/script-gen.go b/script/v1/script-gen.go
index b6da1e8..1a27ebb 100644
--- a/script/v1/script-gen.go
+++ b/script/v1/script-gen.go
@@ -91,10 +91,9 @@
 }
 
 type Service struct {
-	client                    *http.Client
-	BasePath                  string // API endpoint base URL
-	UserAgent                 string // optional additional User-Agent fragment
-	GoogleClientHeaderElement string // client header fragment, for Google use only
+	client    *http.Client
+	BasePath  string // API endpoint base URL
+	UserAgent string // optional additional User-Agent fragment
 
 	Scripts *ScriptsService
 }
@@ -106,10 +105,6 @@
 	return googleapi.UserAgent + " " + s.UserAgent
 }
 
-func (s *Service) clientHeader() string {
-	return gensupport.GoogleClientHeader("20170210", s.GoogleClientHeaderElement)
-}
-
 func NewScriptsService(s *Service) *ScriptsService {
 	rs := &ScriptsService{s: s}
 	return rs
@@ -488,7 +483,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	var body io.Reader = nil
 	body, err := googleapi.WithoutDataWrapper.JSONReader(c.executionrequest)
 	if err != nil {
diff --git a/searchconsole/v1/searchconsole-api.json b/searchconsole/v1/searchconsole-api.json
index 48e2cef..432f5f1 100644
--- a/searchconsole/v1/searchconsole-api.json
+++ b/searchconsole/v1/searchconsole-api.json
@@ -1,4 +1,11 @@
 {
+  "documentationLink": "https://developers.google.com/webmaster-tools/search-console-api/",
+  "id": "searchconsole:v1",
+  "revision": "20170325",
+  "title": "Google Search Console URL Testing Tools API",
+  "ownerName": "Google",
+  "discoveryVersion": "v1",
+  "version_module": "True",
   "resources": {
     "urlTestingTools": {
       "resources": {
@@ -7,10 +14,10 @@
             "run": {
               "path": "v1/urlTestingTools/mobileFriendlyTest:run",
               "id": "searchconsole.urlTestingTools.mobileFriendlyTest.run",
-              "description": "Runs Mobile-Friendly Test for a given URL.",
               "request": {
                 "$ref": "RunMobileFriendlyTestRequest"
               },
+              "description": "Runs Mobile-Friendly Test for a given URL.",
               "response": {
                 "$ref": "RunMobileFriendlyTestResponse"
               },
@@ -25,16 +32,32 @@
     }
   },
   "parameters": {
-    "uploadType": {
+    "upload_protocol": {
       "location": "query",
-      "description": "Legacy upload protocol for media (e.g. \"media\", \"multipart\").",
+      "description": "Upload protocol for media (e.g. \"raw\", \"multipart\").",
       "type": "string"
     },
+    "prettyPrint": {
+      "location": "query",
+      "description": "Returns response with indentations and line breaks.",
+      "type": "boolean",
+      "default": "true"
+    },
     "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\").",
+      "type": "string",
+      "location": "query"
+    },
+    "callback": {
+      "location": "query",
+      "description": "JSONP",
+      "type": "string"
+    },
     "$.xgafv": {
       "enumDescriptions": [
         "v1 error format",
@@ -48,12 +71,13 @@
       "description": "V1 error format.",
       "type": "string"
     },
-    "callback": {
-      "description": "JSONP",
-      "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",
       "description": "Data format for response.",
       "default": "json",
       "enum": [
@@ -61,59 +85,44 @@
         "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"
+      "type": "string"
+    },
+    "access_token": {
+      "location": "query",
+      "description": "OAuth access token.",
+      "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"
     },
-    "access_token": {
-      "description": "OAuth access token.",
-      "type": "string",
-      "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.",
       "type": "string",
       "location": "query"
     },
     "pp": {
+      "location": "query",
       "description": "Pretty-print response.",
       "type": "boolean",
-      "default": "true",
-      "location": "query"
+      "default": "true"
     },
     "bearer_token": {
-      "location": "query",
       "description": "OAuth bearer token.",
-      "type": "string"
+      "type": "string",
+      "location": "query"
     },
     "oauth_token": {
       "description": "OAuth 2.0 token for the current user.",
       "type": "string",
       "location": "query"
-    },
-    "upload_protocol": {
-      "description": "Upload protocol for media (e.g. \"raw\", \"multipart\").",
-      "type": "string",
-      "location": "query"
-    },
-    "prettyPrint": {
-      "description": "Returns response with indentations and line breaks.",
-      "type": "boolean",
-      "default": "true",
-      "location": "query"
     }
   },
   "schemas": {
     "MobileFriendlyIssue": {
+      "description": "Mobile-friendly issue.",
+      "type": "object",
       "properties": {
         "rule": {
           "enum": [
@@ -138,21 +147,13 @@
           ]
         }
       },
-      "id": "MobileFriendlyIssue",
-      "description": "Mobile-friendly issue.",
-      "type": "object"
+      "id": "MobileFriendlyIssue"
     },
     "RunMobileFriendlyTestResponse": {
-      "description": "Mobile-friendly test response, including mobile-friendly issues and resource\nissues.",
-      "type": "object",
       "properties": {
-        "screenshot": {
-          "$ref": "Image",
-          "description": "Screenshot of the requested URL."
-        },
         "testStatus": {
-          "$ref": "TestStatus",
-          "description": "Final state of the test, can be either complete or an error."
+          "description": "Final state of the test, can be either complete or an error.",
+          "$ref": "TestStatus"
         },
         "resourceIssues": {
           "description": "Information about embedded resources issues.",
@@ -181,40 +182,40 @@
           "items": {
             "$ref": "MobileFriendlyIssue"
           }
+        },
+        "screenshot": {
+          "$ref": "Image",
+          "description": "Screenshot of the requested URL."
         }
       },
-      "id": "RunMobileFriendlyTestResponse"
+      "id": "RunMobileFriendlyTestResponse",
+      "description": "Mobile-friendly test response, including mobile-friendly issues and resource\nissues.",
+      "type": "object"
     },
     "ResourceIssue": {
       "description": "Information about a resource with issue.",
       "type": "object",
       "properties": {
         "blockedResource": {
-          "description": "Describes a blocked resource issue.",
-          "$ref": "BlockedResource"
+          "$ref": "BlockedResource",
+          "description": "Describes a blocked resource issue."
         }
       },
       "id": "ResourceIssue"
     },
     "BlockedResource": {
-      "description": "Blocked resource.",
-      "type": "object",
       "properties": {
         "url": {
           "description": "URL of the blocked resource.",
           "type": "string"
         }
       },
-      "id": "BlockedResource"
+      "id": "BlockedResource",
+      "description": "Blocked resource.",
+      "type": "object"
     },
     "TestStatus": {
-      "description": "Final state of the test, including error details if necessary.",
-      "type": "object",
       "properties": {
-        "details": {
-          "description": "Error details if applicable.",
-          "type": "string"
-        },
         "status": {
           "enum": [
             "TEST_STATUS_UNSPECIFIED",
@@ -230,9 +231,15 @@
             "Inspection terminated in an error state. This indicates a problem in\nGoogle's infrastructure, not a user error. Please try again later.",
             "Google can not access the URL because of a user error such as a robots.txt\nblockage, a 403 or 500 code etc. Please make sure that the URL provided is\naccessible by Googlebot and is not password protected."
           ]
+        },
+        "details": {
+          "description": "Error details if applicable.",
+          "type": "string"
         }
       },
-      "id": "TestStatus"
+      "id": "TestStatus",
+      "description": "Final state of the test, including error details if necessary.",
+      "type": "object"
     },
     "Image": {
       "properties": {
@@ -251,8 +258,6 @@
       "type": "object"
     },
     "RunMobileFriendlyTestRequest": {
-      "description": "Mobile-friendly test request.",
-      "type": "object",
       "properties": {
         "url": {
           "description": "URL for inspection.",
@@ -263,30 +268,25 @@
           "type": "boolean"
         }
       },
-      "id": "RunMobileFriendlyTestRequest"
+      "id": "RunMobileFriendlyTestRequest",
+      "description": "Mobile-friendly test request.",
+      "type": "object"
     }
   },
   "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"
+    "x16": "http://www.google.com/images/icons/product/search-16.gif",
+    "x32": "http://www.google.com/images/icons/product/search-32.gif"
   },
   "version": "v1",
   "baseUrl": "https://searchconsole.googleapis.com/",
   "canonicalName": "Search Console",
-  "servicePath": "",
-  "description": "Provides tools for running validation tests against single URLs",
   "kind": "discovery#restDescription",
+  "description": "Provides tools for running validation tests against single URLs",
+  "servicePath": "",
   "rootUrl": "https://searchconsole.googleapis.com/",
   "basePath": "",
   "ownerDomain": "google.com",
   "name": "searchconsole",
-  "batchPath": "batch",
-  "revision": "20170307",
-  "documentationLink": "https://developers.google.com/webmaster-tools/search-console-api/",
-  "id": "searchconsole:v1",
-  "title": "Google Search Console URL Testing Tools API",
-  "discoveryVersion": "v1",
-  "ownerName": "Google",
-  "version_module": "True"
+  "batchPath": "batch"
 }
diff --git a/searchconsole/v1/searchconsole-gen.go b/searchconsole/v1/searchconsole-gen.go
index b88c900..a19821e 100644
--- a/searchconsole/v1/searchconsole-gen.go
+++ b/searchconsole/v1/searchconsole-gen.go
@@ -55,10 +55,9 @@
 }
 
 type Service struct {
-	client                    *http.Client
-	BasePath                  string // API endpoint base URL
-	UserAgent                 string // optional additional User-Agent fragment
-	GoogleClientHeaderElement string // client header fragment, for Google use only
+	client    *http.Client
+	BasePath  string // API endpoint base URL
+	UserAgent string // optional additional User-Agent fragment
 
 	UrlTestingTools *UrlTestingToolsService
 }
@@ -70,10 +69,6 @@
 	return googleapi.UserAgent + " " + s.UserAgent
 }
 
-func (s *Service) clientHeader() string {
-	return gensupport.GoogleClientHeader("20170210", s.GoogleClientHeaderElement)
-}
-
 func NewUrlTestingToolsService(s *Service) *UrlTestingToolsService {
 	rs := &UrlTestingToolsService{s: s}
 	rs.MobileFriendlyTest = NewUrlTestingToolsMobileFriendlyTestService(s)
@@ -427,7 +422,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	var body io.Reader = nil
 	body, err := googleapi.WithoutDataWrapper.JSONReader(c.runmobilefriendlytestrequest)
 	if err != nil {
diff --git a/servicecontrol/v1/servicecontrol-api.json b/servicecontrol/v1/servicecontrol-api.json
index 0543518..f51e7c6 100644
--- a/servicecontrol/v1/servicecontrol-api.json
+++ b/servicecontrol/v1/servicecontrol-api.json
@@ -1,20 +1,821 @@
 {
-  "revision": "20170224",
+  "rootUrl": "https://servicecontrol.googleapis.com/",
+  "ownerDomain": "google.com",
+  "name": "servicecontrol",
+  "batchPath": "batch",
+  "title": "Google Service Control API",
+  "ownerName": "Google",
+  "resources": {
+    "services": {
+      "methods": {
+        "report": {
+          "httpMethod": "POST",
+          "parameterOrder": [
+            "serviceName"
+          ],
+          "response": {
+            "$ref": "ReportResponse"
+          },
+          "scopes": [
+            "https://www.googleapis.com/auth/cloud-platform",
+            "https://www.googleapis.com/auth/servicecontrol"
+          ],
+          "parameters": {
+            "serviceName": {
+              "location": "path",
+              "description": "The service name as specified in its service configuration. For example,\n`\"pubsub.googleapis.com\"`.\n\nSee google.api.Service for the definition of a service name.",
+              "required": true,
+              "type": "string"
+            }
+          },
+          "flatPath": "v1/services/{serviceName}:report",
+          "id": "servicecontrol.services.report",
+          "path": "v1/services/{serviceName}:report",
+          "description": "Reports operation results to Google Service Control, such as logs and\nmetrics. It should be called after an operation is completed.\n\nIf feasible, the client should aggregate reporting data for up to 5\nseconds to reduce API traffic. Limiting aggregation to 5 seconds is to\nreduce data loss during client crashes. Clients should carefully choose\nthe aggregation time window to avoid data loss risk more than 0.01%\nfor business and compliance reasons.\n\nNOTE: the `ReportRequest` has the size limit of 1MB.\n\nThis method requires the `servicemanagement.services.report` permission\non the specified service. For more information, see\n[Google Cloud IAM](https://cloud.google.com/iam).",
+          "request": {
+            "$ref": "ReportRequest"
+          }
+        },
+        "allocateQuota": {
+          "httpMethod": "POST",
+          "parameterOrder": [
+            "serviceName"
+          ],
+          "response": {
+            "$ref": "AllocateQuotaResponse"
+          },
+          "scopes": [
+            "https://www.googleapis.com/auth/cloud-platform",
+            "https://www.googleapis.com/auth/servicecontrol"
+          ],
+          "parameters": {
+            "serviceName": {
+              "required": true,
+              "type": "string",
+              "location": "path",
+              "description": "Name of the service as specified in the service configuration. For example,\n`\"pubsub.googleapis.com\"`.\n\nSee google.api.Service for the definition of a service name."
+            }
+          },
+          "flatPath": "v1/services/{serviceName}:allocateQuota",
+          "id": "servicecontrol.services.allocateQuota",
+          "path": "v1/services/{serviceName}:allocateQuota",
+          "description": "Attempts to allocate quota for the specified consumer. It should be called\nbefore the operation is executed.\n\nThis method requires the `servicemanagement.services.quota`\npermission on the specified service. For more information, see\n[Google Cloud IAM](https://cloud.google.com/iam).\n\n**NOTE:** the client code **must** fail-open if the server returns one\nof the following quota errors:\n-   `PROJECT_STATUS_UNAVAILABLE`\n-   `SERVICE_STATUS_UNAVAILABLE`\n-   `BILLING_STATUS_UNAVAILABLE`\n-   `QUOTA_SYSTEM_UNAVAILABLE`\n\nThe server may inject above errors to prohibit any hard dependency\non the quota system.",
+          "request": {
+            "$ref": "AllocateQuotaRequest"
+          }
+        },
+        "startReconciliation": {
+          "response": {
+            "$ref": "StartReconciliationResponse"
+          },
+          "parameterOrder": [
+            "serviceName"
+          ],
+          "httpMethod": "POST",
+          "scopes": [
+            "https://www.googleapis.com/auth/cloud-platform",
+            "https://www.googleapis.com/auth/servicecontrol"
+          ],
+          "parameters": {
+            "serviceName": {
+              "description": "Name of the service as specified in the service configuration. For example,\n`\"pubsub.googleapis.com\"`.\n\nSee google.api.Service for the definition of a service name.",
+              "required": true,
+              "type": "string",
+              "location": "path"
+            }
+          },
+          "flatPath": "v1/services/{serviceName}:startReconciliation",
+          "path": "v1/services/{serviceName}:startReconciliation",
+          "id": "servicecontrol.services.startReconciliation",
+          "description": "Unlike rate quota, allocation quota does not get refilled periodically.\nSo, it is possible that the quota usage as seen by the service differs from\nwhat the One Platform considers the usage is. This is expected to happen\nonly rarely, but over time this can accumulate. Services can invoke\nStartReconciliation and EndReconciliation to correct this usage drift, as\ndescribed below:\n1. Service sends StartReconciliation with a timestamp in future for each\n   metric that needs to be reconciled. The timestamp being in future allows\n   to account for in-flight AllocateQuota and ReleaseQuota requests for the\n   same metric.\n2. One Platform records this timestamp and starts tracking subsequent\n   AllocateQuota and ReleaseQuota requests until EndReconciliation is\n   called.\n3. At or after the time specified in the StartReconciliation, service\n   sends EndReconciliation with the usage that needs to be reconciled to.\n4. One Platform adjusts its own record of usage for that metric to the\n   value specified in EndReconciliation by taking in to account any\n   allocation or release between StartReconciliation and EndReconciliation.\n\nSignals the quota controller that the service wants to perform a usage\nreconciliation as specified in the request.\n\nThis method requires the `servicemanagement.services.quota`\npermission on the specified service. For more information, see\n[Google Cloud IAM](https://cloud.google.com/iam).",
+          "request": {
+            "$ref": "StartReconciliationRequest"
+          }
+        },
+        "check": {
+          "request": {
+            "$ref": "CheckRequest"
+          },
+          "description": "Checks an operation with Google Service Control to decide whether\nthe given operation should proceed. It should be called before the\noperation is executed.\n\nIf feasible, the client should cache the check results and reuse them for\n60 seconds. In case of server errors, the client can rely on the cached\nresults for longer time.\n\nNOTE: the `CheckRequest` has the size limit of 64KB.\n\nThis method requires the `servicemanagement.services.check` permission\non the specified service. For more information, see\n[Google Cloud IAM](https://cloud.google.com/iam).",
+          "response": {
+            "$ref": "CheckResponse"
+          },
+          "parameterOrder": [
+            "serviceName"
+          ],
+          "httpMethod": "POST",
+          "parameters": {
+            "serviceName": {
+              "location": "path",
+              "description": "The service name as specified in its service configuration. For example,\n`\"pubsub.googleapis.com\"`.\n\nSee google.api.Service for the definition of a service name.",
+              "required": true,
+              "type": "string"
+            }
+          },
+          "scopes": [
+            "https://www.googleapis.com/auth/cloud-platform",
+            "https://www.googleapis.com/auth/servicecontrol"
+          ],
+          "flatPath": "v1/services/{serviceName}:check",
+          "path": "v1/services/{serviceName}:check",
+          "id": "servicecontrol.services.check"
+        },
+        "releaseQuota": {
+          "request": {
+            "$ref": "ReleaseQuotaRequest"
+          },
+          "description": "Releases previously allocated quota done through AllocateQuota method.\n\nThis method requires the `servicemanagement.services.quota`\npermission on the specified service. For more information, see\n[Google Cloud IAM](https://cloud.google.com/iam).\n\n**NOTE:** the client code **must** fail-open if the server returns one\nof the following quota errors:\n-   `PROJECT_STATUS_UNAVAILABLE`\n-   `SERVICE_STATUS_UNAVAILABLE`\n-   `BILLING_STATUS_UNAVAILABLE`\n-   `QUOTA_SYSTEM_UNAVAILABLE`\n\nThe server may inject above errors to prohibit any hard dependency\non the quota system.",
+          "response": {
+            "$ref": "ReleaseQuotaResponse"
+          },
+          "parameterOrder": [
+            "serviceName"
+          ],
+          "httpMethod": "POST",
+          "parameters": {
+            "serviceName": {
+              "location": "path",
+              "description": "Name of the service as specified in the service configuration. For example,\n`\"pubsub.googleapis.com\"`.\n\nSee google.api.Service for the definition of a service name.",
+              "required": true,
+              "type": "string"
+            }
+          },
+          "scopes": [
+            "https://www.googleapis.com/auth/cloud-platform",
+            "https://www.googleapis.com/auth/servicecontrol"
+          ],
+          "flatPath": "v1/services/{serviceName}:releaseQuota",
+          "path": "v1/services/{serviceName}:releaseQuota",
+          "id": "servicecontrol.services.releaseQuota"
+        },
+        "endReconciliation": {
+          "flatPath": "v1/services/{serviceName}:endReconciliation",
+          "id": "servicecontrol.services.endReconciliation",
+          "path": "v1/services/{serviceName}:endReconciliation",
+          "description": "Signals the quota controller that service ends the ongoing usage\nreconciliation.\n\nThis method requires the `servicemanagement.services.quota`\npermission on the specified service. For more information, see\n[Google Cloud IAM](https://cloud.google.com/iam).",
+          "request": {
+            "$ref": "EndReconciliationRequest"
+          },
+          "httpMethod": "POST",
+          "parameterOrder": [
+            "serviceName"
+          ],
+          "response": {
+            "$ref": "EndReconciliationResponse"
+          },
+          "scopes": [
+            "https://www.googleapis.com/auth/cloud-platform",
+            "https://www.googleapis.com/auth/servicecontrol"
+          ],
+          "parameters": {
+            "serviceName": {
+              "description": "Name of the service as specified in the service configuration. For example,\n`\"pubsub.googleapis.com\"`.\n\nSee google.api.Service for the definition of a service name.",
+              "required": true,
+              "type": "string",
+              "location": "path"
+            }
+          }
+        }
+      }
+    }
+  },
+  "parameters": {
+    "upload_protocol": {
+      "location": "query",
+      "description": "Upload protocol for media (e.g. \"raw\", \"multipart\").",
+      "type": "string"
+    },
+    "prettyPrint": {
+      "description": "Returns response with indentations and line breaks.",
+      "type": "boolean",
+      "default": "true",
+      "location": "query"
+    },
+    "uploadType": {
+      "location": "query",
+      "description": "Legacy upload protocol for media (e.g. \"media\", \"multipart\").",
+      "type": "string"
+    },
+    "fields": {
+      "type": "string",
+      "location": "query",
+      "description": "Selector specifying which fields to include in a partial response."
+    },
+    "$.xgafv": {
+      "enumDescriptions": [
+        "v1 error format",
+        "v2 error format"
+      ],
+      "location": "query",
+      "enum": [
+        "1",
+        "2"
+      ],
+      "description": "V1 error format.",
+      "type": "string"
+    },
+    "callback": {
+      "description": "JSONP",
+      "type": "string",
+      "location": "query"
+    },
+    "alt": {
+      "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",
+      "description": "Data format for response.",
+      "default": "json"
+    },
+    "access_token": {
+      "location": "query",
+      "description": "OAuth access token.",
+      "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"
+    },
+    "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"
+    },
+    "pp": {
+      "location": "query",
+      "description": "Pretty-print response.",
+      "type": "boolean",
+      "default": "true"
+    },
+    "oauth_token": {
+      "description": "OAuth 2.0 token for the current user.",
+      "type": "string",
+      "location": "query"
+    },
+    "bearer_token": {
+      "location": "query",
+      "description": "OAuth bearer token.",
+      "type": "string"
+    }
+  },
+  "version": "v1",
+  "baseUrl": "https://servicecontrol.googleapis.com/",
+  "kind": "discovery#restDescription",
+  "description": "Google Service Control provides control plane functionality to managed services, such as logging, monitoring, and status checks.",
+  "servicePath": "",
+  "basePath": "",
   "documentationLink": "https://cloud.google.com/service-control/",
   "id": "servicecontrol:v1",
+  "revision": "20170319",
   "discoveryVersion": "v1",
   "version_module": "True",
   "schemas": {
-    "StartReconciliationRequest": {
+    "MetricValue": {
+      "properties": {
+        "int64Value": {
+          "description": "A signed 64-bit integer value.",
+          "format": "int64",
+          "type": "string"
+        },
+        "distributionValue": {
+          "$ref": "Distribution",
+          "description": "A distribution value."
+        },
+        "boolValue": {
+          "description": "A boolean value.",
+          "type": "boolean"
+        },
+        "endTime": {
+          "description": "The end of the time period over which this metric value's measurement\napplies.",
+          "format": "google-datetime",
+          "type": "string"
+        },
+        "startTime": {
+          "description": "The start of the time period over which this metric value's measurement\napplies. The time period has different semantics for different metric\ntypes (cumulative, delta, and gauge). See the metric definition\ndocumentation in the service configuration for details.",
+          "format": "google-datetime",
+          "type": "string"
+        },
+        "moneyValue": {
+          "description": "A money value.",
+          "$ref": "Money"
+        },
+        "stringValue": {
+          "description": "A text string value.",
+          "type": "string"
+        },
+        "labels": {
+          "additionalProperties": {
+            "type": "string"
+          },
+          "description": "The labels describing the metric value.\nSee comments on google.api.servicecontrol.v1.Operation.labels for\nthe overriding relationship.",
+          "type": "object"
+        },
+        "doubleValue": {
+          "type": "number",
+          "description": "A double precision floating point value.",
+          "format": "double"
+        }
+      },
+      "id": "MetricValue",
+      "description": "Represents a single metric value.",
+      "type": "object"
+    },
+    "EndReconciliationResponse": {
+      "properties": {
+        "quotaMetrics": {
+          "description": "Metric values as tracked by One Platform before the adjustment was made.\nThe following metrics will be included:\n\n1. Per quota metric total usage will be specified using the following gauge\nmetric:\n  \"serviceruntime.googleapis.com/allocation/consumer/quota_used_count\"\n\n2. Value for each quota limit associated with the metrics will be specified\nusing the following gauge metric:\n  \"serviceruntime.googleapis.com/quota/limit\"\n\n3. Delta value of the usage after the reconciliation for limits associated\nwith the metrics will be specified using the following metric:\n  \"serviceruntime.googleapis.com/allocation/reconciliation_delta\"\nThe delta value is defined as:\n  new_usage_from_client - existing_value_in_spanner.\nThis metric is not defined in serviceruntime.yaml or in Cloud Monarch.\nThis metric is meant for callers' use only. Since this metric is not\ndefined in the monitoring backend, reporting on this metric will result in\nan error.",
+          "type": "array",
+          "items": {
+            "$ref": "MetricValueSet"
+          }
+        },
+        "operationId": {
+          "description": "The same operation_id value used in the EndReconciliationRequest. Used for\nlogging and diagnostics purposes.",
+          "type": "string"
+        },
+        "reconciliationErrors": {
+          "description": "Indicates the decision of the reconciliation end.",
+          "type": "array",
+          "items": {
+            "$ref": "QuotaError"
+          }
+        },
+        "serviceConfigId": {
+          "description": "ID of the actual config used to process the request.",
+          "type": "string"
+        }
+      },
+      "id": "EndReconciliationResponse",
+      "type": "object"
+    },
+    "Money": {
+      "description": "Represents an amount of money with its currency type.",
       "type": "object",
       "properties": {
-        "reconciliationOperation": {
-          "$ref": "QuotaOperation",
-          "description": "Operation that describes the quota reconciliation."
+        "nanos": {
+          "description": "Number of nano (10^-9) units of the amount.\nThe value must be between -999,999,999 and +999,999,999 inclusive.\nIf `units` is positive, `nanos` must be positive or zero.\nIf `units` is zero, `nanos` can be positive, zero, or negative.\nIf `units` is negative, `nanos` must be negative or zero.\nFor 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.\nFor example if `currencyCode` is `\"USD\"`, then 1 unit is one US dollar.",
+          "format": "int64",
+          "type": "string"
+        },
+        "currencyCode": {
+          "description": "The 3-letter currency code defined in ISO 4217.",
+          "type": "string"
+        }
+      },
+      "id": "Money"
+    },
+    "Distribution": {
+      "properties": {
+        "count": {
+          "description": "The total number of samples in the distribution. Must be \u003e= 0.",
+          "format": "int64",
+          "type": "string"
+        },
+        "mean": {
+          "type": "number",
+          "description": "The arithmetic mean of the samples in the distribution. If `count` is\nzero then this field must be zero.",
+          "format": "double"
+        },
+        "bucketCounts": {
+          "description": "The number of samples in each histogram bucket. `bucket_counts` are\noptional. If present, they must sum to the `count` value.\n\nThe buckets are defined below in `bucket_option`. There are N buckets.\n`bucket_counts[0]` is the number of samples in the underflow bucket.\n`bucket_counts[1]` to `bucket_counts[N-1]` are the numbers of samples\nin each of the finite buckets. And `bucket_counts[N] is the number\nof samples in the overflow bucket. See the comments of `bucket_option`\nbelow for more details.\n\nAny suffix of trailing zeros may be omitted.",
+          "type": "array",
+          "items": {
+            "format": "int64",
+            "type": "string"
+          }
+        },
+        "explicitBuckets": {
+          "$ref": "ExplicitBuckets",
+          "description": "Buckets with arbitrary user-provided width."
+        },
+        "maximum": {
+          "description": "The maximum of the population of values. Ignored if `count` is zero.",
+          "format": "double",
+          "type": "number"
+        },
+        "sumOfSquaredDeviation": {
+          "type": "number",
+          "description": "The sum of squared deviations from the mean:\n  Sum[i=1..count]((x_i - mean)^2)\nwhere each x_i is a sample values. If `count` is zero then this field\nmust be zero, otherwise validation of the request fails.",
+          "format": "double"
+        },
+        "exponentialBuckets": {
+          "$ref": "ExponentialBuckets",
+          "description": "Buckets with exponentially growing width."
+        },
+        "linearBuckets": {
+          "$ref": "LinearBuckets",
+          "description": "Buckets with constant width."
+        },
+        "minimum": {
+          "description": "The minimum of the population of values. Ignored if `count` is zero.",
+          "format": "double",
+          "type": "number"
+        }
+      },
+      "id": "Distribution",
+      "description": "Distribution represents a frequency distribution of double-valued sample\npoints. It contains the size of the population of sample points plus\nadditional optional information:\n\n  - the arithmetic mean of the samples\n  - the minimum and maximum of the samples\n  - the sum-squared-deviation of the samples, used to compute variance\n  - a histogram of the values of the sample points",
+      "type": "object"
+    },
+    "ExplicitBuckets": {
+      "properties": {
+        "bounds": {
+          "type": "array",
+          "items": {
+            "format": "double",
+            "type": "number"
+          },
+          "description": "'bound' is a list of strictly increasing boundaries between\nbuckets. Note that a list of length N-1 defines N buckets because\nof fenceposting. See comments on `bucket_options` for details.\n\nThe i'th finite bucket covers the interval\n  [bound[i-1], bound[i])\nwhere i ranges from 1 to bound_size() - 1. Note that there are no\nfinite buckets at all if 'bound' only contains a single element; in\nthat special case the single bound defines the boundary between the\nunderflow and overflow buckets.\n\nbucket number                   lower bound    upper bound\n i == 0 (underflow)              -inf           bound[i]\n 0 \u003c i \u003c bound_size()            bound[i-1]     bound[i]\n i == bound_size() (overflow)    bound[i-1]     +inf"
+        }
+      },
+      "id": "ExplicitBuckets",
+      "description": "Describing buckets with arbitrary user-provided width.",
+      "type": "object"
+    },
+    "ExponentialBuckets": {
+      "description": "Describing buckets with exponentially growing width.",
+      "type": "object",
+      "properties": {
+        "growthFactor": {
+          "description": "The i'th exponential bucket covers the interval\n  [scale * growth_factor^(i-1), scale * growth_factor^i)\nwhere i ranges from 1 to num_finite_buckets inclusive.\nMust be larger than 1.0.",
+          "format": "double",
+          "type": "number"
+        },
+        "scale": {
+          "description": "The i'th exponential bucket covers the interval\n  [scale * growth_factor^(i-1), scale * growth_factor^i)\nwhere i ranges from 1 to num_finite_buckets inclusive.\nMust be \u003e 0.",
+          "format": "double",
+          "type": "number"
+        },
+        "numFiniteBuckets": {
+          "description": "The number of finite buckets. With the underflow and overflow buckets,\nthe total number of buckets is `num_finite_buckets` + 2.\nSee comments on `bucket_options` for details.",
+          "format": "int32",
+          "type": "integer"
+        }
+      },
+      "id": "ExponentialBuckets"
+    },
+    "AuthorizationInfo": {
+      "description": "Authorization information for the operation.",
+      "type": "object",
+      "properties": {
+        "resource": {
+          "description": "The resource being accessed, as a REST-style string. For example:\n\n    bigquery.googlapis.com/projects/PROJECTID/datasets/DATASETID",
+          "type": "string"
+        },
+        "granted": {
+          "description": "Whether or not authorization for `resource` and `permission`\nwas granted.",
+          "type": "boolean"
+        },
+        "permission": {
+          "description": "The required IAM permission.",
+          "type": "string"
+        }
+      },
+      "id": "AuthorizationInfo"
+    },
+    "StartReconciliationResponse": {
+      "type": "object",
+      "properties": {
+        "quotaMetrics": {
+          "type": "array",
+          "items": {
+            "$ref": "MetricValueSet"
+          },
+          "description": "Metric values as tracked by One Platform before the start of\nreconciliation. The following metrics will be included:\n\n1. Per quota metric total usage will be specified using the following gauge\nmetric:\n  \"serviceruntime.googleapis.com/allocation/consumer/quota_used_count\"\n\n2. Value for each quota limit associated with the metrics will be specified\nusing the following gauge metric:\n  \"serviceruntime.googleapis.com/quota/limit\""
+        },
+        "operationId": {
+          "description": "The same operation_id value used in the StartReconciliationRequest. Used\nfor logging and diagnostics purposes.",
+          "type": "string"
+        },
+        "reconciliationErrors": {
+          "description": "Indicates the decision of the reconciliation start.",
+          "type": "array",
+          "items": {
+            "$ref": "QuotaError"
+          }
+        },
+        "serviceConfigId": {
+          "description": "ID of the actual config used to process the request.",
+          "type": "string"
+        }
+      },
+      "id": "StartReconciliationResponse"
+    },
+    "QuotaProperties": {
+      "type": "object",
+      "properties": {
+        "limitByIds": {
+          "additionalProperties": {
+            "type": "string"
+          },
+          "description": "LimitType IDs that should be used for checking quota. Key in this map\nshould be a valid LimitType string, and the value is the ID to be used. For\nexample, an entry \u003cUSER, 123\u003e will cause all user quota limits to use 123\nas the user ID. See google/api/quota.proto for the definition of LimitType.\nCLIENT_PROJECT: Not supported.\nUSER: Value of this entry will be used for enforcing user-level quota\n      limits. If none specified, caller IP passed in the\n      servicecontrol.googleapis.com/caller_ip label will be used instead.\n      If the server cannot resolve a value for this LimitType, an error\n      will be thrown. No validation will be performed on this ID.\nDeprecated: use servicecontrol.googleapis.com/user label to send user ID.",
+          "type": "object"
+        },
+        "quotaMode": {
+          "enumDescriptions": [
+            "Decreases available quota by the cost specified for the operation.\nIf cost is higher than available quota, operation fails and returns\nerror.",
+            "Decreases available quota by the cost specified for the operation.\nIf cost is higher than available quota, operation does not fail and\navailable quota goes down to zero but it returns error.",
+            "Does not change any available quota. Only checks if there is enough\nquota.\nNo lock is placed on the checked tokens neither.",
+            "Increases available quota by the operation cost specified for the\noperation."
+          ],
+          "enum": [
+            "ACQUIRE",
+            "ACQUIRE_BEST_EFFORT",
+            "CHECK",
+            "RELEASE"
+          ],
+          "description": "Quota mode for this operation.",
+          "type": "string"
+        }
+      },
+      "id": "QuotaProperties",
+      "description": "Represents the properties needed for quota operations."
+    },
+    "LinearBuckets": {
+      "description": "Describing buckets with constant width.",
+      "type": "object",
+      "properties": {
+        "offset": {
+          "type": "number",
+          "description": "The i'th linear bucket covers the interval\n  [offset + (i-1) * width, offset + i * width)\nwhere i ranges from 1 to num_finite_buckets, inclusive.",
+          "format": "double"
+        },
+        "numFiniteBuckets": {
+          "description": "The number of finite buckets. With the underflow and overflow buckets,\nthe total number of buckets is `num_finite_buckets` + 2.\nSee comments on `bucket_options` for details.",
+          "format": "int32",
+          "type": "integer"
+        },
+        "width": {
+          "description": "The i'th linear bucket covers the interval\n  [offset + (i-1) * width, offset + i * width)\nwhere i ranges from 1 to num_finite_buckets, inclusive.\nMust be strictly positive.",
+          "format": "double",
+          "type": "number"
+        }
+      },
+      "id": "LinearBuckets"
+    },
+    "AuthenticationInfo": {
+      "description": "Authentication information for the operation.",
+      "type": "object",
+      "properties": {
+        "principalEmail": {
+          "type": "string",
+          "description": "The email address of the authenticated user making the request."
+        },
+        "authoritySelector": {
+          "description": "The authority selector specified by the requestor, if any.\nIt is not guaranteed that the principal was allowed to use this authority.",
+          "type": "string"
+        }
+      },
+      "id": "AuthenticationInfo"
+    },
+    "AllocateQuotaResponse": {
+      "description": "Response message for the AllocateQuota method.",
+      "type": "object",
+      "properties": {
+        "serviceConfigId": {
+          "description": "ID of the actual config used to process the request.",
+          "type": "string"
+        },
+        "allocateErrors": {
+          "description": "Indicates the decision of the allocate.",
+          "type": "array",
+          "items": {
+            "$ref": "QuotaError"
+          }
+        },
+        "quotaMetrics": {
+          "description": "Quota metrics to indicate the result of allocation. Depending on the\nrequest, one or more of the following metrics will be included:\n\n1. For rate quota, per quota group or per quota metric incremental usage\nwill be specified using the following delta metric:\n  \"serviceruntime.googleapis.com/api/consumer/quota_used_count\"\n\n2. For allocation quota, per quota metric total usage will be specified\nusing the following gauge metric:\n  \"serviceruntime.googleapis.com/allocation/consumer/quota_used_count\"\n\n3. For both rate quota and allocation quota, the quota limit reached\ncondition will be specified using the following boolean metric:\n  \"serviceruntime.googleapis.com/quota/exceeded\"\n\n4. For allocation quota, value for each quota limit associated with\nthe metrics will be specified using the following gauge metric:\n  \"serviceruntime.googleapis.com/quota/limit\"",
+          "type": "array",
+          "items": {
+            "$ref": "MetricValueSet"
+          }
+        },
+        "operationId": {
+          "description": "The same operation_id value used in the AllocateQuotaRequest. Used for\nlogging and diagnostics purposes.",
+          "type": "string"
+        }
+      },
+      "id": "AllocateQuotaResponse"
+    },
+    "ReleaseQuotaRequest": {
+      "description": "Request message for the ReleaseQuota method.",
+      "type": "object",
+      "properties": {
         "serviceConfigId": {
           "description": "Specifies which version of service configuration should be used to process\nthe request. If unspecified or no matching version can be found, the latest\none will be used.",
           "type": "string"
+        },
+        "releaseOperation": {
+          "$ref": "QuotaOperation",
+          "description": "Operation that describes the quota release."
+        }
+      },
+      "id": "ReleaseQuotaRequest"
+    },
+    "QuotaError": {
+      "id": "QuotaError",
+      "type": "object",
+      "properties": {
+        "subject": {
+          "description": "Subject to whom this error applies. See the specific enum for more details\non this field. For example, \"clientip:\u003cip address of client\u003e\" or\n\"project:\u003cGoogle developer project id\u003e\".",
+          "type": "string"
+        },
+        "description": {
+          "description": "Free-form text that provides details on the cause of the error.",
+          "type": "string"
+        },
+        "code": {
+          "description": "Error code.",
+          "type": "string",
+          "enumDescriptions": [
+            "This is never used.",
+            "Quota allocation failed.\nSame as google.rpc.Code.RESOURCE_EXHAUSTED.",
+            "Consumer project has been suspended.",
+            "Consumer has not enabled the service.",
+            "Consumer cannot access the service because billing is disabled.",
+            "Consumer's project has been marked as deleted (soft deletion).",
+            "Consumer's project number or ID does not represent a valid project.",
+            "IP address of the consumer is invalid for the specific consumer\nproject.",
+            "Referer address of the consumer request is invalid for the specific\nconsumer project.",
+            "Client application of the consumer request is invalid for the\nspecific consumer project.",
+            "Specified API key is invalid.",
+            "Specified API Key has expired.",
+            "Consumer's spatula header is invalid.",
+            "The consumer's LOAS role is invalid.",
+            "The consumer's LOAS role has no associated project.",
+            "The backend server for looking up project id/number is unavailable.",
+            "The backend server for checking service status is unavailable.",
+            "The backend server for checking billing status is unavailable.",
+            "The backend server for checking quota limits is unavailable."
+          ],
+          "enum": [
+            "UNSPECIFIED",
+            "RESOURCE_EXHAUSTED",
+            "PROJECT_SUSPENDED",
+            "SERVICE_NOT_ENABLED",
+            "BILLING_NOT_ACTIVE",
+            "PROJECT_DELETED",
+            "PROJECT_INVALID",
+            "IP_ADDRESS_BLOCKED",
+            "REFERER_BLOCKED",
+            "CLIENT_APP_BLOCKED",
+            "API_KEY_INVALID",
+            "API_KEY_EXPIRED",
+            "SPATULA_HEADER_INVALID",
+            "LOAS_ROLE_INVALID",
+            "NO_LOAS_PROJECT",
+            "PROJECT_STATUS_UNAVAILABLE",
+            "SERVICE_STATUS_UNAVAILABLE",
+            "BILLING_STATUS_UNAVAILABLE",
+            "QUOTA_SYSTEM_UNAVAILABLE"
+          ]
+        }
+      }
+    },
+    "RequestMetadata": {
+      "description": "Metadata about the request.",
+      "type": "object",
+      "properties": {
+        "callerIp": {
+          "type": "string",
+          "description": "The IP address of the caller."
+        },
+        "callerSuppliedUserAgent": {
+          "description": "The user agent of the caller.\nThis information is not authenticated and should be treated accordingly.\nFor example:\n\n+   `google-api-python-client/1.4.0`:\n    The request was made by the Google API client for Python.\n+   `Cloud SDK Command Line Tool apitools-client/1.0 gcloud/0.9.62`:\n    The request was made by the Google Cloud SDK CLI (gcloud).\n+   `AppEngine-Google; (+http://code.google.com/appengine; appid: s~my-project`:\n    The request was made from the `my-project` App Engine app.",
+          "type": "string"
+        }
+      },
+      "id": "RequestMetadata"
+    },
+    "CheckInfo": {
+      "type": "object",
+      "properties": {
+        "unusedArguments": {
+          "type": "array",
+          "items": {
+            "type": "string"
+          },
+          "description": "A list of fields and label keys that are ignored by the server.\nThe client doesn't need to send them for following requests to improve\nperformance and allow better aggregation."
+        }
+      },
+      "id": "CheckInfo"
+    },
+    "ReleaseQuotaResponse": {
+      "description": "Response message for the ReleaseQuota method.",
+      "type": "object",
+      "properties": {
+        "operationId": {
+          "description": "The same operation_id value used in the ReleaseQuotaRequest. Used for\nlogging and diagnostics purposes.",
+          "type": "string"
+        },
+        "serviceConfigId": {
+          "description": "ID of the actual config used to process the request.",
+          "type": "string"
+        },
+        "releaseErrors": {
+          "description": "Indicates the decision of the release.",
+          "type": "array",
+          "items": {
+            "$ref": "QuotaError"
+          }
+        },
+        "quotaMetrics": {
+          "description": "Quota metrics to indicate the result of release. Depending on the\nrequest, one or more of the following metrics will be included:\n\n1. For rate quota, per quota group or per quota metric released amount\nwill be specified using the following delta metric:\n  \"serviceruntime.googleapis.com/api/consumer/quota_refund_count\"\n\n2. For allocation quota, per quota metric total usage will be specified\nusing the following gauge metric:\n  \"serviceruntime.googleapis.com/allocation/consumer/quota_used_count\"\n\n3. For allocation quota, value for each quota limit associated with\nthe metrics will be specified using the following gauge metric:\n  \"serviceruntime.googleapis.com/quota/limit\"",
+          "type": "array",
+          "items": {
+            "$ref": "MetricValueSet"
+          }
+        }
+      },
+      "id": "ReleaseQuotaResponse"
+    },
+    "AllocateQuotaRequest": {
+      "type": "object",
+      "properties": {
+        "serviceConfigId": {
+          "description": "Specifies which version of service configuration should be used to process\nthe request. If unspecified or no matching version can be found, the latest\none will be used.",
+          "type": "string"
+        },
+        "allocateOperation": {
+          "$ref": "QuotaOperation",
+          "description": "Operation that describes the quota allocation."
+        },
+        "allocationMode": {
+          "enumDescriptions": [
+            "",
+            "Allocates quota for the amount specified in the service configuration or\nspecified using the quota_metrics. If the amount is higher than the\navailable quota, allocation error will be returned and no quota will be\nallocated.",
+            "Allocates quota for the amount specified in the service configuration or\nspecified using the quota_metrics. If the amount is higher than the\navailable quota, request does not fail but all available quota will be\nallocated.",
+            "Only checks if there is enough quota available and does not change the\navailable quota. No lock is placed on the available quota either."
+          ],
+          "enum": [
+            "UNSPECIFIED",
+            "NORMAL",
+            "BEST_EFFORT",
+            "CHECK_ONLY"
+          ],
+          "description": "Allocation mode for this operation.\nDeprecated: use QuotaMode inside the QuotaOperation.",
+          "type": "string"
+        }
+      },
+      "id": "AllocateQuotaRequest",
+      "description": "Request message for the AllocateQuota method."
+    },
+    "MetricValueSet": {
+      "id": "MetricValueSet",
+      "description": "Represents a set of metric values in the same metric.\nEach metric value in the set should have a unique combination of start time,\nend time, and label values.",
+      "type": "object",
+      "properties": {
+        "metricName": {
+          "description": "The metric name defined in the service configuration.",
+          "type": "string"
+        },
+        "metricValues": {
+          "description": "The values in this metric.",
+          "type": "array",
+          "items": {
+            "$ref": "MetricValue"
+          }
+        }
+      }
+    },
+    "ReportError": {
+      "description": "Represents the processing error of one `Operation` in the request.",
+      "type": "object",
+      "properties": {
+        "status": {
+          "$ref": "Status",
+          "description": "Details of the error when processing the `Operation`."
+        },
+        "operationId": {
+          "description": "The Operation.operation_id value from the request.",
+          "type": "string"
+        }
+      },
+      "id": "ReportError"
+    },
+    "StartReconciliationRequest": {
+      "type": "object",
+      "properties": {
+        "serviceConfigId": {
+          "description": "Specifies which version of service configuration should be used to process\nthe request. If unspecified or no matching version can be found, the latest\none will be used.",
+          "type": "string"
+        },
+        "reconciliationOperation": {
+          "$ref": "QuotaOperation",
+          "description": "Operation that describes the quota reconciliation."
         }
       },
       "id": "StartReconciliationRequest"
@@ -24,6 +825,40 @@
       "type": "object",
       "properties": {
         "code": {
+          "enumDescriptions": [
+            "This is never used in `CheckResponse`.",
+            "The consumer's project id was not found.\nSame as google.rpc.Code.NOT_FOUND.",
+            "The consumer doesn't have access to the specified resource.\nSame as google.rpc.Code.PERMISSION_DENIED.",
+            "Quota check failed. Same as google.rpc.Code.RESOURCE_EXHAUSTED.",
+            "Budget check failed.",
+            "The consumer's request has been flagged as a DoS attack.",
+            "The consumer's request should be rejected in order to protect the service\nfrom being overloaded.",
+            "The consumer has been flagged as an abuser.",
+            "The consumer hasn't activated the service.",
+            "The consumer cannot access the service due to visibility configuration.",
+            "The consumer cannot access the service because billing is disabled.",
+            "The consumer's project has been marked as deleted (soft deletion).",
+            "The consumer's project number or id does not represent a valid project.",
+            "The IP address of the consumer is invalid for the specific consumer\nproject.",
+            "The referer address of the consumer request is invalid for the specific\nconsumer project.",
+            "The client application of the consumer request is invalid for the\nspecific consumer project.",
+            "The API targeted by this request is invalid for the specified consumer\nproject.",
+            "The consumer's API key is invalid.",
+            "The consumer's API Key has expired.",
+            "The consumer's API Key was not found in config record.",
+            "The consumer's spatula header is invalid.",
+            "The consumer's LOAS role is invalid.",
+            "The consumer's LOAS role has no associated project.",
+            "The consumer's LOAS project is not `ACTIVE` in LoquatV2.",
+            "Request is not allowed as per security policies defined in Org Policy.",
+            "The backend server for looking up project id/number is unavailable.",
+            "The backend server for checking service status is unavailable.",
+            "The backend server for checking billing status is unavailable.",
+            "The backend server for checking quota limits is unavailable.",
+            "The Spanner for looking up LOAS project is unavailable.",
+            "Cloud Resource Manager backend server is unavailable.",
+            "Backend server for evaluating security policy is unavailable."
+          ],
           "enum": [
             "ERROR_CODE_UNSPECIFIED",
             "NOT_FOUND",
@@ -59,41 +894,7 @@
             "SECURITY_POLICY_BACKEND_UNAVAILABLE"
           ],
           "description": "The error code.",
-          "type": "string",
-          "enumDescriptions": [
-            "This is never used in `CheckResponse`.",
-            "The consumer's project id was not found.\nSame as google.rpc.Code.NOT_FOUND.",
-            "The consumer doesn't have access to the specified resource.\nSame as google.rpc.Code.PERMISSION_DENIED.",
-            "Quota check failed. Same as google.rpc.Code.RESOURCE_EXHAUSTED.",
-            "Budget check failed.",
-            "The consumer's request has been flagged as a DoS attack.",
-            "The consumer's request should be rejected in order to protect the service\nfrom being overloaded.",
-            "The consumer has been flagged as an abuser.",
-            "The consumer hasn't activated the service.",
-            "The consumer cannot access the service due to visibility configuration.",
-            "The consumer cannot access the service because billing is disabled.",
-            "The consumer's project has been marked as deleted (soft deletion).",
-            "The consumer's project number or id does not represent a valid project.",
-            "The IP address of the consumer is invalid for the specific consumer\nproject.",
-            "The referer address of the consumer request is invalid for the specific\nconsumer project.",
-            "The client application of the consumer request is invalid for the\nspecific consumer project.",
-            "The API targeted by this request is invalid for the specified consumer\nproject.",
-            "The consumer's API key is invalid.",
-            "The consumer's API Key has expired.",
-            "The consumer's API Key was not found in config record.",
-            "The consumer's spatula header is invalid.",
-            "The consumer's LOAS role is invalid.",
-            "The consumer's LOAS role has no associated project.",
-            "The consumer's LOAS project is not `ACTIVE` in LoquatV2.",
-            "Request is not allowed as per security policies defined in Org Policy.",
-            "The backend server for looking up project id/number is unavailable.",
-            "The backend server for checking service status is unavailable.",
-            "The backend server for checking billing status is unavailable.",
-            "The backend server for checking quota limits is unavailable.",
-            "The Spanner for looking up LOAS project is unavailable.",
-            "Cloud Resource Manager backend server is unavailable.",
-            "Backend server for evaluating security policy is unavailable."
-          ]
+          "type": "string"
         },
         "detail": {
           "description": "Free-form text providing details on the error cause of the error.",
@@ -103,6 +904,7 @@
       "id": "CheckError"
     },
     "QuotaInfo": {
+      "id": "QuotaInfo",
       "description": "Contains the quota information for a quota check response.",
       "type": "object",
       "properties": {
@@ -122,24 +924,24 @@
           "type": "object"
         },
         "quotaMetrics": {
-          "description": "Quota metrics to indicate the usage. Depending on the check request, one or\nmore of the following metrics will be included:\n\n1. For rate quota, per quota group or per quota metric incremental usage\nwill be specified using the following delta metric:\n  \"serviceruntime.googleapis.com/api/consumer/quota_used_count\"\n\n2. For allocation quota, per quota metric total usage will be specified\nusing the following gauge metric:\n  \"serviceruntime.googleapis.com/allocation/consumer/quota_used_count\"\n\n3. For both rate quota and allocation quota, the quota limit reached\ncondition will be specified using the following boolean metric:\n  \"serviceruntime.googleapis.com/quota/exceeded\"",
           "type": "array",
           "items": {
             "$ref": "MetricValueSet"
-          }
+          },
+          "description": "Quota metrics to indicate the usage. Depending on the check request, one or\nmore of the following metrics will be included:\n\n1. For rate quota, per quota group or per quota metric incremental usage\nwill be specified using the following delta metric:\n  \"serviceruntime.googleapis.com/api/consumer/quota_used_count\"\n\n2. For allocation quota, per quota metric total usage will be specified\nusing the following gauge metric:\n  \"serviceruntime.googleapis.com/allocation/consumer/quota_used_count\"\n\n3. For both rate quota and allocation quota, the quota limit reached\ncondition will be specified using the following boolean metric:\n  \"serviceruntime.googleapis.com/quota/exceeded\""
         }
-      },
-      "id": "QuotaInfo"
+      }
     },
     "CheckRequest": {
+      "type": "object",
       "properties": {
         "skipActivationCheck": {
           "description": "Indicates if service activation check should be skipped for this request.\nDefault behavior is to perform the check and apply relevant quota.",
           "type": "boolean"
         },
         "operation": {
-          "$ref": "Operation",
-          "description": "The operation to be checked."
+          "description": "The operation to be checked.",
+          "$ref": "Operation"
         },
         "requestProjectSettings": {
           "description": "Requests the project settings to be returned as part of the check response.",
@@ -151,40 +953,12 @@
         }
       },
       "id": "CheckRequest",
-      "description": "Request message for the Check method.",
-      "type": "object"
+      "description": "Request message for the Check method."
     },
     "QuotaOperation": {
+      "description": "Represents information regarding a quota operation.",
       "type": "object",
       "properties": {
-        "consumerId": {
-          "description": "Identity of the consumer for whom this quota operation is being performed.\n\nThis can be in one of the following formats:\n  project:\u003cproject_id\u003e,\n  project_number:\u003cproject_number\u003e,\n  api_key:\u003capi_key\u003e.",
-          "type": "string"
-        },
-        "operationId": {
-          "description": "Identity of the operation. This must be unique within the scope of the\nservice that generated the operation. If the service calls AllocateQuota\nand ReleaseQuota on the same operation, the two calls should carry the\nsame ID.\n\nUUID version 4 is recommended, though not required. In scenarios where an\noperation is computed from existing information and an idempotent id is\ndesirable for deduplication purpose, UUID version 5 is recommended. See\nRFC 4122 for details.",
-          "type": "string"
-        },
-        "quotaMode": {
-          "type": "string",
-          "enumDescriptions": [
-            "",
-            "For AllocateQuota request, allocates quota for the amount specified in\nthe service configuration or specified using the quota metrics. If the\namount is higher than the available quota, allocation error will be\nreturned and no quota will be allocated.\nFor ReleaseQuota request, this mode is supported only for precise quota\nlimits. In this case, this operation releases quota for the amount\nspecified in the service configuration or specified using the quota\nmetrics. If the release can make available quota negative, release error\nwill be returned and no quota will be released.",
-            "For AllocateQuota request, this mode is supported only for imprecise\nquota limits. In this case, the operation allocates quota for the amount\nspecified in the service configuration or specified using the quota\nmetrics. If the amount is higher than the available quota, request does\nnot fail but all available quota will be allocated.\nFor ReleaseQuota request, this mode is supported for both precise quota\nlimits and imprecise quota limits. In this case, this operation releases\nquota for the amount specified in the service configuration or specified\nusing the quota metrics. If the release can make available quota\nnegative, request does not fail but only the available quota will be\nreleased. After the ReleaseQuota request completes, the available quota\nwill be 0, and never goes to negative.",
-            "For AllocateQuota request, only checks if there is enough quota\navailable and does not change the available quota. No lock is placed on\nthe available quota either. Not supported for ReleaseQuota request."
-          ],
-          "enum": [
-            "UNSPECIFIED",
-            "NORMAL",
-            "BEST_EFFORT",
-            "CHECK_ONLY"
-          ],
-          "description": "Quota mode for this operation."
-        },
-        "methodName": {
-          "description": "Fully qualified name of the API method for which this quota operation is\nrequested. This name is used for matching quota rules or metric rules and\nbilling status rules defined in service configuration. This field is not\nrequired if the quota operation is performed on non-API resources.\n\nExample of an RPC method name:\n    google.example.library.v1.LibraryService.CreateShelf",
-          "type": "string"
-        },
         "quotaMetrics": {
           "description": "Represents information about this operation. Each MetricValueSet\ncorresponds to a metric defined in the service configuration.\nThe data type used in the MetricValueSet must agree with\nthe data type specified in the metric definition.\n\nWithin a single operation, it is not allowed to have more than one\nMetricValue instances that have the same metric names and identical\nlabel value combinations. If a request has such duplicated MetricValue\ninstances, the entire request is rejected with\nan invalid argument error.",
           "type": "array",
@@ -198,17 +972,44 @@
           },
           "description": "Labels describing the operation.",
           "type": "object"
+        },
+        "consumerId": {
+          "description": "Identity of the consumer for whom this quota operation is being performed.\n\nThis can be in one of the following formats:\n  project:\u003cproject_id\u003e,\n  project_number:\u003cproject_number\u003e,\n  api_key:\u003capi_key\u003e.",
+          "type": "string"
+        },
+        "operationId": {
+          "description": "Identity of the operation. This must be unique within the scope of the\nservice that generated the operation. If the service calls AllocateQuota\nand ReleaseQuota on the same operation, the two calls should carry the\nsame ID.\n\nUUID version 4 is recommended, though not required. In scenarios where an\noperation is computed from existing information and an idempotent id is\ndesirable for deduplication purpose, UUID version 5 is recommended. See\nRFC 4122 for details.",
+          "type": "string"
+        },
+        "methodName": {
+          "description": "Fully qualified name of the API method for which this quota operation is\nrequested. This name is used for matching quota rules or metric rules and\nbilling status rules defined in service configuration. This field is not\nrequired if the quota operation is performed on non-API resources.\n\nExample of an RPC method name:\n    google.example.library.v1.LibraryService.CreateShelf",
+          "type": "string"
+        },
+        "quotaMode": {
+          "enum": [
+            "UNSPECIFIED",
+            "NORMAL",
+            "BEST_EFFORT",
+            "CHECK_ONLY"
+          ],
+          "description": "Quota mode for this operation.",
+          "type": "string",
+          "enumDescriptions": [
+            "",
+            "For AllocateQuota request, allocates quota for the amount specified in\nthe service configuration or specified using the quota metrics. If the\namount is higher than the available quota, allocation error will be\nreturned and no quota will be allocated.\nFor ReleaseQuota request, this mode is supported only for precise quota\nlimits. In this case, this operation releases quota for the amount\nspecified in the service configuration or specified using the quota\nmetrics. If the release can make used quota negative, release error\nwill be returned and no quota will be released.",
+            "For AllocateQuota request, this mode is supported only for imprecise\nquota limits. In this case, the operation allocates quota for the amount\nspecified in the service configuration or specified using the quota\nmetrics. If the amount is higher than the available quota, request does\nnot fail but all available quota will be allocated.\nFor ReleaseQuota request, this mode is supported for both precise quota\nlimits and imprecise quota limits. In this case, this operation releases\nquota for the amount specified in the service configuration or specified\nusing the quota metrics. If the release can make used quota\nnegative, request does not fail but only the used quota will be\nreleased. After the ReleaseQuota request completes, the used quota\nwill be 0, and never goes to negative.",
+            "For AllocateQuota request, only checks if there is enough quota\navailable and does not change the available quota. No lock is placed on\nthe available quota either. Not supported for ReleaseQuota request."
+          ]
         }
       },
-      "id": "QuotaOperation",
-      "description": "Represents information regarding a quota operation."
+      "id": "QuotaOperation"
     },
     "EndReconciliationRequest": {
       "type": "object",
       "properties": {
         "reconciliationOperation": {
-          "description": "Operation that describes the quota reconciliation.",
-          "$ref": "QuotaOperation"
+          "$ref": "QuotaOperation",
+          "description": "Operation that describes the quota reconciliation."
         },
         "serviceConfigId": {
           "description": "Specifies which version of service configuration should be used to process\nthe request. If unspecified or no matching version can be found, the latest\none will be used.",
@@ -220,20 +1021,18 @@
     "ReportInfo": {
       "type": "object",
       "properties": {
-        "quotaInfo": {
-          "description": "Quota usage info when processing the `Operation`.",
-          "$ref": "QuotaInfo"
-        },
         "operationId": {
           "description": "The Operation.operation_id value from the request.",
           "type": "string"
+        },
+        "quotaInfo": {
+          "$ref": "QuotaInfo",
+          "description": "Quota usage info when processing the `Operation`."
         }
       },
       "id": "ReportInfo"
     },
     "ReportResponse": {
-      "id": "ReportResponse",
-      "description": "Response message for the Report method.",
       "type": "object",
       "properties": {
         "reportInfos": {
@@ -254,17 +1053,30 @@
             "$ref": "ReportError"
           }
         }
-      }
+      },
+      "id": "ReportResponse",
+      "description": "Response message for the Report method."
     },
     "Operation": {
       "type": "object",
       "properties": {
+        "operationName": {
+          "description": "Fully qualified name of the operation. Reserved for future use.",
+          "type": "string"
+        },
+        "endTime": {
+          "description": "End time of the operation.\nRequired when the operation is used in ServiceController.Report,\nbut optional when the operation is used in ServiceController.Check.",
+          "format": "google-datetime",
+          "type": "string"
+        },
         "startTime": {
           "description": "Required. Start time of the operation.",
           "format": "google-datetime",
           "type": "string"
         },
         "importance": {
+          "description": "DO NOT USE. This is an experimental field.",
+          "type": "string",
           "enumDescriptions": [
             "The API implementation may cache and aggregate the data.\nThe data may be lost when rare and unexpected system failures occur.",
             "The API implementation doesn't cache and aggregate the data.\nIf the method returns successfully, it's guaranteed that the data has\nbeen persisted in durable storage.",
@@ -274,9 +1086,7 @@
             "LOW",
             "HIGH",
             "DEBUG"
-          ],
-          "description": "DO NOT USE. This is an experimental field.",
-          "type": "string"
+          ]
         },
         "resourceContainer": {
           "description": "The resource name of the parent of a resource in the resource hierarchy.\n\nThis can be in one of the following formats:\n    - “projects/\u003cproject-id or project-number\u003e”\n    - “folders/\u003cfolder-id\u003e”\n    - “organizations/\u003corganization-id\u003e”",
@@ -290,11 +1100,11 @@
           "type": "object"
         },
         "logEntries": {
+          "description": "Represents information to be logged.",
           "type": "array",
           "items": {
             "$ref": "LogEntry"
-          },
-          "description": "Represents information to be logged."
+          }
         },
         "userLabels": {
           "additionalProperties": {
@@ -311,8 +1121,8 @@
           }
         },
         "quotaProperties": {
-          "description": "Represents the properties needed for quota check. Applicable only if this\noperation is for a quota check request.",
-          "$ref": "QuotaProperties"
+          "$ref": "QuotaProperties",
+          "description": "Represents the properties needed for quota check. Applicable only if this\noperation is for a quota check request."
         },
         "consumerId": {
           "description": "Identity of the consumer who is using the service.\nThis field should be filled in for the operations initiated by a\nconsumer, but not for service-initiated operations that are\nnot related to a specific consumer.\n\nThis can be in one of the following formats:\n  project:\u003cproject_id\u003e,\n  project_number:\u003cproject_number\u003e,\n  api_key:\u003capi_key\u003e.",
@@ -321,22 +1131,12 @@
         "operationId": {
           "description": "Identity of the operation. This must be unique within the scope of the\nservice that generated the operation. If the service calls\nCheck() and Report() on the same operation, the two calls should carry\nthe same id.\n\nUUID version 4 is recommended, though not required.\nIn scenarios where an operation is computed from existing information\nand an idempotent id is desirable for deduplication purpose, UUID version 5\nis recommended. See RFC 4122 for details.",
           "type": "string"
-        },
-        "operationName": {
-          "description": "Fully qualified name of the operation. Reserved for future use.",
-          "type": "string"
-        },
-        "endTime": {
-          "description": "End time of the operation.\nRequired when the operation is used in ServiceController.Report,\nbut optional when the operation is used in ServiceController.Check.",
-          "format": "google-datetime",
-          "type": "string"
         }
       },
       "id": "Operation",
       "description": "Represents information regarding an operation."
     },
     "CheckResponse": {
-      "id": "CheckResponse",
       "description": "Response message for the Check method.",
       "type": "object",
       "properties": {
@@ -345,52 +1145,26 @@
           "type": "string"
         },
         "checkErrors": {
-          "description": "Indicate the decision of the check.\n\nIf no check errors are present, the service should process the operation.\nOtherwise the service should use the list of errors to determine the\nappropriate action.",
           "type": "array",
           "items": {
             "$ref": "CheckError"
-          }
+          },
+          "description": "Indicate the decision of the check.\n\nIf no check errors are present, the service should process the operation.\nOtherwise the service should use the list of errors to determine the\nappropriate action."
         },
         "checkInfo": {
-          "$ref": "CheckInfo",
-          "description": "Feedback data returned from the server during processing a Check request."
+          "description": "Feedback data returned from the server during processing a Check request.",
+          "$ref": "CheckInfo"
         },
         "quotaInfo": {
-          "description": "Quota information for the check request associated with this response.\n",
-          "$ref": "QuotaInfo"
+          "$ref": "QuotaInfo",
+          "description": "Quota information for the check request associated with this response.\n"
         },
         "serviceConfigId": {
           "description": "The actual config id used to process the request.",
           "type": "string"
         }
-      }
-    },
-    "Status": {
-      "description": "The `Status` type defines a logical error model that is suitable for different\nprogramming environments, including REST APIs and RPC APIs. It is used by\n[gRPC](https://github.com/grpc). The error model is designed to be:\n\n- Simple to use and understand for most users\n- Flexible enough to meet unexpected needs\n\n# Overview\n\nThe `Status` message contains three pieces of data: error code, error message,\nand error details. The error code should be an enum value of\ngoogle.rpc.Code, but it may accept additional error codes if needed.  The\nerror message should be a developer-facing English message that helps\ndevelopers *understand* and *resolve* the error. If a localized user-facing\nerror message is needed, put the localized message in the error details or\nlocalize it in the client. The optional error details may contain arbitrary\ninformation about the error. There is a predefined set of error detail types\nin the package `google.rpc` which can be used for common error conditions.\n\n# Language mapping\n\nThe `Status` message is the logical representation of the error model, but it\nis not necessarily the actual wire format. When the `Status` message is\nexposed in different client libraries and different wire protocols, it can be\nmapped differently. For example, it will likely be mapped to some exceptions\nin Java, but more likely mapped to some error codes in C.\n\n# Other uses\n\nThe error model and the `Status` message can be used in a variety of\nenvironments, either with or without APIs, to provide a\nconsistent developer experience across different environments.\n\nExample uses of this error model include:\n\n- Partial errors. If a service needs to return partial errors to the client,\n    it may embed the `Status` in the normal response to indicate the partial\n    errors.\n\n- Workflow errors. A typical workflow has multiple steps. Each step may\n    have a `Status` message for error reporting purpose.\n\n- Batch operations. If a client uses batch request and batch response, the\n    `Status` message should be used directly inside batch response, one for\n    each error sub-response.\n\n- Asynchronous operations. If an API call embeds asynchronous operation\n    results in its response, the status of those operations should be\n    represented directly using the `Status` message.\n\n- Logging. If some API errors are stored in logs, the message `Status` could\n    be used directly after any stripping needed for security/privacy reasons.",
-      "type": "object",
-      "properties": {
-        "details": {
-          "type": "array",
-          "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 will be a\ncommon 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": {
-          "description": "A developer-facing error message, which should be in English. Any\nuser-facing error message should be localized and sent in the\ngoogle.rpc.Status.details field, or localized by the client.",
-          "type": "string"
-        }
       },
-      "id": "Status"
+      "id": "CheckResponse"
     },
     "ReportRequest": {
       "properties": {
@@ -410,91 +1184,50 @@
       "description": "Request message for the Report method.",
       "type": "object"
     },
-    "AuditLog": {
-      "description": "Common audit log format for Google Cloud Platform API operations.\n\n",
+    "Status": {
+      "description": "The `Status` type defines a logical error model that is suitable for different\nprogramming environments, including REST APIs and RPC APIs. It is used by\n[gRPC](https://github.com/grpc). The error model is designed to be:\n\n- Simple to use and understand for most users\n- Flexible enough to meet unexpected needs\n\n# Overview\n\nThe `Status` message contains three pieces of data: error code, error message,\nand error details. The error code should be an enum value of\ngoogle.rpc.Code, but it may accept additional error codes if needed.  The\nerror message should be a developer-facing English message that helps\ndevelopers *understand* and *resolve* the error. If a localized user-facing\nerror message is needed, put the localized message in the error details or\nlocalize it in the client. The optional error details may contain arbitrary\ninformation about the error. There is a predefined set of error detail types\nin the package `google.rpc` which can be used for common error conditions.\n\n# Language mapping\n\nThe `Status` message is the logical representation of the error model, but it\nis not necessarily the actual wire format. When the `Status` message is\nexposed in different client libraries and different wire protocols, it can be\nmapped differently. For example, it will likely be mapped to some exceptions\nin Java, but more likely mapped to some error codes in C.\n\n# Other uses\n\nThe error model and the `Status` message can be used in a variety of\nenvironments, either with or without APIs, to provide a\nconsistent developer experience across different environments.\n\nExample uses of this error model include:\n\n- Partial errors. If a service needs to return partial errors to the client,\n    it may embed the `Status` in the normal response to indicate the partial\n    errors.\n\n- Workflow errors. A typical workflow has multiple steps. Each step may\n    have a `Status` message for error reporting purpose.\n\n- Batch operations. If a client uses batch request and batch response, the\n    `Status` message should be used directly inside batch response, one for\n    each error sub-response.\n\n- Asynchronous operations. If an API call embeds asynchronous operation\n    results in its response, the status of those operations should be\n    represented directly using the `Status` message.\n\n- Logging. If some API errors are stored in logs, the message `Status` could\n    be used directly after any stripping needed for security/privacy reasons.",
       "type": "object",
       "properties": {
-        "requestMetadata": {
-          "description": "Metadata about the operation.",
-          "$ref": "RequestMetadata"
+        "code": {
+          "description": "The status code, which should be an enum value of google.rpc.Code.",
+          "format": "int32",
+          "type": "integer"
         },
-        "serviceData": {
-          "description": "Other service-specific data about the request, response, and other\nactivities.",
-          "type": "object",
-          "additionalProperties": {
-            "description": "Properties of the object. Contains field @type with type URL.",
-            "type": "any"
-          }
-        },
-        "numResponseItems": {
-          "description": "The number of items returned from a List or Query API method,\nif applicable.",
-          "format": "int64",
+        "message": {
+          "description": "A developer-facing error message, which should be in English. Any\nuser-facing error message should be localized and sent in the\ngoogle.rpc.Status.details field, or localized by the client.",
           "type": "string"
         },
-        "authenticationInfo": {
-          "$ref": "AuthenticationInfo",
-          "description": "Authentication information."
-        },
-        "status": {
-          "$ref": "Status",
-          "description": "The status of the overall operation."
-        },
-        "serviceName": {
-          "type": "string",
-          "description": "The name of the API service performing the operation. For example,\n`\"datastore.googleapis.com\"`."
-        },
-        "response": {
-          "additionalProperties": {
-            "description": "Properties of the object.",
-            "type": "any"
-          },
-          "description": "The operation response. This may not include all response elements,\nsuch as those that are too large, privacy-sensitive, or duplicated\nelsewhere in the log record.\nIt should never include user-generated data, such as file contents.\nWhen the JSON object represented here has a proto equivalent, the proto\nname will be indicated in the `@type` property.",
-          "type": "object"
-        },
-        "methodName": {
-          "description": "The name of the service method or operation.\nFor API calls, this should be the name of the API method.\nFor example,\n\n    \"google.datastore.v1.Datastore.RunQuery\"\n    \"google.logging.v1.LoggingService.DeleteLog\"",
-          "type": "string"
-        },
-        "resourceName": {
-          "description": "The resource or collection that is the target of the operation.\nThe name is a scheme-less URI, not including the API service name.\nFor example:\n\n    \"shelves/SHELF_ID/books\"\n    \"shelves/SHELF_ID/books/BOOK_ID\"",
-          "type": "string"
-        },
-        "authorizationInfo": {
+        "details": {
+          "description": "A list of messages that carry the error details.  There will be a\ncommon set of message types for APIs to use.",
           "type": "array",
           "items": {
-            "$ref": "AuthorizationInfo"
-          },
-          "description": "Authorization information. If there are multiple\nresources or permissions involved, then there is\none AuthorizationInfo element for each {resource, permission} tuple."
-        },
-        "request": {
-          "description": "The operation request. This may not include all request parameters,\nsuch as those that are too large, privacy-sensitive, or duplicated\nelsewhere in the log record.\nIt should never include user-generated data, such as file contents.\nWhen the JSON object represented here has a proto equivalent, the proto\nname will be indicated in the `@type` property.",
-          "type": "object",
-          "additionalProperties": {
-            "description": "Properties of the object.",
-            "type": "any"
+            "additionalProperties": {
+              "description": "Properties of the object. Contains field @type with type URL.",
+              "type": "any"
+            },
+            "type": "object"
           }
         }
       },
-      "id": "AuditLog"
+      "id": "Status"
     },
     "LogEntry": {
-      "type": "object",
       "properties": {
         "insertId": {
-          "type": "string",
-          "description": "A unique ID for the log entry used for deduplication. If omitted,\nthe implementation will generate one based on operation_id."
+          "description": "A unique ID for the log entry used for deduplication. If omitted,\nthe implementation will generate one based on operation_id.",
+          "type": "string"
         },
         "name": {
           "description": "Required. The log to which this log entry belongs. Examples: `\"syslog\"`,\n`\"book_log\"`.",
           "type": "string"
         },
         "structPayload": {
-          "type": "object",
           "additionalProperties": {
             "description": "Properties of the object.",
             "type": "any"
           },
-          "description": "The log entry payload, represented as a structure that\nis expressed as a JSON object."
+          "description": "The log entry payload, represented as a structure that\nis expressed as a JSON object.",
+          "type": "object"
         },
         "textPayload": {
           "description": "The log entry payload, represented as a Unicode string (UTF-8).",
@@ -548,826 +1281,93 @@
         }
       },
       "id": "LogEntry",
-      "description": "An individual log entry."
-    },
-    "MetricValue": {
-      "description": "Represents a single metric value.",
-      "type": "object",
-      "properties": {
-        "endTime": {
-          "description": "The end of the time period over which this metric value's measurement\napplies.",
-          "format": "google-datetime",
-          "type": "string"
-        },
-        "startTime": {
-          "description": "The start of the time period over which this metric value's measurement\napplies. The time period has different semantics for different metric\ntypes (cumulative, delta, and gauge). See the metric definition\ndocumentation in the service configuration for details.",
-          "format": "google-datetime",
-          "type": "string"
-        },
-        "moneyValue": {
-          "description": "A money value.",
-          "$ref": "Money"
-        },
-        "stringValue": {
-          "description": "A text string value.",
-          "type": "string"
-        },
-        "labels": {
-          "type": "object",
-          "additionalProperties": {
-            "type": "string"
-          },
-          "description": "The labels describing the metric value.\nSee comments on google.api.servicecontrol.v1.Operation.labels for\nthe overriding relationship."
-        },
-        "doubleValue": {
-          "description": "A double precision floating point value.",
-          "format": "double",
-          "type": "number"
-        },
-        "int64Value": {
-          "description": "A signed 64-bit integer value.",
-          "format": "int64",
-          "type": "string"
-        },
-        "distributionValue": {
-          "description": "A distribution value.",
-          "$ref": "Distribution"
-        },
-        "boolValue": {
-          "description": "A boolean value.",
-          "type": "boolean"
-        }
-      },
-      "id": "MetricValue"
-    },
-    "EndReconciliationResponse": {
-      "type": "object",
-      "properties": {
-        "serviceConfigId": {
-          "description": "ID of the actual config used to process the request.",
-          "type": "string"
-        },
-        "quotaMetrics": {
-          "description": "Metric values as tracked by One Platform before the adjustment was made.",
-          "type": "array",
-          "items": {
-            "$ref": "MetricValueSet"
-          }
-        },
-        "operationId": {
-          "description": "The same operation_id value used in the EndReconciliationRequest. Used for\nlogging and diagnostics purposes.",
-          "type": "string"
-        },
-        "reconciliationErrors": {
-          "description": "Indicates the decision of the reconciliation end.",
-          "type": "array",
-          "items": {
-            "$ref": "QuotaError"
-          }
-        }
-      },
-      "id": "EndReconciliationResponse"
-    },
-    "Money": {
-      "properties": {
-        "nanos": {
-          "description": "Number of nano (10^-9) units of the amount.\nThe value must be between -999,999,999 and +999,999,999 inclusive.\nIf `units` is positive, `nanos` must be positive or zero.\nIf `units` is zero, `nanos` can be positive, zero, or negative.\nIf `units` is negative, `nanos` must be negative or zero.\nFor 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.\nFor example if `currencyCode` is `\"USD\"`, then 1 unit is one US dollar.",
-          "format": "int64",
-          "type": "string"
-        },
-        "currencyCode": {
-          "description": "The 3-letter currency code defined in ISO 4217.",
-          "type": "string"
-        }
-      },
-      "id": "Money",
-      "description": "Represents an amount of money with its currency type.",
+      "description": "An individual log entry.",
       "type": "object"
     },
-    "Distribution": {
+    "AuditLog": {
+      "description": "Common audit log format for Google Cloud Platform API operations.\n\n",
       "type": "object",
       "properties": {
-        "mean": {
-          "description": "The arithmetic mean of the samples in the distribution. If `count` is\nzero then this field must be zero.",
-          "format": "double",
-          "type": "number"
-        },
-        "count": {
-          "description": "The total number of samples in the distribution. Must be \u003e= 0.",
-          "format": "int64",
+        "methodName": {
+          "description": "The name of the service method or operation.\nFor API calls, this should be the name of the API method.\nFor example,\n\n    \"google.datastore.v1.Datastore.RunQuery\"\n    \"google.logging.v1.LoggingService.DeleteLog\"",
           "type": "string"
         },
-        "bucketCounts": {
-          "description": "The number of samples in each histogram bucket. `bucket_counts` are\noptional. If present, they must sum to the `count` value.\n\nThe buckets are defined below in `bucket_option`. There are N buckets.\n`bucket_counts[0]` is the number of samples in the underflow bucket.\n`bucket_counts[1]` to `bucket_counts[N-1]` are the numbers of samples\nin each of the finite buckets. And `bucket_counts[N] is the number\nof samples in the overflow bucket. See the comments of `bucket_option`\nbelow for more details.\n\nAny suffix of trailing zeros may be omitted.",
+        "resourceName": {
+          "description": "The resource or collection that is the target of the operation.\nThe name is a scheme-less URI, not including the API service name.\nFor example:\n\n    \"shelves/SHELF_ID/books\"\n    \"shelves/SHELF_ID/books/BOOK_ID\"",
+          "type": "string"
+        },
+        "authorizationInfo": {
           "type": "array",
           "items": {
-            "format": "int64",
-            "type": "string"
-          }
-        },
-        "explicitBuckets": {
-          "description": "Buckets with arbitrary user-provided width.",
-          "$ref": "ExplicitBuckets"
-        },
-        "maximum": {
-          "description": "The maximum of the population of values. Ignored if `count` is zero.",
-          "format": "double",
-          "type": "number"
-        },
-        "sumOfSquaredDeviation": {
-          "description": "The sum of squared deviations from the mean:\n  Sum[i=1..count]((x_i - mean)^2)\nwhere each x_i is a sample values. If `count` is zero then this field\nmust be zero, otherwise validation of the request fails.",
-          "format": "double",
-          "type": "number"
-        },
-        "exponentialBuckets": {
-          "description": "Buckets with exponentially growing width.",
-          "$ref": "ExponentialBuckets"
-        },
-        "minimum": {
-          "type": "number",
-          "description": "The minimum of the population of values. Ignored if `count` is zero.",
-          "format": "double"
-        },
-        "linearBuckets": {
-          "description": "Buckets with constant width.",
-          "$ref": "LinearBuckets"
-        }
-      },
-      "id": "Distribution",
-      "description": "Distribution represents a frequency distribution of double-valued sample\npoints. It contains the size of the population of sample points plus\nadditional optional information:\n\n  - the arithmetic mean of the samples\n  - the minimum and maximum of the samples\n  - the sum-squared-deviation of the samples, used to compute variance\n  - a histogram of the values of the sample points"
-    },
-    "ExplicitBuckets": {
-      "description": "Describing buckets with arbitrary user-provided width.",
-      "type": "object",
-      "properties": {
-        "bounds": {
-          "type": "array",
-          "items": {
-            "format": "double",
-            "type": "number"
+            "$ref": "AuthorizationInfo"
           },
-          "description": "'bound' is a list of strictly increasing boundaries between\nbuckets. Note that a list of length N-1 defines N buckets because\nof fenceposting. See comments on `bucket_options` for details.\n\nThe i'th finite bucket covers the interval\n  [bound[i-1], bound[i])\nwhere i ranges from 1 to bound_size() - 1. Note that there are no\nfinite buckets at all if 'bound' only contains a single element; in\nthat special case the single bound defines the boundary between the\nunderflow and overflow buckets.\n\nbucket number                   lower bound    upper bound\n i == 0 (underflow)              -inf           bound[i]\n 0 \u003c i \u003c bound_size()            bound[i-1]     bound[i]\n i == bound_size() (overflow)    bound[i-1]     +inf"
-        }
-      },
-      "id": "ExplicitBuckets"
-    },
-    "ExponentialBuckets": {
-      "description": "Describing buckets with exponentially growing width.",
-      "type": "object",
-      "properties": {
-        "numFiniteBuckets": {
-          "description": "The number of finite buckets. With the underflow and overflow buckets,\nthe total number of buckets is `num_finite_buckets` + 2.\nSee comments on `bucket_options` for details.",
-          "format": "int32",
-          "type": "integer"
+          "description": "Authorization information. If there are multiple\nresources or permissions involved, then there is\none AuthorizationInfo element for each {resource, permission} tuple."
         },
-        "growthFactor": {
-          "type": "number",
-          "description": "The i'th exponential bucket covers the interval\n  [scale * growth_factor^(i-1), scale * growth_factor^i)\nwhere i ranges from 1 to num_finite_buckets inclusive.\nMust be larger than 1.0.",
-          "format": "double"
-        },
-        "scale": {
-          "description": "The i'th exponential bucket covers the interval\n  [scale * growth_factor^(i-1), scale * growth_factor^i)\nwhere i ranges from 1 to num_finite_buckets inclusive.\nMust be \u003e 0.",
-          "format": "double",
-          "type": "number"
-        }
-      },
-      "id": "ExponentialBuckets"
-    },
-    "AuthorizationInfo": {
-      "description": "Authorization information for the operation.",
-      "type": "object",
-      "properties": {
-        "resource": {
-          "description": "The resource being accessed, as a REST-style string. For example:\n\n    bigquery.googlapis.com/projects/PROJECTID/datasets/DATASETID",
-          "type": "string"
-        },
-        "granted": {
-          "description": "Whether or not authorization for `resource` and `permission`\nwas granted.",
-          "type": "boolean"
-        },
-        "permission": {
-          "description": "The required IAM permission.",
-          "type": "string"
-        }
-      },
-      "id": "AuthorizationInfo"
-    },
-    "StartReconciliationResponse": {
-      "id": "StartReconciliationResponse",
-      "type": "object",
-      "properties": {
-        "quotaMetrics": {
-          "description": "Metric values as tracked by One Platform before the start of\nreconciliation.",
-          "type": "array",
-          "items": {
-            "$ref": "MetricValueSet"
-          }
-        },
-        "operationId": {
-          "type": "string",
-          "description": "The same operation_id value used in the StartReconciliationRequest. Used\nfor logging and diagnostics purposes."
-        },
-        "reconciliationErrors": {
-          "description": "Indicates the decision of the reconciliation start.",
-          "type": "array",
-          "items": {
-            "$ref": "QuotaError"
-          }
-        },
-        "serviceConfigId": {
-          "description": "ID of the actual config used to process the request.",
-          "type": "string"
-        }
-      }
-    },
-    "QuotaProperties": {
-      "description": "Represents the properties needed for quota operations.\n\nUse the metric_value_sets field in Operation message to provide cost\noverride with metric_name in \u003cservice_name\u003e/quota/\u003cquota_group_name\u003e/cost\nformat. Overrides for unmatched quota groups will be ignored.\nCosts are expected to be \u003e= 0. Cost 0 will cause no quota check,\nbut still traffic restrictions will be enforced.",
-      "type": "object",
-      "properties": {
-        "quotaMode": {
-          "enum": [
-            "ACQUIRE",
-            "ACQUIRE_BEST_EFFORT",
-            "CHECK",
-            "RELEASE"
-          ],
-          "description": "Quota mode for this operation.",
-          "type": "string",
-          "enumDescriptions": [
-            "Decreases available quota by the cost specified for the operation.\nIf cost is higher than available quota, operation fails and returns\nerror.",
-            "Decreases available quota by the cost specified for the operation.\nIf cost is higher than available quota, operation does not fail and\navailable quota goes down to zero but it returns error.",
-            "Does not change any available quota. Only checks if there is enough\nquota.\nNo lock is placed on the checked tokens neither.",
-            "Increases available quota by the operation cost specified for the\noperation."
-          ]
-        },
-        "limitByIds": {
+        "request": {
           "additionalProperties": {
-            "type": "string"
+            "description": "Properties of the object.",
+            "type": "any"
           },
-          "description": "LimitType IDs that should be used for checking quota. Key in this map\nshould be a valid LimitType string, and the value is the ID to be used. For\nexample, an entry \u003cUSER, 123\u003e will cause all user quota limits to use 123\nas the user ID. See google/api/quota.proto for the definition of LimitType.\nCLIENT_PROJECT: Not supported.\nUSER: Value of this entry will be used for enforcing user-level quota\n      limits. If none specified, caller IP passed in the\n      servicecontrol.googleapis.com/caller_ip label will be used instead.\n      If the server cannot resolve a value for this LimitType, an error\n      will be thrown. No validation will be performed on this ID.\nDeprecated: use servicecontrol.googleapis.com/user label to send user ID.",
+          "description": "The operation request. This may not include all request parameters,\nsuch as those that are too large, privacy-sensitive, or duplicated\nelsewhere in the log record.\nIt should never include user-generated data, such as file contents.\nWhen the JSON object represented here has a proto equivalent, the proto\nname will be indicated in the `@type` property.",
           "type": "object"
-        }
-      },
-      "id": "QuotaProperties"
-    },
-    "LinearBuckets": {
-      "id": "LinearBuckets",
-      "description": "Describing buckets with constant width.",
-      "type": "object",
-      "properties": {
-        "offset": {
-          "description": "The i'th linear bucket covers the interval\n  [offset + (i-1) * width, offset + i * width)\nwhere i ranges from 1 to num_finite_buckets, inclusive.",
-          "format": "double",
-          "type": "number"
         },
-        "numFiniteBuckets": {
-          "description": "The number of finite buckets. With the underflow and overflow buckets,\nthe total number of buckets is `num_finite_buckets` + 2.\nSee comments on `bucket_options` for details.",
-          "format": "int32",
-          "type": "integer"
-        },
-        "width": {
-          "description": "The i'th linear bucket covers the interval\n  [offset + (i-1) * width, offset + i * width)\nwhere i ranges from 1 to num_finite_buckets, inclusive.\nMust be strictly positive.",
-          "format": "double",
-          "type": "number"
-        }
-      }
-    },
-    "AuthenticationInfo": {
-      "description": "Authentication information for the operation.",
-      "type": "object",
-      "properties": {
-        "principalEmail": {
-          "description": "The email address of the authenticated user making the request.",
-          "type": "string"
-        },
-        "authoritySelector": {
-          "description": "The authority selector specified by the requestor, if any.\nIt is not guaranteed that the principal was allowed to use this authority.",
-          "type": "string"
-        }
-      },
-      "id": "AuthenticationInfo"
-    },
-    "AllocateQuotaResponse": {
-      "description": "Response message for the AllocateQuota method.",
-      "type": "object",
-      "properties": {
-        "allocateErrors": {
-          "description": "Indicates the decision of the allocate.",
-          "type": "array",
-          "items": {
-            "$ref": "QuotaError"
-          }
-        },
-        "quotaMetrics": {
-          "description": "Quota metrics to indicate the result of allocation. Depending on the\nrequest, one or more of the following metrics will be included:\n\n1. For rate quota, per quota group or per quota metric incremental usage\nwill be specified using the following delta metric:\n  \"serviceruntime.googleapis.com/api/consumer/quota_used_count\"\n\n2. For allocation quota, per quota metric total usage will be specified\nusing the following gauge metric:\n  \"serviceruntime.googleapis.com/allocation/consumer/quota_used_count\"\n\n3. For both rate quota and allocation quota, the quota limit reached\ncondition will be specified using the following boolean metric:\n  \"serviceruntime.googleapis.com/quota/exceeded\"",
-          "type": "array",
-          "items": {
-            "$ref": "MetricValueSet"
-          }
-        },
-        "operationId": {
-          "type": "string",
-          "description": "The same operation_id value used in the AllocateQuotaRequest. Used for\nlogging and diagnostics purposes."
-        },
-        "serviceConfigId": {
-          "description": "ID of the actual config used to process the request.",
-          "type": "string"
-        }
-      },
-      "id": "AllocateQuotaResponse"
-    },
-    "ReleaseQuotaRequest": {
-      "description": "Request message for the ReleaseQuota method.",
-      "type": "object",
-      "properties": {
-        "serviceConfigId": {
-          "description": "Specifies which version of service configuration should be used to process\nthe request. If unspecified or no matching version can be found, the latest\none will be used.",
-          "type": "string"
-        },
-        "releaseOperation": {
-          "$ref": "QuotaOperation",
-          "description": "Operation that describes the quota release."
-        }
-      },
-      "id": "ReleaseQuotaRequest"
-    },
-    "RequestMetadata": {
-      "id": "RequestMetadata",
-      "description": "Metadata about the request.",
-      "type": "object",
-      "properties": {
-        "callerIp": {
-          "type": "string",
-          "description": "The IP address of the caller."
-        },
-        "callerSuppliedUserAgent": {
-          "description": "The user agent of the caller.\nThis information is not authenticated and should be treated accordingly.\nFor example:\n\n+   `google-api-python-client/1.4.0`:\n    The request was made by the Google API client for Python.\n+   `Cloud SDK Command Line Tool apitools-client/1.0 gcloud/0.9.62`:\n    The request was made by the Google Cloud SDK CLI (gcloud).\n+   `AppEngine-Google; (+http://code.google.com/appengine; appid: s~my-project`:\n    The request was made from the `my-project` App Engine app.",
-          "type": "string"
-        }
-      }
-    },
-    "QuotaError": {
-      "properties": {
-        "subject": {
-          "description": "Subject to whom this error applies. See the specific enum for more details\non this field. For example, \"clientip:\u003cip address of client\u003e\" or\n\"project:\u003cGoogle developer project id\u003e\".",
-          "type": "string"
-        },
-        "description": {
-          "description": "Free-form text that provides details on the cause of the error.",
-          "type": "string"
-        },
-        "code": {
-          "description": "Error code.",
-          "type": "string",
-          "enumDescriptions": [
-            "This is never used.",
-            "Quota allocation failed.\nSame as google.rpc.Code.RESOURCE_EXHAUSTED.",
-            "Consumer project has been suspended.",
-            "Consumer has not enabled the service.",
-            "Consumer cannot access the service because billing is disabled.",
-            "Consumer's project has been marked as deleted (soft deletion).",
-            "Consumer's project number or ID does not represent a valid project.",
-            "IP address of the consumer is invalid for the specific consumer\nproject.",
-            "Referer address of the consumer request is invalid for the specific\nconsumer project.",
-            "Client application of the consumer request is invalid for the\nspecific consumer project.",
-            "Specified API key is invalid.",
-            "Specified API Key has expired.",
-            "Consumer's spatula header is invalid.",
-            "The consumer's LOAS role is invalid.",
-            "The consumer's LOAS role has no associated project.",
-            "The backend server for looking up project id/number is unavailable.",
-            "The backend server for checking service status is unavailable.",
-            "The backend server for checking billing status is unavailable.",
-            "The backend server for checking quota limits is unavailable."
-          ],
-          "enum": [
-            "UNSPECIFIED",
-            "RESOURCE_EXHAUSTED",
-            "PROJECT_SUSPENDED",
-            "SERVICE_NOT_ENABLED",
-            "BILLING_NOT_ACTIVE",
-            "PROJECT_DELETED",
-            "PROJECT_INVALID",
-            "IP_ADDRESS_BLOCKED",
-            "REFERER_BLOCKED",
-            "CLIENT_APP_BLOCKED",
-            "API_KEY_INVALID",
-            "API_KEY_EXPIRED",
-            "SPATULA_HEADER_INVALID",
-            "LOAS_ROLE_INVALID",
-            "NO_LOAS_PROJECT",
-            "PROJECT_STATUS_UNVAILABLE",
-            "SERVICE_STATUS_UNAVAILABLE",
-            "BILLING_STATUS_UNAVAILABLE",
-            "QUOTA_SYSTEM_UNAVAILABLE"
-          ]
-        }
-      },
-      "id": "QuotaError",
-      "type": "object"
-    },
-    "CheckInfo": {
-      "type": "object",
-      "properties": {
-        "unusedArguments": {
-          "type": "array",
-          "items": {
-            "type": "string"
+        "serviceData": {
+          "additionalProperties": {
+            "description": "Properties of the object. Contains field @type with type URL.",
+            "type": "any"
           },
-          "description": "A list of fields and label keys that are ignored by the server.\nThe client doesn't need to send them for following requests to improve\nperformance and allow better aggregation."
-        }
-      },
-      "id": "CheckInfo"
-    },
-    "ReleaseQuotaResponse": {
-      "description": "Response message for the ReleaseQuota method.",
-      "type": "object",
-      "properties": {
-        "serviceConfigId": {
-          "description": "ID of the actual config used to process the request.",
-          "type": "string"
+          "description": "Other service-specific data about the request, response, and other\nactivities.",
+          "type": "object"
         },
-        "releaseErrors": {
-          "type": "array",
-          "items": {
-            "$ref": "QuotaError"
-          },
-          "description": "Indicates the decision of the release."
+        "requestMetadata": {
+          "$ref": "RequestMetadata",
+          "description": "Metadata about the operation."
         },
-        "quotaMetrics": {
-          "description": "Quota metrics to indicate the result of release. Depending on the\nrequest, one or more of the following metrics will be included:\n\n1. For rate quota, per quota group or per quota metric released amount\nwill be specified using the following delta metric:\n  \"serviceruntime.googleapis.com/api/consumer/quota_refund_count\"\n\n2. For allocation quota, per quota metric total usage will be specified\nusing the following gauge metric:\n  \"serviceruntime.googleapis.com/allocation/consumer/quota_used_count\"",
-          "type": "array",
-          "items": {
-            "$ref": "MetricValueSet"
-          }
-        },
-        "operationId": {
+        "numResponseItems": {
           "type": "string",
-          "description": "The same operation_id value used in the ReleaseQuotaRequest. Used for\nlogging and diagnostics purposes."
-        }
-      },
-      "id": "ReleaseQuotaResponse"
-    },
-    "AllocateQuotaRequest": {
-      "description": "Request message for the AllocateQuota method.",
-      "type": "object",
-      "properties": {
-        "serviceConfigId": {
-          "description": "Specifies which version of service configuration should be used to process\nthe request. If unspecified or no matching version can be found, the latest\none will be used.",
-          "type": "string"
+          "description": "The number of items returned from a List or Query API method,\nif applicable.",
+          "format": "int64"
         },
-        "allocateOperation": {
-          "description": "Operation that describes the quota allocation.",
-          "$ref": "QuotaOperation"
-        },
-        "allocationMode": {
-          "enumDescriptions": [
-            "",
-            "Allocates quota for the amount specified in the service configuration or\nspecified using the quota_metrics. If the amount is higher than the\navailable quota, allocation error will be returned and no quota will be\nallocated.",
-            "Allocates quota for the amount specified in the service configuration or\nspecified using the quota_metrics. If the amount is higher than the\navailable quota, request does not fail but all available quota will be\nallocated.",
-            "Only checks if there is enough quota available and does not change the\navailable quota. No lock is placed on the available quota either."
-          ],
-          "enum": [
-            "UNSPECIFIED",
-            "NORMAL",
-            "BEST_EFFORT",
-            "CHECK_ONLY"
-          ],
-          "description": "Allocation mode for this operation.\nDeprecated: use QuotaMode inside the QuotaOperation.",
-          "type": "string"
-        }
-      },
-      "id": "AllocateQuotaRequest"
-    },
-    "MetricValueSet": {
-      "description": "Represents a set of metric values in the same metric.\nEach metric value in the set should have a unique combination of start time,\nend time, and label values.",
-      "type": "object",
-      "properties": {
-        "metricName": {
-          "description": "The metric name defined in the service configuration.",
-          "type": "string"
-        },
-        "metricValues": {
-          "description": "The values in this metric.",
-          "type": "array",
-          "items": {
-            "$ref": "MetricValue"
-          }
-        }
-      },
-      "id": "MetricValueSet"
-    },
-    "ReportError": {
-      "properties": {
-        "operationId": {
-          "description": "The Operation.operation_id value from the request.",
-          "type": "string"
+        "authenticationInfo": {
+          "$ref": "AuthenticationInfo",
+          "description": "Authentication information."
         },
         "status": {
           "$ref": "Status",
-          "description": "Details of the error when processing the `Operation`."
+          "description": "The status of the overall operation."
+        },
+        "response": {
+          "description": "The operation response. This may not include all response elements,\nsuch as those that are too large, privacy-sensitive, or duplicated\nelsewhere in the log record.\nIt should never include user-generated data, such as file contents.\nWhen the JSON object represented here has a proto equivalent, the proto\nname will be indicated in the `@type` property.",
+          "type": "object",
+          "additionalProperties": {
+            "description": "Properties of the object.",
+            "type": "any"
+          }
+        },
+        "serviceName": {
+          "description": "The name of the API service performing the operation. For example,\n`\"datastore.googleapis.com\"`.",
+          "type": "string"
         }
       },
-      "id": "ReportError",
-      "description": "Represents the processing error of one `Operation` in the request.",
-      "type": "object"
+      "id": "AuditLog"
     }
   },
-  "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"
   },
+  "protocol": "rest",
   "canonicalName": "Service Control",
   "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/servicecontrol": {
           "description": "Manage your Google Service Control data"
+        },
+        "https://www.googleapis.com/auth/cloud-platform": {
+          "description": "View and manage your data across Google Cloud Platform services"
         }
       }
     }
-  },
-  "rootUrl": "https://servicecontrol.googleapis.com/",
-  "ownerDomain": "google.com",
-  "name": "servicecontrol",
-  "batchPath": "batch",
-  "title": "Google Service Control API",
-  "ownerName": "Google",
-  "resources": {
-    "services": {
-      "methods": {
-        "startReconciliation": {
-          "httpMethod": "POST",
-          "parameterOrder": [
-            "serviceName"
-          ],
-          "response": {
-            "$ref": "StartReconciliationResponse"
-          },
-          "scopes": [
-            "https://www.googleapis.com/auth/cloud-platform",
-            "https://www.googleapis.com/auth/servicecontrol"
-          ],
-          "parameters": {
-            "serviceName": {
-              "description": "Name of the service as specified in the service configuration. For example,\n`\"pubsub.googleapis.com\"`.\n\nSee google.api.Service for the definition of a service name.",
-              "required": true,
-              "type": "string",
-              "location": "path"
-            }
-          },
-          "flatPath": "v1/services/{serviceName}:startReconciliation",
-          "id": "servicecontrol.services.startReconciliation",
-          "path": "v1/services/{serviceName}:startReconciliation",
-          "description": "Unlike rate quota, allocation quota does not get refilled periodically.\nSo, it is possible that the quota usage as seen by the service differs from\nwhat the One Platform considers the usage is. This is expected to happen\nonly rarely, but over time this can accumulate. Services can invoke\nStartReconciliation and EndReconciliation to correct this usage drift, as\ndescribed below:\n1. Service sends StartReconciliation with a timestamp in future for each\n   metric that needs to be reconciled. The timestamp being in future allows\n   to account for in-flight AllocateQuota and ReleaseQuota requests for the\n   same metric.\n2. One Platform records this timestamp and starts tracking subsequent\n   AllocateQuota and ReleaseQuota requests until EndReconciliation is\n   called.\n3. At or after the time specified in the StartReconciliation, service\n   sends EndReconciliation with the usage that needs to be reconciled to.\n4. One Platform adjusts its own record of usage for that metric to the\n   value specified in EndReconciliation by taking in to account any\n   allocation or release between StartReconciliation and EndReconciliation.\n\nSignals the quota controller that the service wants to perform a usage\nreconciliation as specified in the request.\n\nThis method requires the `servicemanagement.services.quota`\npermission on the specified service. For more information, see\n[Google Cloud IAM](https://cloud.google.com/iam).",
-          "request": {
-            "$ref": "StartReconciliationRequest"
-          }
-        },
-        "check": {
-          "description": "Checks an operation with Google Service Control to decide whether\nthe given operation should proceed. It should be called before the\noperation is executed.\n\nIf feasible, the client should cache the check results and reuse them for\n60 seconds. In case of server errors, the client can rely on the cached\nresults for longer time.\n\nNOTE: the `CheckRequest` has the size limit of 64KB.\n\nThis method requires the `servicemanagement.services.check` permission\non the specified service. For more information, see\n[Google Cloud IAM](https://cloud.google.com/iam).",
-          "request": {
-            "$ref": "CheckRequest"
-          },
-          "response": {
-            "$ref": "CheckResponse"
-          },
-          "parameterOrder": [
-            "serviceName"
-          ],
-          "httpMethod": "POST",
-          "scopes": [
-            "https://www.googleapis.com/auth/cloud-platform",
-            "https://www.googleapis.com/auth/servicecontrol"
-          ],
-          "parameters": {
-            "serviceName": {
-              "location": "path",
-              "description": "The service name as specified in its service configuration. For example,\n`\"pubsub.googleapis.com\"`.\n\nSee google.api.Service for the definition of a service name.",
-              "required": true,
-              "type": "string"
-            }
-          },
-          "flatPath": "v1/services/{serviceName}:check",
-          "path": "v1/services/{serviceName}:check",
-          "id": "servicecontrol.services.check"
-        },
-        "releaseQuota": {
-          "httpMethod": "POST",
-          "parameterOrder": [
-            "serviceName"
-          ],
-          "response": {
-            "$ref": "ReleaseQuotaResponse"
-          },
-          "scopes": [
-            "https://www.googleapis.com/auth/cloud-platform",
-            "https://www.googleapis.com/auth/servicecontrol"
-          ],
-          "parameters": {
-            "serviceName": {
-              "description": "Name of the service as specified in the service configuration. For example,\n`\"pubsub.googleapis.com\"`.\n\nSee google.api.Service for the definition of a service name.",
-              "required": true,
-              "type": "string",
-              "location": "path"
-            }
-          },
-          "flatPath": "v1/services/{serviceName}:releaseQuota",
-          "id": "servicecontrol.services.releaseQuota",
-          "path": "v1/services/{serviceName}:releaseQuota",
-          "description": "Releases previously allocated quota done through AllocateQuota method.\n\nThis method requires the `servicemanagement.services.quota`\npermission on the specified service. For more information, see\n[Google Cloud IAM](https://cloud.google.com/iam).",
-          "request": {
-            "$ref": "ReleaseQuotaRequest"
-          }
-        },
-        "endReconciliation": {
-          "id": "servicecontrol.services.endReconciliation",
-          "path": "v1/services/{serviceName}:endReconciliation",
-          "description": "Signals the quota controller that service ends the ongoing usage\nreconciliation.\n\nThis method requires the `servicemanagement.services.quota`\npermission on the specified service. For more information, see\n[Google Cloud IAM](https://cloud.google.com/iam).",
-          "request": {
-            "$ref": "EndReconciliationRequest"
-          },
-          "httpMethod": "POST",
-          "parameterOrder": [
-            "serviceName"
-          ],
-          "response": {
-            "$ref": "EndReconciliationResponse"
-          },
-          "scopes": [
-            "https://www.googleapis.com/auth/cloud-platform",
-            "https://www.googleapis.com/auth/servicecontrol"
-          ],
-          "parameters": {
-            "serviceName": {
-              "description": "Name of the service as specified in the service configuration. For example,\n`\"pubsub.googleapis.com\"`.\n\nSee google.api.Service for the definition of a service name.",
-              "required": true,
-              "type": "string",
-              "location": "path"
-            }
-          },
-          "flatPath": "v1/services/{serviceName}:endReconciliation"
-        },
-        "report": {
-          "response": {
-            "$ref": "ReportResponse"
-          },
-          "parameterOrder": [
-            "serviceName"
-          ],
-          "httpMethod": "POST",
-          "parameters": {
-            "serviceName": {
-              "required": true,
-              "type": "string",
-              "location": "path",
-              "description": "The service name as specified in its service configuration. For example,\n`\"pubsub.googleapis.com\"`.\n\nSee google.api.Service for the definition of a service name."
-            }
-          },
-          "scopes": [
-            "https://www.googleapis.com/auth/cloud-platform",
-            "https://www.googleapis.com/auth/servicecontrol"
-          ],
-          "flatPath": "v1/services/{serviceName}:report",
-          "path": "v1/services/{serviceName}:report",
-          "id": "servicecontrol.services.report",
-          "request": {
-            "$ref": "ReportRequest"
-          },
-          "description": "Reports operation results to Google Service Control, such as logs and\nmetrics. It should be called after an operation is completed.\n\nIf feasible, the client should aggregate reporting data for up to 5\nseconds to reduce API traffic. Limiting aggregation to 5 seconds is to\nreduce data loss during client crashes. Clients should carefully choose\nthe aggregation time window to avoid data loss risk more than 0.01%\nfor business and compliance reasons.\n\nNOTE: the `ReportRequest` has the size limit of 1MB.\n\nThis method requires the `servicemanagement.services.report` permission\non the specified service. For more information, see\n[Google Cloud IAM](https://cloud.google.com/iam)."
-        },
-        "allocateQuota": {
-          "path": "v1/services/{serviceName}:allocateQuota",
-          "id": "servicecontrol.services.allocateQuota",
-          "description": "Attempts to allocate quota for the specified consumer. It should be called\nbefore the operation is executed.\n\nThis method requires the `servicemanagement.services.quota`\npermission on the specified service. For more information, see\n[Google Cloud IAM](https://cloud.google.com/iam).",
-          "request": {
-            "$ref": "AllocateQuotaRequest"
-          },
-          "response": {
-            "$ref": "AllocateQuotaResponse"
-          },
-          "parameterOrder": [
-            "serviceName"
-          ],
-          "httpMethod": "POST",
-          "scopes": [
-            "https://www.googleapis.com/auth/cloud-platform",
-            "https://www.googleapis.com/auth/servicecontrol"
-          ],
-          "parameters": {
-            "serviceName": {
-              "required": true,
-              "type": "string",
-              "location": "path",
-              "description": "Name of the service as specified in the service configuration. For example,\n`\"pubsub.googleapis.com\"`.\n\nSee google.api.Service for the definition of a service name."
-            }
-          },
-          "flatPath": "v1/services/{serviceName}:allocateQuota"
-        }
-      }
-    }
-  },
-  "parameters": {
-    "callback": {
-      "description": "JSONP",
-      "type": "string",
-      "location": "query"
-    },
-    "$.xgafv": {
-      "enumDescriptions": [
-        "v1 error format",
-        "v2 error format"
-      ],
-      "location": "query",
-      "enum": [
-        "1",
-        "2"
-      ],
-      "description": "V1 error format.",
-      "type": "string"
-    },
-    "alt": {
-      "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",
-      "description": "Data format for response.",
-      "default": "json",
-      "enum": [
-        "json",
-        "media",
-        "proto"
-      ]
-    },
-    "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"
-    },
-    "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."
-    },
-    "pp": {
-      "location": "query",
-      "description": "Pretty-print response.",
-      "type": "boolean",
-      "default": "true"
-    },
-    "bearer_token": {
-      "location": "query",
-      "description": "OAuth bearer token.",
-      "type": "string"
-    },
-    "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"
-    },
-    "prettyPrint": {
-      "location": "query",
-      "description": "Returns response with indentations and line breaks.",
-      "type": "boolean",
-      "default": "true"
-    },
-    "fields": {
-      "location": "query",
-      "description": "Selector specifying which fields to include in a partial response.",
-      "type": "string"
-    },
-    "uploadType": {
-      "location": "query",
-      "description": "Legacy upload protocol for media (e.g. \"media\", \"multipart\").",
-      "type": "string"
-    }
-  },
-  "version": "v1",
-  "baseUrl": "https://servicecontrol.googleapis.com/",
-  "servicePath": "",
-  "description": "Google Service Control provides control plane functionality to managed services, such as logging, monitoring, and status checks.",
-  "kind": "discovery#restDescription",
-  "basePath": ""
+  }
 }
diff --git a/servicecontrol/v1/servicecontrol-gen.go b/servicecontrol/v1/servicecontrol-gen.go
index 06c16aa..e45dc3a 100644
--- a/servicecontrol/v1/servicecontrol-gen.go
+++ b/servicecontrol/v1/servicecontrol-gen.go
@@ -64,10 +64,9 @@
 }
 
 type Service struct {
-	client                    *http.Client
-	BasePath                  string // API endpoint base URL
-	UserAgent                 string // optional additional User-Agent fragment
-	GoogleClientHeaderElement string // client header fragment, for Google use only
+	client    *http.Client
+	BasePath  string // API endpoint base URL
+	UserAgent string // optional additional User-Agent fragment
 
 	Services *ServicesService
 }
@@ -79,10 +78,6 @@
 	return googleapi.UserAgent + " " + s.UserAgent
 }
 
-func (s *Service) clientHeader() string {
-	return gensupport.GoogleClientHeader("20170210", s.GoogleClientHeaderElement)
-}
-
 func NewServicesService(s *Service) *ServicesService {
 	rs := &ServicesService{s: s}
 	return rs
@@ -182,6 +177,11 @@
 	// reached
 	// condition will be specified using the following boolean metric:
 	//   "serviceruntime.googleapis.com/quota/exceeded"
+	//
+	// 4. For allocation quota, value for each quota limit associated
+	// with
+	// the metrics will be specified using the following gauge metric:
+	//   "serviceruntime.googleapis.com/quota/limit"
 	QuotaMetrics []*MetricValueSet `json:"quotaMetrics,omitempty"`
 
 	// ServiceConfigId: ID of the actual config used to process the request.
@@ -773,6 +773,33 @@
 
 	// QuotaMetrics: Metric values as tracked by One Platform before the
 	// adjustment was made.
+	// The following metrics will be included:
+	//
+	// 1. Per quota metric total usage will be specified using the following
+	// gauge
+	// metric:
+	//
+	// "serviceruntime.googleapis.com/allocation/consumer/quota_used_count"
+	//
+	//
+	// 2. Value for each quota limit associated with the metrics will be
+	// specified
+	// using the following gauge metric:
+	//   "serviceruntime.googleapis.com/quota/limit"
+	//
+	// 3. Delta value of the usage after the reconciliation for limits
+	// associated
+	// with the metrics will be specified using the following metric:
+	//   "serviceruntime.googleapis.com/allocation/reconciliation_delta"
+	// The delta value is defined as:
+	//   new_usage_from_client - existing_value_in_spanner.
+	// This metric is not defined in serviceruntime.yaml or in Cloud
+	// Monarch.
+	// This metric is meant for callers' use only. Since this metric is
+	// not
+	// defined in the monitoring backend, reporting on this metric will
+	// result in
+	// an error.
 	QuotaMetrics []*MetricValueSet `json:"quotaMetrics,omitempty"`
 
 	// ReconciliationErrors: Indicates the decision of the reconciliation
@@ -1385,7 +1412,7 @@
 	//   "LOAS_ROLE_INVALID" - The consumer's LOAS role is invalid.
 	//   "NO_LOAS_PROJECT" - The consumer's LOAS role has no associated
 	// project.
-	//   "PROJECT_STATUS_UNVAILABLE" - The backend server for looking up
+	//   "PROJECT_STATUS_UNAVAILABLE" - The backend server for looking up
 	// project id/number is unavailable.
 	//   "SERVICE_STATUS_UNAVAILABLE" - The backend server for checking
 	// service status is unavailable.
@@ -1569,7 +1596,7 @@
 	// amount
 	// specified in the service configuration or specified using the
 	// quota
-	// metrics. If the release can make available quota negative, release
+	// metrics. If the release can make used quota negative, release
 	// error
 	// will be returned and no quota will be released.
 	//   "BEST_EFFORT" - For AllocateQuota request, this mode is supported
@@ -1587,11 +1614,10 @@
 	// releases
 	// quota for the amount specified in the service configuration or
 	// specified
-	// using the quota metrics. If the release can make available
-	// quota
-	// negative, request does not fail but only the available quota will
+	// using the quota metrics. If the release can make used quota
+	// negative, request does not fail but only the used quota will
 	// be
-	// released. After the ReleaseQuota request completes, the available
+	// released. After the ReleaseQuota request completes, the used
 	// quota
 	// will be 0, and never goes to negative.
 	//   "CHECK_ONLY" - For AllocateQuota request, only checks if there is
@@ -1626,14 +1652,6 @@
 
 // QuotaProperties: Represents the properties needed for quota
 // operations.
-//
-// Use the metric_value_sets field in Operation message to provide
-// cost
-// override with metric_name in
-// <service_name>/quota/<quota_group_name>/cost
-// format. Overrides for unmatched quota groups will be ignored.
-// Costs are expected to be >= 0. Cost 0 will cause no quota check,
-// but still traffic restrictions will be enforced.
 type QuotaProperties struct {
 	// LimitByIds: LimitType IDs that should be used for checking quota. Key
 	// in this map
@@ -1759,6 +1777,12 @@
 	// using the following gauge metric:
 	//
 	// "serviceruntime.googleapis.com/allocation/consumer/quota_used_count"
+	//
+	//
+	// 3. For allocation quota, value for each quota limit associated
+	// with
+	// the metrics will be specified using the following gauge metric:
+	//   "serviceruntime.googleapis.com/quota/limit"
 	QuotaMetrics []*MetricValueSet `json:"quotaMetrics,omitempty"`
 
 	// ReleaseErrors: Indicates the decision of the release.
@@ -2062,7 +2086,19 @@
 
 	// QuotaMetrics: Metric values as tracked by One Platform before the
 	// start of
-	// reconciliation.
+	// reconciliation. The following metrics will be included:
+	//
+	// 1. Per quota metric total usage will be specified using the following
+	// gauge
+	// metric:
+	//
+	// "serviceruntime.googleapis.com/allocation/consumer/quota_used_count"
+	//
+	//
+	// 2. Value for each quota limit associated with the metrics will be
+	// specified
+	// using the following gauge metric:
+	//   "serviceruntime.googleapis.com/quota/limit"
 	QuotaMetrics []*MetricValueSet `json:"quotaMetrics,omitempty"`
 
 	// ReconciliationErrors: Indicates the decision of the reconciliation
@@ -2238,6 +2274,17 @@
 // permission on the specified service. For more information,
 // see
 // [Google Cloud IAM](https://cloud.google.com/iam).
+//
+// **NOTE:** the client code **must** fail-open if the server returns
+// one
+// of the following quota errors:
+// -   `PROJECT_STATUS_UNAVAILABLE`
+// -   `SERVICE_STATUS_UNAVAILABLE`
+// -   `BILLING_STATUS_UNAVAILABLE`
+// -   `QUOTA_SYSTEM_UNAVAILABLE`
+//
+// The server may inject above errors to prohibit any hard dependency
+// on the quota system.
 func (r *ServicesService) AllocateQuota(serviceName string, allocatequotarequest *AllocateQuotaRequest) *ServicesAllocateQuotaCall {
 	c := &ServicesAllocateQuotaCall{s: r.s, urlParams_: make(gensupport.URLParams)}
 	c.serviceName = serviceName
@@ -2276,7 +2323,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	var body io.Reader = nil
 	body, err := googleapi.WithoutDataWrapper.JSONReader(c.allocatequotarequest)
 	if err != nil {
@@ -2332,7 +2378,7 @@
 	}
 	return ret, nil
 	// {
-	//   "description": "Attempts to allocate quota for the specified consumer. It should be called\nbefore the operation is executed.\n\nThis method requires the `servicemanagement.services.quota`\npermission on the specified service. For more information, see\n[Google Cloud IAM](https://cloud.google.com/iam).",
+	//   "description": "Attempts to allocate quota for the specified consumer. It should be called\nbefore the operation is executed.\n\nThis method requires the `servicemanagement.services.quota`\npermission on the specified service. For more information, see\n[Google Cloud IAM](https://cloud.google.com/iam).\n\n**NOTE:** the client code **must** fail-open if the server returns one\nof the following quota errors:\n-   `PROJECT_STATUS_UNAVAILABLE`\n-   `SERVICE_STATUS_UNAVAILABLE`\n-   `BILLING_STATUS_UNAVAILABLE`\n-   `QUOTA_SYSTEM_UNAVAILABLE`\n\nThe server may inject above errors to prohibit any hard dependency\non the quota system.",
 	//   "flatPath": "v1/services/{serviceName}:allocateQuota",
 	//   "httpMethod": "POST",
 	//   "id": "servicecontrol.services.allocateQuota",
@@ -2429,7 +2475,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	var body io.Reader = nil
 	body, err := googleapi.WithoutDataWrapper.JSONReader(c.checkrequest)
 	if err != nil {
@@ -2573,7 +2618,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	var body io.Reader = nil
 	body, err := googleapi.WithoutDataWrapper.JSONReader(c.endreconciliationrequest)
 	if err != nil {
@@ -2678,6 +2722,17 @@
 // permission on the specified service. For more information,
 // see
 // [Google Cloud IAM](https://cloud.google.com/iam).
+//
+// **NOTE:** the client code **must** fail-open if the server returns
+// one
+// of the following quota errors:
+// -   `PROJECT_STATUS_UNAVAILABLE`
+// -   `SERVICE_STATUS_UNAVAILABLE`
+// -   `BILLING_STATUS_UNAVAILABLE`
+// -   `QUOTA_SYSTEM_UNAVAILABLE`
+//
+// The server may inject above errors to prohibit any hard dependency
+// on the quota system.
 func (r *ServicesService) ReleaseQuota(serviceName string, releasequotarequest *ReleaseQuotaRequest) *ServicesReleaseQuotaCall {
 	c := &ServicesReleaseQuotaCall{s: r.s, urlParams_: make(gensupport.URLParams)}
 	c.serviceName = serviceName
@@ -2716,7 +2771,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	var body io.Reader = nil
 	body, err := googleapi.WithoutDataWrapper.JSONReader(c.releasequotarequest)
 	if err != nil {
@@ -2772,7 +2826,7 @@
 	}
 	return ret, nil
 	// {
-	//   "description": "Releases previously allocated quota done through AllocateQuota method.\n\nThis method requires the `servicemanagement.services.quota`\npermission on the specified service. For more information, see\n[Google Cloud IAM](https://cloud.google.com/iam).",
+	//   "description": "Releases previously allocated quota done through AllocateQuota method.\n\nThis method requires the `servicemanagement.services.quota`\npermission on the specified service. For more information, see\n[Google Cloud IAM](https://cloud.google.com/iam).\n\n**NOTE:** the client code **must** fail-open if the server returns one\nof the following quota errors:\n-   `PROJECT_STATUS_UNAVAILABLE`\n-   `SERVICE_STATUS_UNAVAILABLE`\n-   `BILLING_STATUS_UNAVAILABLE`\n-   `QUOTA_SYSTEM_UNAVAILABLE`\n\nThe server may inject above errors to prohibit any hard dependency\non the quota system.",
 	//   "flatPath": "v1/services/{serviceName}:releaseQuota",
 	//   "httpMethod": "POST",
 	//   "id": "servicecontrol.services.releaseQuota",
@@ -2871,7 +2925,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	var body io.Reader = nil
 	body, err := googleapi.WithoutDataWrapper.JSONReader(c.reportrequest)
 	if err != nil {
@@ -3048,7 +3101,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	var body io.Reader = nil
 	body, err := googleapi.WithoutDataWrapper.JSONReader(c.startreconciliationrequest)
 	if err != nil {
diff --git a/servicemanagement/v1/servicemanagement-api.json b/servicemanagement/v1/servicemanagement-api.json
index 104f060..6de1855 100644
--- a/servicemanagement/v1/servicemanagement-api.json
+++ b/servicemanagement/v1/servicemanagement-api.json
@@ -1,36 +1,141 @@
 {
-  "ownerDomain": "google.com",
-  "name": "servicemanagement",
-  "batchPath": "batch",
-  "id": "servicemanagement:v1",
-  "documentationLink": "https://cloud.google.com/service-management/",
-  "revision": "20170306",
-  "title": "Google Service Management API",
-  "ownerName": "Google",
   "discoveryVersion": "v1",
+  "ownerName": "Google",
   "resources": {
-    "services": {
+    "operations": {
       "methods": {
-        "create": {
-          "description": "Creates a new managed service.\nPlease note one producer project can own no more than 20 services.\n\nOperation\u003cresponse: ManagedService\u003e",
-          "request": {
-            "$ref": "ManagedService"
+        "list": {
+          "description": "Lists service operations that match the specified filter in the request.",
+          "httpMethod": "GET",
+          "response": {
+            "$ref": "ListOperationsResponse"
           },
+          "parameterOrder": [],
+          "scopes": [
+            "https://www.googleapis.com/auth/cloud-platform",
+            "https://www.googleapis.com/auth/service.management"
+          ],
+          "parameters": {
+            "filter": {
+              "location": "query",
+              "description": "A string for filtering Operations.\n  The following filter fields are supported&#58;\n\n  * serviceName&#58; Required. Only `=` operator is allowed.\n  * startTime&#58; The time this job was started, in ISO 8601 format.\n    Allowed operators are `\u003e=`,  `\u003e`, `\u003c=`, and `\u003c`.\n  * status&#58; Can be `done`, `in_progress`, or `failed`. Allowed\n    operators are `=`, and `!=`.\n\n  Filter expression supports conjunction (AND) and disjunction (OR)\n  logical operators. However, the serviceName restriction must be at the\n  top-level and can only be combined with other restrictions via the AND\n  logical operator.\n\n  Examples&#58;\n\n  * `serviceName={some-service}.googleapis.com`\n  * `serviceName={some-service}.googleapis.com AND startTime\u003e=\"2017-02-01\"`\n  * `serviceName={some-service}.googleapis.com AND status=done`\n  * `serviceName={some-service}.googleapis.com AND (status=done OR startTime\u003e=\"2017-02-01\")`",
+              "type": "string"
+            },
+            "name": {
+              "description": "Not used.",
+              "type": "string",
+              "location": "query"
+            },
+            "pageToken": {
+              "description": "The standard list page token.",
+              "type": "string",
+              "location": "query"
+            },
+            "pageSize": {
+              "location": "query",
+              "description": "The maximum number of operations to return. If unspecified, defaults to\n50. The maximum value is 100.",
+              "format": "int32",
+              "type": "integer"
+            }
+          },
+          "flatPath": "v1/operations",
+          "id": "servicemanagement.operations.list",
+          "path": "v1/operations"
+        },
+        "get": {
+          "httpMethod": "GET",
+          "parameterOrder": [
+            "name"
+          ],
           "response": {
             "$ref": "Operation"
           },
+          "parameters": {
+            "name": {
+              "required": true,
+              "type": "string",
+              "pattern": "^operations/.+$",
+              "location": "path",
+              "description": "The name of the operation resource."
+            }
+          },
+          "scopes": [
+            "https://www.googleapis.com/auth/cloud-platform",
+            "https://www.googleapis.com/auth/service.management"
+          ],
+          "flatPath": "v1/operations/{operationsId}",
+          "id": "servicemanagement.operations.get",
+          "path": "v1/{+name}",
+          "description": "Gets the latest state of a long-running operation.  Clients can use this\nmethod to poll the operation result at intervals as recommended by the API\nservice."
+        }
+      }
+    },
+    "services": {
+      "methods": {
+        "list": {
+          "httpMethod": "GET",
           "parameterOrder": [],
-          "httpMethod": "POST",
+          "response": {
+            "$ref": "ListServicesResponse"
+          },
+          "parameters": {
+            "pageToken": {
+              "type": "string",
+              "location": "query",
+              "description": "Token identifying which result to start with; returned by a previous list\ncall."
+            },
+            "pageSize": {
+              "description": "Requested size of the next page of data.",
+              "format": "int32",
+              "type": "integer",
+              "location": "query"
+            },
+            "producerProjectId": {
+              "description": "Include services produced by the specified project.",
+              "type": "string",
+              "location": "query"
+            },
+            "consumerId": {
+              "description": "Include services consumed by the specified consumer.\n\nThe Google Service Management implementation accepts the following\nforms:\n- project:\u003cproject_id\u003e",
+              "type": "string",
+              "location": "query"
+            }
+          },
+          "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",
+          "id": "servicemanagement.services.list",
+          "path": "v1/services",
+          "description": "Lists managed services.\n\nReturns all public services. For authenticated users, also returns all\nservices the calling user has \"servicemanagement.services.get\" permission\nfor.\n\n**BETA:** If the caller specifies the `consumer_id`, it returns only the\nservices enabled on the consumer. The `consumer_id` must have the format\nof \"project:{PROJECT-ID}\"."
+        },
+        "create": {
           "scopes": [
             "https://www.googleapis.com/auth/cloud-platform",
             "https://www.googleapis.com/auth/service.management"
           ],
           "parameters": {},
           "flatPath": "v1/services",
+          "id": "servicemanagement.services.create",
           "path": "v1/services",
-          "id": "servicemanagement.services.create"
+          "description": "Creates a new managed service.\nPlease note one producer project can own no more than 20 services.\n\nOperation\u003cresponse: ManagedService\u003e",
+          "request": {
+            "$ref": "ManagedService"
+          },
+          "httpMethod": "POST",
+          "parameterOrder": [],
+          "response": {
+            "$ref": "Operation"
+          }
         },
         "generateConfigReport": {
+          "description": "Generates and returns a report (errors, warnings and changes from\nexisting configurations) associated with\nGenerateConfigReportRequest.new_value\n\nIf GenerateConfigReportRequest.old_value is specified,\nGenerateConfigReportRequest will contain a single ChangeReport based on the\ncomparison between GenerateConfigReportRequest.new_value and\nGenerateConfigReportRequest.old_value.\nIf GenerateConfigReportRequest.old_value is not specified, this method\nwill compare GenerateConfigReportRequest.new_value with the last pushed\nservice configuration.",
+          "request": {
+            "$ref": "GenerateConfigReportRequest"
+          },
           "response": {
             "$ref": "GenerateConfigReportResponse"
           },
@@ -43,63 +148,59 @@
           "parameters": {},
           "flatPath": "v1/services:generateConfigReport",
           "path": "v1/services:generateConfigReport",
-          "id": "servicemanagement.services.generateConfigReport",
-          "description": "Generates and returns a report (errors, warnings and changes from\nexisting configurations) associated with\nGenerateConfigReportRequest.new_value\n\nIf GenerateConfigReportRequest.old_value is specified,\nGenerateConfigReportRequest will contain a single ChangeReport based on the\ncomparison between GenerateConfigReportRequest.new_value and\nGenerateConfigReportRequest.old_value.\nIf GenerateConfigReportRequest.old_value is not specified, this method\nwill compare GenerateConfigReportRequest.new_value with the last pushed\nservice configuration.",
-          "request": {
-            "$ref": "GenerateConfigReportRequest"
-          }
+          "id": "servicemanagement.services.generateConfigReport"
         },
         "get": {
-          "httpMethod": "GET",
-          "response": {
-            "$ref": "ManagedService"
+          "parameters": {
+            "serviceName": {
+              "required": true,
+              "type": "string",
+              "location": "path",
+              "description": "The name of the service.  See the `ServiceManager` overview for naming\nrequirements.  For example: `example.googleapis.com`."
+            }
           },
-          "parameterOrder": [
-            "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"
           ],
-          "parameters": {
-            "serviceName": {
-              "description": "The name of the service.  See the `ServiceManager` overview for naming\nrequirements.  For example: `example.googleapis.com`.",
-              "required": true,
-              "type": "string",
-              "location": "path"
-            }
-          },
           "flatPath": "v1/services/{serviceName}",
-          "id": "servicemanagement.services.get",
           "path": "v1/services/{serviceName}",
-          "description": "Gets a managed service. Authentication is required unless the service is\npublic."
+          "id": "servicemanagement.services.get",
+          "description": "Gets a managed service. Authentication is required unless the service is\npublic.",
+          "response": {
+            "$ref": "ManagedService"
+          },
+          "parameterOrder": [
+            "serviceName"
+          ],
+          "httpMethod": "GET"
         },
         "testIamPermissions": {
-          "httpMethod": "POST",
-          "parameterOrder": [
-            "resource"
-          ],
           "response": {
             "$ref": "TestIamPermissionsResponse"
           },
+          "parameterOrder": [
+            "resource"
+          ],
+          "httpMethod": "POST",
           "scopes": [
             "https://www.googleapis.com/auth/cloud-platform",
             "https://www.googleapis.com/auth/service.management"
           ],
           "parameters": {
             "resource": {
+              "pattern": "^services/[^/]+$",
+              "location": "path",
               "description": "REQUIRED: The resource for which the policy detail is being requested.\nSee the operation documentation for the appropriate value for this field.",
               "required": true,
-              "type": "string",
-              "pattern": "^services/[^/]+$",
-              "location": "path"
+              "type": "string"
             }
           },
           "flatPath": "v1/services/{servicesId}:testIamPermissions",
-          "id": "servicemanagement.services.testIamPermissions",
           "path": "v1/{+resource}:testIamPermissions",
+          "id": "servicemanagement.services.testIamPermissions",
           "description": "Returns permissions that a caller has on the specified resource.\nIf the resource does not exist, this will return an empty set of\npermissions, not a NOT_FOUND error.\n\nNote: This operation is designed to be used for building permission-aware\nUIs and command-line tools, not for authorization checking. This operation\nmay \"fail open\" without warning.",
           "request": {
             "$ref": "TestIamPermissionsRequest"
@@ -113,39 +214,67 @@
           "parameterOrder": [
             "serviceName"
           ],
-          "parameters": {
-            "serviceName": {
-              "location": "path",
-              "description": "The name of the service.  See the [overview](/service-management/overview)\nfor naming requirements.  For example: `example.googleapis.com`.",
-              "required": true,
-              "type": "string"
-            },
-            "configId": {
-              "location": "query",
-              "description": "The id of the service configuration resource.",
-              "type": "string"
-            },
-            "view": {
-              "enum": [
-                "BASIC",
-                "FULL"
-              ],
-              "description": "Specifies which parts of the Service Config should be returned in the\nresponse.",
-              "type": "string",
-              "location": "query"
-            }
-          },
           "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": {
+            "configId": {
+              "location": "query",
+              "description": "The id of the service configuration resource.",
+              "type": "string"
+            },
+            "view": {
+              "location": "query",
+              "enum": [
+                "BASIC",
+                "FULL"
+              ],
+              "description": "Specifies which parts of the Service Config should be returned in the\nresponse.",
+              "type": "string"
+            },
+            "serviceName": {
+              "location": "path",
+              "description": "The name of the service.  See the [overview](/service-management/overview)\nfor naming requirements.  For example: `example.googleapis.com`.",
+              "required": true,
+              "type": "string"
+            }
+          },
           "flatPath": "v1/services/{serviceName}/config",
           "id": "servicemanagement.services.getConfig",
           "path": "v1/services/{serviceName}/config",
           "description": "Gets a service configuration (version) for a managed service."
         },
+        "enable": {
+          "request": {
+            "$ref": "EnableServiceRequest"
+          },
+          "description": "Enables a service for a project, so it can be used\nfor the project. See\n[Cloud Auth Guide](https://cloud.google.com/docs/authentication) for\nmore information.\n\nOperation\u003cresponse: EnableServiceResponse\u003e",
+          "httpMethod": "POST",
+          "parameterOrder": [
+            "serviceName"
+          ],
+          "response": {
+            "$ref": "Operation"
+          },
+          "parameters": {
+            "serviceName": {
+              "required": true,
+              "type": "string",
+              "location": "path",
+              "description": "Name of the service to enable. Specifying an unknown service name will\ncause the request to fail."
+            }
+          },
+          "scopes": [
+            "https://www.googleapis.com/auth/cloud-platform",
+            "https://www.googleapis.com/auth/service.management"
+          ],
+          "flatPath": "v1/services/{serviceName}:enable",
+          "id": "servicemanagement.services.enable",
+          "path": "v1/services/{serviceName}:enable"
+        },
         "delete": {
           "description": "Deletes a managed service. This method will change the service to the\n`Soft-Delete` state for 30 days. Within this period, service producers may\ncall UndeleteService to restore the service.\nAfter 30 days, the service will be permanently deleted.\n\nOperation\u003cresponse: google.protobuf.Empty\u003e",
           "httpMethod": "DELETE",
@@ -155,6 +284,10 @@
           "parameterOrder": [
             "serviceName"
           ],
+          "scopes": [
+            "https://www.googleapis.com/auth/cloud-platform",
+            "https://www.googleapis.com/auth/service.management"
+          ],
           "parameters": {
             "serviceName": {
               "description": "The name of the service.  See the [overview](/service-management/overview)\nfor naming requirements.  For example: `example.googleapis.com`.",
@@ -163,51 +296,23 @@
               "location": "path"
             }
           },
-          "scopes": [
-            "https://www.googleapis.com/auth/cloud-platform",
-            "https://www.googleapis.com/auth/service.management"
-          ],
           "flatPath": "v1/services/{serviceName}",
           "id": "servicemanagement.services.delete",
           "path": "v1/services/{serviceName}"
         },
-        "enable": {
-          "description": "Enables a service for a project, so it can be used\nfor the project. See\n[Cloud Auth Guide](https://cloud.google.com/docs/authentication) for\nmore information.\n\nOperation\u003cresponse: EnableServiceResponse\u003e",
-          "request": {
-            "$ref": "EnableServiceRequest"
-          },
+        "setIamPolicy": {
           "httpMethod": "POST",
           "parameterOrder": [
-            "serviceName"
+            "resource"
           ],
           "response": {
-            "$ref": "Operation"
+            "$ref": "Policy"
           },
           "scopes": [
             "https://www.googleapis.com/auth/cloud-platform",
             "https://www.googleapis.com/auth/service.management"
           ],
           "parameters": {
-            "serviceName": {
-              "location": "path",
-              "description": "Name of the service to enable. Specifying an unknown service name will\ncause the request to fail.",
-              "required": true,
-              "type": "string"
-            }
-          },
-          "flatPath": "v1/services/{serviceName}:enable",
-          "id": "servicemanagement.services.enable",
-          "path": "v1/services/{serviceName}:enable"
-        },
-        "setIamPolicy": {
-          "response": {
-            "$ref": "Policy"
-          },
-          "parameterOrder": [
-            "resource"
-          ],
-          "httpMethod": "POST",
-          "parameters": {
             "resource": {
               "description": "REQUIRED: The resource for which the policy is being specified.\nSee the operation documentation for the appropriate value for this field.",
               "required": true,
@@ -216,32 +321,28 @@
               "location": "path"
             }
           },
-          "scopes": [
-            "https://www.googleapis.com/auth/cloud-platform",
-            "https://www.googleapis.com/auth/service.management"
-          ],
           "flatPath": "v1/services/{servicesId}:setIamPolicy",
-          "path": "v1/{+resource}:setIamPolicy",
           "id": "servicemanagement.services.setIamPolicy",
+          "path": "v1/{+resource}:setIamPolicy",
+          "description": "Sets the access control policy on the specified resource. Replaces any\nexisting policy.",
           "request": {
             "$ref": "SetIamPolicyRequest"
-          },
-          "description": "Sets the access control policy on the specified resource. Replaces any\nexisting policy."
+          }
         },
         "disable": {
-          "path": "v1/services/{serviceName}:disable",
           "id": "servicemanagement.services.disable",
+          "path": "v1/services/{serviceName}:disable",
           "description": "Disables a service for a project, so it can no longer be\nbe used for the project. It prevents accidental usage that may cause\nunexpected billing charges or security leaks.\n\nOperation\u003cresponse: DisableServiceResponse\u003e",
           "request": {
             "$ref": "DisableServiceRequest"
           },
-          "response": {
-            "$ref": "Operation"
-          },
+          "httpMethod": "POST",
           "parameterOrder": [
             "serviceName"
           ],
-          "httpMethod": "POST",
+          "response": {
+            "$ref": "Operation"
+          },
           "scopes": [
             "https://www.googleapis.com/auth/cloud-platform",
             "https://www.googleapis.com/auth/service.management"
@@ -257,110 +358,98 @@
           "flatPath": "v1/services/{serviceName}:disable"
         },
         "getIamPolicy": {
+          "scopes": [
+            "https://www.googleapis.com/auth/cloud-platform",
+            "https://www.googleapis.com/auth/service.management"
+          ],
+          "parameters": {
+            "resource": {
+              "location": "path",
+              "description": "REQUIRED: The resource for which the policy is being requested.\nSee the operation documentation for the appropriate value for this field.",
+              "required": true,
+              "type": "string",
+              "pattern": "^services/[^/]+$"
+            }
+          },
+          "flatPath": "v1/services/{servicesId}:getIamPolicy",
           "path": "v1/{+resource}:getIamPolicy",
           "id": "servicemanagement.services.getIamPolicy",
+          "description": "Gets the access control policy for a resource.\nReturns an empty policy if the resource exists and does not have a policy\nset.",
           "request": {
             "$ref": "GetIamPolicyRequest"
           },
-          "description": "Gets the access control policy for a resource.\nReturns an empty policy if the resource exists and does not have a policy\nset.",
           "response": {
             "$ref": "Policy"
           },
           "parameterOrder": [
             "resource"
           ],
-          "httpMethod": "POST",
-          "parameters": {
-            "resource": {
-              "pattern": "^services/[^/]+$",
-              "location": "path",
-              "description": "REQUIRED: The resource for which the policy is being requested.\nSee the operation documentation for the appropriate value for this field.",
-              "required": true,
-              "type": "string"
-            }
-          },
-          "scopes": [
-            "https://www.googleapis.com/auth/cloud-platform",
-            "https://www.googleapis.com/auth/service.management"
-          ],
-          "flatPath": "v1/services/{servicesId}:getIamPolicy"
+          "httpMethod": "POST"
         },
         "undelete": {
-          "description": "Revives a previously deleted managed service. The method restores the\nservice using the configuration at the time the service was deleted.\nThe target service must exist and must have been deleted within the\nlast 30 days.\n\nOperation\u003cresponse: UndeleteServiceResponse\u003e",
+          "httpMethod": "POST",
           "response": {
             "$ref": "Operation"
           },
           "parameterOrder": [
             "serviceName"
           ],
-          "httpMethod": "POST",
           "scopes": [
             "https://www.googleapis.com/auth/cloud-platform",
             "https://www.googleapis.com/auth/service.management"
           ],
           "parameters": {
             "serviceName": {
-              "location": "path",
               "description": "The name of the service. See the [overview](/service-management/overview)\nfor naming requirements. For example: `example.googleapis.com`.",
               "required": true,
-              "type": "string"
+              "type": "string",
+              "location": "path"
             }
           },
           "flatPath": "v1/services/{serviceName}:undelete",
+          "id": "servicemanagement.services.undelete",
           "path": "v1/services/{serviceName}:undelete",
-          "id": "servicemanagement.services.undelete"
-        },
-        "list": {
-          "response": {
-            "$ref": "ListServicesResponse"
-          },
-          "parameterOrder": [],
-          "httpMethod": "GET",
-          "parameters": {
-            "consumerId": {
-              "location": "query",
-              "description": "Include services consumed by the specified consumer.\n\nThe Google Service Management implementation accepts the following\nforms:\n- project:\u003cproject_id\u003e",
-              "type": "string"
-            },
-            "pageToken": {
-              "description": "Token identifying which result to start with; returned by a previous list\ncall.",
-              "type": "string",
-              "location": "query"
-            },
-            "pageSize": {
-              "description": "Requested size of the next page of data.",
-              "format": "int32",
-              "type": "integer",
-              "location": "query"
-            },
-            "producerProjectId": {
-              "description": "Include services produced by the specified project.",
-              "type": "string",
-              "location": "query"
-            }
-          },
-          "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",
-          "path": "v1/services",
-          "id": "servicemanagement.services.list",
-          "description": "Lists managed services.\n\nReturns all public services. For authenticated users, also returns all\nservices the calling user has \"servicemanagement.services.get\" permission\nfor.\n\n**BETA:** If the caller specifies the `consumer_id`, it returns only the\nservices enabled on the consumer. The `consumer_id` must have the format\nof \"project:{PROJECT-ID}\"."
+          "description": "Revives a previously deleted managed service. The method restores the\nservice using the configuration at the time the service was deleted.\nThe target service must exist and must have been deleted within the\nlast 30 days.\n\nOperation\u003cresponse: UndeleteServiceResponse\u003e"
         }
       },
       "resources": {
-        "rollouts": {
+        "configs": {
           "methods": {
             "create": {
-              "path": "v1/services/{serviceName}/rollouts",
-              "id": "servicemanagement.services.rollouts.create",
+              "path": "v1/services/{serviceName}/configs",
+              "id": "servicemanagement.services.configs.create",
+              "description": "Creates a new service configuration (version) for a managed service.\nThis method only stores the service configuration. To roll out the service\nconfiguration to backend systems please call\nCreateServiceRollout.",
               "request": {
-                "$ref": "Rollout"
+                "$ref": "Service"
               },
-              "description": "Creates a new service configuration rollout. Based on rollout, the\nGoogle Service Management will roll out the service configurations to\ndifferent backend services. For example, the logging configuration will be\npushed to Google Cloud Logging.\n\nPlease note that any previous pending and running Rollouts and associated\nOperations will be automatically cancelled so that the latest Rollout will\nnot be blocked by previous Rollouts.\n\nOperation\u003cresponse: Rollout\u003e",
+              "response": {
+                "$ref": "Service"
+              },
+              "parameterOrder": [
+                "serviceName"
+              ],
+              "httpMethod": "POST",
+              "scopes": [
+                "https://www.googleapis.com/auth/cloud-platform",
+                "https://www.googleapis.com/auth/service.management"
+              ],
+              "parameters": {
+                "serviceName": {
+                  "required": true,
+                  "type": "string",
+                  "location": "path",
+                  "description": "The name of the service.  See the [overview](/service-management/overview)\nfor naming requirements.  For example: `example.googleapis.com`."
+                }
+              },
+              "flatPath": "v1/services/{serviceName}/configs"
+            },
+            "submit": {
+              "path": "v1/services/{serviceName}/configs:submit",
+              "id": "servicemanagement.services.configs.submit",
+              "request": {
+                "$ref": "SubmitConfigSourceRequest"
+              },
+              "description": "Creates a new service configuration (version) for a managed service based\non\nuser-supplied configuration source files (for example: OpenAPI\nSpecification). This method stores the source configurations as well as the\ngenerated service configuration. To rollout the service configuration to\nother services,\nplease call CreateServiceRollout.\n\nOperation\u003cresponse: SubmitConfigSourceResponse\u003e",
               "response": {
                 "$ref": "Operation"
               },
@@ -380,16 +469,101 @@
                 "https://www.googleapis.com/auth/cloud-platform",
                 "https://www.googleapis.com/auth/service.management"
               ],
-              "flatPath": "v1/services/{serviceName}/rollouts"
+              "flatPath": "v1/services/{serviceName}/configs:submit"
             },
             "list": {
               "httpMethod": "GET",
+              "parameterOrder": [
+                "serviceName"
+              ],
+              "response": {
+                "$ref": "ListServiceConfigsResponse"
+              },
+              "parameters": {
+                "pageSize": {
+                  "location": "query",
+                  "description": "The max number of items to include in the response list.",
+                  "format": "int32",
+                  "type": "integer"
+                },
+                "serviceName": {
+                  "description": "The name of the service.  See the [overview](/service-management/overview)\nfor naming requirements.  For example: `example.googleapis.com`.",
+                  "required": true,
+                  "type": "string",
+                  "location": "path"
+                },
+                "pageToken": {
+                  "location": "query",
+                  "description": "The token of the page to retrieve.",
+                  "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"
+              ],
+              "flatPath": "v1/services/{serviceName}/configs",
+              "id": "servicemanagement.services.configs.list",
+              "path": "v1/services/{serviceName}/configs",
+              "description": "Lists the history of the service configuration for a managed service,\nfrom the newest to the oldest."
+            },
+            "get": {
+              "description": "Gets a service configuration (version) for a managed service.",
+              "httpMethod": "GET",
+              "parameterOrder": [
+                "serviceName",
+                "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"
+              ],
+              "parameters": {
+                "serviceName": {
+                  "location": "path",
+                  "description": "The name of the service.  See the [overview](/service-management/overview)\nfor naming requirements.  For example: `example.googleapis.com`.",
+                  "required": true,
+                  "type": "string"
+                },
+                "configId": {
+                  "description": "The id of the service configuration resource.",
+                  "required": true,
+                  "type": "string",
+                  "location": "path"
+                },
+                "view": {
+                  "location": "query",
+                  "enum": [
+                    "BASIC",
+                    "FULL"
+                  ],
+                  "description": "Specifies which parts of the Service Config should be returned in the\nresponse.",
+                  "type": "string"
+                }
+              },
+              "flatPath": "v1/services/{serviceName}/configs/{configId}",
+              "id": "servicemanagement.services.configs.get",
+              "path": "v1/services/{serviceName}/configs/{configId}"
+            }
+          }
+        },
+        "rollouts": {
+          "methods": {
+            "list": {
               "response": {
                 "$ref": "ListServiceRolloutsResponse"
               },
               "parameterOrder": [
                 "serviceName"
               ],
+              "httpMethod": "GET",
               "scopes": [
                 "https://www.googleapis.com/auth/cloud-platform",
                 "https://www.googleapis.com/auth/cloud-platform.read-only",
@@ -416,12 +590,11 @@
                 }
               },
               "flatPath": "v1/services/{serviceName}/rollouts",
-              "id": "servicemanagement.services.rollouts.list",
               "path": "v1/services/{serviceName}/rollouts",
+              "id": "servicemanagement.services.rollouts.list",
               "description": "Lists the history of the service configuration rollouts for a managed\nservice, from the newest to the oldest."
             },
             "get": {
-              "httpMethod": "GET",
               "parameterOrder": [
                 "serviceName",
                 "rolloutId"
@@ -429,18 +602,13 @@
               "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"
-              ],
+              "httpMethod": "GET",
               "parameters": {
                 "serviceName": {
+                  "location": "path",
                   "description": "The name of the service.  See the [overview](/service-management/overview)\nfor naming requirements.  For example: `example.googleapis.com`.",
                   "required": true,
-                  "type": "string",
-                  "location": "path"
+                  "type": "string"
                 },
                 "rolloutId": {
                   "description": "The id of the rollout resource.",
@@ -449,282 +617,61 @@
                   "location": "path"
                 }
               },
+              "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}/rollouts/{rolloutId}",
               "id": "servicemanagement.services.rollouts.get",
               "path": "v1/services/{serviceName}/rollouts/{rolloutId}",
               "description": "Gets a service configuration rollout."
-            }
-          }
-        },
-        "configs": {
-          "methods": {
-            "submit": {
-              "path": "v1/services/{serviceName}/configs:submit",
-              "id": "servicemanagement.services.configs.submit",
-              "description": "Creates a new service configuration (version) for a managed service based\non\nuser-supplied configuration source files (for example: OpenAPI\nSpecification). This method stores the source configurations as well as the\ngenerated service configuration. To rollout the service configuration to\nother services,\nplease call CreateServiceRollout.\n\nOperation\u003cresponse: SubmitConfigSourceResponse\u003e",
+            },
+            "create": {
+              "description": "Creates a new service configuration rollout. Based on rollout, the\nGoogle Service Management will roll out the service configurations to\ndifferent backend services. For example, the logging configuration will be\npushed to Google Cloud Logging.\n\nPlease note that any previous pending and running Rollouts and associated\nOperations will be automatically cancelled so that the latest Rollout will\nnot be blocked by previous Rollouts.\n\nOperation\u003cresponse: Rollout\u003e",
               "request": {
-                "$ref": "SubmitConfigSourceRequest"
+                "$ref": "Rollout"
               },
+              "httpMethod": "POST",
+              "parameterOrder": [
+                "serviceName"
+              ],
               "response": {
                 "$ref": "Operation"
               },
-              "parameterOrder": [
-                "serviceName"
-              ],
-              "httpMethod": "POST",
               "scopes": [
                 "https://www.googleapis.com/auth/cloud-platform",
                 "https://www.googleapis.com/auth/service.management"
               ],
               "parameters": {
                 "serviceName": {
-                  "location": "path",
                   "description": "The name of the service.  See the [overview](/service-management/overview)\nfor naming requirements.  For example: `example.googleapis.com`.",
                   "required": true,
-                  "type": "string"
-                }
-              },
-              "flatPath": "v1/services/{serviceName}/configs:submit"
-            },
-            "list": {
-              "path": "v1/services/{serviceName}/configs",
-              "id": "servicemanagement.services.configs.list",
-              "description": "Lists the history of the service configuration for a managed service,\nfrom the newest to the oldest.",
-              "response": {
-                "$ref": "ListServiceConfigsResponse"
-              },
-              "parameterOrder": [
-                "serviceName"
-              ],
-              "httpMethod": "GET",
-              "parameters": {
-                "serviceName": {
-                  "location": "path",
-                  "description": "The name of the service.  See the [overview](/service-management/overview)\nfor naming requirements.  For example: `example.googleapis.com`.",
-                  "required": true,
-                  "type": "string"
-                },
-                "pageToken": {
-                  "location": "query",
-                  "description": "The token of the page to retrieve.",
-                  "type": "string"
-                },
-                "pageSize": {
-                  "location": "query",
-                  "description": "The max number of items to include in the response list.",
-                  "format": "int32",
-                  "type": "integer"
-                }
-              },
-              "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"
-            },
-            "get": {
-              "response": {
-                "$ref": "Service"
-              },
-              "parameterOrder": [
-                "serviceName",
-                "configId"
-              ],
-              "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"
-              ],
-              "parameters": {
-                "serviceName": {
-                  "location": "path",
-                  "description": "The name of the service.  See the [overview](/service-management/overview)\nfor naming requirements.  For example: `example.googleapis.com`.",
-                  "required": true,
-                  "type": "string"
-                },
-                "configId": {
-                  "location": "path",
-                  "description": "The id of the service configuration resource.",
-                  "required": true,
-                  "type": "string"
-                },
-                "view": {
-                  "enum": [
-                    "BASIC",
-                    "FULL"
-                  ],
-                  "description": "Specifies which parts of the Service Config should be returned in the\nresponse.",
                   "type": "string",
-                  "location": "query"
+                  "location": "path"
                 }
               },
-              "flatPath": "v1/services/{serviceName}/configs/{configId}",
-              "path": "v1/services/{serviceName}/configs/{configId}",
-              "id": "servicemanagement.services.configs.get",
-              "description": "Gets a service configuration (version) for a managed service."
-            },
-            "create": {
-              "id": "servicemanagement.services.configs.create",
-              "path": "v1/services/{serviceName}/configs",
-              "request": {
-                "$ref": "Service"
-              },
-              "description": "Creates a new service configuration (version) for a managed service.\nThis method only stores the service configuration. To roll out the service\nconfiguration to backend systems please call\nCreateServiceRollout.",
-              "httpMethod": "POST",
-              "parameterOrder": [
-                "serviceName"
-              ],
-              "response": {
-                "$ref": "Service"
-              },
-              "parameters": {
-                "serviceName": {
-                  "location": "path",
-                  "description": "The name of the service.  See the [overview](/service-management/overview)\nfor naming requirements.  For example: `example.googleapis.com`.",
-                  "required": true,
-                  "type": "string"
-                }
-              },
-              "scopes": [
-                "https://www.googleapis.com/auth/cloud-platform",
-                "https://www.googleapis.com/auth/service.management"
-              ],
-              "flatPath": "v1/services/{serviceName}/configs"
+              "flatPath": "v1/services/{serviceName}/rollouts",
+              "id": "servicemanagement.services.rollouts.create",
+              "path": "v1/services/{serviceName}/rollouts"
             }
           }
         }
       }
-    },
-    "operations": {
-      "methods": {
-        "list": {
-          "path": "v1/{+name}",
-          "id": "servicemanagement.operations.list",
-          "description": "Lists operations that match the specified filter in the request. If the\nserver doesn't support this method, it returns `UNIMPLEMENTED`.\n\nNOTE: the `name` binding below allows API services to override the binding\nto use different resource name schemes, such as `users/*/operations`.",
-          "parameterOrder": [
-            "name"
-          ],
-          "httpMethod": "GET",
-          "response": {
-            "$ref": "ListOperationsResponse"
-          },
-          "parameters": {
-            "name": {
-              "pattern": "^operations$",
-              "location": "path",
-              "description": "The name of the operation collection.",
-              "required": true,
-              "type": "string"
-            },
-            "pageToken": {
-              "description": "The standard list page token.",
-              "type": "string",
-              "location": "query"
-            },
-            "pageSize": {
-              "location": "query",
-              "description": "The standard list page size.",
-              "format": "int32",
-              "type": "integer"
-            },
-            "filter": {
-              "location": "query",
-              "description": "The standard list filter.",
-              "type": "string"
-            }
-          },
-          "scopes": [
-            "https://www.googleapis.com/auth/cloud-platform",
-            "https://www.googleapis.com/auth/service.management"
-          ],
-          "flatPath": "v1/operations"
-        },
-        "get": {
-          "response": {
-            "$ref": "Operation"
-          },
-          "parameterOrder": [
-            "name"
-          ],
-          "httpMethod": "GET",
-          "parameters": {
-            "name": {
-              "pattern": "^operations/.+$",
-              "location": "path",
-              "description": "The name of the operation resource.",
-              "required": true,
-              "type": "string"
-            }
-          },
-          "scopes": [
-            "https://www.googleapis.com/auth/cloud-platform",
-            "https://www.googleapis.com/auth/service.management"
-          ],
-          "flatPath": "v1/operations/{operationsId}",
-          "path": "v1/{+name}",
-          "id": "servicemanagement.operations.get",
-          "description": "Gets the latest state of a long-running operation.  Clients can use this\nmethod to poll the operation result at intervals as recommended by the API\nservice."
-        }
-      }
     }
   },
   "parameters": {
-    "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.",
+    "fields": {
       "type": "string",
-      "location": "query"
-    },
-    "access_token": {
       "location": "query",
-      "description": "OAuth access token.",
-      "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"
-    },
-    "pp": {
-      "description": "Pretty-print response.",
-      "type": "boolean",
-      "default": "true",
-      "location": "query"
-    },
-    "oauth_token": {
-      "description": "OAuth 2.0 token for the current user.",
-      "type": "string",
-      "location": "query"
-    },
-    "bearer_token": {
-      "description": "OAuth bearer token.",
-      "type": "string",
-      "location": "query"
-    },
-    "upload_protocol": {
-      "location": "query",
-      "description": "Upload protocol for media (e.g. \"raw\", \"multipart\").",
-      "type": "string"
-    },
-    "prettyPrint": {
-      "description": "Returns response with indentations and line breaks.",
-      "type": "boolean",
-      "default": "true",
-      "location": "query"
+      "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"
     },
-    "fields": {
-      "description": "Selector specifying which fields to include in a partial response.",
-      "type": "string",
-      "location": "query"
-    },
     "$.xgafv": {
       "enumDescriptions": [
         "v1 error format",
@@ -739,16 +686,11 @@
       "type": "string"
     },
     "callback": {
+      "location": "query",
       "description": "JSONP",
-      "type": "string",
-      "location": "query"
+      "type": "string"
     },
     "alt": {
-      "enum": [
-        "json",
-        "media",
-        "proto"
-      ],
       "type": "string",
       "enumDescriptions": [
         "Responses with Content-Type of application/json",
@@ -757,12 +699,784 @@
       ],
       "location": "query",
       "description": "Data format for response.",
-      "default": "json"
+      "default": "json",
+      "enum": [
+        "json",
+        "media",
+        "proto"
+      ]
+    },
+    "access_token": {
+      "type": "string",
+      "location": "query",
+      "description": "OAuth access token."
+    },
+    "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"
+    },
+    "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"
+    },
+    "pp": {
+      "type": "boolean",
+      "default": "true",
+      "location": "query",
+      "description": "Pretty-print response."
+    },
+    "oauth_token": {
+      "description": "OAuth 2.0 token for the current user.",
+      "type": "string",
+      "location": "query"
+    },
+    "bearer_token": {
+      "location": "query",
+      "description": "OAuth bearer token.",
+      "type": "string"
+    },
+    "upload_protocol": {
+      "description": "Upload protocol for media (e.g. \"raw\", \"multipart\").",
+      "type": "string",
+      "location": "query"
+    },
+    "prettyPrint": {
+      "location": "query",
+      "description": "Returns response with indentations and line breaks.",
+      "type": "boolean",
+      "default": "true"
     }
   },
   "schemas": {
-    "Rule": {
+    "Control": {
+      "description": "Selects and configures the service controller used by the service.  The\nservice controller handles features like abuse, quota, billing, logging,\nmonitoring, etc.",
+      "type": "object",
       "properties": {
+        "environment": {
+          "description": "The service control environment to use. If empty, no control plane\nfeature (like quota and billing) will be enabled.",
+          "type": "string"
+        }
+      },
+      "id": "Control"
+    },
+    "SystemParameter": {
+      "description": "Define a parameter's name and location. The parameter may be passed as either\nan HTTP header or a URL query parameter, and if both are passed the behavior\nis implementation-dependent.",
+      "type": "object",
+      "properties": {
+        "urlQueryParameter": {
+          "description": "Define the URL query parameter name to use for the parameter. It is case\nsensitive.",
+          "type": "string"
+        },
+        "httpHeader": {
+          "description": "Define the HTTP header name to use for the parameter. It is case\ninsensitive.",
+          "type": "string"
+        },
+        "name": {
+          "description": "Define the name of the parameter, such as \"api_key\" . It is case sensitive.",
+          "type": "string"
+        }
+      },
+      "id": "SystemParameter"
+    },
+    "Field": {
+      "description": "A single field of a message type.",
+      "type": "object",
+      "properties": {
+        "typeUrl": {
+          "description": "The field type URL, without the scheme, for message or enumeration\ntypes. Example: `\"type.googleapis.com/google.protobuf.Timestamp\"`.",
+          "type": "string"
+        },
+        "number": {
+          "description": "The field number.",
+          "format": "int32",
+          "type": "integer"
+        },
+        "kind": {
+          "type": "string",
+          "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."
+          ],
+          "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"
+          ],
+          "description": "The field type."
+        },
+        "jsonName": {
+          "type": "string",
+          "description": "The field JSON name."
+        },
+        "options": {
+          "description": "The protocol buffer options.",
+          "type": "array",
+          "items": {
+            "$ref": "Option"
+          }
+        },
+        "oneofIndex": {
+          "description": "The index of the field type in `Type.oneofs`, for message or enumeration\ntypes. The first type has index 1; zero means the type is not in the list.",
+          "format": "int32",
+          "type": "integer"
+        },
+        "packed": {
+          "description": "Whether to use alternative packed wire representation.",
+          "type": "boolean"
+        },
+        "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"
+          ],
+          "description": "The field cardinality.",
+          "type": "string"
+        },
+        "defaultValue": {
+          "description": "The string value of the default value of this field. Proto2 syntax only.",
+          "type": "string"
+        },
+        "name": {
+          "type": "string",
+          "description": "The field name."
+        }
+      },
+      "id": "Field"
+    },
+    "Monitoring": {
+      "description": "Monitoring configuration of the service.\n\nThe example below shows how to configure monitored resources and metrics\nfor monitoring. In the example, a monitored resource and two metrics are\ndefined. The `library.googleapis.com/book/returned_count` metric is sent\nto both producer and consumer projects, whereas the\n`library.googleapis.com/book/overdue_count` metric is only sent to the\nconsumer project.\n\n    monitored_resources:\n    - type: library.googleapis.com/branch\n      labels:\n      - key: /city\n        description: The city where the library branch is located in.\n      - key: /name\n        description: The name of the branch.\n    metrics:\n    - name: library.googleapis.com/book/returned_count\n      metric_kind: DELTA\n      value_type: INT64\n      labels:\n      - key: /customer_id\n    - name: library.googleapis.com/book/overdue_count\n      metric_kind: GAUGE\n      value_type: INT64\n      labels:\n      - key: /customer_id\n    monitoring:\n      producer_destinations:\n      - monitored_resource: library.googleapis.com/branch\n        metrics:\n        - library.googleapis.com/book/returned_count\n      consumer_destinations:\n      - monitored_resource: library.googleapis.com/branch\n        metrics:\n        - library.googleapis.com/book/returned_count\n        - library.googleapis.com/book/overdue_count",
+      "type": "object",
+      "properties": {
+        "consumerDestinations": {
+          "description": "Monitoring configurations for sending metrics to the consumer project.\nThere can be multiple consumer destinations, each one must have a\ndifferent monitored resource type. A metric can be used in at most\none consumer destination.",
+          "type": "array",
+          "items": {
+            "$ref": "MonitoringDestination"
+          }
+        },
+        "producerDestinations": {
+          "description": "Monitoring configurations for sending metrics to the producer project.\nThere can be multiple producer destinations, each one must have a\ndifferent monitored resource type. A metric can be used in at most\none producer destination.",
+          "type": "array",
+          "items": {
+            "$ref": "MonitoringDestination"
+          }
+        }
+      },
+      "id": "Monitoring"
+    },
+    "TestIamPermissionsRequest": {
+      "type": "object",
+      "properties": {
+        "permissions": {
+          "description": "The set of permissions to check for the `resource`. Permissions with\nwildcards (such as '*' or 'storage.*') are not allowed. For more\ninformation see\n[IAM Overview](https://cloud.google.com/iam/docs/overview#permissions).",
+          "type": "array",
+          "items": {
+            "type": "string"
+          }
+        }
+      },
+      "id": "TestIamPermissionsRequest",
+      "description": "Request message for `TestIamPermissions` method."
+    },
+    "Enum": {
+      "description": "Enum type definition.",
+      "type": "object",
+      "properties": {
+        "options": {
+          "description": "Protocol buffer options.",
+          "type": "array",
+          "items": {
+            "$ref": "Option"
+          }
+        },
+        "sourceContext": {
+          "description": "The source context.",
+          "$ref": "SourceContext"
+        },
+        "syntax": {
+          "enumDescriptions": [
+            "Syntax `proto2`.",
+            "Syntax `proto3`."
+          ],
+          "enum": [
+            "SYNTAX_PROTO2",
+            "SYNTAX_PROTO3"
+          ],
+          "description": "The source syntax.",
+          "type": "string"
+        },
+        "name": {
+          "description": "Enum type name.",
+          "type": "string"
+        },
+        "enumvalue": {
+          "description": "Enum value definitions.",
+          "type": "array",
+          "items": {
+            "$ref": "EnumValue"
+          }
+        }
+      },
+      "id": "Enum"
+    },
+    "LabelDescriptor": {
+      "description": "A description of a label.",
+      "type": "object",
+      "properties": {
+        "key": {
+          "description": "The label key.",
+          "type": "string"
+        },
+        "description": {
+          "description": "A human-readable description for the label.",
+          "type": "string"
+        },
+        "valueType": {
+          "enum": [
+            "STRING",
+            "BOOL",
+            "INT64"
+          ],
+          "description": "The type of data that can be assigned to the label.",
+          "type": "string",
+          "enumDescriptions": [
+            "A variable-length string. This is the default.",
+            "Boolean; true or false.",
+            "A 64-bit signed integer."
+          ]
+        }
+      },
+      "id": "LabelDescriptor"
+    },
+    "Diagnostic": {
+      "properties": {
+        "message": {
+          "description": "Message describing the error or warning.",
+          "type": "string"
+        },
+        "location": {
+          "description": "File name and line number of the error or warning.",
+          "type": "string"
+        },
+        "kind": {
+          "enumDescriptions": [
+            "Warnings and errors",
+            "Only errors"
+          ],
+          "enum": [
+            "WARNING",
+            "ERROR"
+          ],
+          "description": "The kind of diagnostic information provided.",
+          "type": "string"
+        }
+      },
+      "id": "Diagnostic",
+      "description": "Represents a diagnostic message (error or warning)",
+      "type": "object"
+    },
+    "EnableServiceRequest": {
+      "type": "object",
+      "properties": {
+        "consumerId": {
+          "description": "The identity of consumer resource which service enablement will be\napplied to.\n\nThe Google Service Management implementation accepts the following\nforms:\n- \"project:\u003cproject_id\u003e\"\n\nNote: this is made compatible with\ngoogle.api.servicecontrol.v1.Operation.consumer_id.",
+          "type": "string"
+        }
+      },
+      "id": "EnableServiceRequest",
+      "description": "Request message for EnableService method."
+    },
+    "Type": {
+      "description": "A protocol buffer message type.",
+      "type": "object",
+      "properties": {
+        "fields": {
+          "description": "The list of fields.",
+          "type": "array",
+          "items": {
+            "$ref": "Field"
+          }
+        },
+        "name": {
+          "description": "The fully qualified message name.",
+          "type": "string"
+        },
+        "oneofs": {
+          "type": "array",
+          "items": {
+            "type": "string"
+          },
+          "description": "The list of types appearing in `oneof` definitions in this type."
+        },
+        "syntax": {
+          "description": "The source syntax.",
+          "type": "string",
+          "enumDescriptions": [
+            "Syntax `proto2`.",
+            "Syntax `proto3`."
+          ],
+          "enum": [
+            "SYNTAX_PROTO2",
+            "SYNTAX_PROTO3"
+          ]
+        },
+        "sourceContext": {
+          "$ref": "SourceContext",
+          "description": "The source context."
+        },
+        "options": {
+          "type": "array",
+          "items": {
+            "$ref": "Option"
+          },
+          "description": "The protocol buffer options."
+        }
+      },
+      "id": "Type"
+    },
+    "GenerateConfigReportResponse": {
+      "description": "Response message for GenerateConfigReport method.",
+      "type": "object",
+      "properties": {
+        "changeReports": {
+          "description": "list of ChangeReport, each corresponding to comparison between two\nservice configurations.",
+          "type": "array",
+          "items": {
+            "$ref": "ChangeReport"
+          }
+        },
+        "id": {
+          "description": "ID of the service configuration this report belongs to.",
+          "type": "string"
+        },
+        "diagnostics": {
+          "description": "Errors / Linter warnings associated with the service definition this\nreport\nbelongs to.",
+          "type": "array",
+          "items": {
+            "$ref": "Diagnostic"
+          }
+        },
+        "serviceName": {
+          "description": "Name of the service this report belongs to.",
+          "type": "string"
+        }
+      },
+      "id": "GenerateConfigReportResponse"
+    },
+    "ListServiceConfigsResponse": {
+      "description": "Response message for ListServiceConfigs method.",
+      "type": "object",
+      "properties": {
+        "serviceConfigs": {
+          "description": "The list of service configuration resources.",
+          "type": "array",
+          "items": {
+            "$ref": "Service"
+          }
+        },
+        "nextPageToken": {
+          "description": "The token of the next page of results.",
+          "type": "string"
+        }
+      },
+      "id": "ListServiceConfigsResponse"
+    },
+    "Experimental": {
+      "description": "Experimental service configuration. These configuration options can\nonly be used by whitelisted users.",
+      "type": "object",
+      "properties": {
+        "authorization": {
+          "$ref": "AuthorizationConfig",
+          "description": "Authorization configuration."
+        }
+      },
+      "id": "Experimental"
+    },
+    "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.\n\n**NOTE:** All service configuration rules follow \"last one wins\" order.",
+          "type": "array",
+          "items": {
+            "$ref": "BackendRule"
+          }
+        }
+      },
+      "id": "Backend"
+    },
+    "AuditConfig": {
+      "description": "Specifies the audit configuration for a service.\nThe configuration determines which permission types are logged, and what\nidentities, if any, are exempted from logging.\nAn AuditConifg must have one or more AuditLogConfigs.\n\nIf there are AuditConfigs for both `allServices` and a specific service,\nthe union of the two AuditConfigs is used for that service: the log_types\nspecified in each AuditConfig are enabled, and the exempted_members in each\nAuditConfig are exempted.\nExample Policy with multiple AuditConfigs:\n{\n  \"audit_configs\": [\n    {\n      \"service\": \"allServices\"\n      \"audit_log_configs\": [\n        {\n          \"log_type\": \"DATA_READ\",\n          \"exempted_members\": [\n            \"user:foo@gmail.com\"\n          ]\n        },\n        {\n          \"log_type\": \"DATA_WRITE\",\n        },\n        {\n          \"log_type\": \"ADMIN_READ\",\n        }\n      ]\n    },\n    {\n      \"service\": \"fooservice@googleapis.com\"\n      \"audit_log_configs\": [\n        {\n          \"log_type\": \"DATA_READ\",\n        },\n        {\n          \"log_type\": \"DATA_WRITE\",\n          \"exempted_members\": [\n            \"user:bar@gmail.com\"\n          ]\n        }\n      ]\n    }\n  ]\n}\nFor fooservice, this policy enables DATA_READ, DATA_WRITE and ADMIN_READ\nlogging. It also exempts foo@gmail.com from DATA_READ logging, and\nbar@gmail.com from DATA_WRITE logging.",
+      "type": "object",
+      "properties": {
+        "exemptedMembers": {
+          "type": "array",
+          "items": {
+            "type": "string"
+          }
+        },
+        "service": {
+          "description": "Specifies a service that will be enabled for audit logging.\nFor example, `storage.googleapis.com`, `cloudsql.googleapis.com`.\n`allServices` is a special value that covers all services.",
+          "type": "string"
+        },
+        "auditLogConfigs": {
+          "description": "The configuration for logging of each type of permission.\nNext ID: 4",
+          "type": "array",
+          "items": {
+            "$ref": "AuditLogConfig"
+          }
+        }
+      },
+      "id": "AuditConfig"
+    },
+    "SubmitConfigSourceRequest": {
+      "id": "SubmitConfigSourceRequest",
+      "description": "Request message for SubmitConfigSource method.",
+      "type": "object",
+      "properties": {
+        "configSource": {
+          "$ref": "ConfigSource",
+          "description": "The source configuration for the service."
+        },
+        "validateOnly": {
+          "type": "boolean",
+          "description": "Optional. If set, this will result in the generation of a\n`google.api.Service` configuration based on the `ConfigSource` provided,\nbut the generated config and the sources will NOT be persisted."
+        }
+      }
+    },
+    "DocumentationRule": {
+      "description": "A documentation rule provides information about individual API elements.",
+      "type": "object",
+      "properties": {
+        "description": {
+          "description": "Description of the selected API(s).",
+          "type": "string"
+        },
+        "deprecationDescription": {
+          "description": "Deprecation description of the selected element(s). It can be provided if an\nelement is marked as `deprecated`.",
+          "type": "string"
+        },
+        "selector": {
+          "description": "The selector is a comma-separated list of patterns. Each pattern is a\nqualified name of the element which may end in \"*\", indicating a wildcard.\nWildcards are only allowed at the end and for a whole component of the\nqualified name, i.e. \"foo.*\" is ok, but not \"foo.b*\" or \"foo.*.bar\". To\nspecify a default for all applicable elements, the whole pattern \"*\"\nis used.",
+          "type": "string"
+        }
+      },
+      "id": "DocumentationRule"
+    },
+    "AuthorizationConfig": {
+      "description": "Configuration of authorization.\n\nThis section determines the authorization provider, if unspecified, then no\nauthorization check will be done.\n\nExample:\n\n    experimental:\n      authorization:\n        provider: firebaserules.googleapis.com",
+      "type": "object",
+      "properties": {
+        "provider": {
+          "description": "The name of the authorization provider, such as\nfirebaserules.googleapis.com.",
+          "type": "string"
+        }
+      },
+      "id": "AuthorizationConfig"
+    },
+    "CloudAuditOptions": {
+      "type": "object",
+      "properties": {},
+      "id": "CloudAuditOptions",
+      "description": "Write a Cloud Audit log"
+    },
+    "ContextRule": {
+      "description": "A context rule provides information about the context for an individual API\nelement.",
+      "type": "object",
+      "properties": {
+        "selector": {
+          "description": "Selects the methods to which this rule applies.\n\nRefer to selector for syntax details.",
+          "type": "string"
+        },
+        "provided": {
+          "description": "A list of full type names of provided contexts.",
+          "type": "array",
+          "items": {
+            "type": "string"
+          }
+        },
+        "requested": {
+          "description": "A list of full type names of requested contexts.",
+          "type": "array",
+          "items": {
+            "type": "string"
+          }
+        }
+      },
+      "id": "ContextRule"
+    },
+    "MetricDescriptor": {
+      "description": "Defines a metric type and its schema. Once a metric descriptor is created,\ndeleting or altering it stops data collection and makes the metric type's\nexisting data unusable.",
+      "type": "object",
+      "properties": {
+        "unit": {
+          "description": "The unit in which the metric value is reported. It is only applicable\nif the `value_type` is `INT64`, `DOUBLE`, or `DISTRIBUTION`. The\nsupported units are a subset of [The Unified Code for Units of\nMeasure](http://unitsofmeasure.org/ucum.html) standard:\n\n**Basic units (UNIT)**\n\n* `bit`   bit\n* `By`    byte\n* `s`     second\n* `min`   minute\n* `h`     hour\n* `d`     day\n\n**Prefixes (PREFIX)**\n\n* `k`     kilo    (10**3)\n* `M`     mega    (10**6)\n* `G`     giga    (10**9)\n* `T`     tera    (10**12)\n* `P`     peta    (10**15)\n* `E`     exa     (10**18)\n* `Z`     zetta   (10**21)\n* `Y`     yotta   (10**24)\n* `m`     milli   (10**-3)\n* `u`     micro   (10**-6)\n* `n`     nano    (10**-9)\n* `p`     pico    (10**-12)\n* `f`     femto   (10**-15)\n* `a`     atto    (10**-18)\n* `z`     zepto   (10**-21)\n* `y`     yocto   (10**-24)\n* `Ki`    kibi    (2**10)\n* `Mi`    mebi    (2**20)\n* `Gi`    gibi    (2**30)\n* `Ti`    tebi    (2**40)\n\n**Grammar**\n\nThe grammar includes the dimensionless unit `1`, such as `1/s`.\n\nThe grammar also includes these connectors:\n\n* `/`    division (as an infix operator, e.g. `1/s`).\n* `.`    multiplication (as an infix operator, e.g. `GBy.d`)\n\nThe grammar for a unit is as follows:\n\n    Expression = Component { \".\" Component } { \"/\" Component } ;\n\n    Component = [ PREFIX ] UNIT [ Annotation ]\n              | Annotation\n              | \"1\"\n              ;\n\n    Annotation = \"{\" NAME \"}\" ;\n\nNotes:\n\n* `Annotation` is just a comment if it follows a `UNIT` and is\n   equivalent to `1` if it is used alone. For examples,\n   `{requests}/s == 1/s`, `By{transmitted}/s == By/s`.\n* `NAME` is a sequence of non-blank printable ASCII characters not\n   containing '{' or '}'.",
+          "type": "string"
+        },
+        "labels": {
+          "description": "The set of labels that can be used to describe a specific\ninstance of this metric type. For example, the\n`appengine.googleapis.com/http/server/response_latencies` metric\ntype has a label for the HTTP response code, `response_code`, so\nyou can look at latencies for successful responses or just\nfor responses that failed.",
+          "type": "array",
+          "items": {
+            "$ref": "LabelDescriptor"
+          }
+        },
+        "name": {
+          "description": "The resource name of the metric descriptor. Depending on the\nimplementation, the name typically includes: (1) the parent resource name\nthat defines the scope of the metric type or of its data; and (2) the\nmetric's URL-encoded type, which also appears in the `type` field of this\ndescriptor. For example, following is the resource name of a custom\nmetric within the GCP project `my-project-id`:\n\n    \"projects/my-project-id/metricDescriptors/custom.googleapis.com%2Finvoice%2Fpaid%2Famount\"",
+          "type": "string"
+        },
+        "type": {
+          "type": "string",
+          "description": "The metric type, including its DNS name prefix. The type is not\nURL-encoded.  All user-defined custom metric types have the DNS name\n`custom.googleapis.com`.  Metric types should use a natural hierarchical\ngrouping. For example:\n\n    \"custom.googleapis.com/invoice/paid/amount\"\n    \"appengine.googleapis.com/http/server/response_latencies\""
+        },
+        "valueType": {
+          "enum": [
+            "VALUE_TYPE_UNSPECIFIED",
+            "BOOL",
+            "INT64",
+            "DOUBLE",
+            "STRING",
+            "DISTRIBUTION",
+            "MONEY"
+          ],
+          "description": "Whether the measurement is an integer, a floating-point number, etc.\nSome combinations of `metric_kind` and `value_type` might not be supported.",
+          "type": "string",
+          "enumDescriptions": [
+            "Do not use this default value.",
+            "The value is a boolean.\nThis 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.\nThis value type can be used only if the metric kind is `GAUGE`.",
+            "The value is a `Distribution`.",
+            "The value is money."
+          ]
+        },
+        "metricKind": {
+          "description": "Whether the metric records instantaneous values, changes to a value, etc.\nSome combinations of `metric_kind` and `value_type` might not be supported.",
+          "type": "string",
+          "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\nmeasurements in a time series should have the same start time\nand increasing end times, until an event resets the cumulative\nvalue to zero and sets a new start time for the following\npoints."
+          ],
+          "enum": [
+            "METRIC_KIND_UNSPECIFIED",
+            "GAUGE",
+            "DELTA",
+            "CUMULATIVE"
+          ]
+        },
+        "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.\nUse sentence case without an ending period, for example \"Request count\".",
+          "type": "string"
+        }
+      },
+      "id": "MetricDescriptor"
+    },
+    "SourceContext": {
+      "id": "SourceContext",
+      "description": "`SourceContext` represents information about the source of a\nprotobuf element, like the file in which it is defined.",
+      "type": "object",
+      "properties": {
+        "fileName": {
+          "description": "The path-qualified name of the .proto file that contained the associated\nprotobuf element.  For example: `\"google/protobuf/source_context.proto\"`.",
+          "type": "string"
+        }
+      }
+    },
+    "ListServicesResponse": {
+      "description": "Response message for `ListServices` method.",
+      "type": "object",
+      "properties": {
+        "services": {
+          "description": "The returned services will only have the name field set.",
+          "type": "array",
+          "items": {
+            "$ref": "ManagedService"
+          }
+        },
+        "nextPageToken": {
+          "description": "Token that can be passed to `ListServices` to resume a paginated query.",
+          "type": "string"
+        }
+      },
+      "id": "ListServicesResponse"
+    },
+    "Endpoint": {
+      "type": "object",
+      "properties": {
+        "apis": {
+          "type": "array",
+          "items": {
+            "type": "string"
+          },
+          "description": "The list of APIs served by this endpoint."
+        },
+        "aliases": {
+          "type": "array",
+          "items": {
+            "type": "string"
+          },
+          "description": "DEPRECATED: This field is no longer supported. Instead of using aliases,\nplease specify multiple google.api.Endpoint for each of the intented\nalias.\n\nAdditional names that this endpoint will be hosted on."
+        },
+        "features": {
+          "description": "The list of features enabled on this endpoint.",
+          "type": "array",
+          "items": {
+            "type": "string"
+          }
+        },
+        "allowCors": {
+          "description": "Allowing\n[CORS](https://en.wikipedia.org/wiki/Cross-origin_resource_sharing), aka\ncross-domain traffic, would allow the backends served from this endpoint to\nreceive and respond to HTTP OPTIONS requests. The response will be used by\nthe browser to determine whether the subsequent cross-origin request is\nallowed to proceed.",
+          "type": "boolean"
+        },
+        "name": {
+          "description": "The canonical name of this endpoint.",
+          "type": "string"
+        }
+      },
+      "id": "Endpoint",
+      "description": "`Endpoint` describes a network endpoint that serves a set of APIs.\nA service may expose any number of endpoints, and all endpoints share the\nsame service configuration, such as quota configuration and monitoring\nconfiguration.\n\nExample service configuration:\n\n    name: library-example.googleapis.com\n    endpoints:\n      # Below entry makes 'google.example.library.v1.Library'\n      # API be served from endpoint address library-example.googleapis.com.\n      # It also allows HTTP OPTIONS calls to be passed to the backend, for\n      # it to decide whether the subsequent cross-origin request is\n      # allowed to proceed.\n    - name: library-example.googleapis.com\n      allow_cors: true"
+    },
+    "OAuthRequirements": {
+      "id": "OAuthRequirements",
+      "description": "OAuth scopes are a way to define data and permissions on data. For example,\nthere are scopes defined for \"Read-only access to Google Calendar\" and\n\"Access to Cloud Platform\". Users can consent to a scope for an application,\ngiving it permission to access that data on their behalf.\n\nOAuth scope specifications should be fairly coarse grained; a user will need\nto see and understand the text description of what your scope means.\n\nIn most cases: use one or at most two OAuth scopes for an entire family of\nproducts. If your product has multiple APIs, you should probably be sharing\nthe OAuth scope across all of those APIs.\n\nWhen you need finer grained OAuth consent screens: talk with your product\nmanagement about how developers will use them in practice.\n\nPlease note that even though each of the canonical scopes is enough for a\nrequest to be accepted and passed to the backend, a request can still fail\ndue to the backend requiring additional scopes or permissions.",
+      "type": "object",
+      "properties": {
+        "canonicalScopes": {
+          "description": "The list of publicly documented OAuth scopes that are allowed access. An\nOAuth token containing any of these scopes will be accepted.\n\nExample:\n\n     canonical_scopes: https://www.googleapis.com/auth/calendar,\n                       https://www.googleapis.com/auth/calendar.read",
+          "type": "string"
+        }
+      }
+    },
+    "Usage": {
+      "type": "object",
+      "properties": {
+        "producerNotificationChannel": {
+          "description": "The full resource name of a channel used for sending notifications to the\nservice producer.\n\nGoogle Service Management currently only supports\n[Google Cloud Pub/Sub](https://cloud.google.com/pubsub) as a notification\nchannel. To use Google Cloud Pub/Sub as the channel, this must be the name\nof a Cloud Pub/Sub topic that uses the Cloud Pub/Sub topic name format\ndocumented in https://cloud.google.com/pubsub/docs/overview.",
+          "type": "string"
+        },
+        "rules": {
+          "description": "A list of usage rules that apply to individual API methods.\n\n**NOTE:** All service configuration rules follow \"last one wins\" order.",
+          "type": "array",
+          "items": {
+            "$ref": "UsageRule"
+          }
+        },
+        "requirements": {
+          "description": "Requirements that must be satisfied before a consumer project can use the\nservice. Each requirement is of the form \u003cservice.name\u003e/\u003crequirement-id\u003e;\nfor example 'serviceusage.googleapis.com/billing-enabled'.",
+          "type": "array",
+          "items": {
+            "type": "string"
+          }
+        }
+      },
+      "id": "Usage",
+      "description": "Configuration controlling usage of a service."
+    },
+    "GetIamPolicyRequest": {
+      "description": "Request message for `GetIamPolicy` method.",
+      "type": "object",
+      "properties": {},
+      "id": "GetIamPolicyRequest"
+    },
+    "TestIamPermissionsResponse": {
+      "description": "Response message for `TestIamPermissions` method.",
+      "type": "object",
+      "properties": {
+        "permissions": {
+          "description": "A subset of `TestPermissionsRequest.permissions` that the caller is\nallowed.",
+          "type": "array",
+          "items": {
+            "type": "string"
+          }
+        }
+      },
+      "id": "TestIamPermissionsResponse"
+    },
+    "Context": {
+      "description": "`Context` defines which contexts an API requests.\n\nExample:\n\n    context:\n      rules:\n      - selector: \"*\"\n        requested:\n        - google.rpc.context.ProjectContext\n        - google.rpc.context.OriginContext\n\nThe above specifies that all methods in the API request\n`google.rpc.context.ProjectContext` and\n`google.rpc.context.OriginContext`.\n\nAvailable context types are defined in package\n`google.rpc.context`.",
+      "type": "object",
+      "properties": {
+        "rules": {
+          "description": "A list of RPC context rules that apply to individual API methods.\n\n**NOTE:** All service configuration rules follow \"last one wins\" order.",
+          "type": "array",
+          "items": {
+            "$ref": "ContextRule"
+          }
+        }
+      },
+      "id": "Context"
+    },
+    "Rule": {
+      "type": "object",
+      "properties": {
+        "notIn": {
+          "description": "If one or more 'not_in' clauses are specified, the rule matches\nif the PRINCIPAL/AUTHORITY_SELECTOR is in none of the entries.\nThe format for in and not_in entries is the same as for members in a\nBinding (see google/iam/v1/policy.proto).",
+          "type": "array",
+          "items": {
+            "type": "string"
+          }
+        },
+        "description": {
+          "description": "Human-readable description of the rule.",
+          "type": "string"
+        },
+        "conditions": {
+          "description": "Additional restrictions that must be met",
+          "type": "array",
+          "items": {
+            "$ref": "Condition"
+          }
+        },
         "logConfig": {
           "description": "The config returned to callers of tech.iam.IAM.CheckPolicy for any entries\nthat match the LOG action.",
           "type": "array",
@@ -785,14 +1499,6 @@
           }
         },
         "action": {
-          "enum": [
-            "NO_ACTION",
-            "ALLOW",
-            "ALLOW_WITH_LOG",
-            "DENY",
-            "DENY_WITH_LOG",
-            "LOG"
-          ],
           "description": "Required",
           "type": "string",
           "enumDescriptions": [
@@ -802,54 +1508,50 @@
             "Matching 'Entries' deny access.",
             "Matching 'Entries' deny access and the caller promises to log\nthe request per the returned log_configs.",
             "Matching 'Entries' tell IAM.Check callers to generate logs."
+          ],
+          "enum": [
+            "NO_ACTION",
+            "ALLOW",
+            "ALLOW_WITH_LOG",
+            "DENY",
+            "DENY_WITH_LOG",
+            "LOG"
           ]
-        },
-        "notIn": {
-          "description": "If one or more 'not_in' clauses are specified, the rule matches\nif the PRINCIPAL/AUTHORITY_SELECTOR is in none of the entries.\nThe format for in and not_in entries is the same as for members in a\nBinding (see google/iam/v1/policy.proto).",
-          "type": "array",
-          "items": {
-            "type": "string"
-          }
-        },
-        "description": {
-          "description": "Human-readable description of the rule.",
-          "type": "string"
-        },
-        "conditions": {
-          "description": "Additional restrictions that must be met",
-          "type": "array",
-          "items": {
-            "$ref": "Condition"
-          }
         }
       },
       "id": "Rule",
-      "description": "A rule to be applied in a Policy.",
-      "type": "object"
+      "description": "A rule to be applied in a Policy."
     },
     "LogConfig": {
+      "description": "Specifies what kind of log the caller must write",
+      "type": "object",
       "properties": {
+        "counter": {
+          "$ref": "CounterOptions",
+          "description": "Counter options."
+        },
+        "dataAccess": {
+          "$ref": "DataAccessOptions",
+          "description": "Data access options."
+        },
         "cloudAudit": {
           "$ref": "CloudAuditOptions",
           "description": "Cloud audit options."
-        },
-        "counter": {
-          "description": "Counter options.",
-          "$ref": "CounterOptions"
-        },
-        "dataAccess": {
-          "description": "Data access options.",
-          "$ref": "DataAccessOptions"
         }
       },
-      "id": "LogConfig",
-      "description": "Specifies what kind of log the caller must write\nIncrement a streamz counter with the specified metric and field names.\n\nMetric names should start with a '/', generally be lowercase-only,\nand end in \"_count\". Field names should not contain an initial slash.\nThe actual exported metric names will have \"/iam/policy\" prepended.\n\nField names correspond to IAM request parameters and field values are\ntheir respective values.\n\nAt present the only supported field names are\n   - \"iam_principal\", corresponding to IAMContext.principal;\n   - \"\" (empty string), resulting in one aggretated counter with no field.\n\nExamples:\n  counter { metric: \"/debug_access_count\"  field: \"iam_principal\" }\n  ==\u003e increment counter /iam/policy/backend_debug_access_count\n                        {iam_principal=[value of IAMContext.principal]}\n\nAt this time we do not support:\n* multiple field names (though this may be supported in the future)\n* decrementing the counter\n* incrementing it by anything other than 1",
-      "type": "object"
+      "id": "LogConfig"
     },
     "LogDescriptor": {
       "description": "A description of a log type. Example in YAML format:\n\n    - name: library.googleapis.com/activity_history\n      description: The history of borrowing and returning library items.\n      display_name: Activity\n      labels:\n      - key: /customer_id\n        description: Identifier of a library customer",
       "type": "object",
       "properties": {
+        "labels": {
+          "description": "The set of labels that are available to describe a specific log entry.\nRuntime requests that contain labels not specified here are\nconsidered invalid.",
+          "type": "array",
+          "items": {
+            "$ref": "LabelDescriptor"
+          }
+        },
         "name": {
           "description": "The name of the log. It must be less than 512 characters long and can\ninclude the following characters: upper- and lower-case alphanumeric\ncharacters [A-Za-z0-9], and punctuation characters including\nslash, underscore, hyphen, period [/_-.].",
           "type": "string"
@@ -861,13 +1563,6 @@
         "displayName": {
           "description": "The human-readable name for this log. This information appears on\nthe user interface and should be concise.",
           "type": "string"
-        },
-        "labels": {
-          "description": "The set of labels that are available to describe a specific log entry.\nRuntime requests that contain labels not specified here are\nconsidered invalid.",
-          "type": "array",
-          "items": {
-            "$ref": "LabelDescriptor"
-          }
         }
       },
       "id": "LogDescriptor"
@@ -907,12 +1602,20 @@
       "id": "ConfigFile"
     },
     "MonitoredResourceDescriptor": {
+      "id": "MonitoredResourceDescriptor",
       "description": "An object that describes the schema of a MonitoredResource object using a\ntype name and a set of labels.  For example, the monitored resource\ndescriptor for Google Compute Engine VM instances has a type of\n`\"gce_instance\"` and specifies the use of the labels `\"instance_id\"` and\n`\"zone\"` to identify particular VM instances.\n\nDifferent APIs can support different monitored resource types. APIs generally\nprovide a `list` method that returns the monitored resource descriptors used\nby the API.",
       "type": "object",
       "properties": {
+        "labels": {
+          "description": "Required. A set of labels used to describe instances of this monitored\nresource type. For example, an individual Google Cloud SQL database is\nidentified by values for the labels `\"database_id\"` and `\"zone\"`.",
+          "type": "array",
+          "items": {
+            "$ref": "LabelDescriptor"
+          }
+        },
         "name": {
-          "description": "Optional. The resource name of the monitored resource descriptor:\n`\"projects/{project_id}/monitoredResourceDescriptors/{type}\"` where\n{type} is the value of the `type` field in this object and\n{project_id} is a project ID that provides API-specific context for\naccessing the type.  APIs that do not use project information can use the\nresource name format `\"monitoredResourceDescriptors/{type}\"`.",
-          "type": "string"
+          "type": "string",
+          "description": "Optional. The resource name of the monitored resource descriptor:\n`\"projects/{project_id}/monitoredResourceDescriptors/{type}\"` where\n{type} is the value of the `type` field in this object and\n{project_id} is a project ID that provides API-specific context for\naccessing the type.  APIs that do not use project information can use the\nresource name format `\"monitoredResourceDescriptors/{type}\"`."
         },
         "displayName": {
           "description": "Optional. A concise name for the monitored resource type that might be\ndisplayed in user interfaces. It should be a Title Cased Noun Phrase,\nwithout any article or other determiners. For example,\n`\"Google Cloud SQL Database\"`.",
@@ -925,33 +1628,27 @@
         "type": {
           "description": "Required. The monitored resource type. For example, the type\n`\"cloudsql_database\"` represents databases in Google Cloud SQL.\nThe maximum length of this value is 256 characters.",
           "type": "string"
-        },
-        "labels": {
-          "description": "Required. A set of labels used to describe instances of this monitored\nresource type. For example, an individual Google Cloud SQL database is\nidentified by values for the labels `\"database_id\"` and `\"zone\"`.",
-          "type": "array",
-          "items": {
-            "$ref": "LabelDescriptor"
-          }
         }
-      },
-      "id": "MonitoredResourceDescriptor"
+      }
     },
     "CustomErrorRule": {
-      "description": "A custom error rule.",
-      "type": "object",
       "properties": {
         "isErrorType": {
           "description": "Mark this message as possible payload in error response.  Otherwise,\nobjects of this type will be filtered when they appear in error payload.",
           "type": "boolean"
         },
         "selector": {
-          "description": "Selects messages to which this rule applies.\n\nRefer to selector for syntax details.",
-          "type": "string"
+          "type": "string",
+          "description": "Selects messages to which this rule applies.\n\nRefer to selector for syntax details."
         }
       },
-      "id": "CustomErrorRule"
+      "id": "CustomErrorRule",
+      "description": "A custom error rule.",
+      "type": "object"
     },
     "MediaDownload": {
+      "description": "Use this only for Scotty Requests. Do not use this for media support using\nBytestream, add instead [][google.bytestream.RestByteStream] as an API to\nyour configuration for Bytestream methods.",
+      "type": "object",
       "properties": {
         "enabled": {
           "description": "Whether download is enabled.",
@@ -962,11 +1659,11 @@
           "type": "string"
         }
       },
-      "id": "MediaDownload",
-      "description": "Use this only for Scotty Requests. Do not use this for media support using\nBytestream, add instead [][google.bytestream.RestByteStream] as an API to\nyour configuration for Bytestream methods.",
-      "type": "object"
+      "id": "MediaDownload"
     },
     "ChangeReport": {
+      "description": "Change report associated with a particular service configuration.\n\nIt contains a list of ConfigChanges based on the comparison between\ntwo service configurations.",
+      "type": "object",
       "properties": {
         "configChanges": {
           "description": "List of changes between two service configurations.\nThe changes will be alphabetically sorted based on the identifier\nof each change.\nA ConfigChange identifier is a dot separated path to the configuration.\nExample: visibility.rules[selector='LibraryService.CreateBook'].restriction",
@@ -976,9 +1673,7 @@
           }
         }
       },
-      "id": "ChangeReport",
-      "description": "Change report associated with a particular service configuration.\n\nIt contains a list of ConfigChanges based on the comparison between\ntwo service configurations.",
-      "type": "object"
+      "id": "ChangeReport"
     },
     "DisableServiceRequest": {
       "description": "Request message for DisableService method.",
@@ -996,52 +1691,52 @@
       "type": "object",
       "properties": {
         "serviceConfig": {
-          "$ref": "Service",
-          "description": "The generated service configuration."
+          "description": "The generated service configuration.",
+          "$ref": "Service"
         }
       },
       "id": "SubmitConfigSourceResponse"
     },
     "MediaUpload": {
+      "description": "Use this only for Scotty Requests. Do not use this for media support using\nBytestream, add instead [][google.bytestream.RestByteStream] as an API to\nyour configuration for Bytestream methods.",
+      "type": "object",
       "properties": {
         "enabled": {
           "description": "Whether upload is enabled.",
           "type": "boolean"
         },
         "uploadService": {
-          "description": "DO NOT USE THIS FIELD UNTIL THIS WARNING IS REMOVED.\n\nSpecify name of the upload service if one is used for upload.",
-          "type": "string"
+          "type": "string",
+          "description": "DO NOT USE THIS FIELD UNTIL THIS WARNING IS REMOVED.\n\nSpecify name of the upload service if one is used for upload."
         }
       },
-      "id": "MediaUpload",
-      "description": "Use this only for Scotty Requests. Do not use this for media support using\nBytestream, add instead [][google.bytestream.RestByteStream] as an API to\nyour configuration for Bytestream methods.",
-      "type": "object"
+      "id": "MediaUpload"
     },
     "Advice": {
+      "description": "Generated advice about this change, used for providing more\ninformation about how a change will affect the existing service.",
+      "type": "object",
       "properties": {
         "description": {
           "description": "Useful description for why this advice was applied and what actions should\nbe taken to mitigate any implied risks.",
           "type": "string"
         }
       },
-      "id": "Advice",
-      "description": "Generated advice about this change, used for providing more\ninformation about how a change will affect the existing service.",
-      "type": "object"
+      "id": "Advice"
     },
     "ManagedService": {
+      "type": "object",
       "properties": {
         "serviceName": {
           "description": "The name of the service. See the [overview](/service-management/overview)\nfor naming requirements.",
           "type": "string"
         },
         "producerProjectId": {
-          "description": "ID of the project that produces and owns this service.",
-          "type": "string"
+          "type": "string",
+          "description": "ID of the project that produces and owns this service."
         }
       },
       "id": "ManagedService",
-      "description": "The full representation of a Service that is managed by\nGoogle Service Management.",
-      "type": "object"
+      "description": "The full representation of a Service that is managed by\nGoogle Service Management."
     },
     "UsageRule": {
       "description": "Usage configuration rules for the service.\n\nNOTE: Under development.\n\n\nUse this rule to configure unregistered calls for the service. Unregistered\ncalls are calls that do not contain consumer project identity.\n(Example: calls that do not contain an API key).\nBy default, API methods do not allow unregistered calls, and each method call\nmust be identified by a consumer project identity. Use this rule to\nallow/disallow unregistered calls.\n\nExample of an API that wants to allow unregistered calls for entire service.\n\n    usage:\n      rules:\n      - selector: \"*\"\n        allow_unregistered_calls: true\n\nExample of a method that wants to allow unregistered calls.\n\n    usage:\n      rules:\n      - selector: \"google.example.library.v1.LibraryService.CreateBook\"\n        allow_unregistered_calls: true",
@@ -1059,7 +1754,6 @@
       "id": "UsageRule"
     },
     "AuthRequirement": {
-      "description": "User-defined authentication requirements, including support for\n[JSON Web Token (JWT)](https://tools.ietf.org/html/draft-ietf-oauth-json-web-token-32).",
       "type": "object",
       "properties": {
         "providerId": {
@@ -1071,10 +1765,10 @@
           "type": "string"
         }
       },
-      "id": "AuthRequirement"
+      "id": "AuthRequirement",
+      "description": "User-defined authentication requirements, including support for\n[JSON Web Token (JWT)](https://tools.ietf.org/html/draft-ietf-oauth-json-web-token-32)."
     },
     "TrafficPercentStrategy": {
-      "description": "Strategy that specifies how Google Service Control should select\ndifferent\nversions of service configurations based on traffic percentage.\n\nOne example of how to gradually rollout a new service configuration using\nthis\nstrategy:\nDay 1\n\n    Rollout {\n      id: \"example.googleapis.com/rollout_20160206\"\n      traffic_percent_strategy {\n        percentages: {\n          \"example.googleapis.com/20160201\": 70.00\n          \"example.googleapis.com/20160206\": 30.00\n        }\n      }\n    }\n\nDay 2\n\n    Rollout {\n      id: \"example.googleapis.com/rollout_20160207\"\n      traffic_percent_strategy: {\n        percentages: {\n          \"example.googleapis.com/20160206\": 100.00\n        }\n      }\n    }",
       "type": "object",
       "properties": {
         "percentages": {
@@ -1086,90 +1780,13 @@
           "type": "object"
         }
       },
-      "id": "TrafficPercentStrategy"
-    },
-    "Documentation": {
-      "properties": {
-        "documentationRootUrl": {
-          "description": "The URL to the root of documentation.",
-          "type": "string"
-        },
-        "rules": {
-          "description": "A list of documentation rules that apply to individual API elements.\n\n**NOTE:** All service configuration rules follow \"last one wins\" order.",
-          "type": "array",
-          "items": {
-            "$ref": "DocumentationRule"
-          }
-        },
-        "overview": {
-          "description": "Declares a single overview page. For example:\n\u003cpre\u003e\u003ccode\u003edocumentation:\n  summary: ...\n  overview: &#40;== include overview.md ==&#41;\n\u003c/code\u003e\u003c/pre\u003e\nThis is a shortcut for the following declaration (using pages style):\n\u003cpre\u003e\u003ccode\u003edocumentation:\n  summary: ...\n  pages:\n  - name: Overview\n    content: &#40;== include overview.md ==&#41;\n\u003c/code\u003e\u003c/pre\u003e\nNote: you cannot specify both `overview` field and `pages` field.",
-          "type": "string"
-        },
-        "pages": {
-          "description": "The top level pages for the documentation set.",
-          "type": "array",
-          "items": {
-            "$ref": "Page"
-          }
-        },
-        "summary": {
-          "description": "A short summary of what the service does. Can only be provided by\nplain text.",
-          "type": "string"
-        }
-      },
-      "id": "Documentation",
-      "description": "`Documentation` provides the information for describing a service.\n\nExample:\n\u003cpre\u003e\u003ccode\u003edocumentation:\n  summary: \u003e\n    The Google Calendar API gives access\n    to most calendar features.\n  pages:\n  - name: Overview\n    content: &#40;== include google/foo/overview.md ==&#41;\n  - name: Tutorial\n    content: &#40;== include google/foo/tutorial.md ==&#41;\n    subpages;\n    - name: Java\n      content: &#40;== include google/foo/tutorial_java.md ==&#41;\n  rules:\n  - selector: google.calendar.Calendar.Get\n    description: \u003e\n      ...\n  - selector: google.calendar.Calendar.Put\n    description: \u003e\n      ...\n\u003c/code\u003e\u003c/pre\u003e\nDocumentation is provided in markdown syntax. In addition to\nstandard markdown features, definition lists, tables and fenced\ncode blocks are supported. Section headers can be provided and are\ninterpreted relative to the section nesting of the context where\na documentation fragment is embedded.\n\nDocumentation from the IDL is merged with documentation defined\nvia the config at normalization time, where documentation provided\nby config rules overrides IDL provided.\n\nA number of constructs specific to the API platform are supported\nin documentation text.\n\nIn order to reference a proto element, the following\nnotation can be used:\n\u003cpre\u003e\u003ccode\u003e&#91;fully.qualified.proto.name]&#91;]\u003c/code\u003e\u003c/pre\u003e\nTo override the display text used for the link, this can be used:\n\u003cpre\u003e\u003ccode\u003e&#91;display text]&#91;fully.qualified.proto.name]\u003c/code\u003e\u003c/pre\u003e\nText can be excluded from doc using the following notation:\n\u003cpre\u003e\u003ccode\u003e&#40;-- internal comment --&#41;\u003c/code\u003e\u003c/pre\u003e\nComments can be made conditional using a visibility label. The below\ntext will be only rendered if the `BETA` label is available:\n\u003cpre\u003e\u003ccode\u003e&#40;--BETA: comment for BETA users --&#41;\u003c/code\u003e\u003c/pre\u003e\nA few directives are available in documentation. Note that\ndirectives must appear on a single line to be properly\nidentified. The `include` directive includes a markdown file from\nan external source:\n\u003cpre\u003e\u003ccode\u003e&#40;== include path/to/file ==&#41;\u003c/code\u003e\u003c/pre\u003e\nThe `resource_for` directive marks a message to be the resource of\na collection in REST view. If it is not specified, tools attempt\nto infer the resource from the operations in a collection:\n\u003cpre\u003e\u003ccode\u003e&#40;== resource_for v1.shelves.books ==&#41;\u003c/code\u003e\u003c/pre\u003e\nThe directive `suppress_warning` does not directly affect documentation\nand is documented together with service config validation.",
-      "type": "object"
+      "id": "TrafficPercentStrategy",
+      "description": "Strategy that specifies how Google Service Control should select\ndifferent\nversions of service configurations based on traffic percentage.\n\nOne example of how to gradually rollout a new service configuration using\nthis\nstrategy:\nDay 1\n\n    Rollout {\n      id: \"example.googleapis.com/rollout_20160206\"\n      traffic_percent_strategy {\n        percentages: {\n          \"example.googleapis.com/20160201\": 70.00\n          \"example.googleapis.com/20160206\": 30.00\n        }\n      }\n    }\n\nDay 2\n\n    Rollout {\n      id: \"example.googleapis.com/rollout_20160207\"\n      traffic_percent_strategy: {\n        percentages: {\n          \"example.googleapis.com/20160206\": 100.00\n        }\n      }\n    }"
     },
     "Condition": {
+      "description": "A condition to be met.",
+      "type": "object",
       "properties": {
-        "sys": {
-          "enumDescriptions": [
-            "Default non-attribute type",
-            "Region of the resource",
-            "Service name",
-            "Resource name",
-            "IP address of the caller"
-          ],
-          "enum": [
-            "NO_ATTR",
-            "REGION",
-            "SERVICE",
-            "NAME",
-            "IP"
-          ],
-          "description": "Trusted attributes supplied by any service that owns resources and uses\nthe IAM system for access control.",
-          "type": "string"
-        },
-        "value": {
-          "description": "DEPRECATED. Use 'values' instead.",
-          "type": "string"
-        },
-        "values": {
-          "description": "The objects of the condition. This is mutually exclusive with 'value'.",
-          "type": "array",
-          "items": {
-            "type": "string"
-          }
-        },
-        "iam": {
-          "enum": [
-            "NO_ATTR",
-            "AUTHORITY",
-            "ATTRIBUTION",
-            "APPROVER",
-            "JUSTIFICATION_TYPE"
-          ],
-          "description": "Trusted attributes supplied by the IAM system.",
-          "type": "string",
-          "enumDescriptions": [
-            "Default non-attribute.",
-            "Either principal or (if present) authority selector.",
-            "The principal (even if an authority selector is present), which\nmust only be used for attribution, not authorization.",
-            "An approver (distinct from the requester) that has authorized this\nrequest.\nWhen used with IN, the condition indicates that one of the approvers\nassociated with the request matches the specified principal, or is a\nmember of the specified group. Approvers can only grant additional\naccess, and are thus only used in a strictly positive context\n(e.g. ALLOW/IN or DENY/NOT_IN).\nSee: go/rpc-security-policy-dynamicauth.",
-            "What types of justifications have been supplied with this request.\nString values should match enum names from tech.iam.JustificationType,\ne.g. \"MANUAL_STRING\". It is not permitted to grant access based on\nthe *absence* of a justification, so justification conditions can only\nbe used in a \"positive\" context (e.g., ALLOW/IN or DENY/NOT_IN).\n\nMultiple justifications, e.g., a Buganizer ID and a manually-entered\nreason, are normal and supported."
-          ]
-        },
         "op": {
           "enumDescriptions": [
             "Default no-op.",
@@ -1193,24 +1810,97 @@
         "svc": {
           "description": "Trusted attributes discharged by the service.",
           "type": "string"
+        },
+        "value": {
+          "description": "DEPRECATED. Use 'values' instead.",
+          "type": "string"
+        },
+        "sys": {
+          "enum": [
+            "NO_ATTR",
+            "REGION",
+            "SERVICE",
+            "NAME",
+            "IP"
+          ],
+          "description": "Trusted attributes supplied by any service that owns resources and uses\nthe IAM system for access control.",
+          "type": "string",
+          "enumDescriptions": [
+            "Default non-attribute type",
+            "Region of the resource",
+            "Service name",
+            "Resource name",
+            "IP address of the caller"
+          ]
+        },
+        "values": {
+          "type": "array",
+          "items": {
+            "type": "string"
+          },
+          "description": "The objects of the condition. This is mutually exclusive with 'value'."
+        },
+        "iam": {
+          "enumDescriptions": [
+            "Default non-attribute.",
+            "Either principal or (if present) authority selector.",
+            "The principal (even if an authority selector is present), which\nmust only be used for attribution, not authorization.",
+            "An approver (distinct from the requester) that has authorized this\nrequest.\nWhen used with IN, the condition indicates that one of the approvers\nassociated with the request matches the specified principal, or is a\nmember of the specified group. Approvers can only grant additional\naccess, and are thus only used in a strictly positive context\n(e.g. ALLOW/IN or DENY/NOT_IN).\nSee: go/rpc-security-policy-dynamicauth.",
+            "What types of justifications have been supplied with this request.\nString values should match enum names from tech.iam.JustificationType,\ne.g. \"MANUAL_STRING\". It is not permitted to grant access based on\nthe *absence* of a justification, so justification conditions can only\nbe used in a \"positive\" context (e.g., ALLOW/IN or DENY/NOT_IN).\n\nMultiple justifications, e.g., a Buganizer ID and a manually-entered\nreason, are normal and supported."
+          ],
+          "enum": [
+            "NO_ATTR",
+            "AUTHORITY",
+            "ATTRIBUTION",
+            "APPROVER",
+            "JUSTIFICATION_TYPE"
+          ],
+          "description": "Trusted attributes supplied by the IAM system.",
+          "type": "string"
         }
       },
-      "id": "Condition",
-      "description": "A condition to be met.",
-      "type": "object"
+      "id": "Condition"
+    },
+    "Documentation": {
+      "id": "Documentation",
+      "description": "`Documentation` provides the information for describing a service.\n\nExample:\n\u003cpre\u003e\u003ccode\u003edocumentation:\n  summary: \u003e\n    The Google Calendar API gives access\n    to most calendar features.\n  pages:\n  - name: Overview\n    content: &#40;== include google/foo/overview.md ==&#41;\n  - name: Tutorial\n    content: &#40;== include google/foo/tutorial.md ==&#41;\n    subpages;\n    - name: Java\n      content: &#40;== include google/foo/tutorial_java.md ==&#41;\n  rules:\n  - selector: google.calendar.Calendar.Get\n    description: \u003e\n      ...\n  - selector: google.calendar.Calendar.Put\n    description: \u003e\n      ...\n\u003c/code\u003e\u003c/pre\u003e\nDocumentation is provided in markdown syntax. In addition to\nstandard markdown features, definition lists, tables and fenced\ncode blocks are supported. Section headers can be provided and are\ninterpreted relative to the section nesting of the context where\na documentation fragment is embedded.\n\nDocumentation from the IDL is merged with documentation defined\nvia the config at normalization time, where documentation provided\nby config rules overrides IDL provided.\n\nA number of constructs specific to the API platform are supported\nin documentation text.\n\nIn order to reference a proto element, the following\nnotation can be used:\n\u003cpre\u003e\u003ccode\u003e&#91;fully.qualified.proto.name]&#91;]\u003c/code\u003e\u003c/pre\u003e\nTo override the display text used for the link, this can be used:\n\u003cpre\u003e\u003ccode\u003e&#91;display text]&#91;fully.qualified.proto.name]\u003c/code\u003e\u003c/pre\u003e\nText can be excluded from doc using the following notation:\n\u003cpre\u003e\u003ccode\u003e&#40;-- internal comment --&#41;\u003c/code\u003e\u003c/pre\u003e\nComments can be made conditional using a visibility label. The below\ntext will be only rendered if the `BETA` label is available:\n\u003cpre\u003e\u003ccode\u003e&#40;--BETA: comment for BETA users --&#41;\u003c/code\u003e\u003c/pre\u003e\nA few directives are available in documentation. Note that\ndirectives must appear on a single line to be properly\nidentified. The `include` directive includes a markdown file from\nan external source:\n\u003cpre\u003e\u003ccode\u003e&#40;== include path/to/file ==&#41;\u003c/code\u003e\u003c/pre\u003e\nThe `resource_for` directive marks a message to be the resource of\na collection in REST view. If it is not specified, tools attempt\nto infer the resource from the operations in a collection:\n\u003cpre\u003e\u003ccode\u003e&#40;== resource_for v1.shelves.books ==&#41;\u003c/code\u003e\u003c/pre\u003e\nThe directive `suppress_warning` does not directly affect documentation\nand is documented together with service config validation.",
+      "type": "object",
+      "properties": {
+        "summary": {
+          "description": "A short summary of what the service does. Can only be provided by\nplain text.",
+          "type": "string"
+        },
+        "documentationRootUrl": {
+          "description": "The URL to the root of documentation.",
+          "type": "string"
+        },
+        "rules": {
+          "description": "A list of documentation rules that apply to individual API elements.\n\n**NOTE:** All service configuration rules follow \"last one wins\" order.",
+          "type": "array",
+          "items": {
+            "$ref": "DocumentationRule"
+          }
+        },
+        "overview": {
+          "description": "Declares a single overview page. For example:\n\u003cpre\u003e\u003ccode\u003edocumentation:\n  summary: ...\n  overview: &#40;== include overview.md ==&#41;\n\u003c/code\u003e\u003c/pre\u003e\nThis is a shortcut for the following declaration (using pages style):\n\u003cpre\u003e\u003ccode\u003edocumentation:\n  summary: ...\n  pages:\n  - name: Overview\n    content: &#40;== include overview.md ==&#41;\n\u003c/code\u003e\u003c/pre\u003e\nNote: you cannot specify both `overview` field and `pages` field.",
+          "type": "string"
+        },
+        "pages": {
+          "description": "The top level pages for the documentation set.",
+          "type": "array",
+          "items": {
+            "$ref": "Page"
+          }
+        }
+      }
     },
     "AuditLogConfig": {
       "description": "Provides the configuration for logging a type of permissions.\nExample:\n\n    {\n      \"audit_log_configs\": [\n        {\n          \"log_type\": \"DATA_READ\",\n          \"exempted_members\": [\n            \"user:foo@gmail.com\"\n          ]\n        },\n        {\n          \"log_type\": \"DATA_WRITE\",\n        }\n      ]\n    }\n\nThis enables 'DATA_READ' and 'DATA_WRITE' logging, while exempting\nfoo@gmail.com from DATA_READ logging.",
       "type": "object",
       "properties": {
-        "exemptedMembers": {
-          "description": "Specifies the identities that do not cause logging for this type of\npermission.\nFollows the same format of Binding.members.",
-          "type": "array",
-          "items": {
-            "type": "string"
-          }
-        },
         "logType": {
+          "description": "The log type that this config enables.",
+          "type": "string",
           "enumDescriptions": [
             "Default case. Should never be this.",
             "Admin reads. Example: CloudIAM getIamPolicy",
@@ -1222,34 +1912,57 @@
             "ADMIN_READ",
             "DATA_WRITE",
             "DATA_READ"
-          ],
-          "description": "The log type that this config enables.",
-          "type": "string"
+          ]
+        },
+        "exemptedMembers": {
+          "description": "Specifies the identities that do not cause logging for this type of\npermission.\nFollows the same format of Binding.members.",
+          "type": "array",
+          "items": {
+            "type": "string"
+          }
         }
       },
       "id": "AuditLogConfig"
     },
     "ConfigSource": {
+      "description": "Represents a source file which is used to generate the service configuration\ndefined by `google.api.Service`.",
+      "type": "object",
       "properties": {
+        "id": {
+          "description": "A unique ID for a specific instance of this message, typically assigned\nby the client for tracking purpose. If empty, the server may choose to\ngenerate one instead.",
+          "type": "string"
+        },
         "files": {
           "description": "Set of source configuration files that are used to generate a service\nconfiguration (`google.api.Service`).",
           "type": "array",
           "items": {
             "$ref": "ConfigFile"
           }
-        },
-        "id": {
-          "description": "A unique ID for a specific instance of this message, typically assigned\nby the client for tracking purpose. If empty, the server may choose to\ngenerate one instead.",
-          "type": "string"
         }
       },
-      "id": "ConfigSource",
-      "description": "Represents a source file which is used to generate the service configuration\ndefined by `google.api.Service`.",
-      "type": "object"
+      "id": "ConfigSource"
+    },
+    "BackendRule": {
+      "id": "BackendRule",
+      "description": "A backend rule provides configuration for an individual API element.",
+      "type": "object",
+      "properties": {
+        "address": {
+          "description": "The address of the API backend.",
+          "type": "string"
+        },
+        "selector": {
+          "description": "Selects the methods to which this rule applies.\n\nRefer to selector for syntax details.",
+          "type": "string"
+        },
+        "deadline": {
+          "description": "The number of seconds to wait for a response from a request.  The\ndefault depends on the deployment context.",
+          "format": "double",
+          "type": "number"
+        }
+      }
     },
     "AuthenticationRule": {
-      "description": "Authentication rules for the service.\n\nBy default, if a method has any authentication requirements, every request\nmust include a valid credential matching one of the requirements.\nIt's an error to include more than one kind of credential in a single\nrequest.\n\nIf a method doesn't have any auth requirements, request credentials will be\nignored.",
-      "type": "object",
       "properties": {
         "oauth": {
           "$ref": "OAuthRequirements",
@@ -1271,37 +1984,23 @@
           "type": "boolean"
         }
       },
-      "id": "AuthenticationRule"
+      "id": "AuthenticationRule",
+      "description": "Authentication rules for the service.\n\nBy default, if a method has any authentication requirements, every request\nmust include a valid credential matching one of the requirements.\nIt's an error to include more than one kind of credential in a single\nrequest.\n\nIf a method doesn't have any auth requirements, request credentials will be\nignored.",
+      "type": "object"
     },
-    "BackendRule": {
-      "description": "A backend rule provides configuration for an individual API element.",
+    "UndeleteServiceResponse": {
+      "description": "Response message for UndeleteService method.",
       "type": "object",
       "properties": {
-        "address": {
-          "description": "The address of the API backend.",
-          "type": "string"
-        },
-        "selector": {
-          "description": "Selects the methods to which this rule applies.\n\nRefer to selector for syntax details.",
-          "type": "string"
-        },
-        "deadline": {
-          "description": "The number of seconds to wait for a response from a request.  The\ndefault depends on the deployment context.",
-          "format": "double",
-          "type": "number"
+        "service": {
+          "$ref": "ManagedService",
+          "description": "Revived service resource."
         }
       },
-      "id": "BackendRule"
+      "id": "UndeleteServiceResponse"
     },
     "Policy": {
-      "description": "Defines an Identity and Access Management (IAM) policy. It is used to\nspecify access control policies for Cloud Platform resources.\n\n\nA `Policy` consists of a list of `bindings`. A `Binding` binds a list of\n`members` to a `role`, where the members can be user accounts, Google groups,\nGoogle domains, and service accounts. A `role` is a named list of permissions\ndefined by IAM.\n\n**Example**\n\n    {\n      \"bindings\": [\n        {\n          \"role\": \"roles/owner\",\n          \"members\": [\n            \"user:mike@example.com\",\n            \"group:admins@example.com\",\n            \"domain:google.com\",\n            \"serviceAccount:my-other-app@appspot.gserviceaccount.com\",\n          ]\n        },\n        {\n          \"role\": \"roles/viewer\",\n          \"members\": [\"user:sean@example.com\"]\n        }\n      ]\n    }\n\nFor a description of IAM and its features, see the\n[IAM developer's guide](https://cloud.google.com/iam).",
-      "type": "object",
       "properties": {
-        "etag": {
-          "description": "`etag` is used for optimistic concurrency control as a way to help\nprevent simultaneous updates of a policy from overwriting each other.\nIt is strongly suggested that systems make use of the `etag` in the\nread-modify-write cycle to perform policy updates in order to avoid race\nconditions: An `etag` is returned in the response to `getIamPolicy`, and\nsystems are expected to put that etag in the request to `setIamPolicy` to\nensure that their change will be applied to the same version of the policy.\n\nIf no `etag` is provided in the call to `setIamPolicy`, then the existing\npolicy is overwritten blindly.",
-          "format": "byte",
-          "type": "string"
-        },
         "iamOwned": {
           "type": "boolean"
         },
@@ -1318,11 +2017,11 @@
           "type": "integer"
         },
         "auditConfigs": {
-          "description": "Specifies cloud audit logging configuration for this policy.",
           "type": "array",
           "items": {
             "$ref": "AuditConfig"
-          }
+          },
+          "description": "Specifies cloud audit logging configuration for this policy."
         },
         "bindings": {
           "description": "Associates a list of `members` to a `role`.\nMultiple `bindings` must not be specified for the same `role`.\n`bindings` with no members will result in an error.",
@@ -1330,22 +2029,20 @@
           "items": {
             "$ref": "Binding"
           }
+        },
+        "etag": {
+          "description": "`etag` is used for optimistic concurrency control as a way to help\nprevent simultaneous updates of a policy from overwriting each other.\nIt is strongly suggested that systems make use of the `etag` in the\nread-modify-write cycle to perform policy updates in order to avoid race\nconditions: An `etag` is returned in the response to `getIamPolicy`, and\nsystems are expected to put that etag in the request to `setIamPolicy` to\nensure that their change will be applied to the same version of the policy.\n\nIf no `etag` is provided in the call to `setIamPolicy`, then the existing\npolicy is overwritten blindly.",
+          "format": "byte",
+          "type": "string"
         }
       },
-      "id": "Policy"
-    },
-    "UndeleteServiceResponse": {
-      "properties": {
-        "service": {
-          "description": "Revived service resource.",
-          "$ref": "ManagedService"
-        }
-      },
-      "id": "UndeleteServiceResponse",
-      "description": "Response message for UndeleteService method.",
+      "id": "Policy",
+      "description": "Defines an Identity and Access Management (IAM) policy. It is used to\nspecify access control policies for Cloud Platform resources.\n\n\nA `Policy` consists of a list of `bindings`. A `Binding` binds a list of\n`members` to a `role`, where the members can be user accounts, Google groups,\nGoogle domains, and service accounts. A `role` is a named list of permissions\ndefined by IAM.\n\n**Example**\n\n    {\n      \"bindings\": [\n        {\n          \"role\": \"roles/owner\",\n          \"members\": [\n            \"user:mike@example.com\",\n            \"group:admins@example.com\",\n            \"domain:google.com\",\n            \"serviceAccount:my-other-app@appspot.gserviceaccount.com\",\n          ]\n        },\n        {\n          \"role\": \"roles/viewer\",\n          \"members\": [\"user:sean@example.com\"]\n        }\n      ]\n    }\n\nFor a description of IAM and its features, see the\n[IAM developer's guide](https://cloud.google.com/iam).",
       "type": "object"
     },
     "Api": {
+      "description": "Api is a light-weight descriptor for a protocol buffer service.",
+      "type": "object",
       "properties": {
         "options": {
           "description": "Any metadata attached to the API.",
@@ -1393,9 +2090,7 @@
           }
         }
       },
-      "id": "Api",
-      "description": "Api is a light-weight descriptor for a protocol buffer service.",
-      "type": "object"
+      "id": "Api"
     },
     "DataAccessOptions": {
       "description": "Write a Data Access (Gin) log",
@@ -1404,50 +2099,38 @@
       "id": "DataAccessOptions"
     },
     "Authentication": {
+      "type": "object",
       "properties": {
-        "rules": {
-          "description": "A list of authentication rules that apply to individual API methods.\n\n**NOTE:** All service configuration rules follow \"last one wins\" order.",
-          "type": "array",
-          "items": {
-            "$ref": "AuthenticationRule"
-          }
-        },
         "providers": {
           "description": "Defines a set of authentication providers that a service supports.",
           "type": "array",
           "items": {
             "$ref": "AuthProvider"
           }
+        },
+        "rules": {
+          "description": "A list of authentication rules that apply to individual API methods.\n\n**NOTE:** All service configuration rules follow \"last one wins\" order.",
+          "type": "array",
+          "items": {
+            "$ref": "AuthenticationRule"
+          }
         }
       },
       "id": "Authentication",
-      "description": "`Authentication` defines the authentication configuration for an API.\n\nExample for an API targeted for external use:\n\n    name: calendar.googleapis.com\n    authentication:\n      providers:\n      - id: google_calendar_auth\n        jwks_uri: https://www.googleapis.com/oauth2/v1/certs\n        issuer: https://securetoken.google.com\n      rules:\n      - selector: \"*\"\n        requirements:\n          provider_id: google_calendar_auth",
-      "type": "object"
+      "description": "`Authentication` defines the authentication configuration for an API.\n\nExample for an API targeted for external use:\n\n    name: calendar.googleapis.com\n    authentication:\n      providers:\n      - id: google_calendar_auth\n        jwks_uri: https://www.googleapis.com/oauth2/v1/certs\n        issuer: https://securetoken.google.com\n      rules:\n      - selector: \"*\"\n        requirements:\n          provider_id: google_calendar_auth"
     },
     "Operation": {
       "description": "This resource represents a long-running operation that is the result of a\nnetwork API call.",
       "type": "object",
       "properties": {
-        "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\nmethod returns no data on success, such as `Delete`, the response is\n`google.protobuf.Empty`.  If the original method is standard\n`Get`/`Create`/`Update`, the response should be the resource.  For other\nmethods, the response should have the type `XxxResponse`, where `Xxx`\nis the original method name.  For example, if the original method name\nis `TakeSnapshot()`, the inferred response type is\n`TakeSnapshotResponse`.",
-          "type": "object"
-        },
-        "name": {
-          "description": "The server-assigned name, which is only unique within the same service that\noriginally returns it. If you use the default HTTP mapping, the\n`name` should have the format of `operations/some/unique/name`.",
-          "type": "string"
-        },
         "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"
+            "type": "any",
+            "description": "Properties of the object. Contains field @type with type URL."
           },
           "description": "Service-specific metadata associated with the operation.  It typically\ncontains progress information and common metadata such as create time.\nSome services might not provide such metadata.  Any method that returns a\nlong-running operation should document the metadata type, if any.",
           "type": "object"
@@ -1455,6 +2138,18 @@
         "done": {
           "description": "If the value is `false`, it means the operation is still in progress.\nIf true, the operation is completed, and either `error` or `response` is\navailable.",
           "type": "boolean"
+        },
+        "response": {
+          "description": "The normal response of the operation in case of success.  If the original\nmethod returns no data on success, such as `Delete`, the response is\n`google.protobuf.Empty`.  If the original method is standard\n`Get`/`Create`/`Update`, the response should be the resource.  For other\nmethods, the response should have the type `XxxResponse`, where `Xxx`\nis the original method name.  For example, if the original method name\nis `TakeSnapshot()`, the inferred response type is\n`TakeSnapshotResponse`.",
+          "type": "object",
+          "additionalProperties": {
+            "type": "any",
+            "description": "Properties of the object. Contains field @type with type URL."
+          }
+        },
+        "name": {
+          "description": "The server-assigned name, which is only unique within the same service that\noriginally returns it. If you use the default HTTP mapping, the\n`name` should have the format of `operations/some/unique/name`.",
+          "type": "string"
         }
       },
       "id": "Operation"
@@ -1482,7 +2177,14 @@
       "id": "Page"
     },
     "Status": {
+      "description": "The `Status` type defines a logical error model that is suitable for different\nprogramming environments, including REST APIs and RPC APIs. It is used by\n[gRPC](https://github.com/grpc). The error model is designed to be:\n\n- Simple to use and understand for most users\n- Flexible enough to meet unexpected needs\n\n# Overview\n\nThe `Status` message contains three pieces of data: error code, error message,\nand error details. The error code should be an enum value of\ngoogle.rpc.Code, but it may accept additional error codes if needed.  The\nerror message should be a developer-facing English message that helps\ndevelopers *understand* and *resolve* the error. If a localized user-facing\nerror message is needed, put the localized message in the error details or\nlocalize it in the client. The optional error details may contain arbitrary\ninformation about the error. There is a predefined set of error detail types\nin the package `google.rpc` which can be used for common error conditions.\n\n# Language mapping\n\nThe `Status` message is the logical representation of the error model, but it\nis not necessarily the actual wire format. When the `Status` message is\nexposed in different client libraries and different wire protocols, it can be\nmapped differently. For example, it will likely be mapped to some exceptions\nin Java, but more likely mapped to some error codes in C.\n\n# Other uses\n\nThe error model and the `Status` message can be used in a variety of\nenvironments, either with or without APIs, to provide a\nconsistent developer experience across different environments.\n\nExample uses of this error model include:\n\n- Partial errors. If a service needs to return partial errors to the client,\n    it may embed the `Status` in the normal response to indicate the partial\n    errors.\n\n- Workflow errors. A typical workflow has multiple steps. Each step may\n    have a `Status` message for error reporting purpose.\n\n- Batch operations. If a client uses batch request and batch response, the\n    `Status` message should be used directly inside batch response, one for\n    each error sub-response.\n\n- Asynchronous operations. If an API call embeds asynchronous operation\n    results in its response, the status of those operations should be\n    represented directly using the `Status` message.\n\n- Logging. If some API errors are stored in logs, the message `Status` could\n    be used directly after any stripping needed for security/privacy reasons.",
+      "type": "object",
       "properties": {
+        "code": {
+          "description": "The status code, which should be an enum value of google.rpc.Code.",
+          "format": "int32",
+          "type": "integer"
+        },
         "message": {
           "description": "A developer-facing error message, which should be in English. Any\nuser-facing error message should be localized and sent in the\ngoogle.rpc.Status.details field, or localized by the client.",
           "type": "string"
@@ -1491,26 +2193,17 @@
           "description": "A list of messages that carry the error details.  There will be a\ncommon 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"
-            },
-            "type": "object"
+            }
           }
-        },
-        "code": {
-          "description": "The status code, which should be an enum value of google.rpc.Code.",
-          "format": "int32",
-          "type": "integer"
         }
       },
-      "id": "Status",
-      "description": "The `Status` type defines a logical error model that is suitable for different\nprogramming environments, including REST APIs and RPC APIs. It is used by\n[gRPC](https://github.com/grpc). The error model is designed to be:\n\n- Simple to use and understand for most users\n- Flexible enough to meet unexpected needs\n\n# Overview\n\nThe `Status` message contains three pieces of data: error code, error message,\nand error details. The error code should be an enum value of\ngoogle.rpc.Code, but it may accept additional error codes if needed.  The\nerror message should be a developer-facing English message that helps\ndevelopers *understand* and *resolve* the error. If a localized user-facing\nerror message is needed, put the localized message in the error details or\nlocalize it in the client. The optional error details may contain arbitrary\ninformation about the error. There is a predefined set of error detail types\nin the package `google.rpc` which can be used for common error conditions.\n\n# Language mapping\n\nThe `Status` message is the logical representation of the error model, but it\nis not necessarily the actual wire format. When the `Status` message is\nexposed in different client libraries and different wire protocols, it can be\nmapped differently. For example, it will likely be mapped to some exceptions\nin Java, but more likely mapped to some error codes in C.\n\n# Other uses\n\nThe error model and the `Status` message can be used in a variety of\nenvironments, either with or without APIs, to provide a\nconsistent developer experience across different environments.\n\nExample uses of this error model include:\n\n- Partial errors. If a service needs to return partial errors to the client,\n    it may embed the `Status` in the normal response to indicate the partial\n    errors.\n\n- Workflow errors. A typical workflow has multiple steps. Each step may\n    have a `Status` message for error reporting purpose.\n\n- Batch operations. If a client uses batch request and batch response, the\n    `Status` message should be used directly inside batch response, one for\n    each error sub-response.\n\n- Asynchronous operations. If an API call embeds asynchronous operation\n    results in its response, the status of those operations should be\n    represented directly using the `Status` message.\n\n- Logging. If some API errors are stored in logs, the message `Status` could\n    be used directly after any stripping needed for security/privacy reasons.",
-      "type": "object"
+      "id": "Status"
     },
     "Binding": {
-      "description": "Associates `members` with a `role`.",
-      "type": "object",
       "properties": {
         "members": {
           "description": "Specifies the identities requesting access for a Cloud Platform resource.\n`members` can have the following values:\n\n* `allUsers`: A special identifier that represents anyone who is\n   on the internet; with or without a Google account.\n\n* `allAuthenticatedUsers`: A special identifier that represents anyone\n   who is authenticated with a Google account or a service account.\n\n* `user:{emailid}`: An email address that represents a specific Google\n   account. For example, `alice@gmail.com` or `joe@example.com`.\n\n\n* `serviceAccount:{emailid}`: An email address that represents a service\n   account. For example, `my-other-app@appspot.gserviceaccount.com`.\n\n* `group:{emailid}`: An email address that represents a Google group.\n   For example, `admins@example.com`.\n\n* `domain:{domain}`: A Google Apps domain name that represents all the\n   users of that domain. For example, `google.com` or `example.com`.\n\n",
@@ -1524,7 +2217,9 @@
           "type": "string"
         }
       },
-      "id": "Binding"
+      "id": "Binding",
+      "description": "Associates `members` with a `role`.",
+      "type": "object"
     },
     "AuthProvider": {
       "description": "Configuration for an anthentication provider, including support for\n[JSON Web Token (JWT)](https://tools.ietf.org/html/draft-ietf-oauth-json-web-token-32).",
@@ -1543,13 +2238,15 @@
           "type": "string"
         },
         "issuer": {
-          "description": "Identifies the principal that issued the JWT. See\nhttps://tools.ietf.org/html/draft-ietf-oauth-json-web-token-32#section-4.1.1\nUsually a URL or an email address.\n\nExample: https://securetoken.google.com\nExample: 1234567-compute@developer.gserviceaccount.com",
-          "type": "string"
+          "type": "string",
+          "description": "Identifies the principal that issued the JWT. See\nhttps://tools.ietf.org/html/draft-ietf-oauth-json-web-token-32#section-4.1.1\nUsually a URL or an email address.\n\nExample: https://securetoken.google.com\nExample: 1234567-compute@developer.gserviceaccount.com"
         }
       },
       "id": "AuthProvider"
     },
     "EnumValue": {
+      "description": "Enum value definition.",
+      "type": "object",
       "properties": {
         "number": {
           "description": "Enum value number.",
@@ -1568,88 +2265,12 @@
           }
         }
       },
-      "id": "EnumValue",
-      "description": "Enum value definition.",
-      "type": "object"
+      "id": "EnumValue"
     },
     "Service": {
+      "description": "`Service` is the root object of Google service configuration schema. It\ndescribes basic information about a service, such as the name and the\ntitle, and delegates other aspects to sub-sections. Each sub-section is\neither a proto message or a repeated proto message that configures a\nspecific aspect, such as auth. See each proto message definition for details.\n\nExample:\n\n    type: google.api.Service\n    config_version: 3\n    name: calendar.googleapis.com\n    title: Google Calendar API\n    apis:\n    - name: google.calendar.v3.Calendar\n    authentication:\n      providers:\n      - id: google_calendar_auth\n        jwks_uri: https://www.googleapis.com/oauth2/v1/certs\n        issuer: https://securetoken.google.com\n      rules:\n      - selector: \"*\"\n        requirements:\n          provider_id: google_calendar_auth",
+      "type": "object",
       "properties": {
-        "authentication": {
-          "$ref": "Authentication",
-          "description": "Auth configuration."
-        },
-        "experimental": {
-          "$ref": "Experimental",
-          "description": "Experimental configuration."
-        },
-        "control": {
-          "$ref": "Control",
-          "description": "Configuration for the service control plane."
-        },
-        "configVersion": {
-          "description": "The version of the service configuration. The config version may\ninfluence interpretation of the configuration, for example, to\ndetermine defaults. This is documented together with applicable\noptions. The current default for the config version itself is `3`.",
-          "format": "uint32",
-          "type": "integer"
-        },
-        "monitoring": {
-          "$ref": "Monitoring",
-          "description": "Monitoring configuration."
-        },
-        "producerProjectId": {
-          "description": "The id of the Google developer project that owns the service.\nMembers of this project can manage the service configuration,\nmanage consumption of the service, etc.",
-          "type": "string"
-        },
-        "systemTypes": {
-          "description": "A list of all proto message types included in this API service.\nIt serves similar purpose as [google.api.Service.types], except that\nthese types are not needed by user-defined APIs. Therefore, they will not\nshow up in the generated discovery doc. This field should only be used\nto define system APIs in ESF.",
-          "type": "array",
-          "items": {
-            "$ref": "Type"
-          }
-        },
-        "visibility": {
-          "$ref": "Visibility",
-          "description": "API visibility configuration."
-        },
-        "name": {
-          "description": "The DNS address at which this service is available,\ne.g. `calendar.googleapis.com`.",
-          "type": "string"
-        },
-        "customError": {
-          "$ref": "CustomError",
-          "description": "Custom error configuration."
-        },
-        "title": {
-          "description": "The product title associated with this service.",
-          "type": "string"
-        },
-        "endpoints": {
-          "description": "Configuration for network endpoints.  If this is empty, then an endpoint\nwith the same name as the service is automatically generated to service all\ndefined APIs.",
-          "type": "array",
-          "items": {
-            "$ref": "Endpoint"
-          }
-        },
-        "apis": {
-          "description": "A list of API interfaces exported by this service. Only the `name` field\nof the google.protobuf.Api needs to be provided by the configuration\nauthor, as the remaining fields will be derived from the IDL during the\nnormalization process. It is an error to specify an API interface here\nwhich cannot be resolved against the associated IDL files.",
-          "type": "array",
-          "items": {
-            "$ref": "Api"
-          }
-        },
-        "logs": {
-          "description": "Defines the logs used by this service.",
-          "type": "array",
-          "items": {
-            "$ref": "LogDescriptor"
-          }
-        },
-        "types": {
-          "description": "A list of all proto message types included in this API service.\nTypes referenced directly or indirectly by the `apis` are\nautomatically included.  Messages which are not referenced but\nshall be included, such as types used by the `google.protobuf.Any` type,\nshould be listed here by name. Example:\n\n    types:\n    - name: google.protobuf.Int32",
-          "type": "array",
-          "items": {
-            "$ref": "Type"
-          }
-        },
         "sourceInfo": {
           "$ref": "SourceInfo",
           "description": "Output only. The source information for this configuration if available."
@@ -1658,14 +2279,14 @@
           "description": "HTTP configuration.",
           "$ref": "Http"
         },
+        "systemParameters": {
+          "$ref": "SystemParameters",
+          "description": "System parameter configuration."
+        },
         "backend": {
           "$ref": "Backend",
           "description": "API backend configuration."
         },
-        "systemParameters": {
-          "description": "System parameter configuration.",
-          "$ref": "SystemParameters"
-        },
         "documentation": {
           "description": "Additional API documentation.",
           "$ref": "Documentation"
@@ -1681,6 +2302,10 @@
           "description": "Logging configuration.",
           "$ref": "Logging"
         },
+        "context": {
+          "description": "Context configuration.",
+          "$ref": "Context"
+        },
         "enums": {
           "description": "A list of all enum types included in this API service.  Enums\nreferenced directly or indirectly by the `apis` are automatically\nincluded.  Enums which are not referenced but shall be included\nshould be listed here by name. Example:\n\n    enums:\n    - name: google.someapi.v1.SomeEnum",
           "type": "array",
@@ -1688,10 +2313,6 @@
             "$ref": "Enum"
           }
         },
-        "context": {
-          "$ref": "Context",
-          "description": "Context configuration."
-        },
         "id": {
           "description": "A unique ID for a specific instance of this message, typically assigned\nby the client for tracking purpose. If empty, the server may choose to\ngenerate one instead.",
           "type": "string"
@@ -1706,11 +2327,85 @@
           "items": {
             "$ref": "MetricDescriptor"
           }
+        },
+        "authentication": {
+          "$ref": "Authentication",
+          "description": "Auth configuration."
+        },
+        "experimental": {
+          "description": "Experimental configuration.",
+          "$ref": "Experimental"
+        },
+        "control": {
+          "$ref": "Control",
+          "description": "Configuration for the service control plane."
+        },
+        "configVersion": {
+          "description": "The version of the service configuration. The config version may\ninfluence interpretation of the configuration, for example, to\ndetermine defaults. This is documented together with applicable\noptions. The current default for the config version itself is `3`.",
+          "format": "uint32",
+          "type": "integer"
+        },
+        "monitoring": {
+          "$ref": "Monitoring",
+          "description": "Monitoring configuration."
+        },
+        "systemTypes": {
+          "description": "A list of all proto message types included in this API service.\nIt serves similar purpose as [google.api.Service.types], except that\nthese types are not needed by user-defined APIs. Therefore, they will not\nshow up in the generated discovery doc. This field should only be used\nto define system APIs in ESF.",
+          "type": "array",
+          "items": {
+            "$ref": "Type"
+          }
+        },
+        "producerProjectId": {
+          "description": "The id of the Google developer project that owns the service.\nMembers of this project can manage the service configuration,\nmanage consumption of the service, etc.",
+          "type": "string"
+        },
+        "visibility": {
+          "$ref": "Visibility",
+          "description": "API visibility configuration."
+        },
+        "name": {
+          "type": "string",
+          "description": "The DNS address at which this service is available,\ne.g. `calendar.googleapis.com`."
+        },
+        "customError": {
+          "$ref": "CustomError",
+          "description": "Custom error configuration."
+        },
+        "title": {
+          "description": "The product title associated with this service.",
+          "type": "string"
+        },
+        "endpoints": {
+          "description": "Configuration for network endpoints.  If this is empty, then an endpoint\nwith the same name as the service is automatically generated to service all\ndefined APIs.",
+          "type": "array",
+          "items": {
+            "$ref": "Endpoint"
+          }
+        },
+        "logs": {
+          "description": "Defines the logs used by this service.",
+          "type": "array",
+          "items": {
+            "$ref": "LogDescriptor"
+          }
+        },
+        "apis": {
+          "description": "A list of API interfaces exported by this service. Only the `name` field\nof the google.protobuf.Api needs to be provided by the configuration\nauthor, as the remaining fields will be derived from the IDL during the\nnormalization process. It is an error to specify an API interface here\nwhich cannot be resolved against the associated IDL files.",
+          "type": "array",
+          "items": {
+            "$ref": "Api"
+          }
+        },
+        "types": {
+          "description": "A list of all proto message types included in this API service.\nTypes referenced directly or indirectly by the `apis` are\nautomatically included.  Messages which are not referenced but\nshall be included, such as types used by the `google.protobuf.Any` type,\nshould be listed here by name. Example:\n\n    types:\n    - name: google.protobuf.Int32",
+          "type": "array",
+          "items": {
+            "$ref": "Type"
+          }
         }
       },
-      "id": "Service",
-      "description": "`Service` is the root object of Google service configuration schema. It\ndescribes basic information about a service, such as the name and the\ntitle, and delegates other aspects to sub-sections. Each sub-section is\neither a proto message or a repeated proto message that configures a\nspecific aspect, such as auth. See each proto message definition for details.\n\nExample:\n\n    type: google.api.Service\n    config_version: 3\n    name: calendar.googleapis.com\n    title: Google Calendar API\n    apis:\n    - name: google.calendar.v3.Calendar\n    authentication:\n      providers:\n      - id: google_calendar_auth\n        jwks_uri: https://www.googleapis.com/oauth2/v1/certs\n        issuer: https://securetoken.google.com\n      rules:\n      - selector: \"*\"\n        requirements:\n          provider_id: google_calendar_auth",
-      "type": "object"
+      "id": "Service"
     },
     "ListOperationsResponse": {
       "description": "The response message for Operations.ListOperations.",
@@ -1733,9 +2428,9 @@
     "OperationMetadata": {
       "properties": {
         "startTime": {
+          "type": "string",
           "description": "The start time of the operation.",
-          "format": "google-datetime",
-          "type": "string"
+          "format": "google-datetime"
         },
         "resourceNames": {
           "description": "The full name of the resources that this operation is directly\nassociated with.",
@@ -1762,6 +2457,7 @@
       "type": "object"
     },
     "CustomHttpPattern": {
+      "type": "object",
       "properties": {
         "path": {
           "description": "The path matched by this custom verb.",
@@ -1773,32 +2469,32 @@
         }
       },
       "id": "CustomHttpPattern",
-      "description": "A custom pattern is used for defining custom HTTP verb.",
-      "type": "object"
+      "description": "A custom pattern is used for defining custom HTTP verb."
     },
     "SystemParameterRule": {
+      "description": "Define a system parameter rule mapping system parameter definitions to\nmethods.",
+      "type": "object",
       "properties": {
+        "selector": {
+          "type": "string",
+          "description": "Selects the methods to which this rule applies. Use '*' to indicate all\nmethods in all APIs.\n\nRefer to selector for syntax details."
+        },
         "parameters": {
           "description": "Define parameters. Multiple names may be defined for a parameter.\nFor a given method call, only one of them should be used. If multiple\nnames are used the behavior is implementation-dependent.\nIf none of the specified names are present the behavior is\nparameter-dependent.",
           "type": "array",
           "items": {
             "$ref": "SystemParameter"
           }
-        },
-        "selector": {
-          "description": "Selects the methods to which this rule applies. Use '*' to indicate all\nmethods in all APIs.\n\nRefer to selector for syntax details.",
-          "type": "string"
         }
       },
-      "id": "SystemParameterRule",
-      "description": "Define a system parameter rule mapping system parameter definitions to\nmethods.",
-      "type": "object"
+      "id": "SystemParameterRule"
     },
     "VisibilityRule": {
+      "type": "object",
       "properties": {
         "restriction": {
-          "description": "A comma-separated list of visibility labels that apply to the `selector`.\nAny of the listed labels can be used to grant the visibility.\n\nIf a rule has multiple labels, removing one of the labels but not all of\nthem can break clients.\n\nExample:\n\n    visibility:\n      rules:\n      - selector: google.calendar.Calendar.EnhancedSearch\n        restriction: GOOGLE_INTERNAL, TRUSTED_TESTER\n\nRemoving GOOGLE_INTERNAL from this restriction will break clients that\nrely on this method and only had access to it through GOOGLE_INTERNAL.",
-          "type": "string"
+          "type": "string",
+          "description": "A comma-separated list of visibility labels that apply to the `selector`.\nAny of the listed labels can be used to grant the visibility.\n\nIf a rule has multiple labels, removing one of the labels but not all of\nthem can break clients.\n\nExample:\n\n    visibility:\n      rules:\n      - selector: google.calendar.Calendar.EnhancedSearch\n        restriction: GOOGLE_INTERNAL, TRUSTED_TESTER\n\nRemoving GOOGLE_INTERNAL from this restriction will break clients that\nrely on this method and only had access to it through GOOGLE_INTERNAL."
         },
         "selector": {
           "description": "Selects methods, messages, fields, enums, etc. to which this rule applies.\n\nRefer to selector for syntax details.",
@@ -1806,10 +2502,11 @@
         }
       },
       "id": "VisibilityRule",
-      "description": "A visibility rule provides visibility configuration for an individual API\nelement.",
-      "type": "object"
+      "description": "A visibility rule provides visibility configuration for an individual API\nelement."
     },
     "HttpRule": {
+      "description": "`HttpRule` defines the mapping of an RPC method to one or more HTTP\nREST APIs.  The mapping determines what portions of the request\nmessage are populated from the path, query parameters, or body of\nthe HTTP request.  The mapping is typically specified as an\n`google.api.http` annotation, see \"google/api/annotations.proto\"\nfor details.\n\nThe mapping consists of a field specifying the path template and\nmethod kind.  The path template can refer to fields in the request\nmessage, as in the example below which describes a REST GET\noperation on a resource collection of messages:\n\n\n    service Messaging {\n      rpc GetMessage(GetMessageRequest) returns (Message) {\n        option (google.api.http).get = \"/v1/messages/{message_id}/{sub.subfield}\";\n      }\n    }\n    message GetMessageRequest {\n      message SubMessage {\n        string subfield = 1;\n      }\n      string message_id = 1; // mapped to the URL\n      SubMessage sub = 2;    // `sub.subfield` is url-mapped\n    }\n    message Message {\n      string text = 1; // content of the resource\n    }\n\nThe same http annotation can alternatively be expressed inside the\n`GRPC API Configuration` YAML file.\n\n    http:\n      rules:\n        - selector: \u003cproto_package_name\u003e.Messaging.GetMessage\n          get: /v1/messages/{message_id}/{sub.subfield}\n\nThis definition enables an automatic, bidrectional mapping of HTTP\nJSON to RPC. Example:\n\nHTTP | RPC\n-----|-----\n`GET /v1/messages/123456/foo`  | `GetMessage(message_id: \"123456\" sub: SubMessage(subfield: \"foo\"))`\n\nIn general, not only fields but also field paths can be referenced\nfrom a path pattern. Fields mapped to the path pattern cannot be\nrepeated and must have a primitive (non-message) type.\n\nAny fields in the request message which are not bound by the path\npattern automatically become (optional) HTTP query\nparameters. Assume the following definition of the request message:\n\n\n    message GetMessageRequest {\n      message SubMessage {\n        string subfield = 1;\n      }\n      string message_id = 1; // mapped to the URL\n      int64 revision = 2;    // becomes a parameter\n      SubMessage sub = 3;    // `sub.subfield` becomes a parameter\n    }\n\n\nThis enables a HTTP JSON to RPC mapping as below:\n\nHTTP | RPC\n-----|-----\n`GET /v1/messages/123456?revision=2&sub.subfield=foo` | `GetMessage(message_id: \"123456\" revision: 2 sub: SubMessage(subfield: \"foo\"))`\n\nNote that fields which are mapped to HTTP parameters must have a\nprimitive type or a repeated primitive type. Message types are not\nallowed. In the case of a repeated type, the parameter can be\nrepeated in the URL, as in `...?param=A&param=B`.\n\nFor HTTP method kinds which allow a request body, the `body` field\nspecifies the mapping. Consider a REST update method on the\nmessage resource collection:\n\n\n    service Messaging {\n      rpc UpdateMessage(UpdateMessageRequest) returns (Message) {\n        option (google.api.http) = {\n          put: \"/v1/messages/{message_id}\"\n          body: \"message\"\n        };\n      }\n    }\n    message UpdateMessageRequest {\n      string message_id = 1; // mapped to the URL\n      Message message = 2;   // mapped to the body\n    }\n\n\nThe following HTTP JSON to RPC mapping is enabled, where the\nrepresentation of the JSON in the request body is determined by\nprotos JSON encoding:\n\nHTTP | RPC\n-----|-----\n`PUT /v1/messages/123456 { \"text\": \"Hi!\" }` | `UpdateMessage(message_id: \"123456\" message { text: \"Hi!\" })`\n\nThe special name `*` can be used in the body mapping to define that\nevery field not bound by the path template should be mapped to the\nrequest body.  This enables the following alternative definition of\nthe update method:\n\n    service Messaging {\n      rpc UpdateMessage(Message) returns (Message) {\n        option (google.api.http) = {\n          put: \"/v1/messages/{message_id}\"\n          body: \"*\"\n        };\n      }\n    }\n    message Message {\n      string message_id = 1;\n      string text = 2;\n    }\n\n\nThe following HTTP JSON to RPC mapping is enabled:\n\nHTTP | RPC\n-----|-----\n`PUT /v1/messages/123456 { \"text\": \"Hi!\" }` | `UpdateMessage(message_id: \"123456\" text: \"Hi!\")`\n\nNote that when using `*` in the body mapping, it is not possible to\nhave HTTP parameters, as all fields not bound by the path end in\nthe body. This makes this option more rarely used in practice of\ndefining REST APIs. The common usage of `*` is in custom methods\nwhich don't use the URL at all for transferring data.\n\nIt is possible to define multiple HTTP methods for one RPC by using\nthe `additional_bindings` option. Example:\n\n    service Messaging {\n      rpc GetMessage(GetMessageRequest) returns (Message) {\n        option (google.api.http) = {\n          get: \"/v1/messages/{message_id}\"\n          additional_bindings {\n            get: \"/v1/users/{user_id}/messages/{message_id}\"\n          }\n        };\n      }\n    }\n    message GetMessageRequest {\n      string message_id = 1;\n      string user_id = 2;\n    }\n\n\nThis enables the following two alternative HTTP JSON to RPC\nmappings:\n\nHTTP | RPC\n-----|-----\n`GET /v1/messages/123456` | `GetMessage(message_id: \"123456\")`\n`GET /v1/users/me/messages/123456` | `GetMessage(user_id: \"me\" message_id: \"123456\")`\n\n# Rules for HTTP mapping\n\nThe rules for mapping HTTP path, query parameters, and body fields\nto the request message are as follows:\n\n1. The `body` field specifies either `*` or a field path, or is\n   omitted. If omitted, it assumes there is no HTTP body.\n2. Leaf fields (recursive expansion of nested messages in the\n   request) can be classified into three types:\n    (a) Matched in the URL template.\n    (b) Covered by body (if body is `*`, everything except (a) fields;\n        else everything under the body field)\n    (c) All other fields.\n3. URL query parameters found in the HTTP request are mapped to (c) fields.\n4. Any body sent with an HTTP request can contain only (b) fields.\n\nThe syntax of the path template is as follows:\n\n    Template = \"/\" Segments [ Verb ] ;\n    Segments = Segment { \"/\" Segment } ;\n    Segment  = \"*\" | \"**\" | LITERAL | Variable ;\n    Variable = \"{\" FieldPath [ \"=\" Segments ] \"}\" ;\n    FieldPath = IDENT { \".\" IDENT } ;\n    Verb     = \":\" LITERAL ;\n\nThe syntax `*` matches a single path segment. It follows the semantics of\n[RFC 6570](https://tools.ietf.org/html/rfc6570) Section 3.2.2 Simple String\nExpansion.\n\nThe syntax `**` matches zero or more path segments. It follows the semantics\nof [RFC 6570](https://tools.ietf.org/html/rfc6570) Section 3.2.3 Reserved\nExpansion. NOTE: it must be the last segment in the path except the Verb.\n\nThe syntax `LITERAL` matches literal text in the URL path.\n\nThe syntax `Variable` matches the entire path as specified by its template;\nthis nested template must not contain further variables. If a variable\nmatches a single path segment, its template may be omitted, e.g. `{var}`\nis equivalent to `{var=*}`.\n\nNOTE: the field paths in variables and in the `body` must not refer to\nrepeated fields or map fields.\n\nUse CustomHttpPattern to specify any HTTP method that is not included in the\n`pattern` field, such as HEAD, or \"*\" to leave the HTTP method unspecified for\na given URL path rule. The wild-card rule is useful for services that provide\ncontent to Web (HTML) clients.",
+      "type": "object",
       "properties": {
         "delete": {
           "description": "Used for deleting a resource.",
@@ -1847,8 +2544,8 @@
           "type": "string"
         },
         "custom": {
-          "$ref": "CustomHttpPattern",
-          "description": "Custom pattern is used for defining custom verbs."
+          "description": "Custom pattern is used for defining custom verbs.",
+          "$ref": "CustomHttpPattern"
         },
         "get": {
           "description": "Used for listing and getting information about resources.",
@@ -1863,13 +2560,9 @@
           "type": "string"
         }
       },
-      "id": "HttpRule",
-      "description": "`HttpRule` defines the mapping of an RPC method to one or more HTTP\nREST APIs.  The mapping determines what portions of the request\nmessage are populated from the path, query parameters, or body of\nthe HTTP request.  The mapping is typically specified as an\n`google.api.http` annotation, see \"google/api/annotations.proto\"\nfor details.\n\nThe mapping consists of a field specifying the path template and\nmethod kind.  The path template can refer to fields in the request\nmessage, as in the example below which describes a REST GET\noperation on a resource collection of messages:\n\n\n    service Messaging {\n      rpc GetMessage(GetMessageRequest) returns (Message) {\n        option (google.api.http).get = \"/v1/messages/{message_id}/{sub.subfield}\";\n      }\n    }\n    message GetMessageRequest {\n      message SubMessage {\n        string subfield = 1;\n      }\n      string message_id = 1; // mapped to the URL\n      SubMessage sub = 2;    // `sub.subfield` is url-mapped\n    }\n    message Message {\n      string text = 1; // content of the resource\n    }\n\nThe same http annotation can alternatively be expressed inside the\n`GRPC API Configuration` YAML file.\n\n    http:\n      rules:\n        - selector: \u003cproto_package_name\u003e.Messaging.GetMessage\n          get: /v1/messages/{message_id}/{sub.subfield}\n\nThis definition enables an automatic, bidrectional mapping of HTTP\nJSON to RPC. Example:\n\nHTTP | RPC\n-----|-----\n`GET /v1/messages/123456/foo`  | `GetMessage(message_id: \"123456\" sub: SubMessage(subfield: \"foo\"))`\n\nIn general, not only fields but also field paths can be referenced\nfrom a path pattern. Fields mapped to the path pattern cannot be\nrepeated and must have a primitive (non-message) type.\n\nAny fields in the request message which are not bound by the path\npattern automatically become (optional) HTTP query\nparameters. Assume the following definition of the request message:\n\n\n    message GetMessageRequest {\n      message SubMessage {\n        string subfield = 1;\n      }\n      string message_id = 1; // mapped to the URL\n      int64 revision = 2;    // becomes a parameter\n      SubMessage sub = 3;    // `sub.subfield` becomes a parameter\n    }\n\n\nThis enables a HTTP JSON to RPC mapping as below:\n\nHTTP | RPC\n-----|-----\n`GET /v1/messages/123456?revision=2&sub.subfield=foo` | `GetMessage(message_id: \"123456\" revision: 2 sub: SubMessage(subfield: \"foo\"))`\n\nNote that fields which are mapped to HTTP parameters must have a\nprimitive type or a repeated primitive type. Message types are not\nallowed. In the case of a repeated type, the parameter can be\nrepeated in the URL, as in `...?param=A&param=B`.\n\nFor HTTP method kinds which allow a request body, the `body` field\nspecifies the mapping. Consider a REST update method on the\nmessage resource collection:\n\n\n    service Messaging {\n      rpc UpdateMessage(UpdateMessageRequest) returns (Message) {\n        option (google.api.http) = {\n          put: \"/v1/messages/{message_id}\"\n          body: \"message\"\n        };\n      }\n    }\n    message UpdateMessageRequest {\n      string message_id = 1; // mapped to the URL\n      Message message = 2;   // mapped to the body\n    }\n\n\nThe following HTTP JSON to RPC mapping is enabled, where the\nrepresentation of the JSON in the request body is determined by\nprotos JSON encoding:\n\nHTTP | RPC\n-----|-----\n`PUT /v1/messages/123456 { \"text\": \"Hi!\" }` | `UpdateMessage(message_id: \"123456\" message { text: \"Hi!\" })`\n\nThe special name `*` can be used in the body mapping to define that\nevery field not bound by the path template should be mapped to the\nrequest body.  This enables the following alternative definition of\nthe update method:\n\n    service Messaging {\n      rpc UpdateMessage(Message) returns (Message) {\n        option (google.api.http) = {\n          put: \"/v1/messages/{message_id}\"\n          body: \"*\"\n        };\n      }\n    }\n    message Message {\n      string message_id = 1;\n      string text = 2;\n    }\n\n\nThe following HTTP JSON to RPC mapping is enabled:\n\nHTTP | RPC\n-----|-----\n`PUT /v1/messages/123456 { \"text\": \"Hi!\" }` | `UpdateMessage(message_id: \"123456\" text: \"Hi!\")`\n\nNote that when using `*` in the body mapping, it is not possible to\nhave HTTP parameters, as all fields not bound by the path end in\nthe body. This makes this option more rarely used in practice of\ndefining REST APIs. The common usage of `*` is in custom methods\nwhich don't use the URL at all for transferring data.\n\nIt is possible to define multiple HTTP methods for one RPC by using\nthe `additional_bindings` option. Example:\n\n    service Messaging {\n      rpc GetMessage(GetMessageRequest) returns (Message) {\n        option (google.api.http) = {\n          get: \"/v1/messages/{message_id}\"\n          additional_bindings {\n            get: \"/v1/users/{user_id}/messages/{message_id}\"\n          }\n        };\n      }\n    }\n    message GetMessageRequest {\n      string message_id = 1;\n      string user_id = 2;\n    }\n\n\nThis enables the following two alternative HTTP JSON to RPC\nmappings:\n\nHTTP | RPC\n-----|-----\n`GET /v1/messages/123456` | `GetMessage(message_id: \"123456\")`\n`GET /v1/users/me/messages/123456` | `GetMessage(user_id: \"me\" message_id: \"123456\")`\n\n# Rules for HTTP mapping\n\nThe rules for mapping HTTP path, query parameters, and body fields\nto the request message are as follows:\n\n1. The `body` field specifies either `*` or a field path, or is\n   omitted. If omitted, it assumes there is no HTTP body.\n2. Leaf fields (recursive expansion of nested messages in the\n   request) can be classified into three types:\n    (a) Matched in the URL template.\n    (b) Covered by body (if body is `*`, everything except (a) fields;\n        else everything under the body field)\n    (c) All other fields.\n3. URL query parameters found in the HTTP request are mapped to (c) fields.\n4. Any body sent with an HTTP request can contain only (b) fields.\n\nThe syntax of the path template is as follows:\n\n    Template = \"/\" Segments [ Verb ] ;\n    Segments = Segment { \"/\" Segment } ;\n    Segment  = \"*\" | \"**\" | LITERAL | Variable ;\n    Variable = \"{\" FieldPath [ \"=\" Segments ] \"}\" ;\n    FieldPath = IDENT { \".\" IDENT } ;\n    Verb     = \":\" LITERAL ;\n\nThe syntax `*` matches a single path segment. It follows the semantics of\n[RFC 6570](https://tools.ietf.org/html/rfc6570) Section 3.2.2 Simple String\nExpansion.\n\nThe syntax `**` matches zero or more path segments. It follows the semantics\nof [RFC 6570](https://tools.ietf.org/html/rfc6570) Section 3.2.3 Reserved\nExpansion. NOTE: it must be the last segment in the path except the Verb.\n\nThe syntax `LITERAL` matches literal text in the URL path.\n\nThe syntax `Variable` matches the entire path as specified by its template;\nthis nested template must not contain further variables. If a variable\nmatches a single path segment, its template may be omitted, e.g. `{var}`\nis equivalent to `{var=*}`.\n\nNOTE: the field paths in variables and in the `body` must not refer to\nrepeated fields or map fields.\n\nUse CustomHttpPattern to specify any HTTP method that is not included in the\n`pattern` field, such as HEAD, or \"*\" to leave the HTTP method unspecified for\na given URL path rule. The wild-card rule is useful for services that provide\ncontent to Web (HTML) clients.",
-      "type": "object"
+      "id": "HttpRule"
     },
     "MonitoringDestination": {
-      "description": "Configuration of a specific monitoring destination (the producer project\nor the consumer project).",
-      "type": "object",
       "properties": {
         "monitoredResource": {
           "description": "The monitored resource type. The type must be defined in\nService.monitored_resources section.",
@@ -1883,7 +2576,9 @@
           }
         }
       },
-      "id": "MonitoringDestination"
+      "id": "MonitoringDestination",
+      "description": "Configuration of a specific monitoring destination (the producer project\nor the consumer project).",
+      "type": "object"
     },
     "Visibility": {
       "description": "`Visibility` defines restrictions for the visibility of service\nelements.  Restrictions are specified using visibility labels\n(e.g., TRUSTED_TESTER) that are elsewhere linked to users and projects.\n\nUsers and projects can have access to more than one visibility label. The\neffective visibility for multiple labels is the union of each label's\nelements, plus any unrestricted elements.\n\nIf an element and its parents have no restrictions, visibility is\nunconditionally granted.\n\nExample:\n\n    visibility:\n      rules:\n      - selector: google.calendar.Calendar.EnhancedSearch\n        restriction: TRUSTED_TESTER\n      - selector: google.calendar.Calendar.Delegate\n        restriction: GOOGLE_INTERNAL\n\nHere, all methods are publicly visible except for the restricted methods\nEnhancedSearch and Delegate.",
@@ -1899,50 +2594,7 @@
       },
       "id": "Visibility"
     },
-    "ConfigChange": {
-      "properties": {
-        "oldValue": {
-          "description": "Value of the changed object in the old Service configuration,\nin 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\npossible impact of this change.",
-          "type": "array",
-          "items": {
-            "$ref": "Advice"
-          }
-        },
-        "newValue": {
-          "description": "Value of the changed object in the new Service configuration,\nin JSON format. This field will not be populated if ChangeType == REMOVED.",
-          "type": "string"
-        },
-        "changeType": {
-          "enum": [
-            "CHANGE_TYPE_UNSPECIFIED",
-            "ADDED",
-            "REMOVED",
-            "MODIFIED"
-          ],
-          "description": "The type for this change, either ADDED, REMOVED, or MODIFIED.",
-          "type": "string",
-          "enumDescriptions": [
-            "No value was provided.",
-            "The changed object exists in the 'new' service configuration, but not\nin the 'old' service configuration.",
-            "The changed object exists in the 'old' service configuration, but not\nin the 'new' service configuration.",
-            "The changed object exists in both service configurations, but its value\nis different."
-          ]
-        },
-        "element": {
-          "description": "Object hierarchy path to the change, with levels separated by a '.'\ncharacter. For repeated fields, an applicable unique identifier field is\nused for the index (usually selector, name, or id). For maps, the term\n'key' is used. If the field has no unique identifier, the numeric index\nis used.\nExamples:\n- visibility.rules[selector==\"google.LibraryService.CreateBook\"].restriction\n- quota.metric_rules[selector==\"google\"].metric_costs[key==\"reads\"].value\n- logging.producer_destinations[0]",
-          "type": "string"
-        }
-      },
-      "id": "ConfigChange",
-      "description": "Output generated from semantically comparing two versions of a service\nconfiguration.\n\nIncludes detailed information about a field that have changed with\napplicable advice about potential consequences for the change, such as\nbackwards-incompatibility.",
-      "type": "object"
-    },
     "SystemParameters": {
-      "description": "### System parameter configuration\n\nA system parameter is a special kind of parameter defined by the API\nsystem, not by an individual API. It is typically mapped to an HTTP header\nand/or a URL query parameter. This configuration specifies which methods\nchange the names of the system parameters.",
       "type": "object",
       "properties": {
         "rules": {
@@ -1953,24 +2605,63 @@
           }
         }
       },
-      "id": "SystemParameters"
+      "id": "SystemParameters",
+      "description": "### System parameter configuration\n\nA system parameter is a special kind of parameter defined by the API\nsystem, not by an individual API. It is typically mapped to an HTTP header\nand/or a URL query parameter. This configuration specifies which methods\nchange the names of the system parameters."
+    },
+    "ConfigChange": {
+      "description": "Output generated from semantically comparing two versions of a service\nconfiguration.\n\nIncludes detailed information about a field that have changed with\napplicable advice about potential consequences for the change, such as\nbackwards-incompatibility.",
+      "type": "object",
+      "properties": {
+        "newValue": {
+          "description": "Value of the changed object in the new Service configuration,\nin JSON format. This field will not be populated if ChangeType == REMOVED.",
+          "type": "string"
+        },
+        "changeType": {
+          "description": "The type for this change, either ADDED, REMOVED, or MODIFIED.",
+          "type": "string",
+          "enumDescriptions": [
+            "No value was provided.",
+            "The changed object exists in the 'new' service configuration, but not\nin the 'old' service configuration.",
+            "The changed object exists in the 'old' service configuration, but not\nin the 'new' service configuration.",
+            "The changed object exists in both service configurations, but its value\nis different."
+          ],
+          "enum": [
+            "CHANGE_TYPE_UNSPECIFIED",
+            "ADDED",
+            "REMOVED",
+            "MODIFIED"
+          ]
+        },
+        "element": {
+          "description": "Object hierarchy path to the change, with levels separated by a '.'\ncharacter. For repeated fields, an applicable unique identifier field is\nused for the index (usually selector, name, or id). For maps, the term\n'key' is used. If the field has no unique identifier, the numeric index\nis used.\nExamples:\n- visibility.rules[selector==\"google.LibraryService.CreateBook\"].restriction\n- quota.metric_rules[selector==\"google\"].metric_costs[key==\"reads\"].value\n- logging.producer_destinations[0]",
+          "type": "string"
+        },
+        "oldValue": {
+          "description": "Value of the changed object in the old Service configuration,\nin 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\npossible impact of this change.",
+          "type": "array",
+          "items": {
+            "$ref": "Advice"
+          }
+        }
+      },
+      "id": "ConfigChange"
     },
     "Rollout": {
       "description": "A rollout resource that defines how service configuration versions are pushed\nto control plane systems. Typically, you create a new version of the\nservice config, and then create a Rollout to push the service config.",
       "type": "object",
       "properties": {
-        "rolloutId": {
-          "description": "Optional unique identifier of this Rollout. Only lower case letters, digits\n and '-' are allowed.\n\nIf not specified by client, the server will generate one. The generated id\nwill have the form of \u003cdate\u003e\u003crevision number\u003e, where \"date\" is the create\ndate in ISO 8601 format.  \"revision number\" is a monotonically increasing\npositive number that is reset every day for each service.\nAn example of the generated rollout_id is '2016-02-16r1'",
-          "type": "string"
-        },
         "deleteServiceStrategy": {
           "$ref": "DeleteServiceStrategy",
           "description": "The strategy associated with a rollout to delete a `ManagedService`.\nReadonly."
         },
         "createTime": {
+          "type": "string",
           "description": "Creation time of the rollout. Readonly.",
-          "format": "google-datetime",
-          "type": "string"
+          "format": "google-datetime"
         },
         "status": {
           "enumDescriptions": [
@@ -1996,69 +2687,75 @@
           "description": "The name of the service associated with this Rollout.",
           "type": "string"
         },
-        "trafficPercentStrategy": {
-          "description": "Google Service Control selects service configurations based on\ntraffic percentage.",
-          "$ref": "TrafficPercentStrategy"
-        },
         "createdBy": {
           "description": "The user who created the Rollout. Readonly.",
           "type": "string"
+        },
+        "trafficPercentStrategy": {
+          "$ref": "TrafficPercentStrategy",
+          "description": "Google Service Control selects service configurations based on\ntraffic percentage."
+        },
+        "rolloutId": {
+          "description": "Optional unique identifier of this Rollout. Only lower case letters, digits\n and '-' are allowed.\n\nIf not specified by client, the server will generate one. The generated id\nwill have the form of \u003cdate\u003e\u003crevision number\u003e, where \"date\" is the create\ndate in ISO 8601 format.  \"revision number\" is a monotonically increasing\npositive number that is reset every day for each service.\nAn example of the generated rollout_id is '2016-02-16r1'",
+          "type": "string"
         }
       },
       "id": "Rollout"
     },
     "GenerateConfigReportRequest": {
-      "properties": {
-        "oldConfig": {
-          "additionalProperties": {
-            "description": "Properties of the object. Contains field @type with type URL.",
-            "type": "any"
-          },
-          "description": "Service configuration against which the comparison will be done.\nFor this version of API, the supported types are\ngoogle.api.servicemanagement.v1.ConfigRef,\ngoogle.api.servicemanagement.v1.ConfigSource,\nand google.api.Service",
-          "type": "object"
-        },
-        "newConfig": {
-          "additionalProperties": {
-            "description": "Properties of the object. Contains field @type with type URL.",
-            "type": "any"
-          },
-          "description": "Service configuration for which we want to generate the report.\nFor this version of API, the supported types are\ngoogle.api.servicemanagement.v1.ConfigRef,\ngoogle.api.servicemanagement.v1.ConfigSource,\nand google.api.Service",
-          "type": "object"
-        }
-      },
-      "id": "GenerateConfigReportRequest",
       "description": "Request message for GenerateConfigReport method.",
-      "type": "object"
-    },
-    "SetIamPolicyRequest": {
-      "description": "Request message for `SetIamPolicy` method.",
       "type": "object",
       "properties": {
+        "oldConfig": {
+          "description": "Service configuration against which the comparison will be done.\nFor this version of API, the supported types are\ngoogle.api.servicemanagement.v1.ConfigRef,\ngoogle.api.servicemanagement.v1.ConfigSource,\nand google.api.Service",
+          "type": "object",
+          "additionalProperties": {
+            "description": "Properties of the object. Contains field @type with type URL.",
+            "type": "any"
+          }
+        },
+        "newConfig": {
+          "description": "Service configuration for which we want to generate the report.\nFor this version of API, the supported types are\ngoogle.api.servicemanagement.v1.ConfigRef,\ngoogle.api.servicemanagement.v1.ConfigSource,\nand google.api.Service",
+          "type": "object",
+          "additionalProperties": {
+            "description": "Properties of the object. Contains field @type with type URL.",
+            "type": "any"
+          }
+        }
+      },
+      "id": "GenerateConfigReportRequest"
+    },
+    "SetIamPolicyRequest": {
+      "properties": {
+        "policy": {
+          "description": "REQUIRED: The complete policy to be applied to the `resource`. The size of\nthe policy is limited to a few 10s of KB. An empty policy is a\nvalid policy but certain Cloud Platform services (such as Projects)\nmight reject them.",
+          "$ref": "Policy"
+        },
         "updateMask": {
           "description": "OPTIONAL: A FieldMask specifying which fields of the policy to modify. Only\nthe fields in the mask will be modified. If no mask is provided, the\nfollowing default mask is used:\npaths: \"bindings, etag\"\nThis field is only used by Cloud IAM.",
           "format": "google-fieldmask",
           "type": "string"
-        },
-        "policy": {
-          "$ref": "Policy",
-          "description": "REQUIRED: The complete policy to be applied to the `resource`. The size of\nthe policy is limited to a few 10s of KB. An empty policy is a\nvalid policy but certain Cloud Platform services (such as Projects)\nmight reject them."
         }
       },
-      "id": "SetIamPolicyRequest"
+      "id": "SetIamPolicyRequest",
+      "description": "Request message for `SetIamPolicy` method.",
+      "type": "object"
+    },
+    "DeleteServiceStrategy": {
+      "description": "Strategy used to delete a service. This strategy is a placeholder only\nused by the system generated rollout to delete a service.",
+      "type": "object",
+      "properties": {},
+      "id": "DeleteServiceStrategy"
     },
     "Step": {
       "description": "Represents the status of one operation step.",
       "type": "object",
       "properties": {
+        "description": {
+          "description": "The short description of the step.",
+          "type": "string"
+        },
         "status": {
-          "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.",
-            "The operation or step has completed with cancellation."
-          ],
           "enum": [
             "STATUS_UNSPECIFIED",
             "DONE",
@@ -2068,22 +2765,22 @@
             "CANCELLED"
           ],
           "description": "The status code.",
-          "type": "string"
-        },
-        "description": {
-          "description": "The short description of the step.",
-          "type": "string"
+          "type": "string",
+          "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.",
+            "The operation or step has completed with cancellation."
+          ]
         }
       },
       "id": "Step"
     },
-    "DeleteServiceStrategy": {
-      "description": "Strategy used to delete a service. This strategy is a placeholder only\nused by the system generated rollout to delete a service.",
-      "type": "object",
-      "properties": {},
-      "id": "DeleteServiceStrategy"
-    },
     "LoggingDestination": {
+      "description": "Configuration of a specific logging destination (the producer project\nor the consumer project).",
+      "type": "object",
       "properties": {
         "logs": {
           "description": "Names of the logs to be sent to this destination. Each name must\nbe defined in the Service.logs section. If the log name is\nnot a domain scoped name, it will be automatically prefixed with\nthe service name followed by \"/\".",
@@ -2097,28 +2794,26 @@
           "type": "string"
         }
       },
-      "id": "LoggingDestination",
-      "description": "Configuration of a specific logging destination (the producer project\nor the consumer project).",
-      "type": "object"
+      "id": "LoggingDestination"
     },
     "Option": {
-      "description": "A protocol buffer option, which can be attached to a message, field,\nenumeration, etc.",
-      "type": "object",
       "properties": {
         "value": {
+          "description": "The option's value packed in an Any message. If the value is a primitive,\nthe corresponding wrapper type defined in google/protobuf/wrappers.proto\nshould be used. If the value is an enum, it should be stored as an int32\nvalue using the google.protobuf.Int32Value type.",
+          "type": "object",
           "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,\nthe corresponding wrapper type defined in google/protobuf/wrappers.proto\nshould be used. If the value is an enum, it should be stored as an int32\nvalue using the google.protobuf.Int32Value type.",
-          "type": "object"
+          }
         },
         "name": {
           "description": "The option's name. For protobuf built-in options (options defined in\ndescriptor.proto), this is the short name. For example, `\"map_entry\"`.\nFor custom options, it should be the fully-qualified name. For example,\n`\"google.api.http\"`.",
           "type": "string"
         }
       },
-      "id": "Option"
+      "id": "Option",
+      "description": "A protocol buffer option, which can be attached to a message, field,\nenumeration, etc.",
+      "type": "object"
     },
     "Logging": {
       "description": "Logging configuration of the service.\n\nThe following example shows how to configure logs to be sent to the\nproducer and consumer projects. In the example, the `activity_history`\nlog is sent to both the producer and consumer projects, whereas the\n`purchase_history` log is only sent to the producer project.\n\n    monitored_resources:\n    - type: library.googleapis.com/branch\n      labels:\n      - key: /city\n        description: The city where the library branch is located in.\n      - key: /name\n        description: The name of the branch.\n    logs:\n    - name: activity_history\n      labels:\n      - key: /customer_id\n    - name: purchase_history\n    logging:\n      producer_destinations:\n      - monitored_resource: library.googleapis.com/branch\n        logs:\n        - activity_history\n        - purchase_history\n      consumer_destinations:\n      - monitored_resource: library.googleapis.com/branch\n        logs:\n        - activity_history",
@@ -2167,20 +2862,20 @@
           "type": "string"
         },
         "requestStreaming": {
-          "description": "If true, the request is streamed.",
-          "type": "boolean"
+          "type": "boolean",
+          "description": "If true, the request is streamed."
         },
         "syntax": {
+          "enumDescriptions": [
+            "Syntax `proto2`.",
+            "Syntax `proto3`."
+          ],
           "enum": [
             "SYNTAX_PROTO2",
             "SYNTAX_PROTO3"
           ],
           "description": "The source syntax of this method.",
-          "type": "string",
-          "enumDescriptions": [
-            "Syntax `proto2`.",
-            "Syntax `proto3`."
-          ]
+          "type": "string"
         }
       },
       "id": "Method",
@@ -2188,49 +2883,95 @@
       "type": "object"
     },
     "ListServiceRolloutsResponse": {
+      "description": "Response message for ListServiceRollouts method.",
+      "type": "object",
       "properties": {
-        "nextPageToken": {
-          "description": "The token of the next page of results.",
-          "type": "string"
-        },
         "rollouts": {
           "description": "The list of rollout resources.",
           "type": "array",
           "items": {
             "$ref": "Rollout"
           }
+        },
+        "nextPageToken": {
+          "description": "The token of the next page of results.",
+          "type": "string"
         }
       },
-      "id": "ListServiceRolloutsResponse",
-      "description": "Response message for ListServiceRollouts method.",
-      "type": "object"
+      "id": "ListServiceRolloutsResponse"
     },
     "ConfigRef": {
+      "description": "Represents a service configuration with its name and id.",
+      "type": "object",
       "properties": {
         "name": {
           "description": "Resource name of a service config. It must have the following\nformat: \"services/{service name}/configs/{config id}\".",
           "type": "string"
         }
       },
-      "id": "ConfigRef",
-      "description": "Represents a service configuration with its name and id.",
-      "type": "object"
+      "id": "ConfigRef"
     },
     "Mixin": {
       "description": "Declares an API to be included in this API. The including API must\nredeclare all the methods from the included API, but documentation\nand options are inherited as follows:\n\n- If after comment and whitespace stripping, the documentation\n  string of the redeclared method is empty, it will be inherited\n  from the original method.\n\n- Each annotation belonging to the service config (http,\n  visibility) which is not set in the redeclared method will be\n  inherited.\n\n- If an http annotation is inherited, the path pattern will be\n  modified as follows. Any version prefix will be replaced by the\n  version of the including API plus the root path if specified.\n\nExample of a simple mixin:\n\n    package google.acl.v1;\n    service AccessControl {\n      // Get the underlying ACL object.\n      rpc GetAcl(GetAclRequest) returns (Acl) {\n        option (google.api.http).get = \"/v1/{resource=**}:getAcl\";\n      }\n    }\n\n    package google.storage.v2;\n    service Storage {\n      //       rpc GetAcl(GetAclRequest) returns (Acl);\n\n      // Get a data record.\n      rpc GetData(GetDataRequest) returns (Data) {\n        option (google.api.http).get = \"/v2/{resource=**}\";\n      }\n    }\n\nExample of a mixin configuration:\n\n    apis:\n    - name: google.storage.v2.Storage\n      mixins:\n      - name: google.acl.v1.AccessControl\n\nThe mixin construct implies that all methods in `AccessControl` are\nalso declared with same name and request/response types in\n`Storage`. A documentation generator or annotation processor will\nsee the effective `Storage.GetAcl` method after inherting\ndocumentation and annotations as follows:\n\n    service Storage {\n      // Get the underlying ACL object.\n      rpc GetAcl(GetAclRequest) returns (Acl) {\n        option (google.api.http).get = \"/v2/{resource=**}:getAcl\";\n      }\n      ...\n    }\n\nNote how the version in the path pattern changed from `v1` to `v2`.\n\nIf the `root` field in the mixin is specified, it should be a\nrelative path under which inherited HTTP paths are placed. Example:\n\n    apis:\n    - name: google.storage.v2.Storage\n      mixins:\n      - name: google.acl.v1.AccessControl\n        root: acls\n\nThis implies the following inherited HTTP annotation:\n\n    service Storage {\n      // Get the underlying ACL object.\n      rpc GetAcl(GetAclRequest) returns (Acl) {\n        option (google.api.http).get = \"/v2/acls/{resource=**}:getAcl\";\n      }\n      ...\n    }",
       "type": "object",
       "properties": {
-        "name": {
-          "description": "The fully qualified name of the API which is included.",
-          "type": "string"
-        },
         "root": {
           "description": "If non-empty specifies a path under which inherited HTTP paths\nare rooted.",
           "type": "string"
+        },
+        "name": {
+          "description": "The fully qualified name of the API which is included.",
+          "type": "string"
         }
       },
       "id": "Mixin"
     },
+    "FlowOperationMetadata": {
+      "description": "The metadata associated with a long running operation resource.",
+      "type": "object",
+      "properties": {
+        "isPersisted": {
+          "description": "Is the update for the operation persisted?",
+          "type": "boolean"
+        },
+        "flowName": {
+          "description": "The name of the top-level flow corresponding to this operation.\nMust be equal to the \"name\" field for a FlowName enum.",
+          "type": "string"
+        },
+        "resourceNames": {
+          "description": "The full name of the resources that this flow is directly associated with.",
+          "type": "array",
+          "items": {
+            "type": "string"
+          }
+        },
+        "deadline": {
+          "description": "Deadline for the flow to complete, to prevent orphaned Operations.\n\nIf the flow has not completed by this time, it may be terminated by\nthe engine, or force-failed by Operation lookup.\n\nNote that this is not a hard deadline after which the Flow will\ndefinitely be failed, rather it is a deadline after which it is reasonable\nto suspect a problem and other parts of the system may kill operation\nto ensure we don't have orphans.\nsee also: go/prevent-orphaned-operations",
+          "format": "google-datetime",
+          "type": "string"
+        },
+        "cancelState": {
+          "enumDescriptions": [
+            "Default state, cancellable but not cancelled.",
+            "The operation has proceeded past the point of no return and cannot\nbe cancelled.",
+            "The operation has been cancelled, work should cease\nand any needed rollback steps executed."
+          ],
+          "enum": [
+            "RUNNING",
+            "UNCANCELLABLE",
+            "CANCELLED"
+          ],
+          "description": "The state of the operation with respect to cancellation.",
+          "type": "string"
+        },
+        "startTime": {
+          "description": "The start time of the operation.",
+          "format": "google-datetime",
+          "type": "string"
+        }
+      },
+      "id": "FlowOperationMetadata"
+    },
     "CustomError": {
       "description": "Customize service error responses.  For example, list any service\nspecific protobuf types that can appear in error detail lists of\nerror responses.\n\nExample:\n\n    custom_error:\n      types:\n      - google.foo.v1.CustomError\n      - google.foo.v1.AnotherError",
       "type": "object",
@@ -2253,6 +2994,8 @@
       "id": "CustomError"
     },
     "CounterOptions": {
+      "description": "Options for counters",
+      "type": "object",
       "properties": {
         "metric": {
           "description": "The metric to update.",
@@ -2263,9 +3006,7 @@
           "type": "string"
         }
       },
-      "id": "CounterOptions",
-      "description": "Options for counters",
-      "type": "object"
+      "id": "CounterOptions"
     },
     "Http": {
       "description": "Defines the HTTP configuration for a service. It contains a list of\nHttpRule, each specifying the mapping of an RPC method\nto one or more HTTP REST API methods.",
@@ -2288,8 +3029,8 @@
           "type": "array",
           "items": {
             "additionalProperties": {
-              "description": "Properties of the object. Contains field @type with type URL.",
-              "type": "any"
+              "type": "any",
+              "description": "Properties of the object. Contains field @type with type URL."
             },
             "type": "object"
           }
@@ -2298,728 +3039,19 @@
       "id": "SourceInfo",
       "description": "Source information used to create a Service Config",
       "type": "object"
-    },
-    "Control": {
-      "properties": {
-        "environment": {
-          "description": "The service control environment to use. If empty, no control plane\nfeature (like quota and billing) will be enabled.",
-          "type": "string"
-        }
-      },
-      "id": "Control",
-      "description": "Selects and configures the service controller used by the service.  The\nservice controller handles features like abuse, quota, billing, logging,\nmonitoring, etc.",
-      "type": "object"
-    },
-    "SystemParameter": {
-      "description": "Define a parameter's name and location. The parameter may be passed as either\nan HTTP header or a URL query parameter, and if both are passed the behavior\nis implementation-dependent.",
-      "type": "object",
-      "properties": {
-        "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\nsensitive.",
-          "type": "string"
-        },
-        "httpHeader": {
-          "description": "Define the HTTP header name to use for the parameter. It is case\ninsensitive.",
-          "type": "string"
-        }
-      },
-      "id": "SystemParameter"
-    },
-    "Field": {
-      "description": "A single field of a message type.",
-      "type": "object",
-      "properties": {
-        "kind": {
-          "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"
-          ],
-          "description": "The field type.",
-          "type": "string",
-          "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."
-          ]
-        },
-        "jsonName": {
-          "description": "The field JSON name.",
-          "type": "string"
-        },
-        "options": {
-          "description": "The protocol buffer options.",
-          "type": "array",
-          "items": {
-            "$ref": "Option"
-          }
-        },
-        "oneofIndex": {
-          "description": "The index of the field type in `Type.oneofs`, for message or enumeration\ntypes. The first type has index 1; zero means the type is not in the list.",
-          "format": "int32",
-          "type": "integer"
-        },
-        "packed": {
-          "description": "Whether to use alternative packed wire representation.",
-          "type": "boolean"
-        },
-        "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"
-          ],
-          "description": "The field cardinality.",
-          "type": "string"
-        },
-        "defaultValue": {
-          "description": "The string value of the default value of this field. Proto2 syntax only.",
-          "type": "string"
-        },
-        "name": {
-          "description": "The field name.",
-          "type": "string"
-        },
-        "typeUrl": {
-          "description": "The field type URL, without the scheme, for message or enumeration\ntypes. Example: `\"type.googleapis.com/google.protobuf.Timestamp\"`.",
-          "type": "string"
-        },
-        "number": {
-          "description": "The field number.",
-          "format": "int32",
-          "type": "integer"
-        }
-      },
-      "id": "Field"
-    },
-    "Monitoring": {
-      "description": "Monitoring configuration of the service.\n\nThe example below shows how to configure monitored resources and metrics\nfor monitoring. In the example, a monitored resource and two metrics are\ndefined. The `library.googleapis.com/book/returned_count` metric is sent\nto both producer and consumer projects, whereas the\n`library.googleapis.com/book/overdue_count` metric is only sent to the\nconsumer project.\n\n    monitored_resources:\n    - type: library.googleapis.com/branch\n      labels:\n      - key: /city\n        description: The city where the library branch is located in.\n      - key: /name\n        description: The name of the branch.\n    metrics:\n    - name: library.googleapis.com/book/returned_count\n      metric_kind: DELTA\n      value_type: INT64\n      labels:\n      - key: /customer_id\n    - name: library.googleapis.com/book/overdue_count\n      metric_kind: GAUGE\n      value_type: INT64\n      labels:\n      - key: /customer_id\n    monitoring:\n      producer_destinations:\n      - monitored_resource: library.googleapis.com/branch\n        metrics:\n        - library.googleapis.com/book/returned_count\n      consumer_destinations:\n      - monitored_resource: library.googleapis.com/branch\n        metrics:\n        - library.googleapis.com/book/returned_count\n        - library.googleapis.com/book/overdue_count",
-      "type": "object",
-      "properties": {
-        "consumerDestinations": {
-          "description": "Monitoring configurations for sending metrics to the consumer project.\nThere can be multiple consumer destinations, each one must have a\ndifferent monitored resource type. A metric can be used in at most\none consumer destination.",
-          "type": "array",
-          "items": {
-            "$ref": "MonitoringDestination"
-          }
-        },
-        "producerDestinations": {
-          "description": "Monitoring configurations for sending metrics to the producer project.\nThere can be multiple producer destinations, each one must have a\ndifferent monitored resource type. A metric can be used in at most\none producer destination.",
-          "type": "array",
-          "items": {
-            "$ref": "MonitoringDestination"
-          }
-        }
-      },
-      "id": "Monitoring"
-    },
-    "TestIamPermissionsRequest": {
-      "properties": {
-        "permissions": {
-          "description": "The set of permissions to check for the `resource`. Permissions with\nwildcards (such as '*' or 'storage.*') are not allowed. For more\ninformation see\n[IAM Overview](https://cloud.google.com/iam/docs/overview#permissions).",
-          "type": "array",
-          "items": {
-            "type": "string"
-          }
-        }
-      },
-      "id": "TestIamPermissionsRequest",
-      "description": "Request message for `TestIamPermissions` method.",
-      "type": "object"
-    },
-    "Enum": {
-      "properties": {
-        "sourceContext": {
-          "description": "The source context.",
-          "$ref": "SourceContext"
-        },
-        "syntax": {
-          "enumDescriptions": [
-            "Syntax `proto2`.",
-            "Syntax `proto3`."
-          ],
-          "enum": [
-            "SYNTAX_PROTO2",
-            "SYNTAX_PROTO3"
-          ],
-          "description": "The source syntax.",
-          "type": "string"
-        },
-        "name": {
-          "description": "Enum type name.",
-          "type": "string"
-        },
-        "enumvalue": {
-          "description": "Enum value definitions.",
-          "type": "array",
-          "items": {
-            "$ref": "EnumValue"
-          }
-        },
-        "options": {
-          "description": "Protocol buffer options.",
-          "type": "array",
-          "items": {
-            "$ref": "Option"
-          }
-        }
-      },
-      "id": "Enum",
-      "description": "Enum type definition.",
-      "type": "object"
-    },
-    "LabelDescriptor": {
-      "properties": {
-        "valueType": {
-          "enum": [
-            "STRING",
-            "BOOL",
-            "INT64"
-          ],
-          "description": "The type of data that can be assigned to the label.",
-          "type": "string",
-          "enumDescriptions": [
-            "A variable-length string. This is the default.",
-            "Boolean; true or false.",
-            "A 64-bit signed integer."
-          ]
-        },
-        "key": {
-          "description": "The label key.",
-          "type": "string"
-        },
-        "description": {
-          "description": "A human-readable description for the label.",
-          "type": "string"
-        }
-      },
-      "id": "LabelDescriptor",
-      "description": "A description of a label.",
-      "type": "object"
-    },
-    "Diagnostic": {
-      "properties": {
-        "kind": {
-          "enum": [
-            "WARNING",
-            "ERROR"
-          ],
-          "description": "The kind of diagnostic information provided.",
-          "type": "string",
-          "enumDescriptions": [
-            "Warnings and errors",
-            "Only errors"
-          ]
-        },
-        "message": {
-          "description": "Message describing the error or warning.",
-          "type": "string"
-        },
-        "location": {
-          "description": "File name and line number of the error or warning.",
-          "type": "string"
-        }
-      },
-      "id": "Diagnostic",
-      "description": "Represents a diagnostic message (error or warning)",
-      "type": "object"
-    },
-    "EnableServiceRequest": {
-      "description": "Request message for EnableService method.",
-      "type": "object",
-      "properties": {
-        "consumerId": {
-          "description": "The identity of consumer resource which service enablement will be\napplied to.\n\nThe Google Service Management implementation accepts the following\nforms:\n- \"project:\u003cproject_id\u003e\"\n\nNote: this is made compatible with\ngoogle.api.servicecontrol.v1.Operation.consumer_id.",
-          "type": "string"
-        }
-      },
-      "id": "EnableServiceRequest"
-    },
-    "Type": {
-      "description": "A protocol buffer message type.",
-      "type": "object",
-      "properties": {
-        "syntax": {
-          "enum": [
-            "SYNTAX_PROTO2",
-            "SYNTAX_PROTO3"
-          ],
-          "description": "The source syntax.",
-          "type": "string",
-          "enumDescriptions": [
-            "Syntax `proto2`.",
-            "Syntax `proto3`."
-          ]
-        },
-        "sourceContext": {
-          "$ref": "SourceContext",
-          "description": "The source context."
-        },
-        "options": {
-          "description": "The protocol buffer options.",
-          "type": "array",
-          "items": {
-            "$ref": "Option"
-          }
-        },
-        "fields": {
-          "description": "The list of fields.",
-          "type": "array",
-          "items": {
-            "$ref": "Field"
-          }
-        },
-        "name": {
-          "description": "The fully qualified message name.",
-          "type": "string"
-        },
-        "oneofs": {
-          "description": "The list of types appearing in `oneof` definitions in this type.",
-          "type": "array",
-          "items": {
-            "type": "string"
-          }
-        }
-      },
-      "id": "Type"
-    },
-    "GenerateConfigReportResponse": {
-      "properties": {
-        "id": {
-          "description": "ID of the service configuration this report belongs to.",
-          "type": "string"
-        },
-        "diagnostics": {
-          "description": "Errors / Linter warnings associated with the service definition this\nreport\nbelongs to.",
-          "type": "array",
-          "items": {
-            "$ref": "Diagnostic"
-          }
-        },
-        "serviceName": {
-          "description": "Name of the service this report belongs to.",
-          "type": "string"
-        },
-        "changeReports": {
-          "description": "list of ChangeReport, each corresponding to comparison between two\nservice configurations.",
-          "type": "array",
-          "items": {
-            "$ref": "ChangeReport"
-          }
-        }
-      },
-      "id": "GenerateConfigReportResponse",
-      "description": "Response message for GenerateConfigReport method.",
-      "type": "object"
-    },
-    "ListServiceConfigsResponse": {
-      "description": "Response message for ListServiceConfigs method.",
-      "type": "object",
-      "properties": {
-        "serviceConfigs": {
-          "description": "The list of service configuration resources.",
-          "type": "array",
-          "items": {
-            "$ref": "Service"
-          }
-        },
-        "nextPageToken": {
-          "description": "The token of the next page of results.",
-          "type": "string"
-        }
-      },
-      "id": "ListServiceConfigsResponse"
-    },
-    "Experimental": {
-      "description": "Experimental service configuration. These configuration options can\nonly be used by whitelisted users.",
-      "type": "object",
-      "properties": {
-        "authorization": {
-          "description": "Authorization configuration.",
-          "$ref": "AuthorizationConfig"
-        }
-      },
-      "id": "Experimental"
-    },
-    "Backend": {
-      "properties": {
-        "rules": {
-          "description": "A list of API backend rules that apply to individual API methods.\n\n**NOTE:** All service configuration rules follow \"last one wins\" order.",
-          "type": "array",
-          "items": {
-            "$ref": "BackendRule"
-          }
-        }
-      },
-      "id": "Backend",
-      "description": "`Backend` defines the backend configuration for a service.",
-      "type": "object"
-    },
-    "AuditConfig": {
-      "properties": {
-        "service": {
-          "description": "Specifies a service that will be enabled for audit logging.\nFor example, `resourcemanager`, `storage`, `compute`.\n`allServices` is a special value that covers all services.",
-          "type": "string"
-        },
-        "auditLogConfigs": {
-          "description": "The configuration for logging of each type of permission.\nNext ID: 4",
-          "type": "array",
-          "items": {
-            "$ref": "AuditLogConfig"
-          }
-        },
-        "exemptedMembers": {
-          "type": "array",
-          "items": {
-            "type": "string"
-          }
-        }
-      },
-      "id": "AuditConfig",
-      "description": "Specifies the audit configuration for a service.\nThe configuration determines which permission types are logged, and what\nidentities, if any, are exempted from logging.\nAn AuditConifg must have one or more AuditLogConfigs.\n\nIf there are AuditConfigs for both `allServices` and a specific service,\nthe union of the two AuditConfigs is used for that service: the log_types\nspecified in each AuditConfig are enabled, and the exempted_members in each\nAuditConfig are exempted.\nExample Policy with multiple AuditConfigs:\n{\n  \"audit_configs\": [\n    {\n      \"service\": \"allServices\"\n      \"audit_log_configs\": [\n        {\n          \"log_type\": \"DATA_READ\",\n          \"exempted_members\": [\n            \"user:foo@gmail.com\"\n          ]\n        },\n        {\n          \"log_type\": \"DATA_WRITE\",\n        },\n        {\n          \"log_type\": \"ADMIN_READ\",\n        }\n      ]\n    },\n    {\n      \"service\": \"fooservice@googleapis.com\"\n      \"audit_log_configs\": [\n        {\n          \"log_type\": \"DATA_READ\",\n        },\n        {\n          \"log_type\": \"DATA_WRITE\",\n          \"exempted_members\": [\n            \"user:bar@gmail.com\"\n          ]\n        }\n      ]\n    }\n  ]\n}\nFor fooservice, this policy enables DATA_READ, DATA_WRITE and ADMIN_READ\nlogging. It also exempts foo@gmail.com from DATA_READ logging, and\nbar@gmail.com from DATA_WRITE logging.",
-      "type": "object"
-    },
-    "SubmitConfigSourceRequest": {
-      "description": "Request message for SubmitConfigSource method.",
-      "type": "object",
-      "properties": {
-        "validateOnly": {
-          "description": "Optional. If set, this will result in the generation of a\n`google.api.Service` configuration based on the `ConfigSource` provided,\nbut the generated config and the sources will NOT be persisted.",
-          "type": "boolean"
-        },
-        "configSource": {
-          "description": "The source configuration for the service.",
-          "$ref": "ConfigSource"
-        }
-      },
-      "id": "SubmitConfigSourceRequest"
-    },
-    "DocumentationRule": {
-      "description": "A documentation rule provides information about individual API elements.",
-      "type": "object",
-      "properties": {
-        "description": {
-          "description": "Description of the selected API(s).",
-          "type": "string"
-        },
-        "deprecationDescription": {
-          "description": "Deprecation description of the selected element(s). It can be provided if an\nelement is marked as `deprecated`.",
-          "type": "string"
-        },
-        "selector": {
-          "description": "The selector is a comma-separated list of patterns. Each pattern is a\nqualified name of the element which may end in \"*\", indicating a wildcard.\nWildcards are only allowed at the end and for a whole component of the\nqualified name, i.e. \"foo.*\" is ok, but not \"foo.b*\" or \"foo.*.bar\". To\nspecify a default for all applicable elements, the whole pattern \"*\"\nis used.",
-          "type": "string"
-        }
-      },
-      "id": "DocumentationRule"
-    },
-    "AuthorizationConfig": {
-      "description": "Configuration of authorization.\n\nThis section determines the authorization provider, if unspecified, then no\nauthorization check will be done.\n\nExample:\n\n    experimental:\n      authorization:\n        provider: firebaserules.googleapis.com",
-      "type": "object",
-      "properties": {
-        "provider": {
-          "description": "The name of the authorization provider, such as\nfirebaserules.googleapis.com.",
-          "type": "string"
-        }
-      },
-      "id": "AuthorizationConfig"
-    },
-    "ContextRule": {
-      "properties": {
-        "requested": {
-          "description": "A list of full type names of requested contexts.",
-          "type": "array",
-          "items": {
-            "type": "string"
-          }
-        },
-        "selector": {
-          "description": "Selects the methods to which this rule applies.\n\nRefer to selector for syntax details.",
-          "type": "string"
-        },
-        "provided": {
-          "description": "A list of full type names of provided contexts.",
-          "type": "array",
-          "items": {
-            "type": "string"
-          }
-        }
-      },
-      "id": "ContextRule",
-      "description": "A context rule provides information about the context for an individual API\nelement.",
-      "type": "object"
-    },
-    "CloudAuditOptions": {
-      "properties": {},
-      "id": "CloudAuditOptions",
-      "description": "Write a Cloud Audit log",
-      "type": "object"
-    },
-    "MetricDescriptor": {
-      "properties": {
-        "name": {
-          "description": "The resource name of the metric descriptor. Depending on the\nimplementation, the name typically includes: (1) the parent resource name\nthat defines the scope of the metric type or of its data; and (2) the\nmetric's URL-encoded type, which also appears in the `type` field of this\ndescriptor. For example, following is the resource name of a custom\nmetric within the GCP project `my-project-id`:\n\n    \"projects/my-project-id/metricDescriptors/custom.googleapis.com%2Finvoice%2Fpaid%2Famount\"",
-          "type": "string"
-        },
-        "type": {
-          "description": "The metric type, including its DNS name prefix. The type is not\nURL-encoded.  All user-defined custom metric types have the DNS name\n`custom.googleapis.com`.  Metric types should use a natural hierarchical\ngrouping. For example:\n\n    \"custom.googleapis.com/invoice/paid/amount\"\n    \"appengine.googleapis.com/http/server/response_latencies\"",
-          "type": "string"
-        },
-        "valueType": {
-          "enum": [
-            "VALUE_TYPE_UNSPECIFIED",
-            "BOOL",
-            "INT64",
-            "DOUBLE",
-            "STRING",
-            "DISTRIBUTION",
-            "MONEY"
-          ],
-          "description": "Whether the measurement is an integer, a floating-point number, etc.\nSome combinations of `metric_kind` and `value_type` might not be supported.",
-          "type": "string",
-          "enumDescriptions": [
-            "Do not use this default value.",
-            "The value is a boolean.\nThis 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.\nThis value type can be used only if the metric kind is `GAUGE`.",
-            "The value is a `Distribution`.",
-            "The value is money."
-          ]
-        },
-        "metricKind": {
-          "enum": [
-            "METRIC_KIND_UNSPECIFIED",
-            "GAUGE",
-            "DELTA",
-            "CUMULATIVE"
-          ],
-          "description": "Whether the metric records instantaneous values, changes to a value, etc.\nSome combinations of `metric_kind` and `value_type` might not be supported.",
-          "type": "string",
-          "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\nmeasurements in a time series should have the same start time\nand increasing end times, until an event resets the cumulative\nvalue to zero and sets a new start time for the following\npoints."
-          ]
-        },
-        "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.\nUse sentence case without an ending period, for example \"Request count\".",
-          "type": "string"
-        },
-        "unit": {
-          "description": "The unit in which the metric value is reported. It is only applicable\nif the `value_type` is `INT64`, `DOUBLE`, or `DISTRIBUTION`. The\nsupported units are a subset of [The Unified Code for Units of\nMeasure](http://unitsofmeasure.org/ucum.html) standard:\n\n**Basic units (UNIT)**\n\n* `bit`   bit\n* `By`    byte\n* `s`     second\n* `min`   minute\n* `h`     hour\n* `d`     day\n\n**Prefixes (PREFIX)**\n\n* `k`     kilo    (10**3)\n* `M`     mega    (10**6)\n* `G`     giga    (10**9)\n* `T`     tera    (10**12)\n* `P`     peta    (10**15)\n* `E`     exa     (10**18)\n* `Z`     zetta   (10**21)\n* `Y`     yotta   (10**24)\n* `m`     milli   (10**-3)\n* `u`     micro   (10**-6)\n* `n`     nano    (10**-9)\n* `p`     pico    (10**-12)\n* `f`     femto   (10**-15)\n* `a`     atto    (10**-18)\n* `z`     zepto   (10**-21)\n* `y`     yocto   (10**-24)\n* `Ki`    kibi    (2**10)\n* `Mi`    mebi    (2**20)\n* `Gi`    gibi    (2**30)\n* `Ti`    tebi    (2**40)\n\n**Grammar**\n\nThe grammar includes the dimensionless unit `1`, such as `1/s`.\n\nThe grammar also includes these connectors:\n\n* `/`    division (as an infix operator, e.g. `1/s`).\n* `.`    multiplication (as an infix operator, e.g. `GBy.d`)\n\nThe grammar for a unit is as follows:\n\n    Expression = Component { \".\" Component } { \"/\" Component } ;\n\n    Component = [ PREFIX ] UNIT [ Annotation ]\n              | Annotation\n              | \"1\"\n              ;\n\n    Annotation = \"{\" NAME \"}\" ;\n\nNotes:\n\n* `Annotation` is just a comment if it follows a `UNIT` and is\n   equivalent to `1` if it is used alone. For examples,\n   `{requests}/s == 1/s`, `By{transmitted}/s == By/s`.\n* `NAME` is a sequence of non-blank printable ASCII characters not\n   containing '{' or '}'.",
-          "type": "string"
-        },
-        "labels": {
-          "description": "The set of labels that can be used to describe a specific\ninstance of this metric type. For example, the\n`appengine.googleapis.com/http/server/response_latencies` metric\ntype has a label for the HTTP response code, `response_code`, so\nyou can look at latencies for successful responses or just\nfor responses that failed.",
-          "type": "array",
-          "items": {
-            "$ref": "LabelDescriptor"
-          }
-        }
-      },
-      "id": "MetricDescriptor",
-      "description": "Defines a metric type and its schema. Once a metric descriptor is created,\ndeleting or altering it stops data collection and makes the metric type's\nexisting data unusable.",
-      "type": "object"
-    },
-    "SourceContext": {
-      "description": "`SourceContext` represents information about the source of a\nprotobuf element, like the file in which it is defined.",
-      "type": "object",
-      "properties": {
-        "fileName": {
-          "description": "The path-qualified name of the .proto file that contained the associated\nprotobuf element.  For example: `\"google/protobuf/source_context.proto\"`.",
-          "type": "string"
-        }
-      },
-      "id": "SourceContext"
-    },
-    "ListServicesResponse": {
-      "properties": {
-        "services": {
-          "description": "The returned services will only have the name field set.",
-          "type": "array",
-          "items": {
-            "$ref": "ManagedService"
-          }
-        },
-        "nextPageToken": {
-          "description": "Token that can be passed to `ListServices` to resume a paginated query.",
-          "type": "string"
-        }
-      },
-      "id": "ListServicesResponse",
-      "description": "Response message for `ListServices` method.",
-      "type": "object"
-    },
-    "Endpoint": {
-      "description": "`Endpoint` describes a network endpoint that serves a set of APIs.\nA service may expose any number of endpoints, and all endpoints share the\nsame service configuration, such as quota configuration and monitoring\nconfiguration.\n\nExample service configuration:\n\n    name: library-example.googleapis.com\n    endpoints:\n      # Below entry makes 'google.example.library.v1.Library'\n      # API be served from endpoint address library-example.googleapis.com.\n      # It also allows HTTP OPTIONS calls to be passed to the backend, for\n      # it to decide whether the subsequent cross-origin request is\n      # allowed to proceed.\n    - name: library-example.googleapis.com\n      allow_cors: true",
-      "type": "object",
-      "properties": {
-        "name": {
-          "description": "The canonical name of this endpoint.",
-          "type": "string"
-        },
-        "apis": {
-          "description": "The list of APIs served by this endpoint.",
-          "type": "array",
-          "items": {
-            "type": "string"
-          }
-        },
-        "aliases": {
-          "description": "DEPRECATED: This field is no longer supported. Instead of using aliases,\nplease specify multiple google.api.Endpoint for each of the intented\nalias.\n\nAdditional names that this endpoint will be hosted on.",
-          "type": "array",
-          "items": {
-            "type": "string"
-          }
-        },
-        "features": {
-          "description": "The list of features enabled on this endpoint.",
-          "type": "array",
-          "items": {
-            "type": "string"
-          }
-        },
-        "allowCors": {
-          "description": "Allowing\n[CORS](https://en.wikipedia.org/wiki/Cross-origin_resource_sharing), aka\ncross-domain traffic, would allow the backends served from this endpoint to\nreceive and respond to HTTP OPTIONS requests. The response will be used by\nthe browser to determine whether the subsequent cross-origin request is\nallowed to proceed.",
-          "type": "boolean"
-        }
-      },
-      "id": "Endpoint"
-    },
-    "OAuthRequirements": {
-      "description": "OAuth scopes are a way to define data and permissions on data. For example,\nthere are scopes defined for \"Read-only access to Google Calendar\" and\n\"Access to Cloud Platform\". Users can consent to a scope for an application,\ngiving it permission to access that data on their behalf.\n\nOAuth scope specifications should be fairly coarse grained; a user will need\nto see and understand the text description of what your scope means.\n\nIn most cases: use one or at most two OAuth scopes for an entire family of\nproducts. If your product has multiple APIs, you should probably be sharing\nthe OAuth scope across all of those APIs.\n\nWhen you need finer grained OAuth consent screens: talk with your product\nmanagement about how developers will use them in practice.\n\nPlease note that even though each of the canonical scopes is enough for a\nrequest to be accepted and passed to the backend, a request can still fail\ndue to the backend requiring additional scopes or permissions.",
-      "type": "object",
-      "properties": {
-        "canonicalScopes": {
-          "description": "The list of publicly documented OAuth scopes that are allowed access. An\nOAuth token containing any of these scopes will be accepted.\n\nExample:\n\n     canonical_scopes: https://www.googleapis.com/auth/calendar,\n                       https://www.googleapis.com/auth/calendar.read",
-          "type": "string"
-        }
-      },
-      "id": "OAuthRequirements"
-    },
-    "Usage": {
-      "description": "Configuration controlling usage of a service.",
-      "type": "object",
-      "properties": {
-        "producerNotificationChannel": {
-          "description": "The full resource name of a channel used for sending notifications to the\nservice producer.\n\nGoogle Service Management currently only supports\n[Google Cloud Pub/Sub](https://cloud.google.com/pubsub) as a notification\nchannel. To use Google Cloud Pub/Sub as the channel, this must be the name\nof a Cloud Pub/Sub topic that uses the Cloud Pub/Sub topic name format\ndocumented in https://cloud.google.com/pubsub/docs/overview.",
-          "type": "string"
-        },
-        "rules": {
-          "description": "A list of usage rules that apply to individual API methods.\n\n**NOTE:** All service configuration rules follow \"last one wins\" order.",
-          "type": "array",
-          "items": {
-            "$ref": "UsageRule"
-          }
-        },
-        "requirements": {
-          "description": "Requirements that must be satisfied before a consumer project can use the\nservice. Each requirement is of the form \u003cservice.name\u003e/\u003crequirement-id\u003e;\nfor example 'serviceusage.googleapis.com/billing-enabled'.",
-          "type": "array",
-          "items": {
-            "type": "string"
-          }
-        }
-      },
-      "id": "Usage"
-    },
-    "GetIamPolicyRequest": {
-      "description": "Request message for `GetIamPolicy` method.",
-      "type": "object",
-      "properties": {},
-      "id": "GetIamPolicyRequest"
-    },
-    "TestIamPermissionsResponse": {
-      "description": "Response message for `TestIamPermissions` method.",
-      "type": "object",
-      "properties": {
-        "permissions": {
-          "description": "A subset of `TestPermissionsRequest.permissions` that the caller is\nallowed.",
-          "type": "array",
-          "items": {
-            "type": "string"
-          }
-        }
-      },
-      "id": "TestIamPermissionsResponse"
-    },
-    "Context": {
-      "description": "`Context` defines which contexts an API requests.\n\nExample:\n\n    context:\n      rules:\n      - selector: \"*\"\n        requested:\n        - google.rpc.context.ProjectContext\n        - google.rpc.context.OriginContext\n\nThe above specifies that all methods in the API request\n`google.rpc.context.ProjectContext` and\n`google.rpc.context.OriginContext`.\n\nAvailable context types are defined in package\n`google.rpc.context`.",
-      "type": "object",
-      "properties": {
-        "rules": {
-          "description": "A list of RPC context rules that apply to individual API methods.\n\n**NOTE:** All service configuration rules follow \"last one wins\" order.",
-          "type": "array",
-          "items": {
-            "$ref": "ContextRule"
-          }
-        }
-      },
-      "id": "Context"
     }
   },
+  "protocol": "rest",
   "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",
   "version": "v1",
   "baseUrl": "https://servicemanagement.googleapis.com/",
   "canonicalName": "Service Management",
   "auth": {
     "oauth2": {
       "scopes": {
-        "https://www.googleapis.com/auth/service.management": {
-          "description": "Manage your Google API service configuration"
-        },
         "https://www.googleapis.com/auth/cloud-platform.read-only": {
           "description": "View your data across Google Cloud Platform services"
         },
@@ -3028,13 +3060,23 @@
         },
         "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": {
+          "description": "Manage your Google API service configuration"
         }
       }
     }
   },
   "kind": "discovery#restDescription",
-  "servicePath": "",
   "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": "",
   "rootUrl": "https://servicemanagement.googleapis.com/",
-  "basePath": ""
+  "basePath": "",
+  "ownerDomain": "google.com",
+  "name": "servicemanagement",
+  "batchPath": "batch",
+  "id": "servicemanagement:v1",
+  "documentationLink": "https://cloud.google.com/service-management/",
+  "revision": "20170317",
+  "title": "Google Service Management API"
 }
diff --git a/servicemanagement/v1/servicemanagement-gen.go b/servicemanagement/v1/servicemanagement-gen.go
index 31cbf3d..c658147 100644
--- a/servicemanagement/v1/servicemanagement-gen.go
+++ b/servicemanagement/v1/servicemanagement-gen.go
@@ -71,10 +71,9 @@
 }
 
 type APIService struct {
-	client                    *http.Client
-	BasePath                  string // API endpoint base URL
-	UserAgent                 string // optional additional User-Agent fragment
-	GoogleClientHeaderElement string // client header fragment, for Google use only
+	client    *http.Client
+	BasePath  string // API endpoint base URL
+	UserAgent string // optional additional User-Agent fragment
 
 	Operations *OperationsService
 
@@ -88,10 +87,6 @@
 	return googleapi.UserAgent + " " + s.UserAgent
 }
 
-func (s *APIService) clientHeader() string {
-	return gensupport.GoogleClientHeader("20170210", s.GoogleClientHeaderElement)
-}
-
 func NewOperationsService(s *APIService) *OperationsService {
 	rs := &OperationsService{s: s}
 	return rs
@@ -310,7 +305,8 @@
 
 	// Service: Specifies a service that will be enabled for audit
 	// logging.
-	// For example, `resourcemanager`, `storage`, `compute`.
+	// For example, `storage.googleapis.com`,
+	// `cloudsql.googleapis.com`.
 	// `allServices` is a special value that covers all services.
 	Service string `json:"service,omitempty"`
 
@@ -2043,6 +2039,76 @@
 	return gensupport.MarshalJSON(raw, s.ForceSendFields, s.NullFields)
 }
 
+// FlowOperationMetadata: The metadata associated with a long running
+// operation resource.
+type FlowOperationMetadata struct {
+	// CancelState: The state of the operation with respect to cancellation.
+	//
+	// Possible values:
+	//   "RUNNING" - Default state, cancellable but not cancelled.
+	//   "UNCANCELLABLE" - The operation has proceeded past the point of no
+	// return and cannot
+	// be cancelled.
+	//   "CANCELLED" - The operation has been cancelled, work should
+	// cease
+	// and any needed rollback steps executed.
+	CancelState string `json:"cancelState,omitempty"`
+
+	// Deadline: Deadline for the flow to complete, to prevent orphaned
+	// Operations.
+	//
+	// If the flow has not completed by this time, it may be terminated
+	// by
+	// the engine, or force-failed by Operation lookup.
+	//
+	// Note that this is not a hard deadline after which the Flow
+	// will
+	// definitely be failed, rather it is a deadline after which it is
+	// reasonable
+	// to suspect a problem and other parts of the system may kill
+	// operation
+	// to ensure we don't have orphans.
+	// see also: go/prevent-orphaned-operations
+	Deadline string `json:"deadline,omitempty"`
+
+	// FlowName: The name of the top-level flow corresponding to this
+	// operation.
+	// Must be equal to the "name" field for a FlowName enum.
+	FlowName string `json:"flowName,omitempty"`
+
+	// IsPersisted: Is the update for the operation persisted?
+	IsPersisted bool `json:"isPersisted,omitempty"`
+
+	// ResourceNames: The full name of the resources that this flow is
+	// directly associated with.
+	ResourceNames []string `json:"resourceNames,omitempty"`
+
+	// StartTime: The start time of the operation.
+	StartTime string `json:"startTime,omitempty"`
+
+	// ForceSendFields is a list of field names (e.g. "CancelState") to
+	// unconditionally include in API requests. By default, fields with
+	// empty values are omitted from API requests. However, any non-pointer,
+	// non-interface field appearing in ForceSendFields will be sent to the
+	// server regardless of whether the field is empty or not. This may be
+	// used to include empty fields in Patch requests.
+	ForceSendFields []string `json:"-"`
+
+	// NullFields is a list of field names (e.g. "CancelState") to include
+	// in API requests with the JSON null value. By default, fields with
+	// empty values are omitted from API requests. However, any field with
+	// an empty value appearing in NullFields will be sent to the server as
+	// null. It is an error if a field in this list has a non-empty value.
+	// This may be used to include null fields in Patch requests.
+	NullFields []string `json:"-"`
+}
+
+func (s *FlowOperationMetadata) MarshalJSON() ([]byte, error) {
+	type noMethod FlowOperationMetadata
+	raw := noMethod(*s)
+	return gensupport.MarshalJSON(raw, s.ForceSendFields, s.NullFields)
+}
+
 // GenerateConfigReportRequest: Request message for GenerateConfigReport
 // method.
 type GenerateConfigReportRequest struct {
@@ -2701,35 +2767,6 @@
 }
 
 // LogConfig: Specifies what kind of log the caller must write
-// Increment a streamz counter with the specified metric and field
-// names.
-//
-// Metric names should start with a '/', generally be
-// lowercase-only,
-// and end in "_count". Field names should not contain an initial
-// slash.
-// The actual exported metric names will have "/iam/policy"
-// prepended.
-//
-// Field names correspond to IAM request parameters and field values
-// are
-// their respective values.
-//
-// At present the only supported field names are
-//    - "iam_principal", corresponding to IAMContext.principal;
-//    - "" (empty string), resulting in one aggretated counter with no
-// field.
-//
-// Examples:
-//   counter { metric: "/debug_access_count"  field: "iam_principal" }
-//   ==> increment counter /iam/policy/backend_debug_access_count
-//                         {iam_principal=[value of
-// IAMContext.principal]}
-//
-// At this time we do not support:
-// * multiple field names (though this may be supported in the future)
-// * decrementing the counter
-// * incrementing it by anything other than 1
 type LogConfig struct {
 	// CloudAudit: Cloud audit options.
 	CloudAudit *CloudAuditOptions `json:"cloudAudit,omitempty"`
@@ -5340,7 +5377,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	if c.ifNoneMatch_ != "" {
 		reqHeaders.Set("If-None-Match", c.ifNoneMatch_)
 	}
@@ -5426,36 +5462,59 @@
 
 type OperationsListCall struct {
 	s            *APIService
-	name         string
 	urlParams_   gensupport.URLParams
 	ifNoneMatch_ string
 	ctx_         context.Context
 	header_      http.Header
 }
 
-// List: 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 below allows API services to override the
-// binding
-// to use different resource name schemes, such as `users/*/operations`.
-func (r *OperationsService) List(name string) *OperationsListCall {
+// List: Lists service operations that match the specified filter in the
+// request.
+func (r *OperationsService) List() *OperationsListCall {
 	c := &OperationsListCall{s: r.s, urlParams_: make(gensupport.URLParams)}
-	c.name = name
 	return c
 }
 
-// Filter sets the optional parameter "filter": The standard list
-// filter.
+// Filter sets the optional parameter "filter": A string for filtering
+// Operations.
+//   The following filter fields are supported&#58;
+//
+//   * serviceName&#58; Required. Only `=` operator is allowed.
+//   * startTime&#58; The time this job was started, in ISO 8601
+// format.
+//     Allowed operators are `>=`,  `>`, `<=`, and `<`.
+//   * status&#58; 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&#58;
+//
+//   * `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")`
 func (c *OperationsListCall) Filter(filter string) *OperationsListCall {
 	c.urlParams_.Set("filter", filter)
 	return c
 }
 
-// PageSize sets the optional parameter "pageSize": The standard list
-// page size.
+// Name sets the optional parameter "name": Not used.
+func (c *OperationsListCall) Name(name string) *OperationsListCall {
+	c.urlParams_.Set("name", name)
+	return c
+}
+
+// PageSize sets the optional parameter "pageSize": The maximum number
+// of operations to return. If unspecified, defaults to
+// 50. The maximum value is 100.
 func (c *OperationsListCall) PageSize(pageSize int64) *OperationsListCall {
 	c.urlParams_.Set("pageSize", fmt.Sprint(pageSize))
 	return c
@@ -5509,19 +5568,15 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	if c.ifNoneMatch_ != "" {
 		reqHeaders.Set("If-None-Match", c.ifNoneMatch_)
 	}
 	var body io.Reader = nil
 	c.urlParams_.Set("alt", alt)
-	urls := googleapi.ResolveRelative(c.s.BasePath, "v1/{+name}")
+	urls := googleapi.ResolveRelative(c.s.BasePath, "v1/operations")
 	urls += "?" + c.urlParams_.Encode()
 	req, _ := http.NewRequest("GET", urls, body)
 	req.Header = reqHeaders
-	googleapi.Expand(req.URL, map[string]string{
-		"name": c.name,
-	})
 	return gensupport.SendRequest(c.ctx_, c.s.client, req)
 }
 
@@ -5563,28 +5618,24 @@
 	}
 	return ret, nil
 	// {
-	//   "description": "Lists operations that match the specified filter in the request. If the\nserver doesn't support this method, it returns `UNIMPLEMENTED`.\n\nNOTE: the `name` binding below allows API services to override the binding\nto use different resource name schemes, such as `users/*/operations`.",
+	//   "description": "Lists service operations that match the specified filter in the request.",
 	//   "flatPath": "v1/operations",
 	//   "httpMethod": "GET",
 	//   "id": "servicemanagement.operations.list",
-	//   "parameterOrder": [
-	//     "name"
-	//   ],
+	//   "parameterOrder": [],
 	//   "parameters": {
 	//     "filter": {
-	//       "description": "The standard list filter.",
+	//       "description": "A string for filtering Operations.\n  The following filter fields are supported\u0026#58;\n\n  * serviceName\u0026#58; Required. Only `=` operator is allowed.\n  * startTime\u0026#58; The time this job was started, in ISO 8601 format.\n    Allowed operators are `\u003e=`,  `\u003e`, `\u003c=`, and `\u003c`.\n  * status\u0026#58; Can be `done`, `in_progress`, or `failed`. Allowed\n    operators are `=`, and `!=`.\n\n  Filter expression supports conjunction (AND) and disjunction (OR)\n  logical operators. However, the serviceName restriction must be at the\n  top-level and can only be combined with other restrictions via the AND\n  logical operator.\n\n  Examples\u0026#58;\n\n  * `serviceName={some-service}.googleapis.com`\n  * `serviceName={some-service}.googleapis.com AND startTime\u003e=\"2017-02-01\"`\n  * `serviceName={some-service}.googleapis.com AND status=done`\n  * `serviceName={some-service}.googleapis.com AND (status=done OR startTime\u003e=\"2017-02-01\")`",
 	//       "location": "query",
 	//       "type": "string"
 	//     },
 	//     "name": {
-	//       "description": "The name of the operation collection.",
-	//       "location": "path",
-	//       "pattern": "^operations$",
-	//       "required": true,
+	//       "description": "Not used.",
+	//       "location": "query",
 	//       "type": "string"
 	//     },
 	//     "pageSize": {
-	//       "description": "The standard list page size.",
+	//       "description": "The maximum number of operations to return. If unspecified, defaults to\n50. The maximum value is 100.",
 	//       "format": "int32",
 	//       "location": "query",
 	//       "type": "integer"
@@ -5595,7 +5646,7 @@
 	//       "type": "string"
 	//     }
 	//   },
-	//   "path": "v1/{+name}",
+	//   "path": "v1/operations",
 	//   "response": {
 	//     "$ref": "ListOperationsResponse"
 	//   },
@@ -5680,7 +5731,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	var body io.Reader = nil
 	body, err := googleapi.WithoutDataWrapper.JSONReader(c.managedservice)
 	if err != nil {
@@ -5810,7 +5860,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	var body io.Reader = nil
 	c.urlParams_.Set("alt", alt)
 	urls := googleapi.ResolveRelative(c.s.BasePath, "v1/services/{serviceName}")
@@ -5943,7 +5992,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	var body io.Reader = nil
 	body, err := googleapi.WithoutDataWrapper.JSONReader(c.disableservicerequest)
 	if err != nil {
@@ -6085,7 +6133,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	var body io.Reader = nil
 	body, err := googleapi.WithoutDataWrapper.JSONReader(c.enableservicerequest)
 	if err != nil {
@@ -6236,7 +6283,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	var body io.Reader = nil
 	body, err := googleapi.WithoutDataWrapper.JSONReader(c.generateconfigreportrequest)
 	if err != nil {
@@ -6371,7 +6417,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	if c.ifNoneMatch_ != "" {
 		reqHeaders.Set("If-None-Match", c.ifNoneMatch_)
 	}
@@ -6533,7 +6578,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	if c.ifNoneMatch_ != "" {
 		reqHeaders.Set("If-None-Match", c.ifNoneMatch_)
 	}
@@ -6683,7 +6727,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	var body io.Reader = nil
 	body, err := googleapi.WithoutDataWrapper.JSONReader(c.getiampolicyrequest)
 	if err != nil {
@@ -6873,7 +6916,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	if c.ifNoneMatch_ != "" {
 		reqHeaders.Set("If-None-Match", c.ifNoneMatch_)
 	}
@@ -7039,7 +7081,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	var body io.Reader = nil
 	body, err := googleapi.WithoutDataWrapper.JSONReader(c.setiampolicyrequest)
 	if err != nil {
@@ -7186,7 +7227,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	var body io.Reader = nil
 	body, err := googleapi.WithoutDataWrapper.JSONReader(c.testiampermissionsrequest)
 	if err != nil {
@@ -7329,7 +7369,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	var body io.Reader = nil
 	c.urlParams_.Set("alt", alt)
 	urls := googleapi.ResolveRelative(c.s.BasePath, "v1/services/{serviceName}:undelete")
@@ -7462,7 +7501,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	var body io.Reader = nil
 	body, err := googleapi.WithoutDataWrapper.JSONReader(c.service)
 	if err != nil {
@@ -7621,7 +7659,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	if c.ifNoneMatch_ != "" {
 		reqHeaders.Set("If-None-Match", c.ifNoneMatch_)
 	}
@@ -7796,7 +7833,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	if c.ifNoneMatch_ != "" {
 		reqHeaders.Set("If-None-Match", c.ifNoneMatch_)
 	}
@@ -7973,7 +8009,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	var body io.Reader = nil
 	body, err := googleapi.WithoutDataWrapper.JSONReader(c.submitconfigsourcerequest)
 	if err != nil {
@@ -8123,7 +8158,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	var body io.Reader = nil
 	body, err := googleapi.WithoutDataWrapper.JSONReader(c.rollout)
 	if err != nil {
@@ -8270,7 +8304,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	if c.ifNoneMatch_ != "" {
 		reqHeaders.Set("If-None-Match", c.ifNoneMatch_)
 	}
@@ -8436,7 +8469,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	if c.ifNoneMatch_ != "" {
 		reqHeaders.Set("If-None-Match", c.ifNoneMatch_)
 	}
diff --git a/serviceuser/v1/serviceuser-api.json b/serviceuser/v1/serviceuser-api.json
index c11c2e7..b4dbb1d 100644
--- a/serviceuser/v1/serviceuser-api.json
+++ b/serviceuser/v1/serviceuser-api.json
@@ -1,768 +1,16 @@
 {
+  "version": "v1",
+  "baseUrl": "https://serviceuser.googleapis.com/",
+  "kind": "discovery#restDescription",
+  "description": "Enables services that service consumers want to use on Google Cloud Platform, lists the available or enabled services, or disables services that service consumers no longer use.",
+  "servicePath": "",
+  "basePath": "",
+  "id": "serviceuser:v1",
+  "revision": "20170317",
+  "documentationLink": "https://cloud.google.com/service-management/",
+  "discoveryVersion": "v1",
   "version_module": "True",
   "schemas": {
-    "Service": {
-      "properties": {
-        "experimental": {
-          "description": "Experimental configuration.",
-          "$ref": "Experimental"
-        },
-        "control": {
-          "description": "Configuration for the service control plane.",
-          "$ref": "Control"
-        },
-        "configVersion": {
-          "description": "The version of the service configuration. The config version may\ninfluence interpretation of the configuration, for example, to\ndetermine defaults. This is documented together with applicable\noptions. The current default for the config version itself is `3`.",
-          "format": "uint32",
-          "type": "integer"
-        },
-        "monitoring": {
-          "description": "Monitoring configuration.",
-          "$ref": "Monitoring"
-        },
-        "producerProjectId": {
-          "description": "The id of the Google developer project that owns the service.\nMembers of this project can manage the service configuration,\nmanage consumption of the service, etc.",
-          "type": "string"
-        },
-        "systemTypes": {
-          "description": "A list of all proto message types included in this API service.\nIt serves similar purpose as [google.api.Service.types], except that\nthese types are not needed by user-defined APIs. Therefore, they will not\nshow up in the generated discovery doc. This field should only be used\nto define system APIs in ESF.",
-          "type": "array",
-          "items": {
-            "$ref": "Type"
-          }
-        },
-        "visibility": {
-          "description": "API visibility configuration.",
-          "$ref": "Visibility"
-        },
-        "name": {
-          "description": "The DNS address at which this service is available,\ne.g. `calendar.googleapis.com`.",
-          "type": "string"
-        },
-        "customError": {
-          "$ref": "CustomError",
-          "description": "Custom error configuration."
-        },
-        "title": {
-          "description": "The product title associated with this service.",
-          "type": "string"
-        },
-        "endpoints": {
-          "description": "Configuration for network endpoints.  If this is empty, then an endpoint\nwith the same name as the service is automatically generated to service all\ndefined APIs.",
-          "type": "array",
-          "items": {
-            "$ref": "Endpoint"
-          }
-        },
-        "apis": {
-          "description": "A list of API interfaces exported by this service. Only the `name` field\nof the google.protobuf.Api needs to be provided by the configuration\nauthor, as the remaining fields will be derived from the IDL during the\nnormalization process. It is an error to specify an API interface here\nwhich cannot be resolved against the associated IDL files.",
-          "type": "array",
-          "items": {
-            "$ref": "Api"
-          }
-        },
-        "logs": {
-          "description": "Defines the logs used by this service.",
-          "type": "array",
-          "items": {
-            "$ref": "LogDescriptor"
-          }
-        },
-        "types": {
-          "description": "A list of all proto message types included in this API service.\nTypes referenced directly or indirectly by the `apis` are\nautomatically included.  Messages which are not referenced but\nshall be included, such as types used by the `google.protobuf.Any` type,\nshould be listed here by name. Example:\n\n    types:\n    - name: google.protobuf.Int32",
-          "type": "array",
-          "items": {
-            "$ref": "Type"
-          }
-        },
-        "sourceInfo": {
-          "description": "Output only. The source information for this configuration if available.",
-          "$ref": "SourceInfo"
-        },
-        "http": {
-          "description": "HTTP configuration.",
-          "$ref": "Http"
-        },
-        "backend": {
-          "$ref": "Backend",
-          "description": "API backend configuration."
-        },
-        "systemParameters": {
-          "$ref": "SystemParameters",
-          "description": "System parameter configuration."
-        },
-        "documentation": {
-          "$ref": "Documentation",
-          "description": "Additional API documentation."
-        },
-        "logging": {
-          "description": "Logging configuration.",
-          "$ref": "Logging"
-        },
-        "monitoredResources": {
-          "description": "Defines the monitored resources used by this service. This is required\nby the Service.monitoring and Service.logging configurations.",
-          "type": "array",
-          "items": {
-            "$ref": "MonitoredResourceDescriptor"
-          }
-        },
-        "context": {
-          "$ref": "Context",
-          "description": "Context configuration."
-        },
-        "enums": {
-          "description": "A list of all enum types included in this API service.  Enums\nreferenced directly or indirectly by the `apis` are automatically\nincluded.  Enums which are not referenced but shall be included\nshould be listed here by name. Example:\n\n    enums:\n    - name: google.someapi.v1.SomeEnum",
-          "type": "array",
-          "items": {
-            "$ref": "Enum"
-          }
-        },
-        "id": {
-          "description": "A unique ID for a specific instance of this message, typically assigned\nby the client for tracking purpose. If empty, the server may choose to\ngenerate one instead.",
-          "type": "string"
-        },
-        "usage": {
-          "$ref": "Usage",
-          "description": "Configuration controlling usage of this service."
-        },
-        "metrics": {
-          "description": "Defines the metrics used by this service.",
-          "type": "array",
-          "items": {
-            "$ref": "MetricDescriptor"
-          }
-        },
-        "authentication": {
-          "description": "Auth configuration.",
-          "$ref": "Authentication"
-        }
-      },
-      "id": "Service",
-      "description": "`Service` is the root object of Google service configuration schema. It\ndescribes basic information about a service, such as the name and the\ntitle, and delegates other aspects to sub-sections. Each sub-section is\neither a proto message or a repeated proto message that configures a\nspecific aspect, such as auth. See each proto message definition for details.\n\nExample:\n\n    type: google.api.Service\n    config_version: 3\n    name: calendar.googleapis.com\n    title: Google Calendar API\n    apis:\n    - name: google.calendar.v3.Calendar\n    authentication:\n      providers:\n      - id: google_calendar_auth\n        jwks_uri: https://www.googleapis.com/oauth2/v1/certs\n        issuer: https://securetoken.google.com\n      rules:\n      - selector: \"*\"\n        requirements:\n          provider_id: google_calendar_auth",
-      "type": "object"
-    },
-    "EnumValue": {
-      "properties": {
-        "name": {
-          "description": "Enum value name.",
-          "type": "string"
-        },
-        "options": {
-          "description": "Protocol buffer options.",
-          "type": "array",
-          "items": {
-            "$ref": "Option"
-          }
-        },
-        "number": {
-          "type": "integer",
-          "description": "Enum value number.",
-          "format": "int32"
-        }
-      },
-      "id": "EnumValue",
-      "description": "Enum value definition.",
-      "type": "object"
-    },
-    "OperationMetadata": {
-      "id": "OperationMetadata",
-      "description": "The metadata associated with a long running operation resource.",
-      "type": "object",
-      "properties": {
-        "startTime": {
-          "description": "The start time of the operation.",
-          "format": "google-datetime",
-          "type": "string"
-        },
-        "resourceNames": {
-          "description": "The full name of the resources that this operation is directly\nassociated with.",
-          "type": "array",
-          "items": {
-            "type": "string"
-          }
-        },
-        "steps": {
-          "description": "Detailed status information for each step. The order is undetermined.",
-          "type": "array",
-          "items": {
-            "$ref": "Step"
-          }
-        },
-        "progressPercentage": {
-          "description": "Percentage of completion of this operation, ranging from 0 to 100.",
-          "format": "int32",
-          "type": "integer"
-        }
-      }
-    },
-    "CustomHttpPattern": {
-      "id": "CustomHttpPattern",
-      "description": "A custom pattern is used for defining custom HTTP verb.",
-      "type": "object",
-      "properties": {
-        "kind": {
-          "description": "The name of this custom HTTP verb.",
-          "type": "string"
-        },
-        "path": {
-          "description": "The path matched by this custom verb.",
-          "type": "string"
-        }
-      }
-    },
-    "PublishedService": {
-      "id": "PublishedService",
-      "description": "The published version of a Service that is managed by\nGoogle Service Management.",
-      "type": "object",
-      "properties": {
-        "service": {
-          "$ref": "Service",
-          "description": "The service's published configuration."
-        },
-        "name": {
-          "description": "The resource name of the service.\n\nA valid name would be:\n- services/serviceuser.googleapis.com",
-          "type": "string"
-        }
-      }
-    },
-    "SystemParameterRule": {
-      "type": "object",
-      "properties": {
-        "parameters": {
-          "description": "Define parameters. Multiple names may be defined for a parameter.\nFor a given method call, only one of them should be used. If multiple\nnames are used the behavior is implementation-dependent.\nIf none of the specified names are present the behavior is\nparameter-dependent.",
-          "type": "array",
-          "items": {
-            "$ref": "SystemParameter"
-          }
-        },
-        "selector": {
-          "description": "Selects the methods to which this rule applies. Use '*' to indicate all\nmethods in all APIs.\n\nRefer to selector for syntax details.",
-          "type": "string"
-        }
-      },
-      "id": "SystemParameterRule",
-      "description": "Define a system parameter rule mapping system parameter definitions to\nmethods."
-    },
-    "HttpRule": {
-      "description": "`HttpRule` defines the mapping of an RPC method to one or more HTTP\nREST APIs.  The mapping determines what portions of the request\nmessage are populated from the path, query parameters, or body of\nthe HTTP request.  The mapping is typically specified as an\n`google.api.http` annotation, see \"google/api/annotations.proto\"\nfor details.\n\nThe mapping consists of a field specifying the path template and\nmethod kind.  The path template can refer to fields in the request\nmessage, as in the example below which describes a REST GET\noperation on a resource collection of messages:\n\n\n    service Messaging {\n      rpc GetMessage(GetMessageRequest) returns (Message) {\n        option (google.api.http).get = \"/v1/messages/{message_id}/{sub.subfield}\";\n      }\n    }\n    message GetMessageRequest {\n      message SubMessage {\n        string subfield = 1;\n      }\n      string message_id = 1; // mapped to the URL\n      SubMessage sub = 2;    // `sub.subfield` is url-mapped\n    }\n    message Message {\n      string text = 1; // content of the resource\n    }\n\nThe same http annotation can alternatively be expressed inside the\n`GRPC API Configuration` YAML file.\n\n    http:\n      rules:\n        - selector: \u003cproto_package_name\u003e.Messaging.GetMessage\n          get: /v1/messages/{message_id}/{sub.subfield}\n\nThis definition enables an automatic, bidrectional mapping of HTTP\nJSON to RPC. Example:\n\nHTTP | RPC\n-----|-----\n`GET /v1/messages/123456/foo`  | `GetMessage(message_id: \"123456\" sub: SubMessage(subfield: \"foo\"))`\n\nIn general, not only fields but also field paths can be referenced\nfrom a path pattern. Fields mapped to the path pattern cannot be\nrepeated and must have a primitive (non-message) type.\n\nAny fields in the request message which are not bound by the path\npattern automatically become (optional) HTTP query\nparameters. Assume the following definition of the request message:\n\n\n    message GetMessageRequest {\n      message SubMessage {\n        string subfield = 1;\n      }\n      string message_id = 1; // mapped to the URL\n      int64 revision = 2;    // becomes a parameter\n      SubMessage sub = 3;    // `sub.subfield` becomes a parameter\n    }\n\n\nThis enables a HTTP JSON to RPC mapping as below:\n\nHTTP | RPC\n-----|-----\n`GET /v1/messages/123456?revision=2&sub.subfield=foo` | `GetMessage(message_id: \"123456\" revision: 2 sub: SubMessage(subfield: \"foo\"))`\n\nNote that fields which are mapped to HTTP parameters must have a\nprimitive type or a repeated primitive type. Message types are not\nallowed. In the case of a repeated type, the parameter can be\nrepeated in the URL, as in `...?param=A&param=B`.\n\nFor HTTP method kinds which allow a request body, the `body` field\nspecifies the mapping. Consider a REST update method on the\nmessage resource collection:\n\n\n    service Messaging {\n      rpc UpdateMessage(UpdateMessageRequest) returns (Message) {\n        option (google.api.http) = {\n          put: \"/v1/messages/{message_id}\"\n          body: \"message\"\n        };\n      }\n    }\n    message UpdateMessageRequest {\n      string message_id = 1; // mapped to the URL\n      Message message = 2;   // mapped to the body\n    }\n\n\nThe following HTTP JSON to RPC mapping is enabled, where the\nrepresentation of the JSON in the request body is determined by\nprotos JSON encoding:\n\nHTTP | RPC\n-----|-----\n`PUT /v1/messages/123456 { \"text\": \"Hi!\" }` | `UpdateMessage(message_id: \"123456\" message { text: \"Hi!\" })`\n\nThe special name `*` can be used in the body mapping to define that\nevery field not bound by the path template should be mapped to the\nrequest body.  This enables the following alternative definition of\nthe update method:\n\n    service Messaging {\n      rpc UpdateMessage(Message) returns (Message) {\n        option (google.api.http) = {\n          put: \"/v1/messages/{message_id}\"\n          body: \"*\"\n        };\n      }\n    }\n    message Message {\n      string message_id = 1;\n      string text = 2;\n    }\n\n\nThe following HTTP JSON to RPC mapping is enabled:\n\nHTTP | RPC\n-----|-----\n`PUT /v1/messages/123456 { \"text\": \"Hi!\" }` | `UpdateMessage(message_id: \"123456\" text: \"Hi!\")`\n\nNote that when using `*` in the body mapping, it is not possible to\nhave HTTP parameters, as all fields not bound by the path end in\nthe body. This makes this option more rarely used in practice of\ndefining REST APIs. The common usage of `*` is in custom methods\nwhich don't use the URL at all for transferring data.\n\nIt is possible to define multiple HTTP methods for one RPC by using\nthe `additional_bindings` option. Example:\n\n    service Messaging {\n      rpc GetMessage(GetMessageRequest) returns (Message) {\n        option (google.api.http) = {\n          get: \"/v1/messages/{message_id}\"\n          additional_bindings {\n            get: \"/v1/users/{user_id}/messages/{message_id}\"\n          }\n        };\n      }\n    }\n    message GetMessageRequest {\n      string message_id = 1;\n      string user_id = 2;\n    }\n\n\nThis enables the following two alternative HTTP JSON to RPC\nmappings:\n\nHTTP | RPC\n-----|-----\n`GET /v1/messages/123456` | `GetMessage(message_id: \"123456\")`\n`GET /v1/users/me/messages/123456` | `GetMessage(user_id: \"me\" message_id: \"123456\")`\n\n# Rules for HTTP mapping\n\nThe rules for mapping HTTP path, query parameters, and body fields\nto the request message are as follows:\n\n1. The `body` field specifies either `*` or a field path, or is\n   omitted. If omitted, it assumes there is no HTTP body.\n2. Leaf fields (recursive expansion of nested messages in the\n   request) can be classified into three types:\n    (a) Matched in the URL template.\n    (b) Covered by body (if body is `*`, everything except (a) fields;\n        else everything under the body field)\n    (c) All other fields.\n3. URL query parameters found in the HTTP request are mapped to (c) fields.\n4. Any body sent with an HTTP request can contain only (b) fields.\n\nThe syntax of the path template is as follows:\n\n    Template = \"/\" Segments [ Verb ] ;\n    Segments = Segment { \"/\" Segment } ;\n    Segment  = \"*\" | \"**\" | LITERAL | Variable ;\n    Variable = \"{\" FieldPath [ \"=\" Segments ] \"}\" ;\n    FieldPath = IDENT { \".\" IDENT } ;\n    Verb     = \":\" LITERAL ;\n\nThe syntax `*` matches a single path segment. It follows the semantics of\n[RFC 6570](https://tools.ietf.org/html/rfc6570) Section 3.2.2 Simple String\nExpansion.\n\nThe syntax `**` matches zero or more path segments. It follows the semantics\nof [RFC 6570](https://tools.ietf.org/html/rfc6570) Section 3.2.3 Reserved\nExpansion. NOTE: it must be the last segment in the path except the Verb.\n\nThe syntax `LITERAL` matches literal text in the URL path.\n\nThe syntax `Variable` matches the entire path as specified by its template;\nthis nested template must not contain further variables. If a variable\nmatches a single path segment, its template may be omitted, e.g. `{var}`\nis equivalent to `{var=*}`.\n\nNOTE: the field paths in variables and in the `body` must not refer to\nrepeated fields or map fields.\n\nUse CustomHttpPattern to specify any HTTP method that is not included in the\n`pattern` field, such as HEAD, or \"*\" to leave the HTTP method unspecified for\na given URL path rule. The wild-card rule is useful for services that provide\ncontent to Web (HTML) clients.",
-      "type": "object",
-      "properties": {
-        "put": {
-          "description": "Used for updating a resource.",
-          "type": "string"
-        },
-        "delete": {
-          "description": "Used for deleting a resource.",
-          "type": "string"
-        },
-        "body": {
-          "type": "string",
-          "description": "The name of the request field whose value is mapped to the HTTP body, or\n`*` for mapping all fields not captured by the path pattern to the HTTP\nbody. NOTE: the referred field must not be a repeated field and must be\npresent at the top-level of request message type."
-        },
-        "post": {
-          "description": "Used for creating a resource.",
-          "type": "string"
-        },
-        "mediaDownload": {
-          "$ref": "MediaDownload",
-          "description": "Use this only for Scotty Requests. Do not use this for bytestream methods.\nFor media support, add instead [][google.bytestream.RestByteStream] as an\nAPI to your configuration."
-        },
-        "additionalBindings": {
-          "description": "Additional HTTP bindings for the selector. Nested bindings must\nnot contain an `additional_bindings` field themselves (that is,\nthe nesting may only be one level deep).",
-          "type": "array",
-          "items": {
-            "$ref": "HttpRule"
-          }
-        },
-        "responseBody": {
-          "description": "The name of the response field whose value is mapped to the HTTP body of\nresponse. Other response fields are ignored. This field is optional. When\nnot set, the response message will be used as HTTP body of response.\nNOTE: the referred field must be not a repeated field and must be present\nat the top-level of response message type.",
-          "type": "string"
-        },
-        "mediaUpload": {
-          "$ref": "MediaUpload",
-          "description": "Use this only for Scotty Requests. Do not use this for media support using\nBytestream, add instead\n[][google.bytestream.RestByteStream] as an API to your\nconfiguration for Bytestream methods."
-        },
-        "selector": {
-          "description": "Selects methods to which this rule applies.\n\nRefer to selector for syntax details.",
-          "type": "string"
-        },
-        "custom": {
-          "$ref": "CustomHttpPattern",
-          "description": "Custom pattern is used for defining custom verbs."
-        },
-        "patch": {
-          "description": "Used for updating a resource.",
-          "type": "string"
-        },
-        "get": {
-          "type": "string",
-          "description": "Used for listing and getting information about resources."
-        }
-      },
-      "id": "HttpRule"
-    },
-    "VisibilityRule": {
-      "description": "A visibility rule provides visibility configuration for an individual API\nelement.",
-      "type": "object",
-      "properties": {
-        "restriction": {
-          "description": "A comma-separated list of visibility labels that apply to the `selector`.\nAny of the listed labels can be used to grant the visibility.\n\nIf a rule has multiple labels, removing one of the labels but not all of\nthem can break clients.\n\nExample:\n\n    visibility:\n      rules:\n      - selector: google.calendar.Calendar.EnhancedSearch\n        restriction: GOOGLE_INTERNAL, TRUSTED_TESTER\n\nRemoving GOOGLE_INTERNAL from this restriction will break clients that\nrely on this method and only had access to it through GOOGLE_INTERNAL.",
-          "type": "string"
-        },
-        "selector": {
-          "type": "string",
-          "description": "Selects methods, messages, fields, enums, etc. to which this rule applies.\n\nRefer to selector for syntax details."
-        }
-      },
-      "id": "VisibilityRule"
-    },
-    "MonitoringDestination": {
-      "properties": {
-        "monitoredResource": {
-          "description": "The monitored resource type. The type must be defined in\nService.monitored_resources section.",
-          "type": "string"
-        },
-        "metrics": {
-          "description": "Names of the metrics to report to this monitoring destination.\nEach name must be defined in Service.metrics section.",
-          "type": "array",
-          "items": {
-            "type": "string"
-          }
-        }
-      },
-      "id": "MonitoringDestination",
-      "description": "Configuration of a specific monitoring destination (the producer project\nor the consumer project).",
-      "type": "object"
-    },
-    "Visibility": {
-      "type": "object",
-      "properties": {
-        "rules": {
-          "type": "array",
-          "items": {
-            "$ref": "VisibilityRule"
-          },
-          "description": "A list of visibility rules that apply to individual API elements.\n\n**NOTE:** All service configuration rules follow \"last one wins\" order."
-        }
-      },
-      "id": "Visibility",
-      "description": "`Visibility` defines restrictions for the visibility of service\nelements.  Restrictions are specified using visibility labels\n(e.g., TRUSTED_TESTER) that are elsewhere linked to users and projects.\n\nUsers and projects can have access to more than one visibility label. The\neffective visibility for multiple labels is the union of each label's\nelements, plus any unrestricted elements.\n\nIf an element and its parents have no restrictions, visibility is\nunconditionally granted.\n\nExample:\n\n    visibility:\n      rules:\n      - selector: google.calendar.Calendar.EnhancedSearch\n        restriction: TRUSTED_TESTER\n      - selector: google.calendar.Calendar.Delegate\n        restriction: GOOGLE_INTERNAL\n\nHere, all methods are publicly visible except for the restricted methods\nEnhancedSearch and Delegate."
-    },
-    "SystemParameters": {
-      "description": "### System parameter configuration\n\nA system parameter is a special kind of parameter defined by the API\nsystem, not by an individual API. It is typically mapped to an HTTP header\nand/or a URL query parameter. This configuration specifies which methods\nchange the names of the system parameters.",
-      "type": "object",
-      "properties": {
-        "rules": {
-          "description": "Define system parameters.\n\nThe parameters defined here will override the default parameters\nimplemented by the system. If this field is missing from the service\nconfig, default system parameters will be used. Default system parameters\nand names is implementation-dependent.\n\nExample: define api key for all methods\n\n    system_parameters\n      rules:\n        - selector: \"*\"\n          parameters:\n            - name: api_key\n              url_query_parameter: api_key\n\n\nExample: define 2 api key names for a specific method.\n\n    system_parameters\n      rules:\n        - selector: \"/ListShelves\"\n          parameters:\n            - name: api_key\n              http_header: Api-Key1\n            - name: api_key\n              http_header: Api-Key2\n\n**NOTE:** All service configuration rules follow \"last one wins\" order.",
-          "type": "array",
-          "items": {
-            "$ref": "SystemParameterRule"
-          }
-        }
-      },
-      "id": "SystemParameters"
-    },
-    "Step": {
-      "properties": {
-        "description": {
-          "type": "string",
-          "description": "The short description of the step."
-        },
-        "status": {
-          "type": "string",
-          "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.",
-            "The operation or step has completed with cancellation."
-          ],
-          "enum": [
-            "STATUS_UNSPECIFIED",
-            "DONE",
-            "NOT_STARTED",
-            "IN_PROGRESS",
-            "FAILED",
-            "CANCELLED"
-          ],
-          "description": "The status code."
-        }
-      },
-      "id": "Step",
-      "description": "Represents the status of one operation step.",
-      "type": "object"
-    },
-    "LoggingDestination": {
-      "description": "Configuration of a specific logging destination (the producer project\nor the consumer project).",
-      "type": "object",
-      "properties": {
-        "logs": {
-          "description": "Names of the logs to be sent to this destination. Each name must\nbe defined in the Service.logs section. If the log name is\nnot a domain scoped name, it will be automatically prefixed with\nthe service name followed by \"/\".",
-          "type": "array",
-          "items": {
-            "type": "string"
-          }
-        },
-        "monitoredResource": {
-          "description": "The monitored resource type. The type must be defined in the\nService.monitored_resources section.",
-          "type": "string"
-        }
-      },
-      "id": "LoggingDestination"
-    },
-    "Option": {
-      "description": "A protocol buffer option, which can be attached to a message, field,\nenumeration, etc.",
-      "type": "object",
-      "properties": {
-        "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,\nthe corresponding wrapper type defined in google/protobuf/wrappers.proto\nshould be used. If the value is an enum, it should be stored as an int32\nvalue using the google.protobuf.Int32Value type.",
-          "type": "object"
-        },
-        "name": {
-          "description": "The option's name. For protobuf built-in options (options defined in\ndescriptor.proto), this is the short name. For example, `\"map_entry\"`.\nFor custom options, it should be the fully-qualified name. For example,\n`\"google.api.http\"`.",
-          "type": "string"
-        }
-      },
-      "id": "Option"
-    },
-    "Logging": {
-      "description": "Logging configuration of the service.\n\nThe following example shows how to configure logs to be sent to the\nproducer and consumer projects. In the example, the `activity_history`\nlog is sent to both the producer and consumer projects, whereas the\n`purchase_history` log is only sent to the producer project.\n\n    monitored_resources:\n    - type: library.googleapis.com/branch\n      labels:\n      - key: /city\n        description: The city where the library branch is located in.\n      - key: /name\n        description: The name of the branch.\n    logs:\n    - name: activity_history\n      labels:\n      - key: /customer_id\n    - name: purchase_history\n    logging:\n      producer_destinations:\n      - monitored_resource: library.googleapis.com/branch\n        logs:\n        - activity_history\n        - purchase_history\n      consumer_destinations:\n      - monitored_resource: library.googleapis.com/branch\n        logs:\n        - activity_history",
-      "type": "object",
-      "properties": {
-        "consumerDestinations": {
-          "description": "Logging configurations for sending logs to the consumer project.\nThere can be multiple consumer destinations, each one must have a\ndifferent monitored resource type. A log can be used in at most\none consumer destination.",
-          "type": "array",
-          "items": {
-            "$ref": "LoggingDestination"
-          }
-        },
-        "producerDestinations": {
-          "description": "Logging configurations for sending logs to the producer project.\nThere can be multiple producer destinations, each one must have a\ndifferent monitored resource type. A log can be used in at most\none producer destination.",
-          "type": "array",
-          "items": {
-            "$ref": "LoggingDestination"
-          }
-        }
-      },
-      "id": "Logging"
-    },
-    "Method": {
-      "type": "object",
-      "properties": {
-        "responseTypeUrl": {
-          "type": "string",
-          "description": "The URL of the output message type."
-        },
-        "options": {
-          "description": "Any metadata attached to the method.",
-          "type": "array",
-          "items": {
-            "$ref": "Option"
-          }
-        },
-        "responseStreaming": {
-          "description": "If true, the response is streamed.",
-          "type": "boolean"
-        },
-        "name": {
-          "description": "The simple name of this method.",
-          "type": "string"
-        },
-        "requestTypeUrl": {
-          "description": "A URL of the input message type.",
-          "type": "string"
-        },
-        "requestStreaming": {
-          "description": "If true, the request is streamed.",
-          "type": "boolean"
-        },
-        "syntax": {
-          "enumDescriptions": [
-            "Syntax `proto2`.",
-            "Syntax `proto3`."
-          ],
-          "enum": [
-            "SYNTAX_PROTO2",
-            "SYNTAX_PROTO3"
-          ],
-          "description": "The source syntax of this method.",
-          "type": "string"
-        }
-      },
-      "id": "Method",
-      "description": "Method represents a method of an api."
-    },
-    "Mixin": {
-      "description": "Declares an API to be included in this API. The including API must\nredeclare all the methods from the included API, but documentation\nand options are inherited as follows:\n\n- If after comment and whitespace stripping, the documentation\n  string of the redeclared method is empty, it will be inherited\n  from the original method.\n\n- Each annotation belonging to the service config (http,\n  visibility) which is not set in the redeclared method will be\n  inherited.\n\n- If an http annotation is inherited, the path pattern will be\n  modified as follows. Any version prefix will be replaced by the\n  version of the including API plus the root path if specified.\n\nExample of a simple mixin:\n\n    package google.acl.v1;\n    service AccessControl {\n      // Get the underlying ACL object.\n      rpc GetAcl(GetAclRequest) returns (Acl) {\n        option (google.api.http).get = \"/v1/{resource=**}:getAcl\";\n      }\n    }\n\n    package google.storage.v2;\n    service Storage {\n      //       rpc GetAcl(GetAclRequest) returns (Acl);\n\n      // Get a data record.\n      rpc GetData(GetDataRequest) returns (Data) {\n        option (google.api.http).get = \"/v2/{resource=**}\";\n      }\n    }\n\nExample of a mixin configuration:\n\n    apis:\n    - name: google.storage.v2.Storage\n      mixins:\n      - name: google.acl.v1.AccessControl\n\nThe mixin construct implies that all methods in `AccessControl` are\nalso declared with same name and request/response types in\n`Storage`. A documentation generator or annotation processor will\nsee the effective `Storage.GetAcl` method after inherting\ndocumentation and annotations as follows:\n\n    service Storage {\n      // Get the underlying ACL object.\n      rpc GetAcl(GetAclRequest) returns (Acl) {\n        option (google.api.http).get = \"/v2/{resource=**}:getAcl\";\n      }\n      ...\n    }\n\nNote how the version in the path pattern changed from `v1` to `v2`.\n\nIf the `root` field in the mixin is specified, it should be a\nrelative path under which inherited HTTP paths are placed. Example:\n\n    apis:\n    - name: google.storage.v2.Storage\n      mixins:\n      - name: google.acl.v1.AccessControl\n        root: acls\n\nThis implies the following inherited HTTP annotation:\n\n    service Storage {\n      // Get the underlying ACL object.\n      rpc GetAcl(GetAclRequest) returns (Acl) {\n        option (google.api.http).get = \"/v2/acls/{resource=**}:getAcl\";\n      }\n      ...\n    }",
-      "type": "object",
-      "properties": {
-        "name": {
-          "description": "The fully qualified name of the API which is included.",
-          "type": "string"
-        },
-        "root": {
-          "description": "If non-empty specifies a path under which inherited HTTP paths\nare rooted.",
-          "type": "string"
-        }
-      },
-      "id": "Mixin"
-    },
-    "CustomError": {
-      "description": "Customize service error responses.  For example, list any service\nspecific protobuf types that can appear in error detail lists of\nerror responses.\n\nExample:\n\n    custom_error:\n      types:\n      - google.foo.v1.CustomError\n      - google.foo.v1.AnotherError",
-      "type": "object",
-      "properties": {
-        "rules": {
-          "type": "array",
-          "items": {
-            "$ref": "CustomErrorRule"
-          },
-          "description": "The list of custom error rules that apply to individual API messages.\n\n**NOTE:** All service configuration rules follow \"last one wins\" order."
-        },
-        "types": {
-          "description": "The list of custom error detail types, e.g. 'google.foo.v1.CustomError'.",
-          "type": "array",
-          "items": {
-            "type": "string"
-          }
-        }
-      },
-      "id": "CustomError"
-    },
-    "Http": {
-      "description": "Defines the HTTP configuration for a service. It contains a list of\nHttpRule, each specifying the mapping of an RPC method\nto one or more HTTP REST API methods.",
-      "type": "object",
-      "properties": {
-        "rules": {
-          "description": "A list of HTTP configuration rules that apply to individual API methods.\n\n**NOTE:** All service configuration rules follow \"last one wins\" order.",
-          "type": "array",
-          "items": {
-            "$ref": "HttpRule"
-          }
-        }
-      },
-      "id": "Http"
-    },
-    "SourceInfo": {
-      "description": "Source information used to create a Service Config",
-      "type": "object",
-      "properties": {
-        "sourceFiles": {
-          "description": "All files used during config generation.",
-          "type": "array",
-          "items": {
-            "type": "object",
-            "additionalProperties": {
-              "description": "Properties of the object. Contains field @type with type URL.",
-              "type": "any"
-            }
-          }
-        }
-      },
-      "id": "SourceInfo"
-    },
-    "Control": {
-      "description": "Selects and configures the service controller used by the service.  The\nservice controller handles features like abuse, quota, billing, logging,\nmonitoring, etc.",
-      "type": "object",
-      "properties": {
-        "environment": {
-          "description": "The service control environment to use. If empty, no control plane\nfeature (like quota and billing) will be enabled.",
-          "type": "string"
-        }
-      },
-      "id": "Control"
-    },
-    "SystemParameter": {
-      "properties": {
-        "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\nsensitive.",
-          "type": "string"
-        },
-        "httpHeader": {
-          "description": "Define the HTTP header name to use for the parameter. It is case\ninsensitive.",
-          "type": "string"
-        }
-      },
-      "id": "SystemParameter",
-      "description": "Define a parameter's name and location. The parameter may be passed as either\nan HTTP header or a URL query parameter, and if both are passed the behavior\nis implementation-dependent.",
-      "type": "object"
-    },
-    "Field": {
-      "properties": {
-        "jsonName": {
-          "description": "The field JSON name.",
-          "type": "string"
-        },
-        "kind": {
-          "description": "The field type.",
-          "type": "string",
-          "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."
-          ],
-          "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"
-          ]
-        },
-        "options": {
-          "description": "The protocol buffer options.",
-          "type": "array",
-          "items": {
-            "$ref": "Option"
-          }
-        },
-        "oneofIndex": {
-          "description": "The index of the field type in `Type.oneofs`, for message or enumeration\ntypes. The first type has index 1; zero means the type is not in the list.",
-          "format": "int32",
-          "type": "integer"
-        },
-        "cardinality": {
-          "description": "The field cardinality.",
-          "type": "string",
-          "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"
-          ]
-        },
-        "packed": {
-          "description": "Whether to use alternative packed wire representation.",
-          "type": "boolean"
-        },
-        "defaultValue": {
-          "description": "The string value of the default value of this field. Proto2 syntax only.",
-          "type": "string"
-        },
-        "name": {
-          "type": "string",
-          "description": "The field name."
-        },
-        "typeUrl": {
-          "description": "The field type URL, without the scheme, for message or enumeration\ntypes. Example: `\"type.googleapis.com/google.protobuf.Timestamp\"`.",
-          "type": "string"
-        },
-        "number": {
-          "description": "The field number.",
-          "format": "int32",
-          "type": "integer"
-        }
-      },
-      "id": "Field",
-      "description": "A single field of a message type.",
-      "type": "object"
-    },
-    "Monitoring": {
-      "description": "Monitoring configuration of the service.\n\nThe example below shows how to configure monitored resources and metrics\nfor monitoring. In the example, a monitored resource and two metrics are\ndefined. The `library.googleapis.com/book/returned_count` metric is sent\nto both producer and consumer projects, whereas the\n`library.googleapis.com/book/overdue_count` metric is only sent to the\nconsumer project.\n\n    monitored_resources:\n    - type: library.googleapis.com/branch\n      labels:\n      - key: /city\n        description: The city where the library branch is located in.\n      - key: /name\n        description: The name of the branch.\n    metrics:\n    - name: library.googleapis.com/book/returned_count\n      metric_kind: DELTA\n      value_type: INT64\n      labels:\n      - key: /customer_id\n    - name: library.googleapis.com/book/overdue_count\n      metric_kind: GAUGE\n      value_type: INT64\n      labels:\n      - key: /customer_id\n    monitoring:\n      producer_destinations:\n      - monitored_resource: library.googleapis.com/branch\n        metrics:\n        - library.googleapis.com/book/returned_count\n      consumer_destinations:\n      - monitored_resource: library.googleapis.com/branch\n        metrics:\n        - library.googleapis.com/book/returned_count\n        - library.googleapis.com/book/overdue_count",
-      "type": "object",
-      "properties": {
-        "consumerDestinations": {
-          "description": "Monitoring configurations for sending metrics to the consumer project.\nThere can be multiple consumer destinations, each one must have a\ndifferent monitored resource type. A metric can be used in at most\none consumer destination.",
-          "type": "array",
-          "items": {
-            "$ref": "MonitoringDestination"
-          }
-        },
-        "producerDestinations": {
-          "description": "Monitoring configurations for sending metrics to the producer project.\nThere can be multiple producer destinations, each one must have a\ndifferent monitored resource type. A metric can be used in at most\none producer destination.",
-          "type": "array",
-          "items": {
-            "$ref": "MonitoringDestination"
-          }
-        }
-      },
-      "id": "Monitoring"
-    },
-    "Enum": {
-      "description": "Enum type definition.",
-      "type": "object",
-      "properties": {
-        "sourceContext": {
-          "description": "The source context.",
-          "$ref": "SourceContext"
-        },
-        "syntax": {
-          "description": "The source syntax.",
-          "type": "string",
-          "enumDescriptions": [
-            "Syntax `proto2`.",
-            "Syntax `proto3`."
-          ],
-          "enum": [
-            "SYNTAX_PROTO2",
-            "SYNTAX_PROTO3"
-          ]
-        },
-        "name": {
-          "description": "Enum type name.",
-          "type": "string"
-        },
-        "enumvalue": {
-          "description": "Enum value definitions.",
-          "type": "array",
-          "items": {
-            "$ref": "EnumValue"
-          }
-        },
-        "options": {
-          "description": "Protocol buffer options.",
-          "type": "array",
-          "items": {
-            "$ref": "Option"
-          }
-        }
-      },
-      "id": "Enum"
-    },
     "LabelDescriptor": {
       "description": "A description of a label.",
       "type": "object",
@@ -776,8 +24,6 @@
           "type": "string"
         },
         "valueType": {
-          "description": "The type of data that can be assigned to the label.",
-          "type": "string",
           "enumDescriptions": [
             "A variable-length string. This is the default.",
             "Boolean; true or false.",
@@ -787,19 +33,20 @@
             "STRING",
             "BOOL",
             "INT64"
-          ]
+          ],
+          "description": "The type of data that can be assigned to the label.",
+          "type": "string"
         }
       },
       "id": "LabelDescriptor"
     },
     "EnableServiceRequest": {
+      "id": "EnableServiceRequest",
       "description": "Request message for EnableService method.",
       "type": "object",
-      "properties": {},
-      "id": "EnableServiceRequest"
+      "properties": {}
     },
     "Type": {
-      "description": "A protocol buffer message type.",
       "type": "object",
       "properties": {
         "fields": {
@@ -821,15 +68,15 @@
           }
         },
         "syntax": {
+          "enum": [
+            "SYNTAX_PROTO2",
+            "SYNTAX_PROTO3"
+          ],
           "description": "The source syntax.",
           "type": "string",
           "enumDescriptions": [
             "Syntax `proto2`.",
             "Syntax `proto3`."
-          ],
-          "enum": [
-            "SYNTAX_PROTO2",
-            "SYNTAX_PROTO3"
           ]
         },
         "sourceContext": {
@@ -844,15 +91,16 @@
           }
         }
       },
-      "id": "Type"
+      "id": "Type",
+      "description": "A protocol buffer message type."
     },
     "Experimental": {
       "description": "Experimental service configuration. These configuration options can\nonly be used by whitelisted users.",
       "type": "object",
       "properties": {
         "authorization": {
-          "description": "Authorization configuration.",
-          "$ref": "AuthorizationConfig"
+          "$ref": "AuthorizationConfig",
+          "description": "Authorization configuration."
         }
       },
       "id": "Experimental"
@@ -872,9 +120,6 @@
       "id": "Backend"
     },
     "DocumentationRule": {
-      "id": "DocumentationRule",
-      "description": "A documentation rule provides information about individual API elements.",
-      "type": "object",
       "properties": {
         "description": {
           "description": "Description of the selected API(s).",
@@ -888,30 +133,26 @@
           "description": "The selector is a comma-separated list of patterns. Each pattern is a\nqualified name of the element which may end in \"*\", indicating a wildcard.\nWildcards are only allowed at the end and for a whole component of the\nqualified name, i.e. \"foo.*\" is ok, but not \"foo.b*\" or \"foo.*.bar\". To\nspecify a default for all applicable elements, the whole pattern \"*\"\nis used.",
           "type": "string"
         }
-      }
+      },
+      "id": "DocumentationRule",
+      "description": "A documentation rule provides information about individual API elements.",
+      "type": "object"
     },
     "AuthorizationConfig": {
-      "description": "Configuration of authorization.\n\nThis section determines the authorization provider, if unspecified, then no\nauthorization check will be done.\n\nExample:\n\n    experimental:\n      authorization:\n        provider: firebaserules.googleapis.com",
       "type": "object",
       "properties": {
         "provider": {
-          "type": "string",
-          "description": "The name of the authorization provider, such as\nfirebaserules.googleapis.com."
+          "description": "The name of the authorization provider, such as\nfirebaserules.googleapis.com.",
+          "type": "string"
         }
       },
-      "id": "AuthorizationConfig"
+      "id": "AuthorizationConfig",
+      "description": "Configuration of authorization.\n\nThis section determines the authorization provider, if unspecified, then no\nauthorization check will be done.\n\nExample:\n\n    experimental:\n      authorization:\n        provider: firebaserules.googleapis.com"
     },
     "ContextRule": {
       "description": "A context rule provides information about the context for an individual API\nelement.",
       "type": "object",
       "properties": {
-        "requested": {
-          "description": "A list of full type names of requested contexts.",
-          "type": "array",
-          "items": {
-            "type": "string"
-          }
-        },
         "selector": {
           "description": "Selects the methods to which this rule applies.\n\nRefer to selector for syntax details.",
           "type": "string"
@@ -922,13 +163,56 @@
           "items": {
             "type": "string"
           }
+        },
+        "requested": {
+          "description": "A list of full type names of requested contexts.",
+          "type": "array",
+          "items": {
+            "type": "string"
+          }
         }
       },
       "id": "ContextRule"
     },
     "MetricDescriptor": {
+      "description": "Defines a metric type and its schema. Once a metric descriptor is created,\ndeleting or altering it stops data collection and makes the metric type's\nexisting data unusable.",
       "type": "object",
       "properties": {
+        "metricKind": {
+          "type": "string",
+          "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\nmeasurements in a time series should have the same start time\nand increasing end times, until an event resets the cumulative\nvalue to zero and sets a new start time for the following\npoints."
+          ],
+          "enum": [
+            "METRIC_KIND_UNSPECIFIED",
+            "GAUGE",
+            "DELTA",
+            "CUMULATIVE"
+          ],
+          "description": "Whether the metric records instantaneous values, changes to a value, etc.\nSome combinations of `metric_kind` and `value_type` might not be supported."
+        },
+        "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.\nUse sentence case without an ending period, for example \"Request count\".",
+          "type": "string"
+        },
+        "unit": {
+          "type": "string",
+          "description": "The unit in which the metric value is reported. It is only applicable\nif the `value_type` is `INT64`, `DOUBLE`, or `DISTRIBUTION`. The\nsupported units are a subset of [The Unified Code for Units of\nMeasure](http://unitsofmeasure.org/ucum.html) standard:\n\n**Basic units (UNIT)**\n\n* `bit`   bit\n* `By`    byte\n* `s`     second\n* `min`   minute\n* `h`     hour\n* `d`     day\n\n**Prefixes (PREFIX)**\n\n* `k`     kilo    (10**3)\n* `M`     mega    (10**6)\n* `G`     giga    (10**9)\n* `T`     tera    (10**12)\n* `P`     peta    (10**15)\n* `E`     exa     (10**18)\n* `Z`     zetta   (10**21)\n* `Y`     yotta   (10**24)\n* `m`     milli   (10**-3)\n* `u`     micro   (10**-6)\n* `n`     nano    (10**-9)\n* `p`     pico    (10**-12)\n* `f`     femto   (10**-15)\n* `a`     atto    (10**-18)\n* `z`     zepto   (10**-21)\n* `y`     yocto   (10**-24)\n* `Ki`    kibi    (2**10)\n* `Mi`    mebi    (2**20)\n* `Gi`    gibi    (2**30)\n* `Ti`    tebi    (2**40)\n\n**Grammar**\n\nThe grammar includes the dimensionless unit `1`, such as `1/s`.\n\nThe grammar also includes these connectors:\n\n* `/`    division (as an infix operator, e.g. `1/s`).\n* `.`    multiplication (as an infix operator, e.g. `GBy.d`)\n\nThe grammar for a unit is as follows:\n\n    Expression = Component { \".\" Component } { \"/\" Component } ;\n\n    Component = [ PREFIX ] UNIT [ Annotation ]\n              | Annotation\n              | \"1\"\n              ;\n\n    Annotation = \"{\" NAME \"}\" ;\n\nNotes:\n\n* `Annotation` is just a comment if it follows a `UNIT` and is\n   equivalent to `1` if it is used alone. For examples,\n   `{requests}/s == 1/s`, `By{transmitted}/s == By/s`.\n* `NAME` is a sequence of non-blank printable ASCII characters not\n   containing '{' or '}'."
+        },
+        "labels": {
+          "description": "The set of labels that can be used to describe a specific\ninstance of this metric type. For example, the\n`appengine.googleapis.com/http/server/response_latencies` metric\ntype has a label for the HTTP response code, `response_code`, so\nyou can look at latencies for successful responses or just\nfor responses that failed.",
+          "type": "array",
+          "items": {
+            "$ref": "LabelDescriptor"
+          }
+        },
         "name": {
           "description": "The resource name of the metric descriptor. Depending on the\nimplementation, the name typically includes: (1) the parent resource name\nthat defines the scope of the metric type or of its data; and (2) the\nmetric's URL-encoded type, which also appears in the `type` field of this\ndescriptor. For example, following is the resource name of a custom\nmetric within the GCP project `my-project-id`:\n\n    \"projects/my-project-id/metricDescriptors/custom.googleapis.com%2Finvoice%2Fpaid%2Famount\"",
           "type": "string"
@@ -938,6 +222,8 @@
           "type": "string"
         },
         "valueType": {
+          "description": "Whether the measurement is an integer, a floating-point number, etc.\nSome combinations of `metric_kind` and `value_type` might not be supported.",
+          "type": "string",
           "enumDescriptions": [
             "Do not use this default value.",
             "The value is a boolean.\nThis value type can be used only if the metric kind is `GAUGE`.",
@@ -955,51 +241,12 @@
             "STRING",
             "DISTRIBUTION",
             "MONEY"
-          ],
-          "description": "Whether the measurement is an integer, a floating-point number, etc.\nSome combinations of `metric_kind` and `value_type` might not be supported.",
-          "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\nmeasurements in a time series should have the same start time\nand increasing end times, until an event resets the cumulative\nvalue to zero and sets a new start time for the following\npoints."
-          ],
-          "enum": [
-            "METRIC_KIND_UNSPECIFIED",
-            "GAUGE",
-            "DELTA",
-            "CUMULATIVE"
-          ],
-          "description": "Whether the metric records instantaneous values, changes to a value, etc.\nSome combinations of `metric_kind` and `value_type` might not be supported.",
-          "type": "string"
-        },
-        "displayName": {
-          "description": "A concise name for the metric, which can be displayed in user interfaces.\nUse sentence case without an ending period, for example \"Request count\".",
-          "type": "string"
-        },
-        "description": {
-          "description": "A detailed description of the metric, which can be used in documentation.",
-          "type": "string"
-        },
-        "unit": {
-          "description": "The unit in which the metric value is reported. It is only applicable\nif the `value_type` is `INT64`, `DOUBLE`, or `DISTRIBUTION`. The\nsupported units are a subset of [The Unified Code for Units of\nMeasure](http://unitsofmeasure.org/ucum.html) standard:\n\n**Basic units (UNIT)**\n\n* `bit`   bit\n* `By`    byte\n* `s`     second\n* `min`   minute\n* `h`     hour\n* `d`     day\n\n**Prefixes (PREFIX)**\n\n* `k`     kilo    (10**3)\n* `M`     mega    (10**6)\n* `G`     giga    (10**9)\n* `T`     tera    (10**12)\n* `P`     peta    (10**15)\n* `E`     exa     (10**18)\n* `Z`     zetta   (10**21)\n* `Y`     yotta   (10**24)\n* `m`     milli   (10**-3)\n* `u`     micro   (10**-6)\n* `n`     nano    (10**-9)\n* `p`     pico    (10**-12)\n* `f`     femto   (10**-15)\n* `a`     atto    (10**-18)\n* `z`     zepto   (10**-21)\n* `y`     yocto   (10**-24)\n* `Ki`    kibi    (2**10)\n* `Mi`    mebi    (2**20)\n* `Gi`    gibi    (2**30)\n* `Ti`    tebi    (2**40)\n\n**Grammar**\n\nThe grammar includes the dimensionless unit `1`, such as `1/s`.\n\nThe grammar also includes these connectors:\n\n* `/`    division (as an infix operator, e.g. `1/s`).\n* `.`    multiplication (as an infix operator, e.g. `GBy.d`)\n\nThe grammar for a unit is as follows:\n\n    Expression = Component { \".\" Component } { \"/\" Component } ;\n\n    Component = [ PREFIX ] UNIT [ Annotation ]\n              | Annotation\n              | \"1\"\n              ;\n\n    Annotation = \"{\" NAME \"}\" ;\n\nNotes:\n\n* `Annotation` is just a comment if it follows a `UNIT` and is\n   equivalent to `1` if it is used alone. For examples,\n   `{requests}/s == 1/s`, `By{transmitted}/s == By/s`.\n* `NAME` is a sequence of non-blank printable ASCII characters not\n   containing '{' or '}'.",
-          "type": "string"
-        },
-        "labels": {
-          "description": "The set of labels that can be used to describe a specific\ninstance of this metric type. For example, the\n`appengine.googleapis.com/http/server/response_latencies` metric\ntype has a label for the HTTP response code, `response_code`, so\nyou can look at latencies for successful responses or just\nfor responses that failed.",
-          "type": "array",
-          "items": {
-            "$ref": "LabelDescriptor"
-          }
+          ]
         }
       },
-      "id": "MetricDescriptor",
-      "description": "Defines a metric type and its schema. Once a metric descriptor is created,\ndeleting or altering it stops data collection and makes the metric type's\nexisting data unusable."
+      "id": "MetricDescriptor"
     },
     "SourceContext": {
-      "description": "`SourceContext` represents information about the source of a\nprotobuf element, like the file in which it is defined.",
       "type": "object",
       "properties": {
         "fileName": {
@@ -1007,45 +254,11 @@
           "type": "string"
         }
       },
-      "id": "SourceContext"
-    },
-    "Endpoint": {
-      "type": "object",
-      "properties": {
-        "apis": {
-          "description": "The list of APIs served by this endpoint.",
-          "type": "array",
-          "items": {
-            "type": "string"
-          }
-        },
-        "aliases": {
-          "description": "DEPRECATED: This field is no longer supported. Instead of using aliases,\nplease specify multiple google.api.Endpoint for each of the intented\nalias.\n\nAdditional names that this endpoint will be hosted on.",
-          "type": "array",
-          "items": {
-            "type": "string"
-          }
-        },
-        "features": {
-          "description": "The list of features enabled on this endpoint.",
-          "type": "array",
-          "items": {
-            "type": "string"
-          }
-        },
-        "allowCors": {
-          "type": "boolean",
-          "description": "Allowing\n[CORS](https://en.wikipedia.org/wiki/Cross-origin_resource_sharing), aka\ncross-domain traffic, would allow the backends served from this endpoint to\nreceive and respond to HTTP OPTIONS requests. The response will be used by\nthe browser to determine whether the subsequent cross-origin request is\nallowed to proceed."
-        },
-        "name": {
-          "description": "The canonical name of this endpoint.",
-          "type": "string"
-        }
-      },
-      "id": "Endpoint",
-      "description": "`Endpoint` describes a network endpoint that serves a set of APIs.\nA service may expose any number of endpoints, and all endpoints share the\nsame service configuration, such as quota configuration and monitoring\nconfiguration.\n\nExample service configuration:\n\n    name: library-example.googleapis.com\n    endpoints:\n      # Below entry makes 'google.example.library.v1.Library'\n      # API be served from endpoint address library-example.googleapis.com.\n      # It also allows HTTP OPTIONS calls to be passed to the backend, for\n      # it to decide whether the subsequent cross-origin request is\n      # allowed to proceed.\n    - name: library-example.googleapis.com\n      allow_cors: true"
+      "id": "SourceContext",
+      "description": "`SourceContext` represents information about the source of a\nprotobuf element, like the file in which it is defined."
     },
     "ListEnabledServicesResponse": {
+      "type": "object",
       "properties": {
         "services": {
           "description": "Services enabled for the specified parent.",
@@ -1060,8 +273,43 @@
         }
       },
       "id": "ListEnabledServicesResponse",
-      "description": "Response message for `ListEnabledServices` method.",
-      "type": "object"
+      "description": "Response message for `ListEnabledServices` method."
+    },
+    "Endpoint": {
+      "type": "object",
+      "properties": {
+        "aliases": {
+          "type": "array",
+          "items": {
+            "type": "string"
+          },
+          "description": "DEPRECATED: This field is no longer supported. Instead of using aliases,\nplease specify multiple google.api.Endpoint for each of the intented\nalias.\n\nAdditional names that this endpoint will be hosted on."
+        },
+        "features": {
+          "description": "The list of features enabled on this endpoint.",
+          "type": "array",
+          "items": {
+            "type": "string"
+          }
+        },
+        "allowCors": {
+          "description": "Allowing\n[CORS](https://en.wikipedia.org/wiki/Cross-origin_resource_sharing), aka\ncross-domain traffic, would allow the backends served from this endpoint to\nreceive and respond to HTTP OPTIONS requests. The response will be used by\nthe browser to determine whether the subsequent cross-origin request is\nallowed to proceed.",
+          "type": "boolean"
+        },
+        "name": {
+          "description": "The canonical name of this endpoint.",
+          "type": "string"
+        },
+        "apis": {
+          "description": "The list of APIs served by this endpoint.",
+          "type": "array",
+          "items": {
+            "type": "string"
+          }
+        }
+      },
+      "id": "Endpoint",
+      "description": "`Endpoint` describes a network endpoint that serves a set of APIs.\nA service may expose any number of endpoints, and all endpoints share the\nsame service configuration, such as quota configuration and monitoring\nconfiguration.\n\nExample service configuration:\n\n    name: library-example.googleapis.com\n    endpoints:\n      # Below entry makes 'google.example.library.v1.Library'\n      # API be served from endpoint address library-example.googleapis.com.\n      # It also allows HTTP OPTIONS calls to be passed to the backend, for\n      # it to decide whether the subsequent cross-origin request is\n      # allowed to proceed.\n    - name: library-example.googleapis.com\n      allow_cors: true"
     },
     "OAuthRequirements": {
       "description": "OAuth scopes are a way to define data and permissions on data. For example,\nthere are scopes defined for \"Read-only access to Google Calendar\" and\n\"Access to Cloud Platform\". Users can consent to a scope for an application,\ngiving it permission to access that data on their behalf.\n\nOAuth scope specifications should be fairly coarse grained; a user will need\nto see and understand the text description of what your scope means.\n\nIn most cases: use one or at most two OAuth scopes for an entire family of\nproducts. If your product has multiple APIs, you should probably be sharing\nthe OAuth scope across all of those APIs.\n\nWhen you need finer grained OAuth consent screens: talk with your product\nmanagement about how developers will use them in practice.\n\nPlease note that even though each of the canonical scopes is enough for a\nrequest to be accepted and passed to the backend, a request can still fail\ndue to the backend requiring additional scopes or permissions.",
@@ -1075,11 +323,20 @@
       "id": "OAuthRequirements"
     },
     "Usage": {
+      "id": "Usage",
+      "description": "Configuration controlling usage of a service.",
       "type": "object",
       "properties": {
+        "requirements": {
+          "description": "Requirements that must be satisfied before a consumer project can use the\nservice. Each requirement is of the form \u003cservice.name\u003e/\u003crequirement-id\u003e;\nfor example 'serviceusage.googleapis.com/billing-enabled'.",
+          "type": "array",
+          "items": {
+            "type": "string"
+          }
+        },
         "producerNotificationChannel": {
-          "type": "string",
-          "description": "The full resource name of a channel used for sending notifications to the\nservice producer.\n\nGoogle Service Management currently only supports\n[Google Cloud Pub/Sub](https://cloud.google.com/pubsub) as a notification\nchannel. To use Google Cloud Pub/Sub as the channel, this must be the name\nof a Cloud Pub/Sub topic that uses the Cloud Pub/Sub topic name format\ndocumented in https://cloud.google.com/pubsub/docs/overview."
+          "description": "The full resource name of a channel used for sending notifications to the\nservice producer.\n\nGoogle Service Management currently only supports\n[Google Cloud Pub/Sub](https://cloud.google.com/pubsub) as a notification\nchannel. To use Google Cloud Pub/Sub as the channel, this must be the name\nof a Cloud Pub/Sub topic that uses the Cloud Pub/Sub topic name format\ndocumented in https://cloud.google.com/pubsub/docs/overview.",
+          "type": "string"
         },
         "rules": {
           "description": "A list of usage rules that apply to individual API methods.\n\n**NOTE:** All service configuration rules follow \"last one wins\" order.",
@@ -1087,40 +344,27 @@
           "items": {
             "$ref": "UsageRule"
           }
-        },
-        "requirements": {
-          "description": "Requirements that must be satisfied before a consumer project can use the\nservice. Each requirement is of the form \u003cservice.name\u003e/\u003crequirement-id\u003e;\nfor example 'serviceusage.googleapis.com/billing-enabled'.",
-          "type": "array",
-          "items": {
-            "type": "string"
-          }
         }
-      },
-      "id": "Usage",
-      "description": "Configuration controlling usage of a service."
+      }
     },
     "Context": {
-      "description": "`Context` defines which contexts an API requests.\n\nExample:\n\n    context:\n      rules:\n      - selector: \"*\"\n        requested:\n        - google.rpc.context.ProjectContext\n        - google.rpc.context.OriginContext\n\nThe above specifies that all methods in the API request\n`google.rpc.context.ProjectContext` and\n`google.rpc.context.OriginContext`.\n\nAvailable context types are defined in package\n`google.rpc.context`.",
       "type": "object",
       "properties": {
         "rules": {
-          "description": "A list of RPC context rules that apply to individual API methods.\n\n**NOTE:** All service configuration rules follow \"last one wins\" order.",
           "type": "array",
           "items": {
             "$ref": "ContextRule"
-          }
+          },
+          "description": "A list of RPC context rules that apply to individual API methods.\n\n**NOTE:** All service configuration rules follow \"last one wins\" order."
         }
       },
-      "id": "Context"
+      "id": "Context",
+      "description": "`Context` defines which contexts an API requests.\n\nExample:\n\n    context:\n      rules:\n      - selector: \"*\"\n        requested:\n        - google.rpc.context.ProjectContext\n        - google.rpc.context.OriginContext\n\nThe above specifies that all methods in the API request\n`google.rpc.context.ProjectContext` and\n`google.rpc.context.OriginContext`.\n\nAvailable context types are defined in package\n`google.rpc.context`."
     },
     "LogDescriptor": {
       "description": "A description of a log type. Example in YAML format:\n\n    - name: library.googleapis.com/activity_history\n      description: The history of borrowing and returning library items.\n      display_name: Activity\n      labels:\n      - key: /customer_id\n        description: Identifier of a library customer",
       "type": "object",
       "properties": {
-        "name": {
-          "description": "The name of the log. It must be less than 512 characters long and can\ninclude the following characters: upper- and lower-case alphanumeric\ncharacters [A-Za-z0-9], and punctuation characters including\nslash, underscore, hyphen, period [/_-.].",
-          "type": "string"
-        },
         "description": {
           "description": "A human-readable description of this log. This information appears in\nthe documentation and can contain details.",
           "type": "string"
@@ -1135,29 +379,28 @@
           "items": {
             "$ref": "LabelDescriptor"
           }
+        },
+        "name": {
+          "type": "string",
+          "description": "The name of the log. It must be less than 512 characters long and can\ninclude the following characters: upper- and lower-case alphanumeric\ncharacters [A-Za-z0-9], and punctuation characters including\nslash, underscore, hyphen, period [/_-.]."
         }
       },
       "id": "LogDescriptor"
     },
-    "CustomErrorRule": {
-      "type": "object",
-      "properties": {
-        "isErrorType": {
-          "description": "Mark this message as possible payload in error response.  Otherwise,\nobjects of this type will be filtered when they appear in error payload.",
-          "type": "boolean"
-        },
-        "selector": {
-          "description": "Selects messages to which this rule applies.\n\nRefer to selector for syntax details.",
-          "type": "string"
-        }
-      },
-      "id": "CustomErrorRule",
-      "description": "A custom error rule."
-    },
     "MonitoredResourceDescriptor": {
-      "description": "An object that describes the schema of a MonitoredResource object using a\ntype name and a set of labels.  For example, the monitored resource\ndescriptor for Google Compute Engine VM instances has a type of\n`\"gce_instance\"` and specifies the use of the labels `\"instance_id\"` and\n`\"zone\"` to identify particular VM instances.\n\nDifferent APIs can support different monitored resource types. APIs generally\nprovide a `list` method that returns the monitored resource descriptors used\nby the API.",
       "type": "object",
       "properties": {
+        "type": {
+          "type": "string",
+          "description": "Required. The monitored resource type. For example, the type\n`\"cloudsql_database\"` represents databases in Google Cloud SQL.\nThe maximum length of this value is 256 characters."
+        },
+        "labels": {
+          "type": "array",
+          "items": {
+            "$ref": "LabelDescriptor"
+          },
+          "description": "Required. A set of labels used to describe instances of this monitored\nresource type. For example, an individual Google Cloud SQL database is\nidentified by values for the labels `\"database_id\"` and `\"zone\"`."
+        },
         "name": {
           "description": "Optional. The resource name of the monitored resource descriptor:\n`\"projects/{project_id}/monitoredResourceDescriptors/{type}\"` where\n{type} is the value of the `type` field in this object and\n{project_id} is a project ID that provides API-specific context for\naccessing the type.  APIs that do not use project information can use the\nresource name format `\"monitoredResourceDescriptors/{type}\"`.",
           "type": "string"
@@ -1169,35 +412,40 @@
         "description": {
           "description": "Optional. A detailed description of the monitored resource type that might\nbe used in documentation.",
           "type": "string"
-        },
-        "type": {
-          "description": "Required. The monitored resource type. For example, the type\n`\"cloudsql_database\"` represents databases in Google Cloud SQL.\nThe maximum length of this value is 256 characters.",
-          "type": "string"
-        },
-        "labels": {
-          "description": "Required. A set of labels used to describe instances of this monitored\nresource type. For example, an individual Google Cloud SQL database is\nidentified by values for the labels `\"database_id\"` and `\"zone\"`.",
-          "type": "array",
-          "items": {
-            "$ref": "LabelDescriptor"
-          }
         }
       },
-      "id": "MonitoredResourceDescriptor"
+      "id": "MonitoredResourceDescriptor",
+      "description": "An object that describes the schema of a MonitoredResource object using a\ntype name and a set of labels.  For example, the monitored resource\ndescriptor for Google Compute Engine VM instances has a type of\n`\"gce_instance\"` and specifies the use of the labels `\"instance_id\"` and\n`\"zone\"` to identify particular VM instances.\n\nDifferent APIs can support different monitored resource types. APIs generally\nprovide a `list` method that returns the monitored resource descriptors used\nby the API."
+    },
+    "CustomErrorRule": {
+      "description": "A custom error rule.",
+      "type": "object",
+      "properties": {
+        "isErrorType": {
+          "description": "Mark this message as possible payload in error response.  Otherwise,\nobjects of this type will be filtered when they appear in error payload.",
+          "type": "boolean"
+        },
+        "selector": {
+          "description": "Selects messages to which this rule applies.\n\nRefer to selector for syntax details.",
+          "type": "string"
+        }
+      },
+      "id": "CustomErrorRule"
     },
     "MediaDownload": {
-      "id": "MediaDownload",
       "description": "Use this only for Scotty Requests. Do not use this for media support using\nBytestream, add instead [][google.bytestream.RestByteStream] as an API to\nyour configuration for Bytestream methods.",
       "type": "object",
       "properties": {
         "enabled": {
-          "type": "boolean",
-          "description": "Whether download is enabled."
+          "description": "Whether download is enabled.",
+          "type": "boolean"
         },
         "downloadService": {
           "description": "DO NOT USE THIS FIELD UNTIL THIS WARNING IS REMOVED.\n\nSpecify name of the download service if one is used for download.",
           "type": "string"
         }
-      }
+      },
+      "id": "MediaDownload"
     },
     "DisableServiceRequest": {
       "description": "Request message for DisableService method.",
@@ -1206,6 +454,8 @@
       "id": "DisableServiceRequest"
     },
     "SearchServicesResponse": {
+      "description": "Response message for SearchServices method.",
+      "type": "object",
       "properties": {
         "services": {
           "description": "Services available publicly or available to the authenticated caller.",
@@ -1215,32 +465,28 @@
           }
         },
         "nextPageToken": {
-          "description": "Token that can be passed to `ListAvailableServices` to resume a paginated\nquery.",
-          "type": "string"
+          "type": "string",
+          "description": "Token that can be passed to `ListAvailableServices` to resume a paginated\nquery."
         }
       },
-      "id": "SearchServicesResponse",
-      "description": "Response message for SearchServices method.",
-      "type": "object"
+      "id": "SearchServicesResponse"
     },
     "MediaUpload": {
+      "description": "Use this only for Scotty Requests. Do not use this for media support using\nBytestream, add instead [][google.bytestream.RestByteStream] as an API to\nyour configuration for Bytestream methods.",
+      "type": "object",
       "properties": {
-        "enabled": {
-          "description": "Whether upload is enabled.",
-          "type": "boolean"
-        },
         "uploadService": {
           "description": "DO NOT USE THIS FIELD UNTIL THIS WARNING IS REMOVED.\n\nSpecify name of the upload service if one is used for upload.",
           "type": "string"
+        },
+        "enabled": {
+          "description": "Whether upload is enabled.",
+          "type": "boolean"
         }
       },
-      "id": "MediaUpload",
-      "description": "Use this only for Scotty Requests. Do not use this for media support using\nBytestream, add instead [][google.bytestream.RestByteStream] as an API to\nyour configuration for Bytestream methods.",
-      "type": "object"
+      "id": "MediaUpload"
     },
     "UsageRule": {
-      "description": "Usage configuration rules for the service.\n\nNOTE: Under development.\n\n\nUse this rule to configure unregistered calls for the service. Unregistered\ncalls are calls that do not contain consumer project identity.\n(Example: calls that do not contain an API key).\nBy default, API methods do not allow unregistered calls, and each method call\nmust be identified by a consumer project identity. Use this rule to\nallow/disallow unregistered calls.\n\nExample of an API that wants to allow unregistered calls for entire service.\n\n    usage:\n      rules:\n      - selector: \"*\"\n        allow_unregistered_calls: true\n\nExample of a method that wants to allow unregistered calls.\n\n    usage:\n      rules:\n      - selector: \"google.example.library.v1.LibraryService.CreateBook\"\n        allow_unregistered_calls: true",
-      "type": "object",
       "properties": {
         "allowUnregisteredCalls": {
           "description": "True, if the method allows unregistered calls; false otherwise.",
@@ -1251,7 +497,9 @@
           "type": "string"
         }
       },
-      "id": "UsageRule"
+      "id": "UsageRule",
+      "description": "Usage configuration rules for the service.\n\nNOTE: Under development.\n\n\nUse this rule to configure unregistered calls for the service. Unregistered\ncalls are calls that do not contain consumer project identity.\n(Example: calls that do not contain an API key).\nBy default, API methods do not allow unregistered calls, and each method call\nmust be identified by a consumer project identity. Use this rule to\nallow/disallow unregistered calls.\n\nExample of an API that wants to allow unregistered calls for entire service.\n\n    usage:\n      rules:\n      - selector: \"*\"\n        allow_unregistered_calls: true\n\nExample of a method that wants to allow unregistered calls.\n\n    usage:\n      rules:\n      - selector: \"google.example.library.v1.LibraryService.CreateBook\"\n        allow_unregistered_calls: true",
+      "type": "object"
     },
     "AuthRequirement": {
       "description": "User-defined authentication requirements, including support for\n[JSON Web Token (JWT)](https://tools.ietf.org/html/draft-ietf-oauth-json-web-token-32).",
@@ -1262,8 +510,8 @@
           "type": "string"
         },
         "providerId": {
-          "description": "id from authentication provider.\n\nExample:\n\n    provider_id: bookstore_auth",
-          "type": "string"
+          "type": "string",
+          "description": "id from authentication provider.\n\nExample:\n\n    provider_id: bookstore_auth"
         }
       },
       "id": "AuthRequirement"
@@ -1272,13 +520,6 @@
       "description": "`Documentation` provides the information for describing a service.\n\nExample:\n\u003cpre\u003e\u003ccode\u003edocumentation:\n  summary: \u003e\n    The Google Calendar API gives access\n    to most calendar features.\n  pages:\n  - name: Overview\n    content: &#40;== include google/foo/overview.md ==&#41;\n  - name: Tutorial\n    content: &#40;== include google/foo/tutorial.md ==&#41;\n    subpages;\n    - name: Java\n      content: &#40;== include google/foo/tutorial_java.md ==&#41;\n  rules:\n  - selector: google.calendar.Calendar.Get\n    description: \u003e\n      ...\n  - selector: google.calendar.Calendar.Put\n    description: \u003e\n      ...\n\u003c/code\u003e\u003c/pre\u003e\nDocumentation is provided in markdown syntax. In addition to\nstandard markdown features, definition lists, tables and fenced\ncode blocks are supported. Section headers can be provided and are\ninterpreted relative to the section nesting of the context where\na documentation fragment is embedded.\n\nDocumentation from the IDL is merged with documentation defined\nvia the config at normalization time, where documentation provided\nby config rules overrides IDL provided.\n\nA number of constructs specific to the API platform are supported\nin documentation text.\n\nIn order to reference a proto element, the following\nnotation can be used:\n\u003cpre\u003e\u003ccode\u003e&#91;fully.qualified.proto.name]&#91;]\u003c/code\u003e\u003c/pre\u003e\nTo override the display text used for the link, this can be used:\n\u003cpre\u003e\u003ccode\u003e&#91;display text]&#91;fully.qualified.proto.name]\u003c/code\u003e\u003c/pre\u003e\nText can be excluded from doc using the following notation:\n\u003cpre\u003e\u003ccode\u003e&#40;-- internal comment --&#41;\u003c/code\u003e\u003c/pre\u003e\nComments can be made conditional using a visibility label. The below\ntext will be only rendered if the `BETA` label is available:\n\u003cpre\u003e\u003ccode\u003e&#40;--BETA: comment for BETA users --&#41;\u003c/code\u003e\u003c/pre\u003e\nA few directives are available in documentation. Note that\ndirectives must appear on a single line to be properly\nidentified. The `include` directive includes a markdown file from\nan external source:\n\u003cpre\u003e\u003ccode\u003e&#40;== include path/to/file ==&#41;\u003c/code\u003e\u003c/pre\u003e\nThe `resource_for` directive marks a message to be the resource of\na collection in REST view. If it is not specified, tools attempt\nto infer the resource from the operations in a collection:\n\u003cpre\u003e\u003ccode\u003e&#40;== resource_for v1.shelves.books ==&#41;\u003c/code\u003e\u003c/pre\u003e\nThe directive `suppress_warning` does not directly affect documentation\nand is documented together with service config validation.",
       "type": "object",
       "properties": {
-        "pages": {
-          "description": "The top level pages for the documentation set.",
-          "type": "array",
-          "items": {
-            "$ref": "Page"
-          }
-        },
         "summary": {
           "description": "A short summary of what the service does. Can only be provided by\nplain text.",
           "type": "string"
@@ -1297,11 +538,20 @@
         "overview": {
           "description": "Declares a single overview page. For example:\n\u003cpre\u003e\u003ccode\u003edocumentation:\n  summary: ...\n  overview: &#40;== include overview.md ==&#41;\n\u003c/code\u003e\u003c/pre\u003e\nThis is a shortcut for the following declaration (using pages style):\n\u003cpre\u003e\u003ccode\u003edocumentation:\n  summary: ...\n  pages:\n  - name: Overview\n    content: &#40;== include overview.md ==&#41;\n\u003c/code\u003e\u003c/pre\u003e\nNote: you cannot specify both `overview` field and `pages` field.",
           "type": "string"
+        },
+        "pages": {
+          "description": "The top level pages for the documentation set.",
+          "type": "array",
+          "items": {
+            "$ref": "Page"
+          }
         }
       },
       "id": "Documentation"
     },
     "AuthenticationRule": {
+      "description": "Authentication rules for the service.\n\nBy default, if a method has any authentication requirements, every request\nmust include a valid credential matching one of the requirements.\nIt's an error to include more than one kind of credential in a single\nrequest.\n\nIf a method doesn't have any auth requirements, request credentials will be\nignored.",
+      "type": "object",
       "properties": {
         "requirements": {
           "description": "Requirements for additional authentication providers.",
@@ -1319,18 +569,20 @@
           "type": "boolean"
         },
         "oauth": {
-          "description": "The requirements for OAuth credentials.",
-          "$ref": "OAuthRequirements"
+          "$ref": "OAuthRequirements",
+          "description": "The requirements for OAuth credentials."
         }
       },
-      "id": "AuthenticationRule",
-      "description": "Authentication rules for the service.\n\nBy default, if a method has any authentication requirements, every request\nmust include a valid credential matching one of the requirements.\nIt's an error to include more than one kind of credential in a single\nrequest.\n\nIf a method doesn't have any auth requirements, request credentials will be\nignored.",
-      "type": "object"
+      "id": "AuthenticationRule"
     },
     "BackendRule": {
       "description": "A backend rule provides configuration for an individual API element.",
       "type": "object",
       "properties": {
+        "address": {
+          "description": "The address of the API backend.",
+          "type": "string"
+        },
         "selector": {
           "description": "Selects the methods to which this rule applies.\n\nRefer to selector for syntax details.",
           "type": "string"
@@ -1339,38 +591,35 @@
           "description": "The number of seconds to wait for a response from a request.  The\ndefault depends on the deployment context.",
           "format": "double",
           "type": "number"
-        },
-        "address": {
-          "description": "The address of the API backend.",
-          "type": "string"
         }
       },
       "id": "BackendRule"
     },
     "Api": {
+      "description": "Api is a light-weight descriptor for a protocol buffer service.",
       "type": "object",
       "properties": {
         "methods": {
-          "description": "The methods of this api, in unspecified order.",
           "type": "array",
           "items": {
             "$ref": "Method"
-          }
+          },
+          "description": "The methods of this api, in unspecified order."
         },
         "name": {
-          "description": "The fully qualified name of this api, including package name\nfollowed by the api's simple name.",
-          "type": "string"
+          "type": "string",
+          "description": "The fully qualified name of this api, including package name\nfollowed by the api's simple name."
         },
         "syntax": {
+          "enum": [
+            "SYNTAX_PROTO2",
+            "SYNTAX_PROTO3"
+          ],
           "description": "The source syntax of the service.",
           "type": "string",
           "enumDescriptions": [
             "Syntax `proto2`.",
             "Syntax `proto3`."
-          ],
-          "enum": [
-            "SYNTAX_PROTO2",
-            "SYNTAX_PROTO3"
           ]
         },
         "sourceContext": {
@@ -1378,8 +627,8 @@
           "description": "Source context for the protocol buffer service represented by this\nmessage."
         },
         "version": {
-          "type": "string",
-          "description": "A version string for this api. If specified, must have the form\n`major-version.minor-version`, as in `1.10`. If the minor version\nis omitted, it defaults to zero. If the entire version field is\nempty, the major version is derived from the package name, as\noutlined below. If the field is not empty, the version in the\npackage name will be verified to be consistent with what is\nprovided here.\n\nThe versioning schema uses [semantic\nversioning](http://semver.org) where the major version number\nindicates a breaking change and the minor version an additive,\nnon-breaking change. Both version numbers are signals to users\nwhat to expect from different versions, and should be carefully\nchosen based on the product plan.\n\nThe major version is also reflected in the package name of the\nAPI, which must end in `v\u003cmajor-version\u003e`, as in\n`google.feature.v1`. For major versions 0 and 1, the suffix can\nbe omitted. Zero major versions must only be used for\nexperimental, none-GA apis.\n"
+          "description": "A version string for this api. If specified, must have the form\n`major-version.minor-version`, as in `1.10`. If the minor version\nis omitted, it defaults to zero. If the entire version field is\nempty, the major version is derived from the package name, as\noutlined below. If the field is not empty, the version in the\npackage name will be verified to be consistent with what is\nprovided here.\n\nThe versioning schema uses [semantic\nversioning](http://semver.org) where the major version number\nindicates a breaking change and the minor version an additive,\nnon-breaking change. Both version numbers are signals to users\nwhat to expect from different versions, and should be carefully\nchosen based on the product plan.\n\nThe major version is also reflected in the package name of the\nAPI, which must end in `v\u003cmajor-version\u003e`, as in\n`google.feature.v1`. For major versions 0 and 1, the suffix can\nbe omitted. Zero major versions must only be used for\nexperimental, none-GA apis.\n",
+          "type": "string"
         },
         "mixins": {
           "type": "array",
@@ -1389,17 +638,17 @@
           "description": "Included APIs. See Mixin."
         },
         "options": {
-          "description": "Any metadata attached to the API.",
           "type": "array",
           "items": {
             "$ref": "Option"
-          }
+          },
+          "description": "Any metadata attached to the API."
         }
       },
-      "id": "Api",
-      "description": "Api is a light-weight descriptor for a protocol buffer service."
+      "id": "Api"
     },
     "Authentication": {
+      "description": "`Authentication` defines the authentication configuration for an API.\n\nExample for an API targeted for external use:\n\n    name: calendar.googleapis.com\n    authentication:\n      providers:\n      - id: google_calendar_auth\n        jwks_uri: https://www.googleapis.com/oauth2/v1/certs\n        issuer: https://securetoken.google.com\n      rules:\n      - selector: \"*\"\n        requirements:\n          provider_id: google_calendar_auth",
       "type": "object",
       "properties": {
         "rules": {
@@ -1410,20 +659,32 @@
           }
         },
         "providers": {
-          "description": "Defines a set of authentication providers that a service supports.",
           "type": "array",
           "items": {
             "$ref": "AuthProvider"
-          }
+          },
+          "description": "Defines a set of authentication providers that a service supports."
         }
       },
-      "id": "Authentication",
-      "description": "`Authentication` defines the authentication configuration for an API.\n\nExample for an API targeted for external use:\n\n    name: calendar.googleapis.com\n    authentication:\n      providers:\n      - id: google_calendar_auth\n        jwks_uri: https://www.googleapis.com/oauth2/v1/certs\n        issuer: https://securetoken.google.com\n      rules:\n      - selector: \"*\"\n        requirements:\n          provider_id: google_calendar_auth"
+      "id": "Authentication"
     },
     "Operation": {
+      "id": "Operation",
       "description": "This resource represents a long-running operation that is the result of a\nnetwork API call.",
       "type": "object",
       "properties": {
+        "done": {
+          "description": "If the value is `false`, it means the operation is still in progress.\nIf true, the operation is completed, and either `error` or `response` is\navailable.",
+          "type": "boolean"
+        },
+        "response": {
+          "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\nmethod returns no data on success, such as `Delete`, the response is\n`google.protobuf.Empty`.  If the original method is standard\n`Get`/`Create`/`Update`, the response should be the resource.  For other\nmethods, the response should have the type `XxxResponse`, where `Xxx`\nis the original method name.  For example, if the original method name\nis `TakeSnapshot()`, the inferred response type is\n`TakeSnapshotResponse`.",
+          "type": "object"
+        },
         "name": {
           "description": "The server-assigned name, which is only unique within the same service that\noriginally returns it. If you use the default HTTP mapping, the\n`name` should have the format of `operations/some/unique/name`.",
           "type": "string"
@@ -1439,43 +700,30 @@
           },
           "description": "Service-specific metadata associated with the operation.  It typically\ncontains progress information and common metadata such as create time.\nSome services might not provide such metadata.  Any method that returns a\nlong-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.\nIf true, the operation is completed, and either `error` or `response` is\navailable.",
-          "type": "boolean"
-        },
-        "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\nmethod returns no data on success, such as `Delete`, the response is\n`google.protobuf.Empty`.  If the original method is standard\n`Get`/`Create`/`Update`, the response should be the resource.  For other\nmethods, the response should have the type `XxxResponse`, where `Xxx`\nis the original method name.  For example, if the original method name\nis `TakeSnapshot()`, the inferred response type is\n`TakeSnapshotResponse`."
         }
-      },
-      "id": "Operation"
+      }
     },
     "Page": {
+      "description": "Represents a documentation page. A page can contain subpages to represent\nnested documentation set structure.",
       "type": "object",
       "properties": {
-        "content": {
-          "description": "The Markdown content of the page. You can use \u003ccode\u003e&#40;== include {path} ==&#41;\u003c/code\u003e\nto include content from a Markdown file.",
-          "type": "string"
-        },
         "subpages": {
-          "description": "Subpages of this page. The order of subpages specified here will be\nhonored in the generated docset.",
           "type": "array",
           "items": {
             "$ref": "Page"
-          }
+          },
+          "description": "Subpages of this page. The order of subpages specified here will be\nhonored in the generated docset."
         },
         "name": {
           "description": "The name of the page. It will be used as an identity of the page to\ngenerate URI of the page, text of the link to this page in navigation,\netc. The full page name (start from the root page name to this page\nconcatenated with `.`) can be used as reference to the page in your\ndocumentation. For example:\n\u003cpre\u003e\u003ccode\u003epages:\n- name: Tutorial\n  content: &#40;== include tutorial.md ==&#41;\n  subpages:\n  - name: Java\n    content: &#40;== include tutorial_java.md ==&#41;\n\u003c/code\u003e\u003c/pre\u003e\nYou can reference `Java` page using Markdown reference link syntax:\n`Java`.",
           "type": "string"
+        },
+        "content": {
+          "description": "The Markdown content of the page. You can use \u003ccode\u003e&#40;== include {path} ==&#41;\u003c/code\u003e\nto include content from a Markdown file.",
+          "type": "string"
         }
       },
-      "id": "Page",
-      "description": "Represents a documentation page. A page can contain subpages to represent\nnested documentation set structure."
+      "id": "Page"
     },
     "Status": {
       "description": "The `Status` type defines a logical error model that is suitable for different\nprogramming environments, including REST APIs and RPC APIs. It is used by\n[gRPC](https://github.com/grpc). The error model is designed to be:\n\n- Simple to use and understand for most users\n- Flexible enough to meet unexpected needs\n\n# Overview\n\nThe `Status` message contains three pieces of data: error code, error message,\nand error details. The error code should be an enum value of\ngoogle.rpc.Code, but it may accept additional error codes if needed.  The\nerror message should be a developer-facing English message that helps\ndevelopers *understand* and *resolve* the error. If a localized user-facing\nerror message is needed, put the localized message in the error details or\nlocalize it in the client. The optional error details may contain arbitrary\ninformation about the error. There is a predefined set of error detail types\nin the package `google.rpc` which can be used for common error conditions.\n\n# Language mapping\n\nThe `Status` message is the logical representation of the error model, but it\nis not necessarily the actual wire format. When the `Status` message is\nexposed in different client libraries and different wire protocols, it can be\nmapped differently. For example, it will likely be mapped to some exceptions\nin Java, but more likely mapped to some error codes in C.\n\n# Other uses\n\nThe error model and the `Status` message can be used in a variety of\nenvironments, either with or without APIs, to provide a\nconsistent developer experience across different environments.\n\nExample uses of this error model include:\n\n- Partial errors. If a service needs to return partial errors to the client,\n    it may embed the `Status` in the normal response to indicate the partial\n    errors.\n\n- Workflow errors. A typical workflow has multiple steps. Each step may\n    have a `Status` message for error reporting purpose.\n\n- Batch operations. If a client uses batch request and batch response, the\n    `Status` message should be used directly inside batch response, one for\n    each error sub-response.\n\n- Asynchronous operations. If an API call embeds asynchronous operation\n    results in its response, the status of those operations should be\n    represented directly using the `Status` message.\n\n- Logging. If some API errors are stored in logs, the message `Status` could\n    be used directly after any stripping needed for security/privacy reasons.",
@@ -1509,30 +757,792 @@
       "type": "object",
       "properties": {
         "jwksUri": {
-          "type": "string",
-          "description": "URL of the provider's public key set to validate signature of the JWT. See\n[OpenID Discovery](https://openid.net/specs/openid-connect-discovery-1_0.html#ProviderMetadata).\nOptional if the key set document:\n - can be retrieved from\n   [OpenID Discovery](https://openid.net/specs/openid-connect-discovery-1_0.html\n   of the issuer.\n - can be inferred from the email domain of the issuer (e.g. a Google service account).\n\nExample: https://www.googleapis.com/oauth2/v1/certs"
+          "description": "URL of the provider's public key set to validate signature of the JWT. See\n[OpenID Discovery](https://openid.net/specs/openid-connect-discovery-1_0.html#ProviderMetadata).\nOptional if the key set document:\n - can be retrieved from\n   [OpenID Discovery](https://openid.net/specs/openid-connect-discovery-1_0.html\n   of the issuer.\n - can be inferred from the email domain of the issuer (e.g. a Google service account).\n\nExample: https://www.googleapis.com/oauth2/v1/certs",
+          "type": "string"
         },
         "audiences": {
-          "description": "The list of JWT\n[audiences](https://tools.ietf.org/html/draft-ietf-oauth-json-web-token-32#section-4.1.3).\nthat are allowed to access. A JWT containing any of these audiences will\nbe accepted. When this setting is absent, only JWTs with audience\n\"https://Service_name/API_name\"\nwill be accepted. For example, if no audiences are in the setting,\nLibraryService API will only accept JWTs with the following audience\n\"https://library-example.googleapis.com/google.example.library.v1.LibraryService\".\n\nExample:\n\n    audiences: bookstore_android.apps.googleusercontent.com,\n               bookstore_web.apps.googleusercontent.com",
-          "type": "string"
+          "type": "string",
+          "description": "The list of JWT\n[audiences](https://tools.ietf.org/html/draft-ietf-oauth-json-web-token-32#section-4.1.3).\nthat are allowed to access. A JWT containing any of these audiences will\nbe accepted. When this setting is absent, only JWTs with audience\n\"https://Service_name/API_name\"\nwill be accepted. For example, if no audiences are in the setting,\nLibraryService API will only accept JWTs with the following audience\n\"https://library-example.googleapis.com/google.example.library.v1.LibraryService\".\n\nExample:\n\n    audiences: bookstore_android.apps.googleusercontent.com,\n               bookstore_web.apps.googleusercontent.com"
         },
         "id": {
           "description": "The unique identifier of the auth provider. It will be referred to by\n`AuthRequirement.provider_id`.\n\nExample: \"bookstore_auth\".",
           "type": "string"
         },
         "issuer": {
-          "description": "Identifies the principal that issued the JWT. See\nhttps://tools.ietf.org/html/draft-ietf-oauth-json-web-token-32#section-4.1.1\nUsually a URL or an email address.\n\nExample: https://securetoken.google.com\nExample: 1234567-compute@developer.gserviceaccount.com",
-          "type": "string"
+          "type": "string",
+          "description": "Identifies the principal that issued the JWT. See\nhttps://tools.ietf.org/html/draft-ietf-oauth-json-web-token-32#section-4.1.1\nUsually a URL or an email address.\n\nExample: https://securetoken.google.com\nExample: 1234567-compute@developer.gserviceaccount.com"
         }
       },
       "id": "AuthProvider"
+    },
+    "EnumValue": {
+      "description": "Enum value definition.",
+      "type": "object",
+      "properties": {
+        "number": {
+          "description": "Enum value number.",
+          "format": "int32",
+          "type": "integer"
+        },
+        "name": {
+          "description": "Enum value name.",
+          "type": "string"
+        },
+        "options": {
+          "description": "Protocol buffer options.",
+          "type": "array",
+          "items": {
+            "$ref": "Option"
+          }
+        }
+      },
+      "id": "EnumValue"
+    },
+    "Service": {
+      "type": "object",
+      "properties": {
+        "sourceInfo": {
+          "description": "Output only. The source information for this configuration if available.",
+          "$ref": "SourceInfo"
+        },
+        "http": {
+          "description": "HTTP configuration.",
+          "$ref": "Http"
+        },
+        "backend": {
+          "description": "API backend configuration.",
+          "$ref": "Backend"
+        },
+        "systemParameters": {
+          "$ref": "SystemParameters",
+          "description": "System parameter configuration."
+        },
+        "documentation": {
+          "$ref": "Documentation",
+          "description": "Additional API documentation."
+        },
+        "monitoredResources": {
+          "description": "Defines the monitored resources used by this service. This is required\nby the Service.monitoring and Service.logging configurations.",
+          "type": "array",
+          "items": {
+            "$ref": "MonitoredResourceDescriptor"
+          }
+        },
+        "logging": {
+          "$ref": "Logging",
+          "description": "Logging configuration."
+        },
+        "enums": {
+          "description": "A list of all enum types included in this API service.  Enums\nreferenced directly or indirectly by the `apis` are automatically\nincluded.  Enums which are not referenced but shall be included\nshould be listed here by name. Example:\n\n    enums:\n    - name: google.someapi.v1.SomeEnum",
+          "type": "array",
+          "items": {
+            "$ref": "Enum"
+          }
+        },
+        "context": {
+          "$ref": "Context",
+          "description": "Context configuration."
+        },
+        "id": {
+          "description": "A unique ID for a specific instance of this message, typically assigned\nby the client for tracking purpose. If empty, the server may choose to\ngenerate one instead.",
+          "type": "string"
+        },
+        "usage": {
+          "$ref": "Usage",
+          "description": "Configuration controlling usage of this service."
+        },
+        "metrics": {
+          "description": "Defines the metrics used by this service.",
+          "type": "array",
+          "items": {
+            "$ref": "MetricDescriptor"
+          }
+        },
+        "authentication": {
+          "description": "Auth configuration.",
+          "$ref": "Authentication"
+        },
+        "experimental": {
+          "$ref": "Experimental",
+          "description": "Experimental configuration."
+        },
+        "control": {
+          "$ref": "Control",
+          "description": "Configuration for the service control plane."
+        },
+        "configVersion": {
+          "type": "integer",
+          "description": "The version of the service configuration. The config version may\ninfluence interpretation of the configuration, for example, to\ndetermine defaults. This is documented together with applicable\noptions. The current default for the config version itself is `3`.",
+          "format": "uint32"
+        },
+        "monitoring": {
+          "$ref": "Monitoring",
+          "description": "Monitoring configuration."
+        },
+        "producerProjectId": {
+          "description": "The id of the Google developer project that owns the service.\nMembers of this project can manage the service configuration,\nmanage consumption of the service, etc.",
+          "type": "string"
+        },
+        "systemTypes": {
+          "description": "A list of all proto message types included in this API service.\nIt serves similar purpose as [google.api.Service.types], except that\nthese types are not needed by user-defined APIs. Therefore, they will not\nshow up in the generated discovery doc. This field should only be used\nto define system APIs in ESF.",
+          "type": "array",
+          "items": {
+            "$ref": "Type"
+          }
+        },
+        "visibility": {
+          "description": "API visibility configuration.",
+          "$ref": "Visibility"
+        },
+        "name": {
+          "description": "The DNS address at which this service is available,\ne.g. `calendar.googleapis.com`.",
+          "type": "string"
+        },
+        "customError": {
+          "$ref": "CustomError",
+          "description": "Custom error configuration."
+        },
+        "title": {
+          "description": "The product title associated with this service.",
+          "type": "string"
+        },
+        "endpoints": {
+          "type": "array",
+          "items": {
+            "$ref": "Endpoint"
+          },
+          "description": "Configuration for network endpoints.  If this is empty, then an endpoint\nwith the same name as the service is automatically generated to service all\ndefined APIs."
+        },
+        "logs": {
+          "description": "Defines the logs used by this service.",
+          "type": "array",
+          "items": {
+            "$ref": "LogDescriptor"
+          }
+        },
+        "apis": {
+          "description": "A list of API interfaces exported by this service. Only the `name` field\nof the google.protobuf.Api needs to be provided by the configuration\nauthor, as the remaining fields will be derived from the IDL during the\nnormalization process. It is an error to specify an API interface here\nwhich cannot be resolved against the associated IDL files.",
+          "type": "array",
+          "items": {
+            "$ref": "Api"
+          }
+        },
+        "types": {
+          "description": "A list of all proto message types included in this API service.\nTypes referenced directly or indirectly by the `apis` are\nautomatically included.  Messages which are not referenced but\nshall be included, such as types used by the `google.protobuf.Any` type,\nshould be listed here by name. Example:\n\n    types:\n    - name: google.protobuf.Int32",
+          "type": "array",
+          "items": {
+            "$ref": "Type"
+          }
+        }
+      },
+      "id": "Service",
+      "description": "`Service` is the root object of Google service configuration schema. It\ndescribes basic information about a service, such as the name and the\ntitle, and delegates other aspects to sub-sections. Each sub-section is\neither a proto message or a repeated proto message that configures a\nspecific aspect, such as auth. See each proto message definition for details.\n\nExample:\n\n    type: google.api.Service\n    config_version: 3\n    name: calendar.googleapis.com\n    title: Google Calendar API\n    apis:\n    - name: google.calendar.v3.Calendar\n    authentication:\n      providers:\n      - id: google_calendar_auth\n        jwks_uri: https://www.googleapis.com/oauth2/v1/certs\n        issuer: https://securetoken.google.com\n      rules:\n      - selector: \"*\"\n        requirements:\n          provider_id: google_calendar_auth"
+    },
+    "OperationMetadata": {
+      "type": "object",
+      "properties": {
+        "startTime": {
+          "description": "The start time of the operation.",
+          "format": "google-datetime",
+          "type": "string"
+        },
+        "resourceNames": {
+          "description": "The full name of the resources that this operation is directly\nassociated with.",
+          "type": "array",
+          "items": {
+            "type": "string"
+          }
+        },
+        "steps": {
+          "description": "Detailed status information for each step. The order is undetermined.",
+          "type": "array",
+          "items": {
+            "$ref": "Step"
+          }
+        },
+        "progressPercentage": {
+          "description": "Percentage of completion of this operation, ranging from 0 to 100.",
+          "format": "int32",
+          "type": "integer"
+        }
+      },
+      "id": "OperationMetadata",
+      "description": "The metadata associated with a long running operation resource."
+    },
+    "CustomHttpPattern": {
+      "description": "A custom pattern is used for defining custom HTTP verb.",
+      "type": "object",
+      "properties": {
+        "path": {
+          "description": "The path matched by this custom verb.",
+          "type": "string"
+        },
+        "kind": {
+          "description": "The name of this custom HTTP verb.",
+          "type": "string"
+        }
+      },
+      "id": "CustomHttpPattern"
+    },
+    "SystemParameterRule": {
+      "description": "Define a system parameter rule mapping system parameter definitions to\nmethods.",
+      "type": "object",
+      "properties": {
+        "parameters": {
+          "type": "array",
+          "items": {
+            "$ref": "SystemParameter"
+          },
+          "description": "Define parameters. Multiple names may be defined for a parameter.\nFor a given method call, only one of them should be used. If multiple\nnames are used the behavior is implementation-dependent.\nIf none of the specified names are present the behavior is\nparameter-dependent."
+        },
+        "selector": {
+          "description": "Selects the methods to which this rule applies. Use '*' to indicate all\nmethods in all APIs.\n\nRefer to selector for syntax details.",
+          "type": "string"
+        }
+      },
+      "id": "SystemParameterRule"
+    },
+    "PublishedService": {
+      "id": "PublishedService",
+      "description": "The published version of a Service that is managed by\nGoogle Service Management.",
+      "type": "object",
+      "properties": {
+        "service": {
+          "$ref": "Service",
+          "description": "The service's published configuration."
+        },
+        "name": {
+          "description": "The resource name of the service.\n\nA valid name would be:\n- services/serviceuser.googleapis.com",
+          "type": "string"
+        }
+      }
+    },
+    "VisibilityRule": {
+      "description": "A visibility rule provides visibility configuration for an individual API\nelement.",
+      "type": "object",
+      "properties": {
+        "restriction": {
+          "description": "A comma-separated list of visibility labels that apply to the `selector`.\nAny of the listed labels can be used to grant the visibility.\n\nIf a rule has multiple labels, removing one of the labels but not all of\nthem can break clients.\n\nExample:\n\n    visibility:\n      rules:\n      - selector: google.calendar.Calendar.EnhancedSearch\n        restriction: GOOGLE_INTERNAL, TRUSTED_TESTER\n\nRemoving GOOGLE_INTERNAL from this restriction will break clients that\nrely on this method and only had access to it through GOOGLE_INTERNAL.",
+          "type": "string"
+        },
+        "selector": {
+          "description": "Selects methods, messages, fields, enums, etc. to which this rule applies.\n\nRefer to selector for syntax details.",
+          "type": "string"
+        }
+      },
+      "id": "VisibilityRule"
+    },
+    "HttpRule": {
+      "description": "`HttpRule` defines the mapping of an RPC method to one or more HTTP\nREST APIs.  The mapping determines what portions of the request\nmessage are populated from the path, query parameters, or body of\nthe HTTP request.  The mapping is typically specified as an\n`google.api.http` annotation, see \"google/api/annotations.proto\"\nfor details.\n\nThe mapping consists of a field specifying the path template and\nmethod kind.  The path template can refer to fields in the request\nmessage, as in the example below which describes a REST GET\noperation on a resource collection of messages:\n\n\n    service Messaging {\n      rpc GetMessage(GetMessageRequest) returns (Message) {\n        option (google.api.http).get = \"/v1/messages/{message_id}/{sub.subfield}\";\n      }\n    }\n    message GetMessageRequest {\n      message SubMessage {\n        string subfield = 1;\n      }\n      string message_id = 1; // mapped to the URL\n      SubMessage sub = 2;    // `sub.subfield` is url-mapped\n    }\n    message Message {\n      string text = 1; // content of the resource\n    }\n\nThe same http annotation can alternatively be expressed inside the\n`GRPC API Configuration` YAML file.\n\n    http:\n      rules:\n        - selector: \u003cproto_package_name\u003e.Messaging.GetMessage\n          get: /v1/messages/{message_id}/{sub.subfield}\n\nThis definition enables an automatic, bidrectional mapping of HTTP\nJSON to RPC. Example:\n\nHTTP | RPC\n-----|-----\n`GET /v1/messages/123456/foo`  | `GetMessage(message_id: \"123456\" sub: SubMessage(subfield: \"foo\"))`\n\nIn general, not only fields but also field paths can be referenced\nfrom a path pattern. Fields mapped to the path pattern cannot be\nrepeated and must have a primitive (non-message) type.\n\nAny fields in the request message which are not bound by the path\npattern automatically become (optional) HTTP query\nparameters. Assume the following definition of the request message:\n\n\n    message GetMessageRequest {\n      message SubMessage {\n        string subfield = 1;\n      }\n      string message_id = 1; // mapped to the URL\n      int64 revision = 2;    // becomes a parameter\n      SubMessage sub = 3;    // `sub.subfield` becomes a parameter\n    }\n\n\nThis enables a HTTP JSON to RPC mapping as below:\n\nHTTP | RPC\n-----|-----\n`GET /v1/messages/123456?revision=2&sub.subfield=foo` | `GetMessage(message_id: \"123456\" revision: 2 sub: SubMessage(subfield: \"foo\"))`\n\nNote that fields which are mapped to HTTP parameters must have a\nprimitive type or a repeated primitive type. Message types are not\nallowed. In the case of a repeated type, the parameter can be\nrepeated in the URL, as in `...?param=A&param=B`.\n\nFor HTTP method kinds which allow a request body, the `body` field\nspecifies the mapping. Consider a REST update method on the\nmessage resource collection:\n\n\n    service Messaging {\n      rpc UpdateMessage(UpdateMessageRequest) returns (Message) {\n        option (google.api.http) = {\n          put: \"/v1/messages/{message_id}\"\n          body: \"message\"\n        };\n      }\n    }\n    message UpdateMessageRequest {\n      string message_id = 1; // mapped to the URL\n      Message message = 2;   // mapped to the body\n    }\n\n\nThe following HTTP JSON to RPC mapping is enabled, where the\nrepresentation of the JSON in the request body is determined by\nprotos JSON encoding:\n\nHTTP | RPC\n-----|-----\n`PUT /v1/messages/123456 { \"text\": \"Hi!\" }` | `UpdateMessage(message_id: \"123456\" message { text: \"Hi!\" })`\n\nThe special name `*` can be used in the body mapping to define that\nevery field not bound by the path template should be mapped to the\nrequest body.  This enables the following alternative definition of\nthe update method:\n\n    service Messaging {\n      rpc UpdateMessage(Message) returns (Message) {\n        option (google.api.http) = {\n          put: \"/v1/messages/{message_id}\"\n          body: \"*\"\n        };\n      }\n    }\n    message Message {\n      string message_id = 1;\n      string text = 2;\n    }\n\n\nThe following HTTP JSON to RPC mapping is enabled:\n\nHTTP | RPC\n-----|-----\n`PUT /v1/messages/123456 { \"text\": \"Hi!\" }` | `UpdateMessage(message_id: \"123456\" text: \"Hi!\")`\n\nNote that when using `*` in the body mapping, it is not possible to\nhave HTTP parameters, as all fields not bound by the path end in\nthe body. This makes this option more rarely used in practice of\ndefining REST APIs. The common usage of `*` is in custom methods\nwhich don't use the URL at all for transferring data.\n\nIt is possible to define multiple HTTP methods for one RPC by using\nthe `additional_bindings` option. Example:\n\n    service Messaging {\n      rpc GetMessage(GetMessageRequest) returns (Message) {\n        option (google.api.http) = {\n          get: \"/v1/messages/{message_id}\"\n          additional_bindings {\n            get: \"/v1/users/{user_id}/messages/{message_id}\"\n          }\n        };\n      }\n    }\n    message GetMessageRequest {\n      string message_id = 1;\n      string user_id = 2;\n    }\n\n\nThis enables the following two alternative HTTP JSON to RPC\nmappings:\n\nHTTP | RPC\n-----|-----\n`GET /v1/messages/123456` | `GetMessage(message_id: \"123456\")`\n`GET /v1/users/me/messages/123456` | `GetMessage(user_id: \"me\" message_id: \"123456\")`\n\n# Rules for HTTP mapping\n\nThe rules for mapping HTTP path, query parameters, and body fields\nto the request message are as follows:\n\n1. The `body` field specifies either `*` or a field path, or is\n   omitted. If omitted, it assumes there is no HTTP body.\n2. Leaf fields (recursive expansion of nested messages in the\n   request) can be classified into three types:\n    (a) Matched in the URL template.\n    (b) Covered by body (if body is `*`, everything except (a) fields;\n        else everything under the body field)\n    (c) All other fields.\n3. URL query parameters found in the HTTP request are mapped to (c) fields.\n4. Any body sent with an HTTP request can contain only (b) fields.\n\nThe syntax of the path template is as follows:\n\n    Template = \"/\" Segments [ Verb ] ;\n    Segments = Segment { \"/\" Segment } ;\n    Segment  = \"*\" | \"**\" | LITERAL | Variable ;\n    Variable = \"{\" FieldPath [ \"=\" Segments ] \"}\" ;\n    FieldPath = IDENT { \".\" IDENT } ;\n    Verb     = \":\" LITERAL ;\n\nThe syntax `*` matches a single path segment. It follows the semantics of\n[RFC 6570](https://tools.ietf.org/html/rfc6570) Section 3.2.2 Simple String\nExpansion.\n\nThe syntax `**` matches zero or more path segments. It follows the semantics\nof [RFC 6570](https://tools.ietf.org/html/rfc6570) Section 3.2.3 Reserved\nExpansion. NOTE: it must be the last segment in the path except the Verb.\n\nThe syntax `LITERAL` matches literal text in the URL path.\n\nThe syntax `Variable` matches the entire path as specified by its template;\nthis nested template must not contain further variables. If a variable\nmatches a single path segment, its template may be omitted, e.g. `{var}`\nis equivalent to `{var=*}`.\n\nNOTE: the field paths in variables and in the `body` must not refer to\nrepeated fields or map fields.\n\nUse CustomHttpPattern to specify any HTTP method that is not included in the\n`pattern` field, such as HEAD, or \"*\" to leave the HTTP method unspecified for\na given URL path rule. The wild-card rule is useful for services that provide\ncontent to Web (HTML) clients.",
+      "type": "object",
+      "properties": {
+        "delete": {
+          "description": "Used for deleting a resource.",
+          "type": "string"
+        },
+        "body": {
+          "description": "The name of the request field whose value is mapped to the HTTP body, or\n`*` for mapping all fields not captured by the path pattern to the HTTP\nbody. NOTE: the referred field must not be a repeated field and must be\npresent at the top-level of request message type.",
+          "type": "string"
+        },
+        "mediaDownload": {
+          "$ref": "MediaDownload",
+          "description": "Use this only for Scotty Requests. Do not use this for bytestream methods.\nFor media support, add instead [][google.bytestream.RestByteStream] as an\nAPI to your configuration."
+        },
+        "post": {
+          "description": "Used for creating a resource.",
+          "type": "string"
+        },
+        "additionalBindings": {
+          "description": "Additional HTTP bindings for the selector. Nested bindings must\nnot contain an `additional_bindings` field themselves (that is,\nthe nesting may only be one level deep).",
+          "type": "array",
+          "items": {
+            "$ref": "HttpRule"
+          }
+        },
+        "responseBody": {
+          "description": "The name of the response field whose value is mapped to the HTTP body of\nresponse. Other response fields are ignored. This field is optional. When\nnot set, the response message will be used as HTTP body of response.\nNOTE: the referred field must be not a repeated field and must be present\nat the top-level of response message type.",
+          "type": "string"
+        },
+        "mediaUpload": {
+          "$ref": "MediaUpload",
+          "description": "Use this only for Scotty Requests. Do not use this for media support using\nBytestream, add instead\n[][google.bytestream.RestByteStream] as an API to your\nconfiguration for Bytestream methods."
+        },
+        "selector": {
+          "description": "Selects methods to which this rule applies.\n\nRefer to selector for syntax details.",
+          "type": "string"
+        },
+        "custom": {
+          "$ref": "CustomHttpPattern",
+          "description": "Custom pattern is used for defining custom verbs."
+        },
+        "get": {
+          "description": "Used for listing and getting information about resources.",
+          "type": "string"
+        },
+        "patch": {
+          "description": "Used for updating a resource.",
+          "type": "string"
+        },
+        "put": {
+          "description": "Used for updating a resource.",
+          "type": "string"
+        }
+      },
+      "id": "HttpRule"
+    },
+    "MonitoringDestination": {
+      "properties": {
+        "monitoredResource": {
+          "description": "The monitored resource type. The type must be defined in\nService.monitored_resources section.",
+          "type": "string"
+        },
+        "metrics": {
+          "description": "Names of the metrics to report to this monitoring destination.\nEach name must be defined in Service.metrics section.",
+          "type": "array",
+          "items": {
+            "type": "string"
+          }
+        }
+      },
+      "id": "MonitoringDestination",
+      "description": "Configuration of a specific monitoring destination (the producer project\nor the consumer project).",
+      "type": "object"
+    },
+    "Visibility": {
+      "description": "`Visibility` defines restrictions for the visibility of service\nelements.  Restrictions are specified using visibility labels\n(e.g., TRUSTED_TESTER) that are elsewhere linked to users and projects.\n\nUsers and projects can have access to more than one visibility label. The\neffective visibility for multiple labels is the union of each label's\nelements, plus any unrestricted elements.\n\nIf an element and its parents have no restrictions, visibility is\nunconditionally granted.\n\nExample:\n\n    visibility:\n      rules:\n      - selector: google.calendar.Calendar.EnhancedSearch\n        restriction: TRUSTED_TESTER\n      - selector: google.calendar.Calendar.Delegate\n        restriction: GOOGLE_INTERNAL\n\nHere, all methods are publicly visible except for the restricted methods\nEnhancedSearch and Delegate.",
+      "type": "object",
+      "properties": {
+        "rules": {
+          "description": "A list of visibility rules that apply to individual API elements.\n\n**NOTE:** All service configuration rules follow \"last one wins\" order.",
+          "type": "array",
+          "items": {
+            "$ref": "VisibilityRule"
+          }
+        }
+      },
+      "id": "Visibility"
+    },
+    "SystemParameters": {
+      "id": "SystemParameters",
+      "description": "### System parameter configuration\n\nA system parameter is a special kind of parameter defined by the API\nsystem, not by an individual API. It is typically mapped to an HTTP header\nand/or a URL query parameter. This configuration specifies which methods\nchange the names of the system parameters.",
+      "type": "object",
+      "properties": {
+        "rules": {
+          "description": "Define system parameters.\n\nThe parameters defined here will override the default parameters\nimplemented by the system. If this field is missing from the service\nconfig, default system parameters will be used. Default system parameters\nand names is implementation-dependent.\n\nExample: define api key for all methods\n\n    system_parameters\n      rules:\n        - selector: \"*\"\n          parameters:\n            - name: api_key\n              url_query_parameter: api_key\n\n\nExample: define 2 api key names for a specific method.\n\n    system_parameters\n      rules:\n        - selector: \"/ListShelves\"\n          parameters:\n            - name: api_key\n              http_header: Api-Key1\n            - name: api_key\n              http_header: Api-Key2\n\n**NOTE:** All service configuration rules follow \"last one wins\" order.",
+          "type": "array",
+          "items": {
+            "$ref": "SystemParameterRule"
+          }
+        }
+      }
+    },
+    "Step": {
+      "description": "Represents the status of one operation step.",
+      "type": "object",
+      "properties": {
+        "description": {
+          "description": "The short description of the step.",
+          "type": "string"
+        },
+        "status": {
+          "enum": [
+            "STATUS_UNSPECIFIED",
+            "DONE",
+            "NOT_STARTED",
+            "IN_PROGRESS",
+            "FAILED",
+            "CANCELLED"
+          ],
+          "description": "The status code.",
+          "type": "string",
+          "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.",
+            "The operation or step has completed with cancellation."
+          ]
+        }
+      },
+      "id": "Step"
+    },
+    "LoggingDestination": {
+      "description": "Configuration of a specific logging destination (the producer project\nor the consumer project).",
+      "type": "object",
+      "properties": {
+        "logs": {
+          "description": "Names of the logs to be sent to this destination. Each name must\nbe defined in the Service.logs section. If the log name is\nnot a domain scoped name, it will be automatically prefixed with\nthe service name followed by \"/\".",
+          "type": "array",
+          "items": {
+            "type": "string"
+          }
+        },
+        "monitoredResource": {
+          "type": "string",
+          "description": "The monitored resource type. The type must be defined in the\nService.monitored_resources section."
+        }
+      },
+      "id": "LoggingDestination"
+    },
+    "Option": {
+      "description": "A protocol buffer option, which can be attached to a message, field,\nenumeration, etc.",
+      "type": "object",
+      "properties": {
+        "name": {
+          "description": "The option's name. For protobuf built-in options (options defined in\ndescriptor.proto), this is the short name. For example, `\"map_entry\"`.\nFor custom options, it should be the fully-qualified name. For example,\n`\"google.api.http\"`.",
+          "type": "string"
+        },
+        "value": {
+          "description": "The option's value packed in an Any message. If the value is a primitive,\nthe corresponding wrapper type defined in google/protobuf/wrappers.proto\nshould be used. If the value is an enum, it should be stored as an int32\nvalue using the google.protobuf.Int32Value type.",
+          "type": "object",
+          "additionalProperties": {
+            "description": "Properties of the object. Contains field @type with type URL.",
+            "type": "any"
+          }
+        }
+      },
+      "id": "Option"
+    },
+    "Logging": {
+      "type": "object",
+      "properties": {
+        "consumerDestinations": {
+          "description": "Logging configurations for sending logs to the consumer project.\nThere can be multiple consumer destinations, each one must have a\ndifferent monitored resource type. A log can be used in at most\none consumer destination.",
+          "type": "array",
+          "items": {
+            "$ref": "LoggingDestination"
+          }
+        },
+        "producerDestinations": {
+          "description": "Logging configurations for sending logs to the producer project.\nThere can be multiple producer destinations, each one must have a\ndifferent monitored resource type. A log can be used in at most\none producer destination.",
+          "type": "array",
+          "items": {
+            "$ref": "LoggingDestination"
+          }
+        }
+      },
+      "id": "Logging",
+      "description": "Logging configuration of the service.\n\nThe following example shows how to configure logs to be sent to the\nproducer and consumer projects. In the example, the `activity_history`\nlog is sent to both the producer and consumer projects, whereas the\n`purchase_history` log is only sent to the producer project.\n\n    monitored_resources:\n    - type: library.googleapis.com/branch\n      labels:\n      - key: /city\n        description: The city where the library branch is located in.\n      - key: /name\n        description: The name of the branch.\n    logs:\n    - name: activity_history\n      labels:\n      - key: /customer_id\n    - name: purchase_history\n    logging:\n      producer_destinations:\n      - monitored_resource: library.googleapis.com/branch\n        logs:\n        - activity_history\n        - purchase_history\n      consumer_destinations:\n      - monitored_resource: library.googleapis.com/branch\n        logs:\n        - activity_history"
+    },
+    "Method": {
+      "id": "Method",
+      "description": "Method represents a method of an api.",
+      "type": "object",
+      "properties": {
+        "responseTypeUrl": {
+          "description": "The URL of the output message type.",
+          "type": "string"
+        },
+        "options": {
+          "description": "Any metadata attached to the method.",
+          "type": "array",
+          "items": {
+            "$ref": "Option"
+          }
+        },
+        "responseStreaming": {
+          "description": "If true, the response is streamed.",
+          "type": "boolean"
+        },
+        "name": {
+          "type": "string",
+          "description": "The simple name of this method."
+        },
+        "requestTypeUrl": {
+          "description": "A URL of the input message type.",
+          "type": "string"
+        },
+        "requestStreaming": {
+          "description": "If true, the request is streamed.",
+          "type": "boolean"
+        },
+        "syntax": {
+          "enumDescriptions": [
+            "Syntax `proto2`.",
+            "Syntax `proto3`."
+          ],
+          "enum": [
+            "SYNTAX_PROTO2",
+            "SYNTAX_PROTO3"
+          ],
+          "description": "The source syntax of this method.",
+          "type": "string"
+        }
+      }
+    },
+    "Mixin": {
+      "type": "object",
+      "properties": {
+        "name": {
+          "description": "The fully qualified name of the API which is included.",
+          "type": "string"
+        },
+        "root": {
+          "description": "If non-empty specifies a path under which inherited HTTP paths\nare rooted.",
+          "type": "string"
+        }
+      },
+      "id": "Mixin",
+      "description": "Declares an API to be included in this API. The including API must\nredeclare all the methods from the included API, but documentation\nand options are inherited as follows:\n\n- If after comment and whitespace stripping, the documentation\n  string of the redeclared method is empty, it will be inherited\n  from the original method.\n\n- Each annotation belonging to the service config (http,\n  visibility) which is not set in the redeclared method will be\n  inherited.\n\n- If an http annotation is inherited, the path pattern will be\n  modified as follows. Any version prefix will be replaced by the\n  version of the including API plus the root path if specified.\n\nExample of a simple mixin:\n\n    package google.acl.v1;\n    service AccessControl {\n      // Get the underlying ACL object.\n      rpc GetAcl(GetAclRequest) returns (Acl) {\n        option (google.api.http).get = \"/v1/{resource=**}:getAcl\";\n      }\n    }\n\n    package google.storage.v2;\n    service Storage {\n      //       rpc GetAcl(GetAclRequest) returns (Acl);\n\n      // Get a data record.\n      rpc GetData(GetDataRequest) returns (Data) {\n        option (google.api.http).get = \"/v2/{resource=**}\";\n      }\n    }\n\nExample of a mixin configuration:\n\n    apis:\n    - name: google.storage.v2.Storage\n      mixins:\n      - name: google.acl.v1.AccessControl\n\nThe mixin construct implies that all methods in `AccessControl` are\nalso declared with same name and request/response types in\n`Storage`. A documentation generator or annotation processor will\nsee the effective `Storage.GetAcl` method after inherting\ndocumentation and annotations as follows:\n\n    service Storage {\n      // Get the underlying ACL object.\n      rpc GetAcl(GetAclRequest) returns (Acl) {\n        option (google.api.http).get = \"/v2/{resource=**}:getAcl\";\n      }\n      ...\n    }\n\nNote how the version in the path pattern changed from `v1` to `v2`.\n\nIf the `root` field in the mixin is specified, it should be a\nrelative path under which inherited HTTP paths are placed. Example:\n\n    apis:\n    - name: google.storage.v2.Storage\n      mixins:\n      - name: google.acl.v1.AccessControl\n        root: acls\n\nThis implies the following inherited HTTP annotation:\n\n    service Storage {\n      // Get the underlying ACL object.\n      rpc GetAcl(GetAclRequest) returns (Acl) {\n        option (google.api.http).get = \"/v2/acls/{resource=**}:getAcl\";\n      }\n      ...\n    }"
+    },
+    "CustomError": {
+      "properties": {
+        "types": {
+          "type": "array",
+          "items": {
+            "type": "string"
+          },
+          "description": "The list of custom error detail types, e.g. 'google.foo.v1.CustomError'."
+        },
+        "rules": {
+          "description": "The list of custom error rules that apply to individual API messages.\n\n**NOTE:** All service configuration rules follow \"last one wins\" order.",
+          "type": "array",
+          "items": {
+            "$ref": "CustomErrorRule"
+          }
+        }
+      },
+      "id": "CustomError",
+      "description": "Customize service error responses.  For example, list any service\nspecific protobuf types that can appear in error detail lists of\nerror responses.\n\nExample:\n\n    custom_error:\n      types:\n      - google.foo.v1.CustomError\n      - google.foo.v1.AnotherError",
+      "type": "object"
+    },
+    "Http": {
+      "type": "object",
+      "properties": {
+        "rules": {
+          "description": "A list of HTTP configuration rules that apply to individual API methods.\n\n**NOTE:** All service configuration rules follow \"last one wins\" order.",
+          "type": "array",
+          "items": {
+            "$ref": "HttpRule"
+          }
+        }
+      },
+      "id": "Http",
+      "description": "Defines the HTTP configuration for a service. It contains a list of\nHttpRule, each specifying the mapping of an RPC method\nto one or more HTTP REST API methods."
+    },
+    "SourceInfo": {
+      "id": "SourceInfo",
+      "description": "Source information used to create a Service Config",
+      "type": "object",
+      "properties": {
+        "sourceFiles": {
+          "description": "All files used during config generation.",
+          "type": "array",
+          "items": {
+            "type": "object",
+            "additionalProperties": {
+              "description": "Properties of the object. Contains field @type with type URL.",
+              "type": "any"
+            }
+          }
+        }
+      }
+    },
+    "Control": {
+      "properties": {
+        "environment": {
+          "description": "The service control environment to use. If empty, no control plane\nfeature (like quota and billing) will be enabled.",
+          "type": "string"
+        }
+      },
+      "id": "Control",
+      "description": "Selects and configures the service controller used by the service.  The\nservice controller handles features like abuse, quota, billing, logging,\nmonitoring, etc.",
+      "type": "object"
+    },
+    "SystemParameter": {
+      "description": "Define a parameter's name and location. The parameter may be passed as either\nan HTTP header or a URL query parameter, and if both are passed the behavior\nis implementation-dependent.",
+      "type": "object",
+      "properties": {
+        "urlQueryParameter": {
+          "description": "Define the URL query parameter name to use for the parameter. It is case\nsensitive.",
+          "type": "string"
+        },
+        "httpHeader": {
+          "description": "Define the HTTP header name to use for the parameter. It is case\ninsensitive.",
+          "type": "string"
+        },
+        "name": {
+          "description": "Define the name of the parameter, such as \"api_key\" . It is case sensitive.",
+          "type": "string"
+        }
+      },
+      "id": "SystemParameter"
+    },
+    "Field": {
+      "description": "A single field of a message type.",
+      "type": "object",
+      "properties": {
+        "kind": {
+          "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"
+          ],
+          "description": "The field type.",
+          "type": "string",
+          "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."
+          ]
+        },
+        "jsonName": {
+          "description": "The field JSON name.",
+          "type": "string"
+        },
+        "options": {
+          "description": "The protocol buffer options.",
+          "type": "array",
+          "items": {
+            "$ref": "Option"
+          }
+        },
+        "oneofIndex": {
+          "description": "The index of the field type in `Type.oneofs`, for message or enumeration\ntypes. The first type has index 1; zero means the type is not in the list.",
+          "format": "int32",
+          "type": "integer"
+        },
+        "packed": {
+          "description": "Whether to use alternative packed wire representation.",
+          "type": "boolean"
+        },
+        "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"
+          ],
+          "description": "The field cardinality.",
+          "type": "string"
+        },
+        "defaultValue": {
+          "description": "The string value of the default value of this field. Proto2 syntax only.",
+          "type": "string"
+        },
+        "name": {
+          "description": "The field name.",
+          "type": "string"
+        },
+        "typeUrl": {
+          "description": "The field type URL, without the scheme, for message or enumeration\ntypes. Example: `\"type.googleapis.com/google.protobuf.Timestamp\"`.",
+          "type": "string"
+        },
+        "number": {
+          "type": "integer",
+          "description": "The field number.",
+          "format": "int32"
+        }
+      },
+      "id": "Field"
+    },
+    "Monitoring": {
+      "properties": {
+        "producerDestinations": {
+          "type": "array",
+          "items": {
+            "$ref": "MonitoringDestination"
+          },
+          "description": "Monitoring configurations for sending metrics to the producer project.\nThere can be multiple producer destinations, each one must have a\ndifferent monitored resource type. A metric can be used in at most\none producer destination."
+        },
+        "consumerDestinations": {
+          "description": "Monitoring configurations for sending metrics to the consumer project.\nThere can be multiple consumer destinations, each one must have a\ndifferent monitored resource type. A metric can be used in at most\none consumer destination.",
+          "type": "array",
+          "items": {
+            "$ref": "MonitoringDestination"
+          }
+        }
+      },
+      "id": "Monitoring",
+      "description": "Monitoring configuration of the service.\n\nThe example below shows how to configure monitored resources and metrics\nfor monitoring. In the example, a monitored resource and two metrics are\ndefined. The `library.googleapis.com/book/returned_count` metric is sent\nto both producer and consumer projects, whereas the\n`library.googleapis.com/book/overdue_count` metric is only sent to the\nconsumer project.\n\n    monitored_resources:\n    - type: library.googleapis.com/branch\n      labels:\n      - key: /city\n        description: The city where the library branch is located in.\n      - key: /name\n        description: The name of the branch.\n    metrics:\n    - name: library.googleapis.com/book/returned_count\n      metric_kind: DELTA\n      value_type: INT64\n      labels:\n      - key: /customer_id\n    - name: library.googleapis.com/book/overdue_count\n      metric_kind: GAUGE\n      value_type: INT64\n      labels:\n      - key: /customer_id\n    monitoring:\n      producer_destinations:\n      - monitored_resource: library.googleapis.com/branch\n        metrics:\n        - library.googleapis.com/book/returned_count\n      consumer_destinations:\n      - monitored_resource: library.googleapis.com/branch\n        metrics:\n        - library.googleapis.com/book/returned_count\n        - library.googleapis.com/book/overdue_count",
+      "type": "object"
+    },
+    "Enum": {
+      "id": "Enum",
+      "description": "Enum type definition.",
+      "type": "object",
+      "properties": {
+        "name": {
+          "type": "string",
+          "description": "Enum type name."
+        },
+        "enumvalue": {
+          "description": "Enum value definitions.",
+          "type": "array",
+          "items": {
+            "$ref": "EnumValue"
+          }
+        },
+        "options": {
+          "type": "array",
+          "items": {
+            "$ref": "Option"
+          },
+          "description": "Protocol buffer options."
+        },
+        "sourceContext": {
+          "$ref": "SourceContext",
+          "description": "The source context."
+        },
+        "syntax": {
+          "enum": [
+            "SYNTAX_PROTO2",
+            "SYNTAX_PROTO3"
+          ],
+          "description": "The source syntax.",
+          "type": "string",
+          "enumDescriptions": [
+            "Syntax `proto2`.",
+            "Syntax `proto3`."
+          ]
+        }
+      }
     }
   },
+  "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"
   },
-  "protocol": "rest",
   "canonicalName": "Service User",
   "auth": {
     "oauth2": {
@@ -1560,7 +1570,40 @@
       "resources": {
         "services": {
           "methods": {
+            "enable": {
+              "request": {
+                "$ref": "EnableServiceRequest"
+              },
+              "description": "Enable a service so it can be used with a project.\nSee [Cloud Auth Guide](https://cloud.google.com/docs/authentication) for\nmore information.\n\nOperation\u003cresponse: google.protobuf.Empty\u003e",
+              "response": {
+                "$ref": "Operation"
+              },
+              "parameterOrder": [
+                "name"
+              ],
+              "httpMethod": "POST",
+              "parameters": {
+                "name": {
+                  "description": "Name of the consumer and the service to enable for that consumer.\n\nA valid path would be:\n- /v1/projects/my-project/services/servicemanagement.googleapis.com:enable",
+                  "required": true,
+                  "type": "string",
+                  "pattern": "^projects/[^/]+/services/[^/]+$",
+                  "location": "path"
+                }
+              },
+              "scopes": [
+                "https://www.googleapis.com/auth/cloud-platform",
+                "https://www.googleapis.com/auth/service.management"
+              ],
+              "flatPath": "v1/projects/{projectsId}/services/{servicesId}:enable",
+              "path": "v1/{+name}:enable",
+              "id": "serviceuser.projects.services.enable"
+            },
             "list": {
+              "flatPath": "v1/projects/{projectsId}/services",
+              "path": "v1/{+parent}/services",
+              "id": "serviceuser.projects.services.list",
+              "description": "List enabled services for the specified consumer.",
               "response": {
                 "$ref": "ListEnabledServicesResponse"
               },
@@ -1574,9 +1617,9 @@
               ],
               "parameters": {
                 "pageToken": {
-                  "location": "query",
                   "description": "Token identifying which result to start with; returned by a previous list\ncall.",
-                  "type": "string"
+                  "type": "string",
+                  "location": "query"
                 },
                 "pageSize": {
                   "description": "Requested size of the next page of data.",
@@ -1585,52 +1628,26 @@
                   "location": "query"
                 },
                 "parent": {
+                  "description": "List enabled services for the specified parent.\n\nAn example valid parent would be:\n- projects/my-project",
                   "required": true,
                   "type": "string",
                   "pattern": "^projects/[^/]+$",
-                  "location": "path",
-                  "description": "List enabled services for the specified parent.\n\nAn example valid parent would be:\n- projects/my-project"
+                  "location": "path"
                 }
-              },
-              "flatPath": "v1/projects/{projectsId}/services",
-              "path": "v1/{+parent}/services",
-              "id": "serviceuser.projects.services.list",
-              "description": "List enabled services for the specified consumer."
+              }
             },
             "disable": {
-              "description": "Disable a service so it can no longer be used with a\nproject. This prevents unintended usage that may cause unexpected billing\ncharges or security leaks.\n\nOperation\u003cresponse: google.protobuf.Empty\u003e",
-              "request": {
-                "$ref": "DisableServiceRequest"
-              },
-              "response": {
-                "$ref": "Operation"
-              },
+              "httpMethod": "POST",
               "parameterOrder": [
                 "name"
               ],
-              "httpMethod": "POST",
-              "scopes": [
-                "https://www.googleapis.com/auth/cloud-platform",
-                "https://www.googleapis.com/auth/service.management"
-              ],
-              "parameters": {
-                "name": {
-                  "description": "Name of the consumer and the service to disable for that consumer.\n\nThe Service User implementation accepts the following forms for consumer:\n- \"project:\u003cproject_id\u003e\"\n\nA valid path would be:\n- /v1/projects/my-project/services/servicemanagement.googleapis.com:disable",
-                  "required": true,
-                  "type": "string",
-                  "pattern": "^projects/[^/]+/services/[^/]+$",
-                  "location": "path"
-                }
+              "response": {
+                "$ref": "Operation"
               },
-              "flatPath": "v1/projects/{projectsId}/services/{servicesId}:disable",
-              "path": "v1/{+name}:disable",
-              "id": "serviceuser.projects.services.disable"
-            },
-            "enable": {
               "parameters": {
                 "name": {
                   "location": "path",
-                  "description": "Name of the consumer and the service to enable for that consumer.\n\nA valid path would be:\n- /v1/projects/my-project/services/servicemanagement.googleapis.com:enable",
+                  "description": "Name of the consumer and the service to disable for that consumer.\n\nThe Service User implementation accepts the following forms for consumer:\n- \"project:\u003cproject_id\u003e\"\n\nA valid path would be:\n- /v1/projects/my-project/services/servicemanagement.googleapis.com:disable",
                   "required": true,
                   "type": "string",
                   "pattern": "^projects/[^/]+/services/[^/]+$"
@@ -1640,20 +1657,13 @@
                 "https://www.googleapis.com/auth/cloud-platform",
                 "https://www.googleapis.com/auth/service.management"
               ],
-              "flatPath": "v1/projects/{projectsId}/services/{servicesId}:enable",
-              "path": "v1/{+name}:enable",
-              "id": "serviceuser.projects.services.enable",
+              "flatPath": "v1/projects/{projectsId}/services/{servicesId}:disable",
+              "id": "serviceuser.projects.services.disable",
+              "path": "v1/{+name}:disable",
               "request": {
-                "$ref": "EnableServiceRequest"
+                "$ref": "DisableServiceRequest"
               },
-              "description": "Enable a service so it can be used with a project.\nSee [Cloud Auth Guide](https://cloud.google.com/docs/authentication) for\nmore information.\n\nOperation\u003cresponse: google.protobuf.Empty\u003e",
-              "response": {
-                "$ref": "Operation"
-              },
-              "parameterOrder": [
-                "name"
-              ],
-              "httpMethod": "POST"
+              "description": "Disable a service so it can no longer be used with a\nproject. This prevents unintended usage that may cause unexpected billing\ncharges or security leaks.\n\nOperation\u003cresponse: google.protobuf.Empty\u003e"
             }
           }
         }
@@ -1662,15 +1672,20 @@
     "services": {
       "methods": {
         "search": {
+          "httpMethod": "GET",
+          "parameterOrder": [],
+          "response": {
+            "$ref": "SearchServicesResponse"
+          },
           "scopes": [
             "https://www.googleapis.com/auth/cloud-platform",
             "https://www.googleapis.com/auth/cloud-platform.read-only"
           ],
           "parameters": {
             "pageToken": {
-              "location": "query",
               "description": "Token identifying which result to start with; returned by a previous list\ncall.",
-              "type": "string"
+              "type": "string",
+              "location": "query"
             },
             "pageSize": {
               "location": "query",
@@ -1680,29 +1695,14 @@
             }
           },
           "flatPath": "v1/services:search",
-          "path": "v1/services:search",
           "id": "serviceuser.services.search",
-          "description": "Search available services.\n\nWhen no filter is specified, returns all accessible services. For\nauthenticated users, also returns all services the calling user has\n\"servicemanagement.services.bind\" permission for.",
-          "response": {
-            "$ref": "SearchServicesResponse"
-          },
-          "httpMethod": "GET",
-          "parameterOrder": []
+          "path": "v1/services:search",
+          "description": "Search available services.\n\nWhen no filter is specified, returns all accessible services. For\nauthenticated users, also returns all services the calling user has\n\"servicemanagement.services.bind\" permission for."
         }
       }
     }
   },
   "parameters": {
-    "oauth_token": {
-      "location": "query",
-      "description": "OAuth 2.0 token for the current user.",
-      "type": "string"
-    },
-    "bearer_token": {
-      "location": "query",
-      "description": "OAuth bearer token.",
-      "type": "string"
-    },
     "upload_protocol": {
       "type": "string",
       "location": "query",
@@ -1714,35 +1714,41 @@
       "type": "boolean",
       "default": "true"
     },
+    "uploadType": {
+      "type": "string",
+      "location": "query",
+      "description": "Legacy upload protocol for media (e.g. \"media\", \"multipart\")."
+    },
     "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\").",
-      "type": "string",
-      "location": "query"
-    },
     "callback": {
+      "location": "query",
       "description": "JSONP",
-      "type": "string",
-      "location": "query"
+      "type": "string"
     },
     "$.xgafv": {
+      "enumDescriptions": [
+        "v1 error format",
+        "v2 error format"
+      ],
+      "location": "query",
       "enum": [
         "1",
         "2"
       ],
       "description": "V1 error format.",
-      "type": "string",
-      "enumDescriptions": [
-        "v1 error format",
-        "v2 error format"
-      ],
-      "location": "query"
+      "type": "string"
     },
     "alt": {
+      "enum": [
+        "json",
+        "media",
+        "proto"
+      ],
+      "type": "string",
       "enumDescriptions": [
         "Responses with Content-Type of application/json",
         "Media download with context-dependent Content-Type",
@@ -1750,24 +1756,18 @@
       ],
       "location": "query",
       "description": "Data format for response.",
-      "default": "json",
-      "enum": [
-        "json",
-        "media",
-        "proto"
-      ],
-      "type": "string"
-    },
-    "access_token": {
-      "type": "string",
-      "location": "query",
-      "description": "OAuth access token."
+      "default": "json"
     },
     "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."
     },
+    "access_token": {
+      "location": "query",
+      "description": "OAuth access token.",
+      "type": "string"
+    },
     "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.",
@@ -1778,16 +1778,16 @@
       "type": "boolean",
       "default": "true",
       "location": "query"
+    },
+    "bearer_token": {
+      "location": "query",
+      "description": "OAuth bearer token.",
+      "type": "string"
+    },
+    "oauth_token": {
+      "location": "query",
+      "description": "OAuth 2.0 token for the current user.",
+      "type": "string"
     }
-  },
-  "version": "v1",
-  "baseUrl": "https://serviceuser.googleapis.com/",
-  "kind": "discovery#restDescription",
-  "description": "Enables services that service consumers want to use on Google Cloud Platform, lists the available or enabled services, or disables services that service consumers no longer use.",
-  "servicePath": "",
-  "basePath": "",
-  "revision": "20170306",
-  "documentationLink": "https://cloud.google.com/service-management/",
-  "id": "serviceuser:v1",
-  "discoveryVersion": "v1"
+  }
 }
diff --git a/serviceuser/v1/serviceuser-gen.go b/serviceuser/v1/serviceuser-gen.go
index 9190c71..8bcb6a0 100644
--- a/serviceuser/v1/serviceuser-gen.go
+++ b/serviceuser/v1/serviceuser-gen.go
@@ -68,10 +68,9 @@
 }
 
 type APIService struct {
-	client                    *http.Client
-	BasePath                  string // API endpoint base URL
-	UserAgent                 string // optional additional User-Agent fragment
-	GoogleClientHeaderElement string // client header fragment, for Google use only
+	client    *http.Client
+	BasePath  string // API endpoint base URL
+	UserAgent string // optional additional User-Agent fragment
 
 	Projects *ProjectsService
 
@@ -85,10 +84,6 @@
 	return googleapi.UserAgent + " " + s.UserAgent
 }
 
-func (s *APIService) clientHeader() string {
-	return gensupport.GoogleClientHeader("20170210", s.GoogleClientHeaderElement)
-}
-
 func NewProjectsService(s *APIService) *ProjectsService {
 	rs := &ProjectsService{s: s}
 	rs.Services = NewProjectsServicesService(s)
@@ -3799,7 +3794,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	var body io.Reader = nil
 	body, err := googleapi.WithoutDataWrapper.JSONReader(c.disableservicerequest)
 	if err != nil {
@@ -3941,7 +3935,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	var body io.Reader = nil
 	body, err := googleapi.WithoutDataWrapper.JSONReader(c.enableservicerequest)
 	if err != nil {
@@ -4102,7 +4095,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	if c.ifNoneMatch_ != "" {
 		reqHeaders.Set("If-None-Match", c.ifNoneMatch_)
 	}
@@ -4294,7 +4286,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	if c.ifNoneMatch_ != "" {
 		reqHeaders.Set("If-None-Match", c.ifNoneMatch_)
 	}
diff --git a/sheets/v4/sheets-api.json b/sheets/v4/sheets-api.json
index c748b50..c92a7b5 100644
--- a/sheets/v4/sheets-api.json
+++ b/sheets/v4/sheets-api.json
@@ -1,1623 +1,10 @@
 {
+  "documentationLink": "https://developers.google.com/sheets/",
+  "id": "sheets:v4",
+  "revision": "20170317",
+  "discoveryVersion": "v1",
   "version_module": "True",
   "schemas": {
-    "ExtendedValue": {
-      "description": "The kinds of value that a cell in a spreadsheet can have.",
-      "type": "object",
-      "properties": {
-        "stringValue": {
-          "description": "Represents a string value.\nLeading single quotes are not included. For example, if the user typed\n`'123` into the UI, this would be represented as a `stringValue` of\n`\"123\"`.",
-          "type": "string"
-        },
-        "boolValue": {
-          "description": "Represents a boolean value.",
-          "type": "boolean"
-        },
-        "formulaValue": {
-          "description": "Represents a formula.",
-          "type": "string"
-        },
-        "numberValue": {
-          "description": "Represents a double value.\nNote: Dates, Times and DateTimes are represented as doubles in\n\"serial number\" format.",
-          "format": "double",
-          "type": "number"
-        },
-        "errorValue": {
-          "$ref": "ErrorValue",
-          "description": "Represents an error.\nThis field is read-only."
-        }
-      },
-      "id": "ExtendedValue"
-    },
-    "BandedRange": {
-      "id": "BandedRange",
-      "description": "A banded (alternating colors) range in a sheet.",
-      "type": "object",
-      "properties": {
-        "rowProperties": {
-          "$ref": "BandingProperties",
-          "description": "Properties for row bands. These properties will be applied on a row-by-row\nbasis throughout all the rows in the range. At least one of\nrow_properties or column_properties must be specified."
-        },
-        "columnProperties": {
-          "$ref": "BandingProperties",
-          "description": "Properties for column bands. These properties will be applied on a column-\nby-column basis throughout all the columns in the range. At least one of\nrow_properties or column_properties must be specified."
-        },
-        "range": {
-          "$ref": "GridRange",
-          "description": "The range over which these properties are applied."
-        },
-        "bandedRangeId": {
-          "description": "The id of the banded range.",
-          "format": "int32",
-          "type": "integer"
-        }
-      }
-    },
-    "AddChartRequest": {
-      "description": "Adds a chart to a sheet in the spreadsheet.",
-      "type": "object",
-      "properties": {
-        "chart": {
-          "$ref": "EmbeddedChart",
-          "description": "The chart that should be added to the spreadsheet, including the position\nwhere it should be placed. The chartId\nfield is optional; if one is not set, an id will be randomly generated. (It\nis an error to specify the ID of a chart that already exists.)"
-        }
-      },
-      "id": "AddChartRequest"
-    },
-    "Spreadsheet": {
-      "description": "Resource that represents a spreadsheet.",
-      "type": "object",
-      "properties": {
-        "properties": {
-          "$ref": "SpreadsheetProperties",
-          "description": "Overall properties of a spreadsheet."
-        },
-        "spreadsheetId": {
-          "type": "string",
-          "description": "The ID of the spreadsheet.\nThis field is read-only."
-        },
-        "sheets": {
-          "description": "The sheets that are part of a spreadsheet.",
-          "type": "array",
-          "items": {
-            "$ref": "Sheet"
-          }
-        },
-        "namedRanges": {
-          "description": "The named ranges defined in a spreadsheet.",
-          "type": "array",
-          "items": {
-            "$ref": "NamedRange"
-          }
-        },
-        "spreadsheetUrl": {
-          "description": "The url of the spreadsheet.\nThis field is read-only.",
-          "type": "string"
-        }
-      },
-      "id": "Spreadsheet"
-    },
-    "BatchClearValuesResponse": {
-      "description": "The response when updating a range of values in a spreadsheet.",
-      "type": "object",
-      "properties": {
-        "spreadsheetId": {
-          "description": "The spreadsheet the updates were applied to.",
-          "type": "string"
-        },
-        "clearedRanges": {
-          "description": "The ranges that were cleared, in A1 notation.\n(If the requests were for an unbounded range or a ranger larger\n than the bounds of the sheet, this will be the actual ranges\n that were cleared, bounded to the sheet's limits.)",
-          "type": "array",
-          "items": {
-            "type": "string"
-          }
-        }
-      },
-      "id": "BatchClearValuesResponse"
-    },
-    "UpdateProtectedRangeRequest": {
-      "description": "Updates an existing protected range with the specified\nprotectedRangeId.",
-      "type": "object",
-      "properties": {
-        "protectedRange": {
-          "description": "The protected range to update with the new properties.",
-          "$ref": "ProtectedRange"
-        },
-        "fields": {
-          "description": "The fields that should be updated.  At least one field must be specified.\nThe root `protectedRange` is implied and should not be specified.\nA single `\"*\"` can be used as short-hand for listing every field.",
-          "format": "google-fieldmask",
-          "type": "string"
-        }
-      },
-      "id": "UpdateProtectedRangeRequest"
-    },
-    "TextFormat": {
-      "description": "The format of a run of text in a cell.\nAbsent values indicate that the field isn't specified.",
-      "type": "object",
-      "properties": {
-        "foregroundColor": {
-          "description": "The foreground color of the text.",
-          "$ref": "Color"
-        },
-        "bold": {
-          "type": "boolean",
-          "description": "True if the text is bold."
-        },
-        "fontFamily": {
-          "description": "The font family.",
-          "type": "string"
-        },
-        "italic": {
-          "description": "True if the text is italicized.",
-          "type": "boolean"
-        },
-        "strikethrough": {
-          "description": "True if the text has a strikethrough.",
-          "type": "boolean"
-        },
-        "fontSize": {
-          "description": "The size of the font.",
-          "format": "int32",
-          "type": "integer"
-        },
-        "underline": {
-          "description": "True if the text is underlined.",
-          "type": "boolean"
-        }
-      },
-      "id": "TextFormat"
-    },
-    "AddSheetResponse": {
-      "id": "AddSheetResponse",
-      "description": "The result of adding a sheet.",
-      "type": "object",
-      "properties": {
-        "properties": {
-          "description": "The properties of the newly added sheet.",
-          "$ref": "SheetProperties"
-        }
-      }
-    },
-    "AddFilterViewResponse": {
-      "description": "The result of adding a filter view.",
-      "type": "object",
-      "properties": {
-        "filter": {
-          "$ref": "FilterView",
-          "description": "The newly added filter view."
-        }
-      },
-      "id": "AddFilterViewResponse"
-    },
-    "IterativeCalculationSettings": {
-      "description": "Settings to control how circular dependencies are resolved with iterative\ncalculation.",
-      "type": "object",
-      "properties": {
-        "convergenceThreshold": {
-          "description": "When iterative calculation is enabled and successive results differ by\nless than this threshold value, the calculation rounds stop.",
-          "format": "double",
-          "type": "number"
-        },
-        "maxIterations": {
-          "type": "integer",
-          "description": "When iterative calculation is enabled, the maximum number of calculation\nrounds to perform.",
-          "format": "int32"
-        }
-      },
-      "id": "IterativeCalculationSettings"
-    },
-    "OverlayPosition": {
-      "description": "The location an object is overlaid on top of a grid.",
-      "type": "object",
-      "properties": {
-        "widthPixels": {
-          "description": "The width of the object, in pixels. Defaults to 600.",
-          "format": "int32",
-          "type": "integer"
-        },
-        "offsetXPixels": {
-          "description": "The horizontal offset, in pixels, that the object is offset\nfrom the anchor cell.",
-          "format": "int32",
-          "type": "integer"
-        },
-        "anchorCell": {
-          "description": "The cell the object is anchored to.",
-          "$ref": "GridCoordinate"
-        },
-        "offsetYPixels": {
-          "description": "The vertical offset, in pixels, that the object is offset\nfrom the anchor cell.",
-          "format": "int32",
-          "type": "integer"
-        },
-        "heightPixels": {
-          "description": "The height of the object, in pixels. Defaults to 371.",
-          "format": "int32",
-          "type": "integer"
-        }
-      },
-      "id": "OverlayPosition"
-    },
-    "SpreadsheetProperties": {
-      "properties": {
-        "autoRecalc": {
-          "enumDescriptions": [
-            "Default value. This value must not be used.",
-            "Volatile functions are updated on every change.",
-            "Volatile functions are updated on every change and every minute.",
-            "Volatile functions are updated on every change and hourly."
-          ],
-          "enum": [
-            "RECALCULATION_INTERVAL_UNSPECIFIED",
-            "ON_CHANGE",
-            "MINUTE",
-            "HOUR"
-          ],
-          "description": "The amount of time to wait before volatile functions are recalculated.",
-          "type": "string"
-        },
-        "defaultFormat": {
-          "$ref": "CellFormat",
-          "description": "The default format of all cells in the spreadsheet.\nCellData.effectiveFormat will not be set if the\ncell's format is equal to this default format.\nThis field is read-only."
-        },
-        "timeZone": {
-          "description": "The time zone of the spreadsheet, in CLDR format such as\n`America/New_York`. If the time zone isn't recognized, this may\nbe a custom time zone such as `GMT-07:00`.",
-          "type": "string"
-        },
-        "title": {
-          "description": "The title of the spreadsheet.",
-          "type": "string"
-        },
-        "locale": {
-          "description": "The locale of the spreadsheet in one of the following formats:\n\n* an ISO 639-1 language code such as `en`\n\n* an ISO 639-2 language code such as `fil`, if no 639-1 code exists\n\n* a combination of the ISO language code and country code, such as `en_US`\n\nNote: when updating this field, not all locales/languages are supported.",
-          "type": "string"
-        },
-        "iterativeCalculationSettings": {
-          "$ref": "IterativeCalculationSettings",
-          "description": "Determines whether and how circular references are resolved with iterative\ncalculation.  Absence of this field means that circular references will\nresult in calculation errors."
-        }
-      },
-      "id": "SpreadsheetProperties",
-      "description": "Properties of a spreadsheet.",
-      "type": "object"
-    },
-    "RepeatCellRequest": {
-      "description": "Updates all cells in the range to the values in the given Cell object.\nOnly the fields listed in the fields field are updated; others are\nunchanged.\n\nIf writing a cell with a formula, the formula's ranges will automatically\nincrement for each field in the range.\nFor example, if writing a cell with formula `=A1` into range B2:C4,\nB2 would be `=A1`, B3 would be `=A2`, B4 would be `=A3`,\nC2 would be `=B1`, C3 would be `=B2`, C4 would be `=B3`.\n\nTo keep the formula's ranges static, use the `$` indicator.\nFor example, use the formula `=$A$1` to prevent both the row and the\ncolumn from incrementing.",
-      "type": "object",
-      "properties": {
-        "range": {
-          "$ref": "GridRange",
-          "description": "The range to repeat the cell in."
-        },
-        "fields": {
-          "description": "The fields that should be updated.  At least one field must be specified.\nThe root `cell` is implied and should not be specified.\nA single `\"*\"` can be used as short-hand for listing every field.",
-          "format": "google-fieldmask",
-          "type": "string"
-        },
-        "cell": {
-          "$ref": "CellData",
-          "description": "The data to write."
-        }
-      },
-      "id": "RepeatCellRequest"
-    },
-    "AddChartResponse": {
-      "description": "The result of adding a chart to a spreadsheet.",
-      "type": "object",
-      "properties": {
-        "chart": {
-          "$ref": "EmbeddedChart",
-          "description": "The newly added chart."
-        }
-      },
-      "id": "AddChartResponse"
-    },
-    "InsertDimensionRequest": {
-      "id": "InsertDimensionRequest",
-      "description": "Inserts rows or columns in a sheet at a particular index.",
-      "type": "object",
-      "properties": {
-        "range": {
-          "$ref": "DimensionRange",
-          "description": "The dimensions to insert.  Both the start and end indexes must be bounded."
-        },
-        "inheritFromBefore": {
-          "description": "Whether dimension properties should be extended from the dimensions\nbefore or after the newly inserted dimensions.\nTrue to inherit from the dimensions before (in which case the start\nindex must be greater than 0), and false to inherit from the dimensions\nafter.\n\nFor example, if row index 0 has red background and row index 1\nhas a green background, then inserting 2 rows at index 1 can inherit\neither the green or red background.  If `inheritFromBefore` is true,\nthe two new rows will be red (because the row before the insertion point\nwas red), whereas if `inheritFromBefore` is false, the two new rows will\nbe green (because the row after the insertion point was green).",
-          "type": "boolean"
-        }
-      }
-    },
-    "UpdateSpreadsheetPropertiesRequest": {
-      "description": "Updates properties of a spreadsheet.",
-      "type": "object",
-      "properties": {
-        "properties": {
-          "$ref": "SpreadsheetProperties",
-          "description": "The properties to update."
-        },
-        "fields": {
-          "description": "The fields that should be updated.  At least one field must be specified.\nThe root 'properties' is implied and should not be specified.\nA single `\"*\"` can be used as short-hand for listing every field.",
-          "format": "google-fieldmask",
-          "type": "string"
-        }
-      },
-      "id": "UpdateSpreadsheetPropertiesRequest"
-    },
-    "ProtectedRange": {
-      "description": "A protected range.",
-      "type": "object",
-      "properties": {
-        "requestingUserCanEdit": {
-          "type": "boolean",
-          "description": "True if the user who requested this protected range can edit the\nprotected area.\nThis field is read-only."
-        },
-        "range": {
-          "$ref": "GridRange",
-          "description": "The range that is being protected.\nThe range may be fully unbounded, in which case this is considered\na protected sheet.\n\nWhen writing, only one of range or named_range_id\nmay be set."
-        },
-        "editors": {
-          "$ref": "Editors",
-          "description": "The users and groups with edit access to the protected range.\nThis field is only visible to users with edit access to the protected\nrange and the document.\nEditors are not supported with warning_only protection."
-        },
-        "description": {
-          "description": "The description of this protected range.",
-          "type": "string"
-        },
-        "unprotectedRanges": {
-          "description": "The list of unprotected ranges within a protected sheet.\nUnprotected ranges are only supported on protected sheets.",
-          "type": "array",
-          "items": {
-            "$ref": "GridRange"
-          }
-        },
-        "namedRangeId": {
-          "description": "The named range this protected range is backed by, if any.\n\nWhen writing, only one of range or named_range_id\nmay be set.",
-          "type": "string"
-        },
-        "protectedRangeId": {
-          "type": "integer",
-          "description": "The ID of the protected range.\nThis field is read-only.",
-          "format": "int32"
-        },
-        "warningOnly": {
-          "description": "True if this protected range will show a warning when editing.\nWarning-based protection means that every user can edit data in the\nprotected range, except editing will prompt a warning asking the user\nto confirm the edit.\n\nWhen writing: if this field is true, then editors is ignored.\nAdditionally, if this field is changed from true to false and the\n`editors` field is not set (nor included in the field mask), then\nthe editors will be set to all the editors in the document.",
-          "type": "boolean"
-        }
-      },
-      "id": "ProtectedRange"
-    },
-    "BatchUpdateValuesRequest": {
-      "type": "object",
-      "properties": {
-        "includeValuesInResponse": {
-          "description": "Determines if the update response should include the values\nof the cells that were updated. By default, responses\ndo not include the updated values. The `updatedData` field within\neach of the BatchUpdateValuesResponse.responses will contain\nthe updated values. If the range to write was larger than than the range\nactually written, the response will include all values in the requested\nrange (excluding trailing empty rows and columns).",
-          "type": "boolean"
-        },
-        "valueInputOption": {
-          "type": "string",
-          "enumDescriptions": [
-            "Default input value. This value must not be used.",
-            "The values the user has entered will not be parsed and will be stored\nas-is.",
-            "The values will be parsed as if the user typed them into the UI.\nNumbers will stay as numbers, but strings may be converted to numbers,\ndates, etc. following the same rules that are applied when entering\ntext into a cell via the Google Sheets UI."
-          ],
-          "enum": [
-            "INPUT_VALUE_OPTION_UNSPECIFIED",
-            "RAW",
-            "USER_ENTERED"
-          ],
-          "description": "How the input data should be interpreted."
-        },
-        "data": {
-          "description": "The new values to apply to the spreadsheet.",
-          "type": "array",
-          "items": {
-            "$ref": "ValueRange"
-          }
-        },
-        "responseDateTimeRenderOption": {
-          "enumDescriptions": [
-            "Instructs date, time, datetime, and duration fields to be output\nas doubles in \"serial number\" format, as popularized by Lotus 1-2-3.\nThe whole number portion of the value (left of the decimal) counts\nthe days since December 30th 1899. The fractional portion (right of\nthe decimal) counts the time as a fraction of the day. For example,\nJanuary 1st 1900 at noon would be 2.5, 2 because it's 2 days after\nDecember 30st 1899, and .5 because noon is half a day.  February 1st\n1900 at 3pm would be 33.625. This correctly treats the year 1900 as\nnot a leap year.",
-            "Instructs date, time, datetime, and duration fields to be output\nas strings in their given number format (which is dependent\non the spreadsheet locale)."
-          ],
-          "enum": [
-            "SERIAL_NUMBER",
-            "FORMATTED_STRING"
-          ],
-          "description": "Determines how dates, times, and durations in the response should be\nrendered. This is ignored if response_value_render_option is\nFORMATTED_VALUE.\nThe default dateTime render option is [DateTimeRenderOption.SERIAL_NUMBER].",
-          "type": "string"
-        },
-        "responseValueRenderOption": {
-          "type": "string",
-          "enumDescriptions": [
-            "Values will be calculated & formatted in the reply according to the\ncell's formatting.  Formatting is based on the spreadsheet's locale,\nnot the requesting user's locale.\nFor example, if `A1` is `1.23` and `A2` is `=A1` and formatted as currency,\nthen `A2` would return `\"$1.23\"`.",
-            "Values will be calculated, but not formatted in the reply.\nFor example, if `A1` is `1.23` and `A2` is `=A1` and formatted as currency,\nthen `A2` would return the number `1.23`.",
-            "Values will not be calculated.  The reply will include the formulas.\nFor example, if `A1` is `1.23` and `A2` is `=A1` and formatted as currency,\nthen A2 would return `\"=A1\"`."
-          ],
-          "enum": [
-            "FORMATTED_VALUE",
-            "UNFORMATTED_VALUE",
-            "FORMULA"
-          ],
-          "description": "Determines how values in the response should be rendered.\nThe default render option is ValueRenderOption.FORMATTED_VALUE."
-        }
-      },
-      "id": "BatchUpdateValuesRequest",
-      "description": "The request for updating more than one range of values in a spreadsheet."
-    },
-    "DimensionProperties": {
-      "id": "DimensionProperties",
-      "description": "Properties about a dimension.",
-      "type": "object",
-      "properties": {
-        "pixelSize": {
-          "description": "The height (if a row) or width (if a column) of the dimension in pixels.",
-          "format": "int32",
-          "type": "integer"
-        },
-        "hiddenByFilter": {
-          "description": "True if this dimension is being filtered.\nThis field is read-only.",
-          "type": "boolean"
-        },
-        "hiddenByUser": {
-          "description": "True if this dimension is explicitly hidden.",
-          "type": "boolean"
-        }
-      }
-    },
-    "NamedRange": {
-      "description": "A named range.",
-      "type": "object",
-      "properties": {
-        "namedRangeId": {
-          "description": "The ID of the named range.",
-          "type": "string"
-        },
-        "range": {
-          "$ref": "GridRange",
-          "description": "The range this represents."
-        },
-        "name": {
-          "description": "The name of the named range.",
-          "type": "string"
-        }
-      },
-      "id": "NamedRange"
-    },
-    "DimensionRange": {
-      "description": "A range along a single dimension on a sheet.\nAll indexes are zero-based.\nIndexes are half open: the start index is inclusive\nand the end index is exclusive.\nMissing indexes indicate the range is unbounded on that side.",
-      "type": "object",
-      "properties": {
-        "sheetId": {
-          "description": "The sheet this span is on.",
-          "format": "int32",
-          "type": "integer"
-        },
-        "dimension": {
-          "enumDescriptions": [
-            "The default value, do not use.",
-            "Operates on the rows of a sheet.",
-            "Operates on the columns of a sheet."
-          ],
-          "enum": [
-            "DIMENSION_UNSPECIFIED",
-            "ROWS",
-            "COLUMNS"
-          ],
-          "description": "The dimension of the span.",
-          "type": "string"
-        },
-        "startIndex": {
-          "description": "The start (inclusive) of the span, or not set if unbounded.",
-          "format": "int32",
-          "type": "integer"
-        },
-        "endIndex": {
-          "description": "The end (exclusive) of the span, or not set if unbounded.",
-          "format": "int32",
-          "type": "integer"
-        }
-      },
-      "id": "DimensionRange"
-    },
-    "CutPasteRequest": {
-      "description": "Moves data from the source to the destination.",
-      "type": "object",
-      "properties": {
-        "source": {
-          "$ref": "GridRange",
-          "description": "The source data to cut."
-        },
-        "pasteType": {
-          "description": "What kind of data to paste.  All the source data will be cut, regardless\nof what is pasted.",
-          "type": "string",
-          "enumDescriptions": [
-            "Paste values, formulas, formats, and merges.",
-            "Paste the values ONLY without formats, formulas, or merges.",
-            "Paste the format and data validation only.",
-            "Like PASTE_NORMAL but without borders.",
-            "Paste the formulas only.",
-            "Paste the data validation only.",
-            "Paste the conditional formatting rules only."
-          ],
-          "enum": [
-            "PASTE_NORMAL",
-            "PASTE_VALUES",
-            "PASTE_FORMAT",
-            "PASTE_NO_BORDERS",
-            "PASTE_FORMULA",
-            "PASTE_DATA_VALIDATION",
-            "PASTE_CONDITIONAL_FORMATTING"
-          ]
-        },
-        "destination": {
-          "$ref": "GridCoordinate",
-          "description": "The top-left coordinate where the data should be pasted."
-        }
-      },
-      "id": "CutPasteRequest"
-    },
-    "Borders": {
-      "properties": {
-        "top": {
-          "description": "The top border of the cell.",
-          "$ref": "Border"
-        },
-        "left": {
-          "$ref": "Border",
-          "description": "The left border of the cell."
-        },
-        "right": {
-          "$ref": "Border",
-          "description": "The right border of the cell."
-        },
-        "bottom": {
-          "$ref": "Border",
-          "description": "The bottom border of the cell."
-        }
-      },
-      "id": "Borders",
-      "description": "The borders of the cell.",
-      "type": "object"
-    },
-    "BasicChartSeries": {
-      "properties": {
-        "targetAxis": {
-          "enum": [
-            "BASIC_CHART_AXIS_POSITION_UNSPECIFIED",
-            "BOTTOM_AXIS",
-            "LEFT_AXIS",
-            "RIGHT_AXIS"
-          ],
-          "description": "The minor axis that will specify the range of values for this series.\nFor example, if charting stocks over time, the \"Volume\" series\nmay want to be pinned to the right with the prices pinned to the left,\nbecause the scale of trading volume is different than the scale of\nprices.\nIt is an error to specify an axis that isn't a valid minor axis\nfor the chart's type.",
-          "type": "string",
-          "enumDescriptions": [
-            "Default value, do not use.",
-            "The axis rendered at the bottom of a chart.\nFor most charts, this is the standard major axis.\nFor bar charts, this is a minor axis.",
-            "The axis rendered at the left of a chart.\nFor most charts, this is a minor axis.\nFor bar charts, this is the standard major axis.",
-            "The axis rendered at the right of a chart.\nFor most charts, this is a minor axis.\nFor bar charts, this is an unusual major axis."
-          ]
-        },
-        "series": {
-          "$ref": "ChartData",
-          "description": "The data being visualized in this chart series."
-        },
-        "type": {
-          "enum": [
-            "BASIC_CHART_TYPE_UNSPECIFIED",
-            "BAR",
-            "LINE",
-            "AREA",
-            "COLUMN",
-            "SCATTER",
-            "COMBO"
-          ],
-          "description": "The type of this series. Valid only if the\nchartType is\nCOMBO.\nDifferent types will change the way the series is visualized.\nOnly LINE, AREA,\nand COLUMN are supported.",
-          "type": "string",
-          "enumDescriptions": [
-            "Default value, do not use.",
-            "A \u003ca href=\"/chart/interactive/docs/gallery/barchart\"\u003ebar chart\u003c/a\u003e.",
-            "A \u003ca href=\"/chart/interactive/docs/gallery/linechart\"\u003eline chart\u003c/a\u003e.",
-            "An \u003ca href=\"/chart/interactive/docs/gallery/areachart\"\u003earea chart\u003c/a\u003e.",
-            "A \u003ca href=\"/chart/interactive/docs/gallery/columnchart\"\u003ecolumn chart\u003c/a\u003e.",
-            "A \u003ca href=\"/chart/interactive/docs/gallery/scatterchart\"\u003escatter chart\u003c/a\u003e.",
-            "A \u003ca href=\"/chart/interactive/docs/gallery/combochart\"\u003ecombo chart\u003c/a\u003e."
-          ]
-        }
-      },
-      "id": "BasicChartSeries",
-      "description": "A single series of data in a chart.\nFor example, if charting stock prices over time, multiple series may exist,\none for the \"Open Price\", \"High Price\", \"Low Price\" and \"Close Price\".",
-      "type": "object"
-    },
-    "AutoResizeDimensionsRequest": {
-      "id": "AutoResizeDimensionsRequest",
-      "description": "Automatically resizes one or more dimensions based on the contents\nof the cells in that dimension.",
-      "type": "object",
-      "properties": {
-        "dimensions": {
-          "description": "The dimensions to automatically resize.\nOnly COLUMNS are supported.",
-          "$ref": "DimensionRange"
-        }
-      }
-    },
-    "UpdateBordersRequest": {
-      "description": "Updates the borders of a range.\nIf a field is not set in the request, that means the border remains as-is.\nFor example, with two subsequent UpdateBordersRequest:\n\n 1. range: A1:A5 `{ top: RED, bottom: WHITE }`\n 2. range: A1:A5 `{ left: BLUE }`\n\nThat would result in A1:A5 having a borders of\n`{ top: RED, bottom: WHITE, left: BLUE }`.\nIf you want to clear a border, explicitly set the style to\nNONE.",
-      "type": "object",
-      "properties": {
-        "innerHorizontal": {
-          "description": "The horizontal border to put within the range.",
-          "$ref": "Border"
-        },
-        "top": {
-          "description": "The border to put at the top of the range.",
-          "$ref": "Border"
-        },
-        "left": {
-          "$ref": "Border",
-          "description": "The border to put at the left of the range."
-        },
-        "bottom": {
-          "$ref": "Border",
-          "description": "The border to put at the bottom of the range."
-        },
-        "innerVertical": {
-          "description": "The vertical border to put within the range.",
-          "$ref": "Border"
-        },
-        "right": {
-          "description": "The border to put at the right of the range.",
-          "$ref": "Border"
-        },
-        "range": {
-          "$ref": "GridRange",
-          "description": "The range whose borders should be updated."
-        }
-      },
-      "id": "UpdateBordersRequest"
-    },
-    "CellFormat": {
-      "properties": {
-        "backgroundColor": {
-          "$ref": "Color",
-          "description": "The background color of the cell."
-        },
-        "padding": {
-          "$ref": "Padding",
-          "description": "The padding of the cell."
-        },
-        "verticalAlignment": {
-          "enum": [
-            "VERTICAL_ALIGN_UNSPECIFIED",
-            "TOP",
-            "MIDDLE",
-            "BOTTOM"
-          ],
-          "description": "The vertical alignment of the value in the cell.",
-          "type": "string",
-          "enumDescriptions": [
-            "The vertical alignment is not specified.  Do not use this.",
-            "The text is explicitly aligned to the top of the cell.",
-            "The text is explicitly aligned to the middle of the cell.",
-            "The text is explicitly aligned to the bottom of the cell."
-          ]
-        },
-        "borders": {
-          "$ref": "Borders",
-          "description": "The borders of the cell."
-        },
-        "textDirection": {
-          "description": "The direction of the text in the cell.",
-          "type": "string",
-          "enumDescriptions": [
-            "The text direction is not specified. Do not use this.",
-            "The text direction of left-to-right was set by the user.",
-            "The text direction of right-to-left was set by the user."
-          ],
-          "enum": [
-            "TEXT_DIRECTION_UNSPECIFIED",
-            "LEFT_TO_RIGHT",
-            "RIGHT_TO_LEFT"
-          ]
-        },
-        "textRotation": {
-          "description": "The rotation applied to text in a cell",
-          "$ref": "TextRotation"
-        },
-        "wrapStrategy": {
-          "enum": [
-            "WRAP_STRATEGY_UNSPECIFIED",
-            "OVERFLOW_CELL",
-            "LEGACY_WRAP",
-            "CLIP",
-            "WRAP"
-          ],
-          "description": "The wrap strategy for the value in the cell.",
-          "type": "string",
-          "enumDescriptions": [
-            "The default value, do not use.",
-            "Lines that are longer than the cell width will be written in the next\ncell over, so long as that cell is empty. If the next cell over is\nnon-empty, this behaves the same as CLIP. The text will never wrap\nto the next line unless the user manually inserts a new line.\nExample:\n\n    | First sentence. |\n    | Manual newline that is very long. \u003c- Text continues into next cell\n    | Next newline.   |",
-            "This wrap strategy represents the old Google Sheets wrap strategy where\nwords that are longer than a line are clipped rather than broken. This\nstrategy is not supported on all platforms and is being phased out.\nExample:\n\n    | Cell has a |\n    | loooooooooo| \u003c- Word is clipped.\n    | word.      |",
-            "Lines that are longer than the cell width will be clipped.\nThe text will never wrap to the next line unless the user manually\ninserts a new line.\nExample:\n\n    | First sentence. |\n    | Manual newline t| \u003c- Text is clipped\n    | Next newline.   |",
-            "Words that are longer than a line are wrapped at the character level\nrather than clipped.\nExample:\n\n    | Cell has a |\n    | loooooooooo| \u003c- Word is broken.\n    | ong word.  |"
-          ]
-        },
-        "numberFormat": {
-          "$ref": "NumberFormat",
-          "description": "A format describing how number values should be represented to the user."
-        },
-        "hyperlinkDisplayType": {
-          "enum": [
-            "HYPERLINK_DISPLAY_TYPE_UNSPECIFIED",
-            "LINKED",
-            "PLAIN_TEXT"
-          ],
-          "description": "How a hyperlink, if it exists, should be displayed in the cell.",
-          "type": "string",
-          "enumDescriptions": [
-            "The default value: the hyperlink is rendered. Do not use this.",
-            "A hyperlink should be explicitly rendered.",
-            "A hyperlink should not be rendered."
-          ]
-        },
-        "horizontalAlignment": {
-          "description": "The horizontal alignment of the value in the cell.",
-          "type": "string",
-          "enumDescriptions": [
-            "The horizontal alignment is not specified. Do not use this.",
-            "The text is explicitly aligned to the left of the cell.",
-            "The text is explicitly aligned to the center of the cell.",
-            "The text is explicitly aligned to the right of the cell."
-          ],
-          "enum": [
-            "HORIZONTAL_ALIGN_UNSPECIFIED",
-            "LEFT",
-            "CENTER",
-            "RIGHT"
-          ]
-        },
-        "textFormat": {
-          "description": "The format of the text in the cell (unless overridden by a format run).",
-          "$ref": "TextFormat"
-        }
-      },
-      "id": "CellFormat",
-      "description": "The format of a cell.",
-      "type": "object"
-    },
-    "ClearValuesResponse": {
-      "type": "object",
-      "properties": {
-        "spreadsheetId": {
-          "description": "The spreadsheet the updates were applied to.",
-          "type": "string"
-        },
-        "clearedRange": {
-          "type": "string",
-          "description": "The range (in A1 notation) that was cleared.\n(If the request was for an unbounded range or a ranger larger\n than the bounds of the sheet, this will be the actual range\n that was cleared, bounded to the sheet's limits.)"
-        }
-      },
-      "id": "ClearValuesResponse",
-      "description": "The response when clearing a range of values in a spreadsheet."
-    },
-    "DeleteConditionalFormatRuleRequest": {
-      "type": "object",
-      "properties": {
-        "index": {
-          "description": "The zero-based index of the rule to be deleted.",
-          "format": "int32",
-          "type": "integer"
-        },
-        "sheetId": {
-          "description": "The sheet the rule is being deleted from.",
-          "format": "int32",
-          "type": "integer"
-        }
-      },
-      "id": "DeleteConditionalFormatRuleRequest",
-      "description": "Deletes a conditional format rule at the given index.\nAll subsequent rules' indexes are decremented."
-    },
-    "AddBandingResponse": {
-      "properties": {
-        "bandedRange": {
-          "$ref": "BandedRange",
-          "description": "The banded range that was added."
-        }
-      },
-      "id": "AddBandingResponse",
-      "description": "The result of adding a banded range.",
-      "type": "object"
-    },
-    "DeleteNamedRangeRequest": {
-      "properties": {
-        "namedRangeId": {
-          "type": "string",
-          "description": "The ID of the named range to delete."
-        }
-      },
-      "id": "DeleteNamedRangeRequest",
-      "description": "Removes the named range with the given ID from the spreadsheet.",
-      "type": "object"
-    },
-    "ChartData": {
-      "description": "The data included in a domain or series.",
-      "type": "object",
-      "properties": {
-        "sourceRange": {
-          "$ref": "ChartSourceRange",
-          "description": "The source ranges of the data."
-        }
-      },
-      "id": "ChartData"
-    },
-    "BatchGetValuesResponse": {
-      "description": "The response when retrieving more than one range of values in a spreadsheet.",
-      "type": "object",
-      "properties": {
-        "valueRanges": {
-          "description": "The requested values. The order of the ValueRanges is the same as the\norder of the requested ranges.",
-          "type": "array",
-          "items": {
-            "$ref": "ValueRange"
-          }
-        },
-        "spreadsheetId": {
-          "type": "string",
-          "description": "The ID of the spreadsheet the data was retrieved from."
-        }
-      },
-      "id": "BatchGetValuesResponse"
-    },
-    "UpdateBandingRequest": {
-      "id": "UpdateBandingRequest",
-      "description": "Updates properties of the supplied banded range.",
-      "type": "object",
-      "properties": {
-        "fields": {
-          "description": "The fields that should be updated.  At least one field must be specified.\nThe root `bandedRange` is implied and should not be specified.\nA single `\"*\"` can be used as short-hand for listing every field.",
-          "format": "google-fieldmask",
-          "type": "string"
-        },
-        "bandedRange": {
-          "$ref": "BandedRange",
-          "description": "The banded range to update with the new properties."
-        }
-      }
-    },
-    "Color": {
-      "description": "Represents a color in the RGBA color space. This representation is designed\nfor simplicity of conversion to/from color representations in various\nlanguages over compactness; for example, the fields of this representation\ncan be trivially provided to the constructor of \"java.awt.Color\" in Java; it\ncan also be trivially provided to UIColor's \"+colorWithRed:green:blue:alpha\"\nmethod in iOS; and, with just a little work, it can be easily formatted into\na CSS \"rgba()\" string in JavaScript, as well. Here are some examples:\n\nExample (Java):\n\n     import com.google.type.Color;\n\n     // ...\n     public static java.awt.Color fromProto(Color protocolor) {\n       float alpha = protocolor.hasAlpha()\n           ? protocolor.getAlpha().getValue()\n           : 1.0;\n\n       return new java.awt.Color(\n           protocolor.getRed(),\n           protocolor.getGreen(),\n           protocolor.getBlue(),\n           alpha);\n     }\n\n     public static Color toProto(java.awt.Color color) {\n       float red = (float) color.getRed();\n       float green = (float) color.getGreen();\n       float blue = (float) color.getBlue();\n       float denominator = 255.0;\n       Color.Builder resultBuilder =\n           Color\n               .newBuilder()\n               .setRed(red / denominator)\n               .setGreen(green / denominator)\n               .setBlue(blue / denominator);\n       int alpha = color.getAlpha();\n       if (alpha != 255) {\n         result.setAlpha(\n             FloatValue\n                 .newBuilder()\n                 .setValue(((float) alpha) / denominator)\n                 .build());\n       }\n       return resultBuilder.build();\n     }\n     // ...\n\nExample (iOS / Obj-C):\n\n     // ...\n     static UIColor* fromProto(Color* protocolor) {\n        float red = [protocolor red];\n        float green = [protocolor green];\n        float blue = [protocolor blue];\n        FloatValue* alpha_wrapper = [protocolor alpha];\n        float alpha = 1.0;\n        if (alpha_wrapper != nil) {\n          alpha = [alpha_wrapper value];\n        }\n        return [UIColor colorWithRed:red green:green blue:blue alpha:alpha];\n     }\n\n     static Color* toProto(UIColor* color) {\n         CGFloat red, green, blue, alpha;\n         if (![color getRed:&red green:&green blue:&blue alpha:&alpha]) {\n           return nil;\n         }\n         Color* result = [Color alloc] init];\n         [result setRed:red];\n         [result setGreen:green];\n         [result setBlue:blue];\n         if (alpha \u003c= 0.9999) {\n           [result setAlpha:floatWrapperWithValue(alpha)];\n         }\n         [result autorelease];\n         return result;\n    }\n    // ...\n\n Example (JavaScript):\n\n    // ...\n\n    var protoToCssColor = function(rgb_color) {\n       var redFrac = rgb_color.red || 0.0;\n       var greenFrac = rgb_color.green || 0.0;\n       var blueFrac = rgb_color.blue || 0.0;\n       var red = Math.floor(redFrac * 255);\n       var green = Math.floor(greenFrac * 255);\n       var blue = Math.floor(blueFrac * 255);\n\n       if (!('alpha' in rgb_color)) {\n          return rgbToCssColor_(red, green, blue);\n       }\n\n       var alphaFrac = rgb_color.alpha.value || 0.0;\n       var rgbParams = [red, green, blue].join(',');\n       return ['rgba(', rgbParams, ',', alphaFrac, ')'].join('');\n    };\n\n    var rgbToCssColor_ = function(red, green, blue) {\n      var rgbNumber = new Number((red \u003c\u003c 16) | (green \u003c\u003c 8) | blue);\n      var hexString = rgbNumber.toString(16);\n      var missingZeros = 6 - hexString.length;\n      var resultBuilder = ['#'];\n      for (var i = 0; i \u003c missingZeros; i++) {\n         resultBuilder.push('0');\n      }\n      resultBuilder.push(hexString);\n      return resultBuilder.join('');\n    };\n\n    // ...",
-      "type": "object",
-      "properties": {
-        "red": {
-          "description": "The amount of red 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"
-        },
-        "blue": {
-          "description": "The amount of blue in the color as a value in the interval [0, 1].",
-          "format": "float",
-          "type": "number"
-        },
-        "alpha": {
-          "description": "The fraction of this color that should be applied to the pixel. That is,\nthe final pixel color is defined by the equation:\n\n  pixel color = alpha * (this color) + (1.0 - alpha) * (background color)\n\nThis means that a value of 1.0 corresponds to a solid color, whereas\na value of 0.0 corresponds to a completely transparent color. This\nuses a wrapper message rather than a simple float scalar so that it is\npossible to distinguish between a default value and the value being unset.\nIf omitted, this color object is to be rendered as a solid color\n(as if the alpha value had been explicitly given with a value of 1.0).",
-          "format": "float",
-          "type": "number"
-        }
-      },
-      "id": "Color"
-    },
-    "PivotGroup": {
-      "type": "object",
-      "properties": {
-        "sortOrder": {
-          "type": "string",
-          "enumDescriptions": [
-            "Default value, do not use this.",
-            "Sort ascending.",
-            "Sort descending."
-          ],
-          "enum": [
-            "SORT_ORDER_UNSPECIFIED",
-            "ASCENDING",
-            "DESCENDING"
-          ],
-          "description": "The order the values in this group should be sorted."
-        },
-        "valueBucket": {
-          "$ref": "PivotGroupSortValueBucket",
-          "description": "The bucket of the opposite pivot group to sort by.\nIf not specified, sorting is alphabetical by this group's values."
-        },
-        "sourceColumnOffset": {
-          "description": "The column offset of the source range that this grouping is based on.\n\nFor example, if the source was `C10:E15`, a `sourceColumnOffset` of `0`\nmeans this group refers to column `C`, whereas the offset `1` would refer\nto column `D`.",
-          "format": "int32",
-          "type": "integer"
-        },
-        "showTotals": {
-          "description": "True if the pivot table should include the totals for this grouping.",
-          "type": "boolean"
-        },
-        "valueMetadata": {
-          "type": "array",
-          "items": {
-            "$ref": "PivotGroupValueMetadata"
-          },
-          "description": "Metadata about values in the grouping."
-        }
-      },
-      "id": "PivotGroup",
-      "description": "A single grouping (either row or column) in a pivot table."
-    },
-    "PivotTable": {
-      "description": "A pivot table.",
-      "type": "object",
-      "properties": {
-        "criteria": {
-          "additionalProperties": {
-            "$ref": "PivotFilterCriteria"
-          },
-          "description": "An optional mapping of filters per source column offset.\n\nThe filters will be applied before aggregating data into the pivot table.\nThe map's key is the column offset of the source range that you want to\nfilter, and the value is the criteria for that column.\n\nFor example, if the source was `C10:E15`, a key of `0` will have the filter\nfor column `C`, whereas the key `1` is for column `D`.",
-          "type": "object"
-        },
-        "rows": {
-          "description": "Each row grouping in the pivot table.",
-          "type": "array",
-          "items": {
-            "$ref": "PivotGroup"
-          }
-        },
-        "valueLayout": {
-          "enumDescriptions": [
-            "Values are laid out horizontally (as columns).",
-            "Values are laid out vertically (as rows)."
-          ],
-          "enum": [
-            "HORIZONTAL",
-            "VERTICAL"
-          ],
-          "description": "Whether values should be listed horizontally (as columns)\nor vertically (as rows).",
-          "type": "string"
-        },
-        "source": {
-          "$ref": "GridRange",
-          "description": "The range the pivot table is reading data from."
-        },
-        "columns": {
-          "type": "array",
-          "items": {
-            "$ref": "PivotGroup"
-          },
-          "description": "Each column grouping in the pivot table."
-        },
-        "values": {
-          "description": "A list of values to include in the pivot table.",
-          "type": "array",
-          "items": {
-            "$ref": "PivotValue"
-          }
-        }
-      },
-      "id": "PivotTable"
-    },
-    "ChartSourceRange": {
-      "description": "Source ranges for a chart.",
-      "type": "object",
-      "properties": {
-        "sources": {
-          "description": "The ranges of data for a series or domain.\nExactly one dimension must have a length of 1,\nand all sources in the list must have the same dimension\nwith length 1.\nThe domain (if it exists) & all series must have the same number\nof source ranges. If using more than one source range, then the source\nrange at a given offset must be contiguous across the domain and series.\n\nFor example, these are valid configurations:\n\n    domain sources: A1:A5\n    series1 sources: B1:B5\n    series2 sources: D6:D10\n\n    domain sources: A1:A5, C10:C12\n    series1 sources: B1:B5, D10:D12\n    series2 sources: C1:C5, E10:E12",
-          "type": "array",
-          "items": {
-            "$ref": "GridRange"
-          }
-        }
-      },
-      "id": "ChartSourceRange"
-    },
-    "ValueRange": {
-      "description": "Data within a range of the spreadsheet.",
-      "type": "object",
-      "properties": {
-        "range": {
-          "type": "string",
-          "description": "The range the values cover, in A1 notation.\nFor output, this range indicates the entire requested range,\neven though the values will exclude trailing rows and columns.\nWhen appending values, this field represents the range to search for a\ntable, after which values will be appended."
-        },
-        "majorDimension": {
-          "type": "string",
-          "enumDescriptions": [
-            "The default value, do not use.",
-            "Operates on the rows of a sheet.",
-            "Operates on the columns of a sheet."
-          ],
-          "enum": [
-            "DIMENSION_UNSPECIFIED",
-            "ROWS",
-            "COLUMNS"
-          ],
-          "description": "The major dimension of the values.\n\nFor output, if the spreadsheet data is: `A1=1,B1=2,A2=3,B2=4`,\nthen requesting `range=A1:B2,majorDimension=ROWS` will return\n`[[1,2],[3,4]]`,\nwhereas requesting `range=A1:B2,majorDimension=COLUMNS` will return\n`[[1,3],[2,4]]`.\n\nFor input, with `range=A1:B2,majorDimension=ROWS` then `[[1,2],[3,4]]`\nwill set `A1=1,B1=2,A2=3,B2=4`. With `range=A1:B2,majorDimension=COLUMNS`\nthen `[[1,2],[3,4]]` will set `A1=1,B1=3,A2=2,B2=4`.\n\nWhen writing, if this field is not set, it defaults to ROWS."
-        },
-        "values": {
-          "description": "The data that was read or to be written.  This is an array of arrays,\nthe outer array representing all the data and each inner array\nrepresenting a major dimension. Each item in the inner array\ncorresponds with one cell.\n\nFor output, empty trailing rows and columns will not be included.\n\nFor input, supported value types are: bool, string, and double.\nNull values will be skipped.\nTo set a cell to an empty value, set the string value to an empty string.",
-          "type": "array",
-          "items": {
-            "type": "array",
-            "items": {
-              "type": "any"
-            }
-          }
-        }
-      },
-      "id": "ValueRange"
-    },
-    "AppendCellsRequest": {
-      "id": "AppendCellsRequest",
-      "description": "Adds new cells after the last row with data in a sheet,\ninserting new rows into the sheet if necessary.",
-      "type": "object",
-      "properties": {
-        "rows": {
-          "description": "The data to append.",
-          "type": "array",
-          "items": {
-            "$ref": "RowData"
-          }
-        },
-        "fields": {
-          "description": "The fields of CellData that should be updated.\nAt least one field must be specified.\nThe root is the CellData; 'row.values.' should not be specified.\nA single `\"*\"` can be used as short-hand for listing every field.",
-          "format": "google-fieldmask",
-          "type": "string"
-        },
-        "sheetId": {
-          "description": "The sheet ID to append the data to.",
-          "format": "int32",
-          "type": "integer"
-        }
-      }
-    },
-    "AddBandingRequest": {
-      "description": "Adds a new banded range to the spreadsheet.",
-      "type": "object",
-      "properties": {
-        "bandedRange": {
-          "$ref": "BandedRange",
-          "description": "The banded range to add. The bandedRangeId\nfield is optional; if one is not set, an id will be randomly generated. (It\nis an error to specify the ID of a range that already exists.)"
-        }
-      },
-      "id": "AddBandingRequest"
-    },
-    "Response": {
-      "properties": {
-        "addNamedRange": {
-          "$ref": "AddNamedRangeResponse",
-          "description": "A reply from adding a named range."
-        },
-        "addFilterView": {
-          "$ref": "AddFilterViewResponse",
-          "description": "A reply from adding a filter view."
-        },
-        "addBanding": {
-          "description": "A reply from adding a banded range.",
-          "$ref": "AddBandingResponse"
-        },
-        "addProtectedRange": {
-          "$ref": "AddProtectedRangeResponse",
-          "description": "A reply from adding a protected range."
-        },
-        "duplicateSheet": {
-          "description": "A reply from duplicating a sheet.",
-          "$ref": "DuplicateSheetResponse"
-        },
-        "deleteConditionalFormatRule": {
-          "$ref": "DeleteConditionalFormatRuleResponse",
-          "description": "A reply from deleting a conditional format rule."
-        },
-        "updateEmbeddedObjectPosition": {
-          "$ref": "UpdateEmbeddedObjectPositionResponse",
-          "description": "A reply from updating an embedded object's position."
-        },
-        "duplicateFilterView": {
-          "description": "A reply from duplicating a filter view.",
-          "$ref": "DuplicateFilterViewResponse"
-        },
-        "addChart": {
-          "$ref": "AddChartResponse",
-          "description": "A reply from adding a chart."
-        },
-        "findReplace": {
-          "description": "A reply from doing a find/replace.",
-          "$ref": "FindReplaceResponse"
-        },
-        "addSheet": {
-          "description": "A reply from adding a sheet.",
-          "$ref": "AddSheetResponse"
-        },
-        "updateConditionalFormatRule": {
-          "description": "A reply from updating a conditional format rule.",
-          "$ref": "UpdateConditionalFormatRuleResponse"
-        }
-      },
-      "id": "Response",
-      "description": "A single response from an update.",
-      "type": "object"
-    },
-    "EmbeddedChart": {
-      "description": "A chart embedded in a sheet.",
-      "type": "object",
-      "properties": {
-        "chartId": {
-          "description": "The ID of the chart.",
-          "format": "int32",
-          "type": "integer"
-        },
-        "position": {
-          "description": "The position of the chart.",
-          "$ref": "EmbeddedObjectPosition"
-        },
-        "spec": {
-          "$ref": "ChartSpec",
-          "description": "The specification of the chart."
-        }
-      },
-      "id": "EmbeddedChart"
-    },
-    "TextFormatRun": {
-      "type": "object",
-      "properties": {
-        "format": {
-          "$ref": "TextFormat",
-          "description": "The format of this run.  Absent values inherit the cell's format."
-        },
-        "startIndex": {
-          "description": "The character index where this run starts.",
-          "format": "int32",
-          "type": "integer"
-        }
-      },
-      "id": "TextFormatRun",
-      "description": "A run of a text format. The format of this run continues until the start\nindex of the next run.\nWhen updating, all fields must be set."
-    },
-    "InsertRangeRequest": {
-      "description": "Inserts cells into a range, shifting the existing cells over or down.",
-      "type": "object",
-      "properties": {
-        "shiftDimension": {
-          "description": "The dimension which will be shifted when inserting cells.\nIf ROWS, existing cells will be shifted down.\nIf COLUMNS, existing cells will be shifted right.",
-          "type": "string",
-          "enumDescriptions": [
-            "The default value, do not use.",
-            "Operates on the rows of a sheet.",
-            "Operates on the columns of a sheet."
-          ],
-          "enum": [
-            "DIMENSION_UNSPECIFIED",
-            "ROWS",
-            "COLUMNS"
-          ]
-        },
-        "range": {
-          "description": "The range to insert new cells into.",
-          "$ref": "GridRange"
-        }
-      },
-      "id": "InsertRangeRequest"
-    },
-    "AddNamedRangeResponse": {
-      "description": "The result of adding a named range.",
-      "type": "object",
-      "properties": {
-        "namedRange": {
-          "$ref": "NamedRange",
-          "description": "The named range to add."
-        }
-      },
-      "id": "AddNamedRangeResponse"
-    },
-    "RowData": {
-      "description": "Data about each cell in a row.",
-      "type": "object",
-      "properties": {
-        "values": {
-          "description": "The values in the row, one per column.",
-          "type": "array",
-          "items": {
-            "$ref": "CellData"
-          }
-        }
-      },
-      "id": "RowData"
-    },
-    "Border": {
-      "id": "Border",
-      "description": "A border along a cell.",
-      "type": "object",
-      "properties": {
-        "color": {
-          "description": "The color of the border.",
-          "$ref": "Color"
-        },
-        "width": {
-          "description": "The width of the border, in pixels.\nDeprecated; the width is determined by the \"style\" field.",
-          "format": "int32",
-          "type": "integer"
-        },
-        "style": {
-          "enum": [
-            "STYLE_UNSPECIFIED",
-            "DOTTED",
-            "DASHED",
-            "SOLID",
-            "SOLID_MEDIUM",
-            "SOLID_THICK",
-            "NONE",
-            "DOUBLE"
-          ],
-          "description": "The style of the border.",
-          "type": "string",
-          "enumDescriptions": [
-            "The style is not specified. Do not use this.",
-            "The border is dotted.",
-            "The border is dashed.",
-            "The border is a thin solid line.",
-            "The border is a medium solid line.",
-            "The border is a thick solid line.",
-            "No border.\nUsed only when updating a border in order to erase it.",
-            "The border is two solid lines."
-          ]
-        }
-      }
-    },
-    "GridData": {
-      "description": "Data in the grid, as well as metadata about the dimensions.",
-      "type": "object",
-      "properties": {
-        "startRow": {
-          "description": "The first row this GridData refers to, zero-based.",
-          "format": "int32",
-          "type": "integer"
-        },
-        "columnMetadata": {
-          "description": "Metadata about the requested columns in the grid, starting with the column\nin start_column.",
-          "type": "array",
-          "items": {
-            "$ref": "DimensionProperties"
-          }
-        },
-        "startColumn": {
-          "description": "The first column this GridData refers to, zero-based.",
-          "format": "int32",
-          "type": "integer"
-        },
-        "rowMetadata": {
-          "description": "Metadata about the requested rows in the grid, starting with the row\nin start_row.",
-          "type": "array",
-          "items": {
-            "$ref": "DimensionProperties"
-          }
-        },
-        "rowData": {
-          "description": "The data in the grid, one entry per row,\nstarting with the row in startRow.\nThe values in RowData will correspond to columns starting\nat start_column.",
-          "type": "array",
-          "items": {
-            "$ref": "RowData"
-          }
-        }
-      },
-      "id": "GridData"
-    },
-    "FindReplaceRequest": {
-      "description": "Finds and replaces data in cells over a range, sheet, or all sheets.",
-      "type": "object",
-      "properties": {
-        "sheetId": {
-          "description": "The sheet to find/replace over.",
-          "format": "int32",
-          "type": "integer"
-        },
-        "matchCase": {
-          "description": "True if the search is case sensitive.",
-          "type": "boolean"
-        },
-        "allSheets": {
-          "description": "True to find/replace over all sheets.",
-          "type": "boolean"
-        },
-        "includeFormulas": {
-          "description": "True if the search should include cells with formulas.\nFalse to skip cells with formulas.",
-          "type": "boolean"
-        },
-        "matchEntireCell": {
-          "description": "True if the find value should match the entire cell.",
-          "type": "boolean"
-        },
-        "find": {
-          "description": "The value to search.",
-          "type": "string"
-        },
-        "searchByRegex": {
-          "description": "True if the find value is a regex.\nThe regular expression and replacement should follow Java regex rules\nat https://docs.oracle.com/javase/8/docs/api/java/util/regex/Pattern.html.\nThe replacement string is allowed to refer to capturing groups.\nFor example, if one cell has the contents `\"Google Sheets\"` and another\nhas `\"Google Docs\"`, then searching for `\"o.* (.*)\"` with a replacement of\n`\"$1 Rocks\"` would change the contents of the cells to\n`\"GSheets Rocks\"` and `\"GDocs Rocks\"` respectively.",
-          "type": "boolean"
-        },
-        "replacement": {
-          "description": "The value to use as the replacement.",
-          "type": "string"
-        },
-        "range": {
-          "description": "The range to find/replace over.",
-          "$ref": "GridRange"
-        }
-      },
-      "id": "FindReplaceRequest"
-    },
-    "UpdateNamedRangeRequest": {
-      "description": "Updates properties of the named range with the specified\nnamedRangeId.",
-      "type": "object",
-      "properties": {
-        "namedRange": {
-          "$ref": "NamedRange",
-          "description": "The named range to update with the new properties."
-        },
-        "fields": {
-          "description": "The fields that should be updated.  At least one field must be specified.\nThe root `namedRange` is implied and should not be specified.\nA single `\"*\"` can be used as short-hand for listing every field.",
-          "format": "google-fieldmask",
-          "type": "string"
-        }
-      },
-      "id": "UpdateNamedRangeRequest"
-    },
-    "AddSheetRequest": {
-      "description": "Adds a new sheet.\nWhen a sheet is added at a given index,\nall subsequent sheets' indexes are incremented.\nTo add an object sheet, use AddChartRequest instead and specify\nEmbeddedObjectPosition.sheetId or\nEmbeddedObjectPosition.newSheet.",
-      "type": "object",
-      "properties": {
-        "properties": {
-          "description": "The properties the new sheet should have.\nAll properties are optional.\nThe sheetId field is optional; if one is not\nset, an id will be randomly generated. (It is an error to specify the ID\nof a sheet that already exists.)",
-          "$ref": "SheetProperties"
-        }
-      },
-      "id": "AddSheetRequest"
-    },
-    "UpdateCellsRequest": {
-      "properties": {
-        "rows": {
-          "type": "array",
-          "items": {
-            "$ref": "RowData"
-          },
-          "description": "The data to write."
-        },
-        "fields": {
-          "description": "The fields of CellData that should be updated.\nAt least one field must be specified.\nThe root is the CellData; 'row.values.' should not be specified.\nA single `\"*\"` can be used as short-hand for listing every field.",
-          "format": "google-fieldmask",
-          "type": "string"
-        },
-        "start": {
-          "$ref": "GridCoordinate",
-          "description": "The coordinate to start writing data at.\nAny number of rows and columns (including a different number of\ncolumns per row) may be written."
-        },
-        "range": {
-          "description": "The range to write data to.\n\nIf the data in rows does not cover the entire requested range,\nthe fields matching those set in fields will be cleared.",
-          "$ref": "GridRange"
-        }
-      },
-      "id": "UpdateCellsRequest",
-      "description": "Updates all cells in a range with new data.",
-      "type": "object"
-    },
-    "DeleteConditionalFormatRuleResponse": {
-      "description": "The result of deleting a conditional format rule.",
-      "type": "object",
-      "properties": {
-        "rule": {
-          "$ref": "ConditionalFormatRule",
-          "description": "The rule that was deleted."
-        }
-      },
-      "id": "DeleteConditionalFormatRuleResponse"
-    },
-    "DeleteRangeRequest": {
-      "description": "Deletes a range of cells, shifting other cells into the deleted area.",
-      "type": "object",
-      "properties": {
-        "shiftDimension": {
-          "description": "The dimension from which deleted cells will be replaced with.\nIf ROWS, existing cells will be shifted upward to\nreplace the deleted cells. If COLUMNS, existing cells\nwill be shifted left to replace the deleted cells.",
-          "type": "string",
-          "enumDescriptions": [
-            "The default value, do not use.",
-            "Operates on the rows of a sheet.",
-            "Operates on the columns of a sheet."
-          ],
-          "enum": [
-            "DIMENSION_UNSPECIFIED",
-            "ROWS",
-            "COLUMNS"
-          ]
-        },
-        "range": {
-          "description": "The range of cells to delete.",
-          "$ref": "GridRange"
-        }
-      },
-      "id": "DeleteRangeRequest"
-    },
-    "GridCoordinate": {
-      "description": "A coordinate in a sheet.\nAll indexes are zero-based.",
-      "type": "object",
-      "properties": {
-        "rowIndex": {
-          "description": "The row index of the coordinate.",
-          "format": "int32",
-          "type": "integer"
-        },
-        "columnIndex": {
-          "description": "The column index of the coordinate.",
-          "format": "int32",
-          "type": "integer"
-        },
-        "sheetId": {
-          "description": "The sheet this coordinate is on.",
-          "format": "int32",
-          "type": "integer"
-        }
-      },
-      "id": "GridCoordinate"
-    },
-    "UpdateSheetPropertiesRequest": {
-      "id": "UpdateSheetPropertiesRequest",
-      "description": "Updates properties of the sheet with the specified\nsheetId.",
-      "type": "object",
-      "properties": {
-        "properties": {
-          "description": "The properties to update.",
-          "$ref": "SheetProperties"
-        },
-        "fields": {
-          "description": "The fields that should be updated.  At least one field must be specified.\nThe root `properties` is implied and should not be specified.\nA single `\"*\"` can be used as short-hand for listing every field.",
-          "format": "google-fieldmask",
-          "type": "string"
-        }
-      }
-    },
-    "UnmergeCellsRequest": {
-      "properties": {
-        "range": {
-          "$ref": "GridRange",
-          "description": "The range within which all cells should be unmerged.\nIf the range spans multiple merges, all will be unmerged.\nThe range must not partially span any merge."
-        }
-      },
-      "id": "UnmergeCellsRequest",
-      "description": "Unmerges cells in the given range.",
-      "type": "object"
-    },
-    "GridProperties": {
-      "description": "Properties of a grid.",
-      "type": "object",
-      "properties": {
-        "frozenRowCount": {
-          "description": "The number of rows that are frozen in the grid.",
-          "format": "int32",
-          "type": "integer"
-        },
-        "hideGridlines": {
-          "description": "True if the grid isn't showing gridlines in the UI.",
-          "type": "boolean"
-        },
-        "columnCount": {
-          "type": "integer",
-          "description": "The number of columns in the grid.",
-          "format": "int32"
-        },
-        "frozenColumnCount": {
-          "description": "The number of columns that are frozen in the grid.",
-          "format": "int32",
-          "type": "integer"
-        },
-        "rowCount": {
-          "description": "The number of rows in the grid.",
-          "format": "int32",
-          "type": "integer"
-        }
-      },
-      "id": "GridProperties"
-    },
-    "Sheet": {
-      "description": "A sheet in a spreadsheet.",
-      "type": "object",
-      "properties": {
-        "conditionalFormats": {
-          "type": "array",
-          "items": {
-            "$ref": "ConditionalFormatRule"
-          },
-          "description": "The conditional format rules in this sheet."
-        },
-        "protectedRanges": {
-          "type": "array",
-          "items": {
-            "$ref": "ProtectedRange"
-          },
-          "description": "The protected ranges in this sheet."
-        },
-        "basicFilter": {
-          "$ref": "BasicFilter",
-          "description": "The filter on this sheet, if any."
-        },
-        "merges": {
-          "type": "array",
-          "items": {
-            "$ref": "GridRange"
-          },
-          "description": "The ranges that are merged together."
-        },
-        "data": {
-          "description": "Data in the grid, if this is a grid sheet.\nThe number of GridData objects returned is dependent on the number of\nranges requested on this sheet. For example, if this is representing\n`Sheet1`, and the spreadsheet was requested with ranges\n`Sheet1!A1:C10` and `Sheet1!D15:E20`, then the first GridData will have a\nstartRow/startColumn of `0`,\nwhile the second one will have `startRow 14` (zero-based row 15),\nand `startColumn 3` (zero-based column D).",
-          "type": "array",
-          "items": {
-            "$ref": "GridData"
-          }
-        },
-        "bandedRanges": {
-          "description": "The banded (i.e. alternating colors) ranges on this sheet.",
-          "type": "array",
-          "items": {
-            "$ref": "BandedRange"
-          }
-        },
-        "charts": {
-          "description": "The specifications of every chart on this sheet.",
-          "type": "array",
-          "items": {
-            "$ref": "EmbeddedChart"
-          }
-        },
-        "properties": {
-          "description": "The properties of the sheet.",
-          "$ref": "SheetProperties"
-        },
-        "filterViews": {
-          "description": "The filter views in this sheet.",
-          "type": "array",
-          "items": {
-            "$ref": "FilterView"
-          }
-        }
-      },
-      "id": "Sheet"
-    },
-    "SortSpec": {
-      "description": "A sort order associated with a specific column or row.",
-      "type": "object",
-      "properties": {
-        "sortOrder": {
-          "enumDescriptions": [
-            "Default value, do not use this.",
-            "Sort ascending.",
-            "Sort descending."
-          ],
-          "enum": [
-            "SORT_ORDER_UNSPECIFIED",
-            "ASCENDING",
-            "DESCENDING"
-          ],
-          "description": "The order data should be sorted.",
-          "type": "string"
-        },
-        "dimensionIndex": {
-          "description": "The dimension the sort should be applied to.",
-          "format": "int32",
-          "type": "integer"
-        }
-      },
-      "id": "SortSpec"
-    },
-    "UpdateEmbeddedObjectPositionResponse": {
-      "description": "The result of updating an embedded object's position.",
-      "type": "object",
-      "properties": {
-        "position": {
-          "description": "The new position of the embedded object.",
-          "$ref": "EmbeddedObjectPosition"
-        }
-      },
-      "id": "UpdateEmbeddedObjectPositionResponse"
-    },
     "BooleanRule": {
       "description": "A rule that may or may not match, depending on the condition.",
       "type": "object",
@@ -1634,6 +21,7 @@
       "id": "BooleanRule"
     },
     "FilterCriteria": {
+      "id": "FilterCriteria",
       "description": "Criteria for showing/hiding rows in a filter or filter view.",
       "type": "object",
       "properties": {
@@ -1648,25 +36,25 @@
           "$ref": "BooleanCondition",
           "description": "A condition that must be true for values to be shown.\n(This does not override hiddenValues -- if a value is listed there,\n it will still be hidden.)"
         }
-      },
-      "id": "FilterCriteria"
+      }
     },
     "PivotGroupValueMetadata": {
+      "id": "PivotGroupValueMetadata",
       "description": "Metadata about a value in a pivot grouping.",
       "type": "object",
       "properties": {
-        "collapsed": {
-          "type": "boolean",
-          "description": "True if the data corresponding to the value is collapsed."
-        },
         "value": {
-          "$ref": "ExtendedValue",
-          "description": "The calculated value the metadata corresponds to.\n(Note that formulaValue is not valid,\n because the values will be calculated.)"
+          "description": "The calculated value the metadata corresponds to.\n(Note that formulaValue is not valid,\n because the values will be calculated.)",
+          "$ref": "ExtendedValue"
+        },
+        "collapsed": {
+          "description": "True if the data corresponding to the value is collapsed.",
+          "type": "boolean"
         }
-      },
-      "id": "PivotGroupValueMetadata"
+      }
     },
     "Editors": {
+      "id": "Editors",
       "description": "The editors of a protected range.",
       "type": "object",
       "properties": {
@@ -1688,16 +76,15 @@
           "description": "True if anyone in the document's domain has edit access to the protected\nrange.  Domain protection is only supported on documents within a domain.",
           "type": "boolean"
         }
-      },
-      "id": "Editors"
+      }
     },
     "UpdateConditionalFormatRuleRequest": {
       "description": "Updates a conditional format rule at the given index,\nor moves a conditional format rule to another index.",
       "type": "object",
       "properties": {
         "rule": {
-          "$ref": "ConditionalFormatRule",
-          "description": "The rule that should replace the rule at the given index."
+          "description": "The rule that should replace the rule at the given index.",
+          "$ref": "ConditionalFormatRule"
         },
         "index": {
           "description": "The zero-based index of the rule that should be replaced or moved.",
@@ -1717,42 +104,48 @@
       },
       "id": "UpdateConditionalFormatRuleRequest"
     },
-    "DataValidationRule": {
-      "description": "A data validation rule.",
-      "type": "object",
-      "properties": {
-        "condition": {
-          "description": "The condition that data in the cell must match.",
-          "$ref": "BooleanCondition"
-        },
-        "showCustomUi": {
-          "description": "True if the UI should be customized based on the kind of condition.\nIf true, \"List\" conditions will show a dropdown.",
-          "type": "boolean"
-        },
-        "strict": {
-          "type": "boolean",
-          "description": "True if invalid data should be rejected."
-        },
-        "inputMessage": {
-          "description": "A message to show the user when adding data to the cell.",
-          "type": "string"
-        }
-      },
-      "id": "DataValidationRule"
-    },
     "BasicChartDomain": {
       "id": "BasicChartDomain",
       "description": "The domain of a chart.\nFor example, if charting stock prices over time, this would be the date.",
       "type": "object",
       "properties": {
         "domain": {
-          "$ref": "ChartData",
-          "description": "The data of the domain. For example, if charting stock prices over time,\nthis is the data representing the dates."
+          "description": "The data of the domain. For example, if charting stock prices over time,\nthis is the data representing the dates.",
+          "$ref": "ChartData"
+        }
+      }
+    },
+    "DataValidationRule": {
+      "id": "DataValidationRule",
+      "description": "A data validation rule.",
+      "type": "object",
+      "properties": {
+        "inputMessage": {
+          "description": "A message to show the user when adding data to the cell.",
+          "type": "string"
+        },
+        "condition": {
+          "$ref": "BooleanCondition",
+          "description": "The condition that data in the cell must match."
+        },
+        "showCustomUi": {
+          "description": "True if the UI should be customized based on the kind of condition.\nIf true, \"List\" conditions will show a dropdown.",
+          "type": "boolean"
+        },
+        "strict": {
+          "description": "True if invalid data should be rejected.",
+          "type": "boolean"
         }
       }
     },
     "PasteDataRequest": {
+      "description": "Inserts data into the spreadsheet starting at the specified coordinate.",
+      "type": "object",
       "properties": {
+        "coordinate": {
+          "description": "The coordinate at which the data should start being inserted.",
+          "$ref": "GridCoordinate"
+        },
         "data": {
           "description": "The data to insert.",
           "type": "string"
@@ -1762,6 +155,8 @@
           "type": "string"
         },
         "type": {
+          "description": "How the data should be pasted.",
+          "type": "string",
           "enumDescriptions": [
             "Paste values, formulas, formats, and merges.",
             "Paste the values ONLY without formats, formulas, or merges.",
@@ -1779,38 +174,33 @@
             "PASTE_FORMULA",
             "PASTE_DATA_VALIDATION",
             "PASTE_CONDITIONAL_FORMATTING"
-          ],
-          "description": "How the data should be pasted.",
-          "type": "string"
+          ]
         },
         "html": {
           "description": "True if the data is HTML.",
           "type": "boolean"
-        },
-        "coordinate": {
-          "description": "The coordinate at which the data should start being inserted.",
-          "$ref": "GridCoordinate"
         }
       },
-      "id": "PasteDataRequest",
-      "description": "Inserts data into the spreadsheet starting at the specified coordinate.",
-      "type": "object"
+      "id": "PasteDataRequest"
     },
     "AppendDimensionRequest": {
+      "id": "AppendDimensionRequest",
+      "description": "Appends rows or columns to the end of a sheet.",
+      "type": "object",
       "properties": {
         "dimension": {
+          "enumDescriptions": [
+            "The default value, do not use.",
+            "Operates on the rows of a sheet.",
+            "Operates on the columns of a sheet."
+          ],
           "enum": [
             "DIMENSION_UNSPECIFIED",
             "ROWS",
             "COLUMNS"
           ],
           "description": "Whether rows or columns should be appended.",
-          "type": "string",
-          "enumDescriptions": [
-            "The default value, do not use.",
-            "Operates on the rows of a sheet.",
-            "Operates on the columns of a sheet."
-          ]
+          "type": "string"
         },
         "length": {
           "description": "The number of rows or columns to append.",
@@ -1822,18 +212,15 @@
           "format": "int32",
           "type": "integer"
         }
-      },
-      "id": "AppendDimensionRequest",
-      "description": "Appends rows or columns to the end of a sheet.",
-      "type": "object"
+      }
     },
     "AddNamedRangeRequest": {
       "description": "Adds a named range to the spreadsheet.",
       "type": "object",
       "properties": {
         "namedRange": {
-          "$ref": "NamedRange",
-          "description": "The named range to add. The namedRangeId\nfield is optional; if one is not set, an id will be randomly generated. (It\nis an error to specify the ID of a range that already exists.)"
+          "description": "The named range to add. The namedRangeId\nfield is optional; if one is not set, an id will be randomly generated. (It\nis an error to specify the ID of a range that already exists.)",
+          "$ref": "NamedRange"
         }
       },
       "id": "AddNamedRangeRequest"
@@ -1848,8 +235,8 @@
           "type": "integer"
         },
         "newPosition": {
-          "$ref": "EmbeddedObjectPosition",
-          "description": "An explicit position to move the embedded object to.\nIf newPosition.sheetId is set,\na new sheet with that ID will be created.\nIf newPosition.newSheet is set to true,\na new sheet will be created with an ID that will be chosen for you."
+          "description": "An explicit position to move the embedded object to.\nIf newPosition.sheetId is set,\na new sheet with that ID will be created.\nIf newPosition.newSheet is set to true,\na new sheet will be created with an ID that will be chosen for you.",
+          "$ref": "EmbeddedObjectPosition"
         },
         "fields": {
           "description": "The fields of OverlayPosition\nthat should be updated when setting a new position. Used only if\nnewPosition.overlayPosition\nis set, in which case at least one field must\nbe specified.  The root `newPosition.overlayPosition` is implied and\nshould not be specified.\nA single `\"*\"` can be used as short-hand for listing every field.",
@@ -1860,30 +247,39 @@
       "id": "UpdateEmbeddedObjectPositionRequest"
     },
     "TextRotation": {
+      "id": "TextRotation",
+      "description": "The rotation applied to text in a cell.",
+      "type": "object",
       "properties": {
+        "vertical": {
+          "description": "If true, text reads top to bottom, but the orientation of individual\ncharacters is unchanged.\nFor example:\n\n    | V |\n    | e |\n    | r |\n    | t |\n    | i |\n    | c |\n    | a |\n    | l |",
+          "type": "boolean"
+        },
         "angle": {
           "description": "The angle between the standard orientation and the desired orientation.\nMeasured in degrees. Valid values are between -90 and 90. Positive\nangles are angled upwards, negative are angled downwards.\n\nNote: For LTR text direction positive angles are in the counterclockwise\ndirection, whereas for RTL they are in the clockwise direction",
           "format": "int32",
           "type": "integer"
-        },
-        "vertical": {
-          "description": "If true, text reads top to bottom, but the orientation of individual\ncharacters is unchanged.\nFor example:\n\n    | V |\n    | e |\n    | r |\n    | t |\n    | i |\n    | c |\n    | a |\n    | l |",
-          "type": "boolean"
         }
-      },
-      "id": "TextRotation",
-      "description": "The rotation applied to text in a cell.",
-      "type": "object"
+      }
     },
     "PieChartSpec": {
       "description": "A \u003ca href=\"/chart/interactive/docs/gallery/piechart\"\u003epie chart\u003c/a\u003e.",
       "type": "object",
       "properties": {
+        "domain": {
+          "$ref": "ChartData",
+          "description": "The data that covers the domain of the pie chart."
+        },
+        "threeDimensional": {
+          "description": "True if the pie is three dimensional.",
+          "type": "boolean"
+        },
         "series": {
           "$ref": "ChartData",
           "description": "The data that covers the one and only series of the pie chart."
         },
         "legendPosition": {
+          "description": "Where the legend of the pie chart should be drawn.",
           "type": "string",
           "enumDescriptions": [
             "Default value, do not use.",
@@ -1902,26 +298,18 @@
             "TOP_LEGEND",
             "NO_LEGEND",
             "LABELED_LEGEND"
-          ],
-          "description": "Where the legend of the pie chart should be drawn."
+          ]
         },
         "pieHole": {
           "description": "The size of the hole in the pie chart.",
           "format": "double",
           "type": "number"
-        },
-        "domain": {
-          "$ref": "ChartData",
-          "description": "The data that covers the domain of the pie chart."
-        },
-        "threeDimensional": {
-          "description": "True if the pie is three dimensional.",
-          "type": "boolean"
         }
       },
       "id": "PieChartSpec"
     },
     "UpdateFilterViewRequest": {
+      "id": "UpdateFilterViewRequest",
       "description": "Updates properties of the filter view.",
       "type": "object",
       "properties": {
@@ -1934,16 +322,15 @@
           "format": "google-fieldmask",
           "type": "string"
         }
-      },
-      "id": "UpdateFilterViewRequest"
+      }
     },
     "ConditionalFormatRule": {
       "description": "A rule describing a conditional format.",
       "type": "object",
       "properties": {
         "booleanRule": {
-          "$ref": "BooleanRule",
-          "description": "The formatting is either \"on\" or \"off\" according to the rule."
+          "description": "The formatting is either \"on\" or \"off\" according to the rule.",
+          "$ref": "BooleanRule"
         },
         "ranges": {
           "description": "The ranges that will be formatted if the condition is true.\nAll the ranges must be on the same grid.",
@@ -1953,13 +340,14 @@
           }
         },
         "gradientRule": {
-          "description": "The formatting will vary based on the gradients in the rule.",
-          "$ref": "GradientRule"
+          "$ref": "GradientRule",
+          "description": "The formatting will vary based on the gradients in the rule."
         }
       },
       "id": "ConditionalFormatRule"
     },
     "CopyPasteRequest": {
+      "id": "CopyPasteRequest",
       "description": "Copies data from the source to the destination.",
       "type": "object",
       "properties": {
@@ -1968,15 +356,6 @@
           "description": "The source range to copy."
         },
         "pasteType": {
-          "enum": [
-            "PASTE_NORMAL",
-            "PASTE_VALUES",
-            "PASTE_FORMAT",
-            "PASTE_NO_BORDERS",
-            "PASTE_FORMULA",
-            "PASTE_DATA_VALIDATION",
-            "PASTE_CONDITIONAL_FORMATTING"
-          ],
           "description": "What kind of data to paste.",
           "type": "string",
           "enumDescriptions": [
@@ -1987,28 +366,240 @@
             "Paste the formulas only.",
             "Paste the data validation only.",
             "Paste the conditional formatting rules only."
+          ],
+          "enum": [
+            "PASTE_NORMAL",
+            "PASTE_VALUES",
+            "PASTE_FORMAT",
+            "PASTE_NO_BORDERS",
+            "PASTE_FORMULA",
+            "PASTE_DATA_VALIDATION",
+            "PASTE_CONDITIONAL_FORMATTING"
           ]
         },
         "destination": {
-          "description": "The location to paste to. If the range covers a span that's\na multiple of the source's height or width, then the\ndata will be repeated to fill in the destination range.\nIf the range is smaller than the source range, the entire\nsource data will still be copied (beyond the end of the destination range).",
-          "$ref": "GridRange"
+          "$ref": "GridRange",
+          "description": "The location to paste to. If the range covers a span that's\na multiple of the source's height or width, then the\ndata will be repeated to fill in the destination range.\nIf the range is smaller than the source range, the entire\nsource data will still be copied (beyond the end of the destination range)."
         },
         "pasteOrientation": {
+          "enumDescriptions": [
+            "Paste normally.",
+            "Paste transposed, where all rows become columns and vice versa."
+          ],
           "enum": [
             "NORMAL",
             "TRANSPOSE"
           ],
           "description": "How that data should be oriented when pasting.",
-          "type": "string",
-          "enumDescriptions": [
-            "Paste normally.",
-            "Paste transposed, where all rows become columns and vice versa."
-          ]
+          "type": "string"
         }
-      },
-      "id": "CopyPasteRequest"
+      }
+    },
+    "Request": {
+      "id": "Request",
+      "description": "A single kind of update to apply to a spreadsheet.",
+      "type": "object",
+      "properties": {
+        "autoResizeDimensions": {
+          "description": "Automatically resizes one or more dimensions based on the contents\nof the cells in that dimension.",
+          "$ref": "AutoResizeDimensionsRequest"
+        },
+        "appendCells": {
+          "$ref": "AppendCellsRequest",
+          "description": "Appends cells after the last row with data in a sheet."
+        },
+        "cutPaste": {
+          "$ref": "CutPasteRequest",
+          "description": "Cuts data from one area and pastes it to another."
+        },
+        "mergeCells": {
+          "description": "Merges cells together.",
+          "$ref": "MergeCellsRequest"
+        },
+        "updateNamedRange": {
+          "$ref": "UpdateNamedRangeRequest",
+          "description": "Updates a named range."
+        },
+        "updateSheetProperties": {
+          "$ref": "UpdateSheetPropertiesRequest",
+          "description": "Updates a sheet's properties."
+        },
+        "autoFill": {
+          "description": "Automatically fills in more data based on existing data.",
+          "$ref": "AutoFillRequest"
+        },
+        "deleteDimension": {
+          "description": "Deletes rows or columns in a sheet.",
+          "$ref": "DeleteDimensionRequest"
+        },
+        "sortRange": {
+          "$ref": "SortRangeRequest",
+          "description": "Sorts data in a range."
+        },
+        "deleteProtectedRange": {
+          "description": "Deletes a protected range.",
+          "$ref": "DeleteProtectedRangeRequest"
+        },
+        "duplicateFilterView": {
+          "$ref": "DuplicateFilterViewRequest",
+          "description": "Duplicates a filter view."
+        },
+        "addChart": {
+          "$ref": "AddChartRequest",
+          "description": "Adds a chart."
+        },
+        "findReplace": {
+          "description": "Finds and replaces occurrences of some text with other text.",
+          "$ref": "FindReplaceRequest"
+        },
+        "updateChartSpec": {
+          "$ref": "UpdateChartSpecRequest",
+          "description": "Updates a chart's specifications."
+        },
+        "textToColumns": {
+          "$ref": "TextToColumnsRequest",
+          "description": "Converts a column of text into many columns of text."
+        },
+        "updateProtectedRange": {
+          "$ref": "UpdateProtectedRangeRequest",
+          "description": "Updates a protected range."
+        },
+        "addSheet": {
+          "description": "Adds a sheet.",
+          "$ref": "AddSheetRequest"
+        },
+        "copyPaste": {
+          "$ref": "CopyPasteRequest",
+          "description": "Copies data from one area and pastes it to another."
+        },
+        "deleteFilterView": {
+          "$ref": "DeleteFilterViewRequest",
+          "description": "Deletes a filter view from a sheet."
+        },
+        "insertDimension": {
+          "$ref": "InsertDimensionRequest",
+          "description": "Inserts new rows or columns in a sheet."
+        },
+        "deleteRange": {
+          "$ref": "DeleteRangeRequest",
+          "description": "Deletes a range of cells from a sheet, shifting the remaining cells."
+        },
+        "deleteBanding": {
+          "$ref": "DeleteBandingRequest",
+          "description": "Removes a banded range"
+        },
+        "addFilterView": {
+          "$ref": "AddFilterViewRequest",
+          "description": "Adds a filter view."
+        },
+        "updateBorders": {
+          "description": "Updates the borders in a range of cells.",
+          "$ref": "UpdateBordersRequest"
+        },
+        "setDataValidation": {
+          "description": "Sets data validation for one or more cells.",
+          "$ref": "SetDataValidationRequest"
+        },
+        "deleteConditionalFormatRule": {
+          "$ref": "DeleteConditionalFormatRuleRequest",
+          "description": "Deletes an existing conditional format rule."
+        },
+        "repeatCell": {
+          "$ref": "RepeatCellRequest",
+          "description": "Repeats a single cell across a range."
+        },
+        "clearBasicFilter": {
+          "description": "Clears the basic filter on a sheet.",
+          "$ref": "ClearBasicFilterRequest"
+        },
+        "appendDimension": {
+          "$ref": "AppendDimensionRequest",
+          "description": "Appends dimensions to the end of a sheet."
+        },
+        "updateConditionalFormatRule": {
+          "$ref": "UpdateConditionalFormatRuleRequest",
+          "description": "Updates an existing conditional format rule."
+        },
+        "insertRange": {
+          "$ref": "InsertRangeRequest",
+          "description": "Inserts new cells in a sheet, shifting the existing cells."
+        },
+        "moveDimension": {
+          "$ref": "MoveDimensionRequest",
+          "description": "Moves rows or columns to another location in a sheet."
+        },
+        "updateBanding": {
+          "$ref": "UpdateBandingRequest",
+          "description": "Updates a banded range"
+        },
+        "deleteNamedRange": {
+          "description": "Deletes a named range.",
+          "$ref": "DeleteNamedRangeRequest"
+        },
+        "addProtectedRange": {
+          "$ref": "AddProtectedRangeRequest",
+          "description": "Adds a protected range."
+        },
+        "duplicateSheet": {
+          "description": "Duplicates a sheet.",
+          "$ref": "DuplicateSheetRequest"
+        },
+        "deleteSheet": {
+          "$ref": "DeleteSheetRequest",
+          "description": "Deletes a sheet."
+        },
+        "unmergeCells": {
+          "$ref": "UnmergeCellsRequest",
+          "description": "Unmerges merged cells."
+        },
+        "updateEmbeddedObjectPosition": {
+          "description": "Updates an embedded object's (e.g. chart, image) position.",
+          "$ref": "UpdateEmbeddedObjectPositionRequest"
+        },
+        "updateDimensionProperties": {
+          "description": "Updates dimensions' properties.",
+          "$ref": "UpdateDimensionPropertiesRequest"
+        },
+        "pasteData": {
+          "$ref": "PasteDataRequest",
+          "description": "Pastes data (HTML or delimited) into a sheet."
+        },
+        "setBasicFilter": {
+          "$ref": "SetBasicFilterRequest",
+          "description": "Sets the basic filter on a sheet."
+        },
+        "addConditionalFormatRule": {
+          "description": "Adds a new conditional format rule.",
+          "$ref": "AddConditionalFormatRuleRequest"
+        },
+        "addNamedRange": {
+          "description": "Adds a named range.",
+          "$ref": "AddNamedRangeRequest"
+        },
+        "updateCells": {
+          "description": "Updates many cells at once.",
+          "$ref": "UpdateCellsRequest"
+        },
+        "updateSpreadsheetProperties": {
+          "description": "Updates the spreadsheet's properties.",
+          "$ref": "UpdateSpreadsheetPropertiesRequest"
+        },
+        "deleteEmbeddedObject": {
+          "$ref": "DeleteEmbeddedObjectRequest",
+          "description": "Deletes an embedded object (e.g, chart, image) in a sheet."
+        },
+        "updateFilterView": {
+          "$ref": "UpdateFilterViewRequest",
+          "description": "Updates the properties of a filter view."
+        },
+        "addBanding": {
+          "$ref": "AddBandingRequest",
+          "description": "Adds a new banded range"
+        }
+      }
     },
     "BooleanCondition": {
+      "id": "BooleanCondition",
       "description": "A condition that can evaluate to true or false.\nBooleanConditions are used by conditional formatting,\ndata validation, and the criteria in filters.",
       "type": "object",
       "properties": {
@@ -2085,230 +676,22 @@
             "$ref": "ConditionValue"
           }
         }
-      },
-      "id": "BooleanCondition"
-    },
-    "Request": {
-      "description": "A single kind of update to apply to a spreadsheet.",
-      "type": "object",
-      "properties": {
-        "findReplace": {
-          "$ref": "FindReplaceRequest",
-          "description": "Finds and replaces occurrences of some text with other text."
-        },
-        "textToColumns": {
-          "description": "Converts a column of text into many columns of text.",
-          "$ref": "TextToColumnsRequest"
-        },
-        "updateChartSpec": {
-          "$ref": "UpdateChartSpecRequest",
-          "description": "Updates a chart's specifications."
-        },
-        "addSheet": {
-          "$ref": "AddSheetRequest",
-          "description": "Adds a sheet."
-        },
-        "updateProtectedRange": {
-          "$ref": "UpdateProtectedRangeRequest",
-          "description": "Updates a protected range."
-        },
-        "deleteFilterView": {
-          "$ref": "DeleteFilterViewRequest",
-          "description": "Deletes a filter view from a sheet."
-        },
-        "copyPaste": {
-          "$ref": "CopyPasteRequest",
-          "description": "Copies data from one area and pastes it to another."
-        },
-        "insertDimension": {
-          "$ref": "InsertDimensionRequest",
-          "description": "Inserts new rows or columns in a sheet."
-        },
-        "deleteRange": {
-          "$ref": "DeleteRangeRequest",
-          "description": "Deletes a range of cells from a sheet, shifting the remaining cells."
-        },
-        "deleteBanding": {
-          "$ref": "DeleteBandingRequest",
-          "description": "Removes a banded range"
-        },
-        "addFilterView": {
-          "$ref": "AddFilterViewRequest",
-          "description": "Adds a filter view."
-        },
-        "updateBorders": {
-          "description": "Updates the borders in a range of cells.",
-          "$ref": "UpdateBordersRequest"
-        },
-        "setDataValidation": {
-          "description": "Sets data validation for one or more cells.",
-          "$ref": "SetDataValidationRequest"
-        },
-        "deleteConditionalFormatRule": {
-          "$ref": "DeleteConditionalFormatRuleRequest",
-          "description": "Deletes an existing conditional format rule."
-        },
-        "clearBasicFilter": {
-          "description": "Clears the basic filter on a sheet.",
-          "$ref": "ClearBasicFilterRequest"
-        },
-        "repeatCell": {
-          "description": "Repeats a single cell across a range.",
-          "$ref": "RepeatCellRequest"
-        },
-        "appendDimension": {
-          "$ref": "AppendDimensionRequest",
-          "description": "Appends dimensions to the end of a sheet."
-        },
-        "updateConditionalFormatRule": {
-          "$ref": "UpdateConditionalFormatRuleRequest",
-          "description": "Updates an existing conditional format rule."
-        },
-        "insertRange": {
-          "$ref": "InsertRangeRequest",
-          "description": "Inserts new cells in a sheet, shifting the existing cells."
-        },
-        "moveDimension": {
-          "$ref": "MoveDimensionRequest",
-          "description": "Moves rows or columns to another location in a sheet."
-        },
-        "updateBanding": {
-          "$ref": "UpdateBandingRequest",
-          "description": "Updates a banded range"
-        },
-        "addProtectedRange": {
-          "$ref": "AddProtectedRangeRequest",
-          "description": "Adds a protected range."
-        },
-        "deleteNamedRange": {
-          "$ref": "DeleteNamedRangeRequest",
-          "description": "Deletes a named range."
-        },
-        "duplicateSheet": {
-          "$ref": "DuplicateSheetRequest",
-          "description": "Duplicates a sheet."
-        },
-        "deleteSheet": {
-          "$ref": "DeleteSheetRequest",
-          "description": "Deletes a sheet."
-        },
-        "unmergeCells": {
-          "$ref": "UnmergeCellsRequest",
-          "description": "Unmerges merged cells."
-        },
-        "updateEmbeddedObjectPosition": {
-          "description": "Updates an embedded object's (e.g. chart, image) position.",
-          "$ref": "UpdateEmbeddedObjectPositionRequest"
-        },
-        "updateDimensionProperties": {
-          "description": "Updates dimensions' properties.",
-          "$ref": "UpdateDimensionPropertiesRequest"
-        },
-        "pasteData": {
-          "$ref": "PasteDataRequest",
-          "description": "Pastes data (HTML or delimited) into a sheet."
-        },
-        "setBasicFilter": {
-          "description": "Sets the basic filter on a sheet.",
-          "$ref": "SetBasicFilterRequest"
-        },
-        "addConditionalFormatRule": {
-          "$ref": "AddConditionalFormatRuleRequest",
-          "description": "Adds a new conditional format rule."
-        },
-        "updateCells": {
-          "$ref": "UpdateCellsRequest",
-          "description": "Updates many cells at once."
-        },
-        "addNamedRange": {
-          "$ref": "AddNamedRangeRequest",
-          "description": "Adds a named range."
-        },
-        "updateSpreadsheetProperties": {
-          "description": "Updates the spreadsheet's properties.",
-          "$ref": "UpdateSpreadsheetPropertiesRequest"
-        },
-        "deleteEmbeddedObject": {
-          "$ref": "DeleteEmbeddedObjectRequest",
-          "description": "Deletes an embedded object (e.g, chart, image) in a sheet."
-        },
-        "updateFilterView": {
-          "$ref": "UpdateFilterViewRequest",
-          "description": "Updates the properties of a filter view."
-        },
-        "addBanding": {
-          "$ref": "AddBandingRequest",
-          "description": "Adds a new banded range"
-        },
-        "autoResizeDimensions": {
-          "description": "Automatically resizes one or more dimensions based on the contents\nof the cells in that dimension.",
-          "$ref": "AutoResizeDimensionsRequest"
-        },
-        "appendCells": {
-          "$ref": "AppendCellsRequest",
-          "description": "Appends cells after the last row with data in a sheet."
-        },
-        "cutPaste": {
-          "$ref": "CutPasteRequest",
-          "description": "Cuts data from one area and pastes it to another."
-        },
-        "mergeCells": {
-          "$ref": "MergeCellsRequest",
-          "description": "Merges cells together."
-        },
-        "updateNamedRange": {
-          "description": "Updates a named range.",
-          "$ref": "UpdateNamedRangeRequest"
-        },
-        "updateSheetProperties": {
-          "description": "Updates a sheet's properties.",
-          "$ref": "UpdateSheetPropertiesRequest"
-        },
-        "autoFill": {
-          "description": "Automatically fills in more data based on existing data.",
-          "$ref": "AutoFillRequest"
-        },
-        "deleteDimension": {
-          "$ref": "DeleteDimensionRequest",
-          "description": "Deletes rows or columns in a sheet."
-        },
-        "sortRange": {
-          "description": "Sorts data in a range.",
-          "$ref": "SortRangeRequest"
-        },
-        "deleteProtectedRange": {
-          "description": "Deletes a protected range.",
-          "$ref": "DeleteProtectedRangeRequest"
-        },
-        "duplicateFilterView": {
-          "$ref": "DuplicateFilterViewRequest",
-          "description": "Duplicates a filter view."
-        },
-        "addChart": {
-          "$ref": "AddChartRequest",
-          "description": "Adds a chart."
-        }
-      },
-      "id": "Request"
+      }
     },
     "GridRange": {
+      "id": "GridRange",
       "description": "A range on a sheet.\nAll indexes are zero-based.\nIndexes are half open, e.g the start index is inclusive\nand the end index is exclusive -- [start_index, end_index).\nMissing indexes indicate the range is unbounded on that side.\n\nFor example, if `\"Sheet1\"` is sheet ID 0, then:\n\n  `Sheet1!A1:A1 == sheet_id: 0,\n                  start_row_index: 0, end_row_index: 1,\n                  start_column_index: 0, end_column_index: 1`\n\n  `Sheet1!A3:B4 == sheet_id: 0,\n                  start_row_index: 2, end_row_index: 4,\n                  start_column_index: 0, end_column_index: 2`\n\n  `Sheet1!A:B == sheet_id: 0,\n                start_column_index: 0, end_column_index: 2`\n\n  `Sheet1!A5:B == sheet_id: 0,\n                 start_row_index: 4,\n                 start_column_index: 0, end_column_index: 2`\n\n  `Sheet1 == sheet_id:0`\n\nThe start index must always be less than or equal to the end index.\nIf the start index equals the end index, then the range is empty.\nEmpty ranges are typically not meaningful and are usually rendered in the\nUI as `#REF!`.",
       "type": "object",
       "properties": {
-        "startColumnIndex": {
-          "description": "The start column (inclusive) of the range, or not set if unbounded.",
-          "format": "int32",
-          "type": "integer"
-        },
         "sheetId": {
           "description": "The sheet this range is on.",
           "format": "int32",
           "type": "integer"
         },
         "endRowIndex": {
-          "type": "integer",
           "description": "The end row (exclusive) of the range, or not set if unbounded.",
-          "format": "int32"
+          "format": "int32",
+          "type": "integer"
         },
         "endColumnIndex": {
           "description": "The end column (exclusive) of the range, or not set if unbounded.",
@@ -2319,21 +702,19 @@
           "description": "The start row (inclusive) of the range, or not set if unbounded.",
           "format": "int32",
           "type": "integer"
+        },
+        "startColumnIndex": {
+          "description": "The start column (inclusive) of the range, or not set if unbounded.",
+          "format": "int32",
+          "type": "integer"
         }
-      },
-      "id": "GridRange"
+      }
     },
     "BasicChartSpec": {
+      "id": "BasicChartSpec",
       "description": "The specification for a basic chart.  See BasicChartType for the list\nof charts this supports.",
       "type": "object",
       "properties": {
-        "domains": {
-          "description": "The domain of data this is charting.\nOnly a single domain is currently supported.",
-          "type": "array",
-          "items": {
-            "$ref": "BasicChartDomain"
-          }
-        },
         "headerCount": {
           "description": "The number of rows or columns in the data that are \"headers\".\nIf not set, Google Sheets will guess how many rows are headers based\non the data.\n\n(Note that BasicChartAxis.title may override the axis title\n inferred from the header values.)",
           "format": "int32",
@@ -2347,8 +728,6 @@
           }
         },
         "chartType": {
-          "description": "The type of the chart.",
-          "type": "string",
           "enumDescriptions": [
             "Default value, do not use.",
             "A \u003ca href=\"/chart/interactive/docs/gallery/barchart\"\u003ebar chart\u003c/a\u003e.",
@@ -2366,7 +745,9 @@
             "COLUMN",
             "SCATTER",
             "COMBO"
-          ]
+          ],
+          "description": "The type of the chart.",
+          "type": "string"
         },
         "series": {
           "description": "The data this chart is visualizing.",
@@ -2394,9 +775,15 @@
             "TOP_LEGEND",
             "NO_LEGEND"
           ]
+        },
+        "domains": {
+          "description": "The domain of data this is charting.\nOnly a single domain is currently supported.",
+          "type": "array",
+          "items": {
+            "$ref": "BasicChartDomain"
+          }
         }
-      },
-      "id": "BasicChartSpec"
+      }
     },
     "SetDataValidationRequest": {
       "description": "Sets a data validation rule to every cell in the range.\nTo clear validation in a range, call this with no rule specified.",
@@ -2407,50 +794,43 @@
           "description": "The data validation rule to set on each cell in the range,\nor empty to clear the data validation in the range."
         },
         "range": {
-          "$ref": "GridRange",
-          "description": "The range the data validation rule should apply to."
+          "description": "The range the data validation rule should apply to.",
+          "$ref": "GridRange"
         }
       },
       "id": "SetDataValidationRequest"
     },
     "CellData": {
+      "description": "Data about a specific cell.",
       "type": "object",
       "properties": {
-        "hyperlink": {
-          "description": "A hyperlink this cell points to, if any.\nThis field is read-only.  (To set it, use a `=HYPERLINK` formula.)",
-          "type": "string"
-        },
         "pivotTable": {
-          "description": "A pivot table anchored at this cell. The size of pivot table itself\nis computed dynamically based on its data, grouping, filters, values,\netc. Only the top-left cell of the pivot table contains the pivot table\ndefinition. The other cells will contain the calculated values of the\nresults of the pivot in their effective_value fields.",
-          "$ref": "PivotTable"
+          "$ref": "PivotTable",
+          "description": "A pivot table anchored at this cell. The size of pivot table itself\nis computed dynamically based on its data, grouping, filters, values,\netc. Only the top-left cell of the pivot table contains the pivot table\ndefinition. The other cells will contain the calculated values of the\nresults of the pivot in their effective_value fields."
         },
         "userEnteredFormat": {
           "$ref": "CellFormat",
           "description": "The format the user entered for the cell.\n\nWhen writing, the new format will be merged with the existing format."
         },
+        "effectiveFormat": {
+          "description": "The effective format being used by the cell.\nThis includes the results of applying any conditional formatting and,\nif the cell contains a formula, the computed number format.\nIf the effective format is the default format, effective format will\nnot be written.\nThis field is read-only.",
+          "$ref": "CellFormat"
+        },
         "note": {
           "description": "Any note on the cell.",
           "type": "string"
         },
-        "effectiveFormat": {
-          "$ref": "CellFormat",
-          "description": "The effective format being used by the cell.\nThis includes the results of applying any conditional formatting and,\nif the cell contains a formula, the computed number format.\nIf the effective format is the default format, effective format will\nnot be written.\nThis field is read-only."
+        "dataValidation": {
+          "$ref": "DataValidationRule",
+          "description": "A data validation rule on the cell, if any.\n\nWhen writing, the new data validation rule will overwrite any prior rule."
         },
         "userEnteredValue": {
-          "$ref": "ExtendedValue",
-          "description": "The value the user entered in the cell. e.g, `1234`, `'Hello'`, or `=NOW()`\nNote: Dates, Times and DateTimes are represented as doubles in\nserial number format."
-        },
-        "dataValidation": {
-          "description": "A data validation rule on the cell, if any.\n\nWhen writing, the new data validation rule will overwrite any prior rule.",
-          "$ref": "DataValidationRule"
+          "description": "The value the user entered in the cell. e.g, `1234`, `'Hello'`, or `=NOW()`\nNote: Dates, Times and DateTimes are represented as doubles in\nserial number format.",
+          "$ref": "ExtendedValue"
         },
         "effectiveValue": {
-          "$ref": "ExtendedValue",
-          "description": "The effective value of the cell. For cells with formulas, this will be\nthe calculated value.  For cells with literals, this will be\nthe same as the user_entered_value.\nThis field is read-only."
-        },
-        "formattedValue": {
-          "description": "The formatted value of the cell.\nThis is the value as it's shown to the user.\nThis field is read-only.",
-          "type": "string"
+          "description": "The effective value of the cell. For cells with formulas, this will be\nthe calculated value.  For cells with literals, this will be\nthe same as the user_entered_value.\nThis field is read-only.",
+          "$ref": "ExtendedValue"
         },
         "textFormatRuns": {
           "description": "Runs of rich text applied to subsections of the cell.  Runs are only valid\non user entered strings, not formulas, bools, or numbers.\nRuns start at specific indexes in the text and continue until the next\nrun. Properties of a run will continue unless explicitly changed\nin a subsequent run (and properties of the first run will continue\nthe properties of the cell unless explicitly changed).\n\nWhen writing, the new runs will overwrite any prior runs.  When writing a\nnew user_entered_value, previous runs will be erased.",
@@ -2458,10 +838,17 @@
           "items": {
             "$ref": "TextFormatRun"
           }
+        },
+        "formattedValue": {
+          "description": "The formatted value of the cell.\nThis is the value as it's shown to the user.\nThis field is read-only.",
+          "type": "string"
+        },
+        "hyperlink": {
+          "description": "A hyperlink this cell points to, if any.\nThis field is read-only.  (To set it, use a `=HYPERLINK` formula.)",
+          "type": "string"
         }
       },
-      "id": "CellData",
-      "description": "Data about a specific cell."
+      "id": "CellData"
     },
     "BatchUpdateSpreadsheetRequest": {
       "description": "The request for updating any aspect of a spreadsheet.",
@@ -2492,41 +879,10 @@
       },
       "id": "BatchUpdateSpreadsheetRequest"
     },
-    "Padding": {
-      "description": "The amount of padding around the cell, in pixels.\nWhen updating padding, every field must be specified.",
-      "type": "object",
-      "properties": {
-        "top": {
-          "description": "The top padding of the cell.",
-          "format": "int32",
-          "type": "integer"
-        },
-        "left": {
-          "description": "The left padding of the cell.",
-          "format": "int32",
-          "type": "integer"
-        },
-        "right": {
-          "description": "The right padding of the cell.",
-          "format": "int32",
-          "type": "integer"
-        },
-        "bottom": {
-          "description": "The bottom padding of the cell.",
-          "format": "int32",
-          "type": "integer"
-        }
-      },
-      "id": "Padding"
-    },
     "BasicChartAxis": {
       "description": "An axis of the chart.\nA chart may not have more than one axis per\naxis position.",
       "type": "object",
       "properties": {
-        "format": {
-          "$ref": "TextFormat",
-          "description": "The format of the title.\nOnly valid if the axis is not associated with the domain."
-        },
         "position": {
           "enumDescriptions": [
             "Default value, do not use.",
@@ -2546,22 +902,56 @@
         "title": {
           "description": "The title of this axis. If set, this overrides any title inferred\nfrom headers of the data.",
           "type": "string"
+        },
+        "format": {
+          "description": "The format of the title.\nOnly valid if the axis is not associated with the domain.",
+          "$ref": "TextFormat"
         }
       },
       "id": "BasicChartAxis"
     },
+    "Padding": {
+      "description": "The amount of padding around the cell, in pixels.\nWhen updating padding, every field must be specified.",
+      "type": "object",
+      "properties": {
+        "right": {
+          "description": "The right padding of the cell.",
+          "format": "int32",
+          "type": "integer"
+        },
+        "bottom": {
+          "description": "The bottom padding of the cell.",
+          "format": "int32",
+          "type": "integer"
+        },
+        "top": {
+          "description": "The top padding of the cell.",
+          "format": "int32",
+          "type": "integer"
+        },
+        "left": {
+          "description": "The left padding of the cell.",
+          "format": "int32",
+          "type": "integer"
+        }
+      },
+      "id": "Padding"
+    },
     "DeleteDimensionRequest": {
+      "id": "DeleteDimensionRequest",
+      "description": "Deletes the dimensions from the sheet.",
+      "type": "object",
       "properties": {
         "range": {
           "description": "The dimensions to delete from the sheet.",
           "$ref": "DimensionRange"
         }
-      },
-      "id": "DeleteDimensionRequest",
-      "description": "Deletes the dimensions from the sheet.",
-      "type": "object"
+      }
     },
     "UpdateChartSpecRequest": {
+      "id": "UpdateChartSpecRequest",
+      "description": "Updates a chart's specifications.\n(This does not move or resize a chart. To move or resize a chart, use\n UpdateEmbeddedObjectPositionRequest.)",
+      "type": "object",
       "properties": {
         "chartId": {
           "description": "The ID of the chart to update.",
@@ -2569,13 +959,10 @@
           "type": "integer"
         },
         "spec": {
-          "$ref": "ChartSpec",
-          "description": "The specification to apply to the chart."
+          "description": "The specification to apply to the chart.",
+          "$ref": "ChartSpec"
         }
-      },
-      "id": "UpdateChartSpecRequest",
-      "description": "Updates a chart's specifications.\n(This does not move or resize a chart. To move or resize a chart, use\n UpdateEmbeddedObjectPositionRequest.)",
-      "type": "object"
+      }
     },
     "DeleteFilterViewRequest": {
       "description": "Deletes a particular filter view.",
@@ -2595,9 +982,9 @@
       "type": "object",
       "properties": {
         "totalUpdatedSheets": {
-          "type": "integer",
           "description": "The total number of sheets where at least one cell in the sheet was\nupdated.",
-          "format": "int32"
+          "format": "int32",
+          "type": "integer"
         },
         "totalUpdatedCells": {
           "description": "The total number of cells updated.",
@@ -2632,16 +1019,16 @@
       "description": "Sorts data in rows based on a sort order per column.",
       "type": "object",
       "properties": {
+        "range": {
+          "description": "The range to sort.",
+          "$ref": "GridRange"
+        },
         "sortSpecs": {
           "description": "The sort order per column. Later specifications are used when values\nare equal in the earlier specifications.",
           "type": "array",
           "items": {
             "$ref": "SortSpec"
           }
-        },
-        "range": {
-          "description": "The range to sort.",
-          "$ref": "GridRange"
         }
       }
     },
@@ -2649,10 +1036,6 @@
       "description": "Merges all cells in the range.",
       "type": "object",
       "properties": {
-        "range": {
-          "$ref": "GridRange",
-          "description": "The range of cells to merge."
-        },
         "mergeType": {
           "enumDescriptions": [
             "Create a single merge from the range",
@@ -2666,6 +1049,10 @@
           ],
           "description": "How the cells should be merged.",
           "type": "string"
+        },
+        "range": {
+          "$ref": "GridRange",
+          "description": "The range of cells to merge."
         }
       },
       "id": "MergeCellsRequest"
@@ -2675,13 +1062,14 @@
       "type": "object",
       "properties": {
         "protectedRange": {
-          "$ref": "ProtectedRange",
-          "description": "The protected range to be added. The\nprotectedRangeId field is optional; if\none is not set, an id will be randomly generated. (It is an error to\nspecify the ID of a range that already exists.)"
+          "description": "The protected range to be added. The\nprotectedRangeId field is optional; if\none is not set, an id will be randomly generated. (It is an error to\nspecify the ID of a range that already exists.)",
+          "$ref": "ProtectedRange"
         }
       },
       "id": "AddProtectedRangeRequest"
     },
     "BatchClearValuesRequest": {
+      "id": "BatchClearValuesRequest",
       "description": "The request for clearing more than one range of values in a spreadsheet.",
       "type": "object",
       "properties": {
@@ -2692,8 +1080,7 @@
             "type": "string"
           }
         }
-      },
-      "id": "BatchClearValuesRequest"
+      }
     },
     "DuplicateFilterViewResponse": {
       "id": "DuplicateFilterViewResponse",
@@ -2701,23 +1088,36 @@
       "type": "object",
       "properties": {
         "filter": {
-          "description": "The newly created filter.",
-          "$ref": "FilterView"
+          "$ref": "FilterView",
+          "description": "The newly created filter."
         }
       }
     },
     "DuplicateSheetResponse": {
+      "id": "DuplicateSheetResponse",
       "description": "The result of duplicating a sheet.",
       "type": "object",
       "properties": {
         "properties": {
-          "$ref": "SheetProperties",
-          "description": "The properties of the duplicate sheet."
+          "description": "The properties of the duplicate sheet.",
+          "$ref": "SheetProperties"
         }
-      },
-      "id": "DuplicateSheetResponse"
+      }
+    },
+    "ClearBasicFilterRequest": {
+      "id": "ClearBasicFilterRequest",
+      "description": "Clears the basic filter, if any exists on the sheet.",
+      "type": "object",
+      "properties": {
+        "sheetId": {
+          "description": "The sheet ID on which the basic filter should be cleared.",
+          "format": "int32",
+          "type": "integer"
+        }
+      }
     },
     "TextToColumnsRequest": {
+      "id": "TextToColumnsRequest",
       "description": "Splits a column of text into multiple columns,\nbased on a delimiter in each cell.",
       "type": "object",
       "properties": {
@@ -2730,8 +1130,6 @@
           "description": "The source data range.  This must span exactly one column."
         },
         "delimiterType": {
-          "description": "The delimiter type to use.",
-          "type": "string",
           "enumDescriptions": [
             "Default value. This value must not be used.",
             "\",\"",
@@ -2747,22 +1145,23 @@
             "PERIOD",
             "SPACE",
             "CUSTOM"
-          ]
+          ],
+          "description": "The delimiter type to use.",
+          "type": "string"
         }
-      },
-      "id": "TextToColumnsRequest"
+      }
     },
-    "ClearBasicFilterRequest": {
-      "description": "Clears the basic filter, if any exists on the sheet.",
+    "DeleteBandingRequest": {
+      "id": "DeleteBandingRequest",
+      "description": "Removes the banded range with the given ID from the spreadsheet.",
       "type": "object",
       "properties": {
-        "sheetId": {
-          "type": "integer",
-          "description": "The sheet ID on which the basic filter should be cleared.",
-          "format": "int32"
+        "bandedRangeId": {
+          "description": "The ID of the banded range to delete.",
+          "format": "int32",
+          "type": "integer"
         }
-      },
-      "id": "ClearBasicFilterRequest"
+      }
     },
     "BatchUpdateSpreadsheetResponse": {
       "description": "The reply for batch updating a spreadsheet.",
@@ -2786,36 +1185,24 @@
       },
       "id": "BatchUpdateSpreadsheetResponse"
     },
-    "DeleteBandingRequest": {
+    "AppendValuesResponse": {
+      "id": "AppendValuesResponse",
+      "description": "The response when updating a range of values in a spreadsheet.",
       "type": "object",
       "properties": {
-        "bandedRangeId": {
-          "description": "The ID of the banded range to delete.",
-          "format": "int32",
-          "type": "integer"
-        }
-      },
-      "id": "DeleteBandingRequest",
-      "description": "Removes the banded range with the given ID from the spreadsheet."
-    },
-    "AppendValuesResponse": {
-      "properties": {
+        "spreadsheetId": {
+          "description": "The spreadsheet the updates were applied to.",
+          "type": "string"
+        },
         "updates": {
           "$ref": "UpdateValuesResponse",
           "description": "Information about the updates that were applied."
         },
         "tableRange": {
-          "type": "string",
-          "description": "The range (in A1 notation) of the table that values are being appended to\n(before the values were appended).\nEmpty if no table was found."
-        },
-        "spreadsheetId": {
-          "description": "The spreadsheet the updates were applied to.",
+          "description": "The range (in A1 notation) of the table that values are being appended to\n(before the values were appended).\nEmpty if no table was found.",
           "type": "string"
         }
-      },
-      "id": "AppendValuesResponse",
-      "description": "The response when updating a range of values in a spreadsheet.",
-      "type": "object"
+      }
     },
     "MoveDimensionRequest": {
       "description": "Moves one or more rows or columns.",
@@ -2827,14 +1214,13 @@
           "type": "integer"
         },
         "source": {
-          "description": "The source dimensions to move.",
-          "$ref": "DimensionRange"
+          "$ref": "DimensionRange",
+          "description": "The source dimensions to move."
         }
       },
       "id": "MoveDimensionRequest"
     },
     "PivotFilterCriteria": {
-      "id": "PivotFilterCriteria",
       "description": "Criteria for showing/hiding rows in a pivot table.",
       "type": "object",
       "properties": {
@@ -2845,7 +1231,8 @@
             "type": "string"
           }
         }
-      }
+      },
+      "id": "PivotFilterCriteria"
     },
     "AddFilterViewRequest": {
       "id": "AddFilterViewRequest",
@@ -2853,8 +1240,8 @@
       "type": "object",
       "properties": {
         "filter": {
-          "description": "The filter to add. The filterViewId\nfield is optional; if one is not set, an id will be randomly generated. (It\nis an error to specify the ID of a filter that already exists.)",
-          "$ref": "FilterView"
+          "$ref": "FilterView",
+          "description": "The filter to add. The filterViewId\nfield is optional; if one is not set, an id will be randomly generated. (It\nis an error to specify the ID of a filter that already exists.)"
         }
       }
     },
@@ -2863,8 +1250,8 @@
       "type": "object",
       "properties": {
         "rule": {
-          "$ref": "ConditionalFormatRule",
-          "description": "The rule to add."
+          "description": "The rule to add.",
+          "$ref": "ConditionalFormatRule"
         },
         "index": {
           "description": "The zero-based index where the rule should be inserted.",
@@ -2875,23 +1262,15 @@
       "id": "AddConditionalFormatRuleRequest"
     },
     "ChartSpec": {
+      "id": "ChartSpec",
+      "description": "The specifications of a chart.",
+      "type": "object",
       "properties": {
-        "pieChart": {
-          "$ref": "PieChartSpec",
-          "description": "A pie chart specification."
-        },
         "basicChart": {
           "description": "A basic chart specification, can be one of many kinds of charts.\nSee BasicChartType for the list of all\ncharts this supports.",
           "$ref": "BasicChartSpec"
         },
         "hiddenDimensionStrategy": {
-          "enum": [
-            "CHART_HIDDEN_DIMENSION_STRATEGY_UNSPECIFIED",
-            "SKIP_HIDDEN_ROWS_AND_COLUMNS",
-            "SKIP_HIDDEN_ROWS",
-            "SKIP_HIDDEN_COLUMNS",
-            "SHOW_ALL"
-          ],
           "description": "Determines how the charts will use hidden rows or columns.",
           "type": "string",
           "enumDescriptions": [
@@ -2900,19 +1279,33 @@
             "Charts will skip hidden rows only.",
             "Charts will skip hidden columns only.",
             "Charts will not skip any hidden rows or columns."
+          ],
+          "enum": [
+            "CHART_HIDDEN_DIMENSION_STRATEGY_UNSPECIFIED",
+            "SKIP_HIDDEN_ROWS_AND_COLUMNS",
+            "SKIP_HIDDEN_ROWS",
+            "SKIP_HIDDEN_COLUMNS",
+            "SHOW_ALL"
           ]
         },
         "title": {
           "description": "The title of the chart.",
           "type": "string"
+        },
+        "pieChart": {
+          "$ref": "PieChartSpec",
+          "description": "A pie chart specification."
         }
-      },
-      "id": "ChartSpec",
-      "description": "The specifications of a chart.",
-      "type": "object"
+      }
     },
     "NumberFormat": {
+      "description": "The number format of a cell.",
+      "type": "object",
       "properties": {
+        "pattern": {
+          "description": "Pattern string used for formatting.  If not set, a default pattern based on\nthe user's locale will be used if necessary for the given type.\nSee the [Date and Number Formats guide](/sheets/api/guides/formats) for more\ninformation about the supported patterns.",
+          "type": "string"
+        },
         "type": {
           "description": "The type of the number format.\nWhen writing, this field must be set.",
           "type": "string",
@@ -2938,15 +1331,9 @@
             "DATE_TIME",
             "SCIENTIFIC"
           ]
-        },
-        "pattern": {
-          "description": "Pattern string used for formatting.  If not set, a default pattern based on\nthe user's locale will be used if necessary for the given type.\nSee the [Date and Number Formats guide](/sheets/api/guides/formats) for more\ninformation about the supported patterns.",
-          "type": "string"
         }
       },
-      "id": "NumberFormat",
-      "description": "The number format of a cell.",
-      "type": "object"
+      "id": "NumberFormat"
     },
     "SheetProperties": {
       "description": "Properties of a sheet.",
@@ -2957,13 +1344,13 @@
           "type": "string"
         },
         "tabColor": {
-          "description": "The color of the tab in the UI.",
-          "$ref": "Color"
+          "$ref": "Color",
+          "description": "The color of the tab in the UI."
         },
         "index": {
-          "type": "integer",
           "description": "The index of the sheet within the spreadsheet.\nWhen adding or updating sheet properties, if this field\nis excluded then the sheet will be added or moved to the end\nof the sheet list. When updating sheet indices or inserting\nsheets, movement is considered in \"before the move\" indexes.\nFor example, if there were 3 sheets (S1, S2, S3) in order to\nmove S1 ahead of S2 the index would have to be set to 2. A sheet\nindex update request will be ignored if the requested index is\nidentical to the sheets current index or if the requested new\nindex is equal to the current sheet index + 1.",
-          "format": "int32"
+          "format": "int32",
+          "type": "integer"
         },
         "sheetId": {
           "description": "The ID of the sheet. Must be non-negative.\nThis field cannot be changed once set.",
@@ -2979,12 +1366,10 @@
           "type": "boolean"
         },
         "gridProperties": {
-          "description": "Additional properties of the sheet if this sheet is a grid.\n(If the sheet is an object sheet, containing a chart or image, then\nthis field will be absent.)\nWhen writing it is an error to set any grid properties on non-grid sheets.",
-          "$ref": "GridProperties"
+          "$ref": "GridProperties",
+          "description": "Additional properties of the sheet if this sheet is a grid.\n(If the sheet is an object sheet, containing a chart or image, then\nthis field will be absent.)\nWhen writing it is an error to set any grid properties on non-grid sheets."
         },
         "sheetType": {
-          "description": "The type of sheet. Defaults to GRID.\nThis field cannot be changed once set.",
-          "type": "string",
           "enumDescriptions": [
             "Default value, do not use.",
             "The sheet is a grid.",
@@ -2994,36 +1379,41 @@
             "SHEET_TYPE_UNSPECIFIED",
             "GRID",
             "OBJECT"
-          ]
+          ],
+          "description": "The type of sheet. Defaults to GRID.\nThis field cannot be changed once set.",
+          "type": "string"
         }
       },
       "id": "SheetProperties"
     },
     "UpdateDimensionPropertiesRequest": {
-      "id": "UpdateDimensionPropertiesRequest",
       "description": "Updates properties of dimensions within the specified range.",
       "type": "object",
       "properties": {
+        "range": {
+          "description": "The rows or columns to update.",
+          "$ref": "DimensionRange"
+        },
+        "fields": {
+          "description": "The fields that should be updated.  At least one field must be specified.\nThe root `properties` is implied and should not be specified.\nA single `\"*\"` can be used as short-hand for listing every field.",
+          "format": "google-fieldmask",
+          "type": "string"
+        },
         "properties": {
           "description": "Properties to update.",
           "$ref": "DimensionProperties"
-        },
-        "range": {
-          "$ref": "DimensionRange",
-          "description": "The rows or columns to update."
-        },
-        "fields": {
-          "type": "string",
-          "description": "The fields that should be updated.  At least one field must be specified.\nThe root `properties` is implied and should not be specified.\nA single `\"*\"` can be used as short-hand for listing every field.",
-          "format": "google-fieldmask"
         }
-      }
+      },
+      "id": "UpdateDimensionPropertiesRequest"
     },
     "SourceAndDestination": {
+      "id": "SourceAndDestination",
       "description": "A combination of a source range and how to extend that source.",
       "type": "object",
       "properties": {
         "dimension": {
+          "description": "The dimension that data should be filled into.",
+          "type": "string",
           "enumDescriptions": [
             "The default value, do not use.",
             "Operates on the rows of a sheet.",
@@ -3033,9 +1423,7 @@
             "DIMENSION_UNSPECIFIED",
             "ROWS",
             "COLUMNS"
-          ],
-          "description": "The dimension that data should be filled into.",
-          "type": "string"
+          ]
         },
         "fillLength": {
           "description": "The number of rows or columns that data should be filled into.\nPositive numbers expand beyond the last row or last column\nof the source.  Negative numbers expand before the first row\nor first column of the source.",
@@ -3046,18 +1434,12 @@
           "$ref": "GridRange",
           "description": "The location of the data to use as the source of the autofill."
         }
-      },
-      "id": "SourceAndDestination"
+      }
     },
     "FilterView": {
       "description": "A filter view.",
       "type": "object",
       "properties": {
-        "filterViewId": {
-          "description": "The ID of the filter view.",
-          "format": "int32",
-          "type": "integer"
-        },
         "criteria": {
           "additionalProperties": {
             "$ref": "FilterCriteria"
@@ -3070,8 +1452,8 @@
           "type": "string"
         },
         "range": {
-          "$ref": "GridRange",
-          "description": "The range this filter view covers.\n\nWhen writing, only one of range or named_range_id\nmay be set."
+          "description": "The range this filter view covers.\n\nWhen writing, only one of range or named_range_id\nmay be set.",
+          "$ref": "GridRange"
         },
         "sortSpecs": {
           "description": "The sort order per column. Later specifications are used when values\nare equal in the earlier specifications.",
@@ -3083,6 +1465,11 @@
         "namedRangeId": {
           "description": "The named range this filter view is backed by, if any.\n\nWhen writing, only one of range or named_range_id\nmay be set.",
           "type": "string"
+        },
+        "filterViewId": {
+          "description": "The ID of the filter view.",
+          "format": "int32",
+          "type": "integer"
         }
       },
       "id": "FilterView"
@@ -3091,32 +1478,43 @@
       "description": "Properties referring a single dimension (either row or column). If both\nBandedRange.row_properties and BandedRange.column_properties are\nset, the fill colors are applied to cells according to the following rules:\n\n* header_color and footer_color take priority over band colors.\n* first_band_color takes priority over second_band_color.\n* row_properties takes priority over column_properties.\n\nFor example, the first row color takes priority over the first column\ncolor, but the first column color takes priority over the second row color.\nSimilarly, the row header takes priority over the column header in the\ntop left cell, but the column header takes priority over the first row\ncolor if the row header is not set.",
       "type": "object",
       "properties": {
-        "footerColor": {
-          "$ref": "Color",
-          "description": "The color of the last row or column. If this field is not set, the last\nrow or column will be filled with either first_band_color or\nsecond_band_color, depending on the color of the previous row or\ncolumn."
-        },
         "headerColor": {
-          "$ref": "Color",
-          "description": "The color of the first row or column. If this field is set, the first\nrow or column will be filled with this color and the colors will\nalternate between first_band_color and second_band_color starting\nfrom the second row or column. Otherwise, the first row or column will be\nfilled with first_band_color and the colors will proceed to alternate\nas they normally would."
+          "description": "The color of the first row or column. If this field is set, the first\nrow or column will be filled with this color and the colors will\nalternate between first_band_color and second_band_color starting\nfrom the second row or column. Otherwise, the first row or column will be\nfilled with first_band_color and the colors will proceed to alternate\nas they normally would.",
+          "$ref": "Color"
         },
         "firstBandColor": {
-          "$ref": "Color",
-          "description": "The first color that is alternating. (Required)"
+          "description": "The first color that is alternating. (Required)",
+          "$ref": "Color"
         },
         "secondBandColor": {
           "$ref": "Color",
           "description": "The second color that is alternating. (Required)"
+        },
+        "footerColor": {
+          "$ref": "Color",
+          "description": "The color of the last row or column. If this field is not set, the last\nrow or column will be filled with either first_band_color or\nsecond_band_color, depending on the color of the previous row or\ncolumn."
         }
       },
       "id": "BandingProperties"
     },
+    "AddProtectedRangeResponse": {
+      "id": "AddProtectedRangeResponse",
+      "description": "The result of adding a new protected range.",
+      "type": "object",
+      "properties": {
+        "protectedRange": {
+          "description": "The newly added protected range.",
+          "$ref": "ProtectedRange"
+        }
+      }
+    },
     "BasicFilter": {
       "description": "The default filter associated with a sheet.",
       "type": "object",
       "properties": {
         "range": {
-          "$ref": "GridRange",
-          "description": "The range the filter covers."
+          "description": "The range the filter covers.",
+          "$ref": "GridRange"
         },
         "criteria": {
           "additionalProperties": {
@@ -3135,21 +1533,15 @@
       },
       "id": "BasicFilter"
     },
-    "AddProtectedRangeResponse": {
-      "description": "The result of adding a new protected range.",
-      "type": "object",
-      "properties": {
-        "protectedRange": {
-          "$ref": "ProtectedRange",
-          "description": "The newly added protected range."
-        }
-      },
-      "id": "AddProtectedRangeResponse"
-    },
     "UpdateValuesResponse": {
+      "id": "UpdateValuesResponse",
       "description": "The response when updating a range of values in a spreadsheet.",
       "type": "object",
       "properties": {
+        "spreadsheetId": {
+          "description": "The spreadsheet the updates were applied to.",
+          "type": "string"
+        },
         "updatedRange": {
           "description": "The range (in A1 notation) that updates were applied to.",
           "type": "string"
@@ -3172,79 +1564,17 @@
           "description": "The number of columns where at least one cell in the column was updated.",
           "format": "int32",
           "type": "integer"
-        },
-        "spreadsheetId": {
-          "description": "The spreadsheet the updates were applied to.",
-          "type": "string"
         }
-      },
-      "id": "UpdateValuesResponse"
-    },
-    "PivotValue": {
-      "properties": {
-        "summarizeFunction": {
-          "enum": [
-            "PIVOT_STANDARD_VALUE_FUNCTION_UNSPECIFIED",
-            "SUM",
-            "COUNTA",
-            "COUNT",
-            "COUNTUNIQUE",
-            "AVERAGE",
-            "MAX",
-            "MIN",
-            "MEDIAN",
-            "PRODUCT",
-            "STDEV",
-            "STDEVP",
-            "VAR",
-            "VARP",
-            "CUSTOM"
-          ],
-          "description": "A function to summarize the value.\nIf formula is set, the only supported values are\nSUM and\nCUSTOM.\nIf sourceColumnOffset is set, then `CUSTOM`\nis not supported.",
-          "type": "string",
-          "enumDescriptions": [
-            "The default, do not use.",
-            "Corresponds to the `SUM` function.",
-            "Corresponds to the `COUNTA` function.",
-            "Corresponds to the `COUNT` function.",
-            "Corresponds to the `COUNTUNIQUE` function.",
-            "Corresponds to the `AVERAGE` function.",
-            "Corresponds to the `MAX` function.",
-            "Corresponds to the `MIN` function.",
-            "Corresponds to the `MEDIAN` function.",
-            "Corresponds to the `PRODUCT` function.",
-            "Corresponds to the `STDEV` function.",
-            "Corresponds to the `STDEVP` function.",
-            "Corresponds to the `VAR` function.",
-            "Corresponds to the `VARP` function.",
-            "Indicates the formula should be used as-is.\nOnly valid if PivotValue.formula was set."
-          ]
-        },
-        "sourceColumnOffset": {
-          "description": "The column offset of the source range that this value reads from.\n\nFor example, if the source was `C10:E15`, a `sourceColumnOffset` of `0`\nmeans this value refers to column `C`, whereas the offset `1` would\nrefer to column `D`.",
-          "format": "int32",
-          "type": "integer"
-        },
-        "name": {
-          "description": "A name to use for the value. This is only used if formula was set.\nOtherwise, the column name is used.",
-          "type": "string"
-        },
-        "formula": {
-          "description": "A custom formula to calculate the value.  The formula must start\nwith an `=` character.",
-          "type": "string"
-        }
-      },
-      "id": "PivotValue",
-      "description": "The definition of how a value in a pivot table should be calculated.",
-      "type": "object"
+      }
     },
     "ErrorValue": {
+      "id": "ErrorValue",
       "description": "An error in a cell.",
       "type": "object",
       "properties": {
         "message": {
-          "type": "string",
-          "description": "A message with more information about the error\n(in the spreadsheet's locale)."
+          "description": "A message with more information about the error\n(in the spreadsheet's locale).",
+          "type": "string"
         },
         "type": {
           "description": "The type of error.",
@@ -3274,72 +1604,130 @@
             "LOADING"
           ]
         }
+      }
+    },
+    "PivotValue": {
+      "description": "The definition of how a value in a pivot table should be calculated.",
+      "type": "object",
+      "properties": {
+        "name": {
+          "description": "A name to use for the value. This is only used if formula was set.\nOtherwise, the column name is used.",
+          "type": "string"
+        },
+        "formula": {
+          "description": "A custom formula to calculate the value.  The formula must start\nwith an `=` character.",
+          "type": "string"
+        },
+        "summarizeFunction": {
+          "enumDescriptions": [
+            "The default, do not use.",
+            "Corresponds to the `SUM` function.",
+            "Corresponds to the `COUNTA` function.",
+            "Corresponds to the `COUNT` function.",
+            "Corresponds to the `COUNTUNIQUE` function.",
+            "Corresponds to the `AVERAGE` function.",
+            "Corresponds to the `MAX` function.",
+            "Corresponds to the `MIN` function.",
+            "Corresponds to the `MEDIAN` function.",
+            "Corresponds to the `PRODUCT` function.",
+            "Corresponds to the `STDEV` function.",
+            "Corresponds to the `STDEVP` function.",
+            "Corresponds to the `VAR` function.",
+            "Corresponds to the `VARP` function.",
+            "Indicates the formula should be used as-is.\nOnly valid if PivotValue.formula was set."
+          ],
+          "enum": [
+            "PIVOT_STANDARD_VALUE_FUNCTION_UNSPECIFIED",
+            "SUM",
+            "COUNTA",
+            "COUNT",
+            "COUNTUNIQUE",
+            "AVERAGE",
+            "MAX",
+            "MIN",
+            "MEDIAN",
+            "PRODUCT",
+            "STDEV",
+            "STDEVP",
+            "VAR",
+            "VARP",
+            "CUSTOM"
+          ],
+          "description": "A function to summarize the value.\nIf formula is set, the only supported values are\nSUM and\nCUSTOM.\nIf sourceColumnOffset is set, then `CUSTOM`\nis not supported.",
+          "type": "string"
+        },
+        "sourceColumnOffset": {
+          "description": "The column offset of the source range that this value reads from.\n\nFor example, if the source was `C10:E15`, a `sourceColumnOffset` of `0`\nmeans this value refers to column `C`, whereas the offset `1` would\nrefer to column `D`.",
+          "format": "int32",
+          "type": "integer"
+        }
       },
-      "id": "ErrorValue"
+      "id": "PivotValue"
     },
     "CopySheetToAnotherSpreadsheetRequest": {
+      "id": "CopySheetToAnotherSpreadsheetRequest",
+      "description": "The request to copy a sheet across spreadsheets.",
+      "type": "object",
       "properties": {
         "destinationSpreadsheetId": {
           "description": "The ID of the spreadsheet to copy the sheet to.",
           "type": "string"
         }
-      },
-      "id": "CopySheetToAnotherSpreadsheetRequest",
-      "description": "The request to copy a sheet across spreadsheets.",
-      "type": "object"
+      }
     },
     "PivotGroupSortValueBucket": {
+      "description": "Information about which values in a pivot group should be used for sorting.",
+      "type": "object",
       "properties": {
+        "valuesIndex": {
+          "description": "The offset in the PivotTable.values list which the values in this\ngrouping should be sorted by.",
+          "format": "int32",
+          "type": "integer"
+        },
         "buckets": {
           "description": "Determines the bucket from which values are chosen to sort.\n\nFor example, in a pivot table with one row group & two column groups,\nthe row group can list up to two values. The first value corresponds\nto a value within the first column group, and the second value\ncorresponds to a value in the second column group.  If no values\nare listed, this would indicate that the row should be sorted according\nto the \"Grand Total\" over the column groups. If a single value is listed,\nthis would correspond to using the \"Total\" of that bucket.",
           "type": "array",
           "items": {
             "$ref": "ExtendedValue"
           }
-        },
-        "valuesIndex": {
-          "description": "The offset in the PivotTable.values list which the values in this\ngrouping should be sorted by.",
-          "format": "int32",
-          "type": "integer"
         }
       },
-      "id": "PivotGroupSortValueBucket",
-      "description": "Information about which values in a pivot group should be used for sorting.",
-      "type": "object"
+      "id": "PivotGroupSortValueBucket"
     },
     "EmbeddedObjectPosition": {
+      "id": "EmbeddedObjectPosition",
       "description": "The position of an embedded object such as a chart.",
       "type": "object",
       "properties": {
-        "newSheet": {
-          "description": "If true, the embedded object will be put on a new sheet whose ID\nis chosen for you. Used only when writing.",
-          "type": "boolean"
-        },
         "sheetId": {
           "description": "The sheet this is on. Set only if the embedded object\nis on its own sheet. Must be non-negative.",
           "format": "int32",
           "type": "integer"
         },
         "overlayPosition": {
-          "$ref": "OverlayPosition",
-          "description": "The position at which the object is overlaid on top of a grid."
+          "description": "The position at which the object is overlaid on top of a grid.",
+          "$ref": "OverlayPosition"
+        },
+        "newSheet": {
+          "description": "If true, the embedded object will be put on a new sheet whose ID\nis chosen for you. Used only when writing.",
+          "type": "boolean"
         }
-      },
-      "id": "EmbeddedObjectPosition"
+      }
     },
     "DeleteProtectedRangeRequest": {
       "description": "Deletes the protected range with the given ID.",
       "type": "object",
       "properties": {
         "protectedRangeId": {
-          "type": "integer",
           "description": "The ID of the protected range to delete.",
-          "format": "int32"
+          "format": "int32",
+          "type": "integer"
         }
       },
       "id": "DeleteProtectedRangeRequest"
     },
     "AutoFillRequest": {
+      "id": "AutoFillRequest",
       "description": "Fills in more data based on existing data.",
       "type": "object",
       "properties": {
@@ -3352,49 +1740,50 @@
           "description": "The source and destination areas to autofill.\nThis explicitly lists the source of the autofill and where to\nextend that data."
         },
         "range": {
-          "$ref": "GridRange",
-          "description": "The range to autofill. This will examine the range and detect\nthe location that has data and automatically fill that data\nin to the rest of the range."
+          "description": "The range to autofill. This will examine the range and detect\nthe location that has data and automatically fill that data\nin to the rest of the range.",
+          "$ref": "GridRange"
         }
-      },
-      "id": "AutoFillRequest"
+      }
     },
     "GradientRule": {
       "description": "A rule that applies a gradient color scale format, based on\nthe interpolation points listed. The format of a cell will vary\nbased on its contents as compared to the values of the interpolation\npoints.",
       "type": "object",
       "properties": {
-        "midpoint": {
-          "$ref": "InterpolationPoint",
-          "description": "An optional midway interpolation point."
-        },
         "minpoint": {
           "$ref": "InterpolationPoint",
           "description": "The starting interpolation point."
         },
         "maxpoint": {
-          "$ref": "InterpolationPoint",
-          "description": "The final interpolation point."
+          "description": "The final interpolation point.",
+          "$ref": "InterpolationPoint"
+        },
+        "midpoint": {
+          "description": "An optional midway interpolation point.",
+          "$ref": "InterpolationPoint"
         }
       },
       "id": "GradientRule"
     },
-    "SetBasicFilterRequest": {
-      "id": "SetBasicFilterRequest",
-      "description": "Sets the basic filter associated with a sheet.",
-      "type": "object",
-      "properties": {
-        "filter": {
-          "description": "The filter to set.",
-          "$ref": "BasicFilter"
-        }
-      }
-    },
     "ClearValuesRequest": {
       "description": "The request for clearing a range of values in a spreadsheet.",
       "type": "object",
       "properties": {},
       "id": "ClearValuesRequest"
     },
+    "SetBasicFilterRequest": {
+      "description": "Sets the basic filter associated with a sheet.",
+      "type": "object",
+      "properties": {
+        "filter": {
+          "$ref": "BasicFilter",
+          "description": "The filter to set."
+        }
+      },
+      "id": "SetBasicFilterRequest"
+    },
     "InterpolationPoint": {
+      "description": "A single interpolation point on a gradient conditional format.\nThese pin the gradient color scale according to the color,\ntype and value chosen.",
+      "type": "object",
       "properties": {
         "value": {
           "description": "The value this interpolation point uses.  May be a formula.\nUnused if type is MIN or\nMAX.",
@@ -3405,6 +1794,8 @@
           "$ref": "Color"
         },
         "type": {
+          "description": "How the value should be interpreted.",
+          "type": "string",
           "enumDescriptions": [
             "The default value, do not use.",
             "The interpolation point will use the minimum value in the\ncells over the range of the conditional format.",
@@ -3420,16 +1811,13 @@
             "NUMBER",
             "PERCENT",
             "PERCENTILE"
-          ],
-          "description": "How the value should be interpreted.",
-          "type": "string"
+          ]
         }
       },
-      "id": "InterpolationPoint",
-      "description": "A single interpolation point on a gradient conditional format.\nThese pin the gradient color scale according to the color,\ntype and value chosen.",
-      "type": "object"
+      "id": "InterpolationPoint"
     },
     "DeleteEmbeddedObjectRequest": {
+      "id": "DeleteEmbeddedObjectRequest",
       "description": "Deletes the embedded object with the given ID.",
       "type": "object",
       "properties": {
@@ -3438,8 +1826,7 @@
           "format": "int32",
           "type": "integer"
         }
-      },
-      "id": "DeleteEmbeddedObjectRequest"
+      }
     },
     "FindReplaceResponse": {
       "description": "The result of the find/replace.",
@@ -3451,9 +1838,9 @@
           "type": "integer"
         },
         "valuesChanged": {
-          "type": "integer",
           "description": "The number of non-formula cells changed.",
-          "format": "int32"
+          "format": "int32",
+          "type": "integer"
         },
         "occurrencesChanged": {
           "description": "The number of occurrences (possibly multiple within a cell) changed.\nFor example, if replacing `\"e\"` with `\"o\"` in `\"Google Sheets\"`, this would\nbe `\"3\"` because `\"Google Sheets\"` -\u003e `\"Googlo Shoots\"`.",
@@ -3461,9 +1848,9 @@
           "type": "integer"
         },
         "rowsChanged": {
-          "type": "integer",
           "description": "The number of rows changed.",
-          "format": "int32"
+          "format": "int32",
+          "type": "integer"
         },
         "sheetsChanged": {
           "description": "The number of sheets changed.",
@@ -3486,6 +1873,7 @@
       "id": "DuplicateFilterViewRequest"
     },
     "DeleteSheetRequest": {
+      "id": "DeleteSheetRequest",
       "description": "Deletes the requested sheet.",
       "type": "object",
       "properties": {
@@ -3494,16 +1882,12 @@
           "format": "int32",
           "type": "integer"
         }
-      },
-      "id": "DeleteSheetRequest"
+      }
     },
     "UpdateConditionalFormatRuleResponse": {
+      "description": "The result of updating a conditional format rule.",
       "type": "object",
       "properties": {
-        "oldRule": {
-          "description": "The old (deleted) rule. Not set if a rule was moved\n(because it is the same as new_rule).",
-          "$ref": "ConditionalFormatRule"
-        },
         "newIndex": {
           "description": "The index of the new rule.",
           "format": "int32",
@@ -3517,15 +1901,47 @@
         "newRule": {
           "$ref": "ConditionalFormatRule",
           "description": "The new rule that replaced the old rule (if replacing),\nor the rule that was moved (if moved)"
+        },
+        "oldRule": {
+          "$ref": "ConditionalFormatRule",
+          "description": "The old (deleted) rule. Not set if a rule was moved\n(because it is the same as new_rule)."
         }
       },
-      "id": "UpdateConditionalFormatRuleResponse",
-      "description": "The result of updating a conditional format rule."
+      "id": "UpdateConditionalFormatRuleResponse"
+    },
+    "DuplicateSheetRequest": {
+      "id": "DuplicateSheetRequest",
+      "description": "Duplicates the contents of a sheet.",
+      "type": "object",
+      "properties": {
+        "newSheetName": {
+          "description": "The name of the new sheet.  If empty, a new name is chosen for you.",
+          "type": "string"
+        },
+        "sourceSheetId": {
+          "description": "The sheet to duplicate.",
+          "format": "int32",
+          "type": "integer"
+        },
+        "newSheetId": {
+          "description": "If set, the ID of the new sheet. If not set, an ID is chosen.\nIf set, the ID must not conflict with any existing sheet ID.\nIf set, it must be non-negative.",
+          "format": "int32",
+          "type": "integer"
+        },
+        "insertSheetIndex": {
+          "description": "The zero-based index where the new sheet should be inserted.\nThe index of all sheets after this are incremented.",
+          "format": "int32",
+          "type": "integer"
+        }
+      }
     },
     "ConditionValue": {
+      "description": "The value of the condition.",
       "type": "object",
       "properties": {
         "relativeDate": {
+          "description": "A relative date (based on the current date).\nValid only if the type is\nDATE_BEFORE,\nDATE_AFTER,\nDATE_ON_OR_BEFORE or\nDATE_ON_OR_AFTER.\n\nRelative dates are not supported in data validation.\nThey are supported only in conditional formatting and\nconditional filters.",
+          "type": "string",
           "enumDescriptions": [
             "Default value, do not use.",
             "The value is one year before today.",
@@ -3543,48 +1959,1636 @@
             "YESTERDAY",
             "TODAY",
             "TOMORROW"
-          ],
-          "description": "A relative date (based on the current date).\nValid only if the type is\nDATE_BEFORE,\nDATE_AFTER,\nDATE_ON_OR_BEFORE or\nDATE_ON_OR_AFTER.\n\nRelative dates are not supported in data validation.\nThey are supported only in conditional formatting and\nconditional filters.",
-          "type": "string"
+          ]
         },
         "userEnteredValue": {
           "description": "A value the condition is based on.\nThe value will be parsed as if the user typed into a cell.\nFormulas are supported (and must begin with an `=`).",
           "type": "string"
         }
       },
-      "id": "ConditionValue",
-      "description": "The value of the condition."
+      "id": "ConditionValue"
     },
-    "DuplicateSheetRequest": {
-      "description": "Duplicates the contents of a sheet.",
+    "ExtendedValue": {
+      "description": "The kinds of value that a cell in a spreadsheet can have.",
       "type": "object",
       "properties": {
-        "newSheetId": {
-          "description": "If set, the ID of the new sheet. If not set, an ID is chosen.\nIf set, the ID must not conflict with any existing sheet ID.\nIf set, it must be non-negative.",
-          "format": "int32",
-          "type": "integer"
+        "errorValue": {
+          "$ref": "ErrorValue",
+          "description": "Represents an error.\nThis field is read-only."
         },
-        "insertSheetIndex": {
-          "description": "The zero-based index where the new sheet should be inserted.\nThe index of all sheets after this are incremented.",
-          "format": "int32",
-          "type": "integer"
-        },
-        "newSheetName": {
-          "description": "The name of the new sheet.  If empty, a new name is chosen for you.",
+        "stringValue": {
+          "description": "Represents a string value.\nLeading single quotes are not included. For example, if the user typed\n`'123` into the UI, this would be represented as a `stringValue` of\n`\"123\"`.",
           "type": "string"
         },
-        "sourceSheetId": {
-          "description": "The sheet to duplicate.",
+        "boolValue": {
+          "description": "Represents a boolean value.",
+          "type": "boolean"
+        },
+        "formulaValue": {
+          "description": "Represents a formula.",
+          "type": "string"
+        },
+        "numberValue": {
+          "description": "Represents a double value.\nNote: Dates, Times and DateTimes are represented as doubles in\n\"serial number\" format.",
+          "format": "double",
+          "type": "number"
+        }
+      },
+      "id": "ExtendedValue"
+    },
+    "BandedRange": {
+      "id": "BandedRange",
+      "description": "A banded (alternating colors) range in a sheet.",
+      "type": "object",
+      "properties": {
+        "rowProperties": {
+          "$ref": "BandingProperties",
+          "description": "Properties for row bands. These properties will be applied on a row-by-row\nbasis throughout all the rows in the range. At least one of\nrow_properties or column_properties must be specified."
+        },
+        "columnProperties": {
+          "$ref": "BandingProperties",
+          "description": "Properties for column bands. These properties will be applied on a column-\nby-column basis throughout all the columns in the range. At least one of\nrow_properties or column_properties must be specified."
+        },
+        "range": {
+          "$ref": "GridRange",
+          "description": "The range over which these properties are applied."
+        },
+        "bandedRangeId": {
+          "description": "The id of the banded range.",
+          "format": "int32",
+          "type": "integer"
+        }
+      }
+    },
+    "BatchClearValuesResponse": {
+      "id": "BatchClearValuesResponse",
+      "description": "The response when updating a range of values in a spreadsheet.",
+      "type": "object",
+      "properties": {
+        "spreadsheetId": {
+          "description": "The spreadsheet the updates were applied to.",
+          "type": "string"
+        },
+        "clearedRanges": {
+          "description": "The ranges that were cleared, in A1 notation.\n(If the requests were for an unbounded range or a ranger larger\n than the bounds of the sheet, this will be the actual ranges\n that were cleared, bounded to the sheet's limits.)",
+          "type": "array",
+          "items": {
+            "type": "string"
+          }
+        }
+      }
+    },
+    "Spreadsheet": {
+      "id": "Spreadsheet",
+      "description": "Resource that represents a spreadsheet.",
+      "type": "object",
+      "properties": {
+        "properties": {
+          "description": "Overall properties of a spreadsheet.",
+          "$ref": "SpreadsheetProperties"
+        },
+        "spreadsheetId": {
+          "description": "The ID of the spreadsheet.\nThis field is read-only.",
+          "type": "string"
+        },
+        "sheets": {
+          "description": "The sheets that are part of a spreadsheet.",
+          "type": "array",
+          "items": {
+            "$ref": "Sheet"
+          }
+        },
+        "namedRanges": {
+          "description": "The named ranges defined in a spreadsheet.",
+          "type": "array",
+          "items": {
+            "$ref": "NamedRange"
+          }
+        },
+        "spreadsheetUrl": {
+          "description": "The url of the spreadsheet.\nThis field is read-only.",
+          "type": "string"
+        }
+      }
+    },
+    "AddChartRequest": {
+      "description": "Adds a chart to a sheet in the spreadsheet.",
+      "type": "object",
+      "properties": {
+        "chart": {
+          "$ref": "EmbeddedChart",
+          "description": "The chart that should be added to the spreadsheet, including the position\nwhere it should be placed. The chartId\nfield is optional; if one is not set, an id will be randomly generated. (It\nis an error to specify the ID of a chart that already exists.)"
+        }
+      },
+      "id": "AddChartRequest"
+    },
+    "UpdateProtectedRangeRequest": {
+      "description": "Updates an existing protected range with the specified\nprotectedRangeId.",
+      "type": "object",
+      "properties": {
+        "protectedRange": {
+          "$ref": "ProtectedRange",
+          "description": "The protected range to update with the new properties."
+        },
+        "fields": {
+          "description": "The fields that should be updated.  At least one field must be specified.\nThe root `protectedRange` is implied and should not be specified.\nA single `\"*\"` can be used as short-hand for listing every field.",
+          "format": "google-fieldmask",
+          "type": "string"
+        }
+      },
+      "id": "UpdateProtectedRangeRequest"
+    },
+    "TextFormat": {
+      "id": "TextFormat",
+      "description": "The format of a run of text in a cell.\nAbsent values indicate that the field isn't specified.",
+      "type": "object",
+      "properties": {
+        "underline": {
+          "description": "True if the text is underlined.",
+          "type": "boolean"
+        },
+        "foregroundColor": {
+          "$ref": "Color",
+          "description": "The foreground color of the text."
+        },
+        "bold": {
+          "description": "True if the text is bold.",
+          "type": "boolean"
+        },
+        "fontFamily": {
+          "description": "The font family.",
+          "type": "string"
+        },
+        "italic": {
+          "description": "True if the text is italicized.",
+          "type": "boolean"
+        },
+        "strikethrough": {
+          "description": "True if the text has a strikethrough.",
+          "type": "boolean"
+        },
+        "fontSize": {
+          "description": "The size of the font.",
+          "format": "int32",
+          "type": "integer"
+        }
+      }
+    },
+    "AddSheetResponse": {
+      "id": "AddSheetResponse",
+      "description": "The result of adding a sheet.",
+      "type": "object",
+      "properties": {
+        "properties": {
+          "description": "The properties of the newly added sheet.",
+          "$ref": "SheetProperties"
+        }
+      }
+    },
+    "AddFilterViewResponse": {
+      "description": "The result of adding a filter view.",
+      "type": "object",
+      "properties": {
+        "filter": {
+          "description": "The newly added filter view.",
+          "$ref": "FilterView"
+        }
+      },
+      "id": "AddFilterViewResponse"
+    },
+    "IterativeCalculationSettings": {
+      "description": "Settings to control how circular dependencies are resolved with iterative\ncalculation.",
+      "type": "object",
+      "properties": {
+        "convergenceThreshold": {
+          "description": "When iterative calculation is enabled and successive results differ by\nless than this threshold value, the calculation rounds stop.",
+          "format": "double",
+          "type": "number"
+        },
+        "maxIterations": {
+          "description": "When iterative calculation is enabled, the maximum number of calculation\nrounds to perform.",
           "format": "int32",
           "type": "integer"
         }
       },
-      "id": "DuplicateSheetRequest"
+      "id": "IterativeCalculationSettings"
+    },
+    "OverlayPosition": {
+      "description": "The location an object is overlaid on top of a grid.",
+      "type": "object",
+      "properties": {
+        "widthPixels": {
+          "description": "The width of the object, in pixels. Defaults to 600.",
+          "format": "int32",
+          "type": "integer"
+        },
+        "offsetXPixels": {
+          "description": "The horizontal offset, in pixels, that the object is offset\nfrom the anchor cell.",
+          "format": "int32",
+          "type": "integer"
+        },
+        "anchorCell": {
+          "$ref": "GridCoordinate",
+          "description": "The cell the object is anchored to."
+        },
+        "offsetYPixels": {
+          "description": "The vertical offset, in pixels, that the object is offset\nfrom the anchor cell.",
+          "format": "int32",
+          "type": "integer"
+        },
+        "heightPixels": {
+          "description": "The height of the object, in pixels. Defaults to 371.",
+          "format": "int32",
+          "type": "integer"
+        }
+      },
+      "id": "OverlayPosition"
+    },
+    "SpreadsheetProperties": {
+      "id": "SpreadsheetProperties",
+      "description": "Properties of a spreadsheet.",
+      "type": "object",
+      "properties": {
+        "autoRecalc": {
+          "enumDescriptions": [
+            "Default value. This value must not be used.",
+            "Volatile functions are updated on every change.",
+            "Volatile functions are updated on every change and every minute.",
+            "Volatile functions are updated on every change and hourly."
+          ],
+          "enum": [
+            "RECALCULATION_INTERVAL_UNSPECIFIED",
+            "ON_CHANGE",
+            "MINUTE",
+            "HOUR"
+          ],
+          "description": "The amount of time to wait before volatile functions are recalculated.",
+          "type": "string"
+        },
+        "defaultFormat": {
+          "description": "The default format of all cells in the spreadsheet.\nCellData.effectiveFormat will not be set if the\ncell's format is equal to this default format.\nThis field is read-only.",
+          "$ref": "CellFormat"
+        },
+        "timeZone": {
+          "description": "The time zone of the spreadsheet, in CLDR format such as\n`America/New_York`. If the time zone isn't recognized, this may\nbe a custom time zone such as `GMT-07:00`.",
+          "type": "string"
+        },
+        "title": {
+          "description": "The title of the spreadsheet.",
+          "type": "string"
+        },
+        "locale": {
+          "description": "The locale of the spreadsheet in one of the following formats:\n\n* an ISO 639-1 language code such as `en`\n\n* an ISO 639-2 language code such as `fil`, if no 639-1 code exists\n\n* a combination of the ISO language code and country code, such as `en_US`\n\nNote: when updating this field, not all locales/languages are supported.",
+          "type": "string"
+        },
+        "iterativeCalculationSettings": {
+          "$ref": "IterativeCalculationSettings",
+          "description": "Determines whether and how circular references are resolved with iterative\ncalculation.  Absence of this field means that circular references will\nresult in calculation errors."
+        }
+      }
+    },
+    "RepeatCellRequest": {
+      "description": "Updates all cells in the range to the values in the given Cell object.\nOnly the fields listed in the fields field are updated; others are\nunchanged.\n\nIf writing a cell with a formula, the formula's ranges will automatically\nincrement for each field in the range.\nFor example, if writing a cell with formula `=A1` into range B2:C4,\nB2 would be `=A1`, B3 would be `=A2`, B4 would be `=A3`,\nC2 would be `=B1`, C3 would be `=B2`, C4 would be `=B3`.\n\nTo keep the formula's ranges static, use the `$` indicator.\nFor example, use the formula `=$A$1` to prevent both the row and the\ncolumn from incrementing.",
+      "type": "object",
+      "properties": {
+        "range": {
+          "$ref": "GridRange",
+          "description": "The range to repeat the cell in."
+        },
+        "fields": {
+          "description": "The fields that should be updated.  At least one field must be specified.\nThe root `cell` is implied and should not be specified.\nA single `\"*\"` can be used as short-hand for listing every field.",
+          "format": "google-fieldmask",
+          "type": "string"
+        },
+        "cell": {
+          "$ref": "CellData",
+          "description": "The data to write."
+        }
+      },
+      "id": "RepeatCellRequest"
+    },
+    "AddChartResponse": {
+      "id": "AddChartResponse",
+      "description": "The result of adding a chart to a spreadsheet.",
+      "type": "object",
+      "properties": {
+        "chart": {
+          "$ref": "EmbeddedChart",
+          "description": "The newly added chart."
+        }
+      }
+    },
+    "InsertDimensionRequest": {
+      "description": "Inserts rows or columns in a sheet at a particular index.",
+      "type": "object",
+      "properties": {
+        "range": {
+          "$ref": "DimensionRange",
+          "description": "The dimensions to insert.  Both the start and end indexes must be bounded."
+        },
+        "inheritFromBefore": {
+          "description": "Whether dimension properties should be extended from the dimensions\nbefore or after the newly inserted dimensions.\nTrue to inherit from the dimensions before (in which case the start\nindex must be greater than 0), and false to inherit from the dimensions\nafter.\n\nFor example, if row index 0 has red background and row index 1\nhas a green background, then inserting 2 rows at index 1 can inherit\neither the green or red background.  If `inheritFromBefore` is true,\nthe two new rows will be red (because the row before the insertion point\nwas red), whereas if `inheritFromBefore` is false, the two new rows will\nbe green (because the row after the insertion point was green).",
+          "type": "boolean"
+        }
+      },
+      "id": "InsertDimensionRequest"
+    },
+    "UpdateSpreadsheetPropertiesRequest": {
+      "description": "Updates properties of a spreadsheet.",
+      "type": "object",
+      "properties": {
+        "fields": {
+          "description": "The fields that should be updated.  At least one field must be specified.\nThe root 'properties' is implied and should not be specified.\nA single `\"*\"` can be used as short-hand for listing every field.",
+          "format": "google-fieldmask",
+          "type": "string"
+        },
+        "properties": {
+          "description": "The properties to update.",
+          "$ref": "SpreadsheetProperties"
+        }
+      },
+      "id": "UpdateSpreadsheetPropertiesRequest"
+    },
+    "ProtectedRange": {
+      "id": "ProtectedRange",
+      "description": "A protected range.",
+      "type": "object",
+      "properties": {
+        "warningOnly": {
+          "description": "True if this protected range will show a warning when editing.\nWarning-based protection means that every user can edit data in the\nprotected range, except editing will prompt a warning asking the user\nto confirm the edit.\n\nWhen writing: if this field is true, then editors is ignored.\nAdditionally, if this field is changed from true to false and the\n`editors` field is not set (nor included in the field mask), then\nthe editors will be set to all the editors in the document.",
+          "type": "boolean"
+        },
+        "requestingUserCanEdit": {
+          "description": "True if the user who requested this protected range can edit the\nprotected area.\nThis field is read-only.",
+          "type": "boolean"
+        },
+        "editors": {
+          "$ref": "Editors",
+          "description": "The users and groups with edit access to the protected range.\nThis field is only visible to users with edit access to the protected\nrange and the document.\nEditors are not supported with warning_only protection."
+        },
+        "range": {
+          "$ref": "GridRange",
+          "description": "The range that is being protected.\nThe range may be fully unbounded, in which case this is considered\na protected sheet.\n\nWhen writing, only one of range or named_range_id\nmay be set."
+        },
+        "description": {
+          "description": "The description of this protected range.",
+          "type": "string"
+        },
+        "unprotectedRanges": {
+          "description": "The list of unprotected ranges within a protected sheet.\nUnprotected ranges are only supported on protected sheets.",
+          "type": "array",
+          "items": {
+            "$ref": "GridRange"
+          }
+        },
+        "namedRangeId": {
+          "description": "The named range this protected range is backed by, if any.\n\nWhen writing, only one of range or named_range_id\nmay be set.",
+          "type": "string"
+        },
+        "protectedRangeId": {
+          "description": "The ID of the protected range.\nThis field is read-only.",
+          "format": "int32",
+          "type": "integer"
+        }
+      }
+    },
+    "BatchUpdateValuesRequest": {
+      "id": "BatchUpdateValuesRequest",
+      "description": "The request for updating more than one range of values in a spreadsheet.",
+      "type": "object",
+      "properties": {
+        "responseValueRenderOption": {
+          "enumDescriptions": [
+            "Values will be calculated & formatted in the reply according to the\ncell's formatting.  Formatting is based on the spreadsheet's locale,\nnot the requesting user's locale.\nFor example, if `A1` is `1.23` and `A2` is `=A1` and formatted as currency,\nthen `A2` would return `\"$1.23\"`.",
+            "Values will be calculated, but not formatted in the reply.\nFor example, if `A1` is `1.23` and `A2` is `=A1` and formatted as currency,\nthen `A2` would return the number `1.23`.",
+            "Values will not be calculated.  The reply will include the formulas.\nFor example, if `A1` is `1.23` and `A2` is `=A1` and formatted as currency,\nthen A2 would return `\"=A1\"`."
+          ],
+          "enum": [
+            "FORMATTED_VALUE",
+            "UNFORMATTED_VALUE",
+            "FORMULA"
+          ],
+          "description": "Determines how values in the response should be rendered.\nThe default render option is ValueRenderOption.FORMATTED_VALUE.",
+          "type": "string"
+        },
+        "includeValuesInResponse": {
+          "description": "Determines if the update response should include the values\nof the cells that were updated. By default, responses\ndo not include the updated values. The `updatedData` field within\neach of the BatchUpdateValuesResponse.responses will contain\nthe updated values. If the range to write was larger than than the range\nactually written, the response will include all values in the requested\nrange (excluding trailing empty rows and columns).",
+          "type": "boolean"
+        },
+        "valueInputOption": {
+          "enumDescriptions": [
+            "Default input value. This value must not be used.",
+            "The values the user has entered will not be parsed and will be stored\nas-is.",
+            "The values will be parsed as if the user typed them into the UI.\nNumbers will stay as numbers, but strings may be converted to numbers,\ndates, etc. following the same rules that are applied when entering\ntext into a cell via the Google Sheets UI."
+          ],
+          "enum": [
+            "INPUT_VALUE_OPTION_UNSPECIFIED",
+            "RAW",
+            "USER_ENTERED"
+          ],
+          "description": "How the input data should be interpreted.",
+          "type": "string"
+        },
+        "data": {
+          "description": "The new values to apply to the spreadsheet.",
+          "type": "array",
+          "items": {
+            "$ref": "ValueRange"
+          }
+        },
+        "responseDateTimeRenderOption": {
+          "enumDescriptions": [
+            "Instructs date, time, datetime, and duration fields to be output\nas doubles in \"serial number\" format, as popularized by Lotus 1-2-3.\nThe whole number portion of the value (left of the decimal) counts\nthe days since December 30th 1899. The fractional portion (right of\nthe decimal) counts the time as a fraction of the day. For example,\nJanuary 1st 1900 at noon would be 2.5, 2 because it's 2 days after\nDecember 30st 1899, and .5 because noon is half a day.  February 1st\n1900 at 3pm would be 33.625. This correctly treats the year 1900 as\nnot a leap year.",
+            "Instructs date, time, datetime, and duration fields to be output\nas strings in their given number format (which is dependent\non the spreadsheet locale)."
+          ],
+          "enum": [
+            "SERIAL_NUMBER",
+            "FORMATTED_STRING"
+          ],
+          "description": "Determines how dates, times, and durations in the response should be\nrendered. This is ignored if response_value_render_option is\nFORMATTED_VALUE.\nThe default dateTime render option is [DateTimeRenderOption.SERIAL_NUMBER].",
+          "type": "string"
+        }
+      }
+    },
+    "DimensionProperties": {
+      "id": "DimensionProperties",
+      "description": "Properties about a dimension.",
+      "type": "object",
+      "properties": {
+        "pixelSize": {
+          "description": "The height (if a row) or width (if a column) of the dimension in pixels.",
+          "format": "int32",
+          "type": "integer"
+        },
+        "hiddenByFilter": {
+          "description": "True if this dimension is being filtered.\nThis field is read-only.",
+          "type": "boolean"
+        },
+        "hiddenByUser": {
+          "description": "True if this dimension is explicitly hidden.",
+          "type": "boolean"
+        }
+      }
+    },
+    "NamedRange": {
+      "description": "A named range.",
+      "type": "object",
+      "properties": {
+        "namedRangeId": {
+          "description": "The ID of the named range.",
+          "type": "string"
+        },
+        "range": {
+          "$ref": "GridRange",
+          "description": "The range this represents."
+        },
+        "name": {
+          "description": "The name of the named range.",
+          "type": "string"
+        }
+      },
+      "id": "NamedRange"
+    },
+    "DimensionRange": {
+      "id": "DimensionRange",
+      "description": "A range along a single dimension on a sheet.\nAll indexes are zero-based.\nIndexes are half open: the start index is inclusive\nand the end index is exclusive.\nMissing indexes indicate the range is unbounded on that side.",
+      "type": "object",
+      "properties": {
+        "dimension": {
+          "description": "The dimension of the span.",
+          "type": "string",
+          "enumDescriptions": [
+            "The default value, do not use.",
+            "Operates on the rows of a sheet.",
+            "Operates on the columns of a sheet."
+          ],
+          "enum": [
+            "DIMENSION_UNSPECIFIED",
+            "ROWS",
+            "COLUMNS"
+          ]
+        },
+        "startIndex": {
+          "description": "The start (inclusive) of the span, or not set if unbounded.",
+          "format": "int32",
+          "type": "integer"
+        },
+        "endIndex": {
+          "description": "The end (exclusive) of the span, or not set if unbounded.",
+          "format": "int32",
+          "type": "integer"
+        },
+        "sheetId": {
+          "description": "The sheet this span is on.",
+          "format": "int32",
+          "type": "integer"
+        }
+      }
+    },
+    "CutPasteRequest": {
+      "description": "Moves data from the source to the destination.",
+      "type": "object",
+      "properties": {
+        "source": {
+          "description": "The source data to cut.",
+          "$ref": "GridRange"
+        },
+        "pasteType": {
+          "enumDescriptions": [
+            "Paste values, formulas, formats, and merges.",
+            "Paste the values ONLY without formats, formulas, or merges.",
+            "Paste the format and data validation only.",
+            "Like PASTE_NORMAL but without borders.",
+            "Paste the formulas only.",
+            "Paste the data validation only.",
+            "Paste the conditional formatting rules only."
+          ],
+          "enum": [
+            "PASTE_NORMAL",
+            "PASTE_VALUES",
+            "PASTE_FORMAT",
+            "PASTE_NO_BORDERS",
+            "PASTE_FORMULA",
+            "PASTE_DATA_VALIDATION",
+            "PASTE_CONDITIONAL_FORMATTING"
+          ],
+          "description": "What kind of data to paste.  All the source data will be cut, regardless\nof what is pasted.",
+          "type": "string"
+        },
+        "destination": {
+          "description": "The top-left coordinate where the data should be pasted.",
+          "$ref": "GridCoordinate"
+        }
+      },
+      "id": "CutPasteRequest"
+    },
+    "Borders": {
+      "id": "Borders",
+      "description": "The borders of the cell.",
+      "type": "object",
+      "properties": {
+        "right": {
+          "$ref": "Border",
+          "description": "The right border of the cell."
+        },
+        "bottom": {
+          "$ref": "Border",
+          "description": "The bottom border of the cell."
+        },
+        "top": {
+          "description": "The top border of the cell.",
+          "$ref": "Border"
+        },
+        "left": {
+          "description": "The left border of the cell.",
+          "$ref": "Border"
+        }
+      }
+    },
+    "BasicChartSeries": {
+      "description": "A single series of data in a chart.\nFor example, if charting stock prices over time, multiple series may exist,\none for the \"Open Price\", \"High Price\", \"Low Price\" and \"Close Price\".",
+      "type": "object",
+      "properties": {
+        "targetAxis": {
+          "enumDescriptions": [
+            "Default value, do not use.",
+            "The axis rendered at the bottom of a chart.\nFor most charts, this is the standard major axis.\nFor bar charts, this is a minor axis.",
+            "The axis rendered at the left of a chart.\nFor most charts, this is a minor axis.\nFor bar charts, this is the standard major axis.",
+            "The axis rendered at the right of a chart.\nFor most charts, this is a minor axis.\nFor bar charts, this is an unusual major axis."
+          ],
+          "enum": [
+            "BASIC_CHART_AXIS_POSITION_UNSPECIFIED",
+            "BOTTOM_AXIS",
+            "LEFT_AXIS",
+            "RIGHT_AXIS"
+          ],
+          "description": "The minor axis that will specify the range of values for this series.\nFor example, if charting stocks over time, the \"Volume\" series\nmay want to be pinned to the right with the prices pinned to the left,\nbecause the scale of trading volume is different than the scale of\nprices.\nIt is an error to specify an axis that isn't a valid minor axis\nfor the chart's type.",
+          "type": "string"
+        },
+        "series": {
+          "description": "The data being visualized in this chart series.",
+          "$ref": "ChartData"
+        },
+        "type": {
+          "enumDescriptions": [
+            "Default value, do not use.",
+            "A \u003ca href=\"/chart/interactive/docs/gallery/barchart\"\u003ebar chart\u003c/a\u003e.",
+            "A \u003ca href=\"/chart/interactive/docs/gallery/linechart\"\u003eline chart\u003c/a\u003e.",
+            "An \u003ca href=\"/chart/interactive/docs/gallery/areachart\"\u003earea chart\u003c/a\u003e.",
+            "A \u003ca href=\"/chart/interactive/docs/gallery/columnchart\"\u003ecolumn chart\u003c/a\u003e.",
+            "A \u003ca href=\"/chart/interactive/docs/gallery/scatterchart\"\u003escatter chart\u003c/a\u003e.",
+            "A \u003ca href=\"/chart/interactive/docs/gallery/combochart\"\u003ecombo chart\u003c/a\u003e."
+          ],
+          "enum": [
+            "BASIC_CHART_TYPE_UNSPECIFIED",
+            "BAR",
+            "LINE",
+            "AREA",
+            "COLUMN",
+            "SCATTER",
+            "COMBO"
+          ],
+          "description": "The type of this series. Valid only if the\nchartType is\nCOMBO.\nDifferent types will change the way the series is visualized.\nOnly LINE, AREA,\nand COLUMN are supported.",
+          "type": "string"
+        }
+      },
+      "id": "BasicChartSeries"
+    },
+    "AutoResizeDimensionsRequest": {
+      "id": "AutoResizeDimensionsRequest",
+      "description": "Automatically resizes one or more dimensions based on the contents\nof the cells in that dimension.",
+      "type": "object",
+      "properties": {
+        "dimensions": {
+          "description": "The dimensions to automatically resize.\nOnly COLUMNS are supported.",
+          "$ref": "DimensionRange"
+        }
+      }
+    },
+    "UpdateBordersRequest": {
+      "description": "Updates the borders of a range.\nIf a field is not set in the request, that means the border remains as-is.\nFor example, with two subsequent UpdateBordersRequest:\n\n 1. range: A1:A5 `{ top: RED, bottom: WHITE }`\n 2. range: A1:A5 `{ left: BLUE }`\n\nThat would result in A1:A5 having a borders of\n`{ top: RED, bottom: WHITE, left: BLUE }`.\nIf you want to clear a border, explicitly set the style to\nNONE.",
+      "type": "object",
+      "properties": {
+        "right": {
+          "description": "The border to put at the right of the range.",
+          "$ref": "Border"
+        },
+        "range": {
+          "description": "The range whose borders should be updated.",
+          "$ref": "GridRange"
+        },
+        "innerHorizontal": {
+          "description": "The horizontal border to put within the range.",
+          "$ref": "Border"
+        },
+        "top": {
+          "$ref": "Border",
+          "description": "The border to put at the top of the range."
+        },
+        "left": {
+          "$ref": "Border",
+          "description": "The border to put at the left of the range."
+        },
+        "bottom": {
+          "description": "The border to put at the bottom of the range.",
+          "$ref": "Border"
+        },
+        "innerVertical": {
+          "$ref": "Border",
+          "description": "The vertical border to put within the range."
+        }
+      },
+      "id": "UpdateBordersRequest"
+    },
+    "CellFormat": {
+      "id": "CellFormat",
+      "description": "The format of a cell.",
+      "type": "object",
+      "properties": {
+        "borders": {
+          "description": "The borders of the cell.",
+          "$ref": "Borders"
+        },
+        "textDirection": {
+          "description": "The direction of the text in the cell.",
+          "type": "string",
+          "enumDescriptions": [
+            "The text direction is not specified. Do not use this.",
+            "The text direction of left-to-right was set by the user.",
+            "The text direction of right-to-left was set by the user."
+          ],
+          "enum": [
+            "TEXT_DIRECTION_UNSPECIFIED",
+            "LEFT_TO_RIGHT",
+            "RIGHT_TO_LEFT"
+          ]
+        },
+        "textRotation": {
+          "description": "The rotation applied to text in a cell",
+          "$ref": "TextRotation"
+        },
+        "wrapStrategy": {
+          "description": "The wrap strategy for the value in the cell.",
+          "type": "string",
+          "enumDescriptions": [
+            "The default value, do not use.",
+            "Lines that are longer than the cell width will be written in the next\ncell over, so long as that cell is empty. If the next cell over is\nnon-empty, this behaves the same as CLIP. The text will never wrap\nto the next line unless the user manually inserts a new line.\nExample:\n\n    | First sentence. |\n    | Manual newline that is very long. \u003c- Text continues into next cell\n    | Next newline.   |",
+            "This wrap strategy represents the old Google Sheets wrap strategy where\nwords that are longer than a line are clipped rather than broken. This\nstrategy is not supported on all platforms and is being phased out.\nExample:\n\n    | Cell has a |\n    | loooooooooo| \u003c- Word is clipped.\n    | word.      |",
+            "Lines that are longer than the cell width will be clipped.\nThe text will never wrap to the next line unless the user manually\ninserts a new line.\nExample:\n\n    | First sentence. |\n    | Manual newline t| \u003c- Text is clipped\n    | Next newline.   |",
+            "Words that are longer than a line are wrapped at the character level\nrather than clipped.\nExample:\n\n    | Cell has a |\n    | loooooooooo| \u003c- Word is broken.\n    | ong word.  |"
+          ],
+          "enum": [
+            "WRAP_STRATEGY_UNSPECIFIED",
+            "OVERFLOW_CELL",
+            "LEGACY_WRAP",
+            "CLIP",
+            "WRAP"
+          ]
+        },
+        "numberFormat": {
+          "$ref": "NumberFormat",
+          "description": "A format describing how number values should be represented to the user."
+        },
+        "horizontalAlignment": {
+          "enumDescriptions": [
+            "The horizontal alignment is not specified. Do not use this.",
+            "The text is explicitly aligned to the left of the cell.",
+            "The text is explicitly aligned to the center of the cell.",
+            "The text is explicitly aligned to the right of the cell."
+          ],
+          "enum": [
+            "HORIZONTAL_ALIGN_UNSPECIFIED",
+            "LEFT",
+            "CENTER",
+            "RIGHT"
+          ],
+          "description": "The horizontal alignment of the value in the cell.",
+          "type": "string"
+        },
+        "hyperlinkDisplayType": {
+          "description": "How a hyperlink, if it exists, should be displayed in the cell.",
+          "type": "string",
+          "enumDescriptions": [
+            "The default value: the hyperlink is rendered. Do not use this.",
+            "A hyperlink should be explicitly rendered.",
+            "A hyperlink should not be rendered."
+          ],
+          "enum": [
+            "HYPERLINK_DISPLAY_TYPE_UNSPECIFIED",
+            "LINKED",
+            "PLAIN_TEXT"
+          ]
+        },
+        "textFormat": {
+          "$ref": "TextFormat",
+          "description": "The format of the text in the cell (unless overridden by a format run)."
+        },
+        "backgroundColor": {
+          "description": "The background color of the cell.",
+          "$ref": "Color"
+        },
+        "verticalAlignment": {
+          "description": "The vertical alignment of the value in the cell.",
+          "type": "string",
+          "enumDescriptions": [
+            "The vertical alignment is not specified.  Do not use this.",
+            "The text is explicitly aligned to the top of the cell.",
+            "The text is explicitly aligned to the middle of the cell.",
+            "The text is explicitly aligned to the bottom of the cell."
+          ],
+          "enum": [
+            "VERTICAL_ALIGN_UNSPECIFIED",
+            "TOP",
+            "MIDDLE",
+            "BOTTOM"
+          ]
+        },
+        "padding": {
+          "description": "The padding of the cell.",
+          "$ref": "Padding"
+        }
+      }
+    },
+    "ClearValuesResponse": {
+      "id": "ClearValuesResponse",
+      "description": "The response when clearing a range of values in a spreadsheet.",
+      "type": "object",
+      "properties": {
+        "spreadsheetId": {
+          "description": "The spreadsheet the updates were applied to.",
+          "type": "string"
+        },
+        "clearedRange": {
+          "description": "The range (in A1 notation) that was cleared.\n(If the request was for an unbounded range or a ranger larger\n than the bounds of the sheet, this will be the actual range\n that was cleared, bounded to the sheet's limits.)",
+          "type": "string"
+        }
+      }
+    },
+    "DeleteConditionalFormatRuleRequest": {
+      "description": "Deletes a conditional format rule at the given index.\nAll subsequent rules' indexes are decremented.",
+      "type": "object",
+      "properties": {
+        "index": {
+          "description": "The zero-based index of the rule to be deleted.",
+          "format": "int32",
+          "type": "integer"
+        },
+        "sheetId": {
+          "description": "The sheet the rule is being deleted from.",
+          "format": "int32",
+          "type": "integer"
+        }
+      },
+      "id": "DeleteConditionalFormatRuleRequest"
+    },
+    "AddBandingResponse": {
+      "description": "The result of adding a banded range.",
+      "type": "object",
+      "properties": {
+        "bandedRange": {
+          "description": "The banded range that was added.",
+          "$ref": "BandedRange"
+        }
+      },
+      "id": "AddBandingResponse"
+    },
+    "DeleteNamedRangeRequest": {
+      "description": "Removes the named range with the given ID from the spreadsheet.",
+      "type": "object",
+      "properties": {
+        "namedRangeId": {
+          "description": "The ID of the named range to delete.",
+          "type": "string"
+        }
+      },
+      "id": "DeleteNamedRangeRequest"
+    },
+    "ChartData": {
+      "id": "ChartData",
+      "description": "The data included in a domain or series.",
+      "type": "object",
+      "properties": {
+        "sourceRange": {
+          "description": "The source ranges of the data.",
+          "$ref": "ChartSourceRange"
+        }
+      }
+    },
+    "BatchGetValuesResponse": {
+      "description": "The response when retrieving more than one range of values in a spreadsheet.",
+      "type": "object",
+      "properties": {
+        "spreadsheetId": {
+          "description": "The ID of the spreadsheet the data was retrieved from.",
+          "type": "string"
+        },
+        "valueRanges": {
+          "description": "The requested values. The order of the ValueRanges is the same as the\norder of the requested ranges.",
+          "type": "array",
+          "items": {
+            "$ref": "ValueRange"
+          }
+        }
+      },
+      "id": "BatchGetValuesResponse"
+    },
+    "UpdateBandingRequest": {
+      "description": "Updates properties of the supplied banded range.",
+      "type": "object",
+      "properties": {
+        "fields": {
+          "description": "The fields that should be updated.  At least one field must be specified.\nThe root `bandedRange` is implied and should not be specified.\nA single `\"*\"` can be used as short-hand for listing every field.",
+          "format": "google-fieldmask",
+          "type": "string"
+        },
+        "bandedRange": {
+          "description": "The banded range to update with the new properties.",
+          "$ref": "BandedRange"
+        }
+      },
+      "id": "UpdateBandingRequest"
+    },
+    "Color": {
+      "id": "Color",
+      "description": "Represents a color in the RGBA color space. This representation is designed\nfor simplicity of conversion to/from color representations in various\nlanguages over compactness; for example, the fields of this representation\ncan be trivially provided to the constructor of \"java.awt.Color\" in Java; it\ncan also be trivially provided to UIColor's \"+colorWithRed:green:blue:alpha\"\nmethod in iOS; and, with just a little work, it can be easily formatted into\na CSS \"rgba()\" string in JavaScript, as well. Here are some examples:\n\nExample (Java):\n\n     import com.google.type.Color;\n\n     // ...\n     public static java.awt.Color fromProto(Color protocolor) {\n       float alpha = protocolor.hasAlpha()\n           ? protocolor.getAlpha().getValue()\n           : 1.0;\n\n       return new java.awt.Color(\n           protocolor.getRed(),\n           protocolor.getGreen(),\n           protocolor.getBlue(),\n           alpha);\n     }\n\n     public static Color toProto(java.awt.Color color) {\n       float red = (float) color.getRed();\n       float green = (float) color.getGreen();\n       float blue = (float) color.getBlue();\n       float denominator = 255.0;\n       Color.Builder resultBuilder =\n           Color\n               .newBuilder()\n               .setRed(red / denominator)\n               .setGreen(green / denominator)\n               .setBlue(blue / denominator);\n       int alpha = color.getAlpha();\n       if (alpha != 255) {\n         result.setAlpha(\n             FloatValue\n                 .newBuilder()\n                 .setValue(((float) alpha) / denominator)\n                 .build());\n       }\n       return resultBuilder.build();\n     }\n     // ...\n\nExample (iOS / Obj-C):\n\n     // ...\n     static UIColor* fromProto(Color* protocolor) {\n        float red = [protocolor red];\n        float green = [protocolor green];\n        float blue = [protocolor blue];\n        FloatValue* alpha_wrapper = [protocolor alpha];\n        float alpha = 1.0;\n        if (alpha_wrapper != nil) {\n          alpha = [alpha_wrapper value];\n        }\n        return [UIColor colorWithRed:red green:green blue:blue alpha:alpha];\n     }\n\n     static Color* toProto(UIColor* color) {\n         CGFloat red, green, blue, alpha;\n         if (![color getRed:&red green:&green blue:&blue alpha:&alpha]) {\n           return nil;\n         }\n         Color* result = [Color alloc] init];\n         [result setRed:red];\n         [result setGreen:green];\n         [result setBlue:blue];\n         if (alpha \u003c= 0.9999) {\n           [result setAlpha:floatWrapperWithValue(alpha)];\n         }\n         [result autorelease];\n         return result;\n    }\n    // ...\n\n Example (JavaScript):\n\n    // ...\n\n    var protoToCssColor = function(rgb_color) {\n       var redFrac = rgb_color.red || 0.0;\n       var greenFrac = rgb_color.green || 0.0;\n       var blueFrac = rgb_color.blue || 0.0;\n       var red = Math.floor(redFrac * 255);\n       var green = Math.floor(greenFrac * 255);\n       var blue = Math.floor(blueFrac * 255);\n\n       if (!('alpha' in rgb_color)) {\n          return rgbToCssColor_(red, green, blue);\n       }\n\n       var alphaFrac = rgb_color.alpha.value || 0.0;\n       var rgbParams = [red, green, blue].join(',');\n       return ['rgba(', rgbParams, ',', alphaFrac, ')'].join('');\n    };\n\n    var rgbToCssColor_ = function(red, green, blue) {\n      var rgbNumber = new Number((red \u003c\u003c 16) | (green \u003c\u003c 8) | blue);\n      var hexString = rgbNumber.toString(16);\n      var missingZeros = 6 - hexString.length;\n      var resultBuilder = ['#'];\n      for (var i = 0; i \u003c missingZeros; i++) {\n         resultBuilder.push('0');\n      }\n      resultBuilder.push(hexString);\n      return resultBuilder.join('');\n    };\n\n    // ...",
+      "type": "object",
+      "properties": {
+        "red": {
+          "description": "The amount of red 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"
+        },
+        "blue": {
+          "description": "The amount of blue in the color as a value in the interval [0, 1].",
+          "format": "float",
+          "type": "number"
+        },
+        "alpha": {
+          "description": "The fraction of this color that should be applied to the pixel. That is,\nthe final pixel color is defined by the equation:\n\n  pixel color = alpha * (this color) + (1.0 - alpha) * (background color)\n\nThis means that a value of 1.0 corresponds to a solid color, whereas\na value of 0.0 corresponds to a completely transparent color. This\nuses a wrapper message rather than a simple float scalar so that it is\npossible to distinguish between a default value and the value being unset.\nIf omitted, this color object is to be rendered as a solid color\n(as if the alpha value had been explicitly given with a value of 1.0).",
+          "format": "float",
+          "type": "number"
+        }
+      }
+    },
+    "PivotGroup": {
+      "id": "PivotGroup",
+      "description": "A single grouping (either row or column) in a pivot table.",
+      "type": "object",
+      "properties": {
+        "sortOrder": {
+          "enumDescriptions": [
+            "Default value, do not use this.",
+            "Sort ascending.",
+            "Sort descending."
+          ],
+          "enum": [
+            "SORT_ORDER_UNSPECIFIED",
+            "ASCENDING",
+            "DESCENDING"
+          ],
+          "description": "The order the values in this group should be sorted.",
+          "type": "string"
+        },
+        "valueBucket": {
+          "$ref": "PivotGroupSortValueBucket",
+          "description": "The bucket of the opposite pivot group to sort by.\nIf not specified, sorting is alphabetical by this group's values."
+        },
+        "sourceColumnOffset": {
+          "description": "The column offset of the source range that this grouping is based on.\n\nFor example, if the source was `C10:E15`, a `sourceColumnOffset` of `0`\nmeans this group refers to column `C`, whereas the offset `1` would refer\nto column `D`.",
+          "format": "int32",
+          "type": "integer"
+        },
+        "showTotals": {
+          "description": "True if the pivot table should include the totals for this grouping.",
+          "type": "boolean"
+        },
+        "valueMetadata": {
+          "description": "Metadata about values in the grouping.",
+          "type": "array",
+          "items": {
+            "$ref": "PivotGroupValueMetadata"
+          }
+        }
+      }
+    },
+    "PivotTable": {
+      "id": "PivotTable",
+      "description": "A pivot table.",
+      "type": "object",
+      "properties": {
+        "criteria": {
+          "additionalProperties": {
+            "$ref": "PivotFilterCriteria"
+          },
+          "description": "An optional mapping of filters per source column offset.\n\nThe filters will be applied before aggregating data into the pivot table.\nThe map's key is the column offset of the source range that you want to\nfilter, and the value is the criteria for that column.\n\nFor example, if the source was `C10:E15`, a key of `0` will have the filter\nfor column `C`, whereas the key `1` is for column `D`.",
+          "type": "object"
+        },
+        "rows": {
+          "description": "Each row grouping in the pivot table.",
+          "type": "array",
+          "items": {
+            "$ref": "PivotGroup"
+          }
+        },
+        "valueLayout": {
+          "description": "Whether values should be listed horizontally (as columns)\nor vertically (as rows).",
+          "type": "string",
+          "enumDescriptions": [
+            "Values are laid out horizontally (as columns).",
+            "Values are laid out vertically (as rows)."
+          ],
+          "enum": [
+            "HORIZONTAL",
+            "VERTICAL"
+          ]
+        },
+        "columns": {
+          "description": "Each column grouping in the pivot table.",
+          "type": "array",
+          "items": {
+            "$ref": "PivotGroup"
+          }
+        },
+        "values": {
+          "description": "A list of values to include in the pivot table.",
+          "type": "array",
+          "items": {
+            "$ref": "PivotValue"
+          }
+        },
+        "source": {
+          "$ref": "GridRange",
+          "description": "The range the pivot table is reading data from."
+        }
+      }
+    },
+    "ChartSourceRange": {
+      "id": "ChartSourceRange",
+      "description": "Source ranges for a chart.",
+      "type": "object",
+      "properties": {
+        "sources": {
+          "description": "The ranges of data for a series or domain.\nExactly one dimension must have a length of 1,\nand all sources in the list must have the same dimension\nwith length 1.\nThe domain (if it exists) & all series must have the same number\nof source ranges. If using more than one source range, then the source\nrange at a given offset must be contiguous across the domain and series.\n\nFor example, these are valid configurations:\n\n    domain sources: A1:A5\n    series1 sources: B1:B5\n    series2 sources: D6:D10\n\n    domain sources: A1:A5, C10:C12\n    series1 sources: B1:B5, D10:D12\n    series2 sources: C1:C5, E10:E12",
+          "type": "array",
+          "items": {
+            "$ref": "GridRange"
+          }
+        }
+      }
+    },
+    "ValueRange": {
+      "description": "Data within a range of the spreadsheet.",
+      "type": "object",
+      "properties": {
+        "majorDimension": {
+          "enumDescriptions": [
+            "The default value, do not use.",
+            "Operates on the rows of a sheet.",
+            "Operates on the columns of a sheet."
+          ],
+          "enum": [
+            "DIMENSION_UNSPECIFIED",
+            "ROWS",
+            "COLUMNS"
+          ],
+          "description": "The major dimension of the values.\n\nFor output, if the spreadsheet data is: `A1=1,B1=2,A2=3,B2=4`,\nthen requesting `range=A1:B2,majorDimension=ROWS` will return\n`[[1,2],[3,4]]`,\nwhereas requesting `range=A1:B2,majorDimension=COLUMNS` will return\n`[[1,3],[2,4]]`.\n\nFor input, with `range=A1:B2,majorDimension=ROWS` then `[[1,2],[3,4]]`\nwill set `A1=1,B1=2,A2=3,B2=4`. With `range=A1:B2,majorDimension=COLUMNS`\nthen `[[1,2],[3,4]]` will set `A1=1,B1=3,A2=2,B2=4`.\n\nWhen writing, if this field is not set, it defaults to ROWS.",
+          "type": "string"
+        },
+        "values": {
+          "description": "The data that was read or to be written.  This is an array of arrays,\nthe outer array representing all the data and each inner array\nrepresenting a major dimension. Each item in the inner array\ncorresponds with one cell.\n\nFor output, empty trailing rows and columns will not be included.\n\nFor input, supported value types are: bool, string, and double.\nNull values will be skipped.\nTo set a cell to an empty value, set the string value to an empty string.",
+          "type": "array",
+          "items": {
+            "type": "array",
+            "items": {
+              "type": "any"
+            }
+          }
+        },
+        "range": {
+          "description": "The range the values cover, in A1 notation.\nFor output, this range indicates the entire requested range,\neven though the values will exclude trailing rows and columns.\nWhen appending values, this field represents the range to search for a\ntable, after which values will be appended.",
+          "type": "string"
+        }
+      },
+      "id": "ValueRange"
+    },
+    "AppendCellsRequest": {
+      "id": "AppendCellsRequest",
+      "description": "Adds new cells after the last row with data in a sheet,\ninserting new rows into the sheet if necessary.",
+      "type": "object",
+      "properties": {
+        "sheetId": {
+          "description": "The sheet ID to append the data to.",
+          "format": "int32",
+          "type": "integer"
+        },
+        "rows": {
+          "description": "The data to append.",
+          "type": "array",
+          "items": {
+            "$ref": "RowData"
+          }
+        },
+        "fields": {
+          "description": "The fields of CellData that should be updated.\nAt least one field must be specified.\nThe root is the CellData; 'row.values.' should not be specified.\nA single `\"*\"` can be used as short-hand for listing every field.",
+          "format": "google-fieldmask",
+          "type": "string"
+        }
+      }
+    },
+    "AddBandingRequest": {
+      "description": "Adds a new banded range to the spreadsheet.",
+      "type": "object",
+      "properties": {
+        "bandedRange": {
+          "$ref": "BandedRange",
+          "description": "The banded range to add. The bandedRangeId\nfield is optional; if one is not set, an id will be randomly generated. (It\nis an error to specify the ID of a range that already exists.)"
+        }
+      },
+      "id": "AddBandingRequest"
+    },
+    "Response": {
+      "description": "A single response from an update.",
+      "type": "object",
+      "properties": {
+        "addFilterView": {
+          "description": "A reply from adding a filter view.",
+          "$ref": "AddFilterViewResponse"
+        },
+        "addBanding": {
+          "$ref": "AddBandingResponse",
+          "description": "A reply from adding a banded range."
+        },
+        "addProtectedRange": {
+          "$ref": "AddProtectedRangeResponse",
+          "description": "A reply from adding a protected range."
+        },
+        "duplicateSheet": {
+          "description": "A reply from duplicating a sheet.",
+          "$ref": "DuplicateSheetResponse"
+        },
+        "updateEmbeddedObjectPosition": {
+          "$ref": "UpdateEmbeddedObjectPositionResponse",
+          "description": "A reply from updating an embedded object's position."
+        },
+        "deleteConditionalFormatRule": {
+          "$ref": "DeleteConditionalFormatRuleResponse",
+          "description": "A reply from deleting a conditional format rule."
+        },
+        "duplicateFilterView": {
+          "description": "A reply from duplicating a filter view.",
+          "$ref": "DuplicateFilterViewResponse"
+        },
+        "addChart": {
+          "$ref": "AddChartResponse",
+          "description": "A reply from adding a chart."
+        },
+        "findReplace": {
+          "description": "A reply from doing a find/replace.",
+          "$ref": "FindReplaceResponse"
+        },
+        "addSheet": {
+          "description": "A reply from adding a sheet.",
+          "$ref": "AddSheetResponse"
+        },
+        "updateConditionalFormatRule": {
+          "$ref": "UpdateConditionalFormatRuleResponse",
+          "description": "A reply from updating a conditional format rule."
+        },
+        "addNamedRange": {
+          "$ref": "AddNamedRangeResponse",
+          "description": "A reply from adding a named range."
+        }
+      },
+      "id": "Response"
+    },
+    "InsertRangeRequest": {
+      "description": "Inserts cells into a range, shifting the existing cells over or down.",
+      "type": "object",
+      "properties": {
+        "shiftDimension": {
+          "enumDescriptions": [
+            "The default value, do not use.",
+            "Operates on the rows of a sheet.",
+            "Operates on the columns of a sheet."
+          ],
+          "enum": [
+            "DIMENSION_UNSPECIFIED",
+            "ROWS",
+            "COLUMNS"
+          ],
+          "description": "The dimension which will be shifted when inserting cells.\nIf ROWS, existing cells will be shifted down.\nIf COLUMNS, existing cells will be shifted right.",
+          "type": "string"
+        },
+        "range": {
+          "$ref": "GridRange",
+          "description": "The range to insert new cells into."
+        }
+      },
+      "id": "InsertRangeRequest"
+    },
+    "TextFormatRun": {
+      "id": "TextFormatRun",
+      "description": "A run of a text format. The format of this run continues until the start\nindex of the next run.\nWhen updating, all fields must be set.",
+      "type": "object",
+      "properties": {
+        "startIndex": {
+          "description": "The character index where this run starts.",
+          "format": "int32",
+          "type": "integer"
+        },
+        "format": {
+          "description": "The format of this run.  Absent values inherit the cell's format.",
+          "$ref": "TextFormat"
+        }
+      }
+    },
+    "EmbeddedChart": {
+      "id": "EmbeddedChart",
+      "description": "A chart embedded in a sheet.",
+      "type": "object",
+      "properties": {
+        "chartId": {
+          "description": "The ID of the chart.",
+          "format": "int32",
+          "type": "integer"
+        },
+        "position": {
+          "description": "The position of the chart.",
+          "$ref": "EmbeddedObjectPosition"
+        },
+        "spec": {
+          "description": "The specification of the chart.",
+          "$ref": "ChartSpec"
+        }
+      }
+    },
+    "AddNamedRangeResponse": {
+      "description": "The result of adding a named range.",
+      "type": "object",
+      "properties": {
+        "namedRange": {
+          "$ref": "NamedRange",
+          "description": "The named range to add."
+        }
+      },
+      "id": "AddNamedRangeResponse"
+    },
+    "RowData": {
+      "description": "Data about each cell in a row.",
+      "type": "object",
+      "properties": {
+        "values": {
+          "description": "The values in the row, one per column.",
+          "type": "array",
+          "items": {
+            "$ref": "CellData"
+          }
+        }
+      },
+      "id": "RowData"
+    },
+    "GridData": {
+      "id": "GridData",
+      "description": "Data in the grid, as well as metadata about the dimensions.",
+      "type": "object",
+      "properties": {
+        "columnMetadata": {
+          "description": "Metadata about the requested columns in the grid, starting with the column\nin start_column.",
+          "type": "array",
+          "items": {
+            "$ref": "DimensionProperties"
+          }
+        },
+        "startColumn": {
+          "description": "The first column this GridData refers to, zero-based.",
+          "format": "int32",
+          "type": "integer"
+        },
+        "rowMetadata": {
+          "description": "Metadata about the requested rows in the grid, starting with the row\nin start_row.",
+          "type": "array",
+          "items": {
+            "$ref": "DimensionProperties"
+          }
+        },
+        "rowData": {
+          "description": "The data in the grid, one entry per row,\nstarting with the row in startRow.\nThe values in RowData will correspond to columns starting\nat start_column.",
+          "type": "array",
+          "items": {
+            "$ref": "RowData"
+          }
+        },
+        "startRow": {
+          "description": "The first row this GridData refers to, zero-based.",
+          "format": "int32",
+          "type": "integer"
+        }
+      }
+    },
+    "Border": {
+      "id": "Border",
+      "description": "A border along a cell.",
+      "type": "object",
+      "properties": {
+        "style": {
+          "enumDescriptions": [
+            "The style is not specified. Do not use this.",
+            "The border is dotted.",
+            "The border is dashed.",
+            "The border is a thin solid line.",
+            "The border is a medium solid line.",
+            "The border is a thick solid line.",
+            "No border.\nUsed only when updating a border in order to erase it.",
+            "The border is two solid lines."
+          ],
+          "enum": [
+            "STYLE_UNSPECIFIED",
+            "DOTTED",
+            "DASHED",
+            "SOLID",
+            "SOLID_MEDIUM",
+            "SOLID_THICK",
+            "NONE",
+            "DOUBLE"
+          ],
+          "description": "The style of the border.",
+          "type": "string"
+        },
+        "color": {
+          "description": "The color of the border.",
+          "$ref": "Color"
+        },
+        "width": {
+          "description": "The width of the border, in pixels.\nDeprecated; the width is determined by the \"style\" field.",
+          "format": "int32",
+          "type": "integer"
+        }
+      }
+    },
+    "UpdateNamedRangeRequest": {
+      "id": "UpdateNamedRangeRequest",
+      "description": "Updates properties of the named range with the specified\nnamedRangeId.",
+      "type": "object",
+      "properties": {
+        "namedRange": {
+          "description": "The named range to update with the new properties.",
+          "$ref": "NamedRange"
+        },
+        "fields": {
+          "description": "The fields that should be updated.  At least one field must be specified.\nThe root `namedRange` is implied and should not be specified.\nA single `\"*\"` can be used as short-hand for listing every field.",
+          "format": "google-fieldmask",
+          "type": "string"
+        }
+      }
+    },
+    "FindReplaceRequest": {
+      "description": "Finds and replaces data in cells over a range, sheet, or all sheets.",
+      "type": "object",
+      "properties": {
+        "sheetId": {
+          "description": "The sheet to find/replace over.",
+          "format": "int32",
+          "type": "integer"
+        },
+        "allSheets": {
+          "description": "True to find/replace over all sheets.",
+          "type": "boolean"
+        },
+        "matchCase": {
+          "description": "True if the search is case sensitive.",
+          "type": "boolean"
+        },
+        "includeFormulas": {
+          "description": "True if the search should include cells with formulas.\nFalse to skip cells with formulas.",
+          "type": "boolean"
+        },
+        "matchEntireCell": {
+          "description": "True if the find value should match the entire cell.",
+          "type": "boolean"
+        },
+        "searchByRegex": {
+          "description": "True if the find value is a regex.\nThe regular expression and replacement should follow Java regex rules\nat https://docs.oracle.com/javase/8/docs/api/java/util/regex/Pattern.html.\nThe replacement string is allowed to refer to capturing groups.\nFor example, if one cell has the contents `\"Google Sheets\"` and another\nhas `\"Google Docs\"`, then searching for `\"o.* (.*)\"` with a replacement of\n`\"$1 Rocks\"` would change the contents of the cells to\n`\"GSheets Rocks\"` and `\"GDocs Rocks\"` respectively.",
+          "type": "boolean"
+        },
+        "find": {
+          "description": "The value to search.",
+          "type": "string"
+        },
+        "replacement": {
+          "description": "The value to use as the replacement.",
+          "type": "string"
+        },
+        "range": {
+          "description": "The range to find/replace over.",
+          "$ref": "GridRange"
+        }
+      },
+      "id": "FindReplaceRequest"
+    },
+    "AddSheetRequest": {
+      "description": "Adds a new sheet.\nWhen a sheet is added at a given index,\nall subsequent sheets' indexes are incremented.\nTo add an object sheet, use AddChartRequest instead and specify\nEmbeddedObjectPosition.sheetId or\nEmbeddedObjectPosition.newSheet.",
+      "type": "object",
+      "properties": {
+        "properties": {
+          "description": "The properties the new sheet should have.\nAll properties are optional.\nThe sheetId field is optional; if one is not\nset, an id will be randomly generated. (It is an error to specify the ID\nof a sheet that already exists.)",
+          "$ref": "SheetProperties"
+        }
+      },
+      "id": "AddSheetRequest"
+    },
+    "UpdateCellsRequest": {
+      "description": "Updates all cells in a range with new data.",
+      "type": "object",
+      "properties": {
+        "start": {
+          "$ref": "GridCoordinate",
+          "description": "The coordinate to start writing data at.\nAny number of rows and columns (including a different number of\ncolumns per row) may be written."
+        },
+        "range": {
+          "$ref": "GridRange",
+          "description": "The range to write data to.\n\nIf the data in rows does not cover the entire requested range,\nthe fields matching those set in fields will be cleared."
+        },
+        "rows": {
+          "description": "The data to write.",
+          "type": "array",
+          "items": {
+            "$ref": "RowData"
+          }
+        },
+        "fields": {
+          "description": "The fields of CellData that should be updated.\nAt least one field must be specified.\nThe root is the CellData; 'row.values.' should not be specified.\nA single `\"*\"` can be used as short-hand for listing every field.",
+          "format": "google-fieldmask",
+          "type": "string"
+        }
+      },
+      "id": "UpdateCellsRequest"
+    },
+    "DeleteConditionalFormatRuleResponse": {
+      "id": "DeleteConditionalFormatRuleResponse",
+      "description": "The result of deleting a conditional format rule.",
+      "type": "object",
+      "properties": {
+        "rule": {
+          "description": "The rule that was deleted.",
+          "$ref": "ConditionalFormatRule"
+        }
+      }
+    },
+    "DeleteRangeRequest": {
+      "id": "DeleteRangeRequest",
+      "description": "Deletes a range of cells, shifting other cells into the deleted area.",
+      "type": "object",
+      "properties": {
+        "shiftDimension": {
+          "enumDescriptions": [
+            "The default value, do not use.",
+            "Operates on the rows of a sheet.",
+            "Operates on the columns of a sheet."
+          ],
+          "enum": [
+            "DIMENSION_UNSPECIFIED",
+            "ROWS",
+            "COLUMNS"
+          ],
+          "description": "The dimension from which deleted cells will be replaced with.\nIf ROWS, existing cells will be shifted upward to\nreplace the deleted cells. If COLUMNS, existing cells\nwill be shifted left to replace the deleted cells.",
+          "type": "string"
+        },
+        "range": {
+          "$ref": "GridRange",
+          "description": "The range of cells to delete."
+        }
+      }
+    },
+    "GridCoordinate": {
+      "id": "GridCoordinate",
+      "description": "A coordinate in a sheet.\nAll indexes are zero-based.",
+      "type": "object",
+      "properties": {
+        "rowIndex": {
+          "description": "The row index of the coordinate.",
+          "format": "int32",
+          "type": "integer"
+        },
+        "columnIndex": {
+          "description": "The column index of the coordinate.",
+          "format": "int32",
+          "type": "integer"
+        },
+        "sheetId": {
+          "description": "The sheet this coordinate is on.",
+          "format": "int32",
+          "type": "integer"
+        }
+      }
+    },
+    "UpdateSheetPropertiesRequest": {
+      "description": "Updates properties of the sheet with the specified\nsheetId.",
+      "type": "object",
+      "properties": {
+        "fields": {
+          "description": "The fields that should be updated.  At least one field must be specified.\nThe root `properties` is implied and should not be specified.\nA single `\"*\"` can be used as short-hand for listing every field.",
+          "format": "google-fieldmask",
+          "type": "string"
+        },
+        "properties": {
+          "$ref": "SheetProperties",
+          "description": "The properties to update."
+        }
+      },
+      "id": "UpdateSheetPropertiesRequest"
+    },
+    "UnmergeCellsRequest": {
+      "id": "UnmergeCellsRequest",
+      "description": "Unmerges cells in the given range.",
+      "type": "object",
+      "properties": {
+        "range": {
+          "description": "The range within which all cells should be unmerged.\nIf the range spans multiple merges, all will be unmerged.\nThe range must not partially span any merge.",
+          "$ref": "GridRange"
+        }
+      }
+    },
+    "GridProperties": {
+      "description": "Properties of a grid.",
+      "type": "object",
+      "properties": {
+        "rowCount": {
+          "description": "The number of rows in the grid.",
+          "format": "int32",
+          "type": "integer"
+        },
+        "frozenRowCount": {
+          "description": "The number of rows that are frozen in the grid.",
+          "format": "int32",
+          "type": "integer"
+        },
+        "hideGridlines": {
+          "description": "True if the grid isn't showing gridlines in the UI.",
+          "type": "boolean"
+        },
+        "columnCount": {
+          "description": "The number of columns in the grid.",
+          "format": "int32",
+          "type": "integer"
+        },
+        "frozenColumnCount": {
+          "description": "The number of columns that are frozen in the grid.",
+          "format": "int32",
+          "type": "integer"
+        }
+      },
+      "id": "GridProperties"
+    },
+    "Sheet": {
+      "description": "A sheet in a spreadsheet.",
+      "type": "object",
+      "properties": {
+        "protectedRanges": {
+          "description": "The protected ranges in this sheet.",
+          "type": "array",
+          "items": {
+            "$ref": "ProtectedRange"
+          }
+        },
+        "conditionalFormats": {
+          "description": "The conditional format rules in this sheet.",
+          "type": "array",
+          "items": {
+            "$ref": "ConditionalFormatRule"
+          }
+        },
+        "basicFilter": {
+          "description": "The filter on this sheet, if any.",
+          "$ref": "BasicFilter"
+        },
+        "merges": {
+          "description": "The ranges that are merged together.",
+          "type": "array",
+          "items": {
+            "$ref": "GridRange"
+          }
+        },
+        "data": {
+          "description": "Data in the grid, if this is a grid sheet.\nThe number of GridData objects returned is dependent on the number of\nranges requested on this sheet. For example, if this is representing\n`Sheet1`, and the spreadsheet was requested with ranges\n`Sheet1!A1:C10` and `Sheet1!D15:E20`, then the first GridData will have a\nstartRow/startColumn of `0`,\nwhile the second one will have `startRow 14` (zero-based row 15),\nand `startColumn 3` (zero-based column D).",
+          "type": "array",
+          "items": {
+            "$ref": "GridData"
+          }
+        },
+        "bandedRanges": {
+          "description": "The banded (i.e. alternating colors) ranges on this sheet.",
+          "type": "array",
+          "items": {
+            "$ref": "BandedRange"
+          }
+        },
+        "properties": {
+          "$ref": "SheetProperties",
+          "description": "The properties of the sheet."
+        },
+        "charts": {
+          "description": "The specifications of every chart on this sheet.",
+          "type": "array",
+          "items": {
+            "$ref": "EmbeddedChart"
+          }
+        },
+        "filterViews": {
+          "description": "The filter views in this sheet.",
+          "type": "array",
+          "items": {
+            "$ref": "FilterView"
+          }
+        }
+      },
+      "id": "Sheet"
+    },
+    "SortSpec": {
+      "description": "A sort order associated with a specific column or row.",
+      "type": "object",
+      "properties": {
+        "dimensionIndex": {
+          "description": "The dimension the sort should be applied to.",
+          "format": "int32",
+          "type": "integer"
+        },
+        "sortOrder": {
+          "description": "The order data should be sorted.",
+          "type": "string",
+          "enumDescriptions": [
+            "Default value, do not use this.",
+            "Sort ascending.",
+            "Sort descending."
+          ],
+          "enum": [
+            "SORT_ORDER_UNSPECIFIED",
+            "ASCENDING",
+            "DESCENDING"
+          ]
+        }
+      },
+      "id": "SortSpec"
+    },
+    "UpdateEmbeddedObjectPositionResponse": {
+      "id": "UpdateEmbeddedObjectPositionResponse",
+      "description": "The result of updating an embedded object's position.",
+      "type": "object",
+      "properties": {
+        "position": {
+          "$ref": "EmbeddedObjectPosition",
+          "description": "The new position of the embedded object."
+        }
+      }
     }
   },
   "icons": {
-    "x16": "http://www.google.com/images/icons/product/search-16.gif",
-    "x32": "http://www.google.com/images/icons/product/search-32.gif"
+    "x32": "http://www.google.com/images/icons/product/search-32.gif",
+    "x16": "http://www.google.com/images/icons/product/search-16.gif"
   },
   "protocol": "rest",
   "canonicalName": "Sheets",
@@ -3617,31 +3621,12 @@
       "methods": {
         "get": {
           "description": "Returns the spreadsheet at the given ID.\nThe caller must specify the spreadsheet ID.\n\nBy default, data within grids will not be returned.\nYou can include grid data one of two ways:\n\n* Specify a field mask listing your desired fields using the `fields` URL\nparameter in HTTP\n\n* Set the includeGridData\nURL parameter to true.  If a field mask is set, the `includeGridData`\nparameter is ignored\n\nFor large spreadsheets, it is recommended to retrieve only the specific\nfields of the spreadsheet that you want.\n\nTo retrieve only subsets of the spreadsheet, use the\nranges URL parameter.\nMultiple ranges can be specified.  Limiting the range will\nreturn only the portions of the spreadsheet that intersect the requested\nranges. Ranges are specified using A1 notation.",
-          "response": {
-            "$ref": "Spreadsheet"
-          },
+          "httpMethod": "GET",
           "parameterOrder": [
             "spreadsheetId"
           ],
-          "httpMethod": "GET",
-          "parameters": {
-            "ranges": {
-              "description": "The ranges to retrieve from the spreadsheet.",
-              "type": "string",
-              "repeated": true,
-              "location": "query"
-            },
-            "includeGridData": {
-              "description": "True if grid data should be returned.\nThis parameter is ignored if a field mask was set in the request.",
-              "type": "boolean",
-              "location": "query"
-            },
-            "spreadsheetId": {
-              "required": true,
-              "type": "string",
-              "location": "path",
-              "description": "The spreadsheet to request."
-            }
+          "response": {
+            "$ref": "Spreadsheet"
           },
           "scopes": [
             "https://www.googleapis.com/auth/drive",
@@ -3649,36 +3634,49 @@
             "https://www.googleapis.com/auth/spreadsheets",
             "https://www.googleapis.com/auth/spreadsheets.readonly"
           ],
+          "parameters": {
+            "spreadsheetId": {
+              "description": "The spreadsheet to request.",
+              "required": true,
+              "type": "string",
+              "location": "path"
+            },
+            "ranges": {
+              "description": "The ranges to retrieve from the spreadsheet.",
+              "type": "string",
+              "repeated": true,
+              "location": "query"
+            },
+            "includeGridData": {
+              "location": "query",
+              "description": "True if grid data should be returned.\nThis parameter is ignored if a field mask was set in the request.",
+              "type": "boolean"
+            }
+          },
           "flatPath": "v4/spreadsheets/{spreadsheetId}",
-          "path": "v4/spreadsheets/{spreadsheetId}",
-          "id": "sheets.spreadsheets.get"
+          "id": "sheets.spreadsheets.get",
+          "path": "v4/spreadsheets/{spreadsheetId}"
         },
         "create": {
-          "httpMethod": "POST",
-          "parameterOrder": [],
+          "request": {
+            "$ref": "Spreadsheet"
+          },
+          "description": "Creates a spreadsheet, returning the newly created spreadsheet.",
           "response": {
             "$ref": "Spreadsheet"
           },
+          "parameterOrder": [],
+          "httpMethod": "POST",
           "parameters": {},
           "scopes": [
             "https://www.googleapis.com/auth/drive",
             "https://www.googleapis.com/auth/spreadsheets"
           ],
           "flatPath": "v4/spreadsheets",
-          "id": "sheets.spreadsheets.create",
           "path": "v4/spreadsheets",
-          "request": {
-            "$ref": "Spreadsheet"
-          },
-          "description": "Creates a spreadsheet, returning the newly created spreadsheet."
+          "id": "sheets.spreadsheets.create"
         },
         "batchUpdate": {
-          "path": "v4/spreadsheets/{spreadsheetId}:batchUpdate",
-          "id": "sheets.spreadsheets.batchUpdate",
-          "description": "Applies one or more updates to the spreadsheet.\n\nEach request is validated before\nbeing applied. If any request is not valid then the entire request will\nfail and nothing will be applied.\n\nSome requests have replies to\ngive you some information about how\nthey are applied. The replies will mirror the requests.  For example,\nif you applied 4 updates and the 3rd one had a reply, then the\nresponse will have 2 empty replies, the actual reply, and another empty\nreply, in that order.\n\nDue to the collaborative nature of spreadsheets, it is not guaranteed that\nthe spreadsheet will reflect exactly your changes after this completes,\nhowever it is guaranteed that the updates in the request will be\napplied together atomically. Your changes may be altered with respect to\ncollaborator changes. If there are no collaborators, the spreadsheet\nshould reflect your changes.",
-          "request": {
-            "$ref": "BatchUpdateSpreadsheetRequest"
-          },
           "response": {
             "$ref": "BatchUpdateSpreadsheetResponse"
           },
@@ -3686,10 +3684,6 @@
             "spreadsheetId"
           ],
           "httpMethod": "POST",
-          "scopes": [
-            "https://www.googleapis.com/auth/drive",
-            "https://www.googleapis.com/auth/spreadsheets"
-          ],
           "parameters": {
             "spreadsheetId": {
               "location": "path",
@@ -3698,325 +3692,77 @@
               "type": "string"
             }
           },
-          "flatPath": "v4/spreadsheets/{spreadsheetId}:batchUpdate"
+          "scopes": [
+            "https://www.googleapis.com/auth/drive",
+            "https://www.googleapis.com/auth/spreadsheets"
+          ],
+          "flatPath": "v4/spreadsheets/{spreadsheetId}:batchUpdate",
+          "path": "v4/spreadsheets/{spreadsheetId}:batchUpdate",
+          "id": "sheets.spreadsheets.batchUpdate",
+          "request": {
+            "$ref": "BatchUpdateSpreadsheetRequest"
+          },
+          "description": "Applies one or more updates to the spreadsheet.\n\nEach request is validated before\nbeing applied. If any request is not valid then the entire request will\nfail and nothing will be applied.\n\nSome requests have replies to\ngive you some information about how\nthey are applied. The replies will mirror the requests.  For example,\nif you applied 4 updates and the 3rd one had a reply, then the\nresponse will have 2 empty replies, the actual reply, and another empty\nreply, in that order.\n\nDue to the collaborative nature of spreadsheets, it is not guaranteed that\nthe spreadsheet will reflect exactly your changes after this completes,\nhowever it is guaranteed that the updates in the request will be\napplied together atomically. Your changes may be altered with respect to\ncollaborator changes. If there are no collaborators, the spreadsheet\nshould reflect your changes."
         }
       },
       "resources": {
         "values": {
           "methods": {
-            "update": {
+            "batchClear": {
+              "id": "sheets.spreadsheets.values.batchClear",
+              "path": "v4/spreadsheets/{spreadsheetId}/values:batchClear",
+              "request": {
+                "$ref": "BatchClearValuesRequest"
+              },
+              "description": "Clears one or more ranges of values from a spreadsheet.\nThe caller must specify the spreadsheet ID and one or more ranges.\nOnly values are cleared -- all other properties of the cell (such as\nformatting, data validation, etc..) are kept.",
+              "httpMethod": "POST",
+              "parameterOrder": [
+                "spreadsheetId"
+              ],
+              "response": {
+                "$ref": "BatchClearValuesResponse"
+              },
+              "parameters": {
+                "spreadsheetId": {
+                  "location": "path",
+                  "description": "The ID of the spreadsheet to update.",
+                  "required": true,
+                  "type": "string"
+                }
+              },
               "scopes": [
                 "https://www.googleapis.com/auth/drive",
                 "https://www.googleapis.com/auth/spreadsheets"
               ],
-              "parameters": {
-                "range": {
-                  "description": "The A1 notation of the values to update.",
-                  "required": true,
-                  "type": "string",
-                  "location": "path"
-                },
-                "includeValuesInResponse": {
-                  "location": "query",
-                  "description": "Determines if the update response should include the values\nof the cells that were updated. By default, responses\ndo not include the updated values.\nIf the range to write was larger than than the range actually written,\nthe response will include all values in the requested range (excluding\ntrailing empty rows and columns).",
-                  "type": "boolean"
-                },
-                "spreadsheetId": {
-                  "required": true,
-                  "type": "string",
-                  "location": "path",
-                  "description": "The ID of the spreadsheet to update."
-                },
-                "responseValueRenderOption": {
-                  "enum": [
-                    "FORMATTED_VALUE",
-                    "UNFORMATTED_VALUE",
-                    "FORMULA"
-                  ],
-                  "description": "Determines how values in the response should be rendered.\nThe default render option is ValueRenderOption.FORMATTED_VALUE.",
-                  "type": "string",
-                  "location": "query"
-                },
-                "valueInputOption": {
-                  "location": "query",
-                  "enum": [
-                    "INPUT_VALUE_OPTION_UNSPECIFIED",
-                    "RAW",
-                    "USER_ENTERED"
-                  ],
-                  "description": "How the input data should be interpreted.",
-                  "type": "string"
-                },
-                "responseDateTimeRenderOption": {
-                  "description": "Determines how dates, times, and durations in the response should be\nrendered. This is ignored if response_value_render_option is\nFORMATTED_VALUE.\nThe default dateTime render option is [DateTimeRenderOption.SERIAL_NUMBER].",
-                  "type": "string",
-                  "location": "query",
-                  "enum": [
-                    "SERIAL_NUMBER",
-                    "FORMATTED_STRING"
-                  ]
-                }
-              },
-              "flatPath": "v4/spreadsheets/{spreadsheetId}/values/{range}",
-              "id": "sheets.spreadsheets.values.update",
-              "path": "v4/spreadsheets/{spreadsheetId}/values/{range}",
-              "description": "Sets values in a range of a spreadsheet.\nThe caller must specify the spreadsheet ID, range, and\na valueInputOption.",
-              "request": {
+              "flatPath": "v4/spreadsheets/{spreadsheetId}/values:batchClear"
+            },
+            "get": {
+              "description": "Returns a range of values from a spreadsheet.\nThe caller must specify the spreadsheet ID and a range.",
+              "httpMethod": "GET",
+              "response": {
                 "$ref": "ValueRange"
               },
-              "httpMethod": "PUT",
               "parameterOrder": [
                 "spreadsheetId",
                 "range"
               ],
-              "response": {
-                "$ref": "UpdateValuesResponse"
-              }
-            },
-            "batchUpdate": {
-              "response": {
-                "$ref": "BatchUpdateValuesResponse"
-              },
-              "parameterOrder": [
-                "spreadsheetId"
-              ],
-              "httpMethod": "POST",
-              "scopes": [
-                "https://www.googleapis.com/auth/drive",
-                "https://www.googleapis.com/auth/spreadsheets"
-              ],
               "parameters": {
-                "spreadsheetId": {
-                  "description": "The ID of the spreadsheet to update.",
-                  "required": true,
-                  "type": "string",
-                  "location": "path"
-                }
-              },
-              "flatPath": "v4/spreadsheets/{spreadsheetId}/values:batchUpdate",
-              "path": "v4/spreadsheets/{spreadsheetId}/values:batchUpdate",
-              "id": "sheets.spreadsheets.values.batchUpdate",
-              "description": "Sets values in one or more ranges of a spreadsheet.\nThe caller must specify the spreadsheet ID,\na valueInputOption, and one or more\nValueRanges.",
-              "request": {
-                "$ref": "BatchUpdateValuesRequest"
-              }
-            },
-            "batchGet": {
-              "id": "sheets.spreadsheets.values.batchGet",
-              "path": "v4/spreadsheets/{spreadsheetId}/values:batchGet",
-              "description": "Returns one or more ranges of values from a spreadsheet.\nThe caller must specify the spreadsheet ID and one or more ranges.",
-              "httpMethod": "GET",
-              "parameterOrder": [
-                "spreadsheetId"
-              ],
-              "response": {
-                "$ref": "BatchGetValuesResponse"
-              },
-              "parameters": {
-                "ranges": {
-                  "repeated": true,
-                  "location": "query",
-                  "description": "The A1 notation of the values to retrieve.",
-                  "type": "string"
-                },
                 "majorDimension": {
+                  "description": "The major dimension that results should use.\n\nFor example, if the spreadsheet data is: `A1=1,B1=2,A2=3,B2=4`,\nthen requesting `range=A1:B2,majorDimension=ROWS` will return\n`[[1,2],[3,4]]`,\nwhereas requesting `range=A1:B2,majorDimension=COLUMNS` will return\n`[[1,3],[2,4]]`.",
                   "type": "string",
                   "location": "query",
                   "enum": [
                     "DIMENSION_UNSPECIFIED",
                     "ROWS",
                     "COLUMNS"
-                  ],
-                  "description": "The major dimension that results should use.\n\nFor example, if the spreadsheet data is: `A1=1,B1=2,A2=3,B2=4`,\nthen requesting `range=A1:B2,majorDimension=ROWS` will return\n`[[1,2],[3,4]]`,\nwhereas requesting `range=A1:B2,majorDimension=COLUMNS` will return\n`[[1,3],[2,4]]`."
+                  ]
                 },
                 "spreadsheetId": {
-                  "location": "path",
                   "description": "The ID of the spreadsheet to retrieve data from.",
                   "required": true,
-                  "type": "string"
-                },
-                "valueRenderOption": {
-                  "type": "string",
-                  "location": "query",
-                  "enum": [
-                    "FORMATTED_VALUE",
-                    "UNFORMATTED_VALUE",
-                    "FORMULA"
-                  ],
-                  "description": "How values should be represented in the output.\nThe default render option is ValueRenderOption.FORMATTED_VALUE."
-                },
-                "dateTimeRenderOption": {
-                  "enum": [
-                    "SERIAL_NUMBER",
-                    "FORMATTED_STRING"
-                  ],
-                  "description": "How dates, times, and durations should be represented in the output.\nThis is ignored if value_render_option is\nFORMATTED_VALUE.\nThe default dateTime render option is [DateTimeRenderOption.SERIAL_NUMBER].",
-                  "type": "string",
-                  "location": "query"
-                }
-              },
-              "scopes": [
-                "https://www.googleapis.com/auth/drive",
-                "https://www.googleapis.com/auth/drive.readonly",
-                "https://www.googleapis.com/auth/spreadsheets",
-                "https://www.googleapis.com/auth/spreadsheets.readonly"
-              ],
-              "flatPath": "v4/spreadsheets/{spreadsheetId}/values:batchGet"
-            },
-            "clear": {
-              "httpMethod": "POST",
-              "parameterOrder": [
-                "spreadsheetId",
-                "range"
-              ],
-              "response": {
-                "$ref": "ClearValuesResponse"
-              },
-              "scopes": [
-                "https://www.googleapis.com/auth/drive",
-                "https://www.googleapis.com/auth/spreadsheets"
-              ],
-              "parameters": {
-                "range": {
-                  "required": true,
-                  "type": "string",
-                  "location": "path",
-                  "description": "The A1 notation of the values to clear."
-                },
-                "spreadsheetId": {
-                  "location": "path",
-                  "description": "The ID of the spreadsheet to update.",
-                  "required": true,
-                  "type": "string"
-                }
-              },
-              "flatPath": "v4/spreadsheets/{spreadsheetId}/values/{range}:clear",
-              "id": "sheets.spreadsheets.values.clear",
-              "path": "v4/spreadsheets/{spreadsheetId}/values/{range}:clear",
-              "description": "Clears values from a spreadsheet.\nThe caller must specify the spreadsheet ID and range.\nOnly values are cleared -- all other properties of the cell (such as\nformatting, data validation, etc..) are kept.",
-              "request": {
-                "$ref": "ClearValuesRequest"
-              }
-            },
-            "append": {
-              "path": "v4/spreadsheets/{spreadsheetId}/values/{range}:append",
-              "id": "sheets.spreadsheets.values.append",
-              "request": {
-                "$ref": "ValueRange"
-              },
-              "description": "Appends values to a spreadsheet. The input range is used to search for\nexisting data and find a \"table\" within that range. Values will be\nappended to the next row of the table, starting with the first column of\nthe table. See the\n[guide](/sheets/api/guides/values#appending_values)\nand\n[sample code](/sheets/api/samples/writing#append_values)\nfor specific details of how tables are detected and data is appended.\n\nThe caller must specify the spreadsheet ID, range, and\na valueInputOption.  The `valueInputOption` only\ncontrols how the input data will be added to the sheet (column-wise or\nrow-wise), it does not influence what cell the data starts being written\nto.",
-              "response": {
-                "$ref": "AppendValuesResponse"
-              },
-              "parameterOrder": [
-                "spreadsheetId",
-                "range"
-              ],
-              "httpMethod": "POST",
-              "parameters": {
-                "spreadsheetId": {
-                  "required": true,
-                  "type": "string",
-                  "location": "path",
-                  "description": "The ID of the spreadsheet to update."
-                },
-                "responseValueRenderOption": {
-                  "type": "string",
-                  "location": "query",
-                  "enum": [
-                    "FORMATTED_VALUE",
-                    "UNFORMATTED_VALUE",
-                    "FORMULA"
-                  ],
-                  "description": "Determines how values in the response should be rendered.\nThe default render option is ValueRenderOption.FORMATTED_VALUE."
-                },
-                "insertDataOption": {
-                  "location": "query",
-                  "enum": [
-                    "OVERWRITE",
-                    "INSERT_ROWS"
-                  ],
-                  "description": "How the input data should be inserted.",
-                  "type": "string"
-                },
-                "valueInputOption": {
-                  "enum": [
-                    "INPUT_VALUE_OPTION_UNSPECIFIED",
-                    "RAW",
-                    "USER_ENTERED"
-                  ],
-                  "description": "How the input data should be interpreted.",
-                  "type": "string",
-                  "location": "query"
-                },
-                "responseDateTimeRenderOption": {
-                  "location": "query",
-                  "enum": [
-                    "SERIAL_NUMBER",
-                    "FORMATTED_STRING"
-                  ],
-                  "description": "Determines how dates, times, and durations in the response should be\nrendered. This is ignored if response_value_render_option is\nFORMATTED_VALUE.\nThe default dateTime render option is [DateTimeRenderOption.SERIAL_NUMBER].",
-                  "type": "string"
-                },
-                "range": {
-                  "required": true,
-                  "type": "string",
-                  "location": "path",
-                  "description": "The A1 notation of a range to search for a logical table of data.\nValues will be appended after the last row of the table."
-                },
-                "includeValuesInResponse": {
-                  "location": "query",
-                  "description": "Determines if the update response should include the values\nof the cells that were appended. By default, responses\ndo not include the updated values.",
-                  "type": "boolean"
-                }
-              },
-              "scopes": [
-                "https://www.googleapis.com/auth/drive",
-                "https://www.googleapis.com/auth/spreadsheets"
-              ],
-              "flatPath": "v4/spreadsheets/{spreadsheetId}/values/{range}:append"
-            },
-            "batchClear": {
-              "response": {
-                "$ref": "BatchClearValuesResponse"
-              },
-              "parameterOrder": [
-                "spreadsheetId"
-              ],
-              "httpMethod": "POST",
-              "scopes": [
-                "https://www.googleapis.com/auth/drive",
-                "https://www.googleapis.com/auth/spreadsheets"
-              ],
-              "parameters": {
-                "spreadsheetId": {
-                  "description": "The ID of the spreadsheet to update.",
-                  "required": true,
                   "type": "string",
                   "location": "path"
-                }
-              },
-              "flatPath": "v4/spreadsheets/{spreadsheetId}/values:batchClear",
-              "path": "v4/spreadsheets/{spreadsheetId}/values:batchClear",
-              "id": "sheets.spreadsheets.values.batchClear",
-              "description": "Clears one or more ranges of values from a spreadsheet.\nThe caller must specify the spreadsheet ID and one or more ranges.\nOnly values are cleared -- all other properties of the cell (such as\nformatting, data validation, etc..) are kept.",
-              "request": {
-                "$ref": "BatchClearValuesRequest"
-              }
-            },
-            "get": {
-              "path": "v4/spreadsheets/{spreadsheetId}/values/{range}",
-              "id": "sheets.spreadsheets.values.get",
-              "description": "Returns a range of values from a spreadsheet.\nThe caller must specify the spreadsheet ID and a range.",
-              "response": {
-                "$ref": "ValueRange"
-              },
-              "parameterOrder": [
-                "spreadsheetId",
-                "range"
-              ],
-              "httpMethod": "GET",
-              "parameters": {
+                },
                 "range": {
                   "location": "path",
                   "description": "The A1 notation of the values to retrieve.",
@@ -4034,14 +3780,140 @@
                   "type": "string"
                 },
                 "dateTimeRenderOption": {
-                  "description": "How dates, times, and durations should be represented in the output.\nThis is ignored if value_render_option is\nFORMATTED_VALUE.\nThe default dateTime render option is [DateTimeRenderOption.SERIAL_NUMBER].",
-                  "type": "string",
                   "location": "query",
                   "enum": [
                     "SERIAL_NUMBER",
                     "FORMATTED_STRING"
+                  ],
+                  "description": "How dates, times, and durations should be represented in the output.\nThis is ignored if value_render_option is\nFORMATTED_VALUE.\nThe default dateTime render option is [DateTimeRenderOption.SERIAL_NUMBER].",
+                  "type": "string"
+                }
+              },
+              "scopes": [
+                "https://www.googleapis.com/auth/drive",
+                "https://www.googleapis.com/auth/drive.readonly",
+                "https://www.googleapis.com/auth/spreadsheets",
+                "https://www.googleapis.com/auth/spreadsheets.readonly"
+              ],
+              "flatPath": "v4/spreadsheets/{spreadsheetId}/values/{range}",
+              "id": "sheets.spreadsheets.values.get",
+              "path": "v4/spreadsheets/{spreadsheetId}/values/{range}"
+            },
+            "update": {
+              "description": "Sets values in a range of a spreadsheet.\nThe caller must specify the spreadsheet ID, range, and\na valueInputOption.",
+              "request": {
+                "$ref": "ValueRange"
+              },
+              "response": {
+                "$ref": "UpdateValuesResponse"
+              },
+              "parameterOrder": [
+                "spreadsheetId",
+                "range"
+              ],
+              "httpMethod": "PUT",
+              "scopes": [
+                "https://www.googleapis.com/auth/drive",
+                "https://www.googleapis.com/auth/spreadsheets"
+              ],
+              "parameters": {
+                "spreadsheetId": {
+                  "description": "The ID of the spreadsheet to update.",
+                  "required": true,
+                  "type": "string",
+                  "location": "path"
+                },
+                "responseValueRenderOption": {
+                  "location": "query",
+                  "enum": [
+                    "FORMATTED_VALUE",
+                    "UNFORMATTED_VALUE",
+                    "FORMULA"
+                  ],
+                  "description": "Determines how values in the response should be rendered.\nThe default render option is ValueRenderOption.FORMATTED_VALUE.",
+                  "type": "string"
+                },
+                "valueInputOption": {
+                  "description": "How the input data should be interpreted.",
+                  "type": "string",
+                  "location": "query",
+                  "enum": [
+                    "INPUT_VALUE_OPTION_UNSPECIFIED",
+                    "RAW",
+                    "USER_ENTERED"
                   ]
                 },
+                "responseDateTimeRenderOption": {
+                  "location": "query",
+                  "enum": [
+                    "SERIAL_NUMBER",
+                    "FORMATTED_STRING"
+                  ],
+                  "description": "Determines how dates, times, and durations in the response should be\nrendered. This is ignored if response_value_render_option is\nFORMATTED_VALUE.\nThe default dateTime render option is [DateTimeRenderOption.SERIAL_NUMBER].",
+                  "type": "string"
+                },
+                "includeValuesInResponse": {
+                  "description": "Determines if the update response should include the values\nof the cells that were updated. By default, responses\ndo not include the updated values.\nIf the range to write was larger than than the range actually written,\nthe response will include all values in the requested range (excluding\ntrailing empty rows and columns).",
+                  "type": "boolean",
+                  "location": "query"
+                },
+                "range": {
+                  "description": "The A1 notation of the values to update.",
+                  "required": true,
+                  "type": "string",
+                  "location": "path"
+                }
+              },
+              "flatPath": "v4/spreadsheets/{spreadsheetId}/values/{range}",
+              "path": "v4/spreadsheets/{spreadsheetId}/values/{range}",
+              "id": "sheets.spreadsheets.values.update"
+            },
+            "batchUpdate": {
+              "parameters": {
+                "spreadsheetId": {
+                  "description": "The ID of the spreadsheet to update.",
+                  "required": true,
+                  "type": "string",
+                  "location": "path"
+                }
+              },
+              "scopes": [
+                "https://www.googleapis.com/auth/drive",
+                "https://www.googleapis.com/auth/spreadsheets"
+              ],
+              "flatPath": "v4/spreadsheets/{spreadsheetId}/values:batchUpdate",
+              "path": "v4/spreadsheets/{spreadsheetId}/values:batchUpdate",
+              "id": "sheets.spreadsheets.values.batchUpdate",
+              "request": {
+                "$ref": "BatchUpdateValuesRequest"
+              },
+              "description": "Sets values in one or more ranges of a spreadsheet.\nThe caller must specify the spreadsheet ID,\na valueInputOption, and one or more\nValueRanges.",
+              "response": {
+                "$ref": "BatchUpdateValuesResponse"
+              },
+              "parameterOrder": [
+                "spreadsheetId"
+              ],
+              "httpMethod": "POST"
+            },
+            "batchGet": {
+              "path": "v4/spreadsheets/{spreadsheetId}/values:batchGet",
+              "id": "sheets.spreadsheets.values.batchGet",
+              "description": "Returns one or more ranges of values from a spreadsheet.\nThe caller must specify the spreadsheet ID and one or more ranges.",
+              "parameterOrder": [
+                "spreadsheetId"
+              ],
+              "response": {
+                "$ref": "BatchGetValuesResponse"
+              },
+              "httpMethod": "GET",
+              "parameters": {
+                "ranges": {
+                  "repeated": true,
+                  "location": "query",
+                  "description": "The A1 notation of the values to retrieve.",
+                  "type": "string"
+                },
                 "majorDimension": {
                   "location": "query",
                   "enum": [
@@ -4053,10 +3925,29 @@
                   "type": "string"
                 },
                 "spreadsheetId": {
+                  "location": "path",
                   "description": "The ID of the spreadsheet to retrieve data from.",
                   "required": true,
-                  "type": "string",
-                  "location": "path"
+                  "type": "string"
+                },
+                "valueRenderOption": {
+                  "location": "query",
+                  "enum": [
+                    "FORMATTED_VALUE",
+                    "UNFORMATTED_VALUE",
+                    "FORMULA"
+                  ],
+                  "description": "How values should be represented in the output.\nThe default render option is ValueRenderOption.FORMATTED_VALUE.",
+                  "type": "string"
+                },
+                "dateTimeRenderOption": {
+                  "location": "query",
+                  "enum": [
+                    "SERIAL_NUMBER",
+                    "FORMATTED_STRING"
+                  ],
+                  "description": "How dates, times, and durations should be represented in the output.\nThis is ignored if value_render_option is\nFORMATTED_VALUE.\nThe default dateTime render option is [DateTimeRenderOption.SERIAL_NUMBER].",
+                  "type": "string"
                 }
               },
               "scopes": [
@@ -4065,17 +3956,152 @@
                 "https://www.googleapis.com/auth/spreadsheets",
                 "https://www.googleapis.com/auth/spreadsheets.readonly"
               ],
-              "flatPath": "v4/spreadsheets/{spreadsheetId}/values/{range}"
+              "flatPath": "v4/spreadsheets/{spreadsheetId}/values:batchGet"
+            },
+            "clear": {
+              "parameters": {
+                "spreadsheetId": {
+                  "location": "path",
+                  "description": "The ID of the spreadsheet to update.",
+                  "required": true,
+                  "type": "string"
+                },
+                "range": {
+                  "location": "path",
+                  "description": "The A1 notation of the values to clear.",
+                  "required": true,
+                  "type": "string"
+                }
+              },
+              "scopes": [
+                "https://www.googleapis.com/auth/drive",
+                "https://www.googleapis.com/auth/spreadsheets"
+              ],
+              "flatPath": "v4/spreadsheets/{spreadsheetId}/values/{range}:clear",
+              "path": "v4/spreadsheets/{spreadsheetId}/values/{range}:clear",
+              "id": "sheets.spreadsheets.values.clear",
+              "request": {
+                "$ref": "ClearValuesRequest"
+              },
+              "description": "Clears values from a spreadsheet.\nThe caller must specify the spreadsheet ID and range.\nOnly values are cleared -- all other properties of the cell (such as\nformatting, data validation, etc..) are kept.",
+              "response": {
+                "$ref": "ClearValuesResponse"
+              },
+              "parameterOrder": [
+                "spreadsheetId",
+                "range"
+              ],
+              "httpMethod": "POST"
+            },
+            "append": {
+              "id": "sheets.spreadsheets.values.append",
+              "path": "v4/spreadsheets/{spreadsheetId}/values/{range}:append",
+              "description": "Appends values to a spreadsheet. The input range is used to search for\nexisting data and find a \"table\" within that range. Values will be\nappended to the next row of the table, starting with the first column of\nthe table. See the\n[guide](/sheets/api/guides/values#appending_values)\nand\n[sample code](/sheets/api/samples/writing#append_values)\nfor specific details of how tables are detected and data is appended.\n\nThe caller must specify the spreadsheet ID, range, and\na valueInputOption.  The `valueInputOption` only\ncontrols how the input data will be added to the sheet (column-wise or\nrow-wise), it does not influence what cell the data starts being written\nto.",
+              "request": {
+                "$ref": "ValueRange"
+              },
+              "httpMethod": "POST",
+              "parameterOrder": [
+                "spreadsheetId",
+                "range"
+              ],
+              "response": {
+                "$ref": "AppendValuesResponse"
+              },
+              "scopes": [
+                "https://www.googleapis.com/auth/drive",
+                "https://www.googleapis.com/auth/spreadsheets"
+              ],
+              "parameters": {
+                "responseDateTimeRenderOption": {
+                  "description": "Determines how dates, times, and durations in the response should be\nrendered. This is ignored if response_value_render_option is\nFORMATTED_VALUE.\nThe default dateTime render option is [DateTimeRenderOption.SERIAL_NUMBER].",
+                  "type": "string",
+                  "location": "query",
+                  "enum": [
+                    "SERIAL_NUMBER",
+                    "FORMATTED_STRING"
+                  ]
+                },
+                "range": {
+                  "description": "The A1 notation of a range to search for a logical table of data.\nValues will be appended after the last row of the table.",
+                  "required": true,
+                  "type": "string",
+                  "location": "path"
+                },
+                "includeValuesInResponse": {
+                  "description": "Determines if the update response should include the values\nof the cells that were appended. By default, responses\ndo not include the updated values.",
+                  "type": "boolean",
+                  "location": "query"
+                },
+                "spreadsheetId": {
+                  "description": "The ID of the spreadsheet to update.",
+                  "required": true,
+                  "type": "string",
+                  "location": "path"
+                },
+                "responseValueRenderOption": {
+                  "description": "Determines how values in the response should be rendered.\nThe default render option is ValueRenderOption.FORMATTED_VALUE.",
+                  "type": "string",
+                  "location": "query",
+                  "enum": [
+                    "FORMATTED_VALUE",
+                    "UNFORMATTED_VALUE",
+                    "FORMULA"
+                  ]
+                },
+                "insertDataOption": {
+                  "description": "How the input data should be inserted.",
+                  "type": "string",
+                  "location": "query",
+                  "enum": [
+                    "OVERWRITE",
+                    "INSERT_ROWS"
+                  ]
+                },
+                "valueInputOption": {
+                  "description": "How the input data should be interpreted.",
+                  "type": "string",
+                  "location": "query",
+                  "enum": [
+                    "INPUT_VALUE_OPTION_UNSPECIFIED",
+                    "RAW",
+                    "USER_ENTERED"
+                  ]
+                }
+              },
+              "flatPath": "v4/spreadsheets/{spreadsheetId}/values/{range}:append"
             }
           }
         },
         "sheets": {
           "methods": {
             "copyTo": {
-              "description": "Copies a single sheet from a spreadsheet to another spreadsheet.\nReturns the properties of the newly created sheet.",
+              "parameters": {
+                "sheetId": {
+                  "location": "path",
+                  "description": "The ID of the sheet to copy.",
+                  "format": "int32",
+                  "required": true,
+                  "type": "integer"
+                },
+                "spreadsheetId": {
+                  "description": "The ID of the spreadsheet containing the sheet to copy.",
+                  "required": true,
+                  "type": "string",
+                  "location": "path"
+                }
+              },
+              "scopes": [
+                "https://www.googleapis.com/auth/drive",
+                "https://www.googleapis.com/auth/spreadsheets"
+              ],
+              "flatPath": "v4/spreadsheets/{spreadsheetId}/sheets/{sheetId}:copyTo",
+              "path": "v4/spreadsheets/{spreadsheetId}/sheets/{sheetId}:copyTo",
+              "id": "sheets.spreadsheets.sheets.copyTo",
               "request": {
                 "$ref": "CopySheetToAnotherSpreadsheetRequest"
               },
+              "description": "Copies a single sheet from a spreadsheet to another spreadsheet.\nReturns the properties of the newly created sheet.",
               "response": {
                 "$ref": "SheetProperties"
               },
@@ -4083,29 +4109,7 @@
                 "spreadsheetId",
                 "sheetId"
               ],
-              "httpMethod": "POST",
-              "scopes": [
-                "https://www.googleapis.com/auth/drive",
-                "https://www.googleapis.com/auth/spreadsheets"
-              ],
-              "parameters": {
-                "sheetId": {
-                  "description": "The ID of the sheet to copy.",
-                  "format": "int32",
-                  "required": true,
-                  "type": "integer",
-                  "location": "path"
-                },
-                "spreadsheetId": {
-                  "location": "path",
-                  "description": "The ID of the spreadsheet containing the sheet to copy.",
-                  "required": true,
-                  "type": "string"
-                }
-              },
-              "flatPath": "v4/spreadsheets/{spreadsheetId}/sheets/{sheetId}:copyTo",
-              "path": "v4/spreadsheets/{spreadsheetId}/sheets/{sheetId}:copyTo",
-              "id": "sheets.spreadsheets.sheets.copyTo"
+              "httpMethod": "POST"
             }
           }
         }
@@ -4113,6 +4117,71 @@
     }
   },
   "parameters": {
+    "upload_protocol": {
+      "description": "Upload protocol for media (e.g. \"raw\", \"multipart\").",
+      "type": "string",
+      "location": "query"
+    },
+    "prettyPrint": {
+      "location": "query",
+      "description": "Returns response with indentations and line breaks.",
+      "type": "boolean",
+      "default": "true"
+    },
+    "uploadType": {
+      "location": "query",
+      "description": "Legacy upload protocol for media (e.g. \"media\", \"multipart\").",
+      "type": "string"
+    },
+    "fields": {
+      "description": "Selector specifying which fields to include in a partial response.",
+      "type": "string",
+      "location": "query"
+    },
+    "$.xgafv": {
+      "enumDescriptions": [
+        "v1 error format",
+        "v2 error format"
+      ],
+      "location": "query",
+      "enum": [
+        "1",
+        "2"
+      ],
+      "description": "V1 error format.",
+      "type": "string"
+    },
+    "callback": {
+      "location": "query",
+      "description": "JSONP",
+      "type": "string"
+    },
+    "alt": {
+      "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",
+      "description": "Data format for response.",
+      "default": "json"
+    },
+    "access_token": {
+      "description": "OAuth access token.",
+      "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"
+    },
     "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.",
@@ -4133,71 +4202,6 @@
       "description": "OAuth bearer token.",
       "type": "string",
       "location": "query"
-    },
-    "upload_protocol": {
-      "description": "Upload protocol for media (e.g. \"raw\", \"multipart\").",
-      "type": "string",
-      "location": "query"
-    },
-    "prettyPrint": {
-      "location": "query",
-      "description": "Returns response with indentations and line breaks.",
-      "type": "boolean",
-      "default": "true"
-    },
-    "uploadType": {
-      "location": "query",
-      "description": "Legacy upload protocol for media (e.g. \"media\", \"multipart\").",
-      "type": "string"
-    },
-    "fields": {
-      "location": "query",
-      "description": "Selector specifying which fields to include in a partial response.",
-      "type": "string"
-    },
-    "$.xgafv": {
-      "enum": [
-        "1",
-        "2"
-      ],
-      "description": "V1 error format.",
-      "type": "string",
-      "enumDescriptions": [
-        "v1 error format",
-        "v2 error format"
-      ],
-      "location": "query"
-    },
-    "callback": {
-      "description": "JSONP",
-      "type": "string",
-      "location": "query"
-    },
-    "alt": {
-      "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",
-      "description": "Data format for response.",
-      "default": "json"
-    },
-    "access_token": {
-      "location": "query",
-      "description": "OAuth access token.",
-      "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"
     }
   },
   "version": "v4",
@@ -4205,9 +4209,5 @@
   "servicePath": "",
   "description": "Reads and writes Google Sheets.",
   "kind": "discovery#restDescription",
-  "basePath": "",
-  "documentationLink": "https://developers.google.com/sheets/",
-  "id": "sheets:v4",
-  "revision": "20170309",
-  "discoveryVersion": "v1"
+  "basePath": ""
 }
diff --git a/sheets/v4/sheets-gen.go b/sheets/v4/sheets-gen.go
index e433948..e679b89 100644
--- a/sheets/v4/sheets-gen.go
+++ b/sheets/v4/sheets-gen.go
@@ -70,10 +70,9 @@
 }
 
 type Service struct {
-	client                    *http.Client
-	BasePath                  string // API endpoint base URL
-	UserAgent                 string // optional additional User-Agent fragment
-	GoogleClientHeaderElement string // client header fragment, for Google use only
+	client    *http.Client
+	BasePath  string // API endpoint base URL
+	UserAgent string // optional additional User-Agent fragment
 
 	Spreadsheets *SpreadsheetsService
 }
@@ -85,10 +84,6 @@
 	return googleapi.UserAgent + " " + s.UserAgent
 }
 
-func (s *Service) clientHeader() string {
-	return gensupport.GoogleClientHeader("20170210", s.GoogleClientHeaderElement)
-}
-
 func NewSpreadsheetsService(s *Service) *SpreadsheetsService {
 	rs := &SpreadsheetsService{s: s}
 	rs.Sheets = NewSpreadsheetsSheetsService(s)
@@ -6558,7 +6553,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	var body io.Reader = nil
 	body, err := googleapi.WithoutDataWrapper.JSONReader(c.batchupdatespreadsheetrequest)
 	if err != nil {
@@ -6693,7 +6687,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	var body io.Reader = nil
 	body, err := googleapi.WithoutDataWrapper.JSONReader(c.spreadsheet)
 	if err != nil {
@@ -6865,7 +6858,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	if c.ifNoneMatch_ != "" {
 		reqHeaders.Set("If-None-Match", c.ifNoneMatch_)
 	}
@@ -7013,7 +7005,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	var body io.Reader = nil
 	body, err := googleapi.WithoutDataWrapper.JSONReader(c.copysheettoanotherspreadsheetrequest)
 	if err != nil {
@@ -7244,7 +7235,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	var body io.Reader = nil
 	body, err := googleapi.WithoutDataWrapper.JSONReader(c.valuerange)
 	if err != nil {
@@ -7437,7 +7427,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	var body io.Reader = nil
 	body, err := googleapi.WithoutDataWrapper.JSONReader(c.batchclearvaluesrequest)
 	if err != nil {
@@ -7640,7 +7629,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	if c.ifNoneMatch_ != "" {
 		reqHeaders.Set("If-None-Match", c.ifNoneMatch_)
 	}
@@ -7811,7 +7799,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	var body io.Reader = nil
 	body, err := googleapi.WithoutDataWrapper.JSONReader(c.batchupdatevaluesrequest)
 	if err != nil {
@@ -7953,7 +7940,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	var body io.Reader = nil
 	body, err := googleapi.WithoutDataWrapper.JSONReader(c.clearvaluesrequest)
 	if err != nil {
@@ -8158,7 +8144,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	if c.ifNoneMatch_ != "" {
 		reqHeaders.Set("If-None-Match", c.ifNoneMatch_)
 	}
@@ -8390,7 +8375,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	var body io.Reader = nil
 	body, err := googleapi.WithoutDataWrapper.JSONReader(c.valuerange)
 	if err != nil {
diff --git a/siteverification/v1/siteverification-gen.go b/siteverification/v1/siteverification-gen.go
index 902d7e3..0b3867e 100644
--- a/siteverification/v1/siteverification-gen.go
+++ b/siteverification/v1/siteverification-gen.go
@@ -64,10 +64,9 @@
 }
 
 type Service struct {
-	client                    *http.Client
-	BasePath                  string // API endpoint base URL
-	UserAgent                 string // optional additional User-Agent fragment
-	GoogleClientHeaderElement string // client header fragment, for Google use only
+	client    *http.Client
+	BasePath  string // API endpoint base URL
+	UserAgent string // optional additional User-Agent fragment
 
 	WebResource *WebResourceService
 }
@@ -79,10 +78,6 @@
 	return googleapi.UserAgent + " " + s.UserAgent
 }
 
-func (s *Service) clientHeader() string {
-	return gensupport.GoogleClientHeader("20170210", s.GoogleClientHeaderElement)
-}
-
 func NewWebResourceService(s *Service) *WebResourceService {
 	rs := &WebResourceService{s: s}
 	return rs
@@ -352,7 +347,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	var body io.Reader = nil
 	c.urlParams_.Set("alt", alt)
 	urls := googleapi.ResolveRelative(c.s.BasePath, "webResource/{id}")
@@ -459,7 +453,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	if c.ifNoneMatch_ != "" {
 		reqHeaders.Set("If-None-Match", c.ifNoneMatch_)
 	}
@@ -588,7 +581,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	var body io.Reader = nil
 	body, err := googleapi.WithoutDataWrapper.JSONReader(c.siteverificationwebresourcegettokenrequest)
 	if err != nil {
@@ -710,7 +702,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	var body io.Reader = nil
 	body, err := googleapi.WithoutDataWrapper.JSONReader(c.siteverificationwebresourceresource)
 	if err != nil {
@@ -850,7 +841,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	if c.ifNoneMatch_ != "" {
 		reqHeaders.Set("If-None-Match", c.ifNoneMatch_)
 	}
@@ -967,7 +957,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	var body io.Reader = nil
 	body, err := googleapi.WithoutDataWrapper.JSONReader(c.siteverificationwebresourceresource)
 	if err != nil {
@@ -1102,7 +1091,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	var body io.Reader = nil
 	body, err := googleapi.WithoutDataWrapper.JSONReader(c.siteverificationwebresourceresource)
 	if err != nil {
diff --git a/slides/v1/slides-api.json b/slides/v1/slides-api.json
index ec3102c..08cf5cb 100644
--- a/slides/v1/slides-api.json
+++ b/slides/v1/slides-api.json
@@ -1,4 +1,30 @@
 {
+  "canonicalName": "Slides",
+  "auth": {
+    "oauth2": {
+      "scopes": {
+        "https://www.googleapis.com/auth/presentations": {
+          "description": "View and manage your Google Slides presentations"
+        },
+        "https://www.googleapis.com/auth/presentations.readonly": {
+          "description": "View your Google Slides presentations"
+        },
+        "https://www.googleapis.com/auth/spreadsheets.readonly": {
+          "description": "View your Google Spreadsheets"
+        },
+        "https://www.googleapis.com/auth/drive": {
+          "description": "View and manage the files in your Google Drive"
+        },
+        "https://www.googleapis.com/auth/drive.readonly": {
+          "description": "View the files in your Google Drive"
+        },
+        "https://www.googleapis.com/auth/spreadsheets": {
+          "description": "View and manage your spreadsheets in Google Drive"
+        }
+      }
+    }
+  },
+  "rootUrl": "https://slides.googleapis.com/",
   "ownerDomain": "google.com",
   "name": "slides",
   "batchPath": "batch",
@@ -27,19 +53,17 @@
           }
         },
         "batchUpdate": {
-          "id": "slides.presentations.batchUpdate",
-          "path": "v1/presentations/{presentationId}:batchUpdate",
           "request": {
             "$ref": "BatchUpdatePresentationRequest"
           },
           "description": "Applies one or more updates to the presentation.\n\nEach request is validated before\nbeing applied. If any request is not valid, then the entire request will\nfail and nothing will be applied.\n\nSome requests have replies to\ngive you some information about how they are applied. Other requests do\nnot need to return information; these each return an empty reply.\nThe order of replies matches that of the requests.\n\nFor example, suppose you call batchUpdate with four updates, and only the\nthird one returns information. The response would have two empty replies:\nthe reply to the third request, and another empty reply, in that order.\n\nBecause other users may be editing the presentation, the presentation\nmight not exactly reflect your changes: your changes may\nbe altered with respect to collaborator changes. If there are no\ncollaborators, the presentation should reflect your changes. In any case,\nthe updates in your request are guaranteed to be applied together\natomically.",
-          "httpMethod": "POST",
-          "parameterOrder": [
-            "presentationId"
-          ],
           "response": {
             "$ref": "BatchUpdatePresentationResponse"
           },
+          "parameterOrder": [
+            "presentationId"
+          ],
+          "httpMethod": "POST",
           "parameters": {
             "presentationId": {
               "description": "The presentation to apply the updates to.",
@@ -55,10 +79,11 @@
             "https://www.googleapis.com/auth/spreadsheets",
             "https://www.googleapis.com/auth/spreadsheets.readonly"
           ],
-          "flatPath": "v1/presentations/{presentationId}:batchUpdate"
+          "flatPath": "v1/presentations/{presentationId}:batchUpdate",
+          "path": "v1/presentations/{presentationId}:batchUpdate",
+          "id": "slides.presentations.batchUpdate"
         },
         "get": {
-          "description": "Gets the latest version of the specified presentation.",
           "httpMethod": "GET",
           "response": {
             "$ref": "Presentation"
@@ -66,51 +91,66 @@
           "parameterOrder": [
             "presentationId"
           ],
+          "parameters": {
+            "presentationId": {
+              "pattern": "^[^/]+$",
+              "location": "path",
+              "description": "The ID of the presentation to retrieve.",
+              "required": true,
+              "type": "string"
+            }
+          },
           "scopes": [
             "https://www.googleapis.com/auth/drive",
             "https://www.googleapis.com/auth/drive.readonly",
             "https://www.googleapis.com/auth/presentations",
             "https://www.googleapis.com/auth/presentations.readonly"
           ],
-          "parameters": {
-            "presentationId": {
-              "location": "path",
-              "description": "The ID of the presentation to retrieve.",
-              "required": true,
-              "type": "string",
-              "pattern": "^[^/]+$"
-            }
-          },
           "flatPath": "v1/presentations/{presentationsId}",
           "id": "slides.presentations.get",
-          "path": "v1/presentations/{+presentationId}"
+          "path": "v1/presentations/{+presentationId}",
+          "description": "Gets the latest version of the specified presentation."
         }
       },
       "resources": {
         "pages": {
           "methods": {
-            "get": {
-              "path": "v1/presentations/{presentationId}/pages/{pageObjectId}",
-              "id": "slides.presentations.pages.get",
-              "description": "Gets the latest version of the specified page in the presentation.",
+            "getThumbnail": {
+              "httpMethod": "GET",
               "parameterOrder": [
                 "presentationId",
                 "pageObjectId"
               ],
               "response": {
-                "$ref": "Page"
+                "$ref": "Thumbnail"
               },
-              "httpMethod": "GET",
               "parameters": {
-                "presentationId": {
+                "pageObjectId": {
                   "location": "path",
-                  "description": "The ID of the presentation to retrieve.",
+                  "description": "The object ID of the page whose thumbnail to retrieve.",
                   "required": true,
                   "type": "string"
                 },
-                "pageObjectId": {
+                "thumbnailProperties.mimeType": {
+                  "description": "The optional mime type of the thumbnail image.\n\nIf you don't specify the mime type, the default mime type will be PNG.",
+                  "type": "string",
+                  "location": "query",
+                  "enum": [
+                    "PNG"
+                  ]
+                },
+                "thumbnailProperties.thumbnailSize": {
+                  "description": "The optional thumbnail image size.\n\nIf you don't specify the size, the server chooses a default size of the\nimage.",
+                  "type": "string",
+                  "location": "query",
+                  "enum": [
+                    "THUMBNAIL_SIZE_UNSPECIFIED",
+                    "LARGE"
+                  ]
+                },
+                "presentationId": {
                   "location": "path",
-                  "description": "The object ID of the page to retrieve.",
+                  "description": "The ID of the presentation to retrieve.",
                   "required": true,
                   "type": "string"
                 }
@@ -121,7 +161,44 @@
                 "https://www.googleapis.com/auth/presentations",
                 "https://www.googleapis.com/auth/presentations.readonly"
               ],
-              "flatPath": "v1/presentations/{presentationId}/pages/{pageObjectId}"
+              "flatPath": "v1/presentations/{presentationId}/pages/{pageObjectId}/thumbnail",
+              "id": "slides.presentations.pages.getThumbnail",
+              "path": "v1/presentations/{presentationId}/pages/{pageObjectId}/thumbnail",
+              "description": "Generates a thumbnail of the latest version of the specified page in the\npresentation and returns a URL to the thumbnail image."
+            },
+            "get": {
+              "parameterOrder": [
+                "presentationId",
+                "pageObjectId"
+              ],
+              "response": {
+                "$ref": "Page"
+              },
+              "httpMethod": "GET",
+              "parameters": {
+                "pageObjectId": {
+                  "location": "path",
+                  "description": "The object ID of the page to retrieve.",
+                  "required": true,
+                  "type": "string"
+                },
+                "presentationId": {
+                  "description": "The ID of the presentation to retrieve.",
+                  "required": true,
+                  "type": "string",
+                  "location": "path"
+                }
+              },
+              "scopes": [
+                "https://www.googleapis.com/auth/drive",
+                "https://www.googleapis.com/auth/drive.readonly",
+                "https://www.googleapis.com/auth/presentations",
+                "https://www.googleapis.com/auth/presentations.readonly"
+              ],
+              "flatPath": "v1/presentations/{presentationId}/pages/{pageObjectId}",
+              "path": "v1/presentations/{presentationId}/pages/{pageObjectId}",
+              "id": "slides.presentations.pages.get",
+              "description": "Gets the latest version of the specified page in the presentation."
             }
           }
         }
@@ -129,16 +206,6 @@
     }
   },
   "parameters": {
-    "bearer_token": {
-      "description": "OAuth bearer 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\").",
@@ -150,24 +217,22 @@
       "type": "boolean",
       "default": "true"
     },
-    "fields": {
-      "description": "Selector specifying which fields to include in a partial response.",
-      "type": "string",
-      "location": "query"
-    },
     "uploadType": {
       "location": "query",
       "description": "Legacy upload protocol for media (e.g. \"media\", \"multipart\").",
       "type": "string"
     },
+    "fields": {
+      "description": "Selector specifying which fields to include in a partial response.",
+      "type": "string",
+      "location": "query"
+    },
     "callback": {
+      "type": "string",
       "location": "query",
-      "description": "JSONP",
-      "type": "string"
+      "description": "JSONP"
     },
     "$.xgafv": {
-      "description": "V1 error format.",
-      "type": "string",
       "enumDescriptions": [
         "v1 error format",
         "v2 error format"
@@ -176,9 +241,12 @@
       "enum": [
         "1",
         "2"
-      ]
+      ],
+      "description": "V1 error format.",
+      "type": "string"
     },
     "alt": {
+      "default": "json",
       "enum": [
         "json",
         "media",
@@ -191,219 +259,61 @@
         "Responses with Content-Type of application/x-protobuf"
       ],
       "location": "query",
-      "description": "Data format for response.",
-      "default": "json"
+      "description": "Data format for response."
+    },
+    "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.",
       "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.",
+    "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"
     },
-    "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"
-    },
     "pp": {
       "description": "Pretty-print response.",
       "type": "boolean",
       "default": "true",
       "location": "query"
+    },
+    "bearer_token": {
+      "location": "query",
+      "description": "OAuth bearer token.",
+      "type": "string"
+    },
+    "oauth_token": {
+      "location": "query",
+      "description": "OAuth 2.0 token for the current user.",
+      "type": "string"
     }
   },
   "version": "v1",
   "baseUrl": "https://slides.googleapis.com/",
-  "servicePath": "",
   "kind": "discovery#restDescription",
   "description": "An API for creating and editing Google Slides presentations.",
+  "servicePath": "",
   "basePath": "",
+  "revision": "20170323",
   "documentationLink": "https://developers.google.com/slides/",
-  "revision": "20170308",
   "id": "slides:v1",
   "discoveryVersion": "v1",
   "version_module": "True",
   "schemas": {
-    "Shadow": {
-      "description": "The shadow properties of a page element.\n\nIf these fields are unset, they may be inherited from a parent placeholder\nif it exists. If there is no parent, the fields will default to the value\nused for new page elements created in the Slides editor, which may depend on\nthe page element kind.",
-      "type": "object",
-      "properties": {
-        "propertyState": {
-          "enumDescriptions": [
-            "If a property's state is RENDERED, then the element has the corresponding\nproperty when rendered on a page. If the element is a placeholder shape as\ndetermined by the placeholder\nfield, and it inherits from a placeholder shape, the corresponding field\nmay be unset, meaning that the property value is inherited from a parent\nplaceholder. If the element does not inherit, then the field will contain\nthe rendered value. This is the default value.",
-            "If a property's state is NOT_RENDERED, then the element does not have the\ncorresponding property when rendered on a page. However, the field may\nstill be set so it can be inherited by child shapes. To remove a property\nfrom a rendered element, set its property_state to NOT_RENDERED.",
-            "If a property's state is INHERIT, then the property state uses the value of\ncorresponding `property_state` field on the parent shape. Elements that do\nnot inherit will never have an INHERIT property state."
-          ],
-          "enum": [
-            "RENDERED",
-            "NOT_RENDERED",
-            "INHERIT"
-          ],
-          "description": "The shadow property state.\n\nUpdating the the shadow on a page element will implicitly update this field\nto `RENDERED`, unless another value is specified in the same request. To\nhave no shadow on a page element, set this field to `NOT_RENDERED`. In this\ncase, any other shadow fields set in the same request will be ignored.",
-          "type": "string"
-        },
-        "blurRadius": {
-          "$ref": "Dimension",
-          "description": "The radius of the shadow blur. The larger the radius, the more diffuse the\nshadow becomes."
-        },
-        "type": {
-          "enumDescriptions": [
-            "Unspecified shadow type.",
-            "Outer shadow."
-          ],
-          "enum": [
-            "SHADOW_TYPE_UNSPECIFIED",
-            "OUTER"
-          ],
-          "description": "The type of the shadow.",
-          "type": "string"
-        },
-        "transform": {
-          "$ref": "AffineTransform",
-          "description": "Transform that encodes the translate, scale, and skew of the shadow,\nrelative to the alignment position."
-        },
-        "alignment": {
-          "enumDescriptions": [
-            "Unspecified.",
-            "Top left.",
-            "Top center.",
-            "Top right.",
-            "Left center.",
-            "Center.",
-            "Right center.",
-            "Bottom left.",
-            "Bottom center.",
-            "Bottom right."
-          ],
-          "enum": [
-            "RECTANGLE_POSITION_UNSPECIFIED",
-            "TOP_LEFT",
-            "TOP_CENTER",
-            "TOP_RIGHT",
-            "LEFT_CENTER",
-            "CENTER",
-            "RIGHT_CENTER",
-            "BOTTOM_LEFT",
-            "BOTTOM_CENTER",
-            "BOTTOM_RIGHT"
-          ],
-          "description": "The alignment point of the shadow, that sets the origin for translate,\nscale and skew of the shadow.",
-          "type": "string"
-        },
-        "alpha": {
-          "description": "The alpha of the shadow's color, from 0.0 to 1.0.",
-          "format": "float",
-          "type": "number"
-        },
-        "color": {
-          "$ref": "OpaqueColor",
-          "description": "The shadow color value."
-        },
-        "rotateWithShape": {
-          "description": "Whether the shadow should rotate with the shape.",
-          "type": "boolean"
-        }
-      },
-      "id": "Shadow"
-    },
-    "DeleteTableRowRequest": {
-      "id": "DeleteTableRowRequest",
-      "description": "Deletes a row from a table.",
-      "type": "object",
-      "properties": {
-        "cellLocation": {
-          "description": "The reference table cell location from which a row will be deleted.\n\nThe row this cell spans will be deleted. If this is a merged cell, multiple\nrows will be deleted. If no rows remain in the table after this deletion,\nthe whole table is deleted.",
-          "$ref": "TableCellLocation"
-        },
-        "tableObjectId": {
-          "description": "The table to delete rows from.",
-          "type": "string"
-        }
-      }
-    },
-    "Bullet": {
-      "description": "Describes the bullet of a paragraph.",
-      "type": "object",
-      "properties": {
-        "listId": {
-          "description": "The ID of the list this paragraph belongs to.",
-          "type": "string"
-        },
-        "glyph": {
-          "description": "The rendered bullet glyph for this paragraph.",
-          "type": "string"
-        },
-        "nestingLevel": {
-          "description": "The nesting level of this paragraph in the list.",
-          "format": "int32",
-          "type": "integer"
-        },
-        "bulletStyle": {
-          "$ref": "TextStyle",
-          "description": "The paragraph specific text style applied to this bullet."
-        }
-      },
-      "id": "Bullet"
-    },
-    "OutlineFill": {
-      "type": "object",
-      "properties": {
-        "solidFill": {
-          "$ref": "SolidFill",
-          "description": "Solid color fill."
-        }
-      },
-      "id": "OutlineFill",
-      "description": "The fill of the outline."
-    },
-    "CreateLineResponse": {
-      "description": "The result of creating a line.",
-      "type": "object",
-      "properties": {
-        "objectId": {
-          "description": "The object ID of the created line.",
-          "type": "string"
-        }
-      },
-      "id": "CreateLineResponse"
-    },
-    "TableCellLocation": {
-      "properties": {
-        "rowIndex": {
-          "description": "The 0-based row index.",
-          "format": "int32",
-          "type": "integer"
-        },
-        "columnIndex": {
-          "description": "The 0-based column index.",
-          "format": "int32",
-          "type": "integer"
-        }
-      },
-      "id": "TableCellLocation",
-      "description": "A location of a single table cell within a table.",
-      "type": "object"
-    },
-    "ReplaceAllTextResponse": {
-      "description": "The result of replacing text.",
-      "type": "object",
-      "properties": {
-        "occurrencesChanged": {
-          "description": "The number of occurrences changed by replacing all text.",
-          "format": "int32",
-          "type": "integer"
-        }
-      },
-      "id": "ReplaceAllTextResponse"
-    },
     "UpdateParagraphStyleRequest": {
       "description": "Updates the styling for all of the paragraphs within a Shape or Table that\noverlap with the given text index range.",
       "type": "object",
       "properties": {
+        "fields": {
+          "description": "The fields that should be updated.\n\nAt least one field must be specified. The root `style` is implied and\nshould not be specified. A single `\"*\"` can be used as short-hand for\nlisting every field.\n\nFor example, to update the paragraph alignment, set `fields` to\n`\"alignment\"`.\n\nTo reset a property to its default value, include its field name in the\nfield mask but leave the field itself unset.",
+          "format": "google-fieldmask",
+          "type": "string"
+        },
         "objectId": {
           "description": "The object ID of the shape or table with the text to be styled.",
           "type": "string"
@@ -417,19 +327,13 @@
           "description": "The location of the cell in the table containing the paragraph(s) to\nstyle. If `object_id` refers to a table, `cell_location` must have a value.\nOtherwise, it must not."
         },
         "style": {
-          "$ref": "ParagraphStyle",
-          "description": "The paragraph's style."
-        },
-        "fields": {
-          "description": "The fields that should be updated.\n\nAt least one field must be specified. The root `style` is implied and\nshould not be specified. A single `\"*\"` can be used as short-hand for\nlisting every field.\n\nFor example, to update the paragraph alignment, set `fields` to\n`\"alignment\"`.\n\nTo reset a property to its default value, include its field name in the\nfield mask but leave the field itself unset.",
-          "format": "google-fieldmask",
-          "type": "string"
+          "description": "The paragraph's style.",
+          "$ref": "ParagraphStyle"
         }
       },
       "id": "UpdateParagraphStyleRequest"
     },
     "ColorScheme": {
-      "description": "The palette of predefined colors for a page.",
       "type": "object",
       "properties": {
         "colors": {
@@ -440,15 +344,18 @@
           }
         }
       },
-      "id": "ColorScheme"
+      "id": "ColorScheme",
+      "description": "The palette of predefined colors for a page."
     },
     "Shape": {
       "description": "A PageElement kind representing a\ngeneric shape that does not have a more specific classification.",
       "type": "object",
       "properties": {
+        "shapeProperties": {
+          "description": "The properties of the shape.",
+          "$ref": "ShapeProperties"
+        },
         "shapeType": {
-          "description": "The type of the shape.",
-          "type": "string",
           "enumDescriptions": [
             "The shape type that is not predefined.",
             "Text box shape.",
@@ -738,24 +645,23 @@
             "ELLIPSE_RIBBON_2",
             "CLOUD_CALLOUT",
             "CUSTOM"
-          ]
+          ],
+          "description": "The type of the shape.",
+          "type": "string"
         },
         "text": {
           "$ref": "TextContent",
           "description": "The text content of the shape."
         },
         "placeholder": {
-          "$ref": "Placeholder",
-          "description": "Placeholders are shapes that are inherit from corresponding placeholders on\nlayouts and masters.\n\nIf set, the shape is a placeholder shape and any inherited properties\ncan be resolved by looking at the parent placeholder identified by the\nPlaceholder.parent_object_id field."
-        },
-        "shapeProperties": {
-          "$ref": "ShapeProperties",
-          "description": "The properties of the shape."
+          "description": "Placeholders are shapes that are inherit from corresponding placeholders on\nlayouts and masters.\n\nIf set, the shape is a placeholder shape and any inherited properties\ncan be resolved by looking at the parent placeholder identified by the\nPlaceholder.parent_object_id field.",
+          "$ref": "Placeholder"
         }
       },
       "id": "Shape"
     },
     "Image": {
+      "description": "A PageElement kind representing an\nimage.",
       "type": "object",
       "properties": {
         "imageProperties": {
@@ -767,13 +673,17 @@
           "type": "string"
         }
       },
-      "id": "Image",
-      "description": "A PageElement kind representing an\nimage."
+      "id": "Image"
     },
     "AffineTransform": {
       "description": "AffineTransform uses a 3x3 matrix with an implied last row of [ 0 0 1 ]\nto transform source coordinates (x,y) into destination coordinates (x', y')\naccording to:\n\n      x'  x  =   shear_y  scale_y  translate_y  \n      1  [ 1 ]\n\nAfter transformation,\n\n     x' = scale_x * x + shear_x * y + translate_x;\n     y' = scale_y * y + shear_y * x + translate_y;\n\nThis message is therefore composed of these six matrix elements.",
       "type": "object",
       "properties": {
+        "scaleX": {
+          "type": "number",
+          "description": "The X coordinate scaling element.",
+          "format": "double"
+        },
         "shearX": {
           "description": "The X coordinate shearing element.",
           "format": "double",
@@ -785,9 +695,9 @@
           "type": "number"
         },
         "translateY": {
+          "type": "number",
           "description": "The Y coordinate translation element.",
-          "format": "double",
-          "type": "number"
+          "format": "double"
         },
         "translateX": {
           "description": "The X coordinate translation element.",
@@ -795,38 +705,31 @@
           "type": "number"
         },
         "shearY": {
-          "type": "number",
           "description": "The Y coordinate shearing element.",
-          "format": "double"
+          "format": "double",
+          "type": "number"
         },
         "unit": {
-          "enum": [
-            "UNIT_UNSPECIFIED",
-            "EMU",
-            "PT"
-          ],
-          "description": "The units for translate elements.",
           "type": "string",
           "enumDescriptions": [
             "The units are unknown.",
             "An English Metric Unit (EMU) is defined as 1/360,000 of a centimeter\nand thus there are 914,400 EMUs per inch, and 12,700 EMUs per point.",
             "A point, 1/72 of an inch."
-          ]
-        },
-        "scaleX": {
-          "description": "The X coordinate scaling element.",
-          "format": "double",
-          "type": "number"
+          ],
+          "enum": [
+            "UNIT_UNSPECIFIED",
+            "EMU",
+            "PT"
+          ],
+          "description": "The units for translate elements."
         }
       },
       "id": "AffineTransform"
     },
     "InsertTextRequest": {
+      "description": "Inserts text into a shape or a table cell.",
+      "type": "object",
       "properties": {
-        "cellLocation": {
-          "$ref": "TableCellLocation",
-          "description": "The optional table cell location if the text is to be inserted into a table\ncell. If present, the object_id must refer to a table."
-        },
         "objectId": {
           "description": "The object ID of the shape or table where the text will be inserted.",
           "type": "string"
@@ -836,34 +739,36 @@
           "type": "string"
         },
         "insertionIndex": {
-          "type": "integer",
           "description": "The index where the text will be inserted, in Unicode code units, based\non TextElement indexes.\n\nThe index is zero-based and is computed from the start of the string.\nThe index may be adjusted to prevent insertions inside Unicode grapheme\nclusters. In these cases, the text will be inserted immediately after the\ngrapheme cluster.",
-          "format": "int32"
+          "format": "int32",
+          "type": "integer"
+        },
+        "cellLocation": {
+          "description": "The optional table cell location if the text is to be inserted into a table\ncell. If present, the object_id must refer to a table.",
+          "$ref": "TableCellLocation"
         }
       },
-      "id": "InsertTextRequest",
-      "description": "Inserts text into a shape or a table cell.",
-      "type": "object"
+      "id": "InsertTextRequest"
     },
     "AutoText": {
       "description": "A TextElement kind that represents auto text.",
       "type": "object",
       "properties": {
         "type": {
+          "enum": [
+            "TYPE_UNSPECIFIED",
+            "SLIDE_NUMBER"
+          ],
           "description": "The type of this auto text.",
           "type": "string",
           "enumDescriptions": [
             "An unspecified autotext type.",
             "Type for autotext that represents the current slide number."
-          ],
-          "enum": [
-            "TYPE_UNSPECIFIED",
-            "SLIDE_NUMBER"
           ]
         },
         "content": {
-          "type": "string",
-          "description": "The rendered content of this auto text, if available."
+          "description": "The rendered content of this auto text, if available.",
+          "type": "string"
         },
         "style": {
           "$ref": "TextStyle",
@@ -873,6 +778,7 @@
       "id": "AutoText"
     },
     "CreateVideoResponse": {
+      "description": "The result of creating a video.",
       "type": "object",
       "properties": {
         "objectId": {
@@ -880,13 +786,46 @@
           "type": "string"
         }
       },
-      "id": "CreateVideoResponse",
-      "description": "The result of creating a video."
+      "id": "CreateVideoResponse"
+    },
+    "UpdatePageElementTransformRequest": {
+      "id": "UpdatePageElementTransformRequest",
+      "description": "Updates the transform of a page element.",
+      "type": "object",
+      "properties": {
+        "objectId": {
+          "description": "The object ID of the page element to update.",
+          "type": "string"
+        },
+        "transform": {
+          "$ref": "AffineTransform",
+          "description": "The input transform matrix used to update the page element."
+        },
+        "applyMode": {
+          "enum": [
+            "APPLY_MODE_UNSPECIFIED",
+            "RELATIVE",
+            "ABSOLUTE"
+          ],
+          "description": "The apply mode of the transform update.",
+          "type": "string",
+          "enumDescriptions": [
+            "Unspecified mode.",
+            "Applies the new AffineTransform matrix to the existing one, and\nreplaces the existing one with the resulting concatenation.",
+            "Replaces the existing AffineTransform matrix with the new one."
+          ]
+        }
+      }
     },
     "DeleteTextRequest": {
+      "id": "DeleteTextRequest",
       "description": "Deletes text from a shape or a table cell.",
       "type": "object",
       "properties": {
+        "cellLocation": {
+          "description": "The optional table cell location if the text is to be deleted from a table\ncell. If present, the object_id must refer to a table.",
+          "$ref": "TableCellLocation"
+        },
         "objectId": {
           "description": "The object ID of the shape or table from which the text will be deleted.",
           "type": "string"
@@ -894,44 +833,11 @@
         "textRange": {
           "$ref": "Range",
           "description": "The range of text to delete, based on TextElement indexes.\n\nThere is always an implicit newline character at the end of a shape's or\ntable cell's text that cannot be deleted. `Range.Type.ALL` will use the\ncorrect bounds, but care must be taken when specifying explicit bounds for\nrange types `FROM_START_INDEX` and `FIXED_RANGE`. For example, if the text\nis \"ABC\", followed by an implicit newline, then the maximum value is 2 for\n`text_range.start_index` and 3 for `text_range.end_index`.\n\nDeleting text that crosses a paragraph boundary may result in changes\nto paragraph styles and lists as the two paragraphs are merged.\n\nRanges that include only one code unit of a surrogate pair are expanded to\ninclude both code units."
-        },
-        "cellLocation": {
-          "description": "The optional table cell location if the text is to be deleted from a table\ncell. If present, the object_id must refer to a table.",
-          "$ref": "TableCellLocation"
         }
-      },
-      "id": "DeleteTextRequest"
-    },
-    "UpdatePageElementTransformRequest": {
-      "description": "Updates the transform of a page element.",
-      "type": "object",
-      "properties": {
-        "objectId": {
-          "type": "string",
-          "description": "The object ID of the page element to update."
-        },
-        "transform": {
-          "description": "The input transform matrix used to update the page element.",
-          "$ref": "AffineTransform"
-        },
-        "applyMode": {
-          "type": "string",
-          "enumDescriptions": [
-            "Unspecified mode.",
-            "Applies the new AffineTransform matrix to the existing one, and\nreplaces the existing one with the resulting concatenation.",
-            "Replaces the existing AffineTransform matrix with the new one."
-          ],
-          "enum": [
-            "APPLY_MODE_UNSPECIFIED",
-            "RELATIVE",
-            "ABSOLUTE"
-          ],
-          "description": "The apply mode of the transform update."
-        }
-      },
-      "id": "UpdatePageElementTransformRequest"
+      }
     },
     "DeleteObjectRequest": {
+      "description": "Deletes an object, either pages or\npage elements, from the\npresentation.",
       "type": "object",
       "properties": {
         "objectId": {
@@ -939,18 +845,41 @@
           "type": "string"
         }
       },
-      "id": "DeleteObjectRequest",
-      "description": "Deletes an object, either pages or\npage elements, from the\npresentation."
+      "id": "DeleteObjectRequest"
+    },
+    "TextElement": {
+      "description": "A TextElement describes the content of a range of indices in the text content\nof a Shape or TableCell.",
+      "type": "object",
+      "properties": {
+        "textRun": {
+          "$ref": "TextRun",
+          "description": "A TextElement representing a run of text where all of the characters\nin the run have the same TextStyle.\n\nThe `start_index` and `end_index` of TextRuns will always be fully\ncontained in the index range of a single `paragraph_marker` TextElement.\nIn other words, a TextRun will never span multiple paragraphs."
+        },
+        "autoText": {
+          "$ref": "AutoText",
+          "description": "A TextElement representing a spot in the text that is dynamically\nreplaced with content that can change over time."
+        },
+        "paragraphMarker": {
+          "$ref": "ParagraphMarker",
+          "description": "A marker representing the beginning of a new paragraph.\n\nThe `start_index` and `end_index` of this TextElement represent the\nrange of the paragraph. Other TextElements with an index range contained\ninside this paragraph's range are considered to be part of this\nparagraph. The range of indices of two separate paragraphs will never\noverlap."
+        },
+        "startIndex": {
+          "description": "The zero-based start index of this text element, in Unicode code units.",
+          "format": "int32",
+          "type": "integer"
+        },
+        "endIndex": {
+          "description": "The zero-based end index of this text element, exclusive, in Unicode code\nunits.",
+          "format": "int32",
+          "type": "integer"
+        }
+      },
+      "id": "TextElement"
     },
     "Dimension": {
       "description": "A magnitude in a single direction in the specified units.",
       "type": "object",
       "properties": {
-        "magnitude": {
-          "description": "The magnitude.",
-          "format": "double",
-          "type": "number"
-        },
         "unit": {
           "enumDescriptions": [
             "The units are unknown.",
@@ -964,69 +893,39 @@
           ],
           "description": "The units for magnitude.",
           "type": "string"
+        },
+        "magnitude": {
+          "description": "The magnitude.",
+          "format": "double",
+          "type": "number"
         }
       },
       "id": "Dimension"
     },
-    "TextElement": {
-      "type": "object",
-      "properties": {
-        "paragraphMarker": {
-          "description": "A marker representing the beginning of a new paragraph.\n\nThe `start_index` and `end_index` of this TextElement represent the\nrange of the paragraph. Other TextElements with an index range contained\ninside this paragraph's range are considered to be part of this\nparagraph. The range of indices of two separate paragraphs will never\noverlap.",
-          "$ref": "ParagraphMarker"
-        },
-        "startIndex": {
-          "description": "The zero-based start index of this text element, in Unicode code units.",
-          "format": "int32",
-          "type": "integer"
-        },
-        "endIndex": {
-          "description": "The zero-based end index of this text element, exclusive, in Unicode code\nunits.",
-          "format": "int32",
-          "type": "integer"
-        },
-        "textRun": {
-          "$ref": "TextRun",
-          "description": "A TextElement representing a run of text where all of the characters\nin the run have the same TextStyle.\n\nThe `start_index` and `end_index` of TextRuns will always be fully\ncontained in the index range of a single `paragraph_marker` TextElement.\nIn other words, a TextRun will never span multiple paragraphs."
-        },
-        "autoText": {
-          "description": "A TextElement representing a spot in the text that is dynamically\nreplaced with content that can change over time.",
-          "$ref": "AutoText"
-        }
-      },
-      "id": "TextElement",
-      "description": "A TextElement describes the content of a range of indices in the text content\nof a Shape or TableCell."
-    },
     "LineFill": {
-      "description": "The fill of the line.",
       "type": "object",
       "properties": {
         "solidFill": {
-          "$ref": "SolidFill",
-          "description": "Solid color fill."
+          "description": "Solid color fill.",
+          "$ref": "SolidFill"
         }
       },
-      "id": "LineFill"
+      "id": "LineFill",
+      "description": "The fill of the line."
     },
     "VideoProperties": {
-      "id": "VideoProperties",
-      "description": "The properties of the Video.",
       "type": "object",
       "properties": {
         "outline": {
-          "description": "The outline of the video. The default outline matches the defaults for new\nvideos created in the Slides editor.",
-          "$ref": "Outline"
+          "$ref": "Outline",
+          "description": "The outline of the video. The default outline matches the defaults for new\nvideos created in the Slides editor."
         }
-      }
+      },
+      "id": "VideoProperties",
+      "description": "The properties of the Video."
     },
     "InsertTableRowsRequest": {
-      "description": "Inserts rows into a table.",
-      "type": "object",
       "properties": {
-        "tableObjectId": {
-          "description": "The table to insert rows into.",
-          "type": "string"
-        },
         "insertBelow": {
           "description": "Whether to insert new rows below the reference cell location.\n\n- `True`: insert below the cell.\n- `False`: insert above the cell.",
           "type": "boolean"
@@ -1039,14 +938,24 @@
         "cellLocation": {
           "description": "The reference table cell location from which rows will be inserted.\n\nA new row will be inserted above (or below) the row where the reference\ncell is. If the reference cell is a merged cell, a new row will be\ninserted above (or below) the merged cell.",
           "$ref": "TableCellLocation"
+        },
+        "tableObjectId": {
+          "description": "The table to insert rows into.",
+          "type": "string"
         }
       },
-      "id": "InsertTableRowsRequest"
+      "id": "InsertTableRowsRequest",
+      "description": "Inserts rows into a table.",
+      "type": "object"
     },
     "LayoutProperties": {
       "description": "The properties of Page are only\nrelevant for pages with page_type LAYOUT.",
       "type": "object",
       "properties": {
+        "masterObjectId": {
+          "description": "The object ID of the master that this layout is based on.",
+          "type": "string"
+        },
         "name": {
           "description": "The name of the layout.",
           "type": "string"
@@ -1054,10 +963,6 @@
         "displayName": {
           "description": "The human readable name of the layout in the presentation's locale.",
           "type": "string"
-        },
-        "masterObjectId": {
-          "type": "string",
-          "description": "The object ID of the master that this layout is based on."
         }
       },
       "id": "LayoutProperties"
@@ -1066,46 +971,7 @@
       "description": "The properties of the Line.\n\nWhen unset, these fields default to values that match the appearance of\nnew lines created in the Slides editor.",
       "type": "object",
       "properties": {
-        "dashStyle": {
-          "enum": [
-            "DASH_STYLE_UNSPECIFIED",
-            "SOLID",
-            "DOT",
-            "DASH",
-            "DASH_DOT",
-            "LONG_DASH",
-            "LONG_DASH_DOT"
-          ],
-          "description": "The dash style of the line.",
-          "type": "string",
-          "enumDescriptions": [
-            "Unspecified dash style.",
-            "Solid line. Corresponds to ECMA-376 ST_PresetLineDashVal value 'solid'.\nThis 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'.",
-            "Alternating dashes and dots. Corresponds to ECMA-376 ST_PresetLineDashVal\nvalue 'dashDot'.",
-            "Line with large dashes. Corresponds to ECMA-376 ST_PresetLineDashVal\nvalue 'lgDash'.",
-            "Alternating large dashes and dots. Corresponds to ECMA-376\nST_PresetLineDashVal value 'lgDashDot'."
-          ]
-        },
-        "link": {
-          "$ref": "Link",
-          "description": "The hyperlink destination of the line. If unset, there is no link."
-        },
         "endArrow": {
-          "enumDescriptions": [
-            "An unspecified arrow style.",
-            "No arrow.",
-            "Arrow with notched back. Corresponds to ECMA-376 ST_LineEndType value\n'stealth'.",
-            "Filled arrow. Corresponds to ECMA-376 ST_LineEndType value 'triangle'.",
-            "Filled circle. Corresponds to ECMA-376 ST_LineEndType value 'oval'.",
-            "Filled square.",
-            "Filled diamond. Corresponds to ECMA-376 ST_LineEndType value 'diamond'.",
-            "Hollow arrow.",
-            "Hollow circle.",
-            "Hollow square.",
-            "Hollow diamond."
-          ],
           "enum": [
             "ARROW_STYLE_UNSPECIFIED",
             "NONE",
@@ -1120,7 +986,20 @@
             "OPEN_DIAMOND"
           ],
           "description": "The style of the arrow at the end of the line.",
-          "type": "string"
+          "type": "string",
+          "enumDescriptions": [
+            "An unspecified arrow style.",
+            "No arrow.",
+            "Arrow with notched back. Corresponds to ECMA-376 ST_LineEndType value\n'stealth'.",
+            "Filled arrow. Corresponds to ECMA-376 ST_LineEndType value 'triangle'.",
+            "Filled circle. Corresponds to ECMA-376 ST_LineEndType value 'oval'.",
+            "Filled square.",
+            "Filled diamond. Corresponds to ECMA-376 ST_LineEndType value 'diamond'.",
+            "Hollow arrow.",
+            "Hollow circle.",
+            "Hollow square.",
+            "Hollow diamond."
+          ]
         },
         "startArrow": {
           "enumDescriptions": [
@@ -1153,12 +1032,38 @@
           "type": "string"
         },
         "weight": {
-          "$ref": "Dimension",
-          "description": "The thickness of the line."
+          "description": "The thickness of the line.",
+          "$ref": "Dimension"
         },
         "lineFill": {
-          "description": "The fill of the line. The default line fill matches the defaults for new\nlines created in the Slides editor.",
-          "$ref": "LineFill"
+          "$ref": "LineFill",
+          "description": "The fill of the line. The default line fill matches the defaults for new\nlines created in the Slides editor."
+        },
+        "link": {
+          "$ref": "Link",
+          "description": "The hyperlink destination of the line. If unset, there is no link."
+        },
+        "dashStyle": {
+          "enumDescriptions": [
+            "Unspecified dash style.",
+            "Solid line. Corresponds to ECMA-376 ST_PresetLineDashVal value 'solid'.\nThis 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'.",
+            "Alternating dashes and dots. Corresponds to ECMA-376 ST_PresetLineDashVal\nvalue 'dashDot'.",
+            "Line with large dashes. Corresponds to ECMA-376 ST_PresetLineDashVal\nvalue 'lgDash'.",
+            "Alternating large dashes and dots. Corresponds to ECMA-376\nST_PresetLineDashVal value 'lgDashDot'."
+          ],
+          "enum": [
+            "DASH_STYLE_UNSPECIFIED",
+            "SOLID",
+            "DOT",
+            "DASH",
+            "DASH_DOT",
+            "LONG_DASH",
+            "LONG_DASH_DOT"
+          ],
+          "description": "The dash style of the line.",
+          "type": "string"
         }
       },
       "id": "LineProperties"
@@ -1167,31 +1072,16 @@
       "description": "A Google Slides presentation.",
       "type": "object",
       "properties": {
-        "notesMaster": {
-          "$ref": "Page",
-          "description": "The notes master in the presentation. It serves three purposes:\n\n- Placeholder shapes on a notes master contain the default text styles and\n  shape properties of all placeholder shapes on notes pages. Specifically,\n  a `SLIDE_IMAGE` placeholder shape contains the slide thumbnail, and a\n  `BODY` placeholder shape contains the speaker notes.\n- The notes master page properties define the common page properties\n  inherited by all notes pages.\n- Any other shapes on the notes master will appear on all notes pages.\n\nThe notes master is read-only."
-        },
-        "layouts": {
-          "description": "The layouts in the presentation. A layout is a template that determines\nhow content is arranged and styled on the slides that inherit from that\nlayout.",
-          "type": "array",
-          "items": {
-            "$ref": "Page"
-          }
-        },
-        "title": {
-          "description": "The title of the presentation.",
-          "type": "string"
-        },
         "locale": {
-          "description": "The locale of the presentation, as an IETF BCP 47 language tag.",
-          "type": "string"
+          "type": "string",
+          "description": "The locale of the presentation, as an IETF BCP 47 language tag."
         },
         "masters": {
-          "description": "The slide masters in the presentation. A slide master contains all common\npage elements and the common properties for a set of layouts. They serve\nthree purposes:\n\n- Placeholder shapes on a master contain the default text styles and shape\n  properties of all placeholder shapes on pages that use that master.\n- The master page properties define the common page properties inherited by\n  its layouts.\n- Any other shapes on the master slide will appear on all slides using that\n  master, regardless of their layout.",
           "type": "array",
           "items": {
             "$ref": "Page"
-          }
+          },
+          "description": "The slide masters in the presentation. A slide master contains all common\npage elements and the common properties for a set of layouts. They serve\nthree purposes:\n\n- Placeholder shapes on a master contain the default text styles and shape\n  properties of all placeholder shapes on pages that use that master.\n- The master page properties define the common page properties inherited by\n  its layouts.\n- Any other shapes on the master slide will appear on all slides using that\n  master, regardless of their layout."
         },
         "pageSize": {
           "$ref": "Size",
@@ -1202,15 +1092,30 @@
           "type": "string"
         },
         "slides": {
+          "description": "The slides in the presentation.\nA slide inherits properties from a slide layout.",
           "type": "array",
           "items": {
             "$ref": "Page"
-          },
-          "description": "The slides in the presentation.\nA slide inherits properties from a slide layout."
+          }
         },
         "revisionId": {
-          "description": "The revision ID of the presentation. Can be used in update requests\nto assert that the presentation revision hasn't changed since the last\nread operation. Only populated if the user has edit access to the\npresentation.\n\nThe format of the revision ID may change over time, so it should be treated\nopaquely. A returned revision ID is only guaranteed to be valid for 24\nhours after it has been returned and cannot be shared across users. Callers\ncan assume that if two revision IDs are equal then the presentation has not\nchanged.",
+          "description": "The revision ID of the presentation. Can be used in update requests\nto assert that the presentation revision hasn't changed since the last\nread operation. Only populated if the user has edit access to the\npresentation.\n\nThe format of the revision ID may change over time, so it should be treated\nopaquely. A returned revision ID is only guaranteed to be valid for 24\nhours after it has been returned and cannot be shared across users. If the\nrevision ID is unchanged between calls, then the presentation has not\nchanged. Conversely, a changed ID (for the same presentation and user)\nusually means the presentation has been updated; however, a changed ID can\nalso be due to internal factors such as ID format changes.",
           "type": "string"
+        },
+        "notesMaster": {
+          "$ref": "Page",
+          "description": "The notes master in the presentation. It serves three purposes:\n\n- Placeholder shapes on a notes master contain the default text styles and\n  shape properties of all placeholder shapes on notes pages. Specifically,\n  a `SLIDE_IMAGE` placeholder shape contains the slide thumbnail, and a\n  `BODY` placeholder shape contains the speaker notes.\n- The notes master page properties define the common page properties\n  inherited by all notes pages.\n- Any other shapes on the notes master will appear on all notes pages.\n\nThe notes master is read-only."
+        },
+        "title": {
+          "type": "string",
+          "description": "The title of the presentation."
+        },
+        "layouts": {
+          "description": "The layouts in the presentation. A layout is a template that determines\nhow content is arranged and styled on the slides that inherit from that\nlayout.",
+          "type": "array",
+          "items": {
+            "$ref": "Page"
+          }
         }
       },
       "id": "Presentation"
@@ -1220,10 +1125,29 @@
       "type": "object",
       "properties": {
         "rgbColor": {
-          "$ref": "RgbColor",
-          "description": "An opaque RGB color."
+          "description": "An opaque RGB color.",
+          "$ref": "RgbColor"
         },
         "themeColor": {
+          "enumDescriptions": [
+            "Unspecified theme color. This value should not be used.",
+            "Represents the first dark color.",
+            "Represents the first light color.",
+            "Represents the second dark color.",
+            "Represents the second light color.",
+            "Represents the first accent color.",
+            "Represents the second accent color.",
+            "Represents the third accent color.",
+            "Represents the fourth accent color.",
+            "Represents the fifth accent color.",
+            "Represents the sixth accent color.",
+            "Represents the color to use for hyperlinks.",
+            "Represents the color to use for visited hyperlinks.",
+            "Represents the first text color.",
+            "Represents the first background color.",
+            "Represents the second text color.",
+            "Represents the second background color."
+          ],
           "enum": [
             "THEME_COLOR_TYPE_UNSPECIFIED",
             "DARK1",
@@ -1244,26 +1168,7 @@
             "BACKGROUND2"
           ],
           "description": "An opaque theme color.",
-          "type": "string",
-          "enumDescriptions": [
-            "Unspecified theme color. This value should not be used.",
-            "Represents the first dark color.",
-            "Represents the first light color.",
-            "Represents the second dark color.",
-            "Represents the second light color.",
-            "Represents the first accent color.",
-            "Represents the second accent color.",
-            "Represents the third accent color.",
-            "Represents the fourth accent color.",
-            "Represents the fifth accent color.",
-            "Represents the sixth accent color.",
-            "Represents the color to use for hyperlinks.",
-            "Represents the color to use for visited hyperlinks.",
-            "Represents the first text color.",
-            "Represents the first background color.",
-            "Represents the second text color.",
-            "Represents the second background color."
-          ]
+          "type": "string"
         }
       },
       "id": "OpaqueColor"
@@ -1272,22 +1177,26 @@
       "description": "The properties of the Image.",
       "type": "object",
       "properties": {
+        "shadow": {
+          "$ref": "Shadow",
+          "description": "The shadow of the image. If not set, the image has no shadow. This property\nis read-only."
+        },
+        "link": {
+          "description": "The hyperlink destination of the image. If unset, there is no link.",
+          "$ref": "Link"
+        },
         "contrast": {
           "description": "The contrast effect of the image. The value should be in the interval\n[-1.0, 1.0], where 0 means no effect. This property is read-only.",
           "format": "float",
           "type": "number"
         },
-        "link": {
-          "$ref": "Link",
-          "description": "The hyperlink destination of the image. If unset, there is no link."
-        },
         "recolor": {
           "$ref": "Recolor",
           "description": "The recolor effect of the image. If not set, the image is not recolored.\nThis property is read-only."
         },
         "cropProperties": {
-          "description": "The crop properties of the image. If not set, the image is not cropped.\nThis property is read-only.",
-          "$ref": "CropProperties"
+          "$ref": "CropProperties",
+          "description": "The crop properties of the image. If not set, the image is not cropped.\nThis property is read-only."
         },
         "outline": {
           "description": "The outline of the image. If not set, the the image has no outline.",
@@ -1302,25 +1211,21 @@
           "description": "The transparency effect of the image. The value should be in the interval\n[0.0, 1.0], where 0 means no effect and 1 means completely transparent.\nThis property is read-only.",
           "format": "float",
           "type": "number"
-        },
-        "shadow": {
-          "description": "The shadow of the image. If not set, the image has no shadow. This property\nis read-only.",
-          "$ref": "Shadow"
         }
       },
       "id": "ImageProperties"
     },
     "ReplaceAllShapesWithImageResponse": {
+      "id": "ReplaceAllShapesWithImageResponse",
+      "description": "The result of replacing shapes with an image.",
       "type": "object",
       "properties": {
         "occurrencesChanged": {
+          "type": "integer",
           "description": "The number of shapes replaced with images.",
-          "format": "int32",
-          "type": "integer"
+          "format": "int32"
         }
-      },
-      "id": "ReplaceAllShapesWithImageResponse",
-      "description": "The result of replacing shapes with an image."
+      }
     },
     "Line": {
       "description": "A PageElement kind representing a\nline, curved connector, or bent connector.",
@@ -1355,28 +1260,41 @@
           "type": "string"
         },
         "lineProperties": {
-          "$ref": "LineProperties",
-          "description": "The properties of the line."
+          "description": "The properties of the line.",
+          "$ref": "LineProperties"
         }
       },
       "id": "Line"
     },
+    "BatchUpdatePresentationResponse": {
+      "type": "object",
+      "properties": {
+        "replies": {
+          "description": "The reply of the updates.  This maps 1:1 with the updates, although\nreplies to some requests may be empty.",
+          "type": "array",
+          "items": {
+            "$ref": "Response"
+          }
+        },
+        "presentationId": {
+          "description": "The presentation the updates were applied to.",
+          "type": "string"
+        }
+      },
+      "id": "BatchUpdatePresentationResponse",
+      "description": "Response message from a batch update."
+    },
     "CreateSheetsChartRequest": {
       "description": "Creates an embedded Google Sheets chart.\n\nNOTE: Chart creation requires at least one of the spreadsheets.readonly,\nspreadsheets, drive.readonly, or drive OAuth scopes.",
       "type": "object",
       "properties": {
-        "chartId": {
-          "description": "The ID of the specific chart in the Google Sheets spreadsheet.",
-          "format": "int32",
-          "type": "integer"
-        },
         "objectId": {
-          "type": "string",
-          "description": "A user-supplied object ID.\n\nIf specified, the ID must be unique among all pages and page elements in\nthe presentation. The ID should start with a word character [a-zA-Z0-9_]\nand then followed by any number of the following characters [a-zA-Z0-9_-:].\nThe length of the ID should not be less than 5 or greater than 50.\nIf empty, a unique identifier will be generated."
+          "description": "A user-supplied object ID.\n\nIf specified, the ID must be unique among all pages and page elements in\nthe presentation. The ID should start with a word character [a-zA-Z0-9_]\nand then followed by any number of the following characters [a-zA-Z0-9_-:].\nThe length of the ID should not be less than 5 or greater than 50.\nIf empty, a unique identifier will be generated.",
+          "type": "string"
         },
         "elementProperties": {
-          "$ref": "PageElementProperties",
-          "description": "The element properties for the chart.\n\nWhen the aspect ratio of the provided size does not match the chart aspect\nratio, the chart is scaled and centered with respect to the size in order\nto maintain aspect ratio. The provided transform is applied after this\noperation."
+          "description": "The element properties for the chart.\n\nWhen the aspect ratio of the provided size does not match the chart aspect\nratio, the chart is scaled and centered with respect to the size in order\nto maintain aspect ratio. The provided transform is applied after this\noperation.",
+          "$ref": "PageElementProperties"
         },
         "spreadsheetId": {
           "description": "The ID of the Google Sheets spreadsheet that contains the chart.",
@@ -1393,46 +1311,33 @@
             "NOT_LINKED_IMAGE",
             "LINKED"
           ]
+        },
+        "chartId": {
+          "description": "The ID of the specific chart in the Google Sheets spreadsheet.",
+          "format": "int32",
+          "type": "integer"
         }
       },
       "id": "CreateSheetsChartRequest"
     },
-    "BatchUpdatePresentationResponse": {
+    "CreateImageResponse": {
       "properties": {
-        "replies": {
-          "description": "The reply of the updates.  This maps 1:1 with the updates, although\nreplies to some requests may be empty.",
-          "type": "array",
-          "items": {
-            "$ref": "Response"
-          }
-        },
-        "presentationId": {
-          "description": "The presentation the updates were applied to.",
+        "objectId": {
+          "description": "The object ID of the created image.",
           "type": "string"
         }
       },
-      "id": "BatchUpdatePresentationResponse",
-      "description": "Response message from a batch update.",
-      "type": "object"
-    },
-    "CreateImageResponse": {
+      "id": "CreateImageResponse",
       "description": "The result of creating an image.",
-      "type": "object",
-      "properties": {
-        "objectId": {
-          "type": "string",
-          "description": "The object ID of the created image."
-        }
-      },
-      "id": "CreateImageResponse"
+      "type": "object"
     },
     "SlideProperties": {
       "description": "The properties of Page that are only\nrelevant for pages with page_type SLIDE.",
       "type": "object",
       "properties": {
         "notesPage": {
-          "description": "The notes page that this slide is associated with. It defines the visual\nappearance of a notes page when printing or exporting slides with speaker\nnotes. A notes page inherits properties from the\nnotes master.\nThe placeholder shape with type BODY on the notes page contains the speaker\nnotes for this slide. The ID of this shape is identified by the\nspeakerNotesObjectId field.\nThe notes page is read-only except for the text content and styles of the\nspeaker notes shape.",
-          "$ref": "Page"
+          "$ref": "Page",
+          "description": "The notes page that this slide is associated with. It defines the visual\nappearance of a notes page when printing or exporting slides with speaker\nnotes. A notes page inherits properties from the\nnotes master.\nThe placeholder shape with type BODY on the notes page contains the speaker\nnotes for this slide. The ID of this shape is identified by the\nspeakerNotesObjectId field.\nThe notes page is read-only except for the text content and styles of the\nspeaker notes shape."
         },
         "layoutObjectId": {
           "description": "The object ID of the layout that this slide is based on.",
@@ -1446,18 +1351,24 @@
       "id": "SlideProperties"
     },
     "Response": {
+      "description": "A single response from an update.",
+      "type": "object",
       "properties": {
+        "replaceAllShapesWithImage": {
+          "description": "The result of replacing all shapes matching some criteria with an\nimage.",
+          "$ref": "ReplaceAllShapesWithImageResponse"
+        },
         "createTable": {
           "$ref": "CreateTableResponse",
           "description": "The result of creating a table."
         },
         "replaceAllText": {
-          "$ref": "ReplaceAllTextResponse",
-          "description": "The result of replacing text."
+          "description": "The result of replacing text.",
+          "$ref": "ReplaceAllTextResponse"
         },
         "createSlide": {
-          "description": "The result of creating a slide.",
-          "$ref": "CreateSlideResponse"
+          "$ref": "CreateSlideResponse",
+          "description": "The result of creating a slide."
         },
         "duplicateObject": {
           "description": "The result of duplicating an object.",
@@ -1468,8 +1379,8 @@
           "description": "The result of creating a shape."
         },
         "createLine": {
-          "description": "The result of creating a line.",
-          "$ref": "CreateLineResponse"
+          "$ref": "CreateLineResponse",
+          "description": "The result of creating a line."
         },
         "createImage": {
           "$ref": "CreateImageResponse",
@@ -1484,52 +1395,35 @@
           "description": "The result of creating a Google Sheets chart."
         },
         "replaceAllShapesWithSheetsChart": {
-          "$ref": "ReplaceAllShapesWithSheetsChartResponse",
-          "description": "The result of replacing all shapes matching some criteria with a Google\nSheets chart."
-        },
-        "replaceAllShapesWithImage": {
-          "$ref": "ReplaceAllShapesWithImageResponse",
-          "description": "The result of replacing all shapes matching some criteria with an\nimage."
+          "description": "The result of replacing all shapes matching some criteria with a Google\nSheets chart.",
+          "$ref": "ReplaceAllShapesWithSheetsChartResponse"
         }
       },
-      "id": "Response",
-      "description": "A single response from an update.",
-      "type": "object"
+      "id": "Response"
     },
-    "SubstringMatchCriteria": {
-      "description": "A criteria that matches a specific string of text in a shape or table.",
+    "TextRun": {
       "type": "object",
       "properties": {
-        "text": {
-          "type": "string",
-          "description": "The text to search for in the shape or table."
+        "content": {
+          "description": "The text of this run.",
+          "type": "string"
         },
-        "matchCase": {
-          "description": "Indicates whether the search should respect case:\n\n- `True`: the search is case sensitive.\n- `False`: the search is case insensitive.",
-          "type": "boolean"
+        "style": {
+          "$ref": "TextStyle",
+          "description": "The styling applied to this run."
         }
       },
-      "id": "SubstringMatchCriteria"
+      "id": "TextRun",
+      "description": "A TextElement kind that represents a run of text that all has the same\nstyling."
     },
     "LayoutReference": {
       "type": "object",
       "properties": {
+        "layoutId": {
+          "description": "Layout ID: the object ID of one of the layouts in the presentation.",
+          "type": "string"
+        },
         "predefinedLayout": {
-          "enum": [
-            "PREDEFINED_LAYOUT_UNSPECIFIED",
-            "BLANK",
-            "CAPTION_ONLY",
-            "TITLE",
-            "TITLE_AND_BODY",
-            "TITLE_AND_TWO_COLUMNS",
-            "TITLE_ONLY",
-            "SECTION_HEADER",
-            "SECTION_TITLE_AND_DESCRIPTION",
-            "ONE_COLUMN_TEXT",
-            "MAIN_POINT",
-            "BIG_NUMBER"
-          ],
-          "description": "Predefined layout.",
           "type": "string",
           "enumDescriptions": [
             "Unspecified layout.",
@@ -1544,38 +1438,50 @@
             "Layout with one title and one body, arranged in a single column.",
             "Layout with a main point.",
             "Layout with a big number heading."
-          ]
-        },
-        "layoutId": {
-          "description": "Layout ID: the object ID of one of the layouts in the presentation.",
-          "type": "string"
+          ],
+          "enum": [
+            "PREDEFINED_LAYOUT_UNSPECIFIED",
+            "BLANK",
+            "CAPTION_ONLY",
+            "TITLE",
+            "TITLE_AND_BODY",
+            "TITLE_AND_TWO_COLUMNS",
+            "TITLE_ONLY",
+            "SECTION_HEADER",
+            "SECTION_TITLE_AND_DESCRIPTION",
+            "ONE_COLUMN_TEXT",
+            "MAIN_POINT",
+            "BIG_NUMBER"
+          ],
+          "description": "Predefined layout."
         }
       },
       "id": "LayoutReference",
       "description": "Slide layout reference. This may reference either:\n\n- A predefined layout\n- One of the layouts in the presentation."
     },
-    "TextRun": {
-      "description": "A TextElement kind that represents a run of text that all has the same\nstyling.",
+    "SubstringMatchCriteria": {
+      "description": "A criteria that matches a specific string of text in a shape or table.",
       "type": "object",
       "properties": {
-        "content": {
-          "description": "The text of this run.",
+        "text": {
+          "description": "The text to search for in the shape or table.",
           "type": "string"
         },
-        "style": {
-          "$ref": "TextStyle",
-          "description": "The styling applied to this run."
+        "matchCase": {
+          "description": "Indicates whether the search should respect case:\n\n- `True`: the search is case sensitive.\n- `False`: the search is case insensitive.",
+          "type": "boolean"
         }
       },
-      "id": "TextRun"
+      "id": "SubstringMatchCriteria"
     },
     "TableRange": {
+      "id": "TableRange",
       "description": "A table range represents a reference to a subset of a table.\n\nIt's important to note that the cells specified by a table range do not\nnecessarily form a rectangle. For example, let's say we have a 3 x 3 table\nwhere all the cells of the last row are merged together. The table looks\nlike this:\n\n           \n  [             ]\n\nA table range with location = (0, 0), row span = 3 and column span = 2\nspecifies the following cells:\n\n   x     x \n  [      x      ]",
       "type": "object",
       "properties": {
         "location": {
-          "description": "The starting location of the table range.",
-          "$ref": "TableCellLocation"
+          "$ref": "TableCellLocation",
+          "description": "The starting location of the table range."
         },
         "rowSpan": {
           "description": "The row span of the table range.",
@@ -1587,33 +1493,7 @@
           "format": "int32",
           "type": "integer"
         }
-      },
-      "id": "TableRange"
-    },
-    "CreateTableRequest": {
-      "description": "Creates a new table.",
-      "type": "object",
-      "properties": {
-        "objectId": {
-          "description": "A user-supplied object ID.\n\nIf you specify an ID, it must be unique among all pages and page elements\nin the presentation. The ID must start with an alphanumeric character or an\nunderscore (matches regex `[a-zA-Z0-9_]`); remaining characters\nmay include those as well as a hyphen or colon (matches regex\n`[a-zA-Z0-9_-:]`).\nThe length of the ID must not be less than 5 or greater than 50.\n\nIf you don't specify an ID, a unique one is generated.",
-          "type": "string"
-        },
-        "columns": {
-          "description": "Number of columns in the table.",
-          "format": "int32",
-          "type": "integer"
-        },
-        "elementProperties": {
-          "$ref": "PageElementProperties",
-          "description": "The element properties for the table.\n\nThe table will be created at the provided size, subject to a minimum size.\nIf no size is provided, the table will be automatically sized.\n\nTable transforms must have a scale of 1 and no shear components. If no\ntransform is provided, the table will be centered on the page."
-        },
-        "rows": {
-          "description": "Number of rows in the table.",
-          "format": "int32",
-          "type": "integer"
-        }
-      },
-      "id": "CreateTableRequest"
+      }
     },
     "CreateTableResponse": {
       "description": "The result of creating a table.",
@@ -1626,22 +1506,33 @@
       },
       "id": "CreateTableResponse"
     },
-    "Table": {
-      "description": "A PageElement kind representing a\ntable.",
+    "CreateTableRequest": {
+      "description": "Creates a new table.",
       "type": "object",
       "properties": {
         "rows": {
-          "type": "integer",
           "description": "Number of rows in the table.",
+          "format": "int32",
+          "type": "integer"
+        },
+        "objectId": {
+          "type": "string",
+          "description": "A user-supplied object ID.\n\nIf you specify an ID, it must be unique among all pages and page elements\nin the presentation. The ID must start with an alphanumeric character or an\nunderscore (matches regex `[a-zA-Z0-9_]`); remaining characters\nmay include those as well as a hyphen or colon (matches regex\n`[a-zA-Z0-9_-:]`).\nThe length of the ID must not be less than 5 or greater than 50.\n\nIf you don't specify an ID, a unique one is generated."
+        },
+        "columns": {
+          "type": "integer",
+          "description": "Number of columns in the table.",
           "format": "int32"
         },
-        "tableColumns": {
-          "description": "Properties of each column.",
-          "type": "array",
-          "items": {
-            "$ref": "TableColumnProperties"
-          }
-        },
+        "elementProperties": {
+          "$ref": "PageElementProperties",
+          "description": "The element properties for the table.\n\nThe table will be created at the provided size, subject to a minimum size.\nIf no size is provided, the table will be automatically sized.\n\nTable transforms must have a scale of 1 and no shear components. If no\ntransform is provided, the table will be centered on the page."
+        }
+      },
+      "id": "CreateTableRequest"
+    },
+    "Table": {
+      "properties": {
         "columns": {
           "description": "Number of columns in the table.",
           "format": "int32",
@@ -1653,19 +1544,28 @@
           "items": {
             "$ref": "TableRow"
           }
+        },
+        "rows": {
+          "description": "Number of rows in the table.",
+          "format": "int32",
+          "type": "integer"
+        },
+        "tableColumns": {
+          "description": "Properties of each column.",
+          "type": "array",
+          "items": {
+            "$ref": "TableColumnProperties"
+          }
         }
       },
-      "id": "Table"
+      "id": "Table",
+      "description": "A PageElement kind representing a\ntable.",
+      "type": "object"
     },
     "PageBackgroundFill": {
-      "description": "The page background fill.",
-      "type": "object",
       "properties": {
-        "solidFill": {
-          "$ref": "SolidFill",
-          "description": "Solid color fill."
-        },
         "propertyState": {
+          "type": "string",
           "enumDescriptions": [
             "If a property's state is RENDERED, then the element has the corresponding\nproperty when rendered on a page. If the element is a placeholder shape as\ndetermined by the placeholder\nfield, and it inherits from a placeholder shape, the corresponding field\nmay be unset, meaning that the property value is inherited from a parent\nplaceholder. If the element does not inherit, then the field will contain\nthe rendered value. This is the default value.",
             "If a property's state is NOT_RENDERED, then the element does not have the\ncorresponding property when rendered on a page. However, the field may\nstill be set so it can be inherited by child shapes. To remove a property\nfrom a rendered element, set its property_state to NOT_RENDERED.",
@@ -1676,24 +1576,25 @@
             "NOT_RENDERED",
             "INHERIT"
           ],
-          "description": "The background fill property state.\n\nUpdating the the fill on a page will implicitly update this field to\n`RENDERED`, unless another value is specified in the same request. To\nhave no fill on a page, set this field to `NOT_RENDERED`. In this case,\nany other fill fields set in the same request will be ignored.",
-          "type": "string"
+          "description": "The background fill property state.\n\nUpdating the the fill on a page will implicitly update this field to\n`RENDERED`, unless another value is specified in the same request. To\nhave no fill on a page, set this field to `NOT_RENDERED`. In this case,\nany other fill fields set in the same request will be ignored."
         },
         "stretchedPictureFill": {
           "$ref": "StretchedPictureFill",
           "description": "Stretched picture fill."
+        },
+        "solidFill": {
+          "description": "Solid color fill.",
+          "$ref": "SolidFill"
         }
       },
-      "id": "PageBackgroundFill"
+      "id": "PageBackgroundFill",
+      "description": "The page background fill.",
+      "type": "object"
     },
     "SheetsChart": {
       "description": "A PageElement kind representing\na linked chart embedded from Google Sheets.",
       "type": "object",
       "properties": {
-        "contentUrl": {
-          "description": "The URL of an image of the embedded chart, with a default lifetime of 30\nminutes. This URL is tagged with the account of the requester. Anyone with\nthe URL effectively accesses the image as the original requester. Access to\nthe image may be lost if the presentation's sharing settings change.",
-          "type": "string"
-        },
         "spreadsheetId": {
           "description": "The ID of the Google Sheets spreadsheet that contains the source chart.",
           "type": "string"
@@ -1706,11 +1607,16 @@
         "sheetsChartProperties": {
           "$ref": "SheetsChartProperties",
           "description": "The properties of the Sheets chart."
+        },
+        "contentUrl": {
+          "description": "The URL of an image of the embedded chart, with a default lifetime of 30\nminutes. This URL is tagged with the account of the requester. Anyone with\nthe URL effectively accesses the image as the original requester. Access to\nthe image may be lost if the presentation's sharing settings change.",
+          "type": "string"
         }
       },
       "id": "SheetsChart"
     },
     "SolidFill": {
+      "description": "A solid color fill. The page or page element is filled entirely with the\nspecified color value.\n\nIf any field is unset, its value may be inherited from a parent placeholder\nif it exists.",
       "type": "object",
       "properties": {
         "alpha": {
@@ -1723,16 +1629,36 @@
           "description": "The color value of the solid fill."
         }
       },
-      "id": "SolidFill",
-      "description": "A solid color fill. The page or page element is filled entirely with the\nspecified color value.\n\nIf any field is unset, its value may be inherited from a parent placeholder\nif it exists."
+      "id": "SolidFill"
     },
     "ThemeColorPair": {
+      "description": "A pair mapping a theme color type to the concrete color it represents.",
+      "type": "object",
       "properties": {
         "color": {
-          "$ref": "RgbColor",
-          "description": "The concrete color corresponding to the theme color type above."
+          "description": "The concrete color corresponding to the theme color type above.",
+          "$ref": "RgbColor"
         },
         "type": {
+          "enumDescriptions": [
+            "Unspecified theme color. This value should not be used.",
+            "Represents the first dark color.",
+            "Represents the first light color.",
+            "Represents the second dark color.",
+            "Represents the second light color.",
+            "Represents the first accent color.",
+            "Represents the second accent color.",
+            "Represents the third accent color.",
+            "Represents the fourth accent color.",
+            "Represents the fifth accent color.",
+            "Represents the sixth accent color.",
+            "Represents the color to use for hyperlinks.",
+            "Represents the color to use for visited hyperlinks.",
+            "Represents the first text color.",
+            "Represents the first background color.",
+            "Represents the second text color.",
+            "Represents the second background color."
+          ],
           "enum": [
             "THEME_COLOR_TYPE_UNSPECIFIED",
             "DARK1",
@@ -1753,45 +1679,23 @@
             "BACKGROUND2"
           ],
           "description": "The type of the theme color.",
-          "type": "string",
-          "enumDescriptions": [
-            "Unspecified theme color. This value should not be used.",
-            "Represents the first dark color.",
-            "Represents the first light color.",
-            "Represents the second dark color.",
-            "Represents the second light color.",
-            "Represents the first accent color.",
-            "Represents the second accent color.",
-            "Represents the third accent color.",
-            "Represents the fourth accent color.",
-            "Represents the fifth accent color.",
-            "Represents the sixth accent color.",
-            "Represents the color to use for hyperlinks.",
-            "Represents the color to use for visited hyperlinks.",
-            "Represents the first text color.",
-            "Represents the first background color.",
-            "Represents the second text color.",
-            "Represents the second background color."
-          ]
+          "type": "string"
         }
       },
-      "id": "ThemeColorPair",
-      "description": "A pair mapping a theme color type to the concrete color it represents.",
-      "type": "object"
+      "id": "ThemeColorPair"
     },
     "OptionalColor": {
+      "id": "OptionalColor",
       "description": "A color that can either be fully opaque or fully transparent.",
       "type": "object",
       "properties": {
         "opaqueColor": {
-          "description": "If set, this will be used as an opaque color. If unset, this represents\na transparent color.",
-          "$ref": "OpaqueColor"
+          "$ref": "OpaqueColor",
+          "description": "If set, this will be used as an opaque color. If unset, this represents\na transparent color."
         }
-      },
-      "id": "OptionalColor"
+      }
     },
     "PageElementProperties": {
-      "id": "PageElementProperties",
       "description": "Common properties for a page element.\n\nNote: When you initially create a\nPageElement, the API may modify\nthe values of both `size` and `transform`, but the\nvisual size will be unchanged.",
       "type": "object",
       "properties": {
@@ -1807,15 +1711,16 @@
           "$ref": "Size",
           "description": "The size of the element."
         }
-      }
+      },
+      "id": "PageElementProperties"
     },
     "SheetsChartProperties": {
       "description": "The properties of the SheetsChart.",
       "type": "object",
       "properties": {
         "chartImageProperties": {
-          "$ref": "ImageProperties",
-          "description": "The properties of the embedded chart image."
+          "description": "The properties of the embedded chart image.",
+          "$ref": "ImageProperties"
         }
       },
       "id": "SheetsChartProperties"
@@ -1836,23 +1741,21 @@
       "id": "StretchedPictureFill"
     },
     "DeleteTableColumnRequest": {
-      "description": "Deletes a column from a table.",
-      "type": "object",
       "properties": {
+        "cellLocation": {
+          "description": "The reference table cell location from which a column will be deleted.\n\nThe column this cell spans will be deleted. If this is a merged cell,\nmultiple columns will be deleted. If no columns remain in the table after\nthis deletion, the whole table is deleted.",
+          "$ref": "TableCellLocation"
+        },
         "tableObjectId": {
           "description": "The table to delete columns from.",
           "type": "string"
-        },
-        "cellLocation": {
-          "$ref": "TableCellLocation",
-          "description": "The reference table cell location from which a column will be deleted.\n\nThe column this cell spans will be deleted. If this is a merged cell,\nmultiple columns will be deleted. If no columns remain in the table after\nthis deletion, the whole table is deleted."
         }
       },
-      "id": "DeleteTableColumnRequest"
+      "id": "DeleteTableColumnRequest",
+      "description": "Deletes a column from a table.",
+      "type": "object"
     },
     "UpdateTextStyleRequest": {
-      "id": "UpdateTextStyleRequest",
-      "description": "Update the styling of text in a Shape or\nTable.",
       "type": "object",
       "properties": {
         "objectId": {
@@ -1864,8 +1767,8 @@
           "description": "The range of text to style.\n\nThe range may be extended to include adjacent newlines.\n\nIf the range fully contains a paragraph belonging to a list, the\nparagraph's bullet is also updated with the matching text style."
         },
         "cellLocation": {
-          "$ref": "TableCellLocation",
-          "description": "The location of the cell in the table containing the text to style. If\n`object_id` refers to a table, `cell_location` must have a value.\nOtherwise, it must not."
+          "description": "The location of the cell in the table containing the text to style. If\n`object_id` refers to a table, `cell_location` must have a value.\nOtherwise, it must not.",
+          "$ref": "TableCellLocation"
         },
         "style": {
           "description": "The style(s) to set on the text.\n\nIf the value for a particular style matches that of the parent, that style\nwill be set to inherit.\n\nCertain text style changes may cause other changes meant to mirror the\nbehavior of the Slides editor. See the documentation of\nTextStyle for more information.",
@@ -1876,28 +1779,29 @@
           "format": "google-fieldmask",
           "type": "string"
         }
-      }
+      },
+      "id": "UpdateTextStyleRequest",
+      "description": "Update the styling of text in a Shape or\nTable."
     },
     "List": {
       "description": "A List describes the look and feel of bullets belonging to paragraphs\nassociated with a list. A paragraph that is part of a list has an implicit\nreference to that list's ID.",
       "type": "object",
       "properties": {
         "listId": {
-          "type": "string",
-          "description": "The ID of the list."
+          "description": "The ID of the list.",
+          "type": "string"
         },
         "nestingLevel": {
+          "description": "A map of nesting levels to the properties of bullets at the associated\nlevel. A list has at most nine levels of nesting, so the possible values\nfor the keys of this map are 0 through 8, inclusive.",
           "type": "object",
           "additionalProperties": {
             "$ref": "NestingLevel"
-          },
-          "description": "A map of nesting levels to the properties of bullets at the associated\nlevel. A list has at most nine levels of nesting, so the possible values\nfor the keys of this map are 0 through 8, inclusive."
+          }
         }
       },
       "id": "List"
     },
     "WeightedFontFamily": {
-      "description": "Represents a font family and weight used to style a TextRun.",
       "type": "object",
       "properties": {
         "fontFamily": {
@@ -1905,29 +1809,50 @@
           "type": "string"
         },
         "weight": {
-          "description": "The rendered weight of the text. This field can have any value that is a\nmultiple of 100 between 100 and 900, inclusive. This range corresponds to\nonly the numerical values described in the \"Cascading Style Sheets Level\n2 Revision 1 (CSS 2.1) Specification\",\n[section 15.6](https://www.w3.org/TR/CSS21/fonts.html#font-boldness). The\nnon-numerical values in the specification are disallowed. Weights greater\nthan or equal to 700 are considered bold, and weights less than 700 are\nnot bold. The default value is `400` (\"normal\").",
+          "description": "The rendered weight of the text. This field can have any value that is a\nmultiple of `100` between `100` and `900`, inclusive. This range\ncorresponds to the numerical values described in the CSS 2.1\nSpecification, [section 15.6](https://www.w3.org/TR/CSS21/fonts.html#font-boldness),\nwith non-numerical values disallowed. Weights greater than or equal to\n`700` are considered bold, and weights less than `700`are not bold. The\ndefault value is `400` (\"normal\").",
           "format": "int32",
           "type": "integer"
         }
       },
-      "id": "WeightedFontFamily"
+      "id": "WeightedFontFamily",
+      "description": "Represents a font family and weight used to style a TextRun."
     },
     "PageElement": {
       "description": "A visual element rendered on a page.",
       "type": "object",
       "properties": {
+        "size": {
+          "$ref": "Size",
+          "description": "The size of the page element."
+        },
+        "title": {
+          "description": "The title of the page element. Combined with description to display alt\ntext.",
+          "type": "string"
+        },
+        "sheetsChart": {
+          "description": "A linked chart embedded from Google Sheets. Unlinked charts are\nrepresented as images.",
+          "$ref": "SheetsChart"
+        },
+        "video": {
+          "$ref": "Video",
+          "description": "A video page element."
+        },
+        "wordArt": {
+          "$ref": "WordArt",
+          "description": "A word art page element."
+        },
         "table": {
-          "description": "A table page element.",
-          "$ref": "Table"
+          "$ref": "Table",
+          "description": "A table page element."
+        },
+        "transform": {
+          "description": "The transform of the page element.",
+          "$ref": "AffineTransform"
         },
         "objectId": {
           "description": "The object ID for this page element. Object IDs used by\ngoogle.apps.slides.v1.Page and\ngoogle.apps.slides.v1.PageElement share the same namespace.",
           "type": "string"
         },
-        "transform": {
-          "$ref": "AffineTransform",
-          "description": "The transform of the page element."
-        },
         "shape": {
           "$ref": "Shape",
           "description": "A generic shape."
@@ -1937,8 +1862,8 @@
           "description": "A line page element."
         },
         "description": {
-          "type": "string",
-          "description": "The description of the page element. Combined with title to display alt\ntext."
+          "description": "The description of the page element. Combined with title to display alt\ntext.",
+          "type": "string"
         },
         "elementGroup": {
           "$ref": "Group",
@@ -1947,79 +1872,40 @@
         "image": {
           "$ref": "Image",
           "description": "An image page element."
-        },
-        "size": {
-          "$ref": "Size",
-          "description": "The size of the page element."
-        },
-        "sheetsChart": {
-          "$ref": "SheetsChart",
-          "description": "A linked chart embedded from Google Sheets. Unlinked charts are\nrepresented as images."
-        },
-        "title": {
-          "description": "The title of the page element. Combined with description to display alt\ntext.",
-          "type": "string"
-        },
-        "video": {
-          "$ref": "Video",
-          "description": "A video page element."
-        },
-        "wordArt": {
-          "$ref": "WordArt",
-          "description": "A word art page element."
         }
       },
       "id": "PageElement"
     },
     "CreateImageRequest": {
+      "id": "CreateImageRequest",
       "description": "Creates an image.",
       "type": "object",
       "properties": {
+        "objectId": {
+          "description": "A user-supplied object ID.\n\nIf you specify an ID, it must be unique among all pages and page elements\nin the presentation. The ID must start with an alphanumeric character or an\nunderscore (matches regex `[a-zA-Z0-9_]`); remaining characters\nmay include those as well as a hyphen or colon (matches regex\n`[a-zA-Z0-9_-:]`).\nThe length of the ID must not be less than 5 or greater than 50.\n\nIf you don't specify an ID, a unique one is generated.",
+          "type": "string"
+        },
         "elementProperties": {
-          "$ref": "PageElementProperties",
-          "description": "The element properties for the image.\n\nWhen the aspect ratio of the provided size does not match the image aspect\nratio, the image is scaled and centered with respect to the size in order\nto maintain aspect ratio. The provided transform is applied after this\noperation."
+          "description": "The element properties for the image.\n\nWhen the aspect ratio of the provided size does not match the image aspect\nratio, the image is scaled and centered with respect to the size in order\nto maintain aspect ratio. The provided transform is applied after this\noperation.",
+          "$ref": "PageElementProperties"
         },
         "url": {
           "description": "The image URL.\n\nThe image is fetched once at insertion time and a copy is stored for\ndisplay inside the presentation. Images must be less than 50MB in size,\ncannot exceed 25 megapixels, and must be in either in PNG, JPEG, or GIF\nformat.",
           "type": "string"
-        },
-        "objectId": {
-          "description": "A user-supplied object ID.\n\nIf you specify an ID, it must be unique among all pages and page elements\nin the presentation. The ID must start with an alphanumeric character or an\nunderscore (matches regex `[a-zA-Z0-9_]`); remaining characters\nmay include those as well as a hyphen or colon (matches regex\n`[a-zA-Z0-9_-:]`).\nThe length of the ID must not be less than 5 or greater than 50.\n\nIf you don't specify an ID, a unique one is generated.",
-          "type": "string"
         }
-      },
-      "id": "CreateImageRequest"
+      }
     },
     "CreateParagraphBulletsRequest": {
-      "description": "Creates bullets for all of the paragraphs that overlap with the given\ntext index range.\n\nThe nesting level of each paragraph will be determined by counting leading\ntabs in front of each paragraph. To avoid excess space between the bullet and\nthe corresponding paragraph, these leading tabs are removed by this request.\nThis may change the indices of parts of the text.\n\nIf the paragraph immediately before paragraphs being updated is in a list\nwith a matching preset, the paragraphs being updated are added to that\npreceding list.",
-      "type": "object",
       "properties": {
         "objectId": {
-          "description": "The object ID of the shape or table containing the text to add bullets to.",
-          "type": "string"
+          "type": "string",
+          "description": "The object ID of the shape or table containing the text to add bullets to."
         },
         "textRange": {
-          "$ref": "Range",
-          "description": "The range of text to apply the bullet presets to, based on TextElement indexes."
+          "description": "The range of text to apply the bullet presets to, based on TextElement indexes.",
+          "$ref": "Range"
         },
         "bulletPreset": {
-          "enum": [
-            "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_DIGIT_ALPHA_ROMAN",
-            "NUMBERED_DIGIT_ALPHA_ROMAN_PARENS",
-            "NUMBERED_DIGIT_NESTED",
-            "NUMBERED_UPPERALPHA_ALPHA_ROMAN",
-            "NUMBERED_UPPERROMAN_UPPERALPHA_DIGIT",
-            "NUMBERED_ZERODIGIT_ALPHA_ROMAN"
-          ],
           "description": "The kinds of bullet glyphs to be used. Defaults to the\n`BULLET_DISC_CIRCLE_SQUARE` preset.",
           "type": "string",
           "enumDescriptions": [
@@ -2038,71 +1924,88 @@
             "A numbered list with `UPPERALPHA`, `ALPHA` and `ROMAN` numeric glyphs for\nthe first 3 list nesting levels, followed by periods.",
             "A numbered list with `UPPERROMAN`, `UPPERALPHA` and `DIGIT` numeric glyphs\nfor the first 3 list nesting levels, followed by periods.",
             "A numbered list with `ZERODIGIT`, `ALPHA` and `ROMAN` numeric glyphs for\nthe first 3 list nesting levels, followed by periods."
+          ],
+          "enum": [
+            "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_DIGIT_ALPHA_ROMAN",
+            "NUMBERED_DIGIT_ALPHA_ROMAN_PARENS",
+            "NUMBERED_DIGIT_NESTED",
+            "NUMBERED_UPPERALPHA_ALPHA_ROMAN",
+            "NUMBERED_UPPERROMAN_UPPERALPHA_DIGIT",
+            "NUMBERED_ZERODIGIT_ALPHA_ROMAN"
           ]
         },
         "cellLocation": {
-          "description": "The optional table cell location if the text to be modified is in a table\ncell. If present, the object_id must refer to a table.",
-          "$ref": "TableCellLocation"
+          "$ref": "TableCellLocation",
+          "description": "The optional table cell location if the text to be modified is in a table\ncell. If present, the object_id must refer to a table."
         }
       },
-      "id": "CreateParagraphBulletsRequest"
+      "id": "CreateParagraphBulletsRequest",
+      "description": "Creates bullets for all of the paragraphs that overlap with the given\ntext index range.\n\nThe nesting level of each paragraph will be determined by counting leading\ntabs in front of each paragraph. To avoid excess space between the bullet and\nthe corresponding paragraph, these leading tabs are removed by this request.\nThis may change the indices of parts of the text.\n\nIf the paragraph immediately before paragraphs being updated is in a list\nwith a matching preset, the paragraphs being updated are added to that\npreceding list.",
+      "type": "object"
     },
     "Size": {
-      "description": "A width and height.",
-      "type": "object",
       "properties": {
-        "height": {
-          "$ref": "Dimension",
-          "description": "The height of the object."
-        },
         "width": {
           "description": "The width of the object.",
           "$ref": "Dimension"
+        },
+        "height": {
+          "$ref": "Dimension",
+          "description": "The height of the object."
         }
       },
-      "id": "Size"
+      "id": "Size",
+      "description": "A width and height.",
+      "type": "object"
     },
     "TextStyle": {
+      "description": "Represents the styling that can be applied to a TextRun.\n\nIf this text is contained in a shape with a parent placeholder, then these text styles may be\ninherited from the parent. Which text styles are inherited depend on the\nnesting level of lists:\n\n* A text run in a paragraph that is not in a list will inherit its text style\n  from the the newline character in the paragraph at the 0 nesting level of\n  the list inside the parent placeholder.\n* A text run in a paragraph that is in a list will inherit its text style\n  from the newline character in the paragraph at its corresponding nesting\n  level of the list inside the parent placeholder.\n\nInherited text styles are represented as unset fields in this message. If\ntext is contained in a shape without a parent placeholder, unsetting these\nfields will revert the style to a value matching the defaults in the Slides\neditor.",
+      "type": "object",
       "properties": {
-        "smallCaps": {
-          "description": "Whether or not the text is in small capital letters.",
-          "type": "boolean"
-        },
         "backgroundColor": {
           "description": "The background color of the text. If set, the color is either opaque or\ntransparent, depending on if the `opaque_color` field in it is set.",
           "$ref": "OptionalColor"
         },
+        "underline": {
+          "description": "Whether or not the text is underlined.",
+          "type": "boolean"
+        },
         "link": {
           "$ref": "Link",
           "description": "The hyperlink destination of the text. If unset, there is no link. Links\nare not inherited from parent text.\n\nChanging the link in an update request causes some other changes to the\ntext style of the range:\n\n* When setting a link, the text foreground color will be set to\n  ThemeColorType.HYPERLINK and the text will\n  be underlined. If these fields are modified in the same\n  request, those values will be used instead of the link defaults.\n* Setting a link on a text range that overlaps with an existing link will\n  also update the existing link to point to the new URL.\n* Links are not settable on newline characters. As a result, setting a link\n  on a text range that crosses a paragraph boundary, such as `\"ABC\\n123\"`,\n  will separate the newline character(s) into their own text runs. The\n  link will be applied separately to the runs before and after the newline.\n* Removing a link will update the text style of the range to match the\n  style of the preceding text (or the default text styles if the preceding\n  text is another link) unless different styles are being set in the same\n  request."
         },
-        "underline": {
-          "type": "boolean",
-          "description": "Whether or not the text is underlined."
+        "foregroundColor": {
+          "$ref": "OptionalColor",
+          "description": "The color of the text itself. If set, the color is either opaque or\ntransparent, depending on if the `opaque_color` field in it is set."
         },
         "bold": {
           "description": "Whether or not the text is rendered as bold.",
           "type": "boolean"
         },
-        "foregroundColor": {
-          "description": "The color of the text itself. If set, the color is either opaque or\ntransparent, depending on if the `opaque_color` field in it is set.",
-          "$ref": "OptionalColor"
-        },
         "fontFamily": {
           "description": "The font family of the text.\n\nThe font family can be any font from the Font menu in Slides or from\n[Google Fonts] (https://fonts.google.com/). If the font name is\nunrecognized, the text is rendered in `Arial`.\n\nSome fonts can affect the weight of the text. If an update request\nspecifies values for both `font_family` and `bold`, the explicitly-set\n`bold` value is used.",
           "type": "string"
         },
-        "strikethrough": {
-          "type": "boolean",
-          "description": "Whether or not the text is struck through."
-        },
         "italic": {
           "description": "Whether or not the text is italicized.",
           "type": "boolean"
         },
+        "strikethrough": {
+          "description": "Whether or not the text is struck through.",
+          "type": "boolean"
+        },
         "fontSize": {
-          "$ref": "Dimension",
-          "description": "The size of the text's font. When read, the `font_size` will specified in\npoints."
+          "description": "The size of the text's font. When read, the `font_size` will specified in\npoints.",
+          "$ref": "Dimension"
         },
         "baselineOffset": {
           "enum": [
@@ -2121,19 +2024,25 @@
           ]
         },
         "weightedFontFamily": {
-          "description": "The font family and rendered weight of the text. This property is\nread-only.\n\nThis field is an extension of `font_family` meant to support explicit font\nweights without breaking backwards compatibility. As such, when reading the\nstyle of a range of text, the value of `weighted_font_family.font_family`\nwill always be equal to that of `font_family`.",
-          "$ref": "WeightedFontFamily"
+          "$ref": "WeightedFontFamily",
+          "description": "The font family and rendered weight of the text. This property is\nread-only.\n\nThis field is an extension of `font_family` meant to support explicit font\nweights without breaking backwards compatibility. As such, when reading the\nstyle of a range of text, the value of `weighted_font_family.font_family`\nwill always be equal to that of `font_family`."
+        },
+        "smallCaps": {
+          "description": "Whether or not the text is in small capital letters.",
+          "type": "boolean"
         }
       },
-      "id": "TextStyle",
-      "description": "Represents the styling that can be applied to a TextRun.\n\nIf this text is contained in a shape with a parent placeholder, then these text styles may be\ninherited from the parent. Which text styles are inherited depend on the\nnesting level of lists:\n\n* A text run in a paragraph that is not in a list will inherit its text style\n  from the the newline character in the paragraph at the 0 nesting level of\n  the list inside the parent placeholder.\n* A text run in a paragraph that is in a list will inherit its text style\n  from the newline character in the paragraph at its corresponding nesting\n  level of the list inside the parent placeholder.\n\nInherited text styles are represented as unset fields in this message. If\ntext is contained in a shape without a parent placeholder, unsetting these\nfields will revert the style to a value matching the defaults in the Slides\neditor.",
-      "type": "object"
+      "id": "TextStyle"
     },
     "UpdateVideoPropertiesRequest": {
-      "id": "UpdateVideoPropertiesRequest",
       "description": "Update the properties of a Video.",
       "type": "object",
       "properties": {
+        "fields": {
+          "description": "The fields that should be updated.\n\nAt least one field must be specified. The root `videoProperties` is\nimplied and should not be specified. A single `\"*\"` can be used as\nshort-hand for listing every field.\n\nFor example to update the video outline color, set `fields` to\n`\"outline.outlineFill.solidFill.color\"`.\n\nTo reset a property to its default value, include its field name in the\nfield mask but leave the field itself unset.",
+          "format": "google-fieldmask",
+          "type": "string"
+        },
         "objectId": {
           "description": "The object ID of the video the updates are applied to.",
           "type": "string"
@@ -2141,31 +2050,49 @@
         "videoProperties": {
           "$ref": "VideoProperties",
           "description": "The video properties to update."
-        },
-        "fields": {
-          "description": "The fields that should be updated.\n\nAt least one field must be specified. The root `videoProperties` is\nimplied and should not be specified. A single `\"*\"` can be used as\nshort-hand for listing every field.\n\nFor example to update the video outline color, set `fields` to\n`\"outline.outlineFill.solidFill.color\"`.\n\nTo reset a property to its default value, include its field name in the\nfield mask but leave the field itself unset.",
-          "format": "google-fieldmask",
-          "type": "string"
         }
-      }
+      },
+      "id": "UpdateVideoPropertiesRequest"
     },
     "Request": {
+      "description": "A single kind of update to apply to a presentation.",
+      "type": "object",
       "properties": {
+        "deleteText": {
+          "description": "Deletes text from a shape or a table cell.",
+          "$ref": "DeleteTextRequest"
+        },
+        "updatePageProperties": {
+          "description": "Updates the properties of a Page.",
+          "$ref": "UpdatePagePropertiesRequest"
+        },
+        "deleteParagraphBullets": {
+          "description": "Deletes bullets from paragraphs.",
+          "$ref": "DeleteParagraphBulletsRequest"
+        },
+        "createShape": {
+          "$ref": "CreateShapeRequest",
+          "description": "Creates a new shape."
+        },
+        "insertTableColumns": {
+          "$ref": "InsertTableColumnsRequest",
+          "description": "Inserts columns into a table."
+        },
         "refreshSheetsChart": {
-          "description": "Refreshes a Google Sheets chart.",
-          "$ref": "RefreshSheetsChartRequest"
+          "$ref": "RefreshSheetsChartRequest",
+          "description": "Refreshes a Google Sheets chart."
         },
         "createTable": {
           "$ref": "CreateTableRequest",
           "description": "Creates a new table."
         },
         "updateTableCellProperties": {
-          "$ref": "UpdateTableCellPropertiesRequest",
-          "description": "Updates the properties of a TableCell."
+          "description": "Updates the properties of a TableCell.",
+          "$ref": "UpdateTableCellPropertiesRequest"
         },
         "deleteObject": {
-          "$ref": "DeleteObjectRequest",
-          "description": "Deletes a page or page element from the presentation."
+          "description": "Deletes a page or page element from the presentation.",
+          "$ref": "DeleteObjectRequest"
         },
         "updateParagraphStyle": {
           "$ref": "UpdateParagraphStyleRequest",
@@ -2176,16 +2103,16 @@
           "description": "Deletes a column from a table."
         },
         "duplicateObject": {
-          "$ref": "DuplicateObjectRequest",
-          "description": "Duplicates a slide or page element."
+          "description": "Duplicates a slide or page element.",
+          "$ref": "DuplicateObjectRequest"
         },
         "updateVideoProperties": {
-          "$ref": "UpdateVideoPropertiesRequest",
-          "description": "Updates the properties of a Video."
+          "description": "Updates the properties of a Video.",
+          "$ref": "UpdateVideoPropertiesRequest"
         },
         "createLine": {
-          "description": "Creates a line.",
-          "$ref": "CreateLineRequest"
+          "$ref": "CreateLineRequest",
+          "description": "Creates a line."
         },
         "createImage": {
           "$ref": "CreateImageRequest",
@@ -2212,8 +2139,8 @@
           "description": "Updates the transform of a page element."
         },
         "updateTextStyle": {
-          "$ref": "UpdateTextStyleRequest",
-          "description": "Updates the styling of text within a Shape or Table."
+          "description": "Updates the styling of text within a Shape or Table.",
+          "$ref": "UpdateTextStyleRequest"
         },
         "replaceAllShapesWithImage": {
           "$ref": "ReplaceAllShapesWithImageRequest",
@@ -2228,20 +2155,20 @@
           "description": "Updates the properties of an Image."
         },
         "insertTableRows": {
-          "$ref": "InsertTableRowsRequest",
-          "description": "Inserts rows into a table."
+          "description": "Inserts rows into a table.",
+          "$ref": "InsertTableRowsRequest"
         },
         "createSlide": {
-          "description": "Creates a new slide.",
-          "$ref": "CreateSlideRequest"
+          "$ref": "CreateSlideRequest",
+          "description": "Creates a new slide."
         },
         "updateLineProperties": {
-          "description": "Updates the properties of a Line.",
-          "$ref": "UpdateLinePropertiesRequest"
+          "$ref": "UpdateLinePropertiesRequest",
+          "description": "Updates the properties of a Line."
         },
         "updateSlidesPosition": {
-          "$ref": "UpdateSlidesPositionRequest",
-          "description": "Updates the position of a set of slides in the presentation."
+          "description": "Updates the position of a set of slides in the presentation.",
+          "$ref": "UpdateSlidesPositionRequest"
         },
         "deleteTableRow": {
           "$ref": "DeleteTableRowRequest",
@@ -2252,43 +2179,16 @@
           "$ref": "UpdateShapePropertiesRequest"
         },
         "insertText": {
-          "description": "Inserts text into a shape or table cell.",
-          "$ref": "InsertTextRequest"
-        },
-        "deleteText": {
-          "$ref": "DeleteTextRequest",
-          "description": "Deletes text from a shape or a table cell."
-        },
-        "updatePageProperties": {
-          "$ref": "UpdatePagePropertiesRequest",
-          "description": "Updates the properties of a Page."
-        },
-        "deleteParagraphBullets": {
-          "description": "Deletes bullets from paragraphs.",
-          "$ref": "DeleteParagraphBulletsRequest"
-        },
-        "createShape": {
-          "$ref": "CreateShapeRequest",
-          "description": "Creates a new shape."
-        },
-        "insertTableColumns": {
-          "$ref": "InsertTableColumnsRequest",
-          "description": "Inserts columns into a table."
+          "$ref": "InsertTextRequest",
+          "description": "Inserts text into a shape or table cell."
         }
       },
-      "id": "Request",
-      "description": "A single kind of update to apply to a presentation.",
-      "type": "object"
+      "id": "Request"
     },
     "UpdateImagePropertiesRequest": {
       "description": "Update the properties of an Image.",
       "type": "object",
       "properties": {
-        "fields": {
-          "description": "The fields that should be updated.\n\nAt least one field must be specified. The root `imageProperties` is\nimplied and should not be specified. A single `\"*\"` can be used as\nshort-hand for listing every field.\n\nFor example to update the image outline color, set `fields` to\n`\"outline.outlineFill.solidFill.color\"`.\n\nTo reset a property to its default value, include its field name in the\nfield mask but leave the field itself unset.",
-          "format": "google-fieldmask",
-          "type": "string"
-        },
         "imageProperties": {
           "$ref": "ImageProperties",
           "description": "The image properties to update."
@@ -2296,55 +2196,27 @@
         "objectId": {
           "description": "The object ID of the image the updates are applied to.",
           "type": "string"
+        },
+        "fields": {
+          "description": "The fields that should be updated.\n\nAt least one field must be specified. The root `imageProperties` is\nimplied and should not be specified. A single `\"*\"` can be used as\nshort-hand for listing every field.\n\nFor example to update the image outline color, set `fields` to\n`\"outline.outlineFill.solidFill.color\"`.\n\nTo reset a property to its default value, include its field name in the\nfield mask but leave the field itself unset.",
+          "format": "google-fieldmask",
+          "type": "string"
         }
       },
       "id": "UpdateImagePropertiesRequest"
     },
     "ParagraphStyle": {
+      "description": "Styles that apply to a whole paragraph.\n\nIf this text is contained in a shape with a parent placeholder, then these paragraph styles may be\ninherited from the parent. Which paragraph styles are inherited depend on the\nnesting level of lists:\n\n* A paragraph not in a list will inherit its paragraph style from the\n  paragraph at the 0 nesting level of the list inside the parent placeholder.\n* A paragraph in a list will inherit its paragraph style from the paragraph\n  at its corresponding nesting level of the list inside the parent\n  placeholder.\n\nInherited paragraph styles are represented as unset fields in this message.",
+      "type": "object",
       "properties": {
-        "spaceBelow": {
-          "$ref": "Dimension",
-          "description": "The amount of extra space above the paragraph. If unset, the value is\ninherited from the parent."
+        "indentFirstLine": {
+          "description": "The amount of indentation for the start of the first line of the paragraph.\nIf unset, the value is inherited from the parent.",
+          "$ref": "Dimension"
         },
-        "direction": {
-          "description": "The text direction of this paragraph. If unset, the value defaults to\nLEFT_TO_RIGHT\nsince text direction is not inherited.",
-          "type": "string",
-          "enumDescriptions": [
-            "The text direction is inherited from the parent.",
-            "The text goes from left to right.",
-            "The text goes from right to left."
-          ],
-          "enum": [
-            "TEXT_DIRECTION_UNSPECIFIED",
-            "LEFT_TO_RIGHT",
-            "RIGHT_TO_LEFT"
-          ]
-        },
-        "spacingMode": {
-          "enum": [
-            "SPACING_MODE_UNSPECIFIED",
-            "NEVER_COLLAPSE",
-            "COLLAPSE_LISTS"
-          ],
-          "description": "The spacing mode for the paragraph.",
-          "type": "string",
-          "enumDescriptions": [
-            "The spacing mode is inherited from the parent.",
-            "Paragraph spacing is always rendered.",
-            "Paragraph spacing is skipped between list elements."
-          ]
-        },
-        "indentEnd": {
-          "$ref": "Dimension",
-          "description": "The amount indentation for the paragraph on the side that corresponds to\nthe end of the text, based on the current text direction. If unset, the\nvalue is inherited from the parent."
-        },
-        "indentStart": {
-          "$ref": "Dimension",
-          "description": "The amount indentation for the paragraph on the side that corresponds to\nthe start of the text, based on the current text direction. If unset, the\nvalue is inherited from the parent."
-        },
-        "spaceAbove": {
-          "$ref": "Dimension",
-          "description": "The amount of extra space above the paragraph. If unset, the value is\ninherited from the parent."
+        "lineSpacing": {
+          "description": "The amount of space between lines, as a percentage of normal, where normal\nis represented as 100.0. If unset, the value is inherited from the parent.",
+          "format": "float",
+          "type": "number"
         },
         "alignment": {
           "enum": [
@@ -2364,19 +2236,52 @@
             "The paragraph is justified."
           ]
         },
-        "lineSpacing": {
-          "description": "The amount of space between lines, as a percentage of normal, where normal\nis represented as 100.0. If unset, the value is inherited from the parent.",
-          "format": "float",
-          "type": "number"
-        },
-        "indentFirstLine": {
+        "spaceBelow": {
           "$ref": "Dimension",
-          "description": "The amount of indentation for the start of the first line of the paragraph.\nIf unset, the value is inherited from the parent."
+          "description": "The amount of extra space above the paragraph. If unset, the value is\ninherited from the parent."
+        },
+        "direction": {
+          "description": "The text direction of this paragraph. If unset, the value defaults to\nLEFT_TO_RIGHT\nsince text direction is not inherited.",
+          "type": "string",
+          "enumDescriptions": [
+            "The text direction is inherited from the parent.",
+            "The text goes from left to right.",
+            "The text goes from right to left."
+          ],
+          "enum": [
+            "TEXT_DIRECTION_UNSPECIFIED",
+            "LEFT_TO_RIGHT",
+            "RIGHT_TO_LEFT"
+          ]
+        },
+        "indentEnd": {
+          "description": "The amount indentation for the paragraph on the side that corresponds to\nthe end of the text, based on the current text direction. If unset, the\nvalue is inherited from the parent.",
+          "$ref": "Dimension"
+        },
+        "spacingMode": {
+          "description": "The spacing mode for the paragraph.",
+          "type": "string",
+          "enumDescriptions": [
+            "The spacing mode is inherited from the parent.",
+            "Paragraph spacing is always rendered.",
+            "Paragraph spacing is skipped between list elements."
+          ],
+          "enum": [
+            "SPACING_MODE_UNSPECIFIED",
+            "NEVER_COLLAPSE",
+            "COLLAPSE_LISTS"
+          ]
+        },
+        "indentStart": {
+          "$ref": "Dimension",
+          "description": "The amount indentation for the paragraph on the side that corresponds to\nthe start of the text, based on the current text direction. If unset, the\nvalue is inherited from the parent."
+        },
+        "spaceAbove": {
+          "$ref": "Dimension",
+          "description": "The amount of extra space above the paragraph. If unset, the value is\ninherited from the parent."
         }
       },
-      "id": "ParagraphStyle",
-      "description": "Styles that apply to a whole paragraph.\n\nIf this text is contained in a shape with a parent placeholder, then these paragraph styles may be\ninherited from the parent. Which paragraph styles are inherited depend on the\nnesting level of lists:\n\n* A paragraph not in a list will inherit its paragraph style from the\n  paragraph at the 0 nesting level of the list inside the parent placeholder.\n* A paragraph in a list will inherit its paragraph style from the paragraph\n  at its corresponding nesting level of the list inside the parent\n  placeholder.\n\nInherited paragraph styles are represented as unset fields in this message.",
-      "type": "object"
+      "id": "ParagraphStyle"
     },
     "ReplaceAllShapesWithSheetsChartResponse": {
       "description": "The result of replacing shapes with a Google Sheets chart.",
@@ -2391,6 +2296,7 @@
       "id": "ReplaceAllShapesWithSheetsChartResponse"
     },
     "TableCellProperties": {
+      "description": "The properties of the TableCell.",
       "type": "object",
       "properties": {
         "tableCellBackgroundFill": {
@@ -2398,19 +2304,7 @@
           "description": "The background fill of the table cell. The default fill matches the fill\nfor newly created table cells in the Slides editor."
         }
       },
-      "id": "TableCellProperties",
-      "description": "The properties of the TableCell."
-    },
-    "RefreshSheetsChartRequest": {
-      "description": "Refreshes an embedded Google Sheets chart by replacing it with the latest\nversion of the chart from Google Sheets.\n\nNOTE: Refreshing charts requires  at least one of the spreadsheets.readonly,\nspreadsheets, drive.readonly, or drive OAuth scopes.",
-      "type": "object",
-      "properties": {
-        "objectId": {
-          "description": "The object ID of the chart to refresh.",
-          "type": "string"
-        }
-      },
-      "id": "RefreshSheetsChartRequest"
+      "id": "TableCellProperties"
     },
     "Outline": {
       "description": "The outline of a PageElement.\n\nIf these fields are unset, they may be inherited from a parent placeholder\nif it exists. If there is no parent, the fields will default to the value\nused for new page elements created in the Slides editor, which may depend on\nthe page element kind.",
@@ -2421,8 +2315,8 @@
           "description": "The fill of the outline."
         },
         "weight": {
-          "$ref": "Dimension",
-          "description": "The thickness of the outline."
+          "description": "The thickness of the outline.",
+          "$ref": "Dimension"
         },
         "dashStyle": {
           "enum": [
@@ -2463,7 +2357,53 @@
       },
       "id": "Outline"
     },
+    "RefreshSheetsChartRequest": {
+      "description": "Refreshes an embedded Google Sheets chart by replacing it with the latest\nversion of the chart from Google Sheets.\n\nNOTE: Refreshing charts requires  at least one of the spreadsheets.readonly,\nspreadsheets, drive.readonly, or drive OAuth scopes.",
+      "type": "object",
+      "properties": {
+        "objectId": {
+          "description": "The object ID of the chart to refresh.",
+          "type": "string"
+        }
+      },
+      "id": "RefreshSheetsChartRequest"
+    },
+    "TableColumnProperties": {
+      "properties": {
+        "columnWidth": {
+          "description": "Width of a column.",
+          "$ref": "Dimension"
+        }
+      },
+      "id": "TableColumnProperties",
+      "description": "Properties of each column in a table.",
+      "type": "object"
+    },
+    "ShapeProperties": {
+      "description": "The properties of a Shape.\n\nIf the shape is a placeholder shape as determined by the\nplaceholder field, then these\nproperties may be inherited from a parent placeholder shape.\nDetermining the rendered value of the property depends on the corresponding\nproperty_state field value.",
+      "type": "object",
+      "properties": {
+        "shapeBackgroundFill": {
+          "$ref": "ShapeBackgroundFill",
+          "description": "The background fill of the shape. If unset, the background fill is\ninherited from a parent placeholder if it exists. If the shape has no\nparent, then the default background fill depends on the shape type,\nmatching the defaults for new shapes created in the Slides editor."
+        },
+        "shadow": {
+          "$ref": "Shadow",
+          "description": "The shadow properties of the shape. If unset, the shadow is inherited from\na parent placeholder if it exists. If the shape has no parent, then the\ndefault shadow matches the defaults for new shapes created in the Slides\neditor. This property is read-only."
+        },
+        "link": {
+          "description": "The hyperlink destination of the shape. If unset, there is no link. Links\nare not inherited from parent placeholders.",
+          "$ref": "Link"
+        },
+        "outline": {
+          "description": "The outline of the shape. If unset, the outline is inherited from a\nparent placeholder if it exists. If the shape has no parent, then the\ndefault outline depends on the shape type, matching the defaults for\nnew shapes created in the Slides editor.",
+          "$ref": "Outline"
+        }
+      },
+      "id": "ShapeProperties"
+    },
     "NotesProperties": {
+      "id": "NotesProperties",
       "description": "The properties of Page that are only\nrelevant for pages with page_type NOTES.",
       "type": "object",
       "properties": {
@@ -2471,45 +2411,9 @@
           "description": "The object ID of the shape on this notes page that contains the speaker\nnotes for the corresponding slide.\nThe actual shape may not always exist on the notes page. Inserting text\nusing this object ID will automatically create the shape. In this case, the\nactual shape may have different object ID. The `GetPresentation` or\n`GetPage` action will always return the latest object ID.",
           "type": "string"
         }
-      },
-      "id": "NotesProperties"
-    },
-    "ShapeProperties": {
-      "description": "The properties of a Shape.\n\nIf the shape is a placeholder shape as determined by the\nplaceholder field, then these\nproperties may be inherited from a parent placeholder shape.\nDetermining the rendered value of the property depends on the corresponding\nproperty_state field value.",
-      "type": "object",
-      "properties": {
-        "outline": {
-          "description": "The outline of the shape. If unset, the outline is inherited from a\nparent placeholder if it exists. If the shape has no parent, then the\ndefault outline depends on the shape type, matching the defaults for\nnew shapes created in the Slides editor.",
-          "$ref": "Outline"
-        },
-        "shapeBackgroundFill": {
-          "description": "The background fill of the shape. If unset, the background fill is\ninherited from a parent placeholder if it exists. If the shape has no\nparent, then the default background fill depends on the shape type,\nmatching the defaults for new shapes created in the Slides editor.",
-          "$ref": "ShapeBackgroundFill"
-        },
-        "shadow": {
-          "description": "The shadow properties of the shape. If unset, the shadow is inherited from\na parent placeholder if it exists. If the shape has no parent, then the\ndefault shadow matches the defaults for new shapes created in the Slides\neditor. This property is read-only.",
-          "$ref": "Shadow"
-        },
-        "link": {
-          "description": "The hyperlink destination of the shape. If unset, there is no link. Links\nare not inherited from parent placeholders.",
-          "$ref": "Link"
-        }
-      },
-      "id": "ShapeProperties"
-    },
-    "TableColumnProperties": {
-      "id": "TableColumnProperties",
-      "description": "Properties of each column in a table.",
-      "type": "object",
-      "properties": {
-        "columnWidth": {
-          "$ref": "Dimension",
-          "description": "Width of a column."
-        }
       }
     },
     "TableRow": {
-      "description": "Properties and contents of each row in a table.",
       "type": "object",
       "properties": {
         "rowHeight": {
@@ -2524,18 +2428,14 @@
           }
         }
       },
-      "id": "TableRow"
+      "id": "TableRow",
+      "description": "Properties and contents of each row in a table."
     },
     "UpdateTableCellPropertiesRequest": {
       "id": "UpdateTableCellPropertiesRequest",
       "description": "Update the properties of a TableCell.",
       "type": "object",
       "properties": {
-        "fields": {
-          "type": "string",
-          "description": "The fields that should be updated.\n\nAt least one field must be specified. The root `tableCellProperties` is\nimplied and should not be specified. A single `\"*\"` can be used as\nshort-hand for listing every field.\n\nFor example to update the table cell background solid fill color, set\n`fields` to `\"tableCellBackgroundFill.solidFill.color\"`.\n\nTo reset a property to its default value, include its field name in the\nfield mask but leave the field itself unset.",
-          "format": "google-fieldmask"
-        },
         "objectId": {
           "description": "The object ID of the table.",
           "type": "string"
@@ -2545,8 +2445,13 @@
           "description": "The table range representing the subset of the table to which the updates\nare applied. If a table range is not specified, the updates will apply to\nthe entire table."
         },
         "tableCellProperties": {
-          "description": "The table cell properties to update.",
-          "$ref": "TableCellProperties"
+          "$ref": "TableCellProperties",
+          "description": "The table cell properties to update."
+        },
+        "fields": {
+          "description": "The fields that should be updated.\n\nAt least one field must be specified. The root `tableCellProperties` is\nimplied and should not be specified. A single `\"*\"` can be used as\nshort-hand for listing every field.\n\nFor example to update the table cell background solid fill color, set\n`fields` to `\"tableCellBackgroundFill.solidFill.color\"`.\n\nTo reset a property to its default value, include its field name in the\nfield mask but leave the field itself unset.",
+          "format": "google-fieldmask",
+          "type": "string"
         }
       }
     },
@@ -2554,11 +2459,6 @@
       "description": "Creates a new slide.",
       "type": "object",
       "properties": {
-        "insertionIndex": {
-          "description": "The optional zero-based index indicating where to insert the slides.\n\nIf you don't specify an index, the new slide is created at the end.",
-          "format": "int32",
-          "type": "integer"
-        },
         "placeholderIdMappings": {
           "description": "An optional list of object ID mappings from the placeholder(s) on the layout to the placeholder(s)\nthat will be created on the new slide from that specified layout. Can only\nbe used when `slide_layout_reference` is specified.",
           "type": "array",
@@ -2567,67 +2467,73 @@
           }
         },
         "slideLayoutReference": {
-          "$ref": "LayoutReference",
-          "description": "Layout reference of the slide to be inserted, based on the *current\nmaster*, which is one of the following:\n\n- The master of the previous slide index.\n- The master of the first slide, if the insertion_index is zero.\n- The first master in the presentation, if there are no slides.\n\nIf the LayoutReference is not found in the current master, a 400 bad\nrequest error is returned.\n\nIf you don't specify a layout reference, then the new slide will use the\npredefined layout `BLANK`."
+          "description": "Layout reference of the slide to be inserted, based on the *current\nmaster*, which is one of the following:\n\n- The master of the previous slide index.\n- The master of the first slide, if the insertion_index is zero.\n- The first master in the presentation, if there are no slides.\n\nIf the LayoutReference is not found in the current master, a 400 bad\nrequest error is returned.\n\nIf you don't specify a layout reference, then the new slide will use the\npredefined layout `BLANK`.",
+          "$ref": "LayoutReference"
         },
         "objectId": {
-          "description": "A user-supplied object ID.\n\nIf you specify an ID, it must be unique among all pages and page elements\nin the presentation. The ID must start with an alphanumeric character or an\nunderscore (matches regex `[a-zA-Z0-9_]`); remaining characters\nmay include those as well as a hyphen or colon (matches regex\n`[a-zA-Z0-9_-:]`).\nThe length of the ID must not be less than 5 or greater than 50.\n\nIf you don't specify an ID, a unique one is generated.",
-          "type": "string"
+          "type": "string",
+          "description": "A user-supplied object ID.\n\nIf you specify an ID, it must be unique among all pages and page elements\nin the presentation. The ID must start with an alphanumeric character or an\nunderscore (matches regex `[a-zA-Z0-9_]`); remaining characters\nmay include those as well as a hyphen or colon (matches regex\n`[a-zA-Z0-9_-:]`).\nThe length of the ID must not be less than 5 or greater than 50.\n\nIf you don't specify an ID, a unique one is generated."
+        },
+        "insertionIndex": {
+          "description": "The optional zero-based index indicating where to insert the slides.\n\nIf you don't specify an index, the new slide is created at the end.",
+          "format": "int32",
+          "type": "integer"
         }
       },
       "id": "CreateSlideRequest"
     },
     "BatchUpdatePresentationRequest": {
+      "id": "BatchUpdatePresentationRequest",
+      "description": "Request message for PresentationsService.BatchUpdatePresentation.",
       "type": "object",
       "properties": {
+        "writeControl": {
+          "$ref": "WriteControl",
+          "description": "Provides control over how write requests are executed."
+        },
         "requests": {
           "description": "A list of updates to apply to the presentation.",
           "type": "array",
           "items": {
             "$ref": "Request"
           }
-        },
-        "writeControl": {
-          "description": "Provides control over how write requests are executed, such as\nconditionally updating the presentation.",
-          "$ref": "WriteControl"
         }
-      },
-      "id": "BatchUpdatePresentationRequest",
-      "description": "Request message for PresentationsService.BatchUpdatePresentation."
+      }
     },
     "TextContent": {
       "description": "The general text content. The text must reside in a compatible shape (e.g.\ntext box or rectangle) or a table cell in a page.",
       "type": "object",
       "properties": {
-        "lists": {
-          "type": "object",
-          "additionalProperties": {
-            "$ref": "List"
-          },
-          "description": "The bulleted lists contained in this text, keyed by list ID."
-        },
         "textElements": {
+          "description": "The text contents broken down into its component parts, including styling\ninformation. This property is read-only.",
           "type": "array",
           "items": {
             "$ref": "TextElement"
+          }
+        },
+        "lists": {
+          "additionalProperties": {
+            "$ref": "List"
           },
-          "description": "The text contents broken down into its component parts, including styling\ninformation. This property is read-only."
+          "description": "The bulleted lists contained in this text, keyed by list ID.",
+          "type": "object"
         }
       },
       "id": "TextContent"
     },
     "CreateSheetsChartResponse": {
+      "description": "The result of creating an embedded Google Sheets chart.",
       "type": "object",
       "properties": {
         "objectId": {
-          "type": "string",
-          "description": "The object ID of the created chart."
+          "description": "The object ID of the created chart.",
+          "type": "string"
         }
       },
-      "id": "CreateSheetsChartResponse",
-      "description": "The result of creating an embedded Google Sheets chart."
+      "id": "CreateSheetsChartResponse"
     },
     "WriteControl": {
+      "id": "WriteControl",
       "description": "Provides control over how write requests are executed.",
       "type": "object",
       "properties": {
@@ -2635,24 +2541,23 @@
           "description": "The revision ID of the presentation required for the write request. If\nspecified and the `required_revision_id` doesn't exactly match the\npresentation's current `revision_id`, the request will not be processed and\nwill return a 400 bad request error.",
           "type": "string"
         }
-      },
-      "id": "WriteControl"
+      }
     },
     "DeleteParagraphBulletsRequest": {
       "description": "Deletes bullets from all of the paragraphs that overlap with the given text\nindex range.\n\nThe nesting level of each paragraph will be visually preserved by adding\nindent to the start of the corresponding paragraph.",
       "type": "object",
       "properties": {
+        "cellLocation": {
+          "$ref": "TableCellLocation",
+          "description": "The optional table cell location if the text to be modified is in a table\ncell. If present, the object_id must refer to a table."
+        },
         "objectId": {
           "description": "The object ID of the shape or table containing the text to delete bullets\nfrom.",
           "type": "string"
         },
         "textRange": {
-          "description": "The range of text to delete bullets from, based on TextElement indexes.",
-          "$ref": "Range"
-        },
-        "cellLocation": {
-          "description": "The optional table cell location if the text to be modified is in a table\ncell. If present, the object_id must refer to a table.",
-          "$ref": "TableCellLocation"
+          "$ref": "Range",
+          "description": "The range of text to delete bullets from, based on TextElement indexes."
         }
       },
       "id": "DeleteParagraphBulletsRequest"
@@ -2661,25 +2566,27 @@
       "description": "A TextElement kind that represents the beginning of a new paragraph.",
       "type": "object",
       "properties": {
-        "style": {
-          "$ref": "ParagraphStyle",
-          "description": "The paragraph's style"
-        },
         "bullet": {
-          "description": "The bullet for this paragraph. If not present, the paragraph does not\nbelong to a list.",
-          "$ref": "Bullet"
+          "$ref": "Bullet",
+          "description": "The bullet for this paragraph. If not present, the paragraph does not\nbelong to a list."
+        },
+        "style": {
+          "description": "The paragraph's style",
+          "$ref": "ParagraphStyle"
         }
       },
       "id": "ParagraphMarker"
     },
     "InsertTableColumnsRequest": {
-      "id": "InsertTableColumnsRequest",
-      "description": "Inserts columns into a table.\n\nOther columns in the table will be resized to fit the new column.",
-      "type": "object",
       "properties": {
+        "number": {
+          "description": "The number of columns to be inserted. Maximum 20 per request.",
+          "format": "int32",
+          "type": "integer"
+        },
         "cellLocation": {
-          "description": "The reference table cell location from which columns will be inserted.\n\nA new column will be inserted to the left (or right) of the column where\nthe reference cell is. If the reference cell is a merged cell, a new\ncolumn will be inserted to the left (or right) of the merged cell.",
-          "$ref": "TableCellLocation"
+          "$ref": "TableCellLocation",
+          "description": "The reference table cell location from which columns will be inserted.\n\nA new column will be inserted to the left (or right) of the column where\nthe reference cell is. If the reference cell is a merged cell, a new\ncolumn will be inserted to the left (or right) of the merged cell."
         },
         "insertRight": {
           "description": "Whether to insert new columns to the right of the reference cell location.\n\n- `True`: insert to the right.\n- `False`: insert to the left.",
@@ -2688,54 +2595,74 @@
         "tableObjectId": {
           "description": "The table to insert columns into.",
           "type": "string"
+        }
+      },
+      "id": "InsertTableColumnsRequest",
+      "description": "Inserts columns into a table.\n\nOther columns in the table will be resized to fit the new column.",
+      "type": "object"
+    },
+    "Thumbnail": {
+      "description": "The thumbnail of a page.",
+      "type": "object",
+      "properties": {
+        "height": {
+          "description": "The positive height in pixels of the thumbnail image.",
+          "format": "int32",
+          "type": "integer"
         },
-        "number": {
-          "description": "The number of columns to be inserted. Maximum 20 per request.",
+        "contentUrl": {
+          "description": "The content URL of the thumbnail image.\n\nThe URL to the image has a default lifetime of 30 minutes.\nThis URL is tagged with the account of the requester. Anyone with the URL\neffectively accesses the image as the original requester. Access to the\nimage may be lost if the presentation's sharing settings change.\nThe mime type of the thumbnail image is the same as specified in the\n`GetPageThumbnailRequest`.",
+          "type": "string"
+        },
+        "width": {
+          "description": "The positive width in pixels of the thumbnail image.",
           "format": "int32",
           "type": "integer"
         }
-      }
+      },
+      "id": "Thumbnail"
     },
     "LayoutPlaceholderIdMapping": {
+      "id": "LayoutPlaceholderIdMapping",
       "description": "The user-specified ID mapping for a placeholder that will be created on a\nslide from a specified layout.",
       "type": "object",
       "properties": {
-        "layoutPlaceholder": {
-          "description": "The placeholder on a layout that will be applied to a slide. Only type and index are needed. For example, a\npredefined `TITLE_AND_BODY` layout may usually have a TITLE placeholder\nwith index 0 and a BODY placeholder with index 0.",
-          "$ref": "Placeholder"
-        },
-        "layoutPlaceholderObjectId": {
-          "type": "string",
-          "description": "The object ID of the placeholder on a layout that will be applied\nto a slide."
-        },
         "objectId": {
           "description": "A user-supplied object ID for the placeholder identified above that to be\ncreated onto a slide.\n\nIf you specify an ID, it must be unique among all pages and page elements\nin the presentation. The ID must start with an alphanumeric character or an\nunderscore (matches regex `[a-zA-Z0-9_]`); remaining characters\nmay include those as well as a hyphen or colon (matches regex\n`[a-zA-Z0-9_-:]`).\nThe length of the ID must not be less than 5 or greater than 50.\n\nIf you don't specify an ID, a unique one is generated.",
           "type": "string"
+        },
+        "layoutPlaceholder": {
+          "$ref": "Placeholder",
+          "description": "The placeholder on a layout that will be applied to a slide. Only type and index are needed. For example, a\npredefined `TITLE_AND_BODY` layout may usually have a TITLE placeholder\nwith index 0 and a BODY placeholder with index 0."
+        },
+        "layoutPlaceholderObjectId": {
+          "description": "The object ID of the placeholder on a layout that will be applied\nto a slide.",
+          "type": "string"
         }
-      },
-      "id": "LayoutPlaceholderIdMapping"
+      }
     },
     "UpdateShapePropertiesRequest": {
       "description": "Update the properties of a Shape.",
       "type": "object",
       "properties": {
+        "objectId": {
+          "type": "string",
+          "description": "The object ID of the shape the updates are applied to."
+        },
+        "shapeProperties": {
+          "$ref": "ShapeProperties",
+          "description": "The shape properties to update."
+        },
         "fields": {
           "description": "The fields that should be updated.\n\nAt least one field must be specified. The root `shapeProperties` is\nimplied and should not be specified. A single `\"*\"` can be used as\nshort-hand for listing every field.\n\nFor example to update the shape background solid fill color, set `fields`\nto `\"shapeBackgroundFill.solidFill.color\"`.\n\nTo reset a property to its default value, include its field name in the\nfield mask but leave the field itself unset.",
           "format": "google-fieldmask",
           "type": "string"
-        },
-        "objectId": {
-          "description": "The object ID of the shape the updates are applied to.",
-          "type": "string"
-        },
-        "shapeProperties": {
-          "description": "The shape properties to update.",
-          "$ref": "ShapeProperties"
         }
       },
       "id": "UpdateShapePropertiesRequest"
     },
     "WordArt": {
+      "id": "WordArt",
       "description": "A PageElement kind representing\nword art.",
       "type": "object",
       "properties": {
@@ -2743,10 +2670,11 @@
           "description": "The text rendered as word art.",
           "type": "string"
         }
-      },
-      "id": "WordArt"
+      }
     },
     "Recolor": {
+      "id": "Recolor",
+      "description": "A recolor effect applied on an image.",
       "type": "object",
       "properties": {
         "recolorStops": {
@@ -2757,7 +2685,6 @@
           }
         },
         "name": {
-          "type": "string",
           "enumDescriptions": [
             "No recolor effect. The default value.",
             "A recolor effect that lightens the image using the page's first available\ncolor from its color scheme.",
@@ -2812,32 +2739,24 @@
             "SEPIA",
             "CUSTOM"
           ],
-          "description": "The name of the recolor effect.\n\nThe name is determined from the `recolor_stops` by matching the gradient\nagainst the colors in the page's current color scheme. This property is\nread-only."
+          "description": "The name of the recolor effect.\n\nThe name is determined from the `recolor_stops` by matching the gradient\nagainst the colors in the page's current color scheme. This property is\nread-only.",
+          "type": "string"
         }
-      },
-      "id": "Recolor",
-      "description": "A recolor effect applied on an image."
+      }
     },
     "Link": {
+      "description": "A hypertext link.",
       "type": "object",
       "properties": {
         "pageObjectId": {
-          "description": "If set, indicates this is a link to the specific page in this\npresentation with this ID. A page with this ID may not exist.",
-          "type": "string"
+          "type": "string",
+          "description": "If set, indicates this is a link to the specific page in this\npresentation with this ID. A page with this ID may not exist."
         },
         "url": {
-          "type": "string",
-          "description": "If set, indicates this is a link to the external web page at this URL."
+          "description": "If set, indicates this is a link to the external web page at this URL.",
+          "type": "string"
         },
         "relativeLink": {
-          "enum": [
-            "RELATIVE_SLIDE_LINK_UNSPECIFIED",
-            "NEXT_SLIDE",
-            "PREVIOUS_SLIDE",
-            "FIRST_SLIDE",
-            "LAST_SLIDE"
-          ],
-          "description": "If set, indicates this is a link to a slide in this presentation,\naddressed by its position.",
           "type": "string",
           "enumDescriptions": [
             "An unspecified relative slide link.",
@@ -2845,7 +2764,15 @@
             "A link to the previous slide.",
             "A link to the first slide in the presentation.",
             "A link to the last slide in the presentation."
-          ]
+          ],
+          "enum": [
+            "RELATIVE_SLIDE_LINK_UNSPECIFIED",
+            "NEXT_SLIDE",
+            "PREVIOUS_SLIDE",
+            "FIRST_SLIDE",
+            "LAST_SLIDE"
+          ],
+          "description": "If set, indicates this is a link to a slide in this presentation,\naddressed by its position."
         },
         "slideIndex": {
           "description": "If set, indicates this is a link to the slide at this zero-based index\nin the presentation. There may not be a slide at this index.",
@@ -2853,45 +2780,42 @@
           "type": "integer"
         }
       },
-      "id": "Link",
-      "description": "A hypertext link."
+      "id": "Link"
     },
     "CreateShapeResponse": {
       "description": "The result of creating a shape.",
       "type": "object",
       "properties": {
         "objectId": {
-          "type": "string",
-          "description": "The object ID of the created shape."
+          "description": "The object ID of the created shape.",
+          "type": "string"
         }
       },
       "id": "CreateShapeResponse"
     },
     "RgbColor": {
+      "description": "An RGB color.",
+      "type": "object",
       "properties": {
+        "green": {
+          "type": "number",
+          "description": "The green component of the color, from 0.0 to 1.0.",
+          "format": "float"
+        },
+        "blue": {
+          "type": "number",
+          "description": "The blue component of the color, from 0.0 to 1.0.",
+          "format": "float"
+        },
         "red": {
           "description": "The red 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"
-        },
-        "blue": {
-          "description": "The blue component of the color, from 0.0 to 1.0.",
-          "format": "float",
-          "type": "number"
         }
       },
-      "id": "RgbColor",
-      "description": "An RGB color.",
-      "type": "object"
+      "id": "RgbColor"
     },
     "CreateLineRequest": {
-      "id": "CreateLineRequest",
-      "description": "Creates a line.",
       "type": "object",
       "properties": {
         "objectId": {
@@ -2903,33 +2827,36 @@
           "description": "The element properties for the line."
         },
         "lineCategory": {
+          "enum": [
+            "STRAIGHT",
+            "BENT",
+            "CURVED"
+          ],
           "description": "The category of line to be created.",
           "type": "string",
           "enumDescriptions": [
             "Straight connectors, including straight connector 1. The is the default\ncategory when one is not specified.",
             "Bent connectors, including bent connector 2 to 5.",
             "Curved connectors, including curved connector 2 to 5."
-          ],
-          "enum": [
-            "STRAIGHT",
-            "BENT",
-            "CURVED"
           ]
         }
-      }
+      },
+      "id": "CreateLineRequest",
+      "description": "Creates a line."
     },
     "CreateSlideResponse": {
+      "description": "The result of creating a slide.",
       "type": "object",
       "properties": {
         "objectId": {
-          "type": "string",
-          "description": "The object ID of the created slide."
+          "description": "The object ID of the created slide.",
+          "type": "string"
         }
       },
-      "id": "CreateSlideResponse",
-      "description": "The result of creating a slide."
+      "id": "CreateSlideResponse"
     },
     "CreateShapeRequest": {
+      "id": "CreateShapeRequest",
       "description": "Creates a new shape.",
       "type": "object",
       "properties": {
@@ -2938,6 +2865,151 @@
           "type": "string"
         },
         "shapeType": {
+          "enumDescriptions": [
+            "The shape type that is not predefined.",
+            "Text box shape.",
+            "Rectangle shape. Corresponds to ECMA-376 ST_ShapeType 'rect'.",
+            "Round corner rectangle shape. Corresponds to ECMA-376 ST_ShapeType\n'roundRect'",
+            "Ellipse shape. Corresponds to ECMA-376 ST_ShapeType 'ellipse'",
+            "Curved arc shape. Corresponds to ECMA-376 ST_ShapeType 'arc'",
+            "Bent arrow shape. Corresponds to ECMA-376 ST_ShapeType 'bentArrow'",
+            "Bent up arrow shape. Corresponds to ECMA-376 ST_ShapeType 'bentUpArrow'",
+            "Bevel shape. Corresponds to ECMA-376 ST_ShapeType 'bevel'",
+            "Block arc shape. Corresponds to ECMA-376 ST_ShapeType 'blockArc'",
+            "Brace pair shape. Corresponds to ECMA-376 ST_ShapeType 'bracePair'",
+            "Bracket pair shape. Corresponds to ECMA-376 ST_ShapeType 'bracketPair'",
+            "Can shape. Corresponds to ECMA-376 ST_ShapeType 'can'",
+            "Chevron shape. Corresponds to ECMA-376 ST_ShapeType 'chevron'",
+            "Chord shape. Corresponds to ECMA-376 ST_ShapeType 'chord'",
+            "Cloud shape. Corresponds to ECMA-376 ST_ShapeType 'cloud'",
+            "Corner shape. Corresponds to ECMA-376 ST_ShapeType 'corner'",
+            "Cube shape. Corresponds to ECMA-376 ST_ShapeType 'cube'",
+            "Curved down arrow shape. Corresponds to ECMA-376 ST_ShapeType\n'curvedDownArrow'",
+            "Curved left arrow shape. Corresponds to ECMA-376 ST_ShapeType\n'curvedLeftArrow'",
+            "Curved right arrow shape. Corresponds to ECMA-376 ST_ShapeType\n'curvedRightArrow'",
+            "Curved up arrow shape. Corresponds to ECMA-376 ST_ShapeType\n'curvedUpArrow'",
+            "Decagon shape. Corresponds to ECMA-376 ST_ShapeType 'decagon'",
+            "Diagonal stripe shape. Corresponds to ECMA-376 ST_ShapeType 'diagStripe'",
+            "Diamond shape. Corresponds to ECMA-376 ST_ShapeType 'diamond'",
+            "Dodecagon shape. Corresponds to ECMA-376 ST_ShapeType 'dodecagon'",
+            "Donut shape. Corresponds to ECMA-376 ST_ShapeType 'donut'",
+            "Double wave shape. Corresponds to ECMA-376 ST_ShapeType 'doubleWave'",
+            "Down arrow shape. Corresponds to ECMA-376 ST_ShapeType 'downArrow'",
+            "Callout down arrow shape. Corresponds to ECMA-376 ST_ShapeType\n'downArrowCallout'",
+            "Folded corner shape. Corresponds to ECMA-376 ST_ShapeType 'foldedCorner'",
+            "Frame shape. Corresponds to ECMA-376 ST_ShapeType 'frame'",
+            "Half frame shape. Corresponds to ECMA-376 ST_ShapeType 'halfFrame'",
+            "Heart shape. Corresponds to ECMA-376 ST_ShapeType 'heart'",
+            "Heptagon shape. Corresponds to ECMA-376 ST_ShapeType 'heptagon'",
+            "Hexagon shape. Corresponds to ECMA-376 ST_ShapeType 'hexagon'",
+            "Home plate shape. Corresponds to ECMA-376 ST_ShapeType 'homePlate'",
+            "Horizontal scroll shape. Corresponds to ECMA-376 ST_ShapeType\n'horizontalScroll'",
+            "Irregular seal 1 shape. Corresponds to ECMA-376 ST_ShapeType\n'irregularSeal1'",
+            "Irregular seal 2 shape. Corresponds to ECMA-376 ST_ShapeType\n'irregularSeal2'",
+            "Left arrow shape. Corresponds to ECMA-376 ST_ShapeType 'leftArrow'",
+            "Callout left arrow shape. Corresponds to ECMA-376 ST_ShapeType\n'leftArrowCallout'",
+            "Left brace shape. Corresponds to ECMA-376 ST_ShapeType 'leftBrace'",
+            "Left bracket shape. Corresponds to ECMA-376 ST_ShapeType 'leftBracket'",
+            "Left right arrow shape. Corresponds to ECMA-376 ST_ShapeType\n'leftRightArrow'",
+            "Callout left right arrow shape. Corresponds to ECMA-376 ST_ShapeType\n'leftRightArrowCallout'",
+            "Left right up arrow shape. Corresponds to ECMA-376 ST_ShapeType\n'leftRightUpArrow'",
+            "Left up arrow shape. Corresponds to ECMA-376 ST_ShapeType 'leftUpArrow'",
+            "Lightning bolt shape. Corresponds to ECMA-376 ST_ShapeType\n'lightningBolt'",
+            "Divide math shape. Corresponds to ECMA-376 ST_ShapeType 'mathDivide'",
+            "Equal math shape. Corresponds to ECMA-376 ST_ShapeType 'mathEqual'",
+            "Minus math shape. Corresponds to ECMA-376 ST_ShapeType 'mathMinus'",
+            "Multiply math shape. Corresponds to ECMA-376 ST_ShapeType 'mathMultiply'",
+            "Not equal math shape. Corresponds to ECMA-376 ST_ShapeType 'mathNotEqual'",
+            "Plus math shape. Corresponds to ECMA-376 ST_ShapeType 'mathPlus'",
+            "Moon shape. Corresponds to ECMA-376 ST_ShapeType 'moon'",
+            "No smoking shape. Corresponds to ECMA-376 ST_ShapeType 'noSmoking'",
+            "Notched right arrow shape. Corresponds to ECMA-376 ST_ShapeType\n'notchedRightArrow'",
+            "Octagon shape. Corresponds to ECMA-376 ST_ShapeType 'octagon'",
+            "Parallelogram shape. Corresponds to ECMA-376 ST_ShapeType 'parallelogram'",
+            "Pentagon shape. Corresponds to ECMA-376 ST_ShapeType 'pentagon'",
+            "Pie shape. Corresponds to ECMA-376 ST_ShapeType 'pie'",
+            "Plaque shape. Corresponds to ECMA-376 ST_ShapeType 'plaque'",
+            "Plus shape. Corresponds to ECMA-376 ST_ShapeType 'plus'",
+            "Quad-arrow shape. Corresponds to ECMA-376 ST_ShapeType 'quadArrow'",
+            "Callout quad-arrow shape. Corresponds to ECMA-376 ST_ShapeType\n'quadArrowCallout'",
+            "Ribbon shape. Corresponds to ECMA-376 ST_ShapeType 'ribbon'",
+            "Ribbon 2 shape. Corresponds to ECMA-376 ST_ShapeType 'ribbon2'",
+            "Right arrow shape. Corresponds to ECMA-376 ST_ShapeType 'rightArrow'",
+            "Callout right arrow shape. Corresponds to ECMA-376 ST_ShapeType\n'rightArrowCallout'",
+            "Right brace shape. Corresponds to ECMA-376 ST_ShapeType 'rightBrace'",
+            "Right bracket shape. Corresponds to ECMA-376 ST_ShapeType 'rightBracket'",
+            "One round corner rectangle shape. Corresponds to ECMA-376 ST_ShapeType\n'round1Rect'",
+            "Two diagonal round corner rectangle shape. Corresponds to ECMA-376\nST_ShapeType 'round2DiagRect'",
+            "Two same-side round corner rectangle shape. Corresponds to ECMA-376\nST_ShapeType 'round2SameRect'",
+            "Right triangle shape. Corresponds to ECMA-376 ST_ShapeType 'rtTriangle'",
+            "Smiley face shape. Corresponds to ECMA-376 ST_ShapeType 'smileyFace'",
+            "One snip corner rectangle shape. Corresponds to ECMA-376 ST_ShapeType\n'snip1Rect'",
+            "Two diagonal snip corner rectangle shape. Corresponds to ECMA-376\nST_ShapeType 'snip2DiagRect'",
+            "Two same-side snip corner rectangle shape. Corresponds to ECMA-376\nST_ShapeType 'snip2SameRect'",
+            "One snip one round corner rectangle shape. Corresponds to ECMA-376\nST_ShapeType 'snipRoundRect'",
+            "Ten pointed star shape. Corresponds to ECMA-376 ST_ShapeType 'star10'",
+            "Twelve pointed star shape. Corresponds to ECMA-376 ST_ShapeType 'star12'",
+            "Sixteen pointed star shape. Corresponds to ECMA-376 ST_ShapeType 'star16'",
+            "Twenty four pointed star shape. Corresponds to ECMA-376 ST_ShapeType\n'star24'",
+            "Thirty two pointed star shape. Corresponds to ECMA-376 ST_ShapeType\n'star32'",
+            "Four pointed star shape. Corresponds to ECMA-376 ST_ShapeType 'star4'",
+            "Five pointed star shape. Corresponds to ECMA-376 ST_ShapeType 'star5'",
+            "Six pointed star shape. Corresponds to ECMA-376 ST_ShapeType 'star6'",
+            "Seven pointed star shape. Corresponds to ECMA-376 ST_ShapeType 'star7'",
+            "Eight pointed star shape. Corresponds to ECMA-376 ST_ShapeType 'star8'",
+            "Striped right arrow shape. Corresponds to ECMA-376 ST_ShapeType\n'stripedRightArrow'",
+            "Sun shape. Corresponds to ECMA-376 ST_ShapeType 'sun'",
+            "Trapezoid shape. Corresponds to ECMA-376 ST_ShapeType 'trapezoid'",
+            "Triangle shape. Corresponds to ECMA-376 ST_ShapeType 'triangle'",
+            "Up arrow shape. Corresponds to ECMA-376 ST_ShapeType 'upArrow'",
+            "Callout up arrow shape. Corresponds to ECMA-376 ST_ShapeType\n'upArrowCallout'",
+            "Up down arrow shape. Corresponds to ECMA-376 ST_ShapeType 'upDownArrow'",
+            "U-turn arrow shape. Corresponds to ECMA-376 ST_ShapeType 'uturnArrow'",
+            "Vertical scroll shape. Corresponds to ECMA-376 ST_ShapeType\n'verticalScroll'",
+            "Wave shape. Corresponds to ECMA-376 ST_ShapeType 'wave'",
+            "Callout wedge ellipse shape. Corresponds to ECMA-376 ST_ShapeType\n'wedgeEllipseCallout'",
+            "Callout wedge rectangle shape. Corresponds to ECMA-376 ST_ShapeType\n'wedgeRectCallout'",
+            "Callout wedge round rectangle shape. Corresponds to ECMA-376 ST_ShapeType\n'wedgeRoundRectCallout'",
+            "Alternate process flow shape. Corresponds to ECMA-376 ST_ShapeType\n'flowChartAlternateProcess'",
+            "Collate flow shape. Corresponds to ECMA-376 ST_ShapeType\n'flowChartCollate'",
+            "Connector flow shape. Corresponds to ECMA-376 ST_ShapeType\n'flowChartConnector'",
+            "Decision flow shape. Corresponds to ECMA-376 ST_ShapeType\n'flowChartDecision'",
+            "Delay flow shape. Corresponds to ECMA-376 ST_ShapeType 'flowChartDelay'",
+            "Display flow shape. Corresponds to ECMA-376 ST_ShapeType\n'flowChartDisplay'",
+            "Document flow shape. Corresponds to ECMA-376 ST_ShapeType\n'flowChartDocument'",
+            "Extract flow shape. Corresponds to ECMA-376 ST_ShapeType\n'flowChartExtract'",
+            "Input output flow shape. Corresponds to ECMA-376 ST_ShapeType\n'flowChartInputOutput'",
+            "Internal storage flow shape. Corresponds to ECMA-376 ST_ShapeType\n'flowChartInternalStorage'",
+            "Magnetic disk flow shape. Corresponds to ECMA-376 ST_ShapeType\n'flowChartMagneticDisk'",
+            "Magnetic drum flow shape. Corresponds to ECMA-376 ST_ShapeType\n'flowChartMagneticDrum'",
+            "Magnetic tape flow shape. Corresponds to ECMA-376 ST_ShapeType\n'flowChartMagneticTape'",
+            "Manual input flow shape. Corresponds to ECMA-376 ST_ShapeType\n'flowChartManualInput'",
+            "Manual operation flow shape. Corresponds to ECMA-376 ST_ShapeType\n'flowChartManualOperation'",
+            "Merge flow shape. Corresponds to ECMA-376 ST_ShapeType 'flowChartMerge'",
+            "Multi-document flow shape. Corresponds to ECMA-376 ST_ShapeType\n'flowChartMultidocument'",
+            "Offline storage flow shape. Corresponds to ECMA-376 ST_ShapeType\n'flowChartOfflineStorage'",
+            "Off-page connector flow shape. Corresponds to ECMA-376 ST_ShapeType\n'flowChartOffpageConnector'",
+            "Online storage flow shape. Corresponds to ECMA-376 ST_ShapeType\n'flowChartOnlineStorage'",
+            "Or flow shape. Corresponds to ECMA-376 ST_ShapeType 'flowChartOr'",
+            "Predefined process flow shape. Corresponds to ECMA-376 ST_ShapeType\n'flowChartPredefinedProcess'",
+            "Preparation flow shape. Corresponds to ECMA-376 ST_ShapeType\n'flowChartPreparation'",
+            "Process flow shape. Corresponds to ECMA-376 ST_ShapeType\n'flowChartProcess'",
+            "Punched card flow shape. Corresponds to ECMA-376 ST_ShapeType\n'flowChartPunchedCard'",
+            "Punched tape flow shape. Corresponds to ECMA-376 ST_ShapeType\n'flowChartPunchedTape'",
+            "Sort flow shape. Corresponds to ECMA-376 ST_ShapeType 'flowChartSort'",
+            "Summing junction flow shape. Corresponds to ECMA-376 ST_ShapeType\n'flowChartSummingJunction'",
+            "Terminator flow shape. Corresponds to ECMA-376 ST_ShapeType\n'flowChartTerminator'",
+            "East arrow shape.",
+            "Northeast arrow shape.",
+            "North arrow shape.",
+            "Speech shape.",
+            "Star burst shape.",
+            "Teardrop shape. Corresponds to ECMA-376 ST_ShapeType 'teardrop'",
+            "Ellipse ribbon shape. Corresponds to ECMA-376 ST_ShapeType\n'ellipseRibbon'",
+            "Ellipse ribbon 2 shape. Corresponds to ECMA-376 ST_ShapeType\n'ellipseRibbon2'",
+            "Callout cloud shape. Corresponds to ECMA-376 ST_ShapeType 'cloudCallout'",
+            "Custom shape."
+          ],
           "enum": [
             "TYPE_UNSPECIFIED",
             "TEXT_BOX",
@@ -3084,166 +3156,23 @@
             "CUSTOM"
           ],
           "description": "The shape type.",
-          "type": "string",
-          "enumDescriptions": [
-            "The shape type that is not predefined.",
-            "Text box shape.",
-            "Rectangle shape. Corresponds to ECMA-376 ST_ShapeType 'rect'.",
-            "Round corner rectangle shape. Corresponds to ECMA-376 ST_ShapeType\n'roundRect'",
-            "Ellipse shape. Corresponds to ECMA-376 ST_ShapeType 'ellipse'",
-            "Curved arc shape. Corresponds to ECMA-376 ST_ShapeType 'arc'",
-            "Bent arrow shape. Corresponds to ECMA-376 ST_ShapeType 'bentArrow'",
-            "Bent up arrow shape. Corresponds to ECMA-376 ST_ShapeType 'bentUpArrow'",
-            "Bevel shape. Corresponds to ECMA-376 ST_ShapeType 'bevel'",
-            "Block arc shape. Corresponds to ECMA-376 ST_ShapeType 'blockArc'",
-            "Brace pair shape. Corresponds to ECMA-376 ST_ShapeType 'bracePair'",
-            "Bracket pair shape. Corresponds to ECMA-376 ST_ShapeType 'bracketPair'",
-            "Can shape. Corresponds to ECMA-376 ST_ShapeType 'can'",
-            "Chevron shape. Corresponds to ECMA-376 ST_ShapeType 'chevron'",
-            "Chord shape. Corresponds to ECMA-376 ST_ShapeType 'chord'",
-            "Cloud shape. Corresponds to ECMA-376 ST_ShapeType 'cloud'",
-            "Corner shape. Corresponds to ECMA-376 ST_ShapeType 'corner'",
-            "Cube shape. Corresponds to ECMA-376 ST_ShapeType 'cube'",
-            "Curved down arrow shape. Corresponds to ECMA-376 ST_ShapeType\n'curvedDownArrow'",
-            "Curved left arrow shape. Corresponds to ECMA-376 ST_ShapeType\n'curvedLeftArrow'",
-            "Curved right arrow shape. Corresponds to ECMA-376 ST_ShapeType\n'curvedRightArrow'",
-            "Curved up arrow shape. Corresponds to ECMA-376 ST_ShapeType\n'curvedUpArrow'",
-            "Decagon shape. Corresponds to ECMA-376 ST_ShapeType 'decagon'",
-            "Diagonal stripe shape. Corresponds to ECMA-376 ST_ShapeType 'diagStripe'",
-            "Diamond shape. Corresponds to ECMA-376 ST_ShapeType 'diamond'",
-            "Dodecagon shape. Corresponds to ECMA-376 ST_ShapeType 'dodecagon'",
-            "Donut shape. Corresponds to ECMA-376 ST_ShapeType 'donut'",
-            "Double wave shape. Corresponds to ECMA-376 ST_ShapeType 'doubleWave'",
-            "Down arrow shape. Corresponds to ECMA-376 ST_ShapeType 'downArrow'",
-            "Callout down arrow shape. Corresponds to ECMA-376 ST_ShapeType\n'downArrowCallout'",
-            "Folded corner shape. Corresponds to ECMA-376 ST_ShapeType 'foldedCorner'",
-            "Frame shape. Corresponds to ECMA-376 ST_ShapeType 'frame'",
-            "Half frame shape. Corresponds to ECMA-376 ST_ShapeType 'halfFrame'",
-            "Heart shape. Corresponds to ECMA-376 ST_ShapeType 'heart'",
-            "Heptagon shape. Corresponds to ECMA-376 ST_ShapeType 'heptagon'",
-            "Hexagon shape. Corresponds to ECMA-376 ST_ShapeType 'hexagon'",
-            "Home plate shape. Corresponds to ECMA-376 ST_ShapeType 'homePlate'",
-            "Horizontal scroll shape. Corresponds to ECMA-376 ST_ShapeType\n'horizontalScroll'",
-            "Irregular seal 1 shape. Corresponds to ECMA-376 ST_ShapeType\n'irregularSeal1'",
-            "Irregular seal 2 shape. Corresponds to ECMA-376 ST_ShapeType\n'irregularSeal2'",
-            "Left arrow shape. Corresponds to ECMA-376 ST_ShapeType 'leftArrow'",
-            "Callout left arrow shape. Corresponds to ECMA-376 ST_ShapeType\n'leftArrowCallout'",
-            "Left brace shape. Corresponds to ECMA-376 ST_ShapeType 'leftBrace'",
-            "Left bracket shape. Corresponds to ECMA-376 ST_ShapeType 'leftBracket'",
-            "Left right arrow shape. Corresponds to ECMA-376 ST_ShapeType\n'leftRightArrow'",
-            "Callout left right arrow shape. Corresponds to ECMA-376 ST_ShapeType\n'leftRightArrowCallout'",
-            "Left right up arrow shape. Corresponds to ECMA-376 ST_ShapeType\n'leftRightUpArrow'",
-            "Left up arrow shape. Corresponds to ECMA-376 ST_ShapeType 'leftUpArrow'",
-            "Lightning bolt shape. Corresponds to ECMA-376 ST_ShapeType\n'lightningBolt'",
-            "Divide math shape. Corresponds to ECMA-376 ST_ShapeType 'mathDivide'",
-            "Equal math shape. Corresponds to ECMA-376 ST_ShapeType 'mathEqual'",
-            "Minus math shape. Corresponds to ECMA-376 ST_ShapeType 'mathMinus'",
-            "Multiply math shape. Corresponds to ECMA-376 ST_ShapeType 'mathMultiply'",
-            "Not equal math shape. Corresponds to ECMA-376 ST_ShapeType 'mathNotEqual'",
-            "Plus math shape. Corresponds to ECMA-376 ST_ShapeType 'mathPlus'",
-            "Moon shape. Corresponds to ECMA-376 ST_ShapeType 'moon'",
-            "No smoking shape. Corresponds to ECMA-376 ST_ShapeType 'noSmoking'",
-            "Notched right arrow shape. Corresponds to ECMA-376 ST_ShapeType\n'notchedRightArrow'",
-            "Octagon shape. Corresponds to ECMA-376 ST_ShapeType 'octagon'",
-            "Parallelogram shape. Corresponds to ECMA-376 ST_ShapeType 'parallelogram'",
-            "Pentagon shape. Corresponds to ECMA-376 ST_ShapeType 'pentagon'",
-            "Pie shape. Corresponds to ECMA-376 ST_ShapeType 'pie'",
-            "Plaque shape. Corresponds to ECMA-376 ST_ShapeType 'plaque'",
-            "Plus shape. Corresponds to ECMA-376 ST_ShapeType 'plus'",
-            "Quad-arrow shape. Corresponds to ECMA-376 ST_ShapeType 'quadArrow'",
-            "Callout quad-arrow shape. Corresponds to ECMA-376 ST_ShapeType\n'quadArrowCallout'",
-            "Ribbon shape. Corresponds to ECMA-376 ST_ShapeType 'ribbon'",
-            "Ribbon 2 shape. Corresponds to ECMA-376 ST_ShapeType 'ribbon2'",
-            "Right arrow shape. Corresponds to ECMA-376 ST_ShapeType 'rightArrow'",
-            "Callout right arrow shape. Corresponds to ECMA-376 ST_ShapeType\n'rightArrowCallout'",
-            "Right brace shape. Corresponds to ECMA-376 ST_ShapeType 'rightBrace'",
-            "Right bracket shape. Corresponds to ECMA-376 ST_ShapeType 'rightBracket'",
-            "One round corner rectangle shape. Corresponds to ECMA-376 ST_ShapeType\n'round1Rect'",
-            "Two diagonal round corner rectangle shape. Corresponds to ECMA-376\nST_ShapeType 'round2DiagRect'",
-            "Two same-side round corner rectangle shape. Corresponds to ECMA-376\nST_ShapeType 'round2SameRect'",
-            "Right triangle shape. Corresponds to ECMA-376 ST_ShapeType 'rtTriangle'",
-            "Smiley face shape. Corresponds to ECMA-376 ST_ShapeType 'smileyFace'",
-            "One snip corner rectangle shape. Corresponds to ECMA-376 ST_ShapeType\n'snip1Rect'",
-            "Two diagonal snip corner rectangle shape. Corresponds to ECMA-376\nST_ShapeType 'snip2DiagRect'",
-            "Two same-side snip corner rectangle shape. Corresponds to ECMA-376\nST_ShapeType 'snip2SameRect'",
-            "One snip one round corner rectangle shape. Corresponds to ECMA-376\nST_ShapeType 'snipRoundRect'",
-            "Ten pointed star shape. Corresponds to ECMA-376 ST_ShapeType 'star10'",
-            "Twelve pointed star shape. Corresponds to ECMA-376 ST_ShapeType 'star12'",
-            "Sixteen pointed star shape. Corresponds to ECMA-376 ST_ShapeType 'star16'",
-            "Twenty four pointed star shape. Corresponds to ECMA-376 ST_ShapeType\n'star24'",
-            "Thirty two pointed star shape. Corresponds to ECMA-376 ST_ShapeType\n'star32'",
-            "Four pointed star shape. Corresponds to ECMA-376 ST_ShapeType 'star4'",
-            "Five pointed star shape. Corresponds to ECMA-376 ST_ShapeType 'star5'",
-            "Six pointed star shape. Corresponds to ECMA-376 ST_ShapeType 'star6'",
-            "Seven pointed star shape. Corresponds to ECMA-376 ST_ShapeType 'star7'",
-            "Eight pointed star shape. Corresponds to ECMA-376 ST_ShapeType 'star8'",
-            "Striped right arrow shape. Corresponds to ECMA-376 ST_ShapeType\n'stripedRightArrow'",
-            "Sun shape. Corresponds to ECMA-376 ST_ShapeType 'sun'",
-            "Trapezoid shape. Corresponds to ECMA-376 ST_ShapeType 'trapezoid'",
-            "Triangle shape. Corresponds to ECMA-376 ST_ShapeType 'triangle'",
-            "Up arrow shape. Corresponds to ECMA-376 ST_ShapeType 'upArrow'",
-            "Callout up arrow shape. Corresponds to ECMA-376 ST_ShapeType\n'upArrowCallout'",
-            "Up down arrow shape. Corresponds to ECMA-376 ST_ShapeType 'upDownArrow'",
-            "U-turn arrow shape. Corresponds to ECMA-376 ST_ShapeType 'uturnArrow'",
-            "Vertical scroll shape. Corresponds to ECMA-376 ST_ShapeType\n'verticalScroll'",
-            "Wave shape. Corresponds to ECMA-376 ST_ShapeType 'wave'",
-            "Callout wedge ellipse shape. Corresponds to ECMA-376 ST_ShapeType\n'wedgeEllipseCallout'",
-            "Callout wedge rectangle shape. Corresponds to ECMA-376 ST_ShapeType\n'wedgeRectCallout'",
-            "Callout wedge round rectangle shape. Corresponds to ECMA-376 ST_ShapeType\n'wedgeRoundRectCallout'",
-            "Alternate process flow shape. Corresponds to ECMA-376 ST_ShapeType\n'flowChartAlternateProcess'",
-            "Collate flow shape. Corresponds to ECMA-376 ST_ShapeType\n'flowChartCollate'",
-            "Connector flow shape. Corresponds to ECMA-376 ST_ShapeType\n'flowChartConnector'",
-            "Decision flow shape. Corresponds to ECMA-376 ST_ShapeType\n'flowChartDecision'",
-            "Delay flow shape. Corresponds to ECMA-376 ST_ShapeType 'flowChartDelay'",
-            "Display flow shape. Corresponds to ECMA-376 ST_ShapeType\n'flowChartDisplay'",
-            "Document flow shape. Corresponds to ECMA-376 ST_ShapeType\n'flowChartDocument'",
-            "Extract flow shape. Corresponds to ECMA-376 ST_ShapeType\n'flowChartExtract'",
-            "Input output flow shape. Corresponds to ECMA-376 ST_ShapeType\n'flowChartInputOutput'",
-            "Internal storage flow shape. Corresponds to ECMA-376 ST_ShapeType\n'flowChartInternalStorage'",
-            "Magnetic disk flow shape. Corresponds to ECMA-376 ST_ShapeType\n'flowChartMagneticDisk'",
-            "Magnetic drum flow shape. Corresponds to ECMA-376 ST_ShapeType\n'flowChartMagneticDrum'",
-            "Magnetic tape flow shape. Corresponds to ECMA-376 ST_ShapeType\n'flowChartMagneticTape'",
-            "Manual input flow shape. Corresponds to ECMA-376 ST_ShapeType\n'flowChartManualInput'",
-            "Manual operation flow shape. Corresponds to ECMA-376 ST_ShapeType\n'flowChartManualOperation'",
-            "Merge flow shape. Corresponds to ECMA-376 ST_ShapeType 'flowChartMerge'",
-            "Multi-document flow shape. Corresponds to ECMA-376 ST_ShapeType\n'flowChartMultidocument'",
-            "Offline storage flow shape. Corresponds to ECMA-376 ST_ShapeType\n'flowChartOfflineStorage'",
-            "Off-page connector flow shape. Corresponds to ECMA-376 ST_ShapeType\n'flowChartOffpageConnector'",
-            "Online storage flow shape. Corresponds to ECMA-376 ST_ShapeType\n'flowChartOnlineStorage'",
-            "Or flow shape. Corresponds to ECMA-376 ST_ShapeType 'flowChartOr'",
-            "Predefined process flow shape. Corresponds to ECMA-376 ST_ShapeType\n'flowChartPredefinedProcess'",
-            "Preparation flow shape. Corresponds to ECMA-376 ST_ShapeType\n'flowChartPreparation'",
-            "Process flow shape. Corresponds to ECMA-376 ST_ShapeType\n'flowChartProcess'",
-            "Punched card flow shape. Corresponds to ECMA-376 ST_ShapeType\n'flowChartPunchedCard'",
-            "Punched tape flow shape. Corresponds to ECMA-376 ST_ShapeType\n'flowChartPunchedTape'",
-            "Sort flow shape. Corresponds to ECMA-376 ST_ShapeType 'flowChartSort'",
-            "Summing junction flow shape. Corresponds to ECMA-376 ST_ShapeType\n'flowChartSummingJunction'",
-            "Terminator flow shape. Corresponds to ECMA-376 ST_ShapeType\n'flowChartTerminator'",
-            "East arrow shape.",
-            "Northeast arrow shape.",
-            "North arrow shape.",
-            "Speech shape.",
-            "Star burst shape.",
-            "Teardrop shape. Corresponds to ECMA-376 ST_ShapeType 'teardrop'",
-            "Ellipse ribbon shape. Corresponds to ECMA-376 ST_ShapeType\n'ellipseRibbon'",
-            "Ellipse ribbon 2 shape. Corresponds to ECMA-376 ST_ShapeType\n'ellipseRibbon2'",
-            "Callout cloud shape. Corresponds to ECMA-376 ST_ShapeType 'cloudCallout'",
-            "Custom shape."
-          ]
+          "type": "string"
         },
         "elementProperties": {
-          "$ref": "PageElementProperties",
-          "description": "The element properties for the shape."
+          "description": "The element properties for the shape.",
+          "$ref": "PageElementProperties"
         }
-      },
-      "id": "CreateShapeRequest"
+      }
     },
     "Video": {
       "description": "A PageElement kind representing a\nvideo.",
       "type": "object",
       "properties": {
+        "videoProperties": {
+          "$ref": "VideoProperties",
+          "description": "The properties of the video."
+        },
         "source": {
-          "type": "string",
           "enumDescriptions": [
             "The video source is unspecified.",
             "The video source is YouTube."
@@ -3252,53 +3181,42 @@
             "SOURCE_UNSPECIFIED",
             "YOUTUBE"
           ],
-          "description": "The video source."
+          "description": "The video source.",
+          "type": "string"
         },
         "url": {
-          "type": "string",
-          "description": "An URL to a video. The URL is valid as long as the source video\nexists and sharing settings do not change."
+          "description": "An URL to a video. The URL is valid as long as the source video\nexists and sharing settings do not change.",
+          "type": "string"
         },
         "id": {
           "description": "The video source's unique identifier for this video.",
           "type": "string"
-        },
-        "videoProperties": {
-          "$ref": "VideoProperties",
-          "description": "The properties of the video."
         }
       },
       "id": "Video"
     },
     "PageProperties": {
-      "id": "PageProperties",
       "description": "The properties of the Page.\n\nThe page will inherit properties from the parent page. Depending on the page\ntype the hierarchy is defined in either\nSlideProperties or\nLayoutProperties.",
       "type": "object",
       "properties": {
         "colorScheme": {
-          "description": "The color scheme of the page. If unset, the color scheme is inherited from\na parent page. If the page has no parent, the color scheme uses a default\nSlides color scheme. This field is read-only.",
-          "$ref": "ColorScheme"
+          "$ref": "ColorScheme",
+          "description": "The color scheme of the page. If unset, the color scheme is inherited from\na parent page. If the page has no parent, the color scheme uses a default\nSlides color scheme. This field is read-only."
         },
         "pageBackgroundFill": {
-          "$ref": "PageBackgroundFill",
-          "description": "The background fill of the page. If unset, the background fill is inherited\nfrom a parent page if it exists. If the page has no parent, then the\nbackground fill defaults to the corresponding fill in the Slides editor."
+          "description": "The background fill of the page. If unset, the background fill is inherited\nfrom a parent page if it exists. If the page has no parent, then the\nbackground fill defaults to the corresponding fill in the Slides editor.",
+          "$ref": "PageBackgroundFill"
         }
-      }
+      },
+      "id": "PageProperties"
     },
     "TableCell": {
       "description": "Properties and contents of each table cell.",
       "type": "object",
       "properties": {
-        "text": {
-          "description": "The text content of the cell.",
-          "$ref": "TextContent"
-        },
-        "tableCellProperties": {
-          "description": "The properties of the table cell.",
-          "$ref": "TableCellProperties"
-        },
         "location": {
-          "description": "The location of the cell within the table.",
-          "$ref": "TableCellLocation"
+          "$ref": "TableCellLocation",
+          "description": "The location of the cell within the table."
         },
         "rowSpan": {
           "description": "Row span of the cell.",
@@ -3309,28 +3227,33 @@
           "description": "Column span of the cell.",
           "format": "int32",
           "type": "integer"
+        },
+        "text": {
+          "$ref": "TextContent",
+          "description": "The text content of the cell."
+        },
+        "tableCellProperties": {
+          "$ref": "TableCellProperties",
+          "description": "The properties of the table cell."
         }
       },
       "id": "TableCell"
     },
     "NestingLevel": {
-      "description": "Contains properties describing the look and feel of a list bullet at a given\nlevel of nesting.",
-      "type": "object",
       "properties": {
         "bulletStyle": {
           "$ref": "TextStyle",
           "description": "The style of a bullet at this level of nesting."
         }
       },
-      "id": "NestingLevel"
+      "id": "NestingLevel",
+      "description": "Contains properties describing the look and feel of a list bullet at a given\nlevel of nesting.",
+      "type": "object"
     },
     "UpdateLinePropertiesRequest": {
+      "description": "Updates the properties of a Line.",
       "type": "object",
       "properties": {
-        "objectId": {
-          "description": "The object ID of the line the update is applied to.",
-          "type": "string"
-        },
         "lineProperties": {
           "$ref": "LineProperties",
           "description": "The line properties to update."
@@ -3339,64 +3262,60 @@
           "description": "The fields that should be updated.\n\nAt least one field must be specified. The root `lineProperties` is\nimplied and should not be specified. A single `\"*\"` can be used as\nshort-hand for listing every field.\n\nFor example to update the line solid fill color, set `fields` to\n`\"lineFill.solidFill.color\"`.\n\nTo reset a property to its default value, include its field name in the\nfield mask but leave the field itself unset.",
           "format": "google-fieldmask",
           "type": "string"
-        }
-      },
-      "id": "UpdateLinePropertiesRequest",
-      "description": "Updates the properties of a Line."
-    },
-    "UpdateSlidesPositionRequest": {
-      "description": "Updates the position of slides in the presentation.",
-      "type": "object",
-      "properties": {
-        "slideObjectIds": {
-          "description": "The IDs of the slides in the presentation that should be moved.\nThe slides in this list must be in existing presentation order, without\nduplicates.",
-          "type": "array",
-          "items": {
-            "type": "string"
-          }
         },
-        "insertionIndex": {
-          "description": "The index where the slides should be inserted, based on the slide\narrangement before the move takes place. Must be between zero and the\nnumber of slides in the presentation, inclusive.",
-          "format": "int32",
-          "type": "integer"
+        "objectId": {
+          "description": "The object ID of the line the update is applied to.",
+          "type": "string"
         }
       },
-      "id": "UpdateSlidesPositionRequest"
+      "id": "UpdateLinePropertiesRequest"
     },
     "TableCellBackgroundFill": {
-      "description": "The table cell background fill.",
       "type": "object",
       "properties": {
         "propertyState": {
-          "enum": [
-            "RENDERED",
-            "NOT_RENDERED",
-            "INHERIT"
-          ],
-          "description": "The background fill property state.\n\nUpdating the the fill on a table cell will implicitly update this field\nto `RENDERED`, unless another value is specified in the same request. To\nhave no fill on a table cell, set this field to `NOT_RENDERED`. In this\ncase, any other fill fields set in the same request will be ignored.",
           "type": "string",
           "enumDescriptions": [
             "If a property's state is RENDERED, then the element has the corresponding\nproperty when rendered on a page. If the element is a placeholder shape as\ndetermined by the placeholder\nfield, and it inherits from a placeholder shape, the corresponding field\nmay be unset, meaning that the property value is inherited from a parent\nplaceholder. If the element does not inherit, then the field will contain\nthe rendered value. This is the default value.",
             "If a property's state is NOT_RENDERED, then the element does not have the\ncorresponding property when rendered on a page. However, the field may\nstill be set so it can be inherited by child shapes. To remove a property\nfrom a rendered element, set its property_state to NOT_RENDERED.",
             "If a property's state is INHERIT, then the property state uses the value of\ncorresponding `property_state` field on the parent shape. Elements that do\nnot inherit will never have an INHERIT property state."
-          ]
+          ],
+          "enum": [
+            "RENDERED",
+            "NOT_RENDERED",
+            "INHERIT"
+          ],
+          "description": "The background fill property state.\n\nUpdating the the fill on a table cell will implicitly update this field\nto `RENDERED`, unless another value is specified in the same request. To\nhave no fill on a table cell, set this field to `NOT_RENDERED`. In this\ncase, any other fill fields set in the same request will be ignored."
         },
         "solidFill": {
           "$ref": "SolidFill",
           "description": "Solid color fill."
         }
       },
-      "id": "TableCellBackgroundFill"
+      "id": "TableCellBackgroundFill",
+      "description": "The table cell background fill."
+    },
+    "UpdateSlidesPositionRequest": {
+      "properties": {
+        "insertionIndex": {
+          "description": "The index where the slides should be inserted, based on the slide\narrangement before the move takes place. Must be between zero and the\nnumber of slides in the presentation, inclusive.",
+          "format": "int32",
+          "type": "integer"
+        },
+        "slideObjectIds": {
+          "description": "The IDs of the slides in the presentation that should be moved.\nThe slides in this list must be in existing presentation order, without\nduplicates.",
+          "type": "array",
+          "items": {
+            "type": "string"
+          }
+        }
+      },
+      "id": "UpdateSlidesPositionRequest",
+      "description": "Updates the position of slides in the presentation.",
+      "type": "object"
     },
     "UpdatePagePropertiesRequest": {
-      "description": "Updates the properties of a Page.",
-      "type": "object",
       "properties": {
-        "fields": {
-          "type": "string",
-          "description": "The fields that should be updated.\n\nAt least one field must be specified. The root `pageProperties` is\nimplied and should not be specified. A single `\"*\"` can be used as\nshort-hand for listing every field.\n\nFor example to update the page background solid fill color, set `fields`\nto `\"pageBackgroundFill.solidFill.color\"`.\n\nTo reset a property to its default value, include its field name in the\nfield mask but leave the field itself unset.",
-          "format": "google-fieldmask"
-        },
         "objectId": {
           "description": "The object ID of the page the update is applied to.",
           "type": "string"
@@ -3404,11 +3323,19 @@
         "pageProperties": {
           "$ref": "PageProperties",
           "description": "The page properties to update."
+        },
+        "fields": {
+          "description": "The fields that should be updated.\n\nAt least one field must be specified. The root `pageProperties` is\nimplied and should not be specified. A single `\"*\"` can be used as\nshort-hand for listing every field.\n\nFor example to update the page background solid fill color, set `fields`\nto `\"pageBackgroundFill.solidFill.color\"`.\n\nTo reset a property to its default value, include its field name in the\nfield mask but leave the field itself unset.",
+          "format": "google-fieldmask",
+          "type": "string"
         }
       },
-      "id": "UpdatePagePropertiesRequest"
+      "id": "UpdatePagePropertiesRequest",
+      "description": "Updates the properties of a Page.",
+      "type": "object"
     },
     "Group": {
+      "description": "A PageElement kind representing a\njoined collection of PageElements.",
       "type": "object",
       "properties": {
         "children": {
@@ -3419,38 +3346,18 @@
           }
         }
       },
-      "id": "Group",
-      "description": "A PageElement kind representing a\njoined collection of PageElements."
+      "id": "Group"
     },
     "Placeholder": {
       "description": "The placeholder information that uniquely identifies a placeholder shape.",
       "type": "object",
       "properties": {
         "index": {
-          "description": "The index of the placeholder. If the same placeholder types are the present\nin the same page, they would have different index values.",
+          "description": "The index of the placeholder. If the same placeholder types are present in\nthe same page, they would have different index values.",
           "format": "int32",
           "type": "integer"
         },
         "type": {
-          "enumDescriptions": [
-            "Default value, signifies it is not a placeholder.",
-            "Body text.",
-            "Chart or graph.",
-            "Clip art image.",
-            "Title centered.",
-            "Diagram.",
-            "Date and time.",
-            "Footer text.",
-            "Header text.",
-            "Multimedia.",
-            "Any content type.",
-            "Picture.",
-            "Number of a slide.",
-            "Subtitle.",
-            "Table.",
-            "Slide title.",
-            "Slide image."
-          ],
           "enum": [
             "NONE",
             "BODY",
@@ -3471,7 +3378,26 @@
             "SLIDE_IMAGE"
           ],
           "description": "The type of the placeholder.",
-          "type": "string"
+          "type": "string",
+          "enumDescriptions": [
+            "Default value, signifies it is not a placeholder.",
+            "Body text.",
+            "Chart or graph.",
+            "Clip art image.",
+            "Title centered.",
+            "Diagram.",
+            "Date and time.",
+            "Footer text.",
+            "Header text.",
+            "Multimedia.",
+            "Any content type.",
+            "Picture.",
+            "Number of a slide.",
+            "Subtitle.",
+            "Table.",
+            "Slide title.",
+            "Slide image."
+          ]
         },
         "parentObjectId": {
           "description": "The object ID of this shape's parent placeholder.\nIf unset, the parent placeholder shape does not exist, so the shape does\nnot inherit properties from any other shape.",
@@ -3484,16 +3410,16 @@
       "description": "Duplicates a slide or page element.\n\nWhen duplicating a slide, the duplicate slide will be created immediately\nfollowing the specified slide. When duplicating a page element, the duplicate\nwill be placed on the same page at the same position as the original.",
       "type": "object",
       "properties": {
-        "objectId": {
-          "description": "The ID of the object to duplicate.",
-          "type": "string"
-        },
         "objectIds": {
           "additionalProperties": {
             "type": "string"
           },
           "description": "The object being duplicated may contain other objects, for example when\nduplicating a slide or a group page element. This map defines how the IDs\nof duplicated objects are generated: the keys are the IDs of the original\nobjects and its values are the IDs that will be assigned to the\ncorresponding duplicate object. The ID of the source object's duplicate\nmay be specified in this map as well, using the same value of the\n`object_id` field as a key and the newly desired ID as the value.\n\nAll keys must correspond to existing IDs in the presentation. All values\nmust be unique in the presentation and must start with an alphanumeric\ncharacter or an underscore (matches regex `[a-zA-Z0-9_]`); remaining\ncharacters may include those as well as a hyphen or colon (matches regex\n`[a-zA-Z0-9_-:]`). The length of the new ID must not be less than 5 or\ngreater than 50.\n\nIf any IDs of source objects are omitted from the map, a new random ID will\nbe assigned. If the map is empty or unset, all duplicate objects will\nreceive a new random ID.",
           "type": "object"
+        },
+        "objectId": {
+          "description": "The ID of the object to duplicate.",
+          "type": "string"
         }
       },
       "id": "DuplicateObjectRequest"
@@ -3503,8 +3429,8 @@
       "type": "object",
       "properties": {
         "replaceText": {
-          "type": "string",
-          "description": "The text that will replace the matched text."
+          "description": "The text that will replace the matched text.",
+          "type": "string"
         },
         "containsText": {
           "$ref": "SubstringMatchCriteria",
@@ -3514,39 +3440,12 @@
       "id": "ReplaceAllTextRequest"
     },
     "Page": {
-      "description": "A page in a presentation.",
       "type": "object",
       "properties": {
-        "objectId": {
-          "description": "The object ID for this page. Object IDs used by\nPage and\nPageElement share the same namespace.",
-          "type": "string"
-        },
-        "revisionId": {
-          "description": "The revision ID of the presentation containing this page. Can be used in\nupdate requests to assert that the presentation revision hasn't changed\nsince the last read operation. Only populated if the user has edit access\nto the presentation.\n\nThe format of the revision ID may change over time, so it should be treated\nopaquely. A returned revision ID is only guaranteed to be valid for 24\nhours after it has been returned and cannot be shared across\nusers. Callers can assume that if two revision IDs are equal then the\npresentation has not changed.",
-          "type": "string"
-        },
         "layoutProperties": {
           "$ref": "LayoutProperties",
           "description": "Layout specific properties. Only set if page_type = LAYOUT."
         },
-        "pageType": {
-          "description": "The type of the page.",
-          "type": "string",
-          "enumDescriptions": [
-            "A slide page.",
-            "A master slide page.",
-            "A layout page.",
-            "A notes page.",
-            "A notes master page."
-          ],
-          "enum": [
-            "SLIDE",
-            "MASTER",
-            "LAYOUT",
-            "NOTES",
-            "NOTES_MASTER"
-          ]
-        },
         "pageElements": {
           "description": "The page elements rendered on the page.",
           "type": "array",
@@ -3558,25 +3457,48 @@
           "$ref": "NotesProperties",
           "description": "Notes specific properties. Only set if page_type = NOTES."
         },
+        "pageType": {
+          "enum": [
+            "SLIDE",
+            "MASTER",
+            "LAYOUT",
+            "NOTES",
+            "NOTES_MASTER"
+          ],
+          "description": "The type of the page.",
+          "type": "string",
+          "enumDescriptions": [
+            "A slide page.",
+            "A master slide page.",
+            "A layout page.",
+            "A notes page.",
+            "A notes master page."
+          ]
+        },
         "slideProperties": {
-          "$ref": "SlideProperties",
-          "description": "Slide specific properties. Only set if page_type = SLIDE."
+          "description": "Slide specific properties. Only set if page_type = SLIDE.",
+          "$ref": "SlideProperties"
         },
         "pageProperties": {
-          "$ref": "PageProperties",
-          "description": "The properties of the page."
+          "description": "The properties of the page.",
+          "$ref": "PageProperties"
+        },
+        "objectId": {
+          "description": "The object ID for this page. Object IDs used by\nPage and\nPageElement share the same namespace.",
+          "type": "string"
+        },
+        "revisionId": {
+          "type": "string",
+          "description": "The revision ID of the presentation containing this page. Can be used in\nupdate requests to assert that the presentation revision hasn't changed\nsince the last read operation. Only populated if the user has edit access\nto the presentation.\n\nThe format of the revision ID may change over time, so it should be treated\nopaquely. A returned revision ID is only guaranteed to be valid for 24\nhours after it has been returned and cannot be shared across users. If the\nrevision ID is unchanged between calls, then the presentation has not\nchanged. Conversely, a changed ID (for the same presentation and user)\nusually means the presentation has been updated; however, a changed ID can\nalso be due to internal factors such as ID format changes."
         }
       },
-      "id": "Page"
+      "id": "Page",
+      "description": "A page in a presentation."
     },
     "ShapeBackgroundFill": {
       "description": "The shape background fill.",
       "type": "object",
       "properties": {
-        "solidFill": {
-          "$ref": "SolidFill",
-          "description": "Solid color fill."
-        },
         "propertyState": {
           "enumDescriptions": [
             "If a property's state is RENDERED, then the element has the corresponding\nproperty when rendered on a page. If the element is a placeholder shape as\ndetermined by the placeholder\nfield, and it inherits from a placeholder shape, the corresponding field\nmay be unset, meaning that the property value is inherited from a parent\nplaceholder. If the element does not inherit, then the field will contain\nthe rendered value. This is the default value.",
@@ -3590,6 +3512,10 @@
           ],
           "description": "The background fill property state.\n\nUpdating the the fill on a shape will implicitly update this field to\n`RENDERED`, unless another value is specified in the same request. To\nhave no fill on a shape, set this field to `NOT_RENDERED`. In this case,\nany other fill fields set in the same request will be ignored.",
           "type": "string"
+        },
+        "solidFill": {
+          "$ref": "SolidFill",
+          "description": "Solid color fill."
         }
       },
       "id": "ShapeBackgroundFill"
@@ -3598,11 +3524,16 @@
       "description": "The crop properties of an object enclosed in a container. For example, an\nImage.\n\nThe crop properties is represented by the offsets of four edges which define\na crop rectangle. The offsets are measured in percentage from the\ncorresponding edges of the object's original bounding rectangle towards\ninside, relative to the object's original dimensions.\n\n- If the offset is in the interval (0, 1), the corresponding edge of crop\nrectangle is positioned inside of the object's original bounding rectangle.\n- If the offset is negative or greater than 1, the corresponding edge of crop\nrectangle is positioned outside of the object's original bounding rectangle.\n- If the left edge of the crop rectangle is on the right side of its right\nedge, the object will be flipped horizontally.\n- If the top edge of the crop rectangle is below its bottom edge, the object\nwill be flipped vertically.\n- If all offsets and rotation angle is 0, the object is not cropped.\n\nAfter cropping, the content in the crop rectangle will be stretched to fit\nits container.",
       "type": "object",
       "properties": {
-        "topOffset": {
+        "angle": {
           "type": "number",
-          "description": "The offset specifies the top edge of the crop rectangle that is located\nbelow the original bounding rectangle top edge, relative to the object's\noriginal height.",
+          "description": "The rotation angle of the crop window around its center, in radians.\nRotation angle is applied after the offset.",
           "format": "float"
         },
+        "topOffset": {
+          "description": "The offset specifies the top edge of the crop rectangle that is located\nbelow the original bounding rectangle top edge, relative to the object's\noriginal height.",
+          "format": "float",
+          "type": "number"
+        },
         "leftOffset": {
           "description": "The offset specifies the left edge of the crop rectangle that is located to\nthe right of the original bounding rectangle left edge, relative to the\nobject's original width.",
           "format": "float",
@@ -3617,19 +3548,24 @@
           "description": "The offset specifies the bottom edge of the crop rectangle that is located\nabove the original bounding rectangle bottom edge, relative to the object's\noriginal height.",
           "format": "float",
           "type": "number"
-        },
-        "angle": {
-          "type": "number",
-          "description": "The rotation angle of the crop window around its center, in radians.\nRotation angle is applied after the offset.",
-          "format": "float"
         }
       },
       "id": "CropProperties"
     },
     "ReplaceAllShapesWithSheetsChartRequest": {
+      "id": "ReplaceAllShapesWithSheetsChartRequest",
       "description": "Replaces all shapes that match the given criteria with the provided Google\nSheets chart. The chart will be scaled and centered to fit within the bounds\nof the original shape.\n\nNOTE: Replacing shapes with a chart requires at least one of the\nspreadsheets.readonly, spreadsheets, drive.readonly, or drive OAuth scopes.",
       "type": "object",
       "properties": {
+        "containsText": {
+          "$ref": "SubstringMatchCriteria",
+          "description": "The criteria that the shapes must match in order to be replaced. The\nrequest will replace all of the shapes that contain the given text."
+        },
+        "chartId": {
+          "description": "The ID of the specific chart in the Google Sheets spreadsheet.",
+          "format": "int32",
+          "type": "integer"
+        },
         "spreadsheetId": {
           "description": "The ID of the Google Sheets spreadsheet that contains the chart.",
           "type": "string"
@@ -3645,39 +3581,8 @@
           ],
           "description": "The mode with which the chart is linked to the source spreadsheet. When\nnot specified, the chart will be an image that is not linked.",
           "type": "string"
-        },
-        "containsText": {
-          "$ref": "SubstringMatchCriteria",
-          "description": "The criteria that the shapes must match in order to be replaced. The\nrequest will replace all of the shapes that contain the given text."
-        },
-        "chartId": {
-          "description": "The ID of the specific chart in the Google Sheets spreadsheet.",
-          "format": "int32",
-          "type": "integer"
         }
-      },
-      "id": "ReplaceAllShapesWithSheetsChartRequest"
-    },
-    "ColorStop": {
-      "description": "A color and position in a gradient band.",
-      "type": "object",
-      "properties": {
-        "alpha": {
-          "description": "The alpha value of this color in the gradient band. Defaults to 1.0,\nfully opaque.",
-          "format": "float",
-          "type": "number"
-        },
-        "position": {
-          "description": "The relative position of the color stop in the gradient band measured\nin percentage. The value should be in the interval [0.0, 1.0].",
-          "format": "float",
-          "type": "number"
-        },
-        "color": {
-          "$ref": "OpaqueColor",
-          "description": "The color of the gradient stop."
-        }
-      },
-      "id": "ColorStop"
+      }
     },
     "Range": {
       "description": "Specifies a contiguous range of an indexed collection, such as characters in\ntext.",
@@ -3694,7 +3599,6 @@
           "type": "integer"
         },
         "type": {
-          "description": "The type of range.",
           "type": "string",
           "enumDescriptions": [
             "Unspecified range type. This value must not be used.",
@@ -3707,12 +3611,35 @@
             "FIXED_RANGE",
             "FROM_START_INDEX",
             "ALL"
-          ]
+          ],
+          "description": "The type of range."
         }
       },
       "id": "Range"
     },
+    "ColorStop": {
+      "type": "object",
+      "properties": {
+        "alpha": {
+          "type": "number",
+          "description": "The alpha value of this color in the gradient band. Defaults to 1.0,\nfully opaque.",
+          "format": "float"
+        },
+        "position": {
+          "description": "The relative position of the color stop in the gradient band measured\nin percentage. The value should be in the interval [0.0, 1.0].",
+          "format": "float",
+          "type": "number"
+        },
+        "color": {
+          "$ref": "OpaqueColor",
+          "description": "The color of the gradient stop."
+        }
+      },
+      "id": "ColorStop",
+      "description": "A color and position in a gradient band."
+    },
     "CreateVideoRequest": {
+      "description": "Creates a video.",
       "type": "object",
       "properties": {
         "objectId": {
@@ -3720,6 +3647,8 @@
           "type": "string"
         },
         "source": {
+          "description": "The video source.",
+          "type": "string",
           "enumDescriptions": [
             "The video source is unspecified.",
             "The video source is YouTube."
@@ -3727,21 +3656,18 @@
           "enum": [
             "SOURCE_UNSPECIFIED",
             "YOUTUBE"
-          ],
-          "description": "The video source.",
-          "type": "string"
+          ]
         },
         "elementProperties": {
           "description": "The element properties for the video.",
           "$ref": "PageElementProperties"
         },
         "id": {
-          "type": "string",
-          "description": "The video source's unique identifier for this video.\n\ne.g. For YouTube video https://www.youtube.com/watch?v=7U3axjORYZ0,\nthe ID is 7U3axjORYZ0."
+          "description": "The video source's unique identifier for this video.\n\ne.g. For YouTube video https://www.youtube.com/watch?v=7U3axjORYZ0,\nthe ID is 7U3axjORYZ0.",
+          "type": "string"
         }
       },
-      "id": "CreateVideoRequest",
-      "description": "Creates a video."
+      "id": "CreateVideoRequest"
     },
     "DuplicateObjectResponse": {
       "description": "The response of duplicating an object.",
@@ -3755,12 +3681,16 @@
       "id": "DuplicateObjectResponse"
     },
     "ReplaceAllShapesWithImageRequest": {
+      "description": "Replaces all shapes that match the given criteria with the provided image.",
+      "type": "object",
       "properties": {
         "imageUrl": {
           "description": "The image URL.\n\nThe image is fetched once at insertion time and a copy is stored for\ndisplay inside the presentation. Images must be less than 50MB in size,\ncannot exceed 25 megapixels, and must be in either in PNG, JPEG, or GIF\nformat.",
           "type": "string"
         },
         "replaceMethod": {
+          "description": "The replace method.",
+          "type": "string",
           "enumDescriptions": [
             "Scales and centers the image to fit within the bounds of the original\nshape and maintains the image's aspect ratio. The rendered size of the\nimage may be smaller than the size of the shape. This is the default\nmethod when one is not specified.",
             "Scales and centers the image to fill the bounds of the original shape.\nThe image may be cropped in order to fill the shape. The rendered size of\nthe image will be the same as that of the original shape."
@@ -3768,49 +3698,191 @@
           "enum": [
             "CENTER_INSIDE",
             "CENTER_CROP"
-          ],
-          "description": "The replace method.",
-          "type": "string"
+          ]
         },
         "containsText": {
-          "$ref": "SubstringMatchCriteria",
-          "description": "If set, this request will replace all of the shapes that contain the\ngiven text."
+          "description": "If set, this request will replace all of the shapes that contain the\ngiven text.",
+          "$ref": "SubstringMatchCriteria"
         }
       },
-      "id": "ReplaceAllShapesWithImageRequest",
-      "description": "Replaces all shapes that match the given criteria with the provided image.",
-      "type": "object"
+      "id": "ReplaceAllShapesWithImageRequest"
+    },
+    "Shadow": {
+      "id": "Shadow",
+      "description": "The shadow properties of a page element.\n\nIf these fields are unset, they may be inherited from a parent placeholder\nif it exists. If there is no parent, the fields will default to the value\nused for new page elements created in the Slides editor, which may depend on\nthe page element kind.",
+      "type": "object",
+      "properties": {
+        "propertyState": {
+          "description": "The shadow property state.\n\nUpdating the the shadow on a page element will implicitly update this field\nto `RENDERED`, unless another value is specified in the same request. To\nhave no shadow on a page element, set this field to `NOT_RENDERED`. In this\ncase, any other shadow fields set in the same request will be ignored.",
+          "type": "string",
+          "enumDescriptions": [
+            "If a property's state is RENDERED, then the element has the corresponding\nproperty when rendered on a page. If the element is a placeholder shape as\ndetermined by the placeholder\nfield, and it inherits from a placeholder shape, the corresponding field\nmay be unset, meaning that the property value is inherited from a parent\nplaceholder. If the element does not inherit, then the field will contain\nthe rendered value. This is the default value.",
+            "If a property's state is NOT_RENDERED, then the element does not have the\ncorresponding property when rendered on a page. However, the field may\nstill be set so it can be inherited by child shapes. To remove a property\nfrom a rendered element, set its property_state to NOT_RENDERED.",
+            "If a property's state is INHERIT, then the property state uses the value of\ncorresponding `property_state` field on the parent shape. Elements that do\nnot inherit will never have an INHERIT property state."
+          ],
+          "enum": [
+            "RENDERED",
+            "NOT_RENDERED",
+            "INHERIT"
+          ]
+        },
+        "blurRadius": {
+          "description": "The radius of the shadow blur. The larger the radius, the more diffuse the\nshadow becomes.",
+          "$ref": "Dimension"
+        },
+        "type": {
+          "enumDescriptions": [
+            "Unspecified shadow type.",
+            "Outer shadow."
+          ],
+          "enum": [
+            "SHADOW_TYPE_UNSPECIFIED",
+            "OUTER"
+          ],
+          "description": "The type of the shadow.",
+          "type": "string"
+        },
+        "transform": {
+          "description": "Transform that encodes the translate, scale, and skew of the shadow,\nrelative to the alignment position.",
+          "$ref": "AffineTransform"
+        },
+        "alignment": {
+          "enum": [
+            "RECTANGLE_POSITION_UNSPECIFIED",
+            "TOP_LEFT",
+            "TOP_CENTER",
+            "TOP_RIGHT",
+            "LEFT_CENTER",
+            "CENTER",
+            "RIGHT_CENTER",
+            "BOTTOM_LEFT",
+            "BOTTOM_CENTER",
+            "BOTTOM_RIGHT"
+          ],
+          "description": "The alignment point of the shadow, that sets the origin for translate,\nscale and skew of the shadow.",
+          "type": "string",
+          "enumDescriptions": [
+            "Unspecified.",
+            "Top left.",
+            "Top center.",
+            "Top right.",
+            "Left center.",
+            "Center.",
+            "Right center.",
+            "Bottom left.",
+            "Bottom center.",
+            "Bottom right."
+          ]
+        },
+        "alpha": {
+          "type": "number",
+          "description": "The alpha of the shadow's color, from 0.0 to 1.0.",
+          "format": "float"
+        },
+        "color": {
+          "$ref": "OpaqueColor",
+          "description": "The shadow color value."
+        },
+        "rotateWithShape": {
+          "description": "Whether the shadow should rotate with the shape.",
+          "type": "boolean"
+        }
+      }
+    },
+    "DeleteTableRowRequest": {
+      "description": "Deletes a row from a table.",
+      "type": "object",
+      "properties": {
+        "cellLocation": {
+          "description": "The reference table cell location from which a row will be deleted.\n\nThe row this cell spans will be deleted. If this is a merged cell, multiple\nrows will be deleted. If no rows remain in the table after this deletion,\nthe whole table is deleted.",
+          "$ref": "TableCellLocation"
+        },
+        "tableObjectId": {
+          "description": "The table to delete rows from.",
+          "type": "string"
+        }
+      },
+      "id": "DeleteTableRowRequest"
+    },
+    "Bullet": {
+      "description": "Describes the bullet of a paragraph.",
+      "type": "object",
+      "properties": {
+        "listId": {
+          "type": "string",
+          "description": "The ID of the list this paragraph belongs to."
+        },
+        "glyph": {
+          "description": "The rendered bullet glyph for this paragraph.",
+          "type": "string"
+        },
+        "nestingLevel": {
+          "description": "The nesting level of this paragraph in the list.",
+          "format": "int32",
+          "type": "integer"
+        },
+        "bulletStyle": {
+          "$ref": "TextStyle",
+          "description": "The paragraph specific text style applied to this bullet."
+        }
+      },
+      "id": "Bullet"
+    },
+    "OutlineFill": {
+      "id": "OutlineFill",
+      "description": "The fill of the outline.",
+      "type": "object",
+      "properties": {
+        "solidFill": {
+          "description": "Solid color fill.",
+          "$ref": "SolidFill"
+        }
+      }
+    },
+    "TableCellLocation": {
+      "id": "TableCellLocation",
+      "description": "A location of a single table cell within a table.",
+      "type": "object",
+      "properties": {
+        "rowIndex": {
+          "description": "The 0-based row index.",
+          "format": "int32",
+          "type": "integer"
+        },
+        "columnIndex": {
+          "type": "integer",
+          "description": "The 0-based column index.",
+          "format": "int32"
+        }
+      }
+    },
+    "CreateLineResponse": {
+      "description": "The result of creating a line.",
+      "type": "object",
+      "properties": {
+        "objectId": {
+          "description": "The object ID of the created line.",
+          "type": "string"
+        }
+      },
+      "id": "CreateLineResponse"
+    },
+    "ReplaceAllTextResponse": {
+      "description": "The result of replacing text.",
+      "type": "object",
+      "properties": {
+        "occurrencesChanged": {
+          "description": "The number of occurrences changed by replacing all text.",
+          "format": "int32",
+          "type": "integer"
+        }
+      },
+      "id": "ReplaceAllTextResponse"
     }
   },
   "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"
-  },
-  "canonicalName": "Slides",
-  "auth": {
-    "oauth2": {
-      "scopes": {
-        "https://www.googleapis.com/auth/spreadsheets": {
-          "description": "View and manage your spreadsheets in Google Drive"
-        },
-        "https://www.googleapis.com/auth/presentations": {
-          "description": "View and manage your Google Slides presentations"
-        },
-        "https://www.googleapis.com/auth/presentations.readonly": {
-          "description": "View your Google Slides presentations"
-        },
-        "https://www.googleapis.com/auth/spreadsheets.readonly": {
-          "description": "View your Google Spreadsheets"
-        },
-        "https://www.googleapis.com/auth/drive": {
-          "description": "View and manage the files in your Google Drive"
-        },
-        "https://www.googleapis.com/auth/drive.readonly": {
-          "description": "View the files in your Google Drive"
-        }
-      }
-    }
-  },
-  "rootUrl": "https://slides.googleapis.com/"
+    "x16": "http://www.google.com/images/icons/product/search-16.gif",
+    "x32": "http://www.google.com/images/icons/product/search-32.gif"
+  }
 }
diff --git a/slides/v1/slides-gen.go b/slides/v1/slides-gen.go
index aa0062a..48d8fe1 100644
--- a/slides/v1/slides-gen.go
+++ b/slides/v1/slides-gen.go
@@ -76,10 +76,9 @@
 }
 
 type Service struct {
-	client                    *http.Client
-	BasePath                  string // API endpoint base URL
-	UserAgent                 string // optional additional User-Agent fragment
-	GoogleClientHeaderElement string // client header fragment, for Google use only
+	client    *http.Client
+	BasePath  string // API endpoint base URL
+	UserAgent string // optional additional User-Agent fragment
 
 	Presentations *PresentationsService
 }
@@ -91,10 +90,6 @@
 	return googleapi.UserAgent + " " + s.UserAgent
 }
 
-func (s *Service) clientHeader() string {
-	return gensupport.GoogleClientHeader("20170210", s.GoogleClientHeaderElement)
-}
-
 func NewPresentationsService(s *Service) *PresentationsService {
 	rs := &PresentationsService{s: s}
 	rs.Pages = NewPresentationsPagesService(s)
@@ -252,9 +247,7 @@
 	// Requests: A list of updates to apply to the presentation.
 	Requests []*Request `json:"requests,omitempty"`
 
-	// WriteControl: Provides control over how write requests are executed,
-	// such as
-	// conditionally updating the presentation.
+	// WriteControl: Provides control over how write requests are executed.
 	WriteControl *WriteControl `json:"writeControl,omitempty"`
 
 	// ForceSendFields is a list of field names (e.g. "Requests") to
@@ -3044,10 +3037,15 @@
 	// 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. Callers can assume that if two revision IDs are equal then
-	// the
-	// presentation has not changed.
+	// hours after it has been returned and cannot be shared across users.
+	// If the
+	// revision ID is unchanged between calls, then the presentation has
+	// not
+	// changed. Conversely, a changed ID (for the same presentation and
+	// user)
+	// usually means the presentation has been updated; however, a changed
+	// ID can
+	// also be due to internal factors such as ID format changes.
 	RevisionId string `json:"revisionId,omitempty"`
 
 	// SlideProperties: Slide specific properties. Only set if page_type =
@@ -3475,8 +3473,8 @@
 // placeholder shape.
 type Placeholder struct {
 	// Index: The index of the placeholder. If the same placeholder types
-	// are the present
-	// in the same page, they would have different index values.
+	// are present in
+	// the same page, they would have different index values.
 	Index int64 `json:"index,omitempty"`
 
 	// ParentObjectId: The object ID of this shape's parent placeholder.
@@ -3598,10 +3596,14 @@
 	// 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.
-	// Callers
-	// can assume that if two revision IDs are equal then the presentation
-	// has not
-	// changed.
+	// If the
+	// revision ID is unchanged between calls, then the presentation has
+	// not
+	// changed. Conversely, a changed ID (for the same presentation and
+	// user)
+	// usually means the presentation has been updated; however, a changed
+	// ID can
+	// also be due to internal factors such as ID format changes.
 	RevisionId string `json:"revisionId,omitempty"`
 
 	// Slides: The slides in the presentation.
@@ -5933,6 +5935,54 @@
 	return gensupport.MarshalJSON(raw, s.ForceSendFields, s.NullFields)
 }
 
+// Thumbnail: The thumbnail of a page.
+type Thumbnail struct {
+	// ContentUrl: The content URL of the thumbnail image.
+	//
+	// The URL to the image has a default lifetime of 30 minutes.
+	// This URL is tagged with the account of the requester. Anyone with the
+	// URL
+	// effectively accesses the image as the original requester. Access to
+	// the
+	// image may be lost if the presentation's sharing settings change.
+	// The mime type of the thumbnail image is the same as specified in
+	// the
+	// `GetPageThumbnailRequest`.
+	ContentUrl string `json:"contentUrl,omitempty"`
+
+	// Height: The positive height in pixels of the thumbnail image.
+	Height int64 `json:"height,omitempty"`
+
+	// Width: The positive width in pixels of the thumbnail image.
+	Width int64 `json:"width,omitempty"`
+
+	// ServerResponse contains the HTTP response code and headers from the
+	// server.
+	googleapi.ServerResponse `json:"-"`
+
+	// ForceSendFields is a list of field names (e.g. "ContentUrl") to
+	// unconditionally include in API requests. By default, fields with
+	// empty values are omitted from API requests. However, any non-pointer,
+	// non-interface field appearing in ForceSendFields will be sent to the
+	// server regardless of whether the field is empty or not. This may be
+	// used to include empty fields in Patch requests.
+	ForceSendFields []string `json:"-"`
+
+	// NullFields is a list of field names (e.g. "ContentUrl") to include in
+	// API requests with the JSON null value. By default, fields with empty
+	// values are omitted from API requests. However, any field with an
+	// empty value appearing in NullFields will be sent to the server as
+	// null. It is an error if a field in this list has a non-empty value.
+	// This may be used to include null fields in Patch requests.
+	NullFields []string `json:"-"`
+}
+
+func (s *Thumbnail) MarshalJSON() ([]byte, error) {
+	type noMethod Thumbnail
+	raw := noMethod(*s)
+	return gensupport.MarshalJSON(raw, s.ForceSendFields, s.NullFields)
+}
+
 // UpdateImagePropertiesRequest: Update the properties of an Image.
 type UpdateImagePropertiesRequest struct {
 	// Fields: The fields that should be updated.
@@ -6538,18 +6588,17 @@
 
 	// Weight: The rendered weight of the text. This field can have any
 	// value that is a
-	// multiple of 100 between 100 and 900, inclusive. This range
-	// corresponds to
-	// only the numerical values described in the "Cascading Style Sheets
-	// Level
-	// 2 Revision 1 (CSS 2.1) Specification",
-	// [section 15.6](https://www.w3.org/TR/CSS21/fonts.html#font-boldness).
+	// 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. Weights greater than or equal
+	// to
+	// `700` are considered bold, and weights less than `700`are not bold.
 	// The
-	// non-numerical values in the specification are disallowed. Weights
-	// greater
-	// than or equal to 700 are considered bold, and weights less than 700
-	// are
-	// not bold. The default value is `400` ("normal").
+	// default value is `400` ("normal").
 	Weight int64 `json:"weight,omitempty"`
 
 	// ForceSendFields is a list of field names (e.g. "FontFamily") to
@@ -6718,7 +6767,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	var body io.Reader = nil
 	body, err := googleapi.WithoutDataWrapper.JSONReader(c.batchupdatepresentationrequest)
 	if err != nil {
@@ -6858,7 +6906,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	var body io.Reader = nil
 	body, err := googleapi.WithoutDataWrapper.JSONReader(c.presentation)
 	if err != nil {
@@ -6991,7 +7038,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	if c.ifNoneMatch_ != "" {
 		reqHeaders.Set("If-None-Match", c.ifNoneMatch_)
 	}
@@ -7137,7 +7183,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	if c.ifNoneMatch_ != "" {
 		reqHeaders.Set("If-None-Match", c.ifNoneMatch_)
 	}
@@ -7227,3 +7272,203 @@
 	// }
 
 }
+
+// method id "slides.presentations.pages.getThumbnail":
+
+type PresentationsPagesGetThumbnailCall struct {
+	s              *Service
+	presentationId string
+	pageObjectId   string
+	urlParams_     gensupport.URLParams
+	ifNoneMatch_   string
+	ctx_           context.Context
+	header_        http.Header
+}
+
+// GetThumbnail: Generates a thumbnail of the latest version of the
+// specified page in the
+// presentation and returns a URL to the thumbnail image.
+func (r *PresentationsPagesService) GetThumbnail(presentationId string, pageObjectId string) *PresentationsPagesGetThumbnailCall {
+	c := &PresentationsPagesGetThumbnailCall{s: r.s, urlParams_: make(gensupport.URLParams)}
+	c.presentationId = presentationId
+	c.pageObjectId = pageObjectId
+	return c
+}
+
+// ThumbnailPropertiesMimeType sets the optional parameter
+// "thumbnailProperties.mimeType": The optional mime type of the
+// thumbnail image.
+//
+// If you don't specify the mime type, the default mime type will be
+// PNG.
+//
+// Possible values:
+//   "PNG"
+func (c *PresentationsPagesGetThumbnailCall) ThumbnailPropertiesMimeType(thumbnailPropertiesMimeType string) *PresentationsPagesGetThumbnailCall {
+	c.urlParams_.Set("thumbnailProperties.mimeType", thumbnailPropertiesMimeType)
+	return c
+}
+
+// ThumbnailPropertiesThumbnailSize sets the optional parameter
+// "thumbnailProperties.thumbnailSize": The optional thumbnail image
+// size.
+//
+// If you don't specify the size, the server chooses a default size of
+// the
+// image.
+//
+// Possible values:
+//   "THUMBNAIL_SIZE_UNSPECIFIED"
+//   "LARGE"
+func (c *PresentationsPagesGetThumbnailCall) ThumbnailPropertiesThumbnailSize(thumbnailPropertiesThumbnailSize string) *PresentationsPagesGetThumbnailCall {
+	c.urlParams_.Set("thumbnailProperties.thumbnailSize", thumbnailPropertiesThumbnailSize)
+	return c
+}
+
+// Fields allows partial responses to be retrieved. See
+// https://developers.google.com/gdata/docs/2.0/basics#PartialResponse
+// for more information.
+func (c *PresentationsPagesGetThumbnailCall) Fields(s ...googleapi.Field) *PresentationsPagesGetThumbnailCall {
+	c.urlParams_.Set("fields", googleapi.CombineFields(s))
+	return c
+}
+
+// IfNoneMatch sets the optional parameter which makes the operation
+// fail if the object's ETag matches the given value. This is useful for
+// getting updates only after the object has changed since the last
+// request. Use googleapi.IsNotModified to check whether the response
+// error from Do is the result of In-None-Match.
+func (c *PresentationsPagesGetThumbnailCall) IfNoneMatch(entityTag string) *PresentationsPagesGetThumbnailCall {
+	c.ifNoneMatch_ = entityTag
+	return c
+}
+
+// Context sets the context to be used in this call's Do method. Any
+// pending HTTP request will be aborted if the provided context is
+// canceled.
+func (c *PresentationsPagesGetThumbnailCall) Context(ctx context.Context) *PresentationsPagesGetThumbnailCall {
+	c.ctx_ = ctx
+	return c
+}
+
+// Header returns an http.Header that can be modified by the caller to
+// add HTTP headers to the request.
+func (c *PresentationsPagesGetThumbnailCall) Header() http.Header {
+	if c.header_ == nil {
+		c.header_ = make(http.Header)
+	}
+	return c.header_
+}
+
+func (c *PresentationsPagesGetThumbnailCall) doRequest(alt string) (*http.Response, error) {
+	reqHeaders := make(http.Header)
+	for k, v := range c.header_ {
+		reqHeaders[k] = v
+	}
+	reqHeaders.Set("User-Agent", c.s.userAgent())
+	if c.ifNoneMatch_ != "" {
+		reqHeaders.Set("If-None-Match", c.ifNoneMatch_)
+	}
+	var body io.Reader = nil
+	c.urlParams_.Set("alt", alt)
+	urls := googleapi.ResolveRelative(c.s.BasePath, "v1/presentations/{presentationId}/pages/{pageObjectId}/thumbnail")
+	urls += "?" + c.urlParams_.Encode()
+	req, _ := http.NewRequest("GET", urls, body)
+	req.Header = reqHeaders
+	googleapi.Expand(req.URL, map[string]string{
+		"presentationId": c.presentationId,
+		"pageObjectId":   c.pageObjectId,
+	})
+	return gensupport.SendRequest(c.ctx_, c.s.client, req)
+}
+
+// Do executes the "slides.presentations.pages.getThumbnail" call.
+// Exactly one of *Thumbnail or error will be non-nil. Any non-2xx
+// status code is an error. Response headers are in either
+// *Thumbnail.ServerResponse.Header or (if a response was returned at
+// all) in error.(*googleapi.Error).Header. Use googleapi.IsNotModified
+// to check whether the returned error was because
+// http.StatusNotModified was returned.
+func (c *PresentationsPagesGetThumbnailCall) Do(opts ...googleapi.CallOption) (*Thumbnail, error) {
+	gensupport.SetOptions(c.urlParams_, opts...)
+	res, err := c.doRequest("json")
+	if res != nil && res.StatusCode == http.StatusNotModified {
+		if res.Body != nil {
+			res.Body.Close()
+		}
+		return nil, &googleapi.Error{
+			Code:   res.StatusCode,
+			Header: res.Header,
+		}
+	}
+	if err != nil {
+		return nil, err
+	}
+	defer googleapi.CloseBody(res)
+	if err := googleapi.CheckResponse(res); err != nil {
+		return nil, err
+	}
+	ret := &Thumbnail{
+		ServerResponse: googleapi.ServerResponse{
+			Header:         res.Header,
+			HTTPStatusCode: res.StatusCode,
+		},
+	}
+	target := &ret
+	if err := json.NewDecoder(res.Body).Decode(target); err != nil {
+		return nil, err
+	}
+	return ret, nil
+	// {
+	//   "description": "Generates a thumbnail of the latest version of the specified page in the\npresentation and returns a URL to the thumbnail image.",
+	//   "flatPath": "v1/presentations/{presentationId}/pages/{pageObjectId}/thumbnail",
+	//   "httpMethod": "GET",
+	//   "id": "slides.presentations.pages.getThumbnail",
+	//   "parameterOrder": [
+	//     "presentationId",
+	//     "pageObjectId"
+	//   ],
+	//   "parameters": {
+	//     "pageObjectId": {
+	//       "description": "The object ID of the page whose thumbnail to retrieve.",
+	//       "location": "path",
+	//       "required": true,
+	//       "type": "string"
+	//     },
+	//     "presentationId": {
+	//       "description": "The ID of the presentation to retrieve.",
+	//       "location": "path",
+	//       "required": true,
+	//       "type": "string"
+	//     },
+	//     "thumbnailProperties.mimeType": {
+	//       "description": "The optional mime type of the thumbnail image.\n\nIf you don't specify the mime type, the default mime type will be PNG.",
+	//       "enum": [
+	//         "PNG"
+	//       ],
+	//       "location": "query",
+	//       "type": "string"
+	//     },
+	//     "thumbnailProperties.thumbnailSize": {
+	//       "description": "The optional thumbnail image size.\n\nIf you don't specify the size, the server chooses a default size of the\nimage.",
+	//       "enum": [
+	//         "THUMBNAIL_SIZE_UNSPECIFIED",
+	//         "LARGE"
+	//       ],
+	//       "location": "query",
+	//       "type": "string"
+	//     }
+	//   },
+	//   "path": "v1/presentations/{presentationId}/pages/{pageObjectId}/thumbnail",
+	//   "response": {
+	//     "$ref": "Thumbnail"
+	//   },
+	//   "scopes": [
+	//     "https://www.googleapis.com/auth/drive",
+	//     "https://www.googleapis.com/auth/drive.readonly",
+	//     "https://www.googleapis.com/auth/presentations",
+	//     "https://www.googleapis.com/auth/presentations.readonly"
+	//   ]
+	// }
+
+}
diff --git a/sourcerepo/v1/sourcerepo-api.json b/sourcerepo/v1/sourcerepo-api.json
index cfb3ed7..902d5d1 100644
--- a/sourcerepo/v1/sourcerepo-api.json
+++ b/sourcerepo/v1/sourcerepo-api.json
@@ -1,319 +1,207 @@
 {
-  "auth": {
-    "oauth2": {
-      "scopes": {
-        "https://www.googleapis.com/auth/cloud-platform": {
-          "description": "View and manage your data across Google Cloud Platform services"
-        }
-      }
-    }
-  },
-  "rootUrl": "https://sourcerepo.googleapis.com/",
-  "ownerDomain": "google.com",
-  "name": "sourcerepo",
-  "batchPath": "batch",
-  "title": "Cloud Source Repositories API",
-  "ownerName": "Google",
-  "resources": {
-    "projects": {
-      "resources": {
-        "repos": {
-          "methods": {
-            "testIamPermissions": {
-              "request": {
-                "$ref": "TestIamPermissionsRequest"
-              },
-              "description": "Returns permissions that a caller has on the specified resource.\nIf the resource does not exist, this will return an empty set of\npermissions, not a NOT_FOUND error.",
-              "httpMethod": "POST",
-              "parameterOrder": [
-                "resource"
-              ],
-              "response": {
-                "$ref": "TestIamPermissionsResponse"
-              },
-              "parameters": {
-                "resource": {
-                  "description": "REQUIRED: The resource for which the policy detail is being requested.\nSee the operation documentation for the appropriate value for this field.",
-                  "required": true,
-                  "type": "string",
-                  "pattern": "^projects/[^/]+/repos/.+$",
-                  "location": "path"
-                }
-              },
-              "scopes": [
-                "https://www.googleapis.com/auth/cloud-platform"
-              ],
-              "flatPath": "v1/projects/{projectsId}/repos/{reposId}:testIamPermissions",
-              "id": "sourcerepo.projects.repos.testIamPermissions",
-              "path": "v1/{+resource}:testIamPermissions"
-            },
-            "delete": {
-              "id": "sourcerepo.projects.repos.delete",
-              "path": "v1/{+name}",
-              "description": "Deletes a repo.",
-              "httpMethod": "DELETE",
-              "parameterOrder": [
-                "name"
-              ],
-              "response": {
-                "$ref": "Empty"
-              },
-              "parameters": {
-                "name": {
-                  "pattern": "^projects/[^/]+/repos/.+$",
-                  "location": "path",
-                  "description": "The name of the repo to delete. Values are of the form\n`projects/\u003cproject\u003e/repos/\u003crepo\u003e`.",
-                  "required": true,
-                  "type": "string"
-                }
-              },
-              "scopes": [
-                "https://www.googleapis.com/auth/cloud-platform"
-              ],
-              "flatPath": "v1/projects/{projectsId}/repos/{reposId}"
-            },
-            "list": {
-              "description": "Returns all repos belonging to a project.",
-              "httpMethod": "GET",
-              "parameterOrder": [
-                "name"
-              ],
-              "response": {
-                "$ref": "ListReposResponse"
-              },
-              "parameters": {
-                "name": {
-                  "pattern": "^projects/[^/]+$",
-                  "location": "path",
-                  "description": "The project ID whose repos should be listed. Values are of the form\n`projects/\u003cproject\u003e`.",
-                  "required": true,
-                  "type": "string"
-                }
-              },
-              "scopes": [
-                "https://www.googleapis.com/auth/cloud-platform"
-              ],
-              "flatPath": "v1/projects/{projectsId}/repos",
-              "id": "sourcerepo.projects.repos.list",
-              "path": "v1/{+name}/repos"
-            },
-            "create": {
-              "parameters": {
-                "parent": {
-                  "description": "The project in which to create the repo. Values are of the form\n`projects/\u003cproject\u003e`.",
-                  "required": true,
-                  "type": "string",
-                  "pattern": "^projects/[^/]+$",
-                  "location": "path"
-                }
-              },
-              "scopes": [
-                "https://www.googleapis.com/auth/cloud-platform"
-              ],
-              "flatPath": "v1/projects/{projectsId}/repos",
-              "id": "sourcerepo.projects.repos.create",
-              "path": "v1/{+parent}/repos",
-              "request": {
-                "$ref": "Repo"
-              },
-              "description": "Creates a repo in the given project with the given name..\n\nIf the named repository already exists, `CreateRepo` returns\n`ALREADY_EXISTS`.",
-              "httpMethod": "POST",
-              "parameterOrder": [
-                "parent"
-              ],
-              "response": {
-                "$ref": "Repo"
-              }
-            },
-            "setIamPolicy": {
-              "id": "sourcerepo.projects.repos.setIamPolicy",
-              "path": "v1/{+resource}:setIamPolicy",
-              "request": {
-                "$ref": "SetIamPolicyRequest"
-              },
-              "description": "Sets the access control policy on the specified resource. Replaces any\nexisting policy.",
-              "httpMethod": "POST",
-              "parameterOrder": [
-                "resource"
-              ],
-              "response": {
-                "$ref": "Policy"
-              },
-              "parameters": {
-                "resource": {
-                  "pattern": "^projects/[^/]+/repos/.+$",
-                  "location": "path",
-                  "description": "REQUIRED: The resource for which the policy is being specified.\nSee the operation documentation for the appropriate value for this field.",
-                  "required": true,
-                  "type": "string"
-                }
-              },
-              "scopes": [
-                "https://www.googleapis.com/auth/cloud-platform"
-              ],
-              "flatPath": "v1/projects/{projectsId}/repos/{reposId}:setIamPolicy"
-            },
-            "getIamPolicy": {
-              "description": "Gets the access control policy for a resource.\nReturns an empty policy if the resource exists and does not have a policy\nset.",
-              "httpMethod": "GET",
-              "response": {
-                "$ref": "Policy"
-              },
-              "parameterOrder": [
-                "resource"
-              ],
-              "parameters": {
-                "resource": {
-                  "description": "REQUIRED: The resource for which the policy is being requested.\nSee the operation documentation for the appropriate value for this field.",
-                  "required": true,
-                  "type": "string",
-                  "pattern": "^projects/[^/]+/repos/.+$",
-                  "location": "path"
-                }
-              },
-              "scopes": [
-                "https://www.googleapis.com/auth/cloud-platform"
-              ],
-              "flatPath": "v1/projects/{projectsId}/repos/{reposId}:getIamPolicy",
-              "id": "sourcerepo.projects.repos.getIamPolicy",
-              "path": "v1/{+resource}:getIamPolicy"
-            },
-            "get": {
-              "parameterOrder": [
-                "name"
-              ],
-              "httpMethod": "GET",
-              "response": {
-                "$ref": "Repo"
-              },
-              "parameters": {
-                "name": {
-                  "pattern": "^projects/[^/]+/repos/.+$",
-                  "location": "path",
-                  "description": "The name of the requested repository. Values are of the form\n`projects/\u003cproject\u003e/repos/\u003crepo\u003e`.",
-                  "required": true,
-                  "type": "string"
-                }
-              },
-              "scopes": [
-                "https://www.googleapis.com/auth/cloud-platform"
-              ],
-              "flatPath": "v1/projects/{projectsId}/repos/{reposId}",
-              "path": "v1/{+name}",
-              "id": "sourcerepo.projects.repos.get",
-              "description": "Returns information about a repo."
-            }
-          }
-        }
-      }
-    }
-  },
-  "parameters": {
-    "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"
-    },
-    "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"
-    },
-    "pp": {
-      "location": "query",
-      "description": "Pretty-print response.",
-      "type": "boolean",
-      "default": "true"
-    },
-    "oauth_token": {
-      "location": "query",
-      "description": "OAuth 2.0 token for the current user.",
-      "type": "string"
-    },
-    "bearer_token": {
-      "location": "query",
-      "description": "OAuth bearer token.",
-      "type": "string"
-    },
-    "upload_protocol": {
-      "description": "Upload protocol for media (e.g. \"raw\", \"multipart\").",
-      "type": "string",
-      "location": "query"
-    },
-    "prettyPrint": {
-      "location": "query",
-      "description": "Returns response with indentations and line breaks.",
-      "type": "boolean",
-      "default": "true"
-    },
-    "fields": {
-      "description": "Selector specifying which fields to include in a partial response.",
-      "type": "string",
-      "location": "query"
-    },
-    "uploadType": {
-      "description": "Legacy upload protocol for media (e.g. \"media\", \"multipart\").",
-      "type": "string",
-      "location": "query"
-    },
-    "callback": {
-      "description": "JSONP",
-      "type": "string",
-      "location": "query"
-    },
-    "$.xgafv": {
-      "description": "V1 error format.",
-      "type": "string",
-      "enumDescriptions": [
-        "v1 error format",
-        "v2 error format"
-      ],
-      "location": "query",
-      "enum": [
-        "1",
-        "2"
-      ]
-    },
-    "alt": {
-      "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",
-      "description": "Data format for response.",
-      "default": "json",
-      "enum": [
-        "json",
-        "media",
-        "proto"
-      ]
-    }
-  },
-  "version": "v1",
-  "baseUrl": "https://sourcerepo.googleapis.com/",
-  "description": "Access source code repositories hosted by Google.",
-  "servicePath": "",
-  "kind": "discovery#restDescription",
-  "basePath": "",
-  "id": "sourcerepo:v1",
-  "documentationLink": "https://cloud.google.com/eap/cloud-repositories/cloud-sourcerepo-api",
-  "revision": "20170307",
   "discoveryVersion": "v1",
   "version_module": "True",
   "schemas": {
+    "DataAccessOptions": {
+      "type": "object",
+      "properties": {},
+      "id": "DataAccessOptions",
+      "description": "Write a Data Access (Gin) log"
+    },
+    "AuditConfig": {
+      "type": "object",
+      "properties": {
+        "service": {
+          "type": "string",
+          "description": "Specifies a service that will be enabled for audit logging.\nFor example, `storage.googleapis.com`, `cloudsql.googleapis.com`.\n`allServices` is a special value that covers all services."
+        },
+        "auditLogConfigs": {
+          "description": "The configuration for logging of each type of permission.\nNext ID: 4",
+          "type": "array",
+          "items": {
+            "$ref": "AuditLogConfig"
+          }
+        },
+        "exemptedMembers": {
+          "type": "array",
+          "items": {
+            "type": "string"
+          }
+        }
+      },
+      "id": "AuditConfig",
+      "description": "Specifies the audit configuration for a service.\nThe configuration determines which permission types are logged, and what\nidentities, if any, are exempted from logging.\nAn AuditConifg must have one or more AuditLogConfigs.\n\nIf there are AuditConfigs for both `allServices` and a specific service,\nthe union of the two AuditConfigs is used for that service: the log_types\nspecified in each AuditConfig are enabled, and the exempted_members in each\nAuditConfig are exempted.\nExample Policy with multiple AuditConfigs:\n{\n  \"audit_configs\": [\n    {\n      \"service\": \"allServices\"\n      \"audit_log_configs\": [\n        {\n          \"log_type\": \"DATA_READ\",\n          \"exempted_members\": [\n            \"user:foo@gmail.com\"\n          ]\n        },\n        {\n          \"log_type\": \"DATA_WRITE\",\n        },\n        {\n          \"log_type\": \"ADMIN_READ\",\n        }\n      ]\n    },\n    {\n      \"service\": \"fooservice@googleapis.com\"\n      \"audit_log_configs\": [\n        {\n          \"log_type\": \"DATA_READ\",\n        },\n        {\n          \"log_type\": \"DATA_WRITE\",\n          \"exempted_members\": [\n            \"user:bar@gmail.com\"\n          ]\n        }\n      ]\n    }\n  ]\n}\nFor fooservice, this policy enables DATA_READ, DATA_WRITE and ADMIN_READ\nlogging. It also exempts foo@gmail.com from DATA_READ logging, and\nbar@gmail.com from DATA_WRITE logging."
+    },
+    "SetIamPolicyRequest": {
+      "type": "object",
+      "properties": {
+        "policy": {
+          "$ref": "Policy",
+          "description": "REQUIRED: The complete policy to be applied to the `resource`. The size of\nthe policy is limited to a few 10s of KB. An empty policy is a\nvalid policy but certain Cloud Platform services (such as Projects)\nmight reject them."
+        },
+        "updateMask": {
+          "description": "OPTIONAL: A FieldMask specifying which fields of the policy to modify. Only\nthe fields in the mask will be modified. If no mask is provided, the\nfollowing default mask is used:\npaths: \"bindings, etag\"\nThis field is only used by Cloud IAM.",
+          "format": "google-fieldmask",
+          "type": "string"
+        }
+      },
+      "id": "SetIamPolicyRequest",
+      "description": "Request message for `SetIamPolicy` method."
+    },
+    "CloudAuditOptions": {
+      "description": "Write a Cloud Audit log",
+      "type": "object",
+      "properties": {},
+      "id": "CloudAuditOptions"
+    },
+    "Binding": {
+      "type": "object",
+      "properties": {
+        "role": {
+          "type": "string",
+          "description": "Role that is assigned to `members`.\nFor example, `roles/viewer`, `roles/editor`, or `roles/owner`.\nRequired"
+        },
+        "members": {
+          "type": "array",
+          "items": {
+            "type": "string"
+          },
+          "description": "Specifies the identities requesting access for a Cloud Platform resource.\n`members` can have the following values:\n\n* `allUsers`: A special identifier that represents anyone who is\n   on the internet; with or without a Google account.\n\n* `allAuthenticatedUsers`: A special identifier that represents anyone\n   who is authenticated with a Google account or a service account.\n\n* `user:{emailid}`: An email address that represents a specific Google\n   account. For example, `alice@gmail.com` or `joe@example.com`.\n\n\n* `serviceAccount:{emailid}`: An email address that represents a service\n   account. For example, `my-other-app@appspot.gserviceaccount.com`.\n\n* `group:{emailid}`: An email address that represents a Google group.\n   For example, `admins@example.com`.\n\n* `domain:{domain}`: A Google Apps domain name that represents all the\n   users of that domain. For example, `google.com` or `example.com`.\n\n"
+        }
+      },
+      "id": "Binding",
+      "description": "Associates `members` with a `role`."
+    },
+    "Empty": {
+      "type": "object",
+      "properties": {},
+      "id": "Empty",
+      "description": "A generic empty message that you can re-use to avoid defining duplicated\nempty messages in your APIs. A typical example is to use it as the request\nor the response type of an API method. For instance:\n\n    service Foo {\n      rpc Bar(google.protobuf.Empty) returns (google.protobuf.Empty);\n    }\n\nThe JSON representation for `Empty` is empty JSON object `{}`."
+    },
+    "MirrorConfig": {
+      "type": "object",
+      "properties": {
+        "webhookId": {
+          "description": "ID of the webhook listening to updates to trigger mirroring.\nRemoving this webook from the other hosting service will stop\nGoogle Cloud Source Repositories from receiving notifications,\nand thereby disabling mirroring.",
+          "type": "string"
+        },
+        "deployKeyId": {
+          "type": "string",
+          "description": "ID of the SSH deploy key at the other hosting service.\nRemoving this key from the other service would deauthorize\nGoogle Cloud Source Repositories from mirroring."
+        },
+        "url": {
+          "description": "URL of the main repository at the other hosting service.",
+          "type": "string"
+        }
+      },
+      "id": "MirrorConfig",
+      "description": "Configuration to automatically mirror a repository from another\nhosting service, for example GitHub or BitBucket."
+    },
+    "Repo": {
+      "description": "A repository (or repo) is a Git repository storing versioned source content.",
+      "type": "object",
+      "properties": {
+        "mirrorConfig": {
+          "$ref": "MirrorConfig",
+          "description": "How this repository mirrors a repository managed by another service."
+        },
+        "url": {
+          "type": "string",
+          "description": "URL to clone the repository from Google Cloud Source Repositories."
+        },
+        "size": {
+          "type": "string",
+          "description": "The size in bytes of the repo.",
+          "format": "int64"
+        },
+        "name": {
+          "description": "Resource name of the repository, of the form\n`projects/\u003cproject\u003e/repos/\u003crepo\u003e`.",
+          "type": "string"
+        }
+      },
+      "id": "Repo"
+    },
+    "TestIamPermissionsResponse": {
+      "description": "Response message for `TestIamPermissions` method.",
+      "type": "object",
+      "properties": {
+        "permissions": {
+          "description": "A subset of `TestPermissionsRequest.permissions` that the caller is\nallowed.",
+          "type": "array",
+          "items": {
+            "type": "string"
+          }
+        }
+      },
+      "id": "TestIamPermissionsResponse"
+    },
+    "ListReposResponse": {
+      "type": "object",
+      "properties": {
+        "repos": {
+          "type": "array",
+          "items": {
+            "$ref": "Repo"
+          },
+          "description": "The listed repos."
+        }
+      },
+      "id": "ListReposResponse",
+      "description": "Response for ListRepos."
+    },
     "Condition": {
-      "id": "Condition",
       "description": "A condition to be met.",
       "type": "object",
       "properties": {
+        "value": {
+          "description": "DEPRECATED. Use 'values' instead.",
+          "type": "string"
+        },
+        "sys": {
+          "enum": [
+            "NO_ATTR",
+            "REGION",
+            "SERVICE",
+            "NAME",
+            "IP"
+          ],
+          "description": "Trusted attributes supplied by any service that owns resources and uses\nthe IAM system for access control.",
+          "type": "string",
+          "enumDescriptions": [
+            "Default non-attribute type",
+            "Region of the resource",
+            "Service name",
+            "Resource name",
+            "IP address of the caller"
+          ]
+        },
+        "values": {
+          "description": "The objects of the condition. This is mutually exclusive with 'value'.",
+          "type": "array",
+          "items": {
+            "type": "string"
+          }
+        },
+        "iam": {
+          "type": "string",
+          "enumDescriptions": [
+            "Default non-attribute.",
+            "Either principal or (if present) authority selector.",
+            "The principal (even if an authority selector is present), which\nmust only be used for attribution, not authorization.",
+            "An approver (distinct from the requester) that has authorized this\nrequest.\nWhen used with IN, the condition indicates that one of the approvers\nassociated with the request matches the specified principal, or is a\nmember of the specified group. Approvers can only grant additional\naccess, and are thus only used in a strictly positive context\n(e.g. ALLOW/IN or DENY/NOT_IN).\nSee: go/rpc-security-policy-dynamicauth.",
+            "What types of justifications have been supplied with this request.\nString values should match enum names from tech.iam.JustificationType,\ne.g. \"MANUAL_STRING\". It is not permitted to grant access based on\nthe *absence* of a justification, so justification conditions can only\nbe used in a \"positive\" context (e.g., ALLOW/IN or DENY/NOT_IN).\n\nMultiple justifications, e.g., a Buganizer ID and a manually-entered\nreason, are normal and supported."
+          ],
+          "enum": [
+            "NO_ATTR",
+            "AUTHORITY",
+            "ATTRIBUTION",
+            "APPROVER",
+            "JUSTIFICATION_TYPE"
+          ],
+          "description": "Trusted attributes supplied by the IAM system."
+        },
         "op": {
+          "type": "string",
           "enumDescriptions": [
             "Default no-op.",
             "DEPRECATED. Use IN instead.",
@@ -330,97 +218,22 @@
             "NOT_IN",
             "DISCHARGED"
           ],
-          "description": "An operator to apply the subject with.",
-          "type": "string"
+          "description": "An operator to apply the subject with."
         },
         "svc": {
           "description": "Trusted attributes discharged by the service.",
           "type": "string"
-        },
-        "value": {
-          "description": "DEPRECATED. Use 'values' instead.",
-          "type": "string"
-        },
-        "sys": {
-          "description": "Trusted attributes supplied by any service that owns resources and uses\nthe IAM system for access control.",
-          "type": "string",
-          "enumDescriptions": [
-            "Default non-attribute type",
-            "Region of the resource",
-            "Service name",
-            "Resource name",
-            "IP address of the caller"
-          ],
-          "enum": [
-            "NO_ATTR",
-            "REGION",
-            "SERVICE",
-            "NAME",
-            "IP"
-          ]
-        },
-        "values": {
-          "description": "The objects of the condition. This is mutually exclusive with 'value'.",
-          "type": "array",
-          "items": {
-            "type": "string"
-          }
-        },
-        "iam": {
-          "enumDescriptions": [
-            "Default non-attribute.",
-            "Either principal or (if present) authority selector.",
-            "The principal (even if an authority selector is present), which\nmust only be used for attribution, not authorization.",
-            "An approver (distinct from the requester) that has authorized this\nrequest.\nWhen used with IN, the condition indicates that one of the approvers\nassociated with the request matches the specified principal, or is a\nmember of the specified group. Approvers can only grant additional\naccess, and are thus only used in a strictly positive context\n(e.g. ALLOW/IN or DENY/NOT_IN).\nSee: go/rpc-security-policy-dynamicauth.",
-            "What types of justifications have been supplied with this request.\nString values should match enum names from tech.iam.JustificationType,\ne.g. \"MANUAL_STRING\". It is not permitted to grant access based on\nthe *absence* of a justification, so justification conditions can only\nbe used in a \"positive\" context (e.g., ALLOW/IN or DENY/NOT_IN).\n\nMultiple justifications, e.g., a Buganizer ID and a manually-entered\nreason, are normal and supported."
-          ],
-          "enum": [
-            "NO_ATTR",
-            "AUTHORITY",
-            "ATTRIBUTION",
-            "APPROVER",
-            "JUSTIFICATION_TYPE"
-          ],
-          "description": "Trusted attributes supplied by the IAM system.",
-          "type": "string"
-        }
-      }
-    },
-    "ListReposResponse": {
-      "description": "Response for ListRepos.",
-      "type": "object",
-      "properties": {
-        "repos": {
-          "description": "The listed repos.",
-          "type": "array",
-          "items": {
-            "$ref": "Repo"
-          }
         }
       },
-      "id": "ListReposResponse"
-    },
-    "TestIamPermissionsResponse": {
-      "id": "TestIamPermissionsResponse",
-      "description": "Response message for `TestIamPermissions` method.",
-      "type": "object",
-      "properties": {
-        "permissions": {
-          "description": "A subset of `TestPermissionsRequest.permissions` that the caller is\nallowed.",
-          "type": "array",
-          "items": {
-            "type": "string"
-          }
-        }
-      }
+      "id": "Condition"
     },
     "CounterOptions": {
       "description": "Options for counters",
       "type": "object",
       "properties": {
         "metric": {
-          "description": "The metric to update.",
-          "type": "string"
+          "type": "string",
+          "description": "The metric to update."
         },
         "field": {
           "description": "The field value to attribute.",
@@ -441,7 +254,6 @@
           }
         },
         "logType": {
-          "description": "The log type that this config enables.",
           "type": "string",
           "enumDescriptions": [
             "Default case. Should never be this.",
@@ -454,26 +266,15 @@
             "ADMIN_READ",
             "DATA_WRITE",
             "DATA_READ"
-          ]
+          ],
+          "description": "The log type that this config enables."
         }
       },
       "id": "AuditLogConfig"
     },
     "Rule": {
-      "description": "A rule to be applied in a Policy.",
       "type": "object",
       "properties": {
-        "notIn": {
-          "description": "If one or more 'not_in' clauses are specified, the rule matches\nif the PRINCIPAL/AUTHORITY_SELECTOR is in none of the entries.\nThe format for in and not_in entries is the same as for members in a\nBinding (see google/iam/v1/policy.proto).",
-          "type": "array",
-          "items": {
-            "type": "string"
-          }
-        },
-        "description": {
-          "description": "Human-readable description of the rule.",
-          "type": "string"
-        },
         "conditions": {
           "description": "Additional restrictions that must be met",
           "type": "array",
@@ -489,20 +290,21 @@
           }
         },
         "in": {
-          "description": "If one or more 'in' clauses are specified, the rule matches if\nthe PRINCIPAL/AUTHORITY_SELECTOR is in at least one of these entries.",
           "type": "array",
           "items": {
             "type": "string"
-          }
+          },
+          "description": "If one or more 'in' clauses are specified, the rule matches if\nthe PRINCIPAL/AUTHORITY_SELECTOR is in at least one of these entries."
         },
         "permissions": {
-          "description": "A permission is a string of form '\u003cservice\u003e.\u003cresource type\u003e.\u003cverb\u003e'\n(e.g., 'storage.buckets.list'). A value of '*' matches all permissions,\nand a verb part of '*' (e.g., 'storage.buckets.*') matches all verbs.",
           "type": "array",
           "items": {
             "type": "string"
-          }
+          },
+          "description": "A permission is a string of form '\u003cservice\u003e.\u003cresource type\u003e.\u003cverb\u003e'\n(e.g., 'storage.buckets.list'). A value of '*' matches all permissions,\nand a verb part of '*' (e.g., 'storage.buckets.*') matches all verbs."
         },
         "action": {
+          "type": "string",
           "enumDescriptions": [
             "Default no action.",
             "Matching 'Entries' grant access.",
@@ -519,41 +321,52 @@
             "DENY_WITH_LOG",
             "LOG"
           ],
-          "description": "Required",
-          "type": "string"
+          "description": "Required"
+        },
+        "notIn": {
+          "description": "If one or more 'not_in' clauses are specified, the rule matches\nif the PRINCIPAL/AUTHORITY_SELECTOR is in none of the entries.\nThe format for in and not_in entries is the same as for members in a\nBinding (see google/iam/v1/policy.proto).",
+          "type": "array",
+          "items": {
+            "type": "string"
+          }
+        },
+        "description": {
+          "type": "string",
+          "description": "Human-readable description of the rule."
         }
       },
-      "id": "Rule"
+      "id": "Rule",
+      "description": "A rule to be applied in a Policy."
     },
     "LogConfig": {
-      "id": "LogConfig",
-      "description": "Specifies what kind of log the caller must write\nIncrement a streamz counter with the specified metric and field names.\n\nMetric names should start with a '/', generally be lowercase-only,\nand end in \"_count\". Field names should not contain an initial slash.\nThe actual exported metric names will have \"/iam/policy\" prepended.\n\nField names correspond to IAM request parameters and field values are\ntheir respective values.\n\nAt present the only supported field names are\n   - \"iam_principal\", corresponding to IAMContext.principal;\n   - \"\" (empty string), resulting in one aggretated counter with no field.\n\nExamples:\n  counter { metric: \"/debug_access_count\"  field: \"iam_principal\" }\n  ==\u003e increment counter /iam/policy/backend_debug_access_count\n                        {iam_principal=[value of IAMContext.principal]}\n\nAt this time we do not support:\n* multiple field names (though this may be supported in the future)\n* decrementing the counter\n* incrementing it by anything other than 1",
+      "description": "Specifies what kind of log the caller must write",
       "type": "object",
       "properties": {
-        "cloudAudit": {
-          "$ref": "CloudAuditOptions",
-          "description": "Cloud audit options."
-        },
         "counter": {
-          "description": "Counter options.",
-          "$ref": "CounterOptions"
+          "$ref": "CounterOptions",
+          "description": "Counter options."
         },
         "dataAccess": {
           "$ref": "DataAccessOptions",
           "description": "Data access options."
+        },
+        "cloudAudit": {
+          "$ref": "CloudAuditOptions",
+          "description": "Cloud audit options."
         }
-      }
+      },
+      "id": "LogConfig"
     },
     "TestIamPermissionsRequest": {
       "description": "Request message for `TestIamPermissions` method.",
       "type": "object",
       "properties": {
         "permissions": {
-          "description": "The set of permissions to check for the `resource`. Permissions with\nwildcards (such as '*' or 'storage.*') are not allowed. For more\ninformation see\n[IAM Overview](https://cloud.google.com/iam/docs/overview#permissions).",
           "type": "array",
           "items": {
             "type": "string"
-          }
+          },
+          "description": "The set of permissions to check for the `resource`. Permissions with\nwildcards (such as '*' or 'storage.*') are not allowed. For more\ninformation see\n[IAM Overview](https://cloud.google.com/iam/docs/overview#permissions)."
         }
       },
       "id": "TestIamPermissionsRequest"
@@ -562,6 +375,9 @@
       "description": "Defines an Identity and Access Management (IAM) policy. It is used to\nspecify access control policies for Cloud Platform resources.\n\n\nA `Policy` consists of a list of `bindings`. A `Binding` binds a list of\n`members` to a `role`, where the members can be user accounts, Google groups,\nGoogle domains, and service accounts. A `role` is a named list of permissions\ndefined by IAM.\n\n**Example**\n\n    {\n      \"bindings\": [\n        {\n          \"role\": \"roles/owner\",\n          \"members\": [\n            \"user:mike@example.com\",\n            \"group:admins@example.com\",\n            \"domain:google.com\",\n            \"serviceAccount:my-other-app@appspot.gserviceaccount.com\",\n          ]\n        },\n        {\n          \"role\": \"roles/viewer\",\n          \"members\": [\"user:sean@example.com\"]\n        }\n      ]\n    }\n\nFor a description of IAM and its features, see the\n[IAM developer's guide](https://cloud.google.com/iam).",
       "type": "object",
       "properties": {
+        "iamOwned": {
+          "type": "boolean"
+        },
         "rules": {
           "description": "If more than one rule is specified, the rules are applied in the following\nmanner:\n- All matching LOG rules are always applied.\n- If any DENY/DENY_WITH_LOG rule matches, permission is denied.\n  Logging will be applied if one or more matching rule requires logging.\n- Otherwise, if any ALLOW/ALLOW_WITH_LOG rule matches, permission is\n  granted.\n  Logging will be applied if one or more matching rule requires logging.\n- Otherwise, if no rule applies, permission is denied.",
           "type": "array",
@@ -575,154 +391,338 @@
           "type": "integer"
         },
         "auditConfigs": {
-          "description": "Specifies cloud audit logging configuration for this policy.",
           "type": "array",
           "items": {
             "$ref": "AuditConfig"
-          }
+          },
+          "description": "Specifies cloud audit logging configuration for this policy."
         },
         "bindings": {
-          "description": "Associates a list of `members` to a `role`.\nMultiple `bindings` must not be specified for the same `role`.\n`bindings` with no members will result in an error.",
           "type": "array",
           "items": {
             "$ref": "Binding"
-          }
+          },
+          "description": "Associates a list of `members` to a `role`.\nMultiple `bindings` must not be specified for the same `role`.\n`bindings` with no members will result in an error."
         },
         "etag": {
+          "type": "string",
           "description": "`etag` is used for optimistic concurrency control as a way to help\nprevent simultaneous updates of a policy from overwriting each other.\nIt is strongly suggested that systems make use of the `etag` in the\nread-modify-write cycle to perform policy updates in order to avoid race\nconditions: An `etag` is returned in the response to `getIamPolicy`, and\nsystems are expected to put that etag in the request to `setIamPolicy` to\nensure that their change will be applied to the same version of the policy.\n\nIf no `etag` is provided in the call to `setIamPolicy`, then the existing\npolicy is overwritten blindly.",
-          "format": "byte",
-          "type": "string"
-        },
-        "iamOwned": {
-          "type": "boolean"
+          "format": "byte"
         }
       },
       "id": "Policy"
-    },
-    "DataAccessOptions": {
-      "description": "Write a Data Access (Gin) log",
-      "type": "object",
-      "properties": {},
-      "id": "DataAccessOptions"
-    },
-    "AuditConfig": {
-      "description": "Specifies the audit configuration for a service.\nThe configuration determines which permission types are logged, and what\nidentities, if any, are exempted from logging.\nAn AuditConifg must have one or more AuditLogConfigs.\n\nIf there are AuditConfigs for both `allServices` and a specific service,\nthe union of the two AuditConfigs is used for that service: the log_types\nspecified in each AuditConfig are enabled, and the exempted_members in each\nAuditConfig are exempted.\nExample Policy with multiple AuditConfigs:\n{\n  \"audit_configs\": [\n    {\n      \"service\": \"allServices\"\n      \"audit_log_configs\": [\n        {\n          \"log_type\": \"DATA_READ\",\n          \"exempted_members\": [\n            \"user:foo@gmail.com\"\n          ]\n        },\n        {\n          \"log_type\": \"DATA_WRITE\",\n        },\n        {\n          \"log_type\": \"ADMIN_READ\",\n        }\n      ]\n    },\n    {\n      \"service\": \"fooservice@googleapis.com\"\n      \"audit_log_configs\": [\n        {\n          \"log_type\": \"DATA_READ\",\n        },\n        {\n          \"log_type\": \"DATA_WRITE\",\n          \"exempted_members\": [\n            \"user:bar@gmail.com\"\n          ]\n        }\n      ]\n    }\n  ]\n}\nFor fooservice, this policy enables DATA_READ, DATA_WRITE and ADMIN_READ\nlogging. It also exempts foo@gmail.com from DATA_READ logging, and\nbar@gmail.com from DATA_WRITE logging.",
-      "type": "object",
-      "properties": {
-        "exemptedMembers": {
-          "type": "array",
-          "items": {
-            "type": "string"
-          }
-        },
-        "service": {
-          "description": "Specifies a service that will be enabled for audit logging.\nFor example, `resourcemanager`, `storage`, `compute`.\n`allServices` is a special value that covers all services.",
-          "type": "string"
-        },
-        "auditLogConfigs": {
-          "description": "The configuration for logging of each type of permission.\nNext ID: 4",
-          "type": "array",
-          "items": {
-            "$ref": "AuditLogConfig"
-          }
-        }
-      },
-      "id": "AuditConfig"
-    },
-    "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\nthe policy is limited to a few 10s of KB. An empty policy is a\nvalid policy but certain Cloud Platform services (such as Projects)\nmight reject them.",
-          "$ref": "Policy"
-        },
-        "updateMask": {
-          "description": "OPTIONAL: A FieldMask specifying which fields of the policy to modify. Only\nthe fields in the mask will be modified. If no mask is provided, the\nfollowing default mask is used:\npaths: \"bindings, etag\"\nThis field is only used by Cloud IAM.",
-          "format": "google-fieldmask",
-          "type": "string"
-        }
-      },
-      "id": "SetIamPolicyRequest"
-    },
-    "CloudAuditOptions": {
-      "description": "Write a Cloud Audit log",
-      "type": "object",
-      "properties": {},
-      "id": "CloudAuditOptions"
-    },
-    "Binding": {
-      "description": "Associates `members` with a `role`.",
-      "type": "object",
-      "properties": {
-        "members": {
-          "description": "Specifies the identities requesting access for a Cloud Platform resource.\n`members` can have the following values:\n\n* `allUsers`: A special identifier that represents anyone who is\n   on the internet; with or without a Google account.\n\n* `allAuthenticatedUsers`: A special identifier that represents anyone\n   who is authenticated with a Google account or a service account.\n\n* `user:{emailid}`: An email address that represents a specific Google\n   account. For example, `alice@gmail.com` or `joe@example.com`.\n\n\n* `serviceAccount:{emailid}`: An email address that represents a service\n   account. For example, `my-other-app@appspot.gserviceaccount.com`.\n\n* `group:{emailid}`: An email address that represents a Google group.\n   For example, `admins@example.com`.\n\n* `domain:{domain}`: A Google Apps domain name that represents all the\n   users of that domain. For example, `google.com` or `example.com`.\n\n",
-          "type": "array",
-          "items": {
-            "type": "string"
-          }
-        },
-        "role": {
-          "description": "Role that is assigned to `members`.\nFor example, `roles/viewer`, `roles/editor`, or `roles/owner`.\nRequired",
-          "type": "string"
-        }
-      },
-      "id": "Binding"
-    },
-    "MirrorConfig": {
-      "description": "Configuration to automatically mirror a repository from another\nhosting service, for example GitHub or BitBucket.",
-      "type": "object",
-      "properties": {
-        "url": {
-          "description": "URL of the main repository at the other hosting service.",
-          "type": "string"
-        },
-        "webhookId": {
-          "description": "ID of the webhook listening to updates to trigger mirroring.\nRemoving this webook from the other hosting service will stop\nGoogle Cloud Source Repositories from receiving notifications,\nand thereby disabling mirroring.",
-          "type": "string"
-        },
-        "deployKeyId": {
-          "description": "ID of the SSH deploy key at the other hosting service.\nRemoving this key from the other service would deauthorize\nGoogle Cloud Source Repositories from mirroring.",
-          "type": "string"
-        }
-      },
-      "id": "MirrorConfig"
-    },
-    "Empty": {
-      "description": "A generic empty message that you can re-use to avoid defining duplicated\nempty messages in your APIs. A typical example is to use it as the request\nor the response type of an API method. For instance:\n\n    service Foo {\n      rpc Bar(google.protobuf.Empty) returns (google.protobuf.Empty);\n    }\n\nThe JSON representation for `Empty` is empty JSON object `{}`.",
-      "type": "object",
-      "properties": {},
-      "id": "Empty"
-    },
-    "Repo": {
-      "id": "Repo",
-      "description": "A repository (or repo) is a Git repository storing versioned source content.",
-      "type": "object",
-      "properties": {
-        "url": {
-          "description": "URL to clone the repository from Google Cloud Source Repositories.",
-          "type": "string"
-        },
-        "size": {
-          "description": "The size in bytes of the repo.",
-          "format": "int64",
-          "type": "string"
-        },
-        "name": {
-          "description": "Resource name of the repository, of the form\n`projects/\u003cproject\u003e/repos/\u003crepo\u003e`.",
-          "type": "string"
-        },
-        "mirrorConfig": {
-          "$ref": "MirrorConfig",
-          "description": "How this repository mirrors a repository managed by another service."
-        }
-      }
     }
   },
+  "protocol": "rest",
   "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",
-  "canonicalName": "Cloud Source Repositories"
+  "canonicalName": "Cloud Source Repositories",
+  "auth": {
+    "oauth2": {
+      "scopes": {
+        "https://www.googleapis.com/auth/cloud-platform": {
+          "description": "View and manage your data across Google Cloud Platform services"
+        }
+      }
+    }
+  },
+  "rootUrl": "https://sourcerepo.googleapis.com/",
+  "ownerDomain": "google.com",
+  "name": "sourcerepo",
+  "batchPath": "batch",
+  "title": "Cloud Source Repositories API",
+  "ownerName": "Google",
+  "resources": {
+    "projects": {
+      "resources": {
+        "repos": {
+          "methods": {
+            "get": {
+              "description": "Returns information about a repo.",
+              "response": {
+                "$ref": "Repo"
+              },
+              "parameterOrder": [
+                "name"
+              ],
+              "httpMethod": "GET",
+              "scopes": [
+                "https://www.googleapis.com/auth/cloud-platform"
+              ],
+              "parameters": {
+                "name": {
+                  "location": "path",
+                  "description": "The name of the requested repository. Values are of the form\n`projects/\u003cproject\u003e/repos/\u003crepo\u003e`.",
+                  "required": true,
+                  "type": "string",
+                  "pattern": "^projects/[^/]+/repos/.+$"
+                }
+              },
+              "flatPath": "v1/projects/{projectsId}/repos/{reposId}",
+              "path": "v1/{+name}",
+              "id": "sourcerepo.projects.repos.get"
+            },
+            "testIamPermissions": {
+              "response": {
+                "$ref": "TestIamPermissionsResponse"
+              },
+              "parameterOrder": [
+                "resource"
+              ],
+              "httpMethod": "POST",
+              "parameters": {
+                "resource": {
+                  "location": "path",
+                  "description": "REQUIRED: The resource for which the policy detail is being requested.\nSee the operation documentation for the appropriate value for this field.",
+                  "required": true,
+                  "type": "string",
+                  "pattern": "^projects/[^/]+/repos/.+$"
+                }
+              },
+              "scopes": [
+                "https://www.googleapis.com/auth/cloud-platform"
+              ],
+              "flatPath": "v1/projects/{projectsId}/repos/{reposId}:testIamPermissions",
+              "path": "v1/{+resource}:testIamPermissions",
+              "id": "sourcerepo.projects.repos.testIamPermissions",
+              "request": {
+                "$ref": "TestIamPermissionsRequest"
+              },
+              "description": "Returns permissions that a caller has on the specified resource.\nIf the resource does not exist, this will return an empty set of\npermissions, not a NOT_FOUND error."
+            },
+            "delete": {
+              "description": "Deletes a repo.",
+              "response": {
+                "$ref": "Empty"
+              },
+              "parameterOrder": [
+                "name"
+              ],
+              "httpMethod": "DELETE",
+              "parameters": {
+                "name": {
+                  "required": true,
+                  "type": "string",
+                  "pattern": "^projects/[^/]+/repos/.+$",
+                  "location": "path",
+                  "description": "The name of the repo to delete. Values are of the form\n`projects/\u003cproject\u003e/repos/\u003crepo\u003e`."
+                }
+              },
+              "scopes": [
+                "https://www.googleapis.com/auth/cloud-platform"
+              ],
+              "flatPath": "v1/projects/{projectsId}/repos/{reposId}",
+              "path": "v1/{+name}",
+              "id": "sourcerepo.projects.repos.delete"
+            },
+            "list": {
+              "httpMethod": "GET",
+              "response": {
+                "$ref": "ListReposResponse"
+              },
+              "parameterOrder": [
+                "name"
+              ],
+              "scopes": [
+                "https://www.googleapis.com/auth/cloud-platform"
+              ],
+              "parameters": {
+                "name": {
+                  "required": true,
+                  "type": "string",
+                  "pattern": "^projects/[^/]+$",
+                  "location": "path",
+                  "description": "The project ID whose repos should be listed. Values are of the form\n`projects/\u003cproject\u003e`."
+                }
+              },
+              "flatPath": "v1/projects/{projectsId}/repos",
+              "id": "sourcerepo.projects.repos.list",
+              "path": "v1/{+name}/repos",
+              "description": "Returns all repos belonging to a project."
+            },
+            "setIamPolicy": {
+              "description": "Sets the access control policy on the specified resource. Replaces any\nexisting policy.",
+              "request": {
+                "$ref": "SetIamPolicyRequest"
+              },
+              "response": {
+                "$ref": "Policy"
+              },
+              "parameterOrder": [
+                "resource"
+              ],
+              "httpMethod": "POST",
+              "scopes": [
+                "https://www.googleapis.com/auth/cloud-platform"
+              ],
+              "parameters": {
+                "resource": {
+                  "location": "path",
+                  "description": "REQUIRED: The resource for which the policy is being specified.\nSee the operation documentation for the appropriate value for this field.",
+                  "required": true,
+                  "type": "string",
+                  "pattern": "^projects/[^/]+/repos/.+$"
+                }
+              },
+              "flatPath": "v1/projects/{projectsId}/repos/{reposId}:setIamPolicy",
+              "path": "v1/{+resource}:setIamPolicy",
+              "id": "sourcerepo.projects.repos.setIamPolicy"
+            },
+            "create": {
+              "request": {
+                "$ref": "Repo"
+              },
+              "description": "Creates a repo in the given project with the given name..\n\nIf the named repository already exists, `CreateRepo` returns\n`ALREADY_EXISTS`.",
+              "response": {
+                "$ref": "Repo"
+              },
+              "parameterOrder": [
+                "parent"
+              ],
+              "httpMethod": "POST",
+              "parameters": {
+                "parent": {
+                  "required": true,
+                  "type": "string",
+                  "pattern": "^projects/[^/]+$",
+                  "location": "path",
+                  "description": "The project in which to create the repo. Values are of the form\n`projects/\u003cproject\u003e`."
+                }
+              },
+              "scopes": [
+                "https://www.googleapis.com/auth/cloud-platform"
+              ],
+              "flatPath": "v1/projects/{projectsId}/repos",
+              "path": "v1/{+parent}/repos",
+              "id": "sourcerepo.projects.repos.create"
+            },
+            "getIamPolicy": {
+              "response": {
+                "$ref": "Policy"
+              },
+              "parameterOrder": [
+                "resource"
+              ],
+              "httpMethod": "GET",
+              "parameters": {
+                "resource": {
+                  "location": "path",
+                  "description": "REQUIRED: The resource for which the policy is being requested.\nSee the operation documentation for the appropriate value for this field.",
+                  "required": true,
+                  "type": "string",
+                  "pattern": "^projects/[^/]+/repos/.+$"
+                }
+              },
+              "scopes": [
+                "https://www.googleapis.com/auth/cloud-platform"
+              ],
+              "flatPath": "v1/projects/{projectsId}/repos/{reposId}:getIamPolicy",
+              "path": "v1/{+resource}:getIamPolicy",
+              "id": "sourcerepo.projects.repos.getIamPolicy",
+              "description": "Gets the access control policy for a resource.\nReturns an empty policy if the resource exists and does not have a policy\nset."
+            }
+          }
+        }
+      }
+    }
+  },
+  "parameters": {
+    "upload_protocol": {
+      "location": "query",
+      "description": "Upload protocol for media (e.g. \"raw\", \"multipart\").",
+      "type": "string"
+    },
+    "prettyPrint": {
+      "location": "query",
+      "description": "Returns response with indentations and line breaks.",
+      "type": "boolean",
+      "default": "true"
+    },
+    "uploadType": {
+      "location": "query",
+      "description": "Legacy upload protocol for media (e.g. \"media\", \"multipart\").",
+      "type": "string"
+    },
+    "fields": {
+      "type": "string",
+      "location": "query",
+      "description": "Selector specifying which fields to include in a partial response."
+    },
+    "$.xgafv": {
+      "location": "query",
+      "enum": [
+        "1",
+        "2"
+      ],
+      "description": "V1 error format.",
+      "type": "string",
+      "enumDescriptions": [
+        "v1 error format",
+        "v2 error format"
+      ]
+    },
+    "callback": {
+      "type": "string",
+      "location": "query",
+      "description": "JSONP"
+    },
+    "alt": {
+      "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",
+      "description": "Data format for response."
+    },
+    "access_token": {
+      "type": "string",
+      "location": "query",
+      "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."
+    },
+    "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."
+    },
+    "pp": {
+      "location": "query",
+      "description": "Pretty-print response.",
+      "type": "boolean",
+      "default": "true"
+    },
+    "oauth_token": {
+      "location": "query",
+      "description": "OAuth 2.0 token for the current user.",
+      "type": "string"
+    },
+    "bearer_token": {
+      "location": "query",
+      "description": "OAuth bearer token.",
+      "type": "string"
+    }
+  },
+  "version": "v1",
+  "baseUrl": "https://sourcerepo.googleapis.com/",
+  "servicePath": "",
+  "description": "Access source code repositories hosted by Google.",
+  "kind": "discovery#restDescription",
+  "basePath": "",
+  "documentationLink": "https://cloud.google.com/eap/cloud-repositories/cloud-sourcerepo-api",
+  "revision": "20170321",
+  "id": "sourcerepo:v1"
 }
diff --git a/sourcerepo/v1/sourcerepo-gen.go b/sourcerepo/v1/sourcerepo-gen.go
index b9cc213..74188ca 100644
--- a/sourcerepo/v1/sourcerepo-gen.go
+++ b/sourcerepo/v1/sourcerepo-gen.go
@@ -61,10 +61,9 @@
 }
 
 type Service struct {
-	client                    *http.Client
-	BasePath                  string // API endpoint base URL
-	UserAgent                 string // optional additional User-Agent fragment
-	GoogleClientHeaderElement string // client header fragment, for Google use only
+	client    *http.Client
+	BasePath  string // API endpoint base URL
+	UserAgent string // optional additional User-Agent fragment
 
 	Projects *ProjectsService
 }
@@ -76,10 +75,6 @@
 	return googleapi.UserAgent + " " + s.UserAgent
 }
 
-func (s *Service) clientHeader() string {
-	return gensupport.GoogleClientHeader("20170210", s.GoogleClientHeaderElement)
-}
-
 func NewProjectsService(s *Service) *ProjectsService {
 	rs := &ProjectsService{s: s}
 	rs.Repos = NewProjectsReposService(s)
@@ -165,7 +160,8 @@
 
 	// Service: Specifies a service that will be enabled for audit
 	// logging.
-	// For example, `resourcemanager`, `storage`, `compute`.
+	// For example, `storage.googleapis.com`,
+	// `cloudsql.googleapis.com`.
 	// `allServices` is a special value that covers all services.
 	Service string `json:"service,omitempty"`
 
@@ -507,35 +503,6 @@
 }
 
 // LogConfig: Specifies what kind of log the caller must write
-// Increment a streamz counter with the specified metric and field
-// names.
-//
-// Metric names should start with a '/', generally be
-// lowercase-only,
-// and end in "_count". Field names should not contain an initial
-// slash.
-// The actual exported metric names will have "/iam/policy"
-// prepended.
-//
-// Field names correspond to IAM request parameters and field values
-// are
-// their respective values.
-//
-// At present the only supported field names are
-//    - "iam_principal", corresponding to IAMContext.principal;
-//    - "" (empty string), resulting in one aggretated counter with no
-// field.
-//
-// Examples:
-//   counter { metric: "/debug_access_count"  field: "iam_principal" }
-//   ==> increment counter /iam/policy/backend_debug_access_count
-//                         {iam_principal=[value of
-// IAMContext.principal]}
-//
-// At this time we do not support:
-// * multiple field names (though this may be supported in the future)
-// * decrementing the counter
-// * incrementing it by anything other than 1
 type LogConfig struct {
 	// CloudAudit: Cloud audit options.
 	CloudAudit *CloudAuditOptions `json:"cloudAudit,omitempty"`
@@ -1008,7 +975,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	var body io.Reader = nil
 	body, err := googleapi.WithoutDataWrapper.JSONReader(c.repo)
 	if err != nil {
@@ -1142,7 +1108,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	var body io.Reader = nil
 	c.urlParams_.Set("alt", alt)
 	urls := googleapi.ResolveRelative(c.s.BasePath, "v1/{+name}")
@@ -1279,7 +1244,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	if c.ifNoneMatch_ != "" {
 		reqHeaders.Set("If-None-Match", c.ifNoneMatch_)
 	}
@@ -1422,7 +1386,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	if c.ifNoneMatch_ != "" {
 		reqHeaders.Set("If-None-Match", c.ifNoneMatch_)
 	}
@@ -1562,7 +1525,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	if c.ifNoneMatch_ != "" {
 		reqHeaders.Set("If-None-Match", c.ifNoneMatch_)
 	}
@@ -1695,7 +1657,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	var body io.Reader = nil
 	body, err := googleapi.WithoutDataWrapper.JSONReader(c.setiampolicyrequest)
 	if err != nil {
@@ -1835,7 +1796,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	var body io.Reader = nil
 	body, err := googleapi.WithoutDataWrapper.JSONReader(c.testiampermissionsrequest)
 	if err != nil {
diff --git a/spanner/v1/spanner-api.json b/spanner/v1/spanner-api.json
index 36e8342..46d1df2 100644
--- a/spanner/v1/spanner-api.json
+++ b/spanner/v1/spanner-api.json
@@ -1,7 +1,2609 @@
 {
-  "error": {
-    "code": 404,
-    "message": "Method GetDiscoveryRest not found for service spanner.googleapis.com",
-    "status": "NOT_FOUND"
-  }
+  "resources": {
+    "projects": {
+      "resources": {
+        "instanceConfigs": {
+          "methods": {
+            "list": {
+              "flatPath": "v1/projects/{projectsId}/instanceConfigs",
+              "id": "spanner.projects.instanceConfigs.list",
+              "path": "v1/{+parent}/instanceConfigs",
+              "description": "Lists the supported instance configurations for a given project.",
+              "httpMethod": "GET",
+              "parameterOrder": [
+                "parent"
+              ],
+              "response": {
+                "$ref": "ListInstanceConfigsResponse"
+              },
+              "parameters": {
+                "pageToken": {
+                  "location": "query",
+                  "description": "If non-empty, `page_token` should contain a\nnext_page_token\nfrom a previous ListInstanceConfigsResponse.",
+                  "type": "string"
+                },
+                "pageSize": {
+                  "type": "integer",
+                  "location": "query",
+                  "description": "Number of instance configurations to be returned in the response. If 0 or\nless, defaults to the server's maximum allowed page size.",
+                  "format": "int32"
+                },
+                "parent": {
+                  "location": "path",
+                  "description": "Required. The name of the project for which a list of supported instance\nconfigurations is requested. Values are of the form\n`projects/\u003cproject\u003e`.",
+                  "required": true,
+                  "type": "string",
+                  "pattern": "^projects/[^/]+$"
+                }
+              },
+              "scopes": [
+                "https://www.googleapis.com/auth/cloud-platform"
+              ]
+            },
+            "get": {
+              "flatPath": "v1/projects/{projectsId}/instanceConfigs/{instanceConfigsId}",
+              "id": "spanner.projects.instanceConfigs.get",
+              "path": "v1/{+name}",
+              "description": "Gets information about a particular instance configuration.",
+              "httpMethod": "GET",
+              "parameterOrder": [
+                "name"
+              ],
+              "response": {
+                "$ref": "InstanceConfig"
+              },
+              "scopes": [
+                "https://www.googleapis.com/auth/cloud-platform"
+              ],
+              "parameters": {
+                "name": {
+                  "location": "path",
+                  "description": "Required. The name of the requested instance configuration. Values are of\nthe form `projects/\u003cproject\u003e/instanceConfigs/\u003cconfig\u003e`.",
+                  "required": true,
+                  "type": "string",
+                  "pattern": "^projects/[^/]+/instanceConfigs/[^/]+$"
+                }
+              }
+            }
+          }
+        },
+        "instances": {
+          "methods": {
+            "getIamPolicy": {
+              "description": "Gets the access control policy for an instance resource. Returns an empty\npolicy if an instance exists but does not have a policy set.\n\nAuthorization requires `spanner.instances.getIamPolicy` on\nresource.",
+              "request": {
+                "$ref": "GetIamPolicyRequest"
+              },
+              "httpMethod": "POST",
+              "parameterOrder": [
+                "resource"
+              ],
+              "response": {
+                "$ref": "Policy"
+              },
+              "scopes": [
+                "https://www.googleapis.com/auth/cloud-platform"
+              ],
+              "parameters": {
+                "resource": {
+                  "location": "path",
+                  "description": "REQUIRED: The Cloud Spanner resource for which the policy is being retrieved. The format is `projects/\u003cproject ID\u003e/instances/\u003cinstance ID\u003e` for instance resources and `projects/\u003cproject ID\u003e/instances/\u003cinstance ID\u003e/databases/\u003cdatabase ID\u003e` for database resources.",
+                  "required": true,
+                  "type": "string",
+                  "pattern": "^projects/[^/]+/instances/[^/]+$"
+                }
+              },
+              "flatPath": "v1/projects/{projectsId}/instances/{instancesId}:getIamPolicy",
+              "id": "spanner.projects.instances.getIamPolicy",
+              "path": "v1/{+resource}:getIamPolicy"
+            },
+            "patch": {
+              "response": {
+                "$ref": "Operation"
+              },
+              "parameterOrder": [
+                "name"
+              ],
+              "httpMethod": "PATCH",
+              "parameters": {
+                "name": {
+                  "location": "path",
+                  "description": "Required. A unique identifier for the instance, which cannot be changed\nafter the instance is created. Values are of the form\n`projects/\u003cproject\u003e/instances/a-z*[a-z0-9]`. The final\nsegment of the name must be between 6 and 30 characters in length.",
+                  "required": true,
+                  "type": "string",
+                  "pattern": "^projects/[^/]+/instances/[^/]+$"
+                }
+              },
+              "scopes": [
+                "https://www.googleapis.com/auth/cloud-platform"
+              ],
+              "flatPath": "v1/projects/{projectsId}/instances/{instancesId}",
+              "path": "v1/{+name}",
+              "id": "spanner.projects.instances.patch",
+              "request": {
+                "$ref": "UpdateInstanceRequest"
+              },
+              "description": "Updates an instance, and begins allocating or releasing resources\nas requested. The returned long-running\noperation can be used to track the\nprogress of updating the instance. If the named instance does not\nexist, returns `NOT_FOUND`.\n\nImmediately upon completion of this request:\n\n  * For resource types for which a decrease in the instance's allocation\n    has been requested, billing is based on the newly-requested level.\n\nUntil completion of the returned operation:\n\n  * Cancelling the operation sets its metadata's\n    cancel_time, and begins\n    restoring resources to their pre-request values. The operation\n    is guaranteed to succeed at undoing all resource changes,\n    after which point it terminates with a `CANCELLED` status.\n  * All other attempts to modify the instance are rejected.\n  * Reading the instance via the API continues to give the pre-request\n    resource levels.\n\nUpon completion of the returned operation:\n\n  * Billing begins for all successfully-allocated resources (some types\n    may have lower than the requested levels).\n  * All newly-reserved resources are available for serving the instance's\n    tables.\n  * The instance's new resource levels are readable via the API.\n\nThe returned long-running operation will\nhave a name of the format `\u003cinstance_name\u003e/operations/\u003coperation_id\u003e` and\ncan be used to track the instance modification.  The\nmetadata field type is\nUpdateInstanceMetadata.\nThe response field type is\nInstance, if successful.\n\nAuthorization requires `spanner.instances.update` permission on\nresource name."
+            },
+            "get": {
+              "httpMethod": "GET",
+              "parameterOrder": [
+                "name"
+              ],
+              "response": {
+                "$ref": "Instance"
+              },
+              "parameters": {
+                "name": {
+                  "location": "path",
+                  "description": "Required. The name of the requested instance. Values are of the form\n`projects/\u003cproject\u003e/instances/\u003cinstance\u003e`.",
+                  "required": true,
+                  "type": "string",
+                  "pattern": "^projects/[^/]+/instances/[^/]+$"
+                }
+              },
+              "scopes": [
+                "https://www.googleapis.com/auth/cloud-platform"
+              ],
+              "flatPath": "v1/projects/{projectsId}/instances/{instancesId}",
+              "id": "spanner.projects.instances.get",
+              "path": "v1/{+name}",
+              "description": "Gets information about a particular instance."
+            },
+            "testIamPermissions": {
+              "httpMethod": "POST",
+              "parameterOrder": [
+                "resource"
+              ],
+              "response": {
+                "$ref": "TestIamPermissionsResponse"
+              },
+              "parameters": {
+                "resource": {
+                  "location": "path",
+                  "description": "REQUIRED: The Cloud Spanner resource for which permissions are being tested. The format is `projects/\u003cproject ID\u003e/instances/\u003cinstance ID\u003e` for instance resources and `projects/\u003cproject ID\u003e/instances/\u003cinstance ID\u003e/databases/\u003cdatabase ID\u003e` for database resources.",
+                  "required": true,
+                  "type": "string",
+                  "pattern": "^projects/[^/]+/instances/[^/]+$"
+                }
+              },
+              "scopes": [
+                "https://www.googleapis.com/auth/cloud-platform"
+              ],
+              "flatPath": "v1/projects/{projectsId}/instances/{instancesId}:testIamPermissions",
+              "id": "spanner.projects.instances.testIamPermissions",
+              "path": "v1/{+resource}:testIamPermissions",
+              "request": {
+                "$ref": "TestIamPermissionsRequest"
+              },
+              "description": "Returns permissions that the caller has on the specified instance resource.\n\nAttempting this RPC on a non-existent Cloud Spanner instance resource will\nresult in a NOT_FOUND error if the user has `spanner.instances.list`\npermission on the containing Google Cloud Project. Otherwise returns an\nempty set of permissions."
+            },
+            "delete": {
+              "response": {
+                "$ref": "Empty"
+              },
+              "parameterOrder": [
+                "name"
+              ],
+              "httpMethod": "DELETE",
+              "scopes": [
+                "https://www.googleapis.com/auth/cloud-platform"
+              ],
+              "parameters": {
+                "name": {
+                  "required": true,
+                  "type": "string",
+                  "pattern": "^projects/[^/]+/instances/[^/]+$",
+                  "location": "path",
+                  "description": "Required. The name of the instance to be deleted. Values are of the form\n`projects/\u003cproject\u003e/instances/\u003cinstance\u003e`"
+                }
+              },
+              "flatPath": "v1/projects/{projectsId}/instances/{instancesId}",
+              "path": "v1/{+name}",
+              "id": "spanner.projects.instances.delete",
+              "description": "Deletes an instance.\n\nImmediately upon completion of the request:\n\n  * Billing ceases for all of the instance's reserved resources.\n\nSoon afterward:\n\n  * The instance and *all of its databases* immediately and\n    irrevocably disappear from the API. All data in the databases\n    is permanently deleted."
+            },
+            "list": {
+              "description": "Lists all instances in the given project.",
+              "response": {
+                "$ref": "ListInstancesResponse"
+              },
+              "parameterOrder": [
+                "parent"
+              ],
+              "httpMethod": "GET",
+              "scopes": [
+                "https://www.googleapis.com/auth/cloud-platform"
+              ],
+              "parameters": {
+                "parent": {
+                  "required": true,
+                  "type": "string",
+                  "pattern": "^projects/[^/]+$",
+                  "location": "path",
+                  "description": "Required. The name of the project for which a list of instances is\nrequested. Values are of the form `projects/\u003cproject\u003e`."
+                },
+                "filter": {
+                  "location": "query",
+                  "description": "An expression for filtering the results of the request. Filter rules are\ncase insensitive. The fields eligible for filtering are:\n\n  * name\n  * display_name\n  * labels.key where key is the name of a label\n\nSome examples of using filters are:\n\n  * name:* --\u003e The instance has a name.\n  * name:Howl --\u003e The instance's name contains the string \"howl\".\n  * name:HOWL --\u003e Equivalent to above.\n  * NAME:howl --\u003e Equivalent to above.\n  * labels.env:* --\u003e The instance has the label \"env\".\n  * labels.env:dev --\u003e The instance has the label \"env\" and the value of\n                       the label contains the string \"dev\".\n  * name:howl labels.env:dev --\u003e The instance's name contains \"howl\" and\n                                 it has the label \"env\" with its value\n                                 containing \"dev\".",
+                  "type": "string"
+                },
+                "pageToken": {
+                  "location": "query",
+                  "description": "If non-empty, `page_token` should contain a\nnext_page_token from a\nprevious ListInstancesResponse.",
+                  "type": "string"
+                },
+                "pageSize": {
+                  "type": "integer",
+                  "location": "query",
+                  "description": "Number of instances to be returned in the response. If 0 or less, defaults\nto the server's maximum allowed page size.",
+                  "format": "int32"
+                }
+              },
+              "flatPath": "v1/projects/{projectsId}/instances",
+              "path": "v1/{+parent}/instances",
+              "id": "spanner.projects.instances.list"
+            },
+            "setIamPolicy": {
+              "httpMethod": "POST",
+              "parameterOrder": [
+                "resource"
+              ],
+              "response": {
+                "$ref": "Policy"
+              },
+              "scopes": [
+                "https://www.googleapis.com/auth/cloud-platform"
+              ],
+              "parameters": {
+                "resource": {
+                  "location": "path",
+                  "description": "REQUIRED: The Cloud Spanner resource for which the policy is being set. The format is `projects/\u003cproject ID\u003e/instances/\u003cinstance ID\u003e` for instance resources and `projects/\u003cproject ID\u003e/instances/\u003cinstance ID\u003e/databases/\u003cdatabase ID\u003e` for databases resources.",
+                  "required": true,
+                  "type": "string",
+                  "pattern": "^projects/[^/]+/instances/[^/]+$"
+                }
+              },
+              "flatPath": "v1/projects/{projectsId}/instances/{instancesId}:setIamPolicy",
+              "id": "spanner.projects.instances.setIamPolicy",
+              "path": "v1/{+resource}:setIamPolicy",
+              "description": "Sets the access control policy on an instance resource. Replaces any\nexisting policy.\n\nAuthorization requires `spanner.instances.setIamPolicy` on\nresource.",
+              "request": {
+                "$ref": "SetIamPolicyRequest"
+              }
+            },
+            "create": {
+              "flatPath": "v1/projects/{projectsId}/instances",
+              "id": "spanner.projects.instances.create",
+              "path": "v1/{+parent}/instances",
+              "description": "Creates an instance and begins preparing it to begin serving. The\nreturned long-running operation\ncan be used to track the progress of preparing the new\ninstance. The instance name is assigned by the caller. If the\nnamed instance already exists, `CreateInstance` returns\n`ALREADY_EXISTS`.\n\nImmediately upon completion of this request:\n\n  * The instance is readable via the API, with all requested attributes\n    but no allocated resources. Its state is `CREATING`.\n\nUntil completion of the returned operation:\n\n  * Cancelling the operation renders the instance immediately unreadable\n    via the API.\n  * The instance can be deleted.\n  * All other attempts to modify the instance are rejected.\n\nUpon completion of the returned operation:\n\n  * Billing for all successfully-allocated resources begins (some types\n    may have lower than the requested levels).\n  * Databases can be created in the instance.\n  * The instance's allocated resource levels are readable via the API.\n  * The instance's state becomes `READY`.\n\nThe returned long-running operation will\nhave a name of the format `\u003cinstance_name\u003e/operations/\u003coperation_id\u003e` and\ncan be used to track creation of the instance.  The\nmetadata field type is\nCreateInstanceMetadata.\nThe response field type is\nInstance, if successful.",
+              "request": {
+                "$ref": "CreateInstanceRequest"
+              },
+              "httpMethod": "POST",
+              "parameterOrder": [
+                "parent"
+              ],
+              "response": {
+                "$ref": "Operation"
+              },
+              "scopes": [
+                "https://www.googleapis.com/auth/cloud-platform"
+              ],
+              "parameters": {
+                "parent": {
+                  "location": "path",
+                  "description": "Required. The name of the project in which to create the instance. Values\nare of the form `projects/\u003cproject\u003e`.",
+                  "required": true,
+                  "type": "string",
+                  "pattern": "^projects/[^/]+$"
+                }
+              }
+            }
+          },
+          "resources": {
+            "operations": {
+              "methods": {
+                "list": {
+                  "description": "Lists operations that match the specified filter in the request. If the\nserver doesn't support this method, it returns `UNIMPLEMENTED`.\n\nNOTE: the `name` binding below allows API services to override the binding\nto use different resource name schemes, such as `users/*/operations`.",
+                  "response": {
+                    "$ref": "ListOperationsResponse"
+                  },
+                  "parameterOrder": [
+                    "name"
+                  ],
+                  "httpMethod": "GET",
+                  "scopes": [
+                    "https://www.googleapis.com/auth/cloud-platform"
+                  ],
+                  "parameters": {
+                    "name": {
+                      "required": true,
+                      "type": "string",
+                      "pattern": "^projects/[^/]+/instances/[^/]+/operations$",
+                      "location": "path",
+                      "description": "The name of the operation collection."
+                    },
+                    "pageToken": {
+                      "location": "query",
+                      "description": "The standard list page token.",
+                      "type": "string"
+                    },
+                    "pageSize": {
+                      "type": "integer",
+                      "location": "query",
+                      "description": "The standard list page size.",
+                      "format": "int32"
+                    },
+                    "filter": {
+                      "type": "string",
+                      "location": "query",
+                      "description": "The standard list filter."
+                    }
+                  },
+                  "flatPath": "v1/projects/{projectsId}/instances/{instancesId}/operations",
+                  "path": "v1/{+name}",
+                  "id": "spanner.projects.instances.operations.list"
+                },
+                "get": {
+                  "description": "Gets the latest state of a long-running operation.  Clients can use this\nmethod to poll the operation result at intervals as recommended by the API\nservice.",
+                  "httpMethod": "GET",
+                  "parameterOrder": [
+                    "name"
+                  ],
+                  "response": {
+                    "$ref": "Operation"
+                  },
+                  "scopes": [
+                    "https://www.googleapis.com/auth/cloud-platform"
+                  ],
+                  "parameters": {
+                    "name": {
+                      "location": "path",
+                      "description": "The name of the operation resource.",
+                      "required": true,
+                      "type": "string",
+                      "pattern": "^projects/[^/]+/instances/[^/]+/operations/[^/]+$"
+                    }
+                  },
+                  "flatPath": "v1/projects/{projectsId}/instances/{instancesId}/operations/{operationsId}",
+                  "id": "spanner.projects.instances.operations.get",
+                  "path": "v1/{+name}"
+                },
+                "cancel": {
+                  "httpMethod": "POST",
+                  "parameterOrder": [
+                    "name"
+                  ],
+                  "response": {
+                    "$ref": "Empty"
+                  },
+                  "parameters": {
+                    "name": {
+                      "location": "path",
+                      "description": "The name of the operation resource to be cancelled.",
+                      "required": true,
+                      "type": "string",
+                      "pattern": "^projects/[^/]+/instances/[^/]+/operations/[^/]+$"
+                    }
+                  },
+                  "scopes": [
+                    "https://www.googleapis.com/auth/cloud-platform"
+                  ],
+                  "flatPath": "v1/projects/{projectsId}/instances/{instancesId}/operations/{operationsId}:cancel",
+                  "id": "spanner.projects.instances.operations.cancel",
+                  "path": "v1/{+name}:cancel",
+                  "description": "Starts asynchronous cancellation on a long-running operation.  The server\nmakes a best effort to cancel the operation, but success is not\nguaranteed.  If the server doesn't support this method, it returns\n`google.rpc.Code.UNIMPLEMENTED`.  Clients can use\nOperations.GetOperation or\nother methods to check whether the cancellation succeeded or whether the\noperation completed despite cancellation. On successful cancellation,\nthe operation is not deleted; instead, it becomes an operation with\nan Operation.error value with a google.rpc.Status.code of 1,\ncorresponding to `Code.CANCELLED`."
+                },
+                "delete": {
+                  "httpMethod": "DELETE",
+                  "parameterOrder": [
+                    "name"
+                  ],
+                  "response": {
+                    "$ref": "Empty"
+                  },
+                  "parameters": {
+                    "name": {
+                      "location": "path",
+                      "description": "The name of the operation resource to be deleted.",
+                      "required": true,
+                      "type": "string",
+                      "pattern": "^projects/[^/]+/instances/[^/]+/operations/[^/]+$"
+                    }
+                  },
+                  "scopes": [
+                    "https://www.googleapis.com/auth/cloud-platform"
+                  ],
+                  "flatPath": "v1/projects/{projectsId}/instances/{instancesId}/operations/{operationsId}",
+                  "id": "spanner.projects.instances.operations.delete",
+                  "path": "v1/{+name}",
+                  "description": "Deletes a long-running operation. This method indicates that the client is\nno longer interested in the operation result. It does not cancel the\noperation. If the server doesn't support this method, it returns\n`google.rpc.Code.UNIMPLEMENTED`."
+                }
+              }
+            },
+            "databases": {
+              "methods": {
+                "list": {
+                  "httpMethod": "GET",
+                  "parameterOrder": [
+                    "parent"
+                  ],
+                  "response": {
+                    "$ref": "ListDatabasesResponse"
+                  },
+                  "parameters": {
+                    "pageToken": {
+                      "location": "query",
+                      "description": "If non-empty, `page_token` should contain a\nnext_page_token from a\nprevious ListDatabasesResponse.",
+                      "type": "string"
+                    },
+                    "pageSize": {
+                      "location": "query",
+                      "description": "Number of databases to be returned in the response. If 0 or less,\ndefaults to the server's maximum allowed page size.",
+                      "format": "int32",
+                      "type": "integer"
+                    },
+                    "parent": {
+                      "required": true,
+                      "type": "string",
+                      "pattern": "^projects/[^/]+/instances/[^/]+$",
+                      "location": "path",
+                      "description": "Required. The instance whose databases should be listed.\nValues are of the form `projects/\u003cproject\u003e/instances/\u003cinstance\u003e`."
+                    }
+                  },
+                  "scopes": [
+                    "https://www.googleapis.com/auth/cloud-platform"
+                  ],
+                  "flatPath": "v1/projects/{projectsId}/instances/{instancesId}/databases",
+                  "id": "spanner.projects.instances.databases.list",
+                  "path": "v1/{+parent}/databases",
+                  "description": "Lists Cloud Spanner databases."
+                },
+                "setIamPolicy": {
+                  "flatPath": "v1/projects/{projectsId}/instances/{instancesId}/databases/{databasesId}:setIamPolicy",
+                  "path": "v1/{+resource}:setIamPolicy",
+                  "id": "spanner.projects.instances.databases.setIamPolicy",
+                  "request": {
+                    "$ref": "SetIamPolicyRequest"
+                  },
+                  "description": "Sets the access control policy on a database resource. Replaces any\nexisting policy.\n\nAuthorization requires `spanner.databases.setIamPolicy` permission on\nresource.",
+                  "response": {
+                    "$ref": "Policy"
+                  },
+                  "parameterOrder": [
+                    "resource"
+                  ],
+                  "httpMethod": "POST",
+                  "parameters": {
+                    "resource": {
+                      "required": true,
+                      "type": "string",
+                      "pattern": "^projects/[^/]+/instances/[^/]+/databases/[^/]+$",
+                      "location": "path",
+                      "description": "REQUIRED: The Cloud Spanner resource for which the policy is being set. The format is `projects/\u003cproject ID\u003e/instances/\u003cinstance ID\u003e` for instance resources and `projects/\u003cproject ID\u003e/instances/\u003cinstance ID\u003e/databases/\u003cdatabase ID\u003e` for databases resources."
+                    }
+                  },
+                  "scopes": [
+                    "https://www.googleapis.com/auth/cloud-platform"
+                  ]
+                },
+                "create": {
+                  "request": {
+                    "$ref": "CreateDatabaseRequest"
+                  },
+                  "description": "Creates a new Cloud Spanner database and starts to prepare it for serving.\nThe returned long-running operation will\nhave a name of the format `\u003cdatabase_name\u003e/operations/\u003coperation_id\u003e` and\ncan be used to track preparation of the database. The\nmetadata field type is\nCreateDatabaseMetadata. The\nresponse field type is\nDatabase, if successful.",
+                  "httpMethod": "POST",
+                  "parameterOrder": [
+                    "parent"
+                  ],
+                  "response": {
+                    "$ref": "Operation"
+                  },
+                  "parameters": {
+                    "parent": {
+                      "location": "path",
+                      "description": "Required. The name of the instance that will serve the new database.\nValues are of the form `projects/\u003cproject\u003e/instances/\u003cinstance\u003e`.",
+                      "required": true,
+                      "type": "string",
+                      "pattern": "^projects/[^/]+/instances/[^/]+$"
+                    }
+                  },
+                  "scopes": [
+                    "https://www.googleapis.com/auth/cloud-platform"
+                  ],
+                  "flatPath": "v1/projects/{projectsId}/instances/{instancesId}/databases",
+                  "id": "spanner.projects.instances.databases.create",
+                  "path": "v1/{+parent}/databases"
+                },
+                "getIamPolicy": {
+                  "flatPath": "v1/projects/{projectsId}/instances/{instancesId}/databases/{databasesId}:getIamPolicy",
+                  "id": "spanner.projects.instances.databases.getIamPolicy",
+                  "path": "v1/{+resource}:getIamPolicy",
+                  "description": "Gets the access control policy for a database resource. Returns an empty\npolicy if a database exists but does not have a policy set.\n\nAuthorization requires `spanner.databases.getIamPolicy` permission on\nresource.",
+                  "request": {
+                    "$ref": "GetIamPolicyRequest"
+                  },
+                  "httpMethod": "POST",
+                  "parameterOrder": [
+                    "resource"
+                  ],
+                  "response": {
+                    "$ref": "Policy"
+                  },
+                  "scopes": [
+                    "https://www.googleapis.com/auth/cloud-platform"
+                  ],
+                  "parameters": {
+                    "resource": {
+                      "required": true,
+                      "type": "string",
+                      "pattern": "^projects/[^/]+/instances/[^/]+/databases/[^/]+$",
+                      "location": "path",
+                      "description": "REQUIRED: The Cloud Spanner resource for which the policy is being retrieved. The format is `projects/\u003cproject ID\u003e/instances/\u003cinstance ID\u003e` for instance resources and `projects/\u003cproject ID\u003e/instances/\u003cinstance ID\u003e/databases/\u003cdatabase ID\u003e` for database resources."
+                    }
+                  }
+                },
+                "get": {
+                  "flatPath": "v1/projects/{projectsId}/instances/{instancesId}/databases/{databasesId}",
+                  "path": "v1/{+name}",
+                  "id": "spanner.projects.instances.databases.get",
+                  "description": "Gets the state of a Cloud Spanner database.",
+                  "response": {
+                    "$ref": "Database"
+                  },
+                  "parameterOrder": [
+                    "name"
+                  ],
+                  "httpMethod": "GET",
+                  "scopes": [
+                    "https://www.googleapis.com/auth/cloud-platform"
+                  ],
+                  "parameters": {
+                    "name": {
+                      "location": "path",
+                      "description": "Required. The name of the requested database. Values are of the form\n`projects/\u003cproject\u003e/instances/\u003cinstance\u003e/databases/\u003cdatabase\u003e`.",
+                      "required": true,
+                      "type": "string",
+                      "pattern": "^projects/[^/]+/instances/[^/]+/databases/[^/]+$"
+                    }
+                  }
+                },
+                "dropDatabase": {
+                  "description": "Drops (aka deletes) a Cloud Spanner database.",
+                  "response": {
+                    "$ref": "Empty"
+                  },
+                  "parameterOrder": [
+                    "database"
+                  ],
+                  "httpMethod": "DELETE",
+                  "parameters": {
+                    "database": {
+                      "required": true,
+                      "type": "string",
+                      "pattern": "^projects/[^/]+/instances/[^/]+/databases/[^/]+$",
+                      "location": "path",
+                      "description": "Required. The database to be dropped."
+                    }
+                  },
+                  "scopes": [
+                    "https://www.googleapis.com/auth/cloud-platform"
+                  ],
+                  "flatPath": "v1/projects/{projectsId}/instances/{instancesId}/databases/{databasesId}",
+                  "path": "v1/{+database}",
+                  "id": "spanner.projects.instances.databases.dropDatabase"
+                },
+                "updateDdl": {
+                  "response": {
+                    "$ref": "Operation"
+                  },
+                  "parameterOrder": [
+                    "database"
+                  ],
+                  "httpMethod": "PATCH",
+                  "scopes": [
+                    "https://www.googleapis.com/auth/cloud-platform"
+                  ],
+                  "parameters": {
+                    "database": {
+                      "required": true,
+                      "type": "string",
+                      "pattern": "^projects/[^/]+/instances/[^/]+/databases/[^/]+$",
+                      "location": "path",
+                      "description": "Required. The database to update."
+                    }
+                  },
+                  "flatPath": "v1/projects/{projectsId}/instances/{instancesId}/databases/{databasesId}/ddl",
+                  "path": "v1/{+database}/ddl",
+                  "id": "spanner.projects.instances.databases.updateDdl",
+                  "description": "Updates the schema of a Cloud Spanner database by\ncreating/altering/dropping tables, columns, indexes, etc. The returned\nlong-running operation will have a name of\nthe format `\u003cdatabase_name\u003e/operations/\u003coperation_id\u003e` and can be used to\ntrack execution of the schema change(s). The\nmetadata field type is\nUpdateDatabaseDdlMetadata.  The operation has no response.",
+                  "request": {
+                    "$ref": "UpdateDatabaseDdlRequest"
+                  }
+                },
+                "testIamPermissions": {
+                  "request": {
+                    "$ref": "TestIamPermissionsRequest"
+                  },
+                  "description": "Returns permissions that the caller has on the specified database resource.\n\nAttempting this RPC on a non-existent Cloud Spanner database will result in\na NOT_FOUND error if the user has `spanner.databases.list` permission on\nthe containing Cloud Spanner instance. Otherwise returns an empty set of\npermissions.",
+                  "httpMethod": "POST",
+                  "parameterOrder": [
+                    "resource"
+                  ],
+                  "response": {
+                    "$ref": "TestIamPermissionsResponse"
+                  },
+                  "parameters": {
+                    "resource": {
+                      "required": true,
+                      "type": "string",
+                      "pattern": "^projects/[^/]+/instances/[^/]+/databases/[^/]+$",
+                      "location": "path",
+                      "description": "REQUIRED: The Cloud Spanner resource for which permissions are being tested. The format is `projects/\u003cproject ID\u003e/instances/\u003cinstance ID\u003e` for instance resources and `projects/\u003cproject ID\u003e/instances/\u003cinstance ID\u003e/databases/\u003cdatabase ID\u003e` for database resources."
+                    }
+                  },
+                  "scopes": [
+                    "https://www.googleapis.com/auth/cloud-platform"
+                  ],
+                  "flatPath": "v1/projects/{projectsId}/instances/{instancesId}/databases/{databasesId}:testIamPermissions",
+                  "id": "spanner.projects.instances.databases.testIamPermissions",
+                  "path": "v1/{+resource}:testIamPermissions"
+                },
+                "getDdl": {
+                  "flatPath": "v1/projects/{projectsId}/instances/{instancesId}/databases/{databasesId}/ddl",
+                  "path": "v1/{+database}/ddl",
+                  "id": "spanner.projects.instances.databases.getDdl",
+                  "description": "Returns the schema of a Cloud Spanner database as a list of formatted\nDDL statements. This method does not show pending schema updates, those may\nbe queried using the Operations API.",
+                  "response": {
+                    "$ref": "GetDatabaseDdlResponse"
+                  },
+                  "parameterOrder": [
+                    "database"
+                  ],
+                  "httpMethod": "GET",
+                  "scopes": [
+                    "https://www.googleapis.com/auth/cloud-platform"
+                  ],
+                  "parameters": {
+                    "database": {
+                      "location": "path",
+                      "description": "Required. The database whose schema we wish to get.",
+                      "required": true,
+                      "type": "string",
+                      "pattern": "^projects/[^/]+/instances/[^/]+/databases/[^/]+$"
+                    }
+                  }
+                }
+              },
+              "resources": {
+                "operations": {
+                  "methods": {
+                    "list": {
+                      "description": "Lists operations that match the specified filter in the request. If the\nserver doesn't support this method, it returns `UNIMPLEMENTED`.\n\nNOTE: the `name` binding below allows API services to override the binding\nto use different resource name schemes, such as `users/*/operations`.",
+                      "httpMethod": "GET",
+                      "parameterOrder": [
+                        "name"
+                      ],
+                      "response": {
+                        "$ref": "ListOperationsResponse"
+                      },
+                      "parameters": {
+                        "name": {
+                          "required": true,
+                          "type": "string",
+                          "pattern": "^projects/[^/]+/instances/[^/]+/databases/[^/]+/operations$",
+                          "location": "path",
+                          "description": "The name of the operation collection."
+                        },
+                        "pageToken": {
+                          "location": "query",
+                          "description": "The standard list page token.",
+                          "type": "string"
+                        },
+                        "pageSize": {
+                          "type": "integer",
+                          "location": "query",
+                          "description": "The standard list page size.",
+                          "format": "int32"
+                        },
+                        "filter": {
+                          "type": "string",
+                          "location": "query",
+                          "description": "The standard list filter."
+                        }
+                      },
+                      "scopes": [
+                        "https://www.googleapis.com/auth/cloud-platform"
+                      ],
+                      "flatPath": "v1/projects/{projectsId}/instances/{instancesId}/databases/{databasesId}/operations",
+                      "id": "spanner.projects.instances.databases.operations.list",
+                      "path": "v1/{+name}"
+                    },
+                    "get": {
+                      "description": "Gets the latest state of a long-running operation.  Clients can use this\nmethod to poll the operation result at intervals as recommended by the API\nservice.",
+                      "httpMethod": "GET",
+                      "parameterOrder": [
+                        "name"
+                      ],
+                      "response": {
+                        "$ref": "Operation"
+                      },
+                      "parameters": {
+                        "name": {
+                          "required": true,
+                          "type": "string",
+                          "pattern": "^projects/[^/]+/instances/[^/]+/databases/[^/]+/operations/[^/]+$",
+                          "location": "path",
+                          "description": "The name of the operation resource."
+                        }
+                      },
+                      "scopes": [
+                        "https://www.googleapis.com/auth/cloud-platform"
+                      ],
+                      "flatPath": "v1/projects/{projectsId}/instances/{instancesId}/databases/{databasesId}/operations/{operationsId}",
+                      "id": "spanner.projects.instances.databases.operations.get",
+                      "path": "v1/{+name}"
+                    },
+                    "cancel": {
+                      "httpMethod": "POST",
+                      "parameterOrder": [
+                        "name"
+                      ],
+                      "response": {
+                        "$ref": "Empty"
+                      },
+                      "parameters": {
+                        "name": {
+                          "location": "path",
+                          "description": "The name of the operation resource to be cancelled.",
+                          "required": true,
+                          "type": "string",
+                          "pattern": "^projects/[^/]+/instances/[^/]+/databases/[^/]+/operations/[^/]+$"
+                        }
+                      },
+                      "scopes": [
+                        "https://www.googleapis.com/auth/cloud-platform"
+                      ],
+                      "flatPath": "v1/projects/{projectsId}/instances/{instancesId}/databases/{databasesId}/operations/{operationsId}:cancel",
+                      "id": "spanner.projects.instances.databases.operations.cancel",
+                      "path": "v1/{+name}:cancel",
+                      "description": "Starts asynchronous cancellation on a long-running operation.  The server\nmakes a best effort to cancel the operation, but success is not\nguaranteed.  If the server doesn't support this method, it returns\n`google.rpc.Code.UNIMPLEMENTED`.  Clients can use\nOperations.GetOperation or\nother methods to check whether the cancellation succeeded or whether the\noperation completed despite cancellation. On successful cancellation,\nthe operation is not deleted; instead, it becomes an operation with\nan Operation.error value with a google.rpc.Status.code of 1,\ncorresponding to `Code.CANCELLED`."
+                    },
+                    "delete": {
+                      "description": "Deletes a long-running operation. This method indicates that the client is\nno longer interested in the operation result. It does not cancel the\noperation. If the server doesn't support this method, it returns\n`google.rpc.Code.UNIMPLEMENTED`.",
+                      "response": {
+                        "$ref": "Empty"
+                      },
+                      "parameterOrder": [
+                        "name"
+                      ],
+                      "httpMethod": "DELETE",
+                      "parameters": {
+                        "name": {
+                          "required": true,
+                          "type": "string",
+                          "pattern": "^projects/[^/]+/instances/[^/]+/databases/[^/]+/operations/[^/]+$",
+                          "location": "path",
+                          "description": "The name of the operation resource to be deleted."
+                        }
+                      },
+                      "scopes": [
+                        "https://www.googleapis.com/auth/cloud-platform"
+                      ],
+                      "flatPath": "v1/projects/{projectsId}/instances/{instancesId}/databases/{databasesId}/operations/{operationsId}",
+                      "path": "v1/{+name}",
+                      "id": "spanner.projects.instances.databases.operations.delete"
+                    }
+                  }
+                },
+                "sessions": {
+                  "methods": {
+                    "get": {
+                      "description": "Gets a session. Returns `NOT_FOUND` if the session does not exist.\nThis is mainly useful for determining whether a session is still\nalive.",
+                      "httpMethod": "GET",
+                      "parameterOrder": [
+                        "name"
+                      ],
+                      "response": {
+                        "$ref": "Session"
+                      },
+                      "parameters": {
+                        "name": {
+                          "required": true,
+                          "type": "string",
+                          "pattern": "^projects/[^/]+/instances/[^/]+/databases/[^/]+/sessions/[^/]+$",
+                          "location": "path",
+                          "description": "Required. The name of the session to retrieve."
+                        }
+                      },
+                      "scopes": [
+                        "https://www.googleapis.com/auth/cloud-platform"
+                      ],
+                      "flatPath": "v1/projects/{projectsId}/instances/{instancesId}/databases/{databasesId}/sessions/{sessionsId}",
+                      "id": "spanner.projects.instances.databases.sessions.get",
+                      "path": "v1/{+name}"
+                    },
+                    "executeStreamingSql": {
+                      "description": "Like ExecuteSql, except returns the result\nset as a stream. Unlike ExecuteSql, there\nis no limit on the size of the returned result set. However, no\nindividual row in the result set can exceed 100 MiB, and no\ncolumn value can exceed 10 MiB.",
+                      "request": {
+                        "$ref": "ExecuteSqlRequest"
+                      },
+                      "httpMethod": "POST",
+                      "parameterOrder": [
+                        "session"
+                      ],
+                      "response": {
+                        "$ref": "PartialResultSet"
+                      },
+                      "scopes": [
+                        "https://www.googleapis.com/auth/cloud-platform"
+                      ],
+                      "parameters": {
+                        "session": {
+                          "location": "path",
+                          "description": "Required. The session in which the SQL query should be performed.",
+                          "required": true,
+                          "type": "string",
+                          "pattern": "^projects/[^/]+/instances/[^/]+/databases/[^/]+/sessions/[^/]+$"
+                        }
+                      },
+                      "flatPath": "v1/projects/{projectsId}/instances/{instancesId}/databases/{databasesId}/sessions/{sessionsId}:executeStreamingSql",
+                      "id": "spanner.projects.instances.databases.sessions.executeStreamingSql",
+                      "path": "v1/{+session}:executeStreamingSql"
+                    },
+                    "delete": {
+                      "description": "Ends a session, releasing server resources associated with it.",
+                      "response": {
+                        "$ref": "Empty"
+                      },
+                      "parameterOrder": [
+                        "name"
+                      ],
+                      "httpMethod": "DELETE",
+                      "parameters": {
+                        "name": {
+                          "required": true,
+                          "type": "string",
+                          "pattern": "^projects/[^/]+/instances/[^/]+/databases/[^/]+/sessions/[^/]+$",
+                          "location": "path",
+                          "description": "Required. The name of the session to delete."
+                        }
+                      },
+                      "scopes": [
+                        "https://www.googleapis.com/auth/cloud-platform"
+                      ],
+                      "flatPath": "v1/projects/{projectsId}/instances/{instancesId}/databases/{databasesId}/sessions/{sessionsId}",
+                      "path": "v1/{+name}",
+                      "id": "spanner.projects.instances.databases.sessions.delete"
+                    },
+                    "beginTransaction": {
+                      "flatPath": "v1/projects/{projectsId}/instances/{instancesId}/databases/{databasesId}/sessions/{sessionsId}:beginTransaction",
+                      "id": "spanner.projects.instances.databases.sessions.beginTransaction",
+                      "path": "v1/{+session}:beginTransaction",
+                      "request": {
+                        "$ref": "BeginTransactionRequest"
+                      },
+                      "description": "Begins a new transaction. This step can often be skipped:\nRead, ExecuteSql and\nCommit can begin a new transaction as a\nside-effect.",
+                      "httpMethod": "POST",
+                      "parameterOrder": [
+                        "session"
+                      ],
+                      "response": {
+                        "$ref": "Transaction"
+                      },
+                      "parameters": {
+                        "session": {
+                          "required": true,
+                          "type": "string",
+                          "pattern": "^projects/[^/]+/instances/[^/]+/databases/[^/]+/sessions/[^/]+$",
+                          "location": "path",
+                          "description": "Required. The session in which the transaction runs."
+                        }
+                      },
+                      "scopes": [
+                        "https://www.googleapis.com/auth/cloud-platform"
+                      ]
+                    },
+                    "commit": {
+                      "response": {
+                        "$ref": "CommitResponse"
+                      },
+                      "parameterOrder": [
+                        "session"
+                      ],
+                      "httpMethod": "POST",
+                      "scopes": [
+                        "https://www.googleapis.com/auth/cloud-platform"
+                      ],
+                      "parameters": {
+                        "session": {
+                          "location": "path",
+                          "description": "Required. The session in which the transaction to be committed is running.",
+                          "required": true,
+                          "type": "string",
+                          "pattern": "^projects/[^/]+/instances/[^/]+/databases/[^/]+/sessions/[^/]+$"
+                        }
+                      },
+                      "flatPath": "v1/projects/{projectsId}/instances/{instancesId}/databases/{databasesId}/sessions/{sessionsId}:commit",
+                      "path": "v1/{+session}:commit",
+                      "id": "spanner.projects.instances.databases.sessions.commit",
+                      "description": "Commits a transaction. The request includes the mutations to be\napplied to rows in the database.\n\n`Commit` might return an `ABORTED` error. This can occur at any time;\ncommonly, the cause is conflicts with concurrent\ntransactions. However, it can also happen for a variety of other\nreasons. If `Commit` returns `ABORTED`, the caller should re-attempt\nthe transaction from the beginning, re-using the same session.",
+                      "request": {
+                        "$ref": "CommitRequest"
+                      }
+                    },
+                    "executeSql": {
+                      "httpMethod": "POST",
+                      "parameterOrder": [
+                        "session"
+                      ],
+                      "response": {
+                        "$ref": "ResultSet"
+                      },
+                      "parameters": {
+                        "session": {
+                          "location": "path",
+                          "description": "Required. The session in which the SQL query should be performed.",
+                          "required": true,
+                          "type": "string",
+                          "pattern": "^projects/[^/]+/instances/[^/]+/databases/[^/]+/sessions/[^/]+$"
+                        }
+                      },
+                      "scopes": [
+                        "https://www.googleapis.com/auth/cloud-platform"
+                      ],
+                      "flatPath": "v1/projects/{projectsId}/instances/{instancesId}/databases/{databasesId}/sessions/{sessionsId}:executeSql",
+                      "id": "spanner.projects.instances.databases.sessions.executeSql",
+                      "path": "v1/{+session}:executeSql",
+                      "request": {
+                        "$ref": "ExecuteSqlRequest"
+                      },
+                      "description": "Executes an SQL query, returning all rows in a single reply. This\nmethod cannot be used to return a result set larger than 10 MiB;\nif the query yields more data than that, the query fails with\na `FAILED_PRECONDITION` error.\n\nQueries inside read-write transactions might return `ABORTED`. If\nthis occurs, the application should restart the transaction from\nthe beginning. See Transaction for more details.\n\nLarger result sets can be fetched in streaming fashion by calling\nExecuteStreamingSql instead."
+                    },
+                    "rollback": {
+                      "response": {
+                        "$ref": "Empty"
+                      },
+                      "parameterOrder": [
+                        "session"
+                      ],
+                      "httpMethod": "POST",
+                      "scopes": [
+                        "https://www.googleapis.com/auth/cloud-platform"
+                      ],
+                      "parameters": {
+                        "session": {
+                          "location": "path",
+                          "description": "Required. The session in which the transaction to roll back is running.",
+                          "required": true,
+                          "type": "string",
+                          "pattern": "^projects/[^/]+/instances/[^/]+/databases/[^/]+/sessions/[^/]+$"
+                        }
+                      },
+                      "flatPath": "v1/projects/{projectsId}/instances/{instancesId}/databases/{databasesId}/sessions/{sessionsId}:rollback",
+                      "path": "v1/{+session}:rollback",
+                      "id": "spanner.projects.instances.databases.sessions.rollback",
+                      "description": "Rolls back a transaction, releasing any locks it holds. It is a good\nidea to call this for any transaction that includes one or more\nRead or ExecuteSql requests and\nultimately decides not to commit.\n\n`Rollback` returns `OK` if it successfully aborts the transaction, the\ntransaction was already aborted, or the transaction is not\nfound. `Rollback` never returns `ABORTED`.",
+                      "request": {
+                        "$ref": "RollbackRequest"
+                      }
+                    },
+                    "streamingRead": {
+                      "httpMethod": "POST",
+                      "parameterOrder": [
+                        "session"
+                      ],
+                      "response": {
+                        "$ref": "PartialResultSet"
+                      },
+                      "scopes": [
+                        "https://www.googleapis.com/auth/cloud-platform"
+                      ],
+                      "parameters": {
+                        "session": {
+                          "location": "path",
+                          "description": "Required. The session in which the read should be performed.",
+                          "required": true,
+                          "type": "string",
+                          "pattern": "^projects/[^/]+/instances/[^/]+/databases/[^/]+/sessions/[^/]+$"
+                        }
+                      },
+                      "flatPath": "v1/projects/{projectsId}/instances/{instancesId}/databases/{databasesId}/sessions/{sessionsId}:streamingRead",
+                      "id": "spanner.projects.instances.databases.sessions.streamingRead",
+                      "path": "v1/{+session}:streamingRead",
+                      "description": "Like Read, except returns the result set as a\nstream. Unlike Read, there is no limit on the\nsize of the returned result set. However, no individual row in\nthe result set can exceed 100 MiB, and no column value can exceed\n10 MiB.",
+                      "request": {
+                        "$ref": "ReadRequest"
+                      }
+                    },
+                    "create": {
+                      "description": "Creates a new session. A session can be used to perform\ntransactions that read and/or modify data in a Cloud Spanner database.\nSessions are meant to be reused for many consecutive\ntransactions.\n\nSessions can only execute one transaction at a time. To execute\nmultiple concurrent read-write/write-only transactions, create\nmultiple sessions. Note that standalone reads and queries use a\ntransaction internally, and count toward the one transaction\nlimit.\n\nCloud Spanner limits the number of sessions that can exist at any given\ntime; thus, it is a good idea to delete idle and/or unneeded sessions.\nAside from explicit deletes, Cloud Spanner can delete sessions for which no\noperations are sent for more than an hour. If a session is deleted,\nrequests to it return `NOT_FOUND`.\n\nIdle sessions can be kept alive by sending a trivial SQL query\nperiodically, e.g., `\"SELECT 1\"`.",
+                      "response": {
+                        "$ref": "Session"
+                      },
+                      "parameterOrder": [
+                        "database"
+                      ],
+                      "httpMethod": "POST",
+                      "scopes": [
+                        "https://www.googleapis.com/auth/cloud-platform"
+                      ],
+                      "parameters": {
+                        "database": {
+                          "location": "path",
+                          "description": "Required. The database in which the new session is created.",
+                          "required": true,
+                          "type": "string",
+                          "pattern": "^projects/[^/]+/instances/[^/]+/databases/[^/]+$"
+                        }
+                      },
+                      "flatPath": "v1/projects/{projectsId}/instances/{instancesId}/databases/{databasesId}/sessions",
+                      "path": "v1/{+database}/sessions",
+                      "id": "spanner.projects.instances.databases.sessions.create"
+                    },
+                    "read": {
+                      "flatPath": "v1/projects/{projectsId}/instances/{instancesId}/databases/{databasesId}/sessions/{sessionsId}:read",
+                      "path": "v1/{+session}:read",
+                      "id": "spanner.projects.instances.databases.sessions.read",
+                      "request": {
+                        "$ref": "ReadRequest"
+                      },
+                      "description": "Reads rows from the database using key lookups and scans, as a\nsimple key/value style alternative to\nExecuteSql.  This method cannot be used to\nreturn a result set larger than 10 MiB; if the read matches more\ndata than that, the read fails with a `FAILED_PRECONDITION`\nerror.\n\nReads inside read-write transactions might return `ABORTED`. If\nthis occurs, the application should restart the transaction from\nthe beginning. See Transaction for more details.\n\nLarger result sets can be yielded in streaming fashion by calling\nStreamingRead instead.",
+                      "response": {
+                        "$ref": "ResultSet"
+                      },
+                      "parameterOrder": [
+                        "session"
+                      ],
+                      "httpMethod": "POST",
+                      "parameters": {
+                        "session": {
+                          "required": true,
+                          "type": "string",
+                          "pattern": "^projects/[^/]+/instances/[^/]+/databases/[^/]+/sessions/[^/]+$",
+                          "location": "path",
+                          "description": "Required. The session in which the read should be performed."
+                        }
+                      },
+                      "scopes": [
+                        "https://www.googleapis.com/auth/cloud-platform"
+                      ]
+                    }
+                  }
+                }
+              }
+            }
+          }
+        }
+      }
+    }
+  },
+  "parameters": {
+    "pp": {
+      "location": "query",
+      "description": "Pretty-print response.",
+      "type": "boolean",
+      "default": "true"
+    },
+    "oauth_token": {
+      "type": "string",
+      "location": "query",
+      "description": "OAuth 2.0 token for the current user."
+    },
+    "bearer_token": {
+      "type": "string",
+      "location": "query",
+      "description": "OAuth bearer token."
+    },
+    "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."
+    },
+    "uploadType": {
+      "location": "query",
+      "description": "Legacy upload protocol for media (e.g. \"media\", \"multipart\").",
+      "type": "string"
+    },
+    "fields": {
+      "type": "string",
+      "location": "query",
+      "description": "Selector specifying which fields to include in a partial response."
+    },
+    "$.xgafv": {
+      "type": "string",
+      "enumDescriptions": [
+        "v1 error format",
+        "v2 error format"
+      ],
+      "location": "query",
+      "enum": [
+        "1",
+        "2"
+      ],
+      "description": "V1 error format."
+    },
+    "callback": {
+      "location": "query",
+      "description": "JSONP",
+      "type": "string"
+    },
+    "alt": {
+      "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",
+      "description": "Data format for response."
+    },
+    "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": {
+      "location": "query",
+      "description": "OAuth access token.",
+      "type": "string"
+    },
+    "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"
+    }
+  },
+  "version": "v1",
+  "baseUrl": "https://spanner.googleapis.com/",
+  "servicePath": "",
+  "description": "Cloud Spanner is a managed, mission-critical, globally consistent and scalable relational database service.",
+  "kind": "discovery#restDescription",
+  "basePath": "",
+  "revision": "20170317",
+  "id": "spanner:v1",
+  "documentationLink": "https://cloud.google.com/spanner/",
+  "discoveryVersion": "v1",
+  "version_module": "True",
+  "schemas": {
+    "ResultSetMetadata": {
+      "description": "Metadata about a ResultSet or PartialResultSet.",
+      "type": "object",
+      "properties": {
+        "transaction": {
+          "$ref": "Transaction",
+          "description": "If the read or SQL query began a transaction as a side-effect, the\ninformation about the new transaction is yielded here."
+        },
+        "rowType": {
+          "$ref": "StructType",
+          "description": "Indicates the field names and types for the rows in the result\nset.  For example, a SQL query like `\"SELECT UserId, UserName FROM\nUsers\"` could return a `row_type` value like:\n\n    \"fields\": [\n      { \"name\": \"UserId\", \"type\": { \"code\": \"INT64\" } },\n      { \"name\": \"UserName\", \"type\": { \"code\": \"STRING\" } },\n    ]"
+        }
+      },
+      "id": "ResultSetMetadata"
+    },
+    "TransactionSelector": {
+      "type": "object",
+      "properties": {
+        "singleUse": {
+          "$ref": "TransactionOptions",
+          "description": "Execute the read or SQL query in a temporary transaction.\nThis is the most efficient way to execute a transaction that\nconsists of a single SQL query."
+        },
+        "begin": {
+          "$ref": "TransactionOptions",
+          "description": "Begin a new transaction and execute this read or SQL query in\nit. The transaction ID of the new transaction is returned in\nResultSetMetadata.transaction, which is a Transaction."
+        },
+        "id": {
+          "description": "Execute the read or SQL query in a previously-started transaction.",
+          "format": "byte",
+          "type": "string"
+        }
+      },
+      "id": "TransactionSelector",
+      "description": "This message is used to select the transaction in which a\nRead or\nExecuteSql call runs.\n\nSee TransactionOptions for more information about transactions."
+    },
+    "KeySet": {
+      "type": "object",
+      "properties": {
+        "ranges": {
+          "type": "array",
+          "items": {
+            "$ref": "KeyRange"
+          },
+          "description": "A list of key ranges. See KeyRange for more information about\nkey range specifications."
+        },
+        "keys": {
+          "type": "array",
+          "items": {
+            "type": "array",
+            "items": {
+              "type": "any"
+            }
+          },
+          "description": "A list of specific keys. Entries in `keys` should have exactly as\nmany elements as there are columns in the primary or index key\nwith which this `KeySet` is used.  Individual key values are\nencoded as described here."
+        },
+        "all": {
+          "type": "boolean",
+          "description": "For convenience `all` can be set to `true` to indicate that this\n`KeySet` matches all keys in the table or index. Note that any keys\nspecified in `keys` or `ranges` are only yielded once."
+        }
+      },
+      "id": "KeySet",
+      "description": "`KeySet` defines a collection of Cloud Spanner keys and/or key ranges. All\nthe keys are expected to be in the same table or index. The keys need\nnot be sorted in any particular way.\n\nIf the same key is specified multiple times in the set (for example\nif two ranges, two keys, or a key and a range overlap), Cloud Spanner\nbehaves as if the key were only specified once."
+    },
+    "Mutation": {
+      "type": "object",
+      "properties": {
+        "update": {
+          "$ref": "Write",
+          "description": "Update existing rows in a table. If any of the rows does not\nalready exist, the transaction fails with error `NOT_FOUND`."
+        },
+        "replace": {
+          "$ref": "Write",
+          "description": "Like insert, except that if the row already exists, it is\ndeleted, and the column values provided are inserted\ninstead. Unlike insert_or_update, this means any values not\nexplicitly written become `NULL`."
+        },
+        "delete": {
+          "$ref": "Delete",
+          "description": "Delete rows from a table. Succeeds whether or not the named\nrows were present."
+        },
+        "insert": {
+          "$ref": "Write",
+          "description": "Insert new rows in a table. If any of the rows already exist,\nthe write or transaction fails with error `ALREADY_EXISTS`."
+        },
+        "insertOrUpdate": {
+          "$ref": "Write",
+          "description": "Like insert, except that if the row already exists, then\nits column values are overwritten with the ones provided. Any\ncolumn values not explicitly written are preserved."
+        }
+      },
+      "id": "Mutation",
+      "description": "A modification to one or more Cloud Spanner rows.  Mutations can be\napplied to a Cloud Spanner database by sending them in a\nCommit call."
+    },
+    "GetDatabaseDdlResponse": {
+      "type": "object",
+      "properties": {
+        "statements": {
+          "description": "A list of formatted DDL statements defining the schema of the database\nspecified in the request.",
+          "type": "array",
+          "items": {
+            "type": "string"
+          }
+        }
+      },
+      "id": "GetDatabaseDdlResponse",
+      "description": "The response for GetDatabaseDdl."
+    },
+    "Database": {
+      "type": "object",
+      "properties": {
+        "state": {
+          "type": "string",
+          "enumDescriptions": [
+            "Not specified.",
+            "The database is still being created. Operations on the database may fail\nwith `FAILED_PRECONDITION` in this state.",
+            "The database is fully created and ready for use."
+          ],
+          "enum": [
+            "STATE_UNSPECIFIED",
+            "CREATING",
+            "READY"
+          ],
+          "description": "Output only. The current database state."
+        },
+        "name": {
+          "type": "string",
+          "description": "Required. The name of the database. Values are of the form\n`projects/\u003cproject\u003e/instances/\u003cinstance\u003e/databases/\u003cdatabase\u003e`,\nwhere `\u003cdatabase\u003e` is as specified in the `CREATE DATABASE`\nstatement. This name can be passed to other API methods to\nidentify the database."
+        }
+      },
+      "id": "Database",
+      "description": "A Cloud Spanner database."
+    },
+    "Instance": {
+      "type": "object",
+      "properties": {
+        "displayName": {
+          "description": "Required. The descriptive name for this instance as it appears in UIs.\nMust be unique per project and between 4 and 30 characters in length.",
+          "type": "string"
+        },
+        "nodeCount": {
+          "type": "integer",
+          "description": "Required. The number of nodes allocated to this instance.",
+          "format": "int32"
+        },
+        "labels": {
+          "type": "object",
+          "additionalProperties": {
+            "type": "string"
+          },
+          "description": "Cloud Labels are a flexible and lightweight mechanism for organizing cloud\nresources into groups that reflect a customer's organizational needs and\ndeployment strategies. Cloud Labels can be used to filter collections of\nresources. They can be used to control how resource metrics are aggregated.\nAnd they can be used as arguments to policy management rules (e.g. route,\nfirewall, load balancing, etc.).\n\n * Label keys must be between 1 and 63 characters long and must conform to\n   the following regular expression: `[a-z]([-a-z0-9]*[a-z0-9])?`.\n * Label values must be between 0 and 63 characters long and must conform\n   to the regular expression `([a-z]([-a-z0-9]*[a-z0-9])?)?`.\n * No more than 64 labels can be associated with a given resource.\n\nSee https://goo.gl/xmQnxf for more information on and examples of labels.\n\nIf you plan to use labels in your own code, please note that additional\ncharacters may be allowed in the future. And so you are advised to use an\ninternal label representation, such as JSON, which doesn't rely upon\nspecific characters being disallowed.  For example, representing labels\nas the string:  name + \"_\" + value  would prove problematic if we were to\nallow \"_\" in a future release."
+        },
+        "config": {
+          "type": "string",
+          "description": "Required. The name of the instance's configuration. Values are of the form\n`projects/\u003cproject\u003e/instanceConfigs/\u003cconfiguration\u003e`. See\nalso InstanceConfig and\nListInstanceConfigs."
+        },
+        "state": {
+          "enum": [
+            "STATE_UNSPECIFIED",
+            "CREATING",
+            "READY"
+          ],
+          "description": "Output only. The current instance state. For\nCreateInstance, the state must be\neither omitted or set to `CREATING`. For\nUpdateInstance, the state must be\neither omitted or set to `READY`.",
+          "type": "string",
+          "enumDescriptions": [
+            "Not specified.",
+            "The instance is still being created. Resources may not be\navailable yet, and operations such as database creation may not\nwork.",
+            "The instance is fully created and ready to do work such as\ncreating databases."
+          ]
+        },
+        "name": {
+          "type": "string",
+          "description": "Required. A unique identifier for the instance, which cannot be changed\nafter the instance is created. Values are of the form\n`projects/\u003cproject\u003e/instances/a-z*[a-z0-9]`. The final\nsegment of the name must be between 6 and 30 characters in length."
+        }
+      },
+      "id": "Instance",
+      "description": "An isolated set of Cloud Spanner resources on which databases can be hosted."
+    },
+    "SetIamPolicyRequest": {
+      "type": "object",
+      "properties": {
+        "policy": {
+          "$ref": "Policy",
+          "description": "REQUIRED: The complete policy to be applied to the `resource`. The size of\nthe policy is limited to a few 10s of KB. An empty policy is a\nvalid policy but certain Cloud Platform services (such as Projects)\nmight reject them."
+        },
+        "updateMask": {
+          "type": "string",
+          "description": "OPTIONAL: A FieldMask specifying which fields of the policy to modify. Only\nthe fields in the mask will be modified. If no mask is provided, a default\nmask is used:\npaths: \"bindings, etag\"\nThis field is only used by Cloud IAM.",
+          "format": "google-fieldmask"
+        }
+      },
+      "id": "SetIamPolicyRequest",
+      "description": "Request message for `SetIamPolicy` method."
+    },
+    "ListDatabasesResponse": {
+      "type": "object",
+      "properties": {
+        "nextPageToken": {
+          "description": "`next_page_token` can be sent in a subsequent\nListDatabases call to fetch more\nof the matching databases.",
+          "type": "string"
+        },
+        "databases": {
+          "type": "array",
+          "items": {
+            "$ref": "Database"
+          },
+          "description": "Databases that matched the request."
+        }
+      },
+      "id": "ListDatabasesResponse",
+      "description": "The response for ListDatabases."
+    },
+    "RollbackRequest": {
+      "type": "object",
+      "properties": {
+        "transactionId": {
+          "description": "Required. The transaction to roll back.",
+          "format": "byte",
+          "type": "string"
+        }
+      },
+      "id": "RollbackRequest",
+      "description": "The request for Rollback."
+    },
+    "Transaction": {
+      "description": "A transaction.",
+      "type": "object",
+      "properties": {
+        "id": {
+          "description": "`id` may be used to identify the transaction in subsequent\nRead,\nExecuteSql,\nCommit, or\nRollback calls.\n\nSingle-use read-only transactions do not have IDs, because\nsingle-use transactions do not support multiple requests.",
+          "format": "byte",
+          "type": "string"
+        },
+        "readTimestamp": {
+          "description": "For snapshot read-only transactions, the read timestamp chosen\nfor the transaction. Not returned by default: see\nTransactionOptions.ReadOnly.return_read_timestamp.",
+          "format": "google-datetime",
+          "type": "string"
+        }
+      },
+      "id": "Transaction"
+    },
+    "UpdateDatabaseDdlMetadata": {
+      "type": "object",
+      "properties": {
+        "database": {
+          "type": "string",
+          "description": "The database being modified."
+        },
+        "statements": {
+          "type": "array",
+          "items": {
+            "type": "string"
+          },
+          "description": "For an update this list contains all the statements. For an\nindividual statement, this list contains only that statement."
+        },
+        "commitTimestamps": {
+          "type": "array",
+          "items": {
+            "type": "string",
+            "format": "google-datetime"
+          },
+          "description": "Reports the commit timestamps of all statements that have\nsucceeded so far, where `commit_timestamps[i]` is the commit\ntimestamp for the statement `statements[i]`."
+        }
+      },
+      "id": "UpdateDatabaseDdlMetadata",
+      "description": "Metadata type for the operation returned by\nUpdateDatabaseDdl."
+    },
+    "CounterOptions": {
+      "description": "Options for counters",
+      "type": "object",
+      "properties": {
+        "metric": {
+          "description": "The metric to update.",
+          "type": "string"
+        },
+        "field": {
+          "description": "The field value to attribute.",
+          "type": "string"
+        }
+      },
+      "id": "CounterOptions"
+    },
+    "QueryPlan": {
+      "description": "Contains an ordered list of nodes appearing in the query plan.",
+      "type": "object",
+      "properties": {
+        "planNodes": {
+          "type": "array",
+          "items": {
+            "$ref": "PlanNode"
+          },
+          "description": "The nodes in the query plan. Plan nodes are returned in pre-order starting\nwith the plan root. Each PlanNode's `id` corresponds to its index in\n`plan_nodes`."
+        }
+      },
+      "id": "QueryPlan"
+    },
+    "StructType": {
+      "description": "`StructType` defines the fields of a STRUCT type.",
+      "type": "object",
+      "properties": {
+        "fields": {
+          "description": "The list of fields that make up this struct. Order is\nsignificant, because values of this struct type are represented as\nlists, where the order of field values matches the order of\nfields in the StructType. In turn, the order of fields\nmatches the order of columns in a read request, or the order of\nfields in the `SELECT` clause of a query.",
+          "type": "array",
+          "items": {
+            "$ref": "Field"
+          }
+        }
+      },
+      "id": "StructType"
+    },
+    "Field": {
+      "type": "object",
+      "properties": {
+        "name": {
+          "type": "string",
+          "description": "The name of the field. For reads, this is the column name. For\nSQL queries, it is the column alias (e.g., `\"Word\"` in the\nquery `\"SELECT 'hello' AS Word\"`), or the column name (e.g.,\n`\"ColName\"` in the query `\"SELECT ColName FROM Table\"`). Some\ncolumns might have an empty name (e.g., !\"SELECT\nUPPER(ColName)\"`). Note that a query result can contain\nmultiple fields with the same name."
+        },
+        "type": {
+          "$ref": "Type",
+          "description": "The type of the field."
+        }
+      },
+      "id": "Field",
+      "description": "Message representing a single field of a struct."
+    },
+    "TestIamPermissionsRequest": {
+      "description": "Request message for `TestIamPermissions` method.",
+      "type": "object",
+      "properties": {
+        "permissions": {
+          "description": "REQUIRED: The set of permissions to check for 'resource'.\nPermissions with wildcards (such as '*', 'spanner.*', 'spanner.instances.*') are not allowed.",
+          "type": "array",
+          "items": {
+            "type": "string"
+          }
+        }
+      },
+      "id": "TestIamPermissionsRequest"
+    },
+    "ResultSetStats": {
+      "description": "Additional statistics about a ResultSet or PartialResultSet.",
+      "type": "object",
+      "properties": {
+        "queryStats": {
+          "additionalProperties": {
+            "type": "any",
+            "description": "Properties of the object."
+          },
+          "description": "Aggregated statistics from the execution of the query. Only present when\nthe query is profiled. For example, a query could return the statistics as\nfollows:\n\n    {\n      \"rows_returned\": \"3\",\n      \"elapsed_time\": \"1.22 secs\",\n      \"cpu_time\": \"1.19 secs\"\n    }",
+          "type": "object"
+        },
+        "queryPlan": {
+          "$ref": "QueryPlan",
+          "description": "QueryPlan for the query associated with this result."
+        }
+      },
+      "id": "ResultSetStats"
+    },
+    "CommitResponse": {
+      "description": "The response for Commit.",
+      "type": "object",
+      "properties": {
+        "commitTimestamp": {
+          "description": "The Cloud Spanner timestamp at which the transaction committed.",
+          "format": "google-datetime",
+          "type": "string"
+        }
+      },
+      "id": "CommitResponse"
+    },
+    "Type": {
+      "type": "object",
+      "properties": {
+        "code": {
+          "type": "string",
+          "enumDescriptions": [
+            "Not specified.",
+            "Encoded as JSON `true` or `false`.",
+            "Encoded as `string`, in decimal format.",
+            "Encoded as `number`, or the strings `\"NaN\"`, `\"Infinity\"`, or\n`\"-Infinity\"`.",
+            "Encoded as `string` in RFC 3339 timestamp format. The time zone\nmust be present, and must be `\"Z\"`.",
+            "Encoded as `string` in RFC 3339 date format.",
+            "Encoded as `string`.",
+            "Encoded as a base64-encoded `string`, as described in RFC 4648,\nsection 4.",
+            "Encoded as `list`, where the list elements are represented\naccording to array_element_type.",
+            "Encoded as `list`, where list element `i` is represented according\nto [struct_type.fields[i]][google.spanner.v1.StructType.fields]."
+          ],
+          "enum": [
+            "TYPE_CODE_UNSPECIFIED",
+            "BOOL",
+            "INT64",
+            "FLOAT64",
+            "TIMESTAMP",
+            "DATE",
+            "STRING",
+            "BYTES",
+            "ARRAY",
+            "STRUCT"
+          ],
+          "description": "Required. The TypeCode for this type."
+        },
+        "structType": {
+          "$ref": "StructType",
+          "description": "If code == STRUCT, then `struct_type`\nprovides type information for the struct's fields."
+        },
+        "arrayElementType": {
+          "$ref": "Type",
+          "description": "If code == ARRAY, then `array_element_type`\nis the type of the array elements."
+        }
+      },
+      "id": "Type",
+      "description": "`Type` indicates the type of a Cloud Spanner value, as might be stored in a\ntable cell or returned from an SQL query."
+    },
+    "PlanNode": {
+      "description": "Node information for nodes appearing in a QueryPlan.plan_nodes.",
+      "type": "object",
+      "properties": {
+        "metadata": {
+          "type": "object",
+          "additionalProperties": {
+            "type": "any",
+            "description": "Properties of the object."
+          },
+          "description": "Attributes relevant to the node contained in a group of key-value pairs.\nFor example, a Parameter Reference node could have the following\ninformation in its metadata:\n\n    {\n      \"parameter_reference\": \"param1\",\n      \"parameter_type\": \"array\"\n    }"
+        },
+        "executionStats": {
+          "additionalProperties": {
+            "description": "Properties of the object.",
+            "type": "any"
+          },
+          "description": "The execution statistics associated with the node, contained in a group of\nkey-value pairs. Only present if the plan was returned as a result of a\nprofile query. For example, number of executions, number of rows/time per\nexecution etc.",
+          "type": "object"
+        },
+        "shortRepresentation": {
+          "$ref": "ShortRepresentation",
+          "description": "Condensed representation for SCALAR nodes."
+        },
+        "index": {
+          "type": "integer",
+          "description": "The `PlanNode`'s index in node list.",
+          "format": "int32"
+        },
+        "kind": {
+          "enum": [
+            "KIND_UNSPECIFIED",
+            "RELATIONAL",
+            "SCALAR"
+          ],
+          "description": "Used to determine the type of node. May be needed for visualizing\ndifferent kinds of nodes differently. For example, If the node is a\nSCALAR node, it will have a condensed representation\nwhich can be used to directly embed a description of the node in its\nparent.",
+          "type": "string",
+          "enumDescriptions": [
+            "Not specified.",
+            "Denotes a Relational operator node in the expression tree. Relational\noperators represent iterative processing of rows during query execution.\nFor example, a `TableScan` operation that reads rows from a table.",
+            "Denotes a Scalar node in the expression tree. Scalar nodes represent\nnon-iterable entities in the query plan. For example, constants or\narithmetic operators appearing inside predicate expressions or references\nto column names."
+          ]
+        },
+        "displayName": {
+          "type": "string",
+          "description": "The display name for the node."
+        },
+        "childLinks": {
+          "description": "List of child node `index`es and their relationship to this parent.",
+          "type": "array",
+          "items": {
+            "$ref": "ChildLink"
+          }
+        }
+      },
+      "id": "PlanNode"
+    },
+    "CreateInstanceMetadata": {
+      "description": "Metadata type for the operation returned by\nCreateInstance.",
+      "type": "object",
+      "properties": {
+        "cancelTime": {
+          "description": "The time at which this operation was cancelled. If set, this operation is\nin the process of undoing itself (which is guaranteed to succeed) and\ncannot be cancelled again.",
+          "format": "google-datetime",
+          "type": "string"
+        },
+        "endTime": {
+          "description": "The time at which this operation failed or was completed successfully.",
+          "format": "google-datetime",
+          "type": "string"
+        },
+        "instance": {
+          "$ref": "Instance",
+          "description": "The instance being created."
+        },
+        "startTime": {
+          "type": "string",
+          "description": "The time at which the\nCreateInstance request was\nreceived.",
+          "format": "google-datetime"
+        }
+      },
+      "id": "CreateInstanceMetadata"
+    },
+    "AuditConfig": {
+      "type": "object",
+      "properties": {
+        "exemptedMembers": {
+          "description": "Specifies the identities that are exempted from \"data access\" audit\nlogging for the `service` specified above.\nFollows the same format of Binding.members.\nThis field is deprecated in favor of per-permission-type exemptions.",
+          "type": "array",
+          "items": {
+            "type": "string"
+          }
+        },
+        "service": {
+          "type": "string",
+          "description": "Specifies a service that will be enabled for audit logging.\nFor example, `resourcemanager`, `storage`, `compute`.\n`allServices` is a special value that covers all services."
+        },
+        "auditLogConfigs": {
+          "description": "The configuration for logging of each type of permission.\nNext ID: 4",
+          "type": "array",
+          "items": {
+            "$ref": "AuditLogConfig"
+          }
+        }
+      },
+      "id": "AuditConfig",
+      "description": "Specifies the audit configuration for a service.\nIt consists of which permission types are logged, and what identities, if\nany, are exempted from logging.\nAn AuditConifg must have one or more AuditLogConfigs."
+    },
+    "ChildLink": {
+      "description": "Metadata associated with a parent-child relationship appearing in a\nPlanNode.",
+      "type": "object",
+      "properties": {
+        "type": {
+          "description": "The type of the link. For example, in Hash Joins this could be used to\ndistinguish between the build child and the probe child, or in the case\nof the child being an output variable, to represent the tag associated\nwith the output variable.",
+          "type": "string"
+        },
+        "childIndex": {
+          "type": "integer",
+          "description": "The node to which the link points.",
+          "format": "int32"
+        },
+        "variable": {
+          "type": "string",
+          "description": "Only present if the child node is SCALAR and corresponds\nto an output variable of the parent node. The field carries the name of\nthe output variable.\nFor example, a `TableScan` operator that reads rows from a table will\nhave child links to the `SCALAR` nodes representing the output variables\ncreated for each column that is read by the operator. The corresponding\n`variable` fields will be set to the variable names assigned to the\ncolumns."
+        }
+      },
+      "id": "ChildLink"
+    },
+    "CloudAuditOptions": {
+      "type": "object",
+      "properties": {},
+      "id": "CloudAuditOptions",
+      "description": "Write a Cloud Audit log"
+    },
+    "Delete": {
+      "description": "Arguments to delete operations.",
+      "type": "object",
+      "properties": {
+        "table": {
+          "description": "Required. The table whose rows will be deleted.",
+          "type": "string"
+        },
+        "keySet": {
+          "$ref": "KeySet",
+          "description": "Required. The primary keys of the rows within table to delete."
+        }
+      },
+      "id": "Delete"
+    },
+    "ListInstanceConfigsResponse": {
+      "type": "object",
+      "properties": {
+        "nextPageToken": {
+          "type": "string",
+          "description": "`next_page_token` can be sent in a subsequent\nListInstanceConfigs call to\nfetch more of the matching instance configurations."
+        },
+        "instanceConfigs": {
+          "description": "The list of requested instance configurations.",
+          "type": "array",
+          "items": {
+            "$ref": "InstanceConfig"
+          }
+        }
+      },
+      "id": "ListInstanceConfigsResponse",
+      "description": "The response for ListInstanceConfigs."
+    },
+    "BeginTransactionRequest": {
+      "type": "object",
+      "properties": {
+        "options": {
+          "$ref": "TransactionOptions",
+          "description": "Required. Options for the new transaction."
+        }
+      },
+      "id": "BeginTransactionRequest",
+      "description": "The request for BeginTransaction."
+    },
+    "CommitRequest": {
+      "description": "The request for Commit.",
+      "type": "object",
+      "properties": {
+        "singleUseTransaction": {
+          "$ref": "TransactionOptions",
+          "description": "Execute mutations in a temporary transaction. Note that unlike\ncommit of a previously-started transaction, commit with a\ntemporary transaction is non-idempotent. That is, if the\n`CommitRequest` is sent to Cloud Spanner more than once (for\ninstance, due to retries in the application, or in the\ntransport library), it is possible that the mutations are\nexecuted more than once. If this is undesirable, use\nBeginTransaction and\nCommit instead."
+        },
+        "mutations": {
+          "description": "The mutations to be executed when this transaction commits. All\nmutations are applied atomically, in the order they appear in\nthis list.",
+          "type": "array",
+          "items": {
+            "$ref": "Mutation"
+          }
+        },
+        "transactionId": {
+          "description": "Commit a previously-started transaction.",
+          "format": "byte",
+          "type": "string"
+        }
+      },
+      "id": "CommitRequest"
+    },
+    "GetIamPolicyRequest": {
+      "description": "Request message for `GetIamPolicy` method.",
+      "type": "object",
+      "properties": {},
+      "id": "GetIamPolicyRequest"
+    },
+    "TestIamPermissionsResponse": {
+      "description": "Response message for `TestIamPermissions` method.",
+      "type": "object",
+      "properties": {
+        "permissions": {
+          "description": "A subset of `TestPermissionsRequest.permissions` that the caller is\nallowed.",
+          "type": "array",
+          "items": {
+            "type": "string"
+          }
+        }
+      },
+      "id": "TestIamPermissionsResponse"
+    },
+    "Rule": {
+      "type": "object",
+      "properties": {
+        "description": {
+          "description": "Human-readable description of the rule.",
+          "type": "string"
+        },
+        "conditions": {
+          "type": "array",
+          "items": {
+            "$ref": "Condition"
+          },
+          "description": "Additional restrictions that must be met"
+        },
+        "logConfig": {
+          "type": "array",
+          "items": {
+            "$ref": "LogConfig"
+          },
+          "description": "The config returned to callers of tech.iam.IAM.CheckPolicy for any entries\nthat match the LOG action."
+        },
+        "in": {
+          "type": "array",
+          "items": {
+            "type": "string"
+          },
+          "description": "If one or more 'in' clauses are specified, the rule matches if\nthe PRINCIPAL/AUTHORITY_SELECTOR is in at least one of these entries."
+        },
+        "permissions": {
+          "type": "array",
+          "items": {
+            "type": "string"
+          },
+          "description": "A permission is a string of form '\u003cservice\u003e.\u003cresource type\u003e.\u003cverb\u003e'\n(e.g., 'storage.buckets.list'). A value of '*' matches all permissions,\nand a verb part of '*' (e.g., 'storage.buckets.*') matches all verbs."
+        },
+        "action": {
+          "type": "string",
+          "enumDescriptions": [
+            "Default no action.",
+            "Matching 'Entries' grant access.",
+            "Matching 'Entries' grant access and the caller promises to log\nthe request per the returned log_configs.",
+            "Matching 'Entries' deny access.",
+            "Matching 'Entries' deny access and the caller promises to log\nthe request per the returned log_configs.",
+            "Matching 'Entries' tell IAM.Check callers to generate logs."
+          ],
+          "enum": [
+            "NO_ACTION",
+            "ALLOW",
+            "ALLOW_WITH_LOG",
+            "DENY",
+            "DENY_WITH_LOG",
+            "LOG"
+          ],
+          "description": "Required"
+        },
+        "notIn": {
+          "description": "If one or more 'not_in' clauses are specified, the rule matches\nif the PRINCIPAL/AUTHORITY_SELECTOR is in none of the entries.\nThe format for in and not_in entries is the same as for members in a\nBinding (see google/iam/v1/policy.proto).",
+          "type": "array",
+          "items": {
+            "type": "string"
+          }
+        }
+      },
+      "id": "Rule",
+      "description": "A rule to be applied in a Policy."
+    },
+    "CreateDatabaseMetadata": {
+      "description": "Metadata type for the operation returned by\nCreateDatabase.",
+      "type": "object",
+      "properties": {
+        "database": {
+          "description": "The database being created.",
+          "type": "string"
+        }
+      },
+      "id": "CreateDatabaseMetadata"
+    },
+    "LogConfig": {
+      "type": "object",
+      "properties": {
+        "dataAccess": {
+          "$ref": "DataAccessOptions",
+          "description": "Data access options."
+        },
+        "cloudAudit": {
+          "$ref": "CloudAuditOptions",
+          "description": "Cloud audit options."
+        },
+        "counter": {
+          "$ref": "CounterOptions",
+          "description": "Counter options."
+        }
+      },
+      "id": "LogConfig",
+      "description": "Specifies what kind of log the caller must write\nIncrement a streamz counter with the specified metric and field names.\n\nMetric names should start with a '/', generally be lowercase-only,\nand end in \"_count\". Field names should not contain an initial slash.\nThe actual exported metric names will have \"/iam/policy\" prepended.\n\nField names correspond to IAM request parameters and field values are\ntheir respective values.\n\nAt present the only supported field names are\n   - \"iam_principal\", corresponding to IAMContext.principal;\n   - \"\" (empty string), resulting in one aggretated counter with no field.\n\nExamples:\n  counter { metric: \"/debug_access_count\"  field: \"iam_principal\" }\n  ==\u003e increment counter /iam/policy/backend_debug_access_count\n                        {iam_principal=[value of IAMContext.principal]}\n\nAt this time we do not support:\n* multiple field names (though this may be supported in the future)\n* decrementing the counter\n* incrementing it by anything other than 1"
+    },
+    "Session": {
+      "description": "A session in the Cloud Spanner API.",
+      "type": "object",
+      "properties": {
+        "name": {
+          "type": "string",
+          "description": "Required. The name of the session."
+        }
+      },
+      "id": "Session"
+    },
+    "KeyRange": {
+      "type": "object",
+      "properties": {
+        "endOpen": {
+          "description": "If the end is open, then the range excludes rows whose first\n`len(end_open)` key columns exactly match `end_open`.",
+          "type": "array",
+          "items": {
+            "type": "any"
+          }
+        },
+        "endClosed": {
+          "type": "array",
+          "items": {
+            "type": "any"
+          },
+          "description": "If the end is closed, then the range includes all rows whose\nfirst `len(end_closed)` key columns exactly match `end_closed`."
+        },
+        "startClosed": {
+          "description": "If the start is closed, then the range includes all rows whose\nfirst `len(start_closed)` key columns exactly match `start_closed`.",
+          "type": "array",
+          "items": {
+            "type": "any"
+          }
+        },
+        "startOpen": {
+          "type": "array",
+          "items": {
+            "type": "any"
+          },
+          "description": "If the start is open, then the range excludes rows whose first\n`len(start_open)` key columns exactly match `start_open`."
+        }
+      },
+      "id": "KeyRange",
+      "description": "KeyRange represents a range of rows in a table or index.\n\nA range has a start key and an end key. These keys can be open or\nclosed, indicating if the range includes rows with that key.\n\nKeys are represented by lists, where the ith value in the list\ncorresponds to the ith component of the table or index primary key.\nIndividual values are encoded as described here.\n\nFor example, consider the following table definition:\n\n    CREATE TABLE UserEvents (\n      UserName STRING(MAX),\n      EventDate STRING(10)\n    ) PRIMARY KEY(UserName, EventDate);\n\nThe following keys name rows in this table:\n\n    \"Bob\", \"2014-09-23\"\n\nSince the `UserEvents` table's `PRIMARY KEY` clause names two\ncolumns, each `UserEvents` key has two elements; the first is the\n`UserName`, and the second is the `EventDate`.\n\nKey ranges with multiple components are interpreted\nlexicographically by component using the table or index key's declared\nsort order. For example, the following range returns all events for\nuser `\"Bob\"` that occurred in the year 2015:\n\n    \"start_closed\": [\"Bob\", \"2015-01-01\"]\n    \"end_closed\": [\"Bob\", \"2015-12-31\"]\n\nStart and end keys can omit trailing key components. This affects the\ninclusion and exclusion of rows that exactly match the provided key\ncomponents: if the key is closed, then rows that exactly match the\nprovided components are included; if the key is open, then rows\nthat exactly match are not included.\n\nFor example, the following range includes all events for `\"Bob\"` that\noccurred during and after the year 2000:\n\n    \"start_closed\": [\"Bob\", \"2000-01-01\"]\n    \"end_closed\": [\"Bob\"]\n\nThe next example retrieves all events for `\"Bob\"`:\n\n    \"start_closed\": [\"Bob\"]\n    \"end_closed\": [\"Bob\"]\n\nTo retrieve events before the year 2000:\n\n    \"start_closed\": [\"Bob\"]\n    \"end_open\": [\"Bob\", \"2000-01-01\"]\n\nThe following range includes all rows in the table:\n\n    \"start_closed\": []\n    \"end_closed\": []\n\nThis range returns all users whose `UserName` begins with any\ncharacter from A to C:\n\n    \"start_closed\": [\"A\"]\n    \"end_open\": [\"D\"]\n\nThis range returns all users whose `UserName` begins with B:\n\n    \"start_closed\": [\"B\"]\n    \"end_open\": [\"C\"]\n\nKey ranges honor column sort order. For example, suppose a table is\ndefined as follows:\n\n    CREATE TABLE DescendingSortedTable {\n      Key INT64,\n      ...\n    ) PRIMARY KEY(Key DESC);\n\nThe following range retrieves all rows with key values between 1\nand 100 inclusive:\n\n    \"start_closed\": [\"100\"]\n    \"end_closed\": [\"1\"]\n\nNote that 100 is passed as the start, and 1 is passed as the end,\nbecause `Key` is a descending column in the schema."
+    },
+    "ListInstancesResponse": {
+      "type": "object",
+      "properties": {
+        "instances": {
+          "description": "The list of requested instances.",
+          "type": "array",
+          "items": {
+            "$ref": "Instance"
+          }
+        },
+        "nextPageToken": {
+          "type": "string",
+          "description": "`next_page_token` can be sent in a subsequent\nListInstances call to fetch more\nof the matching instances."
+        }
+      },
+      "id": "ListInstancesResponse",
+      "description": "The response for ListInstances."
+    },
+    "ShortRepresentation": {
+      "type": "object",
+      "properties": {
+        "description": {
+          "description": "A string representation of the expression subtree rooted at this node.",
+          "type": "string"
+        },
+        "subqueries": {
+          "additionalProperties": {
+            "type": "integer",
+            "format": "int32"
+          },
+          "description": "A mapping of (subquery variable name) -\u003e (subquery node id) for cases\nwhere the `description` string of this node references a `SCALAR`\nsubquery contained in the expression subtree rooted at this node. The\nreferenced `SCALAR` subquery may not necessarily be a direct child of\nthis node.",
+          "type": "object"
+        }
+      },
+      "id": "ShortRepresentation",
+      "description": "Condensed representation of a node and its subtree. Only present for\n`SCALAR` PlanNode(s)."
+    },
+    "InstanceConfig": {
+      "type": "object",
+      "properties": {
+        "name": {
+          "type": "string",
+          "description": "A unique identifier for the instance configuration.  Values\nare of the form\n`projects/\u003cproject\u003e/instanceConfigs/a-z*`"
+        },
+        "displayName": {
+          "description": "The name of this instance configuration as it appears in UIs.",
+          "type": "string"
+        }
+      },
+      "id": "InstanceConfig",
+      "description": "A possible configuration for a Cloud Spanner instance. Configurations\ndefine the geographic placement of nodes and their replication."
+    },
+    "UpdateInstanceRequest": {
+      "description": "The request for UpdateInstance.",
+      "type": "object",
+      "properties": {
+        "instance": {
+          "$ref": "Instance",
+          "description": "Required. The instance to update, which must always include the instance\nname.  Otherwise, only fields mentioned in [][google.spanner.admin.instance.v1.UpdateInstanceRequest.field_mask] need be included."
+        },
+        "fieldMask": {
+          "description": "Required. A mask specifying which fields in [][google.spanner.admin.instance.v1.UpdateInstanceRequest.instance] should be updated.\nThe field mask must always be specified; this prevents any future fields in\n[][google.spanner.admin.instance.v1.Instance] from being erased accidentally by clients that do not know\nabout them.",
+          "format": "google-fieldmask",
+          "type": "string"
+        }
+      },
+      "id": "UpdateInstanceRequest"
+    },
+    "Empty": {
+      "type": "object",
+      "properties": {},
+      "id": "Empty",
+      "description": "A generic empty message that you can re-use to avoid defining duplicated\nempty messages in your APIs. A typical example is to use it as the request\nor the response type of an API method. For instance:\n\n    service Foo {\n      rpc Bar(google.protobuf.Empty) returns (google.protobuf.Empty);\n    }\n\nThe JSON representation for `Empty` is empty JSON object `{}`."
+    },
+    "TransactionOptions": {
+      "type": "object",
+      "properties": {
+        "readWrite": {
+          "$ref": "ReadWrite",
+          "description": "Transaction may write.\n\nAuthorization to begin a read-write transaction requires\n`spanner.databases.beginOrRollbackReadWriteTransaction` permission\non the `session` resource."
+        },
+        "readOnly": {
+          "$ref": "ReadOnly",
+          "description": "Transaction will not write.\n\nAuthorization to begin a read-only transaction requires\n`spanner.databases.beginReadOnlyTransaction` permission\non the `session` resource."
+        }
+      },
+      "id": "TransactionOptions",
+      "description": "# Transactions\n\n\nEach session can have at most one active transaction at a time. After the\nactive transaction is completed, the session can immediately be\nre-used for the next transaction. It is not necessary to create a\nnew session for each transaction.\n\n# Transaction Modes\n\nCloud Spanner supports two transaction modes:\n\n  1. Locking read-write. This type of transaction is the only way\n     to write data into Cloud Spanner. These transactions rely on\n     pessimistic locking and, if necessary, two-phase commit.\n     Locking read-write transactions may abort, requiring the\n     application to retry.\n\n  2. Snapshot read-only. This transaction type provides guaranteed\n     consistency across several reads, but does not allow\n     writes. Snapshot read-only transactions can be configured to\n     read at timestamps in the past. Snapshot read-only\n     transactions do not need to be committed.\n\nFor transactions that only read, snapshot read-only transactions\nprovide simpler semantics and are almost always faster. In\nparticular, read-only transactions do not take locks, so they do\nnot conflict with read-write transactions. As a consequence of not\ntaking locks, they also do not abort, so retry loops are not needed.\n\nTransactions may only read/write data in a single database. They\nmay, however, read/write data in different tables within that\ndatabase.\n\n## Locking Read-Write Transactions\n\nLocking transactions may be used to atomically read-modify-write\ndata anywhere in a database. This type of transaction is externally\nconsistent.\n\nClients should attempt to minimize the amount of time a transaction\nis active. Faster transactions commit with higher probability\nand cause less contention. Cloud Spanner attempts to keep read locks\nactive as long as the transaction continues to do reads, and the\ntransaction has not been terminated by\nCommit or\nRollback.  Long periods of\ninactivity at the client may cause Cloud Spanner to release a\ntransaction's locks and abort it.\n\nReads performed within a transaction acquire locks on the data\nbeing read. Writes can only be done at commit time, after all reads\nhave been completed.\nConceptually, a read-write transaction consists of zero or more\nreads or SQL queries followed by\nCommit. At any time before\nCommit, the client can send a\nRollback request to abort the\ntransaction.\n\n### Semantics\n\nCloud Spanner can commit the transaction if all read locks it acquired\nare still valid at commit time, and it is able to acquire write\nlocks for all writes. Cloud Spanner can abort the transaction for any\nreason. If a commit attempt returns `ABORTED`, Cloud Spanner guarantees\nthat the transaction has not modified any user data in Cloud Spanner.\n\nUnless the transaction commits, Cloud Spanner makes no guarantees about\nhow long the transaction's locks were held for. It is an error to\nuse Cloud Spanner locks for any sort of mutual exclusion other than\nbetween Cloud Spanner transactions themselves.\n\n### Retrying Aborted Transactions\n\nWhen a transaction aborts, the application can choose to retry the\nwhole transaction again. To maximize the chances of successfully\ncommitting the retry, the client should execute the retry in the\nsame session as the original attempt. The original session's lock\npriority increases with each consecutive abort, meaning that each\nattempt has a slightly better chance of success than the previous.\n\nUnder some circumstances (e.g., many transactions attempting to\nmodify the same row(s)), a transaction can abort many times in a\nshort period before successfully committing. Thus, it is not a good\nidea to cap the number of retries a transaction can attempt;\ninstead, it is better to limit the total amount of wall time spent\nretrying.\n\n### Idle Transactions\n\nA transaction is considered idle if it has no outstanding reads or\nSQL queries and has not started a read or SQL query within the last 10\nseconds. Idle transactions can be aborted by Cloud Spanner so that they\ndon't hold on to locks indefinitely. In that case, the commit will\nfail with error `ABORTED`.\n\nIf this behavior is undesirable, periodically executing a simple\nSQL query in the transaction (e.g., `SELECT 1`) prevents the\ntransaction from becoming idle.\n\n## Snapshot Read-Only Transactions\n\nSnapshot read-only transactions provides a simpler method than\nlocking read-write transactions for doing several consistent\nreads. However, this type of transaction does not support writes.\n\nSnapshot transactions do not take locks. Instead, they work by\nchoosing a Cloud Spanner timestamp, then executing all reads at that\ntimestamp. Since they do not acquire locks, they do not block\nconcurrent read-write transactions.\n\nUnlike locking read-write transactions, snapshot read-only\ntransactions never abort. They can fail if the chosen read\ntimestamp is garbage collected; however, the default garbage\ncollection policy is generous enough that most applications do not\nneed to worry about this in practice.\n\nSnapshot read-only transactions do not need to call\nCommit or\nRollback (and in fact are not\npermitted to do so).\n\nTo execute a snapshot transaction, the client specifies a timestamp\nbound, which tells Cloud Spanner how to choose a read timestamp.\n\nThe types of timestamp bound are:\n\n  - Strong (the default).\n  - Bounded staleness.\n  - Exact staleness.\n\nIf the Cloud Spanner database to be read is geographically distributed,\nstale read-only transactions can execute more quickly than strong\nor read-write transaction, because they are able to execute far\nfrom the leader replica.\n\nEach type of timestamp bound is discussed in detail below.\n\n### Strong\n\nStrong reads are guaranteed to see the effects of all transactions\nthat have committed before the start of the read. Furthermore, all\nrows yielded by a single read are consistent with each other -- if\nany part of the read observes a transaction, all parts of the read\nsee the transaction.\n\nStrong reads are not repeatable: two consecutive strong read-only\ntransactions might return inconsistent results if there are\nconcurrent writes. If consistency across reads is required, the\nreads should be executed within a transaction or at an exact read\ntimestamp.\n\nSee TransactionOptions.ReadOnly.strong.\n\n### Exact Staleness\n\nThese timestamp bounds execute reads at a user-specified\ntimestamp. Reads at a timestamp are guaranteed to see a consistent\nprefix of the global transaction history: they observe\nmodifications done by all transactions with a commit timestamp \u003c=\nthe read timestamp, and observe none of the modifications done by\ntransactions with a larger commit timestamp. They will block until\nall conflicting transactions that may be assigned commit timestamps\n\u003c= the read timestamp have finished.\n\nThe timestamp can either be expressed as an absolute Cloud Spanner commit\ntimestamp or a staleness relative to the current time.\n\nThese modes do not require a \"negotiation phase\" to pick a\ntimestamp. As a result, they execute slightly faster than the\nequivalent boundedly stale concurrency modes. On the other hand,\nboundedly stale reads usually return fresher results.\n\nSee TransactionOptions.ReadOnly.read_timestamp and\nTransactionOptions.ReadOnly.exact_staleness.\n\n### Bounded Staleness\n\nBounded staleness modes allow Cloud Spanner to pick the read timestamp,\nsubject to a user-provided staleness bound. Cloud Spanner chooses the\nnewest timestamp within the staleness bound that allows execution\nof the reads at the closest available replica without blocking.\n\nAll rows yielded are consistent with each other -- if any part of\nthe read observes a transaction, all parts of the read see the\ntransaction. Boundedly stale reads are not repeatable: two stale\nreads, even if they use the same staleness bound, can execute at\ndifferent timestamps and thus return inconsistent results.\n\nBoundedly stale reads execute in two phases: the first phase\nnegotiates a timestamp among all replicas needed to serve the\nread. In the second phase, reads are executed at the negotiated\ntimestamp.\n\nAs a result of the two phase execution, bounded staleness reads are\nusually a little slower than comparable exact staleness\nreads. However, they are typically able to return fresher\nresults, and are more likely to execute at the closest replica.\n\nBecause the timestamp negotiation requires up-front knowledge of\nwhich rows will be read, it can only be used with single-use\nread-only transactions.\n\nSee TransactionOptions.ReadOnly.max_staleness and\nTransactionOptions.ReadOnly.min_read_timestamp.\n\n### Old Read Timestamps and Garbage Collection\n\nCloud Spanner continuously garbage collects deleted and overwritten data\nin the background to reclaim storage space. This process is known\nas \"version GC\". By default, version GC reclaims versions after they\nare one hour old. Because of this, Cloud Spanner cannot perform reads\nat read timestamps more than one hour in the past. This\nrestriction also applies to in-progress reads and/or SQL queries whose\ntimestamp become too old while executing. Reads and SQL queries with\ntoo-old read timestamps fail with the error `FAILED_PRECONDITION`."
+    },
+    "CreateDatabaseRequest": {
+      "description": "The request for CreateDatabase.",
+      "type": "object",
+      "properties": {
+        "createStatement": {
+          "type": "string",
+          "description": "Required. A `CREATE DATABASE` statement, which specifies the ID of the\nnew database.  The database ID must conform to the regular expression\n`a-z*[a-z0-9]` and be between 2 and 30 characters in length."
+        },
+        "extraStatements": {
+          "description": "An optional list of DDL statements to run inside the newly created\ndatabase. Statements can create tables, indexes, etc. These\nstatements execute atomically with the creation of the database:\nif there is an error in any statement, the database is not created.",
+          "type": "array",
+          "items": {
+            "type": "string"
+          }
+        }
+      },
+      "id": "CreateDatabaseRequest"
+    },
+    "CreateInstanceRequest": {
+      "description": "The request for CreateInstance.",
+      "type": "object",
+      "properties": {
+        "instanceId": {
+          "description": "Required. The ID of the instance to create.  Valid identifiers are of the\nform `a-z*[a-z0-9]` and must be between 6 and 30 characters in\nlength.",
+          "type": "string"
+        },
+        "instance": {
+          "$ref": "Instance",
+          "description": "Required. The instance to create.  The name may be omitted, but if\nspecified must be `\u003cparent\u003e/instances/\u003cinstance_id\u003e`."
+        }
+      },
+      "id": "CreateInstanceRequest"
+    },
+    "Condition": {
+      "description": "A condition to be met.",
+      "type": "object",
+      "properties": {
+        "sys": {
+          "enum": [
+            "NO_ATTR",
+            "REGION",
+            "SERVICE",
+            "NAME",
+            "IP"
+          ],
+          "description": "Trusted attributes supplied by any service that owns resources and uses\nthe IAM system for access control.",
+          "type": "string",
+          "enumDescriptions": [
+            "Default non-attribute type",
+            "Region of the resource",
+            "Service name",
+            "Resource name",
+            "IP address of the caller"
+          ]
+        },
+        "value": {
+          "description": "DEPRECATED. Use 'values' instead.",
+          "type": "string"
+        },
+        "iam": {
+          "enum": [
+            "NO_ATTR",
+            "AUTHORITY",
+            "ATTRIBUTION",
+            "SECURITY_REALM",
+            "APPROVER"
+          ],
+          "description": "Trusted attributes supplied by the IAM system.",
+          "type": "string",
+          "enumDescriptions": [
+            "Default non-attribute.",
+            "Either principal or (if present) authority selector.",
+            "The principal (even if an authority selector is present), which\nmust only be used for attribution, not authorization.",
+            "Any of the security realms in the IAMContext (go/security-realms).\nWhen used with IN, the condition indicates \"any of the request's realms\nmatch one of the given values; with NOT_IN, \"none of the realms match\nany of the given values\". It is not permitted to grant access based on\nthe *absence* of a realm, so realm conditions can only be used in\na \"positive\" context (e.g., ALLOW/IN or DENY/NOT_IN).",
+            "An approver (distinct from the requester) that has authorized this\nrequest.\nWhen used with IN, the condition indicates that one of the approvers\nassociated with the request matches the specified principal, or is a\nmember of the specified group. Approvers can only grant additional\naccess, and are thus only used in a strictly positive context\n(e.g. ALLOW/IN or DENY/NOT_IN).\nSee: go/rpc-security-policy-dynamicauth."
+          ]
+        },
+        "values": {
+          "description": "The objects of the condition. This is mutually exclusive with 'value'.",
+          "type": "array",
+          "items": {
+            "type": "string"
+          }
+        },
+        "op": {
+          "type": "string",
+          "enumDescriptions": [
+            "Default no-op.",
+            "DEPRECATED. Use IN instead.",
+            "DEPRECATED. Use NOT_IN instead.",
+            "Set-inclusion check.",
+            "Set-exclusion check.",
+            "Subject is discharged"
+          ],
+          "enum": [
+            "NO_OP",
+            "EQUALS",
+            "NOT_EQUALS",
+            "IN",
+            "NOT_IN",
+            "DISCHARGED"
+          ],
+          "description": "An operator to apply the subject with."
+        },
+        "svc": {
+          "type": "string",
+          "description": "Trusted attributes discharged by the service."
+        }
+      },
+      "id": "Condition"
+    },
+    "AuditLogConfig": {
+      "type": "object",
+      "properties": {
+        "logType": {
+          "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"
+          ],
+          "enum": [
+            "LOG_TYPE_UNSPECIFIED",
+            "ADMIN_READ",
+            "DATA_WRITE",
+            "DATA_READ"
+          ],
+          "description": "The log type that this config enables."
+        },
+        "exemptedMembers": {
+          "type": "array",
+          "items": {
+            "type": "string"
+          },
+          "description": "Specifies the identities that do not cause logging for this type of\npermission.\nFollows the same format of Binding.members."
+        }
+      },
+      "id": "AuditLogConfig",
+      "description": "Provides the configuration for logging a type of permissions.\nExample:\n\n    {\n      \"audit_log_configs\": [\n        {\n          \"log_type\": \"DATA_READ\",\n          \"exempted_members\": [\n            \"user:foo@gmail.com\"\n          ]\n        },\n        {\n          \"log_type\": \"DATA_WRITE\",\n        }\n      ]\n    }\n\nThis enables 'DATA_READ' and 'DATA_WRITE' logging, while exempting\nfoo@gmail.com from DATA_READ logging."
+    },
+    "ReadOnly": {
+      "description": "Options for read-only transactions.",
+      "type": "object",
+      "properties": {
+        "exactStaleness": {
+          "type": "string",
+          "description": "Executes all reads at a timestamp that is `exact_staleness`\nold. The timestamp is chosen soon after the read is started.\n\nGuarantees that all writes that have committed more than the\nspecified number of seconds ago are visible. Because Cloud Spanner\nchooses the exact timestamp, this mode works even if the client's\nlocal clock is substantially skewed from Cloud Spanner commit\ntimestamps.\n\nUseful for reading at nearby replicas without the distributed\ntimestamp negotiation overhead of `max_staleness`.",
+          "format": "google-duration"
+        },
+        "strong": {
+          "type": "boolean",
+          "description": "Read at a timestamp where all previously committed transactions\nare visible."
+        },
+        "minReadTimestamp": {
+          "type": "string",
+          "description": "Executes all reads at a timestamp \u003e= `min_read_timestamp`.\n\nThis is useful for requesting fresher data than some previous\nread, or data that is fresh enough to observe the effects of some\npreviously committed transaction whose timestamp is known.\n\nNote that this option can only be used in single-use transactions.",
+          "format": "google-datetime"
+        },
+        "maxStaleness": {
+          "description": "Read data at a timestamp \u003e= `NOW - max_staleness`\nseconds. Guarantees that all writes that have committed more\nthan the specified number of seconds ago are visible. Because\nCloud Spanner chooses the exact timestamp, this mode works even if\nthe client's local clock is substantially skewed from Cloud Spanner\ncommit timestamps.\n\nUseful for reading the freshest data available at a nearby\nreplica, while bounding the possible staleness if the local\nreplica has fallen behind.\n\nNote that this option can only be used in single-use\ntransactions.",
+          "format": "google-duration",
+          "type": "string"
+        },
+        "readTimestamp": {
+          "type": "string",
+          "description": "Executes all reads at the given timestamp. Unlike other modes,\nreads at a specific timestamp are repeatable; the same read at\nthe same timestamp always returns the same data. If the\ntimestamp is in the future, the read will block until the\nspecified timestamp, modulo the read's deadline.\n\nUseful for large scale consistent reads such as mapreduces, or\nfor coordinating many reads against a consistent snapshot of the\ndata.",
+          "format": "google-datetime"
+        },
+        "returnReadTimestamp": {
+          "description": "If true, the Cloud Spanner-selected read timestamp is included in\nthe Transaction message that describes the transaction.",
+          "type": "boolean"
+        }
+      },
+      "id": "ReadOnly"
+    },
+    "ExecuteSqlRequest": {
+      "type": "object",
+      "properties": {
+        "transaction": {
+          "$ref": "TransactionSelector",
+          "description": "The transaction to use. If none is provided, the default is a\ntemporary read-only transaction with strong concurrency."
+        },
+        "resumeToken": {
+          "description": "If this request is resuming a previously interrupted SQL query\nexecution, `resume_token` should be copied from the last\nPartialResultSet yielded before the interruption. Doing this\nenables the new SQL query execution to resume where the last one left\noff. The rest of the request parameters must exactly match the\nrequest that yielded this token.",
+          "format": "byte",
+          "type": "string"
+        },
+        "paramTypes": {
+          "type": "object",
+          "additionalProperties": {
+            "$ref": "Type"
+          },
+          "description": "It is not always possible for Cloud Spanner to infer the right SQL type\nfrom a JSON value.  For example, values of type `BYTES` and values\nof type `STRING` both appear in params as JSON strings.\n\nIn these cases, `param_types` can be used to specify the exact\nSQL type for some or all of the SQL query parameters. See the\ndefinition of Type for more information\nabout SQL types."
+        },
+        "sql": {
+          "description": "Required. The SQL query string.",
+          "type": "string"
+        },
+        "params": {
+          "type": "object",
+          "additionalProperties": {
+            "description": "Properties of the object.",
+            "type": "any"
+          },
+          "description": "The SQL query string can contain parameter placeholders. A parameter\nplaceholder consists of `'@'` followed by the parameter\nname. Parameter names consist of any combination of letters,\nnumbers, and underscores.\n\nParameters can appear anywhere that a literal value is expected.  The same\nparameter name can be used more than once, for example:\n  `\"WHERE id \u003e @msg_id AND id \u003c @msg_id + 100\"`\n\nIt is an error to execute an SQL query with unbound parameters.\n\nParameter values are specified using `params`, which is a JSON\nobject whose keys are parameter names, and whose values are the\ncorresponding parameter values."
+        },
+        "queryMode": {
+          "type": "string",
+          "enumDescriptions": [
+            "The default mode where only the query result, without any information\nabout the query plan is returned.",
+            "This mode returns only the query plan, without any result rows or\nexecution statistics information.",
+            "This mode returns both the query plan and the execution statistics along\nwith the result rows."
+          ],
+          "enum": [
+            "NORMAL",
+            "PLAN",
+            "PROFILE"
+          ],
+          "description": "Used to control the amount of debugging information returned in\nResultSetStats."
+        }
+      },
+      "id": "ExecuteSqlRequest",
+      "description": "The request for ExecuteSql and\nExecuteStreamingSql."
+    },
+    "Policy": {
+      "description": "Defines an Identity and Access Management (IAM) policy. It is used to\nspecify access control policies for Cloud Platform resources.\n\n\nA `Policy` consists of a list of `bindings`. A `Binding` binds a list of\n`members` to a `role`, where the members can be user accounts, Google groups,\nGoogle domains, and service accounts. A `role` is a named list of permissions\ndefined by IAM.\n\n**Example**\n\n    {\n      \"bindings\": [\n        {\n          \"role\": \"roles/owner\",\n          \"members\": [\n            \"user:mike@example.com\",\n            \"group:admins@example.com\",\n            \"domain:google.com\",\n            \"serviceAccount:my-other-app@appspot.gserviceaccount.com\",\n          ]\n        },\n        {\n          \"role\": \"roles/viewer\",\n          \"members\": [\"user:sean@example.com\"]\n        }\n      ]\n    }\n\nFor a description of IAM and its features, see the\n[IAM developer's guide](https://cloud.google.com/iam).",
+      "type": "object",
+      "properties": {
+        "etag": {
+          "type": "string",
+          "description": "`etag` is used for optimistic concurrency control as a way to help\nprevent simultaneous updates of a policy from overwriting each other.\nIt is strongly suggested that systems make use of the `etag` in the\nread-modify-write cycle to perform policy updates in order to avoid race\nconditions: An `etag` is returned in the response to `getIamPolicy`, and\nsystems are expected to put that etag in the request to `setIamPolicy` to\nensure that their change will be applied to the same version of the policy.\n\nIf no `etag` is provided in the call to `setIamPolicy`, then the existing\npolicy is overwritten blindly.",
+          "format": "byte"
+        },
+        "iamOwned": {
+          "type": "boolean"
+        },
+        "rules": {
+          "type": "array",
+          "items": {
+            "$ref": "Rule"
+          },
+          "description": "If more than one rule is specified, the rules are applied in the following\nmanner:\n- All matching LOG rules are always applied.\n- If any DENY/DENY_WITH_LOG rule matches, permission is denied.\n  Logging will be applied if one or more matching rule requires logging.\n- Otherwise, if any ALLOW/ALLOW_WITH_LOG rule matches, permission is\n  granted.\n  Logging will be applied if one or more matching rule requires logging.\n- Otherwise, if no rule applies, permission is denied."
+        },
+        "version": {
+          "type": "integer",
+          "description": "Version of the `Policy`. The default version is 0.",
+          "format": "int32"
+        },
+        "auditConfigs": {
+          "description": "Specifies cloud audit logging configuration for this policy.",
+          "type": "array",
+          "items": {
+            "$ref": "AuditConfig"
+          }
+        },
+        "bindings": {
+          "type": "array",
+          "items": {
+            "$ref": "Binding"
+          },
+          "description": "Associates a list of `members` to a `role`.\nMultiple `bindings` must not be specified for the same `role`.\n`bindings` with no members will result in an error."
+        }
+      },
+      "id": "Policy"
+    },
+    "ReadRequest": {
+      "type": "object",
+      "properties": {
+        "index": {
+          "type": "string",
+          "description": "If non-empty, the name of an index on table. This index is\nused instead of the table primary key when interpreting key_set\nand sorting result rows. See key_set for further information."
+        },
+        "keySet": {
+          "$ref": "KeySet",
+          "description": "Required. `key_set` identifies the rows to be yielded. `key_set` names the\nprimary keys of the rows in table to be yielded, unless index\nis present. If index is present, then key_set instead names\nindex keys in index.\n\nRows are yielded in table primary key order (if index is empty)\nor index key order (if index is non-empty).\n\nIt is not an error for the `key_set` to name rows that do not\nexist in the database. Read yields nothing for nonexistent rows."
+        },
+        "columns": {
+          "type": "array",
+          "items": {
+            "type": "string"
+          },
+          "description": "The columns of table to be returned for each row matching\nthis request."
+        },
+        "transaction": {
+          "$ref": "TransactionSelector",
+          "description": "The transaction to use. If none is provided, the default is a\ntemporary read-only transaction with strong concurrency."
+        },
+        "resumeToken": {
+          "type": "string",
+          "description": "If this request is resuming a previously interrupted read,\n`resume_token` should be copied from the last\nPartialResultSet yielded before the interruption. Doing this\nenables the new read to resume where the last read left off. The\nrest of the request parameters must exactly match the request\nthat yielded this token.",
+          "format": "byte"
+        },
+        "table": {
+          "type": "string",
+          "description": "Required. The name of the table in the database to be read."
+        },
+        "limit": {
+          "description": "If greater than zero, only the first `limit` rows are yielded. If `limit`\nis zero, the default is no limit.",
+          "format": "int64",
+          "type": "string"
+        }
+      },
+      "id": "ReadRequest",
+      "description": "The request for Read and\nStreamingRead."
+    },
+    "Write": {
+      "type": "object",
+      "properties": {
+        "table": {
+          "type": "string",
+          "description": "Required. The table whose rows will be written."
+        },
+        "columns": {
+          "type": "array",
+          "items": {
+            "type": "string"
+          },
+          "description": "The names of the columns in table to be written.\n\nThe list of columns must contain enough columns to allow\nCloud Spanner to derive values for all primary key columns in the\nrow(s) to be modified."
+        },
+        "values": {
+          "type": "array",
+          "items": {
+            "type": "array",
+            "items": {
+              "type": "any"
+            }
+          },
+          "description": "The values to be written. `values` can contain more than one\nlist of values. If it does, then multiple rows are written, one\nfor each entry in `values`. Each list in `values` must have\nexactly as many entries as there are entries in columns\nabove. Sending multiple lists is equivalent to sending multiple\n`Mutation`s, each containing one `values` entry and repeating\ntable and columns. Individual values in each list are\nencoded as described here."
+        }
+      },
+      "id": "Write",
+      "description": "Arguments to insert, update, insert_or_update, and\nreplace operations."
+    },
+    "DataAccessOptions": {
+      "description": "Write a Data Access (Gin) log",
+      "type": "object",
+      "properties": {},
+      "id": "DataAccessOptions"
+    },
+    "ReadWrite": {
+      "type": "object",
+      "properties": {},
+      "id": "ReadWrite",
+      "description": "Options for read-write transactions."
+    },
+    "Operation": {
+      "description": "This resource represents a long-running operation that is the result of a\nnetwork API call.",
+      "type": "object",
+      "properties": {
+        "metadata": {
+          "type": "object",
+          "additionalProperties": {
+            "type": "any",
+            "description": "Properties of the object. Contains field @type with type URL."
+          },
+          "description": "Service-specific metadata associated with the operation.  It typically\ncontains progress information and common metadata such as create time.\nSome services might not provide such metadata.  Any method that returns a\nlong-running operation should document the metadata type, if any."
+        },
+        "done": {
+          "description": "If the value is `false`, it means the operation is still in progress.\nIf true, the operation is completed, and either `error` or `response` is\navailable.",
+          "type": "boolean"
+        },
+        "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\nmethod returns no data on success, such as `Delete`, the response is\n`google.protobuf.Empty`.  If the original method is standard\n`Get`/`Create`/`Update`, the response should be the resource.  For other\nmethods, the response should have the type `XxxResponse`, where `Xxx`\nis the original method name.  For example, if the original method name\nis `TakeSnapshot()`, the inferred response type is\n`TakeSnapshotResponse`."
+        },
+        "name": {
+          "type": "string",
+          "description": "The server-assigned name, which is only unique within the same service that\noriginally returns it. If you use the default HTTP mapping, the\n`name` should have the format of `operations/some/unique/name`."
+        },
+        "error": {
+          "$ref": "Status",
+          "description": "The error result of the operation in case of failure or cancellation."
+        }
+      },
+      "id": "Operation"
+    },
+    "Status": {
+      "type": "object",
+      "properties": {
+        "code": {
+          "description": "The status code, which should be an enum value of google.rpc.Code.",
+          "format": "int32",
+          "type": "integer"
+        },
+        "message": {
+          "description": "A developer-facing error message, which should be in English. Any\nuser-facing error message should be localized and sent in the\ngoogle.rpc.Status.details field, or localized by the client.",
+          "type": "string"
+        },
+        "details": {
+          "description": "A list of messages that carry the error details.  There will be a\ncommon set of message types for APIs to use.",
+          "type": "array",
+          "items": {
+            "additionalProperties": {
+              "type": "any",
+              "description": "Properties of the object. Contains field @type with type URL."
+            },
+            "type": "object"
+          }
+        }
+      },
+      "id": "Status",
+      "description": "The `Status` type defines a logical error model that is suitable for different\nprogramming environments, including REST APIs and RPC APIs. It is used by\n[gRPC](https://github.com/grpc). The error model is designed to be:\n\n- Simple to use and understand for most users\n- Flexible enough to meet unexpected needs\n\n# Overview\n\nThe `Status` message contains three pieces of data: error code, error message,\nand error details. The error code should be an enum value of\ngoogle.rpc.Code, but it may accept additional error codes if needed.  The\nerror message should be a developer-facing English message that helps\ndevelopers *understand* and *resolve* the error. If a localized user-facing\nerror message is needed, put the localized message in the error details or\nlocalize it in the client. The optional error details may contain arbitrary\ninformation about the error. There is a predefined set of error detail types\nin the package `google.rpc` which can be used for common error conditions.\n\n# Language mapping\n\nThe `Status` message is the logical representation of the error model, but it\nis not necessarily the actual wire format. When the `Status` message is\nexposed in different client libraries and different wire protocols, it can be\nmapped differently. For example, it will likely be mapped to some exceptions\nin Java, but more likely mapped to some error codes in C.\n\n# Other uses\n\nThe error model and the `Status` message can be used in a variety of\nenvironments, either with or without APIs, to provide a\nconsistent developer experience across different environments.\n\nExample uses of this error model include:\n\n- Partial errors. If a service needs to return partial errors to the client,\n    it may embed the `Status` in the normal response to indicate the partial\n    errors.\n\n- Workflow errors. A typical workflow has multiple steps. Each step may\n    have a `Status` message for error reporting purpose.\n\n- Batch operations. If a client uses batch request and batch response, the\n    `Status` message should be used directly inside batch response, one for\n    each error sub-response.\n\n- Asynchronous operations. If an API call embeds asynchronous operation\n    results in its response, the status of those operations should be\n    represented directly using the `Status` message.\n\n- Logging. If some API errors are stored in logs, the message `Status` could\n    be used directly after any stripping needed for security/privacy reasons."
+    },
+    "ResultSet": {
+      "description": "Results from Read or\nExecuteSql.",
+      "type": "object",
+      "properties": {
+        "metadata": {
+          "$ref": "ResultSetMetadata",
+          "description": "Metadata about the result set, such as row type information."
+        },
+        "stats": {
+          "$ref": "ResultSetStats",
+          "description": "Query plan and execution statistics for the query that produced this\nresult set. These can be requested by setting\nExecuteSqlRequest.query_mode."
+        },
+        "rows": {
+          "type": "array",
+          "items": {
+            "type": "array",
+            "items": {
+              "type": "any"
+            }
+          },
+          "description": "Each element in `rows` is a row whose format is defined by\nmetadata.row_type. The ith element\nin each row matches the ith field in\nmetadata.row_type. Elements are\nencoded based on type as described\nhere."
+        }
+      },
+      "id": "ResultSet"
+    },
+    "Binding": {
+      "type": "object",
+      "properties": {
+        "role": {
+          "type": "string",
+          "description": "Role that is assigned to `members`.\nFor example, `roles/viewer`, `roles/editor`, or `roles/owner`.\nRequired"
+        },
+        "members": {
+          "type": "array",
+          "items": {
+            "type": "string"
+          },
+          "description": "Specifies the identities requesting access for a Cloud Platform resource.\n`members` can have the following values:\n\n* `allUsers`: A special identifier that represents anyone who is\n   on the internet; with or without a Google account.\n\n* `allAuthenticatedUsers`: A special identifier that represents anyone\n   who is authenticated with a Google account or a service account.\n\n* `user:{emailid}`: An email address that represents a specific Google\n   account. For example, `alice@gmail.com` or `joe@example.com`.\n\n\n* `serviceAccount:{emailid}`: An email address that represents a service\n   account. For example, `my-other-app@appspot.gserviceaccount.com`.\n\n* `group:{emailid}`: An email address that represents a Google group.\n   For example, `admins@example.com`.\n\n* `domain:{domain}`: A Google Apps domain name that represents all the\n   users of that domain. For example, `google.com` or `example.com`.\n\n"
+        }
+      },
+      "id": "Binding",
+      "description": "Associates `members` with a `role`."
+    },
+    "UpdateDatabaseDdlRequest": {
+      "type": "object",
+      "properties": {
+        "statements": {
+          "type": "array",
+          "items": {
+            "type": "string"
+          },
+          "description": "DDL statements to be applied to the database."
+        },
+        "operationId": {
+          "description": "If empty, the new update request is assigned an\nautomatically-generated operation ID. Otherwise, `operation_id`\nis used to construct the name of the resulting\nOperation.\n\nSpecifying an explicit operation ID simplifies determining\nwhether the statements were executed in the event that the\nUpdateDatabaseDdl call is replayed,\nor the return value is otherwise lost: the database and\n`operation_id` fields can be combined to form the\nname of the resulting\nlongrunning.Operation: `\u003cdatabase\u003e/operations/\u003coperation_id\u003e`.\n\n`operation_id` should be unique within the database, and must be\na valid identifier: `a-z*`. Note that\nautomatically-generated operation IDs always begin with an\nunderscore. If the named operation already exists,\nUpdateDatabaseDdl returns\n`ALREADY_EXISTS`.",
+          "type": "string"
+        }
+      },
+      "id": "UpdateDatabaseDdlRequest",
+      "description": "Enqueues the given DDL statements to be applied, in order but not\nnecessarily all at once, to the database schema at some point (or\npoints) in the future. The server checks that the statements\nare executable (syntactically valid, name tables that exist, etc.)\nbefore enqueueing them, but they may still fail upon\nlater execution (e.g., if a statement from another batch of\nstatements is applied first and it conflicts in some way, or if\nthere is some data-related problem like a `NULL` value in a column to\nwhich `NOT NULL` would be added). If a statement fails, all\nsubsequent statements in the batch are automatically cancelled.\n\nEach batch of statements is assigned a name which can be used with\nthe Operations API to monitor\nprogress. See the\noperation_id field for more\ndetails."
+    },
+    "PartialResultSet": {
+      "description": "Partial results from a streaming read or SQL query. Streaming reads and\nSQL queries better tolerate large result sets, large rows, and large\nvalues, but are a little trickier to consume.",
+      "type": "object",
+      "properties": {
+        "stats": {
+          "$ref": "ResultSetStats",
+          "description": "Query plan and execution statistics for the query that produced this\nstreaming result set. These can be requested by setting\nExecuteSqlRequest.query_mode and are sent\nonly once with the last response in the stream."
+        },
+        "chunkedValue": {
+          "description": "If true, then the final value in values is chunked, and must\nbe combined with more values from subsequent `PartialResultSet`s\nto obtain a complete field value.",
+          "type": "boolean"
+        },
+        "metadata": {
+          "$ref": "ResultSetMetadata",
+          "description": "Metadata about the result set, such as row type information.\nOnly present in the first response."
+        },
+        "values": {
+          "description": "A streamed result set consists of a stream of values, which might\nbe split into many `PartialResultSet` messages to accommodate\nlarge rows and/or large values. Every N complete values defines a\nrow, where N is equal to the number of entries in\nmetadata.row_type.fields.\n\nMost values are encoded based on type as described\nhere.\n\nIt is possible that the last value in values is \"chunked\",\nmeaning that the rest of the value is sent in subsequent\n`PartialResultSet`(s). This is denoted by the chunked_value\nfield. Two or more chunked values can be merged to form a\ncomplete value as follows:\n\n  * `bool/number/null`: cannot be chunked\n  * `string`: concatenate the strings\n  * `list`: concatenate the lists. If the last element in a list is a\n    `string`, `list`, or `object`, merge it with the first element in\n    the next list by applying these rules recursively.\n  * `object`: concatenate the (field name, field value) pairs. If a\n    field name is duplicated, then apply these rules recursively\n    to merge the field values.\n\nSome examples of merging:\n\n    # Strings are concatenated.\n    \"foo\", \"bar\" =\u003e \"foobar\"\n\n    # Lists of non-strings are concatenated.\n    [2, 3], [4] =\u003e [2, 3, 4]\n\n    # Lists are concatenated, but the last and first elements are merged\n    # because they are strings.\n    [\"a\", \"b\"], [\"c\", \"d\"] =\u003e [\"a\", \"bc\", \"d\"]\n\n    # Lists are concatenated, but the last and first elements are merged\n    # because they are lists. Recursively, the last and first elements\n    # of the inner lists are merged because they are strings.\n    [\"a\", [\"b\", \"c\"]], [[\"d\"], \"e\"] =\u003e [\"a\", [\"b\", \"cd\"], \"e\"]\n\n    # Non-overlapping object fields are combined.\n    {\"a\": \"1\"}, {\"b\": \"2\"} =\u003e {\"a\": \"1\", \"b\": 2\"}\n\n    # Overlapping object fields are merged.\n    {\"a\": \"1\"}, {\"a\": \"2\"} =\u003e {\"a\": \"12\"}\n\n    # Examples of merging objects containing lists of strings.\n    {\"a\": [\"1\"]}, {\"a\": [\"2\"]} =\u003e {\"a\": [\"12\"]}\n\nFor a more complete example, suppose a streaming SQL query is\nyielding a result set whose rows contain a single string\nfield. The following `PartialResultSet`s might be yielded:\n\n    {\n      \"metadata\": { ... }\n      \"values\": [\"Hello\", \"W\"]\n      \"chunked_value\": true\n      \"resume_token\": \"Af65...\"\n    }\n    {\n      \"values\": [\"orl\"]\n      \"chunked_value\": true\n      \"resume_token\": \"Bqp2...\"\n    }\n    {\n      \"values\": [\"d\"]\n      \"resume_token\": \"Zx1B...\"\n    }\n\nThis sequence of `PartialResultSet`s encodes two rows, one\ncontaining the field value `\"Hello\"`, and a second containing the\nfield value `\"World\" = \"W\" + \"orl\" + \"d\"`.",
+          "type": "array",
+          "items": {
+            "type": "any"
+          }
+        },
+        "resumeToken": {
+          "type": "string",
+          "description": "Streaming calls might be interrupted for a variety of reasons, such\nas TCP connection loss. If this occurs, the stream of results can\nbe resumed by re-sending the original request and including\n`resume_token`. Note that executing any other transaction in the\nsame session invalidates the token.",
+          "format": "byte"
+        }
+      },
+      "id": "PartialResultSet"
+    },
+    "UpdateInstanceMetadata": {
+      "type": "object",
+      "properties": {
+        "cancelTime": {
+          "description": "The time at which this operation was cancelled. If set, this operation is\nin the process of undoing itself (which is guaranteed to succeed) and\ncannot be cancelled again.",
+          "format": "google-datetime",
+          "type": "string"
+        },
+        "endTime": {
+          "type": "string",
+          "description": "The time at which this operation failed or was completed successfully.",
+          "format": "google-datetime"
+        },
+        "instance": {
+          "$ref": "Instance",
+          "description": "The desired end state of the update."
+        },
+        "startTime": {
+          "description": "The time at which UpdateInstance\nrequest was received.",
+          "format": "google-datetime",
+          "type": "string"
+        }
+      },
+      "id": "UpdateInstanceMetadata",
+      "description": "Metadata type for the operation returned by\nUpdateInstance."
+    },
+    "ListOperationsResponse": {
+      "description": "The response message for Operations.ListOperations.",
+      "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."
+        }
+      },
+      "id": "ListOperationsResponse"
+    }
+  },
+  "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",
+  "canonicalName": "Spanner",
+  "auth": {
+    "oauth2": {
+      "scopes": {
+        "https://www.googleapis.com/auth/cloud-platform": {
+          "description": "View and manage your data across Google Cloud Platform services"
+        }
+      }
+    }
+  },
+  "rootUrl": "https://spanner.googleapis.com/",
+  "ownerDomain": "google.com",
+  "name": "spanner",
+  "batchPath": "batch",
+  "title": "Cloud Spanner API",
+  "ownerName": "Google"
 }
diff --git a/spanner/v1/spanner-gen.go b/spanner/v1/spanner-gen.go
index fd41372..81d12c0 100644
--- a/spanner/v1/spanner-gen.go
+++ b/spanner/v1/spanner-gen.go
@@ -1,4 +1,6 @@
-// Package spanner provides access to the .
+// Package spanner provides access to the Cloud Spanner API.
+//
+// See https://cloud.google.com/spanner/
 //
 // Usage example:
 //
@@ -38,24 +40,32 @@
 var _ = context.Canceled
 var _ = ctxhttp.Do
 
-const apiId = ""
-const apiName = ""
-const apiVersion = ""
-const basePath = "https://www.googleapis.com/discovery/v1/apis"
+const apiId = "spanner:v1"
+const apiName = "spanner"
+const apiVersion = "v1"
+const basePath = "https://spanner.googleapis.com/"
+
+// OAuth2 scopes used by this API.
+const (
+	// View and manage your data across Google Cloud Platform services
+	CloudPlatformScope = "https://www.googleapis.com/auth/cloud-platform"
+)
 
 func New(client *http.Client) (*Service, error) {
 	if client == nil {
 		return nil, errors.New("client is nil")
 	}
 	s := &Service{client: client, BasePath: basePath}
+	s.Projects = NewProjectsService(s)
 	return s, nil
 }
 
 type Service struct {
-	client                    *http.Client
-	BasePath                  string // API endpoint base URL
-	UserAgent                 string // optional additional User-Agent fragment
-	GoogleClientHeaderElement string // client header fragment, for Google use only
+	client    *http.Client
+	BasePath  string // API endpoint base URL
+	UserAgent string // optional additional User-Agent fragment
+
+	Projects *ProjectsService
 }
 
 func (s *Service) userAgent() string {
@@ -65,6 +75,9118 @@
 	return googleapi.UserAgent + " " + s.UserAgent
 }
 
-func (s *Service) clientHeader() string {
-	return gensupport.GoogleClientHeader("20170210", s.GoogleClientHeaderElement)
+func NewProjectsService(s *Service) *ProjectsService {
+	rs := &ProjectsService{s: s}
+	rs.InstanceConfigs = NewProjectsInstanceConfigsService(s)
+	rs.Instances = NewProjectsInstancesService(s)
+	return rs
+}
+
+type ProjectsService struct {
+	s *Service
+
+	InstanceConfigs *ProjectsInstanceConfigsService
+
+	Instances *ProjectsInstancesService
+}
+
+func NewProjectsInstanceConfigsService(s *Service) *ProjectsInstanceConfigsService {
+	rs := &ProjectsInstanceConfigsService{s: s}
+	return rs
+}
+
+type ProjectsInstanceConfigsService struct {
+	s *Service
+}
+
+func NewProjectsInstancesService(s *Service) *ProjectsInstancesService {
+	rs := &ProjectsInstancesService{s: s}
+	rs.Databases = NewProjectsInstancesDatabasesService(s)
+	rs.Operations = NewProjectsInstancesOperationsService(s)
+	return rs
+}
+
+type ProjectsInstancesService struct {
+	s *Service
+
+	Databases *ProjectsInstancesDatabasesService
+
+	Operations *ProjectsInstancesOperationsService
+}
+
+func NewProjectsInstancesDatabasesService(s *Service) *ProjectsInstancesDatabasesService {
+	rs := &ProjectsInstancesDatabasesService{s: s}
+	rs.Operations = NewProjectsInstancesDatabasesOperationsService(s)
+	rs.Sessions = NewProjectsInstancesDatabasesSessionsService(s)
+	return rs
+}
+
+type ProjectsInstancesDatabasesService struct {
+	s *Service
+
+	Operations *ProjectsInstancesDatabasesOperationsService
+
+	Sessions *ProjectsInstancesDatabasesSessionsService
+}
+
+func NewProjectsInstancesDatabasesOperationsService(s *Service) *ProjectsInstancesDatabasesOperationsService {
+	rs := &ProjectsInstancesDatabasesOperationsService{s: s}
+	return rs
+}
+
+type ProjectsInstancesDatabasesOperationsService struct {
+	s *Service
+}
+
+func NewProjectsInstancesDatabasesSessionsService(s *Service) *ProjectsInstancesDatabasesSessionsService {
+	rs := &ProjectsInstancesDatabasesSessionsService{s: s}
+	return rs
+}
+
+type ProjectsInstancesDatabasesSessionsService struct {
+	s *Service
+}
+
+func NewProjectsInstancesOperationsService(s *Service) *ProjectsInstancesOperationsService {
+	rs := &ProjectsInstancesOperationsService{s: s}
+	return rs
+}
+
+type ProjectsInstancesOperationsService struct {
+	s *Service
+}
+
+// AuditConfig: Specifies the audit configuration for a service.
+// It consists of which permission types are logged, and what
+// identities, if
+// any, are exempted from logging.
+// An AuditConifg must have one or more AuditLogConfigs.
+type AuditConfig struct {
+	// AuditLogConfigs: The configuration for logging of each type of
+	// permission.
+	// Next ID: 4
+	AuditLogConfigs []*AuditLogConfig `json:"auditLogConfigs,omitempty"`
+
+	// ExemptedMembers: Specifies the identities that are exempted from
+	// "data access" audit
+	// logging for the `service` specified above.
+	// Follows the same format of Binding.members.
+	// This field is deprecated in favor of per-permission-type exemptions.
+	ExemptedMembers []string `json:"exemptedMembers,omitempty"`
+
+	// Service: Specifies a service that will be enabled for audit
+	// logging.
+	// For example, `resourcemanager`, `storage`, `compute`.
+	// `allServices` is a special value that covers all services.
+	Service string `json:"service,omitempty"`
+
+	// ForceSendFields is a list of field names (e.g. "AuditLogConfigs") to
+	// unconditionally include in API requests. By default, fields with
+	// empty values are omitted from API requests. However, any non-pointer,
+	// non-interface field appearing in ForceSendFields will be sent to the
+	// server regardless of whether the field is empty or not. This may be
+	// used to include empty fields in Patch requests.
+	ForceSendFields []string `json:"-"`
+
+	// NullFields is a list of field names (e.g. "AuditLogConfigs") to
+	// include in API requests with the JSON null value. By default, fields
+	// with empty values are omitted from API requests. However, any field
+	// with an empty value appearing in NullFields will be sent to the
+	// server as null. It is an error if a field in this list has a
+	// non-empty value. This may be used to include null fields in Patch
+	// requests.
+	NullFields []string `json:"-"`
+}
+
+func (s *AuditConfig) MarshalJSON() ([]byte, error) {
+	type noMethod AuditConfig
+	raw := noMethod(*s)
+	return gensupport.MarshalJSON(raw, s.ForceSendFields, s.NullFields)
+}
+
+// AuditLogConfig: Provides the configuration for logging a type of
+// permissions.
+// Example:
+//
+//     {
+//       "audit_log_configs": [
+//         {
+//           "log_type": "DATA_READ",
+//           "exempted_members": [
+//             "user:foo@gmail.com"
+//           ]
+//         },
+//         {
+//           "log_type": "DATA_WRITE",
+//         }
+//       ]
+//     }
+//
+// This enables 'DATA_READ' and 'DATA_WRITE' logging, while
+// exempting
+// foo@gmail.com from DATA_READ logging.
+type AuditLogConfig struct {
+	// ExemptedMembers: Specifies the identities that do not cause logging
+	// for this type of
+	// permission.
+	// Follows the same format of Binding.members.
+	ExemptedMembers []string `json:"exemptedMembers,omitempty"`
+
+	// LogType: The log type that this config enables.
+	//
+	// Possible values:
+	//   "LOG_TYPE_UNSPECIFIED" - Default case. Should never be this.
+	//   "ADMIN_READ" - Admin reads. Example: CloudIAM getIamPolicy
+	//   "DATA_WRITE" - Data writes. Example: CloudSQL Users create
+	//   "DATA_READ" - Data reads. Example: CloudSQL Users list
+	LogType string `json:"logType,omitempty"`
+
+	// ForceSendFields is a list of field names (e.g. "ExemptedMembers") to
+	// unconditionally include in API requests. By default, fields with
+	// empty values are omitted from API requests. However, any non-pointer,
+	// non-interface field appearing in ForceSendFields will be sent to the
+	// server regardless of whether the field is empty or not. This may be
+	// used to include empty fields in Patch requests.
+	ForceSendFields []string `json:"-"`
+
+	// NullFields is a list of field names (e.g. "ExemptedMembers") to
+	// include in API requests with the JSON null value. By default, fields
+	// with empty values are omitted from API requests. However, any field
+	// with an empty value appearing in NullFields will be sent to the
+	// server as null. It is an error if a field in this list has a
+	// non-empty value. This may be used to include null fields in Patch
+	// requests.
+	NullFields []string `json:"-"`
+}
+
+func (s *AuditLogConfig) MarshalJSON() ([]byte, error) {
+	type noMethod AuditLogConfig
+	raw := noMethod(*s)
+	return gensupport.MarshalJSON(raw, s.ForceSendFields, s.NullFields)
+}
+
+// BeginTransactionRequest: The request for BeginTransaction.
+type BeginTransactionRequest struct {
+	// Options: Required. Options for the new transaction.
+	Options *TransactionOptions `json:"options,omitempty"`
+
+	// ForceSendFields is a list of field names (e.g. "Options") to
+	// unconditionally include in API requests. By default, fields with
+	// empty values are omitted from API requests. However, any non-pointer,
+	// non-interface field appearing in ForceSendFields will be sent to the
+	// server regardless of whether the field is empty or not. This may be
+	// used to include empty fields in Patch requests.
+	ForceSendFields []string `json:"-"`
+
+	// NullFields is a list of field names (e.g. "Options") to include in
+	// API requests with the JSON null value. By default, fields with empty
+	// values are omitted from API requests. However, any field with an
+	// empty value appearing in NullFields will be sent to the server as
+	// null. It is an error if a field in this list has a non-empty value.
+	// This may be used to include null fields in Patch requests.
+	NullFields []string `json:"-"`
+}
+
+func (s *BeginTransactionRequest) MarshalJSON() ([]byte, error) {
+	type noMethod BeginTransactionRequest
+	raw := noMethod(*s)
+	return gensupport.MarshalJSON(raw, s.ForceSendFields, s.NullFields)
+}
+
+// Binding: Associates `members` with a `role`.
+type Binding struct {
+	// Members: 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@gmail.com` or `joe@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`.
+	//
+	// * `domain:{domain}`: A Google Apps domain name that represents all
+	// the
+	//    users of that domain. For example, `google.com` or
+	// `example.com`.
+	//
+	//
+	Members []string `json:"members,omitempty"`
+
+	// Role: Role that is assigned to `members`.
+	// For example, `roles/viewer`, `roles/editor`, or
+	// `roles/owner`.
+	// Required
+	Role string `json:"role,omitempty"`
+
+	// ForceSendFields is a list of field names (e.g. "Members") to
+	// unconditionally include in API requests. By default, fields with
+	// empty values are omitted from API requests. However, any non-pointer,
+	// non-interface field appearing in ForceSendFields will be sent to the
+	// server regardless of whether the field is empty or not. This may be
+	// used to include empty fields in Patch requests.
+	ForceSendFields []string `json:"-"`
+
+	// NullFields is a list of field names (e.g. "Members") to include in
+	// API requests with the JSON null value. By default, fields with empty
+	// values are omitted from API requests. However, any field with an
+	// empty value appearing in NullFields will be sent to the server as
+	// null. It is an error if a field in this list has a non-empty value.
+	// This may be used to include null fields in Patch requests.
+	NullFields []string `json:"-"`
+}
+
+func (s *Binding) MarshalJSON() ([]byte, error) {
+	type noMethod Binding
+	raw := noMethod(*s)
+	return gensupport.MarshalJSON(raw, s.ForceSendFields, s.NullFields)
+}
+
+// ChildLink: Metadata associated with a parent-child relationship
+// appearing in a
+// PlanNode.
+type ChildLink struct {
+	// ChildIndex: The node to which the link points.
+	ChildIndex int64 `json:"childIndex,omitempty"`
+
+	// Type: The type of the link. For example, in Hash Joins this could be
+	// used to
+	// distinguish between the build child and the probe child, or in the
+	// case
+	// of the child being an output variable, to represent the tag
+	// associated
+	// with the output variable.
+	Type string `json:"type,omitempty"`
+
+	// Variable: Only present if the child node is SCALAR and corresponds
+	// to an output variable of the parent node. The field carries the name
+	// of
+	// the output variable.
+	// For example, a `TableScan` operator that reads rows from a table
+	// will
+	// have child links to the `SCALAR` nodes representing the output
+	// variables
+	// created for each column that is read by the operator. The
+	// corresponding
+	// `variable` fields will be set to the variable names assigned to
+	// the
+	// columns.
+	Variable string `json:"variable,omitempty"`
+
+	// ForceSendFields is a list of field names (e.g. "ChildIndex") to
+	// unconditionally include in API requests. By default, fields with
+	// empty values are omitted from API requests. However, any non-pointer,
+	// non-interface field appearing in ForceSendFields will be sent to the
+	// server regardless of whether the field is empty or not. This may be
+	// used to include empty fields in Patch requests.
+	ForceSendFields []string `json:"-"`
+
+	// NullFields is a list of field names (e.g. "ChildIndex") to include in
+	// API requests with the JSON null value. By default, fields with empty
+	// values are omitted from API requests. However, any field with an
+	// empty value appearing in NullFields will be sent to the server as
+	// null. It is an error if a field in this list has a non-empty value.
+	// This may be used to include null fields in Patch requests.
+	NullFields []string `json:"-"`
+}
+
+func (s *ChildLink) MarshalJSON() ([]byte, error) {
+	type noMethod ChildLink
+	raw := noMethod(*s)
+	return gensupport.MarshalJSON(raw, s.ForceSendFields, s.NullFields)
+}
+
+// CloudAuditOptions: Write a Cloud Audit log
+type CloudAuditOptions struct {
+}
+
+// CommitRequest: The request for Commit.
+type CommitRequest struct {
+	// Mutations: The mutations to be executed when this transaction
+	// commits. All
+	// mutations are applied atomically, in the order they appear in
+	// this list.
+	Mutations []*Mutation `json:"mutations,omitempty"`
+
+	// SingleUseTransaction: Execute mutations in a temporary transaction.
+	// Note that unlike
+	// commit of a previously-started transaction, commit with a
+	// temporary transaction is non-idempotent. That is, if
+	// the
+	// `CommitRequest` is sent to Cloud Spanner more than once
+	// (for
+	// instance, due to retries in the application, or in the
+	// transport library), it is possible that the mutations are
+	// executed more than once. If this is undesirable, use
+	// BeginTransaction and
+	// Commit instead.
+	SingleUseTransaction *TransactionOptions `json:"singleUseTransaction,omitempty"`
+
+	// TransactionId: Commit a previously-started transaction.
+	TransactionId string `json:"transactionId,omitempty"`
+
+	// ForceSendFields is a list of field names (e.g. "Mutations") to
+	// unconditionally include in API requests. By default, fields with
+	// empty values are omitted from API requests. However, any non-pointer,
+	// non-interface field appearing in ForceSendFields will be sent to the
+	// server regardless of whether the field is empty or not. This may be
+	// used to include empty fields in Patch requests.
+	ForceSendFields []string `json:"-"`
+
+	// NullFields is a list of field names (e.g. "Mutations") to include in
+	// API requests with the JSON null value. By default, fields with empty
+	// values are omitted from API requests. However, any field with an
+	// empty value appearing in NullFields will be sent to the server as
+	// null. It is an error if a field in this list has a non-empty value.
+	// This may be used to include null fields in Patch requests.
+	NullFields []string `json:"-"`
+}
+
+func (s *CommitRequest) MarshalJSON() ([]byte, error) {
+	type noMethod CommitRequest
+	raw := noMethod(*s)
+	return gensupport.MarshalJSON(raw, s.ForceSendFields, s.NullFields)
+}
+
+// CommitResponse: The response for Commit.
+type CommitResponse struct {
+	// CommitTimestamp: The Cloud Spanner timestamp at which the transaction
+	// committed.
+	CommitTimestamp string `json:"commitTimestamp,omitempty"`
+
+	// ServerResponse contains the HTTP response code and headers from the
+	// server.
+	googleapi.ServerResponse `json:"-"`
+
+	// ForceSendFields is a list of field names (e.g. "CommitTimestamp") to
+	// unconditionally include in API requests. By default, fields with
+	// empty values are omitted from API requests. However, any non-pointer,
+	// non-interface field appearing in ForceSendFields will be sent to the
+	// server regardless of whether the field is empty or not. This may be
+	// used to include empty fields in Patch requests.
+	ForceSendFields []string `json:"-"`
+
+	// NullFields is a list of field names (e.g. "CommitTimestamp") to
+	// include in API requests with the JSON null value. By default, fields
+	// with empty values are omitted from API requests. However, any field
+	// with an empty value appearing in NullFields will be sent to the
+	// server as null. It is an error if a field in this list has a
+	// non-empty value. This may be used to include null fields in Patch
+	// requests.
+	NullFields []string `json:"-"`
+}
+
+func (s *CommitResponse) MarshalJSON() ([]byte, error) {
+	type noMethod CommitResponse
+	raw := noMethod(*s)
+	return gensupport.MarshalJSON(raw, s.ForceSendFields, s.NullFields)
+}
+
+// Condition: A condition to be met.
+type Condition struct {
+	// Iam: Trusted attributes supplied by the IAM system.
+	//
+	// Possible values:
+	//   "NO_ATTR" - Default non-attribute.
+	//   "AUTHORITY" - Either principal or (if present) authority selector.
+	//   "ATTRIBUTION" - The principal (even if an authority selector is
+	// present), which
+	// must only be used for attribution, not authorization.
+	//   "SECURITY_REALM" - Any of the security realms in the IAMContext
+	// (go/security-realms).
+	// When used with IN, the condition indicates "any of the request's
+	// realms
+	// match one of the given values; with NOT_IN, "none of the realms
+	// match
+	// any of the given values". It is not permitted to grant access based
+	// on
+	// the *absence* of a realm, so realm conditions can only be used in
+	// a "positive" context (e.g., ALLOW/IN or DENY/NOT_IN).
+	//   "APPROVER" - An approver (distinct from the requester) that has
+	// authorized this
+	// request.
+	// When used with IN, the condition indicates that one of the
+	// approvers
+	// associated with the request matches the specified principal, or is
+	// a
+	// member of the specified group. Approvers can only grant
+	// additional
+	// access, and are thus only used in a strictly positive context
+	// (e.g. ALLOW/IN or DENY/NOT_IN).
+	// See: go/rpc-security-policy-dynamicauth.
+	Iam string `json:"iam,omitempty"`
+
+	// Op: An operator to apply the subject with.
+	//
+	// Possible values:
+	//   "NO_OP" - Default no-op.
+	//   "EQUALS" - DEPRECATED. Use IN instead.
+	//   "NOT_EQUALS" - DEPRECATED. Use NOT_IN instead.
+	//   "IN" - Set-inclusion check.
+	//   "NOT_IN" - Set-exclusion check.
+	//   "DISCHARGED" - Subject is discharged
+	Op string `json:"op,omitempty"`
+
+	// Svc: Trusted attributes discharged by the service.
+	Svc string `json:"svc,omitempty"`
+
+	// Sys: Trusted attributes supplied by any service that owns resources
+	// and uses
+	// the IAM system for access control.
+	//
+	// Possible values:
+	//   "NO_ATTR" - Default non-attribute type
+	//   "REGION" - Region of the resource
+	//   "SERVICE" - Service name
+	//   "NAME" - Resource name
+	//   "IP" - IP address of the caller
+	Sys string `json:"sys,omitempty"`
+
+	// Value: DEPRECATED. Use 'values' instead.
+	Value string `json:"value,omitempty"`
+
+	// Values: The objects of the condition. This is mutually exclusive with
+	// 'value'.
+	Values []string `json:"values,omitempty"`
+
+	// ForceSendFields is a list of field names (e.g. "Iam") to
+	// unconditionally include in API requests. By default, fields with
+	// empty values are omitted from API requests. However, any non-pointer,
+	// non-interface field appearing in ForceSendFields will be sent to the
+	// server regardless of whether the field is empty or not. This may be
+	// used to include empty fields in Patch requests.
+	ForceSendFields []string `json:"-"`
+
+	// NullFields is a list of field names (e.g. "Iam") to include in API
+	// requests with the JSON null value. By default, fields with empty
+	// values are omitted from API requests. However, any field with an
+	// empty value appearing in NullFields will be sent to the server as
+	// null. It is an error if a field in this list has a non-empty value.
+	// This may be used to include null fields in Patch requests.
+	NullFields []string `json:"-"`
+}
+
+func (s *Condition) MarshalJSON() ([]byte, error) {
+	type noMethod Condition
+	raw := noMethod(*s)
+	return gensupport.MarshalJSON(raw, s.ForceSendFields, s.NullFields)
+}
+
+// CounterOptions: Options for counters
+type CounterOptions struct {
+	// Field: The field value to attribute.
+	Field string `json:"field,omitempty"`
+
+	// Metric: The metric to update.
+	Metric string `json:"metric,omitempty"`
+
+	// ForceSendFields is a list of field names (e.g. "Field") to
+	// unconditionally include in API requests. By default, fields with
+	// empty values are omitted from API requests. However, any non-pointer,
+	// non-interface field appearing in ForceSendFields will be sent to the
+	// server regardless of whether the field is empty or not. This may be
+	// used to include empty fields in Patch requests.
+	ForceSendFields []string `json:"-"`
+
+	// NullFields is a list of field names (e.g. "Field") to include in API
+	// requests with the JSON null value. By default, fields with empty
+	// values are omitted from API requests. However, any field with an
+	// empty value appearing in NullFields will be sent to the server as
+	// null. It is an error if a field in this list has a non-empty value.
+	// This may be used to include null fields in Patch requests.
+	NullFields []string `json:"-"`
+}
+
+func (s *CounterOptions) MarshalJSON() ([]byte, error) {
+	type noMethod CounterOptions
+	raw := noMethod(*s)
+	return gensupport.MarshalJSON(raw, s.ForceSendFields, s.NullFields)
+}
+
+// CreateDatabaseMetadata: Metadata type for the operation returned
+// by
+// CreateDatabase.
+type CreateDatabaseMetadata struct {
+	// Database: The database being created.
+	Database string `json:"database,omitempty"`
+
+	// ForceSendFields is a list of field names (e.g. "Database") to
+	// unconditionally include in API requests. By default, fields with
+	// empty values are omitted from API requests. However, any non-pointer,
+	// non-interface field appearing in ForceSendFields will be sent to the
+	// server regardless of whether the field is empty or not. This may be
+	// used to include empty fields in Patch requests.
+	ForceSendFields []string `json:"-"`
+
+	// NullFields is a list of field names (e.g. "Database") to include in
+	// API requests with the JSON null value. By default, fields with empty
+	// values are omitted from API requests. However, any field with an
+	// empty value appearing in NullFields will be sent to the server as
+	// null. It is an error if a field in this list has a non-empty value.
+	// This may be used to include null fields in Patch requests.
+	NullFields []string `json:"-"`
+}
+
+func (s *CreateDatabaseMetadata) MarshalJSON() ([]byte, error) {
+	type noMethod CreateDatabaseMetadata
+	raw := noMethod(*s)
+	return gensupport.MarshalJSON(raw, s.ForceSendFields, s.NullFields)
+}
+
+// CreateDatabaseRequest: The request for CreateDatabase.
+type CreateDatabaseRequest struct {
+	// CreateStatement: Required. A `CREATE DATABASE` statement, which
+	// specifies the ID of the
+	// new database.  The database ID must conform to the regular
+	// expression
+	// `a-z*[a-z0-9]` and be between 2 and 30 characters in length.
+	CreateStatement string `json:"createStatement,omitempty"`
+
+	// ExtraStatements: An optional list of DDL statements to run inside the
+	// newly created
+	// database. Statements can create tables, indexes, etc.
+	// These
+	// statements execute atomically with the creation of the database:
+	// if there is an error in any statement, the database is not created.
+	ExtraStatements []string `json:"extraStatements,omitempty"`
+
+	// ForceSendFields is a list of field names (e.g. "CreateStatement") to
+	// unconditionally include in API requests. By default, fields with
+	// empty values are omitted from API requests. However, any non-pointer,
+	// non-interface field appearing in ForceSendFields will be sent to the
+	// server regardless of whether the field is empty or not. This may be
+	// used to include empty fields in Patch requests.
+	ForceSendFields []string `json:"-"`
+
+	// NullFields is a list of field names (e.g. "CreateStatement") to
+	// include in API requests with the JSON null value. By default, fields
+	// with empty values are omitted from API requests. However, any field
+	// with an empty value appearing in NullFields will be sent to the
+	// server as null. It is an error if a field in this list has a
+	// non-empty value. This may be used to include null fields in Patch
+	// requests.
+	NullFields []string `json:"-"`
+}
+
+func (s *CreateDatabaseRequest) MarshalJSON() ([]byte, error) {
+	type noMethod CreateDatabaseRequest
+	raw := noMethod(*s)
+	return gensupport.MarshalJSON(raw, s.ForceSendFields, s.NullFields)
+}
+
+// CreateInstanceMetadata: Metadata type for the operation returned
+// by
+// CreateInstance.
+type CreateInstanceMetadata struct {
+	// CancelTime: The time at which this operation was cancelled. If set,
+	// this operation is
+	// in the process of undoing itself (which is guaranteed to succeed)
+	// and
+	// cannot be cancelled again.
+	CancelTime string `json:"cancelTime,omitempty"`
+
+	// EndTime: The time at which this operation failed or was completed
+	// successfully.
+	EndTime string `json:"endTime,omitempty"`
+
+	// Instance: The instance being created.
+	Instance *Instance `json:"instance,omitempty"`
+
+	// StartTime: The time at which the
+	// CreateInstance request was
+	// received.
+	StartTime string `json:"startTime,omitempty"`
+
+	// ForceSendFields is a list of field names (e.g. "CancelTime") to
+	// unconditionally include in API requests. By default, fields with
+	// empty values are omitted from API requests. However, any non-pointer,
+	// non-interface field appearing in ForceSendFields will be sent to the
+	// server regardless of whether the field is empty or not. This may be
+	// used to include empty fields in Patch requests.
+	ForceSendFields []string `json:"-"`
+
+	// NullFields is a list of field names (e.g. "CancelTime") to include in
+	// API requests with the JSON null value. By default, fields with empty
+	// values are omitted from API requests. However, any field with an
+	// empty value appearing in NullFields will be sent to the server as
+	// null. It is an error if a field in this list has a non-empty value.
+	// This may be used to include null fields in Patch requests.
+	NullFields []string `json:"-"`
+}
+
+func (s *CreateInstanceMetadata) MarshalJSON() ([]byte, error) {
+	type noMethod CreateInstanceMetadata
+	raw := noMethod(*s)
+	return gensupport.MarshalJSON(raw, s.ForceSendFields, s.NullFields)
+}
+
+// CreateInstanceRequest: The request for CreateInstance.
+type CreateInstanceRequest struct {
+	// Instance: Required. The instance to create.  The name may be omitted,
+	// but if
+	// specified must be `<parent>/instances/<instance_id>`.
+	Instance *Instance `json:"instance,omitempty"`
+
+	// InstanceId: Required. The ID of the instance to create.  Valid
+	// identifiers are of the
+	// form `a-z*[a-z0-9]` and must be between 6 and 30 characters
+	// in
+	// length.
+	InstanceId string `json:"instanceId,omitempty"`
+
+	// ForceSendFields is a list of field names (e.g. "Instance") to
+	// unconditionally include in API requests. By default, fields with
+	// empty values are omitted from API requests. However, any non-pointer,
+	// non-interface field appearing in ForceSendFields will be sent to the
+	// server regardless of whether the field is empty or not. This may be
+	// used to include empty fields in Patch requests.
+	ForceSendFields []string `json:"-"`
+
+	// NullFields is a list of field names (e.g. "Instance") to include in
+	// API requests with the JSON null value. By default, fields with empty
+	// values are omitted from API requests. However, any field with an
+	// empty value appearing in NullFields will be sent to the server as
+	// null. It is an error if a field in this list has a non-empty value.
+	// This may be used to include null fields in Patch requests.
+	NullFields []string `json:"-"`
+}
+
+func (s *CreateInstanceRequest) MarshalJSON() ([]byte, error) {
+	type noMethod CreateInstanceRequest
+	raw := noMethod(*s)
+	return gensupport.MarshalJSON(raw, s.ForceSendFields, s.NullFields)
+}
+
+// DataAccessOptions: Write a Data Access (Gin) log
+type DataAccessOptions struct {
+}
+
+// Database: A Cloud Spanner database.
+type Database struct {
+	// Name: Required. The name of the database. Values are of the
+	// form
+	// `projects/<project>/instances/<instance>/databases/<database>`,
+	// w
+	// here `<database>` is as specified in the `CREATE DATABASE`
+	// statement. This name can be passed to other API methods to
+	// identify the database.
+	Name string `json:"name,omitempty"`
+
+	// State: Output only. The current database state.
+	//
+	// Possible values:
+	//   "STATE_UNSPECIFIED" - Not specified.
+	//   "CREATING" - The database is still being created. Operations on the
+	// database may fail
+	// with `FAILED_PRECONDITION` in this state.
+	//   "READY" - The database is fully created and ready for use.
+	State string `json:"state,omitempty"`
+
+	// ServerResponse contains the HTTP response code and headers from the
+	// server.
+	googleapi.ServerResponse `json:"-"`
+
+	// ForceSendFields is a list of field names (e.g. "Name") to
+	// unconditionally include in API requests. By default, fields with
+	// empty values are omitted from API requests. However, any non-pointer,
+	// non-interface field appearing in ForceSendFields will be sent to the
+	// server regardless of whether the field is empty or not. This may be
+	// used to include empty fields in Patch requests.
+	ForceSendFields []string `json:"-"`
+
+	// NullFields is a list of field names (e.g. "Name") to include in API
+	// requests with the JSON null value. By default, fields with empty
+	// values are omitted from API requests. However, any field with an
+	// empty value appearing in NullFields will be sent to the server as
+	// null. It is an error if a field in this list has a non-empty value.
+	// This may be used to include null fields in Patch requests.
+	NullFields []string `json:"-"`
+}
+
+func (s *Database) MarshalJSON() ([]byte, error) {
+	type noMethod Database
+	raw := noMethod(*s)
+	return gensupport.MarshalJSON(raw, s.ForceSendFields, s.NullFields)
+}
+
+// Delete: Arguments to delete operations.
+type Delete struct {
+	// KeySet: Required. The primary keys of the rows within table to
+	// delete.
+	KeySet *KeySet `json:"keySet,omitempty"`
+
+	// Table: Required. The table whose rows will be deleted.
+	Table string `json:"table,omitempty"`
+
+	// ForceSendFields is a list of field names (e.g. "KeySet") to
+	// unconditionally include in API requests. By default, fields with
+	// empty values are omitted from API requests. However, any non-pointer,
+	// non-interface field appearing in ForceSendFields will be sent to the
+	// server regardless of whether the field is empty or not. This may be
+	// used to include empty fields in Patch requests.
+	ForceSendFields []string `json:"-"`
+
+	// NullFields is a list of field names (e.g. "KeySet") to include in API
+	// requests with the JSON null value. By default, fields with empty
+	// values are omitted from API requests. However, any field with an
+	// empty value appearing in NullFields will be sent to the server as
+	// null. It is an error if a field in this list has a non-empty value.
+	// This may be used to include null fields in Patch requests.
+	NullFields []string `json:"-"`
+}
+
+func (s *Delete) MarshalJSON() ([]byte, error) {
+	type noMethod Delete
+	raw := noMethod(*s)
+	return gensupport.MarshalJSON(raw, s.ForceSendFields, s.NullFields)
+}
+
+// Empty: 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 Empty struct {
+	// ServerResponse contains the HTTP response code and headers from the
+	// server.
+	googleapi.ServerResponse `json:"-"`
+}
+
+// ExecuteSqlRequest: The request for ExecuteSql
+// and
+// ExecuteStreamingSql.
+type ExecuteSqlRequest struct {
+	// ParamTypes: It is not always possible for Cloud Spanner to infer the
+	// right SQL type
+	// from a JSON value.  For example, values of type `BYTES` and values
+	// of type `STRING` both appear in params as JSON strings.
+	//
+	// In these cases, `param_types` can be used to specify the exact
+	// SQL type for some or all of the SQL query parameters. See
+	// the
+	// definition of Type for more information
+	// about SQL types.
+	ParamTypes map[string]Type `json:"paramTypes,omitempty"`
+
+	// Params: The SQL query string can contain parameter placeholders. A
+	// parameter
+	// placeholder consists of `'@'` followed by the parameter
+	// name. Parameter names consist of any combination of letters,
+	// numbers, and underscores.
+	//
+	// Parameters can appear anywhere that a literal value is expected.  The
+	// same
+	// parameter name can be used more than once, for example:
+	//   "WHERE id > @msg_id AND id < @msg_id + 100"
+	//
+	// It is an error to execute an SQL query with unbound
+	// parameters.
+	//
+	// Parameter values are specified using `params`, which is a JSON
+	// object whose keys are parameter names, and whose values are
+	// the
+	// corresponding parameter values.
+	Params googleapi.RawMessage `json:"params,omitempty"`
+
+	// QueryMode: Used to control the amount of debugging information
+	// returned in
+	// ResultSetStats.
+	//
+	// Possible values:
+	//   "NORMAL" - The default mode where only the query result, without
+	// any information
+	// about the query plan is returned.
+	//   "PLAN" - This mode returns only the query plan, without any result
+	// rows or
+	// execution statistics information.
+	//   "PROFILE" - This mode returns both the query plan and the execution
+	// statistics along
+	// with the result rows.
+	QueryMode string `json:"queryMode,omitempty"`
+
+	// ResumeToken: If this request is resuming a previously interrupted SQL
+	// query
+	// execution, `resume_token` should be copied from the
+	// last
+	// PartialResultSet yielded before the interruption. Doing this
+	// enables the new SQL query execution to resume where the last one
+	// left
+	// off. The rest of the request parameters must exactly match
+	// the
+	// request that yielded this token.
+	ResumeToken string `json:"resumeToken,omitempty"`
+
+	// Sql: Required. The SQL query string.
+	Sql string `json:"sql,omitempty"`
+
+	// Transaction: The transaction to use. If none is provided, the default
+	// is a
+	// temporary read-only transaction with strong concurrency.
+	Transaction *TransactionSelector `json:"transaction,omitempty"`
+
+	// ForceSendFields is a list of field names (e.g. "ParamTypes") to
+	// unconditionally include in API requests. By default, fields with
+	// empty values are omitted from API requests. However, any non-pointer,
+	// non-interface field appearing in ForceSendFields will be sent to the
+	// server regardless of whether the field is empty or not. This may be
+	// used to include empty fields in Patch requests.
+	ForceSendFields []string `json:"-"`
+
+	// NullFields is a list of field names (e.g. "ParamTypes") to include in
+	// API requests with the JSON null value. By default, fields with empty
+	// values are omitted from API requests. However, any field with an
+	// empty value appearing in NullFields will be sent to the server as
+	// null. It is an error if a field in this list has a non-empty value.
+	// This may be used to include null fields in Patch requests.
+	NullFields []string `json:"-"`
+}
+
+func (s *ExecuteSqlRequest) MarshalJSON() ([]byte, error) {
+	type noMethod ExecuteSqlRequest
+	raw := noMethod(*s)
+	return gensupport.MarshalJSON(raw, s.ForceSendFields, s.NullFields)
+}
+
+// Field: Message representing a single field of a struct.
+type Field struct {
+	// Name: The name of the field. For reads, this is the column name.
+	// For
+	// SQL queries, it is the column alias (e.g., "Word" in the
+	// query "SELECT 'hello' AS Word"), or the column name
+	// (e.g.,
+	// "ColName" in the query "SELECT ColName FROM Table"). Some
+	// columns might have an empty name (e.g., !"SELECT
+	// UPPER(ColName)"). Note that a query result can contain
+	// multiple fields with the same name.
+	Name string `json:"name,omitempty"`
+
+	// Type: The type of the field.
+	Type *Type `json:"type,omitempty"`
+
+	// ForceSendFields is a list of field names (e.g. "Name") to
+	// unconditionally include in API requests. By default, fields with
+	// empty values are omitted from API requests. However, any non-pointer,
+	// non-interface field appearing in ForceSendFields will be sent to the
+	// server regardless of whether the field is empty or not. This may be
+	// used to include empty fields in Patch requests.
+	ForceSendFields []string `json:"-"`
+
+	// NullFields is a list of field names (e.g. "Name") to include in API
+	// requests with the JSON null value. By default, fields with empty
+	// values are omitted from API requests. However, any field with an
+	// empty value appearing in NullFields will be sent to the server as
+	// null. It is an error if a field in this list has a non-empty value.
+	// This may be used to include null fields in Patch requests.
+	NullFields []string `json:"-"`
+}
+
+func (s *Field) MarshalJSON() ([]byte, error) {
+	type noMethod Field
+	raw := noMethod(*s)
+	return gensupport.MarshalJSON(raw, s.ForceSendFields, s.NullFields)
+}
+
+// GetDatabaseDdlResponse: The response for GetDatabaseDdl.
+type GetDatabaseDdlResponse struct {
+	// Statements: A list of formatted DDL statements defining the schema of
+	// the database
+	// specified in the request.
+	Statements []string `json:"statements,omitempty"`
+
+	// ServerResponse contains the HTTP response code and headers from the
+	// server.
+	googleapi.ServerResponse `json:"-"`
+
+	// ForceSendFields is a list of field names (e.g. "Statements") to
+	// unconditionally include in API requests. By default, fields with
+	// empty values are omitted from API requests. However, any non-pointer,
+	// non-interface field appearing in ForceSendFields will be sent to the
+	// server regardless of whether the field is empty or not. This may be
+	// used to include empty fields in Patch requests.
+	ForceSendFields []string `json:"-"`
+
+	// NullFields is a list of field names (e.g. "Statements") to include in
+	// API requests with the JSON null value. By default, fields with empty
+	// values are omitted from API requests. However, any field with an
+	// empty value appearing in NullFields will be sent to the server as
+	// null. It is an error if a field in this list has a non-empty value.
+	// This may be used to include null fields in Patch requests.
+	NullFields []string `json:"-"`
+}
+
+func (s *GetDatabaseDdlResponse) MarshalJSON() ([]byte, error) {
+	type noMethod GetDatabaseDdlResponse
+	raw := noMethod(*s)
+	return gensupport.MarshalJSON(raw, s.ForceSendFields, s.NullFields)
+}
+
+// GetIamPolicyRequest: Request message for `GetIamPolicy` method.
+type GetIamPolicyRequest struct {
+}
+
+// Instance: An isolated set of Cloud Spanner resources on which
+// databases can be hosted.
+type Instance struct {
+	// Config: Required. The name of the instance's configuration. Values
+	// are of the form
+	// `projects/<project>/instanceConfigs/<configuration>`. See
+	// also InstanceConfig and
+	// ListInstanceConfigs.
+	Config string `json:"config,omitempty"`
+
+	// DisplayName: Required. The descriptive name for this instance as it
+	// appears in UIs.
+	// Must be unique per project and between 4 and 30 characters in length.
+	DisplayName string `json:"displayName,omitempty"`
+
+	// Labels: Cloud Labels are a flexible and lightweight mechanism for
+	// organizing cloud
+	// resources into groups that reflect a customer's organizational needs
+	// and
+	// deployment strategies. Cloud Labels can be used to filter collections
+	// of
+	// resources. They can be used to control how resource metrics are
+	// aggregated.
+	// And they can be used as arguments to policy management rules (e.g.
+	// route,
+	// firewall, load balancing, etc.).
+	//
+	//  * Label keys must be between 1 and 63 characters long and must
+	// conform to
+	//    the following regular expression: `[a-z]([-a-z0-9]*[a-z0-9])?`.
+	//  * Label values must be between 0 and 63 characters long and must
+	// conform
+	//    to the regular expression `([a-z]([-a-z0-9]*[a-z0-9])?)?`.
+	//  * No more than 64 labels can be associated with a given
+	// resource.
+	//
+	// See https://goo.gl/xmQnxf for more information on and examples of
+	// labels.
+	//
+	// If you plan to use labels in your own code, please note that
+	// additional
+	// characters may be allowed in the future. And so you are advised to
+	// use an
+	// internal label representation, such as JSON, which doesn't rely
+	// upon
+	// specific characters being disallowed.  For example, representing
+	// labels
+	// as the string:  name + "_" + value  would prove problematic if we
+	// were to
+	// allow "_" in a future release.
+	Labels map[string]string `json:"labels,omitempty"`
+
+	// Name: Required. A unique identifier for the instance, which cannot be
+	// changed
+	// after the instance is created. Values are of the
+	// form
+	// `projects/<project>/instances/a-z*[a-z0-9]`. The final
+	// segment of the name must be between 6 and 30 characters in length.
+	Name string `json:"name,omitempty"`
+
+	// NodeCount: Required. The number of nodes allocated to this instance.
+	NodeCount int64 `json:"nodeCount,omitempty"`
+
+	// State: Output only. The current instance state. For
+	// CreateInstance, the state must be
+	// either omitted or set to `CREATING`. For
+	// UpdateInstance, the state must be
+	// either omitted or set to `READY`.
+	//
+	// Possible values:
+	//   "STATE_UNSPECIFIED" - Not specified.
+	//   "CREATING" - The instance is still being created. Resources may not
+	// be
+	// available yet, and operations such as database creation may not
+	// work.
+	//   "READY" - The instance is fully created and ready to do work such
+	// as
+	// creating databases.
+	State string `json:"state,omitempty"`
+
+	// ServerResponse contains the HTTP response code and headers from the
+	// server.
+	googleapi.ServerResponse `json:"-"`
+
+	// ForceSendFields is a list of field names (e.g. "Config") to
+	// unconditionally include in API requests. By default, fields with
+	// empty values are omitted from API requests. However, any non-pointer,
+	// non-interface field appearing in ForceSendFields will be sent to the
+	// server regardless of whether the field is empty or not. This may be
+	// used to include empty fields in Patch requests.
+	ForceSendFields []string `json:"-"`
+
+	// NullFields is a list of field names (e.g. "Config") to include in API
+	// requests with the JSON null value. By default, fields with empty
+	// values are omitted from API requests. However, any field with an
+	// empty value appearing in NullFields will be sent to the server as
+	// null. It is an error if a field in this list has a non-empty value.
+	// This may be used to include null fields in Patch requests.
+	NullFields []string `json:"-"`
+}
+
+func (s *Instance) MarshalJSON() ([]byte, error) {
+	type noMethod Instance
+	raw := noMethod(*s)
+	return gensupport.MarshalJSON(raw, s.ForceSendFields, s.NullFields)
+}
+
+// InstanceConfig: A possible configuration for a Cloud Spanner
+// instance. Configurations
+// define the geographic placement of nodes and their replication.
+type InstanceConfig struct {
+	// DisplayName: The name of this instance configuration as it appears in
+	// UIs.
+	DisplayName string `json:"displayName,omitempty"`
+
+	// Name: A unique identifier for the instance configuration.  Values
+	// are of the form
+	// `projects/<project>/instanceConfigs/a-z*`
+	Name string `json:"name,omitempty"`
+
+	// ServerResponse contains the HTTP response code and headers from the
+	// server.
+	googleapi.ServerResponse `json:"-"`
+
+	// ForceSendFields is a list of field names (e.g. "DisplayName") to
+	// unconditionally include in API requests. By default, fields with
+	// empty values are omitted from API requests. However, any non-pointer,
+	// non-interface field appearing in ForceSendFields will be sent to the
+	// server regardless of whether the field is empty or not. This may be
+	// used to include empty fields in Patch requests.
+	ForceSendFields []string `json:"-"`
+
+	// NullFields is a list of field names (e.g. "DisplayName") to include
+	// in API requests with the JSON null value. By default, fields with
+	// empty values are omitted from API requests. However, any field with
+	// an empty value appearing in NullFields will be sent to the server as
+	// null. It is an error if a field in this list has a non-empty value.
+	// This may be used to include null fields in Patch requests.
+	NullFields []string `json:"-"`
+}
+
+func (s *InstanceConfig) MarshalJSON() ([]byte, error) {
+	type noMethod InstanceConfig
+	raw := noMethod(*s)
+	return gensupport.MarshalJSON(raw, s.ForceSendFields, s.NullFields)
+}
+
+// KeyRange: KeyRange represents a range of rows in a table or index.
+//
+// A range has a start key and an end key. These keys can be open
+// or
+// closed, indicating if the range includes rows with that key.
+//
+// Keys are represented by lists, where the ith value in the
+// list
+// corresponds to the ith component of the table or index primary
+// key.
+// Individual values are encoded as described here.
+//
+// For example, consider the following table definition:
+//
+//     CREATE TABLE UserEvents (
+//       UserName STRING(MAX),
+//       EventDate STRING(10)
+//     ) PRIMARY KEY(UserName, EventDate);
+//
+// The following keys name rows in this table:
+//
+//     "Bob", "2014-09-23"
+//
+// Since the `UserEvents` table's `PRIMARY KEY` clause names
+// two
+// columns, each `UserEvents` key has two elements; the first is
+// the
+// `UserName`, and the second is the `EventDate`.
+//
+// Key ranges with multiple components are interpreted
+// lexicographically by component using the table or index key's
+// declared
+// sort order. For example, the following range returns all events
+// for
+// user "Bob" that occurred in the year 2015:
+//
+//     "start_closed": ["Bob", "2015-01-01"]
+//     "end_closed": ["Bob", "2015-12-31"]
+//
+// Start and end keys can omit trailing key components. This affects
+// the
+// inclusion and exclusion of rows that exactly match the provided
+// key
+// components: if the key is closed, then rows that exactly match
+// the
+// provided components are included; if the key is open, then rows
+// that exactly match are not included.
+//
+// For example, the following range includes all events for "Bob"
+// that
+// occurred during and after the year 2000:
+//
+//     "start_closed": ["Bob", "2000-01-01"]
+//     "end_closed": ["Bob"]
+//
+// The next example retrieves all events for "Bob":
+//
+//     "start_closed": ["Bob"]
+//     "end_closed": ["Bob"]
+//
+// To retrieve events before the year 2000:
+//
+//     "start_closed": ["Bob"]
+//     "end_open": ["Bob", "2000-01-01"]
+//
+// The following range includes all rows in the table:
+//
+//     "start_closed": []
+//     "end_closed": []
+//
+// This range returns all users whose `UserName` begins with
+// any
+// character from A to C:
+//
+//     "start_closed": ["A"]
+//     "end_open": ["D"]
+//
+// This range returns all users whose `UserName` begins with B:
+//
+//     "start_closed": ["B"]
+//     "end_open": ["C"]
+//
+// Key ranges honor column sort order. For example, suppose a table
+// is
+// defined as follows:
+//
+//     CREATE TABLE DescendingSortedTable {
+//       Key INT64,
+//       ...
+//     ) PRIMARY KEY(Key DESC);
+//
+// The following range retrieves all rows with key values between 1
+// and 100 inclusive:
+//
+//     "start_closed": ["100"]
+//     "end_closed": ["1"]
+//
+// Note that 100 is passed as the start, and 1 is passed as the
+// end,
+// because `Key` is a descending column in the schema.
+type KeyRange struct {
+	// EndClosed: If the end is closed, then the range includes all rows
+	// whose
+	// first `len(end_closed)` key columns exactly match `end_closed`.
+	EndClosed []interface{} `json:"endClosed,omitempty"`
+
+	// EndOpen: If the end is open, then the range excludes rows whose
+	// first
+	// `len(end_open)` key columns exactly match `end_open`.
+	EndOpen []interface{} `json:"endOpen,omitempty"`
+
+	// StartClosed: If the start is closed, then the range includes all rows
+	// whose
+	// first `len(start_closed)` key columns exactly match `start_closed`.
+	StartClosed []interface{} `json:"startClosed,omitempty"`
+
+	// StartOpen: If the start is open, then the range excludes rows whose
+	// first
+	// `len(start_open)` key columns exactly match `start_open`.
+	StartOpen []interface{} `json:"startOpen,omitempty"`
+
+	// ForceSendFields is a list of field names (e.g. "EndClosed") to
+	// unconditionally include in API requests. By default, fields with
+	// empty values are omitted from API requests. However, any non-pointer,
+	// non-interface field appearing in ForceSendFields will be sent to the
+	// server regardless of whether the field is empty or not. This may be
+	// used to include empty fields in Patch requests.
+	ForceSendFields []string `json:"-"`
+
+	// NullFields is a list of field names (e.g. "EndClosed") to include in
+	// API requests with the JSON null value. By default, fields with empty
+	// values are omitted from API requests. However, any field with an
+	// empty value appearing in NullFields will be sent to the server as
+	// null. It is an error if a field in this list has a non-empty value.
+	// This may be used to include null fields in Patch requests.
+	NullFields []string `json:"-"`
+}
+
+func (s *KeyRange) MarshalJSON() ([]byte, error) {
+	type noMethod KeyRange
+	raw := noMethod(*s)
+	return gensupport.MarshalJSON(raw, s.ForceSendFields, s.NullFields)
+}
+
+// KeySet: `KeySet` defines a collection of Cloud Spanner keys and/or
+// key ranges. All
+// the keys are expected to be in the same table or index. The keys
+// need
+// not be sorted in any particular way.
+//
+// If the same key is specified multiple times in the set (for
+// example
+// if two ranges, two keys, or a key and a range overlap), Cloud
+// Spanner
+// behaves as if the key were only specified once.
+type KeySet struct {
+	// All: For convenience `all` can be set to `true` to indicate that
+	// this
+	// `KeySet` matches all keys in the table or index. Note that any
+	// keys
+	// specified in `keys` or `ranges` are only yielded once.
+	All bool `json:"all,omitempty"`
+
+	// Keys: A list of specific keys. Entries in `keys` should have exactly
+	// as
+	// many elements as there are columns in the primary or index key
+	// with which this `KeySet` is used.  Individual key values are
+	// encoded as described here.
+	Keys [][]interface{} `json:"keys,omitempty"`
+
+	// Ranges: A list of key ranges. See KeyRange for more information
+	// about
+	// key range specifications.
+	Ranges []*KeyRange `json:"ranges,omitempty"`
+
+	// ForceSendFields is a list of field names (e.g. "All") to
+	// unconditionally include in API requests. By default, fields with
+	// empty values are omitted from API requests. However, any non-pointer,
+	// non-interface field appearing in ForceSendFields will be sent to the
+	// server regardless of whether the field is empty or not. This may be
+	// used to include empty fields in Patch requests.
+	ForceSendFields []string `json:"-"`
+
+	// NullFields is a list of field names (e.g. "All") to include in API
+	// requests with the JSON null value. By default, fields with empty
+	// values are omitted from API requests. However, any field with an
+	// empty value appearing in NullFields will be sent to the server as
+	// null. It is an error if a field in this list has a non-empty value.
+	// This may be used to include null fields in Patch requests.
+	NullFields []string `json:"-"`
+}
+
+func (s *KeySet) MarshalJSON() ([]byte, error) {
+	type noMethod KeySet
+	raw := noMethod(*s)
+	return gensupport.MarshalJSON(raw, s.ForceSendFields, s.NullFields)
+}
+
+// ListDatabasesResponse: The response for ListDatabases.
+type ListDatabasesResponse struct {
+	// Databases: Databases that matched the request.
+	Databases []*Database `json:"databases,omitempty"`
+
+	// NextPageToken: `next_page_token` can be sent in a
+	// subsequent
+	// ListDatabases call to fetch more
+	// of the matching databases.
+	NextPageToken string `json:"nextPageToken,omitempty"`
+
+	// ServerResponse contains the HTTP response code and headers from the
+	// server.
+	googleapi.ServerResponse `json:"-"`
+
+	// ForceSendFields is a list of field names (e.g. "Databases") to
+	// unconditionally include in API requests. By default, fields with
+	// empty values are omitted from API requests. However, any non-pointer,
+	// non-interface field appearing in ForceSendFields will be sent to the
+	// server regardless of whether the field is empty or not. This may be
+	// used to include empty fields in Patch requests.
+	ForceSendFields []string `json:"-"`
+
+	// NullFields is a list of field names (e.g. "Databases") to include in
+	// API requests with the JSON null value. By default, fields with empty
+	// values are omitted from API requests. However, any field with an
+	// empty value appearing in NullFields will be sent to the server as
+	// null. It is an error if a field in this list has a non-empty value.
+	// This may be used to include null fields in Patch requests.
+	NullFields []string `json:"-"`
+}
+
+func (s *ListDatabasesResponse) MarshalJSON() ([]byte, error) {
+	type noMethod ListDatabasesResponse
+	raw := noMethod(*s)
+	return gensupport.MarshalJSON(raw, s.ForceSendFields, s.NullFields)
+}
+
+// ListInstanceConfigsResponse: The response for ListInstanceConfigs.
+type ListInstanceConfigsResponse struct {
+	// InstanceConfigs: The list of requested instance configurations.
+	InstanceConfigs []*InstanceConfig `json:"instanceConfigs,omitempty"`
+
+	// NextPageToken: `next_page_token` can be sent in a
+	// subsequent
+	// ListInstanceConfigs call to
+	// fetch more of the matching instance configurations.
+	NextPageToken string `json:"nextPageToken,omitempty"`
+
+	// ServerResponse contains the HTTP response code and headers from the
+	// server.
+	googleapi.ServerResponse `json:"-"`
+
+	// ForceSendFields is a list of field names (e.g. "InstanceConfigs") to
+	// unconditionally include in API requests. By default, fields with
+	// empty values are omitted from API requests. However, any non-pointer,
+	// non-interface field appearing in ForceSendFields will be sent to the
+	// server regardless of whether the field is empty or not. This may be
+	// used to include empty fields in Patch requests.
+	ForceSendFields []string `json:"-"`
+
+	// NullFields is a list of field names (e.g. "InstanceConfigs") to
+	// include in API requests with the JSON null value. By default, fields
+	// with empty values are omitted from API requests. However, any field
+	// with an empty value appearing in NullFields will be sent to the
+	// server as null. It is an error if a field in this list has a
+	// non-empty value. This may be used to include null fields in Patch
+	// requests.
+	NullFields []string `json:"-"`
+}
+
+func (s *ListInstanceConfigsResponse) MarshalJSON() ([]byte, error) {
+	type noMethod ListInstanceConfigsResponse
+	raw := noMethod(*s)
+	return gensupport.MarshalJSON(raw, s.ForceSendFields, s.NullFields)
+}
+
+// ListInstancesResponse: The response for ListInstances.
+type ListInstancesResponse struct {
+	// Instances: The list of requested instances.
+	Instances []*Instance `json:"instances,omitempty"`
+
+	// NextPageToken: `next_page_token` can be sent in a
+	// subsequent
+	// ListInstances call to fetch more
+	// of the matching instances.
+	NextPageToken string `json:"nextPageToken,omitempty"`
+
+	// ServerResponse contains the HTTP response code and headers from the
+	// server.
+	googleapi.ServerResponse `json:"-"`
+
+	// ForceSendFields is a list of field names (e.g. "Instances") to
+	// unconditionally include in API requests. By default, fields with
+	// empty values are omitted from API requests. However, any non-pointer,
+	// non-interface field appearing in ForceSendFields will be sent to the
+	// server regardless of whether the field is empty or not. This may be
+	// used to include empty fields in Patch requests.
+	ForceSendFields []string `json:"-"`
+
+	// NullFields is a list of field names (e.g. "Instances") to include in
+	// API requests with the JSON null value. By default, fields with empty
+	// values are omitted from API requests. However, any field with an
+	// empty value appearing in NullFields will be sent to the server as
+	// null. It is an error if a field in this list has a non-empty value.
+	// This may be used to include null fields in Patch requests.
+	NullFields []string `json:"-"`
+}
+
+func (s *ListInstancesResponse) MarshalJSON() ([]byte, error) {
+	type noMethod ListInstancesResponse
+	raw := noMethod(*s)
+	return gensupport.MarshalJSON(raw, s.ForceSendFields, s.NullFields)
+}
+
+// ListOperationsResponse: The response message for
+// Operations.ListOperations.
+type ListOperationsResponse struct {
+	// NextPageToken: The standard List next-page token.
+	NextPageToken string `json:"nextPageToken,omitempty"`
+
+	// Operations: A list of operations that matches the specified filter in
+	// the request.
+	Operations []*Operation `json:"operations,omitempty"`
+
+	// ServerResponse contains the HTTP response code and headers from the
+	// server.
+	googleapi.ServerResponse `json:"-"`
+
+	// ForceSendFields is a list of field names (e.g. "NextPageToken") to
+	// unconditionally include in API requests. By default, fields with
+	// empty values are omitted from API requests. However, any non-pointer,
+	// non-interface field appearing in ForceSendFields will be sent to the
+	// server regardless of whether the field is empty or not. This may be
+	// used to include empty fields in Patch requests.
+	ForceSendFields []string `json:"-"`
+
+	// NullFields is a list of field names (e.g. "NextPageToken") to include
+	// in API requests with the JSON null value. By default, fields with
+	// empty values are omitted from API requests. However, any field with
+	// an empty value appearing in NullFields will be sent to the server as
+	// null. It is an error if a field in this list has a non-empty value.
+	// This may be used to include null fields in Patch requests.
+	NullFields []string `json:"-"`
+}
+
+func (s *ListOperationsResponse) MarshalJSON() ([]byte, error) {
+	type noMethod ListOperationsResponse
+	raw := noMethod(*s)
+	return gensupport.MarshalJSON(raw, s.ForceSendFields, s.NullFields)
+}
+
+// LogConfig: Specifies what kind of log the caller must write
+// Increment a streamz counter with the specified metric and field
+// names.
+//
+// Metric names should start with a '/', generally be
+// lowercase-only,
+// and end in "_count". Field names should not contain an initial
+// slash.
+// The actual exported metric names will have "/iam/policy"
+// prepended.
+//
+// Field names correspond to IAM request parameters and field values
+// are
+// their respective values.
+//
+// At present the only supported field names are
+//    - "iam_principal", corresponding to IAMContext.principal;
+//    - "" (empty string), resulting in one aggretated counter with no
+// field.
+//
+// Examples:
+//   counter { metric: "/debug_access_count"  field: "iam_principal" }
+//   ==> increment counter /iam/policy/backend_debug_access_count
+//                         {iam_principal=[value of
+// IAMContext.principal]}
+//
+// At this time we do not support:
+// * multiple field names (though this may be supported in the future)
+// * decrementing the counter
+// * incrementing it by anything other than 1
+type LogConfig struct {
+	// CloudAudit: Cloud audit options.
+	CloudAudit *CloudAuditOptions `json:"cloudAudit,omitempty"`
+
+	// Counter: Counter options.
+	Counter *CounterOptions `json:"counter,omitempty"`
+
+	// DataAccess: Data access options.
+	DataAccess *DataAccessOptions `json:"dataAccess,omitempty"`
+
+	// ForceSendFields is a list of field names (e.g. "CloudAudit") to
+	// unconditionally include in API requests. By default, fields with
+	// empty values are omitted from API requests. However, any non-pointer,
+	// non-interface field appearing in ForceSendFields will be sent to the
+	// server regardless of whether the field is empty or not. This may be
+	// used to include empty fields in Patch requests.
+	ForceSendFields []string `json:"-"`
+
+	// NullFields is a list of field names (e.g. "CloudAudit") to include in
+	// API requests with the JSON null value. By default, fields with empty
+	// values are omitted from API requests. However, any field with an
+	// empty value appearing in NullFields will be sent to the server as
+	// null. It is an error if a field in this list has a non-empty value.
+	// This may be used to include null fields in Patch requests.
+	NullFields []string `json:"-"`
+}
+
+func (s *LogConfig) MarshalJSON() ([]byte, error) {
+	type noMethod LogConfig
+	raw := noMethod(*s)
+	return gensupport.MarshalJSON(raw, s.ForceSendFields, s.NullFields)
+}
+
+// Mutation: A modification to one or more Cloud Spanner rows.
+// Mutations can be
+// applied to a Cloud Spanner database by sending them in a
+// Commit call.
+type Mutation struct {
+	// Delete: Delete rows from a table. Succeeds whether or not the
+	// named
+	// rows were present.
+	Delete *Delete `json:"delete,omitempty"`
+
+	// Insert: Insert new rows in a table. If any of the rows already
+	// exist,
+	// the write or transaction fails with error `ALREADY_EXISTS`.
+	Insert *Write `json:"insert,omitempty"`
+
+	// InsertOrUpdate: Like insert, except that if the row already exists,
+	// then
+	// its column values are overwritten with the ones provided. Any
+	// column values not explicitly written are preserved.
+	InsertOrUpdate *Write `json:"insertOrUpdate,omitempty"`
+
+	// Replace: Like insert, except that if the row already exists, it
+	// is
+	// deleted, and the column values provided are inserted
+	// instead. Unlike insert_or_update, this means any values
+	// not
+	// explicitly written become `NULL`.
+	Replace *Write `json:"replace,omitempty"`
+
+	// Update: Update existing rows in a table. If any of the rows does
+	// not
+	// already exist, the transaction fails with error `NOT_FOUND`.
+	Update *Write `json:"update,omitempty"`
+
+	// ForceSendFields is a list of field names (e.g. "Delete") to
+	// unconditionally include in API requests. By default, fields with
+	// empty values are omitted from API requests. However, any non-pointer,
+	// non-interface field appearing in ForceSendFields will be sent to the
+	// server regardless of whether the field is empty or not. This may be
+	// used to include empty fields in Patch requests.
+	ForceSendFields []string `json:"-"`
+
+	// NullFields is a list of field names (e.g. "Delete") to include in API
+	// requests with the JSON null value. By default, fields with empty
+	// values are omitted from API requests. However, any field with an
+	// empty value appearing in NullFields will be sent to the server as
+	// null. It is an error if a field in this list has a non-empty value.
+	// This may be used to include null fields in Patch requests.
+	NullFields []string `json:"-"`
+}
+
+func (s *Mutation) MarshalJSON() ([]byte, error) {
+	type noMethod Mutation
+	raw := noMethod(*s)
+	return gensupport.MarshalJSON(raw, s.ForceSendFields, s.NullFields)
+}
+
+// Operation: This resource represents a long-running operation that is
+// the result of a
+// network API call.
+type Operation struct {
+	// Done: 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.
+	Done bool `json:"done,omitempty"`
+
+	// Error: The error result of the operation in case of failure or
+	// cancellation.
+	Error *Status `json:"error,omitempty"`
+
+	// Metadata: 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.
+	Metadata googleapi.RawMessage `json:"metadata,omitempty"`
+
+	// Name: 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 have the format of `operations/some/unique/name`.
+	Name string `json:"name,omitempty"`
+
+	// Response: 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`.
+	Response googleapi.RawMessage `json:"response,omitempty"`
+
+	// ServerResponse contains the HTTP response code and headers from the
+	// server.
+	googleapi.ServerResponse `json:"-"`
+
+	// ForceSendFields is a list of field names (e.g. "Done") to
+	// unconditionally include in API requests. By default, fields with
+	// empty values are omitted from API requests. However, any non-pointer,
+	// non-interface field appearing in ForceSendFields will be sent to the
+	// server regardless of whether the field is empty or not. This may be
+	// used to include empty fields in Patch requests.
+	ForceSendFields []string `json:"-"`
+
+	// NullFields is a list of field names (e.g. "Done") to include in API
+	// requests with the JSON null value. By default, fields with empty
+	// values are omitted from API requests. However, any field with an
+	// empty value appearing in NullFields will be sent to the server as
+	// null. It is an error if a field in this list has a non-empty value.
+	// This may be used to include null fields in Patch requests.
+	NullFields []string `json:"-"`
+}
+
+func (s *Operation) MarshalJSON() ([]byte, error) {
+	type noMethod Operation
+	raw := noMethod(*s)
+	return gensupport.MarshalJSON(raw, s.ForceSendFields, s.NullFields)
+}
+
+// PartialResultSet: Partial results from a streaming read or SQL query.
+// Streaming reads and
+// SQL queries better tolerate large result sets, large rows, and
+// large
+// values, but are a little trickier to consume.
+type PartialResultSet struct {
+	// ChunkedValue: If true, then the final value in values is chunked, and
+	// must
+	// be combined with more values from subsequent `PartialResultSet`s
+	// to obtain a complete field value.
+	ChunkedValue bool `json:"chunkedValue,omitempty"`
+
+	// Metadata: Metadata about the result set, such as row type
+	// information.
+	// Only present in the first response.
+	Metadata *ResultSetMetadata `json:"metadata,omitempty"`
+
+	// ResumeToken: Streaming calls might be interrupted for a variety of
+	// reasons, such
+	// as TCP connection loss. If this occurs, the stream of results can
+	// be resumed by re-sending the original request and
+	// including
+	// `resume_token`. Note that executing any other transaction in the
+	// same session invalidates the token.
+	ResumeToken string `json:"resumeToken,omitempty"`
+
+	// Stats: Query plan and execution statistics for the query that
+	// produced this
+	// streaming result set. These can be requested by
+	// setting
+	// ExecuteSqlRequest.query_mode and are sent
+	// only once with the last response in the stream.
+	Stats *ResultSetStats `json:"stats,omitempty"`
+
+	// Values: A streamed result set consists of a stream of values, which
+	// might
+	// be split into many `PartialResultSet` messages to accommodate
+	// large rows and/or large values. Every N complete values defines
+	// a
+	// row, where N is equal to the number of entries
+	// in
+	// metadata.row_type.fields.
+	//
+	// Most values are encoded based on type as described
+	// here.
+	//
+	// It is possible that the last value in values is "chunked",
+	// meaning that the rest of the value is sent in
+	// subsequent
+	// `PartialResultSet`(s). This is denoted by the chunked_value
+	// field. Two or more chunked values can be merged to form a
+	// complete value as follows:
+	//
+	//   * `bool/number/null`: cannot be chunked
+	//   * `string`: concatenate the strings
+	//   * `list`: concatenate the lists. If the last element in a list is
+	// a
+	//     `string`, `list`, or `object`, merge it with the first element
+	// in
+	//     the next list by applying these rules recursively.
+	//   * `object`: concatenate the (field name, field value) pairs. If a
+	//     field name is duplicated, then apply these rules recursively
+	//     to merge the field values.
+	//
+	// Some examples of merging:
+	//
+	//     # Strings are concatenated.
+	//     "foo", "bar" => "foobar"
+	//
+	//     # Lists of non-strings are concatenated.
+	//     [2, 3], [4] => [2, 3, 4]
+	//
+	//     # Lists are concatenated, but the last and first elements are
+	// merged
+	//     # because they are strings.
+	//     ["a", "b"], ["c", "d"] => ["a", "bc", "d"]
+	//
+	//     # Lists are concatenated, but the last and first elements are
+	// merged
+	//     # because they are lists. Recursively, the last and first
+	// elements
+	//     # of the inner lists are merged because they are strings.
+	//     ["a", ["b", "c"]], [["d"], "e"] => ["a", ["b", "cd"], "e"]
+	//
+	//     # Non-overlapping object fields are combined.
+	//     {"a": "1"}, {"b": "2"} => {"a": "1", "b": 2"}
+	//
+	//     # Overlapping object fields are merged.
+	//     {"a": "1"}, {"a": "2"} => {"a": "12"}
+	//
+	//     # Examples of merging objects containing lists of strings.
+	//     {"a": ["1"]}, {"a": ["2"]} => {"a": ["12"]}
+	//
+	// For a more complete example, suppose a streaming SQL query
+	// is
+	// yielding a result set whose rows contain a single string
+	// field. The following `PartialResultSet`s might be yielded:
+	//
+	//     {
+	//       "metadata": { ... }
+	//       "values": ["Hello", "W"]
+	//       "chunked_value": true
+	//       "resume_token": "Af65..."
+	//     }
+	//     {
+	//       "values": ["orl"]
+	//       "chunked_value": true
+	//       "resume_token": "Bqp2..."
+	//     }
+	//     {
+	//       "values": ["d"]
+	//       "resume_token": "Zx1B..."
+	//     }
+	//
+	// This sequence of `PartialResultSet`s encodes two rows, one
+	// containing the field value "Hello", and a second containing
+	// the
+	// field value "World" = "W" + "orl" + "d".
+	Values []interface{} `json:"values,omitempty"`
+
+	// ServerResponse contains the HTTP response code and headers from the
+	// server.
+	googleapi.ServerResponse `json:"-"`
+
+	// ForceSendFields is a list of field names (e.g. "ChunkedValue") to
+	// unconditionally include in API requests. By default, fields with
+	// empty values are omitted from API requests. However, any non-pointer,
+	// non-interface field appearing in ForceSendFields will be sent to the
+	// server regardless of whether the field is empty or not. This may be
+	// used to include empty fields in Patch requests.
+	ForceSendFields []string `json:"-"`
+
+	// NullFields is a list of field names (e.g. "ChunkedValue") to include
+	// in API requests with the JSON null value. By default, fields with
+	// empty values are omitted from API requests. However, any field with
+	// an empty value appearing in NullFields will be sent to the server as
+	// null. It is an error if a field in this list has a non-empty value.
+	// This may be used to include null fields in Patch requests.
+	NullFields []string `json:"-"`
+}
+
+func (s *PartialResultSet) MarshalJSON() ([]byte, error) {
+	type noMethod PartialResultSet
+	raw := noMethod(*s)
+	return gensupport.MarshalJSON(raw, s.ForceSendFields, s.NullFields)
+}
+
+// PlanNode: Node information for nodes appearing in a
+// QueryPlan.plan_nodes.
+type PlanNode struct {
+	// ChildLinks: List of child node `index`es and their relationship to
+	// this parent.
+	ChildLinks []*ChildLink `json:"childLinks,omitempty"`
+
+	// DisplayName: The display name for the node.
+	DisplayName string `json:"displayName,omitempty"`
+
+	// ExecutionStats: The execution statistics associated with the node,
+	// contained in a group of
+	// key-value pairs. Only present if the plan was returned as a result of
+	// a
+	// profile query. For example, number of executions, number of rows/time
+	// per
+	// execution etc.
+	ExecutionStats googleapi.RawMessage `json:"executionStats,omitempty"`
+
+	// Index: The `PlanNode`'s index in node list.
+	Index int64 `json:"index,omitempty"`
+
+	// Kind: Used to determine the type of node. May be needed for
+	// visualizing
+	// different kinds of nodes differently. For example, If the node is
+	// a
+	// SCALAR node, it will have a condensed representation
+	// which can be used to directly embed a description of the node in
+	// its
+	// parent.
+	//
+	// Possible values:
+	//   "KIND_UNSPECIFIED" - Not specified.
+	//   "RELATIONAL" - Denotes a Relational operator node in the expression
+	// tree. Relational
+	// operators represent iterative processing of rows during query
+	// execution.
+	// For example, a `TableScan` operation that reads rows from a table.
+	//   "SCALAR" - Denotes a Scalar node in the expression tree. Scalar
+	// nodes represent
+	// non-iterable entities in the query plan. For example, constants
+	// or
+	// arithmetic operators appearing inside predicate expressions or
+	// references
+	// to column names.
+	Kind string `json:"kind,omitempty"`
+
+	// Metadata: Attributes relevant to the node contained in a group of
+	// key-value pairs.
+	// For example, a Parameter Reference node could have the
+	// following
+	// information in its metadata:
+	//
+	//     {
+	//       "parameter_reference": "param1",
+	//       "parameter_type": "array"
+	//     }
+	Metadata googleapi.RawMessage `json:"metadata,omitempty"`
+
+	// ShortRepresentation: Condensed representation for SCALAR nodes.
+	ShortRepresentation *ShortRepresentation `json:"shortRepresentation,omitempty"`
+
+	// ForceSendFields is a list of field names (e.g. "ChildLinks") to
+	// unconditionally include in API requests. By default, fields with
+	// empty values are omitted from API requests. However, any non-pointer,
+	// non-interface field appearing in ForceSendFields will be sent to the
+	// server regardless of whether the field is empty or not. This may be
+	// used to include empty fields in Patch requests.
+	ForceSendFields []string `json:"-"`
+
+	// NullFields is a list of field names (e.g. "ChildLinks") to include in
+	// API requests with the JSON null value. By default, fields with empty
+	// values are omitted from API requests. However, any field with an
+	// empty value appearing in NullFields will be sent to the server as
+	// null. It is an error if a field in this list has a non-empty value.
+	// This may be used to include null fields in Patch requests.
+	NullFields []string `json:"-"`
+}
+
+func (s *PlanNode) MarshalJSON() ([]byte, error) {
+	type noMethod PlanNode
+	raw := noMethod(*s)
+	return gensupport.MarshalJSON(raw, s.ForceSendFields, s.NullFields)
+}
+
+// Policy: Defines an Identity and Access Management (IAM) policy. It is
+// used to
+// specify access control policies for Cloud Platform resources.
+//
+//
+// A `Policy` consists of a list of `bindings`. A `Binding` binds a list
+// of
+// `members` to a `role`, where the members can be user accounts, Google
+// groups,
+// Google domains, and service accounts. A `role` is a named list of
+// permissions
+// defined by IAM.
+//
+// **Example**
+//
+//     {
+//       "bindings": [
+//         {
+//           "role": "roles/owner",
+//           "members": [
+//             "user:mike@example.com",
+//             "group:admins@example.com",
+//             "domain:google.com",
+//
+// "serviceAccount:my-other-app@appspot.gserviceaccount.com",
+//           ]
+//         },
+//         {
+//           "role": "roles/viewer",
+//           "members": ["user:sean@example.com"]
+//         }
+//       ]
+//     }
+//
+// For a description of IAM and its features, see the
+// [IAM developer's guide](https://cloud.google.com/iam).
+type Policy struct {
+	// AuditConfigs: Specifies cloud audit logging configuration for this
+	// policy.
+	AuditConfigs []*AuditConfig `json:"auditConfigs,omitempty"`
+
+	// Bindings: Associates a list of `members` to a `role`.
+	// Multiple `bindings` must not be specified for the same
+	// `role`.
+	// `bindings` with no members will result in an error.
+	Bindings []*Binding `json:"bindings,omitempty"`
+
+	// Etag: `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.
+	//
+	// If no `etag` is provided in the call to `setIamPolicy`, then the
+	// existing
+	// policy is overwritten blindly.
+	Etag string `json:"etag,omitempty"`
+
+	IamOwned bool `json:"iamOwned,omitempty"`
+
+	// Rules: If more than one rule is specified, the rules are applied in
+	// the following
+	// manner:
+	// - All matching LOG rules are always applied.
+	// - If any DENY/DENY_WITH_LOG rule matches, permission is denied.
+	//   Logging will be applied if one or more matching rule requires
+	// logging.
+	// - Otherwise, if any ALLOW/ALLOW_WITH_LOG rule matches, permission is
+	//   granted.
+	//   Logging will be applied if one or more matching rule requires
+	// logging.
+	// - Otherwise, if no rule applies, permission is denied.
+	Rules []*Rule `json:"rules,omitempty"`
+
+	// Version: Version of the `Policy`. The default version is 0.
+	Version int64 `json:"version,omitempty"`
+
+	// ServerResponse contains the HTTP response code and headers from the
+	// server.
+	googleapi.ServerResponse `json:"-"`
+
+	// ForceSendFields is a list of field names (e.g. "AuditConfigs") to
+	// unconditionally include in API requests. By default, fields with
+	// empty values are omitted from API requests. However, any non-pointer,
+	// non-interface field appearing in ForceSendFields will be sent to the
+	// server regardless of whether the field is empty or not. This may be
+	// used to include empty fields in Patch requests.
+	ForceSendFields []string `json:"-"`
+
+	// NullFields is a list of field names (e.g. "AuditConfigs") to include
+	// in API requests with the JSON null value. By default, fields with
+	// empty values are omitted from API requests. However, any field with
+	// an empty value appearing in NullFields will be sent to the server as
+	// null. It is an error if a field in this list has a non-empty value.
+	// This may be used to include null fields in Patch requests.
+	NullFields []string `json:"-"`
+}
+
+func (s *Policy) MarshalJSON() ([]byte, error) {
+	type noMethod Policy
+	raw := noMethod(*s)
+	return gensupport.MarshalJSON(raw, s.ForceSendFields, s.NullFields)
+}
+
+// QueryPlan: Contains an ordered list of nodes appearing in the query
+// plan.
+type QueryPlan struct {
+	// PlanNodes: The nodes in the query plan. Plan nodes are returned in
+	// pre-order starting
+	// with the plan root. Each PlanNode's `id` corresponds to its index
+	// in
+	// `plan_nodes`.
+	PlanNodes []*PlanNode `json:"planNodes,omitempty"`
+
+	// ForceSendFields is a list of field names (e.g. "PlanNodes") to
+	// unconditionally include in API requests. By default, fields with
+	// empty values are omitted from API requests. However, any non-pointer,
+	// non-interface field appearing in ForceSendFields will be sent to the
+	// server regardless of whether the field is empty or not. This may be
+	// used to include empty fields in Patch requests.
+	ForceSendFields []string `json:"-"`
+
+	// NullFields is a list of field names (e.g. "PlanNodes") to include in
+	// API requests with the JSON null value. By default, fields with empty
+	// values are omitted from API requests. However, any field with an
+	// empty value appearing in NullFields will be sent to the server as
+	// null. It is an error if a field in this list has a non-empty value.
+	// This may be used to include null fields in Patch requests.
+	NullFields []string `json:"-"`
+}
+
+func (s *QueryPlan) MarshalJSON() ([]byte, error) {
+	type noMethod QueryPlan
+	raw := noMethod(*s)
+	return gensupport.MarshalJSON(raw, s.ForceSendFields, s.NullFields)
+}
+
+// ReadOnly: Options for read-only transactions.
+type ReadOnly struct {
+	// ExactStaleness: Executes all reads at a timestamp that is
+	// `exact_staleness`
+	// old. The timestamp is chosen soon after the read is
+	// started.
+	//
+	// Guarantees that all writes that have committed more than
+	// the
+	// specified number of seconds ago are visible. Because Cloud
+	// Spanner
+	// chooses the exact timestamp, this mode works even if the
+	// client's
+	// local clock is substantially skewed from Cloud Spanner
+	// commit
+	// timestamps.
+	//
+	// Useful for reading at nearby replicas without the
+	// distributed
+	// timestamp negotiation overhead of `max_staleness`.
+	ExactStaleness string `json:"exactStaleness,omitempty"`
+
+	// MaxStaleness: Read data at a timestamp >= `NOW -
+	// max_staleness`
+	// seconds. Guarantees that all writes that have committed more
+	// than the specified number of seconds ago are visible. Because
+	// Cloud Spanner chooses the exact timestamp, this mode works even
+	// if
+	// the client's local clock is substantially skewed from Cloud
+	// Spanner
+	// commit timestamps.
+	//
+	// Useful for reading the freshest data available at a nearby
+	// replica, while bounding the possible staleness if the local
+	// replica has fallen behind.
+	//
+	// Note that this option can only be used in single-use
+	// transactions.
+	MaxStaleness string `json:"maxStaleness,omitempty"`
+
+	// MinReadTimestamp: Executes all reads at a timestamp >=
+	// `min_read_timestamp`.
+	//
+	// This is useful for requesting fresher data than some previous
+	// read, or data that is fresh enough to observe the effects of
+	// some
+	// previously committed transaction whose timestamp is known.
+	//
+	// Note that this option can only be used in single-use transactions.
+	MinReadTimestamp string `json:"minReadTimestamp,omitempty"`
+
+	// ReadTimestamp: Executes all reads at the given timestamp. Unlike
+	// other modes,
+	// reads at a specific timestamp are repeatable; the same read at
+	// the same timestamp always returns the same data. If the
+	// timestamp is in the future, the read will block until the
+	// specified timestamp, modulo the read's deadline.
+	//
+	// Useful for large scale consistent reads such as mapreduces, or
+	// for coordinating many reads against a consistent snapshot of
+	// the
+	// data.
+	ReadTimestamp string `json:"readTimestamp,omitempty"`
+
+	// ReturnReadTimestamp: If true, the Cloud Spanner-selected read
+	// timestamp is included in
+	// the Transaction message that describes the transaction.
+	ReturnReadTimestamp bool `json:"returnReadTimestamp,omitempty"`
+
+	// Strong: Read at a timestamp where all previously committed
+	// transactions
+	// are visible.
+	Strong bool `json:"strong,omitempty"`
+
+	// ForceSendFields is a list of field names (e.g. "ExactStaleness") to
+	// unconditionally include in API requests. By default, fields with
+	// empty values are omitted from API requests. However, any non-pointer,
+	// non-interface field appearing in ForceSendFields will be sent to the
+	// server regardless of whether the field is empty or not. This may be
+	// used to include empty fields in Patch requests.
+	ForceSendFields []string `json:"-"`
+
+	// NullFields is a list of field names (e.g. "ExactStaleness") to
+	// include in API requests with the JSON null value. By default, fields
+	// with empty values are omitted from API requests. However, any field
+	// with an empty value appearing in NullFields will be sent to the
+	// server as null. It is an error if a field in this list has a
+	// non-empty value. This may be used to include null fields in Patch
+	// requests.
+	NullFields []string `json:"-"`
+}
+
+func (s *ReadOnly) MarshalJSON() ([]byte, error) {
+	type noMethod ReadOnly
+	raw := noMethod(*s)
+	return gensupport.MarshalJSON(raw, s.ForceSendFields, s.NullFields)
+}
+
+// ReadRequest: The request for Read and
+// StreamingRead.
+type ReadRequest struct {
+	// Columns: The columns of table to be returned for each row
+	// matching
+	// this request.
+	Columns []string `json:"columns,omitempty"`
+
+	// Index: If non-empty, the name of an index on table. This index
+	// is
+	// used instead of the table primary key when interpreting key_set
+	// and sorting result rows. See key_set for further information.
+	Index string `json:"index,omitempty"`
+
+	// KeySet: Required. `key_set` identifies the rows to be yielded.
+	// `key_set` names the
+	// primary keys of the rows in table to be yielded, unless index
+	// is present. If index is present, then key_set instead names
+	// index keys in index.
+	//
+	// Rows are yielded in table primary key order (if index is empty)
+	// or index key order (if index is non-empty).
+	//
+	// It is not an error for the `key_set` to name rows that do not
+	// exist in the database. Read yields nothing for nonexistent rows.
+	KeySet *KeySet `json:"keySet,omitempty"`
+
+	// Limit: If greater than zero, only the first `limit` rows are yielded.
+	// If `limit`
+	// is zero, the default is no limit.
+	Limit int64 `json:"limit,omitempty,string"`
+
+	// ResumeToken: If this request is resuming a previously interrupted
+	// read,
+	// `resume_token` should be copied from the last
+	// PartialResultSet yielded before the interruption. Doing this
+	// enables the new read to resume where the last read left off. The
+	// rest of the request parameters must exactly match the request
+	// that yielded this token.
+	ResumeToken string `json:"resumeToken,omitempty"`
+
+	// Table: Required. The name of the table in the database to be read.
+	Table string `json:"table,omitempty"`
+
+	// Transaction: The transaction to use. If none is provided, the default
+	// is a
+	// temporary read-only transaction with strong concurrency.
+	Transaction *TransactionSelector `json:"transaction,omitempty"`
+
+	// ForceSendFields is a list of field names (e.g. "Columns") to
+	// unconditionally include in API requests. By default, fields with
+	// empty values are omitted from API requests. However, any non-pointer,
+	// non-interface field appearing in ForceSendFields will be sent to the
+	// server regardless of whether the field is empty or not. This may be
+	// used to include empty fields in Patch requests.
+	ForceSendFields []string `json:"-"`
+
+	// NullFields is a list of field names (e.g. "Columns") to include in
+	// API requests with the JSON null value. By default, fields with empty
+	// values are omitted from API requests. However, any field with an
+	// empty value appearing in NullFields will be sent to the server as
+	// null. It is an error if a field in this list has a non-empty value.
+	// This may be used to include null fields in Patch requests.
+	NullFields []string `json:"-"`
+}
+
+func (s *ReadRequest) MarshalJSON() ([]byte, error) {
+	type noMethod ReadRequest
+	raw := noMethod(*s)
+	return gensupport.MarshalJSON(raw, s.ForceSendFields, s.NullFields)
+}
+
+// ReadWrite: Options for read-write transactions.
+type ReadWrite struct {
+}
+
+// ResultSet: Results from Read or
+// ExecuteSql.
+type ResultSet struct {
+	// Metadata: Metadata about the result set, such as row type
+	// information.
+	Metadata *ResultSetMetadata `json:"metadata,omitempty"`
+
+	// Rows: Each element in `rows` is a row whose format is defined
+	// by
+	// metadata.row_type. The ith element
+	// in each row matches the ith field in
+	// metadata.row_type. Elements are
+	// encoded based on type as described
+	// here.
+	Rows [][]interface{} `json:"rows,omitempty"`
+
+	// Stats: Query plan and execution statistics for the query that
+	// produced this
+	// result set. These can be requested by
+	// setting
+	// ExecuteSqlRequest.query_mode.
+	Stats *ResultSetStats `json:"stats,omitempty"`
+
+	// ServerResponse contains the HTTP response code and headers from the
+	// server.
+	googleapi.ServerResponse `json:"-"`
+
+	// ForceSendFields is a list of field names (e.g. "Metadata") to
+	// unconditionally include in API requests. By default, fields with
+	// empty values are omitted from API requests. However, any non-pointer,
+	// non-interface field appearing in ForceSendFields will be sent to the
+	// server regardless of whether the field is empty or not. This may be
+	// used to include empty fields in Patch requests.
+	ForceSendFields []string `json:"-"`
+
+	// NullFields is a list of field names (e.g. "Metadata") to include in
+	// API requests with the JSON null value. By default, fields with empty
+	// values are omitted from API requests. However, any field with an
+	// empty value appearing in NullFields will be sent to the server as
+	// null. It is an error if a field in this list has a non-empty value.
+	// This may be used to include null fields in Patch requests.
+	NullFields []string `json:"-"`
+}
+
+func (s *ResultSet) MarshalJSON() ([]byte, error) {
+	type noMethod ResultSet
+	raw := noMethod(*s)
+	return gensupport.MarshalJSON(raw, s.ForceSendFields, s.NullFields)
+}
+
+// ResultSetMetadata: Metadata about a ResultSet or PartialResultSet.
+type ResultSetMetadata struct {
+	// RowType: Indicates the field names and types for the rows in the
+	// result
+	// set.  For example, a SQL query like "SELECT UserId, UserName
+	// FROM
+	// Users" could return a `row_type` value like:
+	//
+	//     "fields": [
+	//       { "name": "UserId", "type": { "code": "INT64" } },
+	//       { "name": "UserName", "type": { "code": "STRING" } },
+	//     ]
+	RowType *StructType `json:"rowType,omitempty"`
+
+	// Transaction: If the read or SQL query began a transaction as a
+	// side-effect, the
+	// information about the new transaction is yielded here.
+	Transaction *Transaction `json:"transaction,omitempty"`
+
+	// ForceSendFields is a list of field names (e.g. "RowType") to
+	// unconditionally include in API requests. By default, fields with
+	// empty values are omitted from API requests. However, any non-pointer,
+	// non-interface field appearing in ForceSendFields will be sent to the
+	// server regardless of whether the field is empty or not. This may be
+	// used to include empty fields in Patch requests.
+	ForceSendFields []string `json:"-"`
+
+	// NullFields is a list of field names (e.g. "RowType") to include in
+	// API requests with the JSON null value. By default, fields with empty
+	// values are omitted from API requests. However, any field with an
+	// empty value appearing in NullFields will be sent to the server as
+	// null. It is an error if a field in this list has a non-empty value.
+	// This may be used to include null fields in Patch requests.
+	NullFields []string `json:"-"`
+}
+
+func (s *ResultSetMetadata) MarshalJSON() ([]byte, error) {
+	type noMethod ResultSetMetadata
+	raw := noMethod(*s)
+	return gensupport.MarshalJSON(raw, s.ForceSendFields, s.NullFields)
+}
+
+// ResultSetStats: Additional statistics about a ResultSet or
+// PartialResultSet.
+type ResultSetStats struct {
+	// QueryPlan: QueryPlan for the query associated with this result.
+	QueryPlan *QueryPlan `json:"queryPlan,omitempty"`
+
+	// QueryStats: Aggregated statistics from the execution of the query.
+	// Only present when
+	// the query is profiled. For example, a query could return the
+	// statistics as
+	// follows:
+	//
+	//     {
+	//       "rows_returned": "3",
+	//       "elapsed_time": "1.22 secs",
+	//       "cpu_time": "1.19 secs"
+	//     }
+	QueryStats googleapi.RawMessage `json:"queryStats,omitempty"`
+
+	// ForceSendFields is a list of field names (e.g. "QueryPlan") to
+	// unconditionally include in API requests. By default, fields with
+	// empty values are omitted from API requests. However, any non-pointer,
+	// non-interface field appearing in ForceSendFields will be sent to the
+	// server regardless of whether the field is empty or not. This may be
+	// used to include empty fields in Patch requests.
+	ForceSendFields []string `json:"-"`
+
+	// NullFields is a list of field names (e.g. "QueryPlan") to include in
+	// API requests with the JSON null value. By default, fields with empty
+	// values are omitted from API requests. However, any field with an
+	// empty value appearing in NullFields will be sent to the server as
+	// null. It is an error if a field in this list has a non-empty value.
+	// This may be used to include null fields in Patch requests.
+	NullFields []string `json:"-"`
+}
+
+func (s *ResultSetStats) MarshalJSON() ([]byte, error) {
+	type noMethod ResultSetStats
+	raw := noMethod(*s)
+	return gensupport.MarshalJSON(raw, s.ForceSendFields, s.NullFields)
+}
+
+// RollbackRequest: The request for Rollback.
+type RollbackRequest struct {
+	// TransactionId: Required. The transaction to roll back.
+	TransactionId string `json:"transactionId,omitempty"`
+
+	// ForceSendFields is a list of field names (e.g. "TransactionId") to
+	// unconditionally include in API requests. By default, fields with
+	// empty values are omitted from API requests. However, any non-pointer,
+	// non-interface field appearing in ForceSendFields will be sent to the
+	// server regardless of whether the field is empty or not. This may be
+	// used to include empty fields in Patch requests.
+	ForceSendFields []string `json:"-"`
+
+	// NullFields is a list of field names (e.g. "TransactionId") to include
+	// in API requests with the JSON null value. By default, fields with
+	// empty values are omitted from API requests. However, any field with
+	// an empty value appearing in NullFields will be sent to the server as
+	// null. It is an error if a field in this list has a non-empty value.
+	// This may be used to include null fields in Patch requests.
+	NullFields []string `json:"-"`
+}
+
+func (s *RollbackRequest) MarshalJSON() ([]byte, error) {
+	type noMethod RollbackRequest
+	raw := noMethod(*s)
+	return gensupport.MarshalJSON(raw, s.ForceSendFields, s.NullFields)
+}
+
+// Rule: A rule to be applied in a Policy.
+type Rule struct {
+	// Action: Required
+	//
+	// Possible values:
+	//   "NO_ACTION" - Default no action.
+	//   "ALLOW" - Matching 'Entries' grant access.
+	//   "ALLOW_WITH_LOG" - Matching 'Entries' grant access and the caller
+	// promises to log
+	// the request per the returned log_configs.
+	//   "DENY" - Matching 'Entries' deny access.
+	//   "DENY_WITH_LOG" - Matching 'Entries' deny access and the caller
+	// promises to log
+	// the request per the returned log_configs.
+	//   "LOG" - Matching 'Entries' tell IAM.Check callers to generate logs.
+	Action string `json:"action,omitempty"`
+
+	// Conditions: Additional restrictions that must be met
+	Conditions []*Condition `json:"conditions,omitempty"`
+
+	// Description: Human-readable description of the rule.
+	Description string `json:"description,omitempty"`
+
+	// In: If one or more 'in' clauses are specified, the rule matches
+	// if
+	// the PRINCIPAL/AUTHORITY_SELECTOR is in at least one of these entries.
+	In []string `json:"in,omitempty"`
+
+	// LogConfig: The config returned to callers of tech.iam.IAM.CheckPolicy
+	// for any entries
+	// that match the LOG action.
+	LogConfig []*LogConfig `json:"logConfig,omitempty"`
+
+	// NotIn: If one or more 'not_in' clauses are specified, the rule
+	// matches
+	// if the PRINCIPAL/AUTHORITY_SELECTOR is in none of the entries.
+	// The format for in and not_in entries is the same as for members in
+	// a
+	// Binding (see google/iam/v1/policy.proto).
+	NotIn []string `json:"notIn,omitempty"`
+
+	// Permissions: A permission is a string of form '<service>.<resource
+	// type>.<verb>'
+	// (e.g., 'storage.buckets.list'). A value of '*' matches all
+	// permissions,
+	// and a verb part of '*' (e.g., 'storage.buckets.*') matches all verbs.
+	Permissions []string `json:"permissions,omitempty"`
+
+	// ForceSendFields is a list of field names (e.g. "Action") to
+	// unconditionally include in API requests. By default, fields with
+	// empty values are omitted from API requests. However, any non-pointer,
+	// non-interface field appearing in ForceSendFields will be sent to the
+	// server regardless of whether the field is empty or not. This may be
+	// used to include empty fields in Patch requests.
+	ForceSendFields []string `json:"-"`
+
+	// NullFields is a list of field names (e.g. "Action") to include in API
+	// requests with the JSON null value. By default, fields with empty
+	// values are omitted from API requests. However, any field with an
+	// empty value appearing in NullFields will be sent to the server as
+	// null. It is an error if a field in this list has a non-empty value.
+	// This may be used to include null fields in Patch requests.
+	NullFields []string `json:"-"`
+}
+
+func (s *Rule) MarshalJSON() ([]byte, error) {
+	type noMethod Rule
+	raw := noMethod(*s)
+	return gensupport.MarshalJSON(raw, s.ForceSendFields, s.NullFields)
+}
+
+// Session: A session in the Cloud Spanner API.
+type Session struct {
+	// Name: Required. The name of the session.
+	Name string `json:"name,omitempty"`
+
+	// ServerResponse contains the HTTP response code and headers from the
+	// server.
+	googleapi.ServerResponse `json:"-"`
+
+	// ForceSendFields is a list of field names (e.g. "Name") to
+	// unconditionally include in API requests. By default, fields with
+	// empty values are omitted from API requests. However, any non-pointer,
+	// non-interface field appearing in ForceSendFields will be sent to the
+	// server regardless of whether the field is empty or not. This may be
+	// used to include empty fields in Patch requests.
+	ForceSendFields []string `json:"-"`
+
+	// NullFields is a list of field names (e.g. "Name") to include in API
+	// requests with the JSON null value. By default, fields with empty
+	// values are omitted from API requests. However, any field with an
+	// empty value appearing in NullFields will be sent to the server as
+	// null. It is an error if a field in this list has a non-empty value.
+	// This may be used to include null fields in Patch requests.
+	NullFields []string `json:"-"`
+}
+
+func (s *Session) MarshalJSON() ([]byte, error) {
+	type noMethod Session
+	raw := noMethod(*s)
+	return gensupport.MarshalJSON(raw, s.ForceSendFields, s.NullFields)
+}
+
+// SetIamPolicyRequest: Request message for `SetIamPolicy` method.
+type SetIamPolicyRequest struct {
+	// Policy: 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.
+	Policy *Policy `json:"policy,omitempty"`
+
+	// UpdateMask: 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, a
+	// default
+	// mask is used:
+	// paths: "bindings, etag"
+	// This field is only used by Cloud IAM.
+	UpdateMask string `json:"updateMask,omitempty"`
+
+	// ForceSendFields is a list of field names (e.g. "Policy") to
+	// unconditionally include in API requests. By default, fields with
+	// empty values are omitted from API requests. However, any non-pointer,
+	// non-interface field appearing in ForceSendFields will be sent to the
+	// server regardless of whether the field is empty or not. This may be
+	// used to include empty fields in Patch requests.
+	ForceSendFields []string `json:"-"`
+
+	// NullFields is a list of field names (e.g. "Policy") to include in API
+	// requests with the JSON null value. By default, fields with empty
+	// values are omitted from API requests. However, any field with an
+	// empty value appearing in NullFields will be sent to the server as
+	// null. It is an error if a field in this list has a non-empty value.
+	// This may be used to include null fields in Patch requests.
+	NullFields []string `json:"-"`
+}
+
+func (s *SetIamPolicyRequest) MarshalJSON() ([]byte, error) {
+	type noMethod SetIamPolicyRequest
+	raw := noMethod(*s)
+	return gensupport.MarshalJSON(raw, s.ForceSendFields, s.NullFields)
+}
+
+// ShortRepresentation: Condensed representation of a node and its
+// subtree. Only present for
+// `SCALAR` PlanNode(s).
+type ShortRepresentation struct {
+	// Description: A string representation of the expression subtree rooted
+	// at this node.
+	Description string `json:"description,omitempty"`
+
+	// Subqueries: A mapping of (subquery variable name) -> (subquery node
+	// id) for cases
+	// where the `description` string of this node references a
+	// `SCALAR`
+	// subquery contained in the expression subtree rooted at this node.
+	// The
+	// referenced `SCALAR` subquery may not necessarily be a direct child
+	// of
+	// this node.
+	Subqueries map[string]int64 `json:"subqueries,omitempty"`
+
+	// ForceSendFields is a list of field names (e.g. "Description") to
+	// unconditionally include in API requests. By default, fields with
+	// empty values are omitted from API requests. However, any non-pointer,
+	// non-interface field appearing in ForceSendFields will be sent to the
+	// server regardless of whether the field is empty or not. This may be
+	// used to include empty fields in Patch requests.
+	ForceSendFields []string `json:"-"`
+
+	// NullFields is a list of field names (e.g. "Description") to include
+	// in API requests with the JSON null value. By default, fields with
+	// empty values are omitted from API requests. However, any field with
+	// an empty value appearing in NullFields will be sent to the server as
+	// null. It is an error if a field in this list has a non-empty value.
+	// This may be used to include null fields in Patch requests.
+	NullFields []string `json:"-"`
+}
+
+func (s *ShortRepresentation) MarshalJSON() ([]byte, error) {
+	type noMethod ShortRepresentation
+	raw := noMethod(*s)
+	return gensupport.MarshalJSON(raw, s.ForceSendFields, s.NullFields)
+}
+
+// Status: 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). The error model is designed to
+// be:
+//
+// - Simple to use and understand for most users
+// - Flexible enough to meet unexpected needs
+//
+// # Overview
+//
+// The `Status` message contains three pieces of data: error code, error
+// message,
+// and error details. The error code should be an enum value
+// of
+// google.rpc.Code, but it may accept additional error codes if needed.
+// The
+// error message should be a developer-facing English message that
+// helps
+// developers *understand* and *resolve* the error. If a localized
+// user-facing
+// error message is needed, put the localized message in the error
+// details or
+// localize it in the client. The optional error details may contain
+// arbitrary
+// information about the error. There is a predefined set of error
+// detail types
+// in the package `google.rpc` which can be used for common error
+// conditions.
+//
+// # Language mapping
+//
+// The `Status` message is the logical representation of the error
+// model, but it
+// is not necessarily the actual wire format. When the `Status` message
+// is
+// exposed in different client libraries and different wire protocols,
+// it can be
+// mapped differently. For example, it will likely be mapped to some
+// exceptions
+// in Java, but more likely mapped to some error codes in C.
+//
+// # Other uses
+//
+// The error model and the `Status` message can be used in a variety
+// of
+// environments, either with or without APIs, to provide a
+// consistent developer experience across different
+// environments.
+//
+// Example uses of this error model include:
+//
+// - Partial errors. If a service needs to return partial errors to the
+// client,
+//     it may embed the `Status` in the normal response to indicate the
+// partial
+//     errors.
+//
+// - Workflow errors. A typical workflow has multiple steps. Each step
+// may
+//     have a `Status` message for error reporting purpose.
+//
+// - Batch operations. If a client uses batch request and batch
+// response, the
+//     `Status` message should be used directly inside batch response,
+// one for
+//     each error sub-response.
+//
+// - Asynchronous operations. If an API call embeds asynchronous
+// operation
+//     results in its response, the status of those operations should
+// be
+//     represented directly using the `Status` message.
+//
+// - Logging. If some API errors are stored in logs, the message
+// `Status` could
+//     be used directly after any stripping needed for security/privacy
+// reasons.
+type Status struct {
+	// Code: The status code, which should be an enum value of
+	// google.rpc.Code.
+	Code int64 `json:"code,omitempty"`
+
+	// Details: A list of messages that carry the error details.  There will
+	// be a
+	// common set of message types for APIs to use.
+	Details []googleapi.RawMessage `json:"details,omitempty"`
+
+	// Message: 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.
+	Message string `json:"message,omitempty"`
+
+	// ForceSendFields is a list of field names (e.g. "Code") to
+	// unconditionally include in API requests. By default, fields with
+	// empty values are omitted from API requests. However, any non-pointer,
+	// non-interface field appearing in ForceSendFields will be sent to the
+	// server regardless of whether the field is empty or not. This may be
+	// used to include empty fields in Patch requests.
+	ForceSendFields []string `json:"-"`
+
+	// NullFields is a list of field names (e.g. "Code") to include in API
+	// requests with the JSON null value. By default, fields with empty
+	// values are omitted from API requests. However, any field with an
+	// empty value appearing in NullFields will be sent to the server as
+	// null. It is an error if a field in this list has a non-empty value.
+	// This may be used to include null fields in Patch requests.
+	NullFields []string `json:"-"`
+}
+
+func (s *Status) MarshalJSON() ([]byte, error) {
+	type noMethod Status
+	raw := noMethod(*s)
+	return gensupport.MarshalJSON(raw, s.ForceSendFields, s.NullFields)
+}
+
+// StructType: `StructType` defines the fields of a STRUCT type.
+type StructType struct {
+	// Fields: The list of fields that make up this struct. Order
+	// is
+	// significant, because values of this struct type are represented
+	// as
+	// lists, where the order of field values matches the order of
+	// fields in the StructType. In turn, the order of fields
+	// matches the order of columns in a read request, or the order
+	// of
+	// fields in the `SELECT` clause of a query.
+	Fields []*Field `json:"fields,omitempty"`
+
+	// ForceSendFields is a list of field names (e.g. "Fields") to
+	// unconditionally include in API requests. By default, fields with
+	// empty values are omitted from API requests. However, any non-pointer,
+	// non-interface field appearing in ForceSendFields will be sent to the
+	// server regardless of whether the field is empty or not. This may be
+	// used to include empty fields in Patch requests.
+	ForceSendFields []string `json:"-"`
+
+	// NullFields is a list of field names (e.g. "Fields") to include in API
+	// requests with the JSON null value. By default, fields with empty
+	// values are omitted from API requests. However, any field with an
+	// empty value appearing in NullFields will be sent to the server as
+	// null. It is an error if a field in this list has a non-empty value.
+	// This may be used to include null fields in Patch requests.
+	NullFields []string `json:"-"`
+}
+
+func (s *StructType) MarshalJSON() ([]byte, error) {
+	type noMethod StructType
+	raw := noMethod(*s)
+	return gensupport.MarshalJSON(raw, s.ForceSendFields, s.NullFields)
+}
+
+// TestIamPermissionsRequest: Request message for `TestIamPermissions`
+// method.
+type TestIamPermissionsRequest struct {
+	// Permissions: REQUIRED: The set of permissions to check for
+	// 'resource'.
+	// Permissions with wildcards (such as '*', 'spanner.*',
+	// 'spanner.instances.*') are not allowed.
+	Permissions []string `json:"permissions,omitempty"`
+
+	// ForceSendFields is a list of field names (e.g. "Permissions") to
+	// unconditionally include in API requests. By default, fields with
+	// empty values are omitted from API requests. However, any non-pointer,
+	// non-interface field appearing in ForceSendFields will be sent to the
+	// server regardless of whether the field is empty or not. This may be
+	// used to include empty fields in Patch requests.
+	ForceSendFields []string `json:"-"`
+
+	// NullFields is a list of field names (e.g. "Permissions") to include
+	// in API requests with the JSON null value. By default, fields with
+	// empty values are omitted from API requests. However, any field with
+	// an empty value appearing in NullFields will be sent to the server as
+	// null. It is an error if a field in this list has a non-empty value.
+	// This may be used to include null fields in Patch requests.
+	NullFields []string `json:"-"`
+}
+
+func (s *TestIamPermissionsRequest) MarshalJSON() ([]byte, error) {
+	type noMethod TestIamPermissionsRequest
+	raw := noMethod(*s)
+	return gensupport.MarshalJSON(raw, s.ForceSendFields, s.NullFields)
+}
+
+// TestIamPermissionsResponse: Response message for `TestIamPermissions`
+// method.
+type TestIamPermissionsResponse struct {
+	// Permissions: A subset of `TestPermissionsRequest.permissions` that
+	// the caller is
+	// allowed.
+	Permissions []string `json:"permissions,omitempty"`
+
+	// ServerResponse contains the HTTP response code and headers from the
+	// server.
+	googleapi.ServerResponse `json:"-"`
+
+	// ForceSendFields is a list of field names (e.g. "Permissions") to
+	// unconditionally include in API requests. By default, fields with
+	// empty values are omitted from API requests. However, any non-pointer,
+	// non-interface field appearing in ForceSendFields will be sent to the
+	// server regardless of whether the field is empty or not. This may be
+	// used to include empty fields in Patch requests.
+	ForceSendFields []string `json:"-"`
+
+	// NullFields is a list of field names (e.g. "Permissions") to include
+	// in API requests with the JSON null value. By default, fields with
+	// empty values are omitted from API requests. However, any field with
+	// an empty value appearing in NullFields will be sent to the server as
+	// null. It is an error if a field in this list has a non-empty value.
+	// This may be used to include null fields in Patch requests.
+	NullFields []string `json:"-"`
+}
+
+func (s *TestIamPermissionsResponse) MarshalJSON() ([]byte, error) {
+	type noMethod TestIamPermissionsResponse
+	raw := noMethod(*s)
+	return gensupport.MarshalJSON(raw, s.ForceSendFields, s.NullFields)
+}
+
+// Transaction: A transaction.
+type Transaction struct {
+	// Id: `id` may be used to identify the transaction in
+	// subsequent
+	// Read,
+	// ExecuteSql,
+	// Commit, or
+	// Rollback calls.
+	//
+	// Single-use read-only transactions do not have IDs, because
+	// single-use transactions do not support multiple requests.
+	Id string `json:"id,omitempty"`
+
+	// ReadTimestamp: For snapshot read-only transactions, the read
+	// timestamp chosen
+	// for the transaction. Not returned by default:
+	// see
+	// TransactionOptions.ReadOnly.return_read_timestamp.
+	ReadTimestamp string `json:"readTimestamp,omitempty"`
+
+	// ServerResponse contains the HTTP response code and headers from the
+	// server.
+	googleapi.ServerResponse `json:"-"`
+
+	// ForceSendFields is a list of field names (e.g. "Id") to
+	// unconditionally include in API requests. By default, fields with
+	// empty values are omitted from API requests. However, any non-pointer,
+	// non-interface field appearing in ForceSendFields will be sent to the
+	// server regardless of whether the field is empty or not. This may be
+	// used to include empty fields in Patch requests.
+	ForceSendFields []string `json:"-"`
+
+	// NullFields is a list of field names (e.g. "Id") to include in API
+	// requests with the JSON null value. By default, fields with empty
+	// values are omitted from API requests. However, any field with an
+	// empty value appearing in NullFields will be sent to the server as
+	// null. It is an error if a field in this list has a non-empty value.
+	// This may be used to include null fields in Patch requests.
+	NullFields []string `json:"-"`
+}
+
+func (s *Transaction) MarshalJSON() ([]byte, error) {
+	type noMethod Transaction
+	raw := noMethod(*s)
+	return gensupport.MarshalJSON(raw, s.ForceSendFields, s.NullFields)
+}
+
+// TransactionOptions: # Transactions
+//
+//
+// Each session can have at most one active transaction at a time. After
+// the
+// active transaction is completed, the session can immediately
+// be
+// re-used for the next transaction. It is not necessary to create a
+// new session for each transaction.
+//
+// # Transaction Modes
+//
+// Cloud Spanner supports two transaction modes:
+//
+//   1. Locking read-write. This type of transaction is the only way
+//      to write data into Cloud Spanner. These transactions rely on
+//      pessimistic locking and, if necessary, two-phase commit.
+//      Locking read-write transactions may abort, requiring the
+//      application to retry.
+//
+//   2. Snapshot read-only. This transaction type provides guaranteed
+//      consistency across several reads, but does not allow
+//      writes. Snapshot read-only transactions can be configured to
+//      read at timestamps in the past. Snapshot read-only
+//      transactions do not need to be committed.
+//
+// For transactions that only read, snapshot read-only
+// transactions
+// provide simpler semantics and are almost always faster.
+// In
+// particular, read-only transactions do not take locks, so they do
+// not conflict with read-write transactions. As a consequence of
+// not
+// taking locks, they also do not abort, so retry loops are not
+// needed.
+//
+// Transactions may only read/write data in a single database. They
+// may, however, read/write data in different tables within
+// that
+// database.
+//
+// ## Locking Read-Write Transactions
+//
+// Locking transactions may be used to atomically read-modify-write
+// data anywhere in a database. This type of transaction is
+// externally
+// consistent.
+//
+// Clients should attempt to minimize the amount of time a
+// transaction
+// is active. Faster transactions commit with higher probability
+// and cause less contention. Cloud Spanner attempts to keep read
+// locks
+// active as long as the transaction continues to do reads, and
+// the
+// transaction has not been terminated by
+// Commit or
+// Rollback.  Long periods of
+// inactivity at the client may cause Cloud Spanner to release
+// a
+// transaction's locks and abort it.
+//
+// Reads performed within a transaction acquire locks on the data
+// being read. Writes can only be done at commit time, after all
+// reads
+// have been completed.
+// Conceptually, a read-write transaction consists of zero or more
+// reads or SQL queries followed by
+// Commit. At any time before
+// Commit, the client can send a
+// Rollback request to abort the
+// transaction.
+//
+// ### Semantics
+//
+// Cloud Spanner can commit the transaction if all read locks it
+// acquired
+// are still valid at commit time, and it is able to acquire write
+// locks for all writes. Cloud Spanner can abort the transaction for
+// any
+// reason. If a commit attempt returns `ABORTED`, Cloud Spanner
+// guarantees
+// that the transaction has not modified any user data in Cloud
+// Spanner.
+//
+// Unless the transaction commits, Cloud Spanner makes no guarantees
+// about
+// how long the transaction's locks were held for. It is an error to
+// use Cloud Spanner locks for any sort of mutual exclusion other
+// than
+// between Cloud Spanner transactions themselves.
+//
+// ### Retrying Aborted Transactions
+//
+// When a transaction aborts, the application can choose to retry
+// the
+// whole transaction again. To maximize the chances of
+// successfully
+// committing the retry, the client should execute the retry in the
+// same session as the original attempt. The original session's
+// lock
+// priority increases with each consecutive abort, meaning that
+// each
+// attempt has a slightly better chance of success than the
+// previous.
+//
+// Under some circumstances (e.g., many transactions attempting
+// to
+// modify the same row(s)), a transaction can abort many times in
+// a
+// short period before successfully committing. Thus, it is not a
+// good
+// idea to cap the number of retries a transaction can attempt;
+// instead, it is better to limit the total amount of wall time
+// spent
+// retrying.
+//
+// ### Idle Transactions
+//
+// A transaction is considered idle if it has no outstanding reads
+// or
+// SQL queries and has not started a read or SQL query within the last
+// 10
+// seconds. Idle transactions can be aborted by Cloud Spanner so that
+// they
+// don't hold on to locks indefinitely. In that case, the commit
+// will
+// fail with error `ABORTED`.
+//
+// If this behavior is undesirable, periodically executing a simple
+// SQL query in the transaction (e.g., `SELECT 1`) prevents
+// the
+// transaction from becoming idle.
+//
+// ## Snapshot Read-Only Transactions
+//
+// Snapshot read-only transactions provides a simpler method
+// than
+// locking read-write transactions for doing several consistent
+// reads. However, this type of transaction does not support
+// writes.
+//
+// Snapshot transactions do not take locks. Instead, they work
+// by
+// choosing a Cloud Spanner timestamp, then executing all reads at
+// that
+// timestamp. Since they do not acquire locks, they do not
+// block
+// concurrent read-write transactions.
+//
+// Unlike locking read-write transactions, snapshot
+// read-only
+// transactions never abort. They can fail if the chosen read
+// timestamp is garbage collected; however, the default
+// garbage
+// collection policy is generous enough that most applications do
+// not
+// need to worry about this in practice.
+//
+// Snapshot read-only transactions do not need to call
+// Commit or
+// Rollback (and in fact are not
+// permitted to do so).
+//
+// To execute a snapshot transaction, the client specifies a
+// timestamp
+// bound, which tells Cloud Spanner how to choose a read timestamp.
+//
+// The types of timestamp bound are:
+//
+//   - Strong (the default).
+//   - Bounded staleness.
+//   - Exact staleness.
+//
+// If the Cloud Spanner database to be read is geographically
+// distributed,
+// stale read-only transactions can execute more quickly than strong
+// or read-write transaction, because they are able to execute far
+// from the leader replica.
+//
+// Each type of timestamp bound is discussed in detail below.
+//
+// ### Strong
+//
+// Strong reads are guaranteed to see the effects of all
+// transactions
+// that have committed before the start of the read. Furthermore,
+// all
+// rows yielded by a single read are consistent with each other --
+// if
+// any part of the read observes a transaction, all parts of the
+// read
+// see the transaction.
+//
+// Strong reads are not repeatable: two consecutive strong
+// read-only
+// transactions might return inconsistent results if there
+// are
+// concurrent writes. If consistency across reads is required, the
+// reads should be executed within a transaction or at an exact
+// read
+// timestamp.
+//
+// See TransactionOptions.ReadOnly.strong.
+//
+// ### Exact Staleness
+//
+// These timestamp bounds execute reads at a user-specified
+// timestamp. Reads at a timestamp are guaranteed to see a
+// consistent
+// prefix of the global transaction history: they observe
+// modifications done by all transactions with a commit timestamp <=
+// the read timestamp, and observe none of the modifications done
+// by
+// transactions with a larger commit timestamp. They will block
+// until
+// all conflicting transactions that may be assigned commit
+// timestamps
+// <= the read timestamp have finished.
+//
+// The timestamp can either be expressed as an absolute Cloud Spanner
+// commit
+// timestamp or a staleness relative to the current time.
+//
+// These modes do not require a "negotiation phase" to pick a
+// timestamp. As a result, they execute slightly faster than
+// the
+// equivalent boundedly stale concurrency modes. On the other
+// hand,
+// boundedly stale reads usually return fresher results.
+//
+// See TransactionOptions.ReadOnly.read_timestamp
+// and
+// TransactionOptions.ReadOnly.exact_staleness.
+//
+// ### Bounded Staleness
+//
+// Bounded staleness modes allow Cloud Spanner to pick the read
+// timestamp,
+// subject to a user-provided staleness bound. Cloud Spanner chooses
+// the
+// newest timestamp within the staleness bound that allows execution
+// of the reads at the closest available replica without blocking.
+//
+// All rows yielded are consistent with each other -- if any part of
+// the read observes a transaction, all parts of the read see
+// the
+// transaction. Boundedly stale reads are not repeatable: two
+// stale
+// reads, even if they use the same staleness bound, can execute
+// at
+// different timestamps and thus return inconsistent results.
+//
+// Boundedly stale reads execute in two phases: the first
+// phase
+// negotiates a timestamp among all replicas needed to serve the
+// read. In the second phase, reads are executed at the
+// negotiated
+// timestamp.
+//
+// As a result of the two phase execution, bounded staleness reads
+// are
+// usually a little slower than comparable exact staleness
+// reads. However, they are typically able to return fresher
+// results, and are more likely to execute at the closest
+// replica.
+//
+// Because the timestamp negotiation requires up-front knowledge
+// of
+// which rows will be read, it can only be used with
+// single-use
+// read-only transactions.
+//
+// See TransactionOptions.ReadOnly.max_staleness
+// and
+// TransactionOptions.ReadOnly.min_read_timestamp.
+//
+// ### Old Read Timestamps and Garbage Collection
+//
+// Cloud Spanner continuously garbage collects deleted and overwritten
+// data
+// in the background to reclaim storage space. This process is known
+// as "version GC". By default, version GC reclaims versions after
+// they
+// are one hour old. Because of this, Cloud Spanner cannot perform
+// reads
+// at read timestamps more than one hour in the past. This
+// restriction also applies to in-progress reads and/or SQL queries
+// whose
+// timestamp become too old while executing. Reads and SQL queries
+// with
+// too-old read timestamps fail with the error `FAILED_PRECONDITION`.
+type TransactionOptions struct {
+	// ReadOnly: Transaction will not write.
+	//
+	// Authorization to begin a read-only transaction
+	// requires
+	// `spanner.databases.beginReadOnlyTransaction` permission
+	// on the `session` resource.
+	ReadOnly *ReadOnly `json:"readOnly,omitempty"`
+
+	// ReadWrite: Transaction may write.
+	//
+	// Authorization to begin a read-write transaction
+	// requires
+	// `spanner.databases.beginOrRollbackReadWriteTransaction` permission
+	// on the `session` resource.
+	ReadWrite *ReadWrite `json:"readWrite,omitempty"`
+
+	// ForceSendFields is a list of field names (e.g. "ReadOnly") to
+	// unconditionally include in API requests. By default, fields with
+	// empty values are omitted from API requests. However, any non-pointer,
+	// non-interface field appearing in ForceSendFields will be sent to the
+	// server regardless of whether the field is empty or not. This may be
+	// used to include empty fields in Patch requests.
+	ForceSendFields []string `json:"-"`
+
+	// NullFields is a list of field names (e.g. "ReadOnly") to include in
+	// API requests with the JSON null value. By default, fields with empty
+	// values are omitted from API requests. However, any field with an
+	// empty value appearing in NullFields will be sent to the server as
+	// null. It is an error if a field in this list has a non-empty value.
+	// This may be used to include null fields in Patch requests.
+	NullFields []string `json:"-"`
+}
+
+func (s *TransactionOptions) MarshalJSON() ([]byte, error) {
+	type noMethod TransactionOptions
+	raw := noMethod(*s)
+	return gensupport.MarshalJSON(raw, s.ForceSendFields, s.NullFields)
+}
+
+// TransactionSelector: This message is used to select the transaction
+// in which a
+// Read or
+// ExecuteSql call runs.
+//
+// See TransactionOptions for more information about transactions.
+type TransactionSelector struct {
+	// Begin: Begin a new transaction and execute this read or SQL query
+	// in
+	// it. The transaction ID of the new transaction is returned
+	// in
+	// ResultSetMetadata.transaction, which is a Transaction.
+	Begin *TransactionOptions `json:"begin,omitempty"`
+
+	// Id: Execute the read or SQL query in a previously-started
+	// transaction.
+	Id string `json:"id,omitempty"`
+
+	// SingleUse: Execute the read or SQL query in a temporary
+	// transaction.
+	// This is the most efficient way to execute a transaction that
+	// consists of a single SQL query.
+	SingleUse *TransactionOptions `json:"singleUse,omitempty"`
+
+	// ForceSendFields is a list of field names (e.g. "Begin") to
+	// unconditionally include in API requests. By default, fields with
+	// empty values are omitted from API requests. However, any non-pointer,
+	// non-interface field appearing in ForceSendFields will be sent to the
+	// server regardless of whether the field is empty or not. This may be
+	// used to include empty fields in Patch requests.
+	ForceSendFields []string `json:"-"`
+
+	// NullFields is a list of field names (e.g. "Begin") to include in API
+	// requests with the JSON null value. By default, fields with empty
+	// values are omitted from API requests. However, any field with an
+	// empty value appearing in NullFields will be sent to the server as
+	// null. It is an error if a field in this list has a non-empty value.
+	// This may be used to include null fields in Patch requests.
+	NullFields []string `json:"-"`
+}
+
+func (s *TransactionSelector) MarshalJSON() ([]byte, error) {
+	type noMethod TransactionSelector
+	raw := noMethod(*s)
+	return gensupport.MarshalJSON(raw, s.ForceSendFields, s.NullFields)
+}
+
+// Type: `Type` indicates the type of a Cloud Spanner value, as might be
+// stored in a
+// table cell or returned from an SQL query.
+type Type struct {
+	// ArrayElementType: If code == ARRAY, then `array_element_type`
+	// is the type of the array elements.
+	ArrayElementType *Type `json:"arrayElementType,omitempty"`
+
+	// Code: Required. The TypeCode for this type.
+	//
+	// Possible values:
+	//   "TYPE_CODE_UNSPECIFIED" - Not specified.
+	//   "BOOL" - Encoded as JSON `true` or `false`.
+	//   "INT64" - Encoded as `string`, in decimal format.
+	//   "FLOAT64" - Encoded as `number`, or the strings "NaN",
+	// "Infinity", or
+	// "-Infinity".
+	//   "TIMESTAMP" - Encoded as `string` in RFC 3339 timestamp format. The
+	// time zone
+	// must be present, and must be "Z".
+	//   "DATE" - Encoded as `string` in RFC 3339 date format.
+	//   "STRING" - Encoded as `string`.
+	//   "BYTES" - Encoded as a base64-encoded `string`, as described in RFC
+	// 4648,
+	// section 4.
+	//   "ARRAY" - Encoded as `list`, where the list elements are
+	// represented
+	// according to array_element_type.
+	//   "STRUCT" - Encoded as `list`, where list element `i` is represented
+	// according
+	// to [struct_type.fields[i]][google.spanner.v1.StructType.fields].
+	Code string `json:"code,omitempty"`
+
+	// StructType: If code == STRUCT, then `struct_type`
+	// provides type information for the struct's fields.
+	StructType *StructType `json:"structType,omitempty"`
+
+	// ForceSendFields is a list of field names (e.g. "ArrayElementType") to
+	// unconditionally include in API requests. By default, fields with
+	// empty values are omitted from API requests. However, any non-pointer,
+	// non-interface field appearing in ForceSendFields will be sent to the
+	// server regardless of whether the field is empty or not. This may be
+	// used to include empty fields in Patch requests.
+	ForceSendFields []string `json:"-"`
+
+	// NullFields is a list of field names (e.g. "ArrayElementType") to
+	// include in API requests with the JSON null value. By default, fields
+	// with empty values are omitted from API requests. However, any field
+	// with an empty value appearing in NullFields will be sent to the
+	// server as null. It is an error if a field in this list has a
+	// non-empty value. This may be used to include null fields in Patch
+	// requests.
+	NullFields []string `json:"-"`
+}
+
+func (s *Type) MarshalJSON() ([]byte, error) {
+	type noMethod Type
+	raw := noMethod(*s)
+	return gensupport.MarshalJSON(raw, s.ForceSendFields, s.NullFields)
+}
+
+// UpdateDatabaseDdlMetadata: Metadata type for the operation returned
+// by
+// UpdateDatabaseDdl.
+type UpdateDatabaseDdlMetadata struct {
+	// CommitTimestamps: Reports the commit timestamps of all statements
+	// that have
+	// succeeded so far, where `commit_timestamps[i]` is the
+	// commit
+	// timestamp for the statement `statements[i]`.
+	CommitTimestamps []string `json:"commitTimestamps,omitempty"`
+
+	// Database: The database being modified.
+	Database string `json:"database,omitempty"`
+
+	// Statements: For an update this list contains all the statements. For
+	// an
+	// individual statement, this list contains only that statement.
+	Statements []string `json:"statements,omitempty"`
+
+	// ForceSendFields is a list of field names (e.g. "CommitTimestamps") to
+	// unconditionally include in API requests. By default, fields with
+	// empty values are omitted from API requests. However, any non-pointer,
+	// non-interface field appearing in ForceSendFields will be sent to the
+	// server regardless of whether the field is empty or not. This may be
+	// used to include empty fields in Patch requests.
+	ForceSendFields []string `json:"-"`
+
+	// NullFields is a list of field names (e.g. "CommitTimestamps") to
+	// include in API requests with the JSON null value. By default, fields
+	// with empty values are omitted from API requests. However, any field
+	// with an empty value appearing in NullFields will be sent to the
+	// server as null. It is an error if a field in this list has a
+	// non-empty value. This may be used to include null fields in Patch
+	// requests.
+	NullFields []string `json:"-"`
+}
+
+func (s *UpdateDatabaseDdlMetadata) MarshalJSON() ([]byte, error) {
+	type noMethod UpdateDatabaseDdlMetadata
+	raw := noMethod(*s)
+	return gensupport.MarshalJSON(raw, s.ForceSendFields, s.NullFields)
+}
+
+// UpdateDatabaseDdlRequest: Enqueues the given DDL statements to be
+// applied, in order but not
+// necessarily all at once, to the database schema at some point
+// (or
+// points) in the future. The server checks that the statements
+// are executable (syntactically valid, name tables that exist,
+// etc.)
+// before enqueueing them, but they may still fail upon
+// later execution (e.g., if a statement from another batch
+// of
+// statements is applied first and it conflicts in some way, or if
+// there is some data-related problem like a `NULL` value in a column
+// to
+// which `NOT NULL` would be added). If a statement fails,
+// all
+// subsequent statements in the batch are automatically cancelled.
+//
+// Each batch of statements is assigned a name which can be used
+// with
+// the Operations API to monitor
+// progress. See the
+// operation_id field for more
+// details.
+type UpdateDatabaseDdlRequest struct {
+	// OperationId: If empty, the new update request is assigned
+	// an
+	// automatically-generated operation ID. Otherwise, `operation_id`
+	// is used to construct the name of the resulting
+	// Operation.
+	//
+	// Specifying an explicit operation ID simplifies determining
+	// whether the statements were executed in the event that
+	// the
+	// UpdateDatabaseDdl call is replayed,
+	// or the return value is otherwise lost: the database
+	// and
+	// `operation_id` fields can be combined to form the
+	// name of the resulting
+	// longrunning.Operation:
+	// `<database>/operations/<operation_id>`.
+	//
+	// `operation_id` should be unique within the database, and must be
+	// a valid identifier: `a-z*`. Note that
+	// automatically-generated operation IDs always begin with
+	// an
+	// underscore. If the named operation already exists,
+	// UpdateDatabaseDdl returns
+	// `ALREADY_EXISTS`.
+	OperationId string `json:"operationId,omitempty"`
+
+	// Statements: DDL statements to be applied to the database.
+	Statements []string `json:"statements,omitempty"`
+
+	// ForceSendFields is a list of field names (e.g. "OperationId") to
+	// unconditionally include in API requests. By default, fields with
+	// empty values are omitted from API requests. However, any non-pointer,
+	// non-interface field appearing in ForceSendFields will be sent to the
+	// server regardless of whether the field is empty or not. This may be
+	// used to include empty fields in Patch requests.
+	ForceSendFields []string `json:"-"`
+
+	// NullFields is a list of field names (e.g. "OperationId") to include
+	// in API requests with the JSON null value. By default, fields with
+	// empty values are omitted from API requests. However, any field with
+	// an empty value appearing in NullFields will be sent to the server as
+	// null. It is an error if a field in this list has a non-empty value.
+	// This may be used to include null fields in Patch requests.
+	NullFields []string `json:"-"`
+}
+
+func (s *UpdateDatabaseDdlRequest) MarshalJSON() ([]byte, error) {
+	type noMethod UpdateDatabaseDdlRequest
+	raw := noMethod(*s)
+	return gensupport.MarshalJSON(raw, s.ForceSendFields, s.NullFields)
+}
+
+// UpdateInstanceMetadata: Metadata type for the operation returned
+// by
+// UpdateInstance.
+type UpdateInstanceMetadata struct {
+	// CancelTime: The time at which this operation was cancelled. If set,
+	// this operation is
+	// in the process of undoing itself (which is guaranteed to succeed)
+	// and
+	// cannot be cancelled again.
+	CancelTime string `json:"cancelTime,omitempty"`
+
+	// EndTime: The time at which this operation failed or was completed
+	// successfully.
+	EndTime string `json:"endTime,omitempty"`
+
+	// Instance: The desired end state of the update.
+	Instance *Instance `json:"instance,omitempty"`
+
+	// StartTime: The time at which UpdateInstance
+	// request was received.
+	StartTime string `json:"startTime,omitempty"`
+
+	// ForceSendFields is a list of field names (e.g. "CancelTime") to
+	// unconditionally include in API requests. By default, fields with
+	// empty values are omitted from API requests. However, any non-pointer,
+	// non-interface field appearing in ForceSendFields will be sent to the
+	// server regardless of whether the field is empty or not. This may be
+	// used to include empty fields in Patch requests.
+	ForceSendFields []string `json:"-"`
+
+	// NullFields is a list of field names (e.g. "CancelTime") to include in
+	// API requests with the JSON null value. By default, fields with empty
+	// values are omitted from API requests. However, any field with an
+	// empty value appearing in NullFields will be sent to the server as
+	// null. It is an error if a field in this list has a non-empty value.
+	// This may be used to include null fields in Patch requests.
+	NullFields []string `json:"-"`
+}
+
+func (s *UpdateInstanceMetadata) MarshalJSON() ([]byte, error) {
+	type noMethod UpdateInstanceMetadata
+	raw := noMethod(*s)
+	return gensupport.MarshalJSON(raw, s.ForceSendFields, s.NullFields)
+}
+
+// UpdateInstanceRequest: The request for UpdateInstance.
+type UpdateInstanceRequest struct {
+	// FieldMask: Required. A mask specifying which fields in
+	// [][google.spanner.admin.instance.v1.UpdateInstanceRequest.instance]
+	// should be updated.
+	// The field mask must always be specified; this prevents any future
+	// fields in
+	// [][google.spanner.admin.instance.v1.Instance] from being erased
+	// accidentally by clients that do not know
+	// about them.
+	FieldMask string `json:"fieldMask,omitempty"`
+
+	// Instance: Required. The instance to update, which must always include
+	// the instance
+	// name.  Otherwise, only fields mentioned in
+	// [][google.spanner.admin.instance.v1.UpdateInstanceRequest.field_mask]
+	// need be included.
+	Instance *Instance `json:"instance,omitempty"`
+
+	// ForceSendFields is a list of field names (e.g. "FieldMask") to
+	// unconditionally include in API requests. By default, fields with
+	// empty values are omitted from API requests. However, any non-pointer,
+	// non-interface field appearing in ForceSendFields will be sent to the
+	// server regardless of whether the field is empty or not. This may be
+	// used to include empty fields in Patch requests.
+	ForceSendFields []string `json:"-"`
+
+	// NullFields is a list of field names (e.g. "FieldMask") to include in
+	// API requests with the JSON null value. By default, fields with empty
+	// values are omitted from API requests. However, any field with an
+	// empty value appearing in NullFields will be sent to the server as
+	// null. It is an error if a field in this list has a non-empty value.
+	// This may be used to include null fields in Patch requests.
+	NullFields []string `json:"-"`
+}
+
+func (s *UpdateInstanceRequest) MarshalJSON() ([]byte, error) {
+	type noMethod UpdateInstanceRequest
+	raw := noMethod(*s)
+	return gensupport.MarshalJSON(raw, s.ForceSendFields, s.NullFields)
+}
+
+// Write: Arguments to insert, update, insert_or_update, and
+// replace operations.
+type Write struct {
+	// Columns: The names of the columns in table to be written.
+	//
+	// The list of columns must contain enough columns to allow
+	// Cloud Spanner to derive values for all primary key columns in
+	// the
+	// row(s) to be modified.
+	Columns []string `json:"columns,omitempty"`
+
+	// Table: Required. The table whose rows will be written.
+	Table string `json:"table,omitempty"`
+
+	// Values: The values to be written. `values` can contain more than
+	// one
+	// list of values. If it does, then multiple rows are written, one
+	// for each entry in `values`. Each list in `values` must have
+	// exactly as many entries as there are entries in columns
+	// above. Sending multiple lists is equivalent to sending
+	// multiple
+	// `Mutation`s, each containing one `values` entry and repeating
+	// table and columns. Individual values in each list are
+	// encoded as described here.
+	Values [][]interface{} `json:"values,omitempty"`
+
+	// ForceSendFields is a list of field names (e.g. "Columns") to
+	// unconditionally include in API requests. By default, fields with
+	// empty values are omitted from API requests. However, any non-pointer,
+	// non-interface field appearing in ForceSendFields will be sent to the
+	// server regardless of whether the field is empty or not. This may be
+	// used to include empty fields in Patch requests.
+	ForceSendFields []string `json:"-"`
+
+	// NullFields is a list of field names (e.g. "Columns") to include in
+	// API requests with the JSON null value. By default, fields with empty
+	// values are omitted from API requests. However, any field with an
+	// empty value appearing in NullFields will be sent to the server as
+	// null. It is an error if a field in this list has a non-empty value.
+	// This may be used to include null fields in Patch requests.
+	NullFields []string `json:"-"`
+}
+
+func (s *Write) MarshalJSON() ([]byte, error) {
+	type noMethod Write
+	raw := noMethod(*s)
+	return gensupport.MarshalJSON(raw, s.ForceSendFields, s.NullFields)
+}
+
+// method id "spanner.projects.instanceConfigs.get":
+
+type ProjectsInstanceConfigsGetCall struct {
+	s            *Service
+	name         string
+	urlParams_   gensupport.URLParams
+	ifNoneMatch_ string
+	ctx_         context.Context
+	header_      http.Header
+}
+
+// Get: Gets information about a particular instance configuration.
+func (r *ProjectsInstanceConfigsService) Get(name string) *ProjectsInstanceConfigsGetCall {
+	c := &ProjectsInstanceConfigsGetCall{s: r.s, urlParams_: make(gensupport.URLParams)}
+	c.name = name
+	return c
+}
+
+// Fields allows partial responses to be retrieved. See
+// https://developers.google.com/gdata/docs/2.0/basics#PartialResponse
+// for more information.
+func (c *ProjectsInstanceConfigsGetCall) Fields(s ...googleapi.Field) *ProjectsInstanceConfigsGetCall {
+	c.urlParams_.Set("fields", googleapi.CombineFields(s))
+	return c
+}
+
+// IfNoneMatch sets the optional parameter which makes the operation
+// fail if the object's ETag matches the given value. This is useful for
+// getting updates only after the object has changed since the last
+// request. Use googleapi.IsNotModified to check whether the response
+// error from Do is the result of In-None-Match.
+func (c *ProjectsInstanceConfigsGetCall) IfNoneMatch(entityTag string) *ProjectsInstanceConfigsGetCall {
+	c.ifNoneMatch_ = entityTag
+	return c
+}
+
+// Context sets the context to be used in this call's Do method. Any
+// pending HTTP request will be aborted if the provided context is
+// canceled.
+func (c *ProjectsInstanceConfigsGetCall) Context(ctx context.Context) *ProjectsInstanceConfigsGetCall {
+	c.ctx_ = ctx
+	return c
+}
+
+// Header returns an http.Header that can be modified by the caller to
+// add HTTP headers to the request.
+func (c *ProjectsInstanceConfigsGetCall) Header() http.Header {
+	if c.header_ == nil {
+		c.header_ = make(http.Header)
+	}
+	return c.header_
+}
+
+func (c *ProjectsInstanceConfigsGetCall) doRequest(alt string) (*http.Response, error) {
+	reqHeaders := make(http.Header)
+	for k, v := range c.header_ {
+		reqHeaders[k] = v
+	}
+	reqHeaders.Set("User-Agent", c.s.userAgent())
+	if c.ifNoneMatch_ != "" {
+		reqHeaders.Set("If-None-Match", c.ifNoneMatch_)
+	}
+	var body io.Reader = nil
+	c.urlParams_.Set("alt", alt)
+	urls := googleapi.ResolveRelative(c.s.BasePath, "v1/{+name}")
+	urls += "?" + c.urlParams_.Encode()
+	req, _ := http.NewRequest("GET", urls, body)
+	req.Header = reqHeaders
+	googleapi.Expand(req.URL, map[string]string{
+		"name": c.name,
+	})
+	return gensupport.SendRequest(c.ctx_, c.s.client, req)
+}
+
+// Do executes the "spanner.projects.instanceConfigs.get" call.
+// Exactly one of *InstanceConfig or error will be non-nil. Any non-2xx
+// status code is an error. Response headers are in either
+// *InstanceConfig.ServerResponse.Header or (if a response was returned
+// at all) in error.(*googleapi.Error).Header. Use
+// googleapi.IsNotModified to check whether the returned error was
+// because http.StatusNotModified was returned.
+func (c *ProjectsInstanceConfigsGetCall) Do(opts ...googleapi.CallOption) (*InstanceConfig, error) {
+	gensupport.SetOptions(c.urlParams_, opts...)
+	res, err := c.doRequest("json")
+	if res != nil && res.StatusCode == http.StatusNotModified {
+		if res.Body != nil {
+			res.Body.Close()
+		}
+		return nil, &googleapi.Error{
+			Code:   res.StatusCode,
+			Header: res.Header,
+		}
+	}
+	if err != nil {
+		return nil, err
+	}
+	defer googleapi.CloseBody(res)
+	if err := googleapi.CheckResponse(res); err != nil {
+		return nil, err
+	}
+	ret := &InstanceConfig{
+		ServerResponse: googleapi.ServerResponse{
+			Header:         res.Header,
+			HTTPStatusCode: res.StatusCode,
+		},
+	}
+	target := &ret
+	if err := json.NewDecoder(res.Body).Decode(target); err != nil {
+		return nil, err
+	}
+	return ret, nil
+	// {
+	//   "description": "Gets information about a particular instance configuration.",
+	//   "flatPath": "v1/projects/{projectsId}/instanceConfigs/{instanceConfigsId}",
+	//   "httpMethod": "GET",
+	//   "id": "spanner.projects.instanceConfigs.get",
+	//   "parameterOrder": [
+	//     "name"
+	//   ],
+	//   "parameters": {
+	//     "name": {
+	//       "description": "Required. The name of the requested instance configuration. Values are of\nthe form `projects/\u003cproject\u003e/instanceConfigs/\u003cconfig\u003e`.",
+	//       "location": "path",
+	//       "pattern": "^projects/[^/]+/instanceConfigs/[^/]+$",
+	//       "required": true,
+	//       "type": "string"
+	//     }
+	//   },
+	//   "path": "v1/{+name}",
+	//   "response": {
+	//     "$ref": "InstanceConfig"
+	//   },
+	//   "scopes": [
+	//     "https://www.googleapis.com/auth/cloud-platform"
+	//   ]
+	// }
+
+}
+
+// method id "spanner.projects.instanceConfigs.list":
+
+type ProjectsInstanceConfigsListCall struct {
+	s            *Service
+	parent       string
+	urlParams_   gensupport.URLParams
+	ifNoneMatch_ string
+	ctx_         context.Context
+	header_      http.Header
+}
+
+// List: Lists the supported instance configurations for a given
+// project.
+func (r *ProjectsInstanceConfigsService) List(parent string) *ProjectsInstanceConfigsListCall {
+	c := &ProjectsInstanceConfigsListCall{s: r.s, urlParams_: make(gensupport.URLParams)}
+	c.parent = parent
+	return c
+}
+
+// PageSize sets the optional parameter "pageSize": Number of instance
+// configurations to be returned in the response. If 0 or
+// less, defaults to the server's maximum allowed page size.
+func (c *ProjectsInstanceConfigsListCall) PageSize(pageSize int64) *ProjectsInstanceConfigsListCall {
+	c.urlParams_.Set("pageSize", fmt.Sprint(pageSize))
+	return c
+}
+
+// PageToken sets the optional parameter "pageToken": If non-empty,
+// `page_token` should contain a
+// next_page_token
+// from a previous ListInstanceConfigsResponse.
+func (c *ProjectsInstanceConfigsListCall) PageToken(pageToken string) *ProjectsInstanceConfigsListCall {
+	c.urlParams_.Set("pageToken", pageToken)
+	return c
+}
+
+// Fields allows partial responses to be retrieved. See
+// https://developers.google.com/gdata/docs/2.0/basics#PartialResponse
+// for more information.
+func (c *ProjectsInstanceConfigsListCall) Fields(s ...googleapi.Field) *ProjectsInstanceConfigsListCall {
+	c.urlParams_.Set("fields", googleapi.CombineFields(s))
+	return c
+}
+
+// IfNoneMatch sets the optional parameter which makes the operation
+// fail if the object's ETag matches the given value. This is useful for
+// getting updates only after the object has changed since the last
+// request. Use googleapi.IsNotModified to check whether the response
+// error from Do is the result of In-None-Match.
+func (c *ProjectsInstanceConfigsListCall) IfNoneMatch(entityTag string) *ProjectsInstanceConfigsListCall {
+	c.ifNoneMatch_ = entityTag
+	return c
+}
+
+// Context sets the context to be used in this call's Do method. Any
+// pending HTTP request will be aborted if the provided context is
+// canceled.
+func (c *ProjectsInstanceConfigsListCall) Context(ctx context.Context) *ProjectsInstanceConfigsListCall {
+	c.ctx_ = ctx
+	return c
+}
+
+// Header returns an http.Header that can be modified by the caller to
+// add HTTP headers to the request.
+func (c *ProjectsInstanceConfigsListCall) Header() http.Header {
+	if c.header_ == nil {
+		c.header_ = make(http.Header)
+	}
+	return c.header_
+}
+
+func (c *ProjectsInstanceConfigsListCall) doRequest(alt string) (*http.Response, error) {
+	reqHeaders := make(http.Header)
+	for k, v := range c.header_ {
+		reqHeaders[k] = v
+	}
+	reqHeaders.Set("User-Agent", c.s.userAgent())
+	if c.ifNoneMatch_ != "" {
+		reqHeaders.Set("If-None-Match", c.ifNoneMatch_)
+	}
+	var body io.Reader = nil
+	c.urlParams_.Set("alt", alt)
+	urls := googleapi.ResolveRelative(c.s.BasePath, "v1/{+parent}/instanceConfigs")
+	urls += "?" + c.urlParams_.Encode()
+	req, _ := http.NewRequest("GET", urls, body)
+	req.Header = reqHeaders
+	googleapi.Expand(req.URL, map[string]string{
+		"parent": c.parent,
+	})
+	return gensupport.SendRequest(c.ctx_, c.s.client, req)
+}
+
+// Do executes the "spanner.projects.instanceConfigs.list" call.
+// Exactly one of *ListInstanceConfigsResponse or error will be non-nil.
+// Any non-2xx status code is an error. Response headers are in either
+// *ListInstanceConfigsResponse.ServerResponse.Header or (if a response
+// was returned at all) in error.(*googleapi.Error).Header. Use
+// googleapi.IsNotModified to check whether the returned error was
+// because http.StatusNotModified was returned.
+func (c *ProjectsInstanceConfigsListCall) Do(opts ...googleapi.CallOption) (*ListInstanceConfigsResponse, error) {
+	gensupport.SetOptions(c.urlParams_, opts...)
+	res, err := c.doRequest("json")
+	if res != nil && res.StatusCode == http.StatusNotModified {
+		if res.Body != nil {
+			res.Body.Close()
+		}
+		return nil, &googleapi.Error{
+			Code:   res.StatusCode,
+			Header: res.Header,
+		}
+	}
+	if err != nil {
+		return nil, err
+	}
+	defer googleapi.CloseBody(res)
+	if err := googleapi.CheckResponse(res); err != nil {
+		return nil, err
+	}
+	ret := &ListInstanceConfigsResponse{
+		ServerResponse: googleapi.ServerResponse{
+			Header:         res.Header,
+			HTTPStatusCode: res.StatusCode,
+		},
+	}
+	target := &ret
+	if err := json.NewDecoder(res.Body).Decode(target); err != nil {
+		return nil, err
+	}
+	return ret, nil
+	// {
+	//   "description": "Lists the supported instance configurations for a given project.",
+	//   "flatPath": "v1/projects/{projectsId}/instanceConfigs",
+	//   "httpMethod": "GET",
+	//   "id": "spanner.projects.instanceConfigs.list",
+	//   "parameterOrder": [
+	//     "parent"
+	//   ],
+	//   "parameters": {
+	//     "pageSize": {
+	//       "description": "Number of instance configurations to be returned in the response. If 0 or\nless, defaults to the server's maximum allowed page size.",
+	//       "format": "int32",
+	//       "location": "query",
+	//       "type": "integer"
+	//     },
+	//     "pageToken": {
+	//       "description": "If non-empty, `page_token` should contain a\nnext_page_token\nfrom a previous ListInstanceConfigsResponse.",
+	//       "location": "query",
+	//       "type": "string"
+	//     },
+	//     "parent": {
+	//       "description": "Required. The name of the project for which a list of supported instance\nconfigurations is requested. Values are of the form\n`projects/\u003cproject\u003e`.",
+	//       "location": "path",
+	//       "pattern": "^projects/[^/]+$",
+	//       "required": true,
+	//       "type": "string"
+	//     }
+	//   },
+	//   "path": "v1/{+parent}/instanceConfigs",
+	//   "response": {
+	//     "$ref": "ListInstanceConfigsResponse"
+	//   },
+	//   "scopes": [
+	//     "https://www.googleapis.com/auth/cloud-platform"
+	//   ]
+	// }
+
+}
+
+// Pages invokes f for each page of results.
+// A non-nil error returned from f will halt the iteration.
+// The provided context supersedes any context provided to the Context method.
+func (c *ProjectsInstanceConfigsListCall) Pages(ctx context.Context, f func(*ListInstanceConfigsResponse) error) error {
+	c.ctx_ = ctx
+	defer c.PageToken(c.urlParams_.Get("pageToken")) // reset paging to original point
+	for {
+		x, err := c.Do()
+		if err != nil {
+			return err
+		}
+		if err := f(x); err != nil {
+			return err
+		}
+		if x.NextPageToken == "" {
+			return nil
+		}
+		c.PageToken(x.NextPageToken)
+	}
+}
+
+// method id "spanner.projects.instances.create":
+
+type ProjectsInstancesCreateCall struct {
+	s                     *Service
+	parent                string
+	createinstancerequest *CreateInstanceRequest
+	urlParams_            gensupport.URLParams
+	ctx_                  context.Context
+	header_               http.Header
+}
+
+// Create: Creates an instance and begins preparing it to begin serving.
+// The
+// returned long-running operation
+// can be used to track the progress of preparing the new
+// instance. The instance name is assigned by the caller. If the
+// named instance already exists, `CreateInstance`
+// returns
+// `ALREADY_EXISTS`.
+//
+// Immediately upon completion of this request:
+//
+//   * The instance is readable via the API, with all requested
+// attributes
+//     but no allocated resources. Its state is `CREATING`.
+//
+// Until completion of the returned operation:
+//
+//   * Cancelling the operation renders the instance immediately
+// unreadable
+//     via the API.
+//   * The instance can be deleted.
+//   * All other attempts to modify the instance are rejected.
+//
+// Upon completion of the returned operation:
+//
+//   * Billing for all successfully-allocated resources begins (some
+// types
+//     may have lower than the requested levels).
+//   * Databases can be created in the instance.
+//   * The instance's allocated resource levels are readable via the
+// API.
+//   * The instance's state becomes `READY`.
+//
+// The returned long-running operation will
+// have a name of the format `<instance_name>/operations/<operation_id>`
+// and
+// can be used to track creation of the instance.  The
+// metadata field type is
+// CreateInstanceMetadata.
+// The response field type is
+// Instance, if successful.
+func (r *ProjectsInstancesService) Create(parent string, createinstancerequest *CreateInstanceRequest) *ProjectsInstancesCreateCall {
+	c := &ProjectsInstancesCreateCall{s: r.s, urlParams_: make(gensupport.URLParams)}
+	c.parent = parent
+	c.createinstancerequest = createinstancerequest
+	return c
+}
+
+// Fields allows partial responses to be retrieved. See
+// https://developers.google.com/gdata/docs/2.0/basics#PartialResponse
+// for more information.
+func (c *ProjectsInstancesCreateCall) Fields(s ...googleapi.Field) *ProjectsInstancesCreateCall {
+	c.urlParams_.Set("fields", googleapi.CombineFields(s))
+	return c
+}
+
+// Context sets the context to be used in this call's Do method. Any
+// pending HTTP request will be aborted if the provided context is
+// canceled.
+func (c *ProjectsInstancesCreateCall) Context(ctx context.Context) *ProjectsInstancesCreateCall {
+	c.ctx_ = ctx
+	return c
+}
+
+// Header returns an http.Header that can be modified by the caller to
+// add HTTP headers to the request.
+func (c *ProjectsInstancesCreateCall) Header() http.Header {
+	if c.header_ == nil {
+		c.header_ = make(http.Header)
+	}
+	return c.header_
+}
+
+func (c *ProjectsInstancesCreateCall) doRequest(alt string) (*http.Response, error) {
+	reqHeaders := make(http.Header)
+	for k, v := range c.header_ {
+		reqHeaders[k] = v
+	}
+	reqHeaders.Set("User-Agent", c.s.userAgent())
+	var body io.Reader = nil
+	body, err := googleapi.WithoutDataWrapper.JSONReader(c.createinstancerequest)
+	if err != nil {
+		return nil, err
+	}
+	reqHeaders.Set("Content-Type", "application/json")
+	c.urlParams_.Set("alt", alt)
+	urls := googleapi.ResolveRelative(c.s.BasePath, "v1/{+parent}/instances")
+	urls += "?" + c.urlParams_.Encode()
+	req, _ := http.NewRequest("POST", urls, body)
+	req.Header = reqHeaders
+	googleapi.Expand(req.URL, map[string]string{
+		"parent": c.parent,
+	})
+	return gensupport.SendRequest(c.ctx_, c.s.client, req)
+}
+
+// Do executes the "spanner.projects.instances.create" call.
+// Exactly one of *Operation or error will be non-nil. Any non-2xx
+// status code is an error. Response headers are in either
+// *Operation.ServerResponse.Header or (if a response was returned at
+// all) in error.(*googleapi.Error).Header. Use googleapi.IsNotModified
+// to check whether the returned error was because
+// http.StatusNotModified was returned.
+func (c *ProjectsInstancesCreateCall) Do(opts ...googleapi.CallOption) (*Operation, error) {
+	gensupport.SetOptions(c.urlParams_, opts...)
+	res, err := c.doRequest("json")
+	if res != nil && res.StatusCode == http.StatusNotModified {
+		if res.Body != nil {
+			res.Body.Close()
+		}
+		return nil, &googleapi.Error{
+			Code:   res.StatusCode,
+			Header: res.Header,
+		}
+	}
+	if err != nil {
+		return nil, err
+	}
+	defer googleapi.CloseBody(res)
+	if err := googleapi.CheckResponse(res); err != nil {
+		return nil, err
+	}
+	ret := &Operation{
+		ServerResponse: googleapi.ServerResponse{
+			Header:         res.Header,
+			HTTPStatusCode: res.StatusCode,
+		},
+	}
+	target := &ret
+	if err := json.NewDecoder(res.Body).Decode(target); err != nil {
+		return nil, err
+	}
+	return ret, nil
+	// {
+	//   "description": "Creates an instance and begins preparing it to begin serving. The\nreturned long-running operation\ncan be used to track the progress of preparing the new\ninstance. The instance name is assigned by the caller. If the\nnamed instance already exists, `CreateInstance` returns\n`ALREADY_EXISTS`.\n\nImmediately upon completion of this request:\n\n  * The instance is readable via the API, with all requested attributes\n    but no allocated resources. Its state is `CREATING`.\n\nUntil completion of the returned operation:\n\n  * Cancelling the operation renders the instance immediately unreadable\n    via the API.\n  * The instance can be deleted.\n  * All other attempts to modify the instance are rejected.\n\nUpon completion of the returned operation:\n\n  * Billing for all successfully-allocated resources begins (some types\n    may have lower than the requested levels).\n  * Databases can be created in the instance.\n  * The instance's allocated resource levels are readable via the API.\n  * The instance's state becomes `READY`.\n\nThe returned long-running operation will\nhave a name of the format `\u003cinstance_name\u003e/operations/\u003coperation_id\u003e` and\ncan be used to track creation of the instance.  The\nmetadata field type is\nCreateInstanceMetadata.\nThe response field type is\nInstance, if successful.",
+	//   "flatPath": "v1/projects/{projectsId}/instances",
+	//   "httpMethod": "POST",
+	//   "id": "spanner.projects.instances.create",
+	//   "parameterOrder": [
+	//     "parent"
+	//   ],
+	//   "parameters": {
+	//     "parent": {
+	//       "description": "Required. The name of the project in which to create the instance. Values\nare of the form `projects/\u003cproject\u003e`.",
+	//       "location": "path",
+	//       "pattern": "^projects/[^/]+$",
+	//       "required": true,
+	//       "type": "string"
+	//     }
+	//   },
+	//   "path": "v1/{+parent}/instances",
+	//   "request": {
+	//     "$ref": "CreateInstanceRequest"
+	//   },
+	//   "response": {
+	//     "$ref": "Operation"
+	//   },
+	//   "scopes": [
+	//     "https://www.googleapis.com/auth/cloud-platform"
+	//   ]
+	// }
+
+}
+
+// method id "spanner.projects.instances.delete":
+
+type ProjectsInstancesDeleteCall struct {
+	s          *Service
+	name       string
+	urlParams_ gensupport.URLParams
+	ctx_       context.Context
+	header_    http.Header
+}
+
+// Delete: Deletes an instance.
+//
+// Immediately upon completion of the request:
+//
+//   * Billing ceases for all of the instance's reserved
+// resources.
+//
+// Soon afterward:
+//
+//   * The instance and *all of its databases* immediately and
+//     irrevocably disappear from the API. All data in the databases
+//     is permanently deleted.
+func (r *ProjectsInstancesService) Delete(name string) *ProjectsInstancesDeleteCall {
+	c := &ProjectsInstancesDeleteCall{s: r.s, urlParams_: make(gensupport.URLParams)}
+	c.name = name
+	return c
+}
+
+// Fields allows partial responses to be retrieved. See
+// https://developers.google.com/gdata/docs/2.0/basics#PartialResponse
+// for more information.
+func (c *ProjectsInstancesDeleteCall) Fields(s ...googleapi.Field) *ProjectsInstancesDeleteCall {
+	c.urlParams_.Set("fields", googleapi.CombineFields(s))
+	return c
+}
+
+// Context sets the context to be used in this call's Do method. Any
+// pending HTTP request will be aborted if the provided context is
+// canceled.
+func (c *ProjectsInstancesDeleteCall) Context(ctx context.Context) *ProjectsInstancesDeleteCall {
+	c.ctx_ = ctx
+	return c
+}
+
+// Header returns an http.Header that can be modified by the caller to
+// add HTTP headers to the request.
+func (c *ProjectsInstancesDeleteCall) Header() http.Header {
+	if c.header_ == nil {
+		c.header_ = make(http.Header)
+	}
+	return c.header_
+}
+
+func (c *ProjectsInstancesDeleteCall) doRequest(alt string) (*http.Response, error) {
+	reqHeaders := make(http.Header)
+	for k, v := range c.header_ {
+		reqHeaders[k] = v
+	}
+	reqHeaders.Set("User-Agent", c.s.userAgent())
+	var body io.Reader = nil
+	c.urlParams_.Set("alt", alt)
+	urls := googleapi.ResolveRelative(c.s.BasePath, "v1/{+name}")
+	urls += "?" + c.urlParams_.Encode()
+	req, _ := http.NewRequest("DELETE", urls, body)
+	req.Header = reqHeaders
+	googleapi.Expand(req.URL, map[string]string{
+		"name": c.name,
+	})
+	return gensupport.SendRequest(c.ctx_, c.s.client, req)
+}
+
+// Do executes the "spanner.projects.instances.delete" call.
+// Exactly one of *Empty or error will be non-nil. Any non-2xx status
+// code is an error. Response headers are in either
+// *Empty.ServerResponse.Header or (if a response was returned at all)
+// in error.(*googleapi.Error).Header. Use googleapi.IsNotModified to
+// check whether the returned error was because http.StatusNotModified
+// was returned.
+func (c *ProjectsInstancesDeleteCall) Do(opts ...googleapi.CallOption) (*Empty, error) {
+	gensupport.SetOptions(c.urlParams_, opts...)
+	res, err := c.doRequest("json")
+	if res != nil && res.StatusCode == http.StatusNotModified {
+		if res.Body != nil {
+			res.Body.Close()
+		}
+		return nil, &googleapi.Error{
+			Code:   res.StatusCode,
+			Header: res.Header,
+		}
+	}
+	if err != nil {
+		return nil, err
+	}
+	defer googleapi.CloseBody(res)
+	if err := googleapi.CheckResponse(res); err != nil {
+		return nil, err
+	}
+	ret := &Empty{
+		ServerResponse: googleapi.ServerResponse{
+			Header:         res.Header,
+			HTTPStatusCode: res.StatusCode,
+		},
+	}
+	target := &ret
+	if err := json.NewDecoder(res.Body).Decode(target); err != nil {
+		return nil, err
+	}
+	return ret, nil
+	// {
+	//   "description": "Deletes an instance.\n\nImmediately upon completion of the request:\n\n  * Billing ceases for all of the instance's reserved resources.\n\nSoon afterward:\n\n  * The instance and *all of its databases* immediately and\n    irrevocably disappear from the API. All data in the databases\n    is permanently deleted.",
+	//   "flatPath": "v1/projects/{projectsId}/instances/{instancesId}",
+	//   "httpMethod": "DELETE",
+	//   "id": "spanner.projects.instances.delete",
+	//   "parameterOrder": [
+	//     "name"
+	//   ],
+	//   "parameters": {
+	//     "name": {
+	//       "description": "Required. The name of the instance to be deleted. Values are of the form\n`projects/\u003cproject\u003e/instances/\u003cinstance\u003e`",
+	//       "location": "path",
+	//       "pattern": "^projects/[^/]+/instances/[^/]+$",
+	//       "required": true,
+	//       "type": "string"
+	//     }
+	//   },
+	//   "path": "v1/{+name}",
+	//   "response": {
+	//     "$ref": "Empty"
+	//   },
+	//   "scopes": [
+	//     "https://www.googleapis.com/auth/cloud-platform"
+	//   ]
+	// }
+
+}
+
+// method id "spanner.projects.instances.get":
+
+type ProjectsInstancesGetCall struct {
+	s            *Service
+	name         string
+	urlParams_   gensupport.URLParams
+	ifNoneMatch_ string
+	ctx_         context.Context
+	header_      http.Header
+}
+
+// Get: Gets information about a particular instance.
+func (r *ProjectsInstancesService) Get(name string) *ProjectsInstancesGetCall {
+	c := &ProjectsInstancesGetCall{s: r.s, urlParams_: make(gensupport.URLParams)}
+	c.name = name
+	return c
+}
+
+// Fields allows partial responses to be retrieved. See
+// https://developers.google.com/gdata/docs/2.0/basics#PartialResponse
+// for more information.
+func (c *ProjectsInstancesGetCall) Fields(s ...googleapi.Field) *ProjectsInstancesGetCall {
+	c.urlParams_.Set("fields", googleapi.CombineFields(s))
+	return c
+}
+
+// IfNoneMatch sets the optional parameter which makes the operation
+// fail if the object's ETag matches the given value. This is useful for
+// getting updates only after the object has changed since the last
+// request. Use googleapi.IsNotModified to check whether the response
+// error from Do is the result of In-None-Match.
+func (c *ProjectsInstancesGetCall) IfNoneMatch(entityTag string) *ProjectsInstancesGetCall {
+	c.ifNoneMatch_ = entityTag
+	return c
+}
+
+// Context sets the context to be used in this call's Do method. Any
+// pending HTTP request will be aborted if the provided context is
+// canceled.
+func (c *ProjectsInstancesGetCall) Context(ctx context.Context) *ProjectsInstancesGetCall {
+	c.ctx_ = ctx
+	return c
+}
+
+// Header returns an http.Header that can be modified by the caller to
+// add HTTP headers to the request.
+func (c *ProjectsInstancesGetCall) Header() http.Header {
+	if c.header_ == nil {
+		c.header_ = make(http.Header)
+	}
+	return c.header_
+}
+
+func (c *ProjectsInstancesGetCall) doRequest(alt string) (*http.Response, error) {
+	reqHeaders := make(http.Header)
+	for k, v := range c.header_ {
+		reqHeaders[k] = v
+	}
+	reqHeaders.Set("User-Agent", c.s.userAgent())
+	if c.ifNoneMatch_ != "" {
+		reqHeaders.Set("If-None-Match", c.ifNoneMatch_)
+	}
+	var body io.Reader = nil
+	c.urlParams_.Set("alt", alt)
+	urls := googleapi.ResolveRelative(c.s.BasePath, "v1/{+name}")
+	urls += "?" + c.urlParams_.Encode()
+	req, _ := http.NewRequest("GET", urls, body)
+	req.Header = reqHeaders
+	googleapi.Expand(req.URL, map[string]string{
+		"name": c.name,
+	})
+	return gensupport.SendRequest(c.ctx_, c.s.client, req)
+}
+
+// Do executes the "spanner.projects.instances.get" call.
+// Exactly one of *Instance or error will be non-nil. Any non-2xx status
+// code is an error. Response headers are in either
+// *Instance.ServerResponse.Header or (if a response was returned at
+// all) in error.(*googleapi.Error).Header. Use googleapi.IsNotModified
+// to check whether the returned error was because
+// http.StatusNotModified was returned.
+func (c *ProjectsInstancesGetCall) Do(opts ...googleapi.CallOption) (*Instance, error) {
+	gensupport.SetOptions(c.urlParams_, opts...)
+	res, err := c.doRequest("json")
+	if res != nil && res.StatusCode == http.StatusNotModified {
+		if res.Body != nil {
+			res.Body.Close()
+		}
+		return nil, &googleapi.Error{
+			Code:   res.StatusCode,
+			Header: res.Header,
+		}
+	}
+	if err != nil {
+		return nil, err
+	}
+	defer googleapi.CloseBody(res)
+	if err := googleapi.CheckResponse(res); err != nil {
+		return nil, err
+	}
+	ret := &Instance{
+		ServerResponse: googleapi.ServerResponse{
+			Header:         res.Header,
+			HTTPStatusCode: res.StatusCode,
+		},
+	}
+	target := &ret
+	if err := json.NewDecoder(res.Body).Decode(target); err != nil {
+		return nil, err
+	}
+	return ret, nil
+	// {
+	//   "description": "Gets information about a particular instance.",
+	//   "flatPath": "v1/projects/{projectsId}/instances/{instancesId}",
+	//   "httpMethod": "GET",
+	//   "id": "spanner.projects.instances.get",
+	//   "parameterOrder": [
+	//     "name"
+	//   ],
+	//   "parameters": {
+	//     "name": {
+	//       "description": "Required. The name of the requested instance. Values are of the form\n`projects/\u003cproject\u003e/instances/\u003cinstance\u003e`.",
+	//       "location": "path",
+	//       "pattern": "^projects/[^/]+/instances/[^/]+$",
+	//       "required": true,
+	//       "type": "string"
+	//     }
+	//   },
+	//   "path": "v1/{+name}",
+	//   "response": {
+	//     "$ref": "Instance"
+	//   },
+	//   "scopes": [
+	//     "https://www.googleapis.com/auth/cloud-platform"
+	//   ]
+	// }
+
+}
+
+// method id "spanner.projects.instances.getIamPolicy":
+
+type ProjectsInstancesGetIamPolicyCall struct {
+	s                   *Service
+	resource            string
+	getiampolicyrequest *GetIamPolicyRequest
+	urlParams_          gensupport.URLParams
+	ctx_                context.Context
+	header_             http.Header
+}
+
+// GetIamPolicy: Gets the access control policy for an instance
+// resource. Returns an empty
+// policy if an instance exists but does not have a policy
+// set.
+//
+// Authorization requires `spanner.instances.getIamPolicy` on
+// resource.
+func (r *ProjectsInstancesService) GetIamPolicy(resource string, getiampolicyrequest *GetIamPolicyRequest) *ProjectsInstancesGetIamPolicyCall {
+	c := &ProjectsInstancesGetIamPolicyCall{s: r.s, urlParams_: make(gensupport.URLParams)}
+	c.resource = resource
+	c.getiampolicyrequest = getiampolicyrequest
+	return c
+}
+
+// Fields allows partial responses to be retrieved. See
+// https://developers.google.com/gdata/docs/2.0/basics#PartialResponse
+// for more information.
+func (c *ProjectsInstancesGetIamPolicyCall) Fields(s ...googleapi.Field) *ProjectsInstancesGetIamPolicyCall {
+	c.urlParams_.Set("fields", googleapi.CombineFields(s))
+	return c
+}
+
+// Context sets the context to be used in this call's Do method. Any
+// pending HTTP request will be aborted if the provided context is
+// canceled.
+func (c *ProjectsInstancesGetIamPolicyCall) Context(ctx context.Context) *ProjectsInstancesGetIamPolicyCall {
+	c.ctx_ = ctx
+	return c
+}
+
+// Header returns an http.Header that can be modified by the caller to
+// add HTTP headers to the request.
+func (c *ProjectsInstancesGetIamPolicyCall) Header() http.Header {
+	if c.header_ == nil {
+		c.header_ = make(http.Header)
+	}
+	return c.header_
+}
+
+func (c *ProjectsInstancesGetIamPolicyCall) doRequest(alt string) (*http.Response, error) {
+	reqHeaders := make(http.Header)
+	for k, v := range c.header_ {
+		reqHeaders[k] = v
+	}
+	reqHeaders.Set("User-Agent", c.s.userAgent())
+	var body io.Reader = nil
+	body, err := googleapi.WithoutDataWrapper.JSONReader(c.getiampolicyrequest)
+	if err != nil {
+		return nil, err
+	}
+	reqHeaders.Set("Content-Type", "application/json")
+	c.urlParams_.Set("alt", alt)
+	urls := googleapi.ResolveRelative(c.s.BasePath, "v1/{+resource}:getIamPolicy")
+	urls += "?" + c.urlParams_.Encode()
+	req, _ := http.NewRequest("POST", urls, body)
+	req.Header = reqHeaders
+	googleapi.Expand(req.URL, map[string]string{
+		"resource": c.resource,
+	})
+	return gensupport.SendRequest(c.ctx_, c.s.client, req)
+}
+
+// Do executes the "spanner.projects.instances.getIamPolicy" call.
+// Exactly one of *Policy or error will be non-nil. Any non-2xx status
+// code is an error. Response headers are in either
+// *Policy.ServerResponse.Header or (if a response was returned at all)
+// in error.(*googleapi.Error).Header. Use googleapi.IsNotModified to
+// check whether the returned error was because http.StatusNotModified
+// was returned.
+func (c *ProjectsInstancesGetIamPolicyCall) Do(opts ...googleapi.CallOption) (*Policy, error) {
+	gensupport.SetOptions(c.urlParams_, opts...)
+	res, err := c.doRequest("json")
+	if res != nil && res.StatusCode == http.StatusNotModified {
+		if res.Body != nil {
+			res.Body.Close()
+		}
+		return nil, &googleapi.Error{
+			Code:   res.StatusCode,
+			Header: res.Header,
+		}
+	}
+	if err != nil {
+		return nil, err
+	}
+	defer googleapi.CloseBody(res)
+	if err := googleapi.CheckResponse(res); err != nil {
+		return nil, err
+	}
+	ret := &Policy{
+		ServerResponse: googleapi.ServerResponse{
+			Header:         res.Header,
+			HTTPStatusCode: res.StatusCode,
+		},
+	}
+	target := &ret
+	if err := json.NewDecoder(res.Body).Decode(target); err != nil {
+		return nil, err
+	}
+	return ret, nil
+	// {
+	//   "description": "Gets the access control policy for an instance resource. Returns an empty\npolicy if an instance exists but does not have a policy set.\n\nAuthorization requires `spanner.instances.getIamPolicy` on\nresource.",
+	//   "flatPath": "v1/projects/{projectsId}/instances/{instancesId}:getIamPolicy",
+	//   "httpMethod": "POST",
+	//   "id": "spanner.projects.instances.getIamPolicy",
+	//   "parameterOrder": [
+	//     "resource"
+	//   ],
+	//   "parameters": {
+	//     "resource": {
+	//       "description": "REQUIRED: The Cloud Spanner resource for which the policy is being retrieved. The format is `projects/\u003cproject ID\u003e/instances/\u003cinstance ID\u003e` for instance resources and `projects/\u003cproject ID\u003e/instances/\u003cinstance ID\u003e/databases/\u003cdatabase ID\u003e` for database resources.",
+	//       "location": "path",
+	//       "pattern": "^projects/[^/]+/instances/[^/]+$",
+	//       "required": true,
+	//       "type": "string"
+	//     }
+	//   },
+	//   "path": "v1/{+resource}:getIamPolicy",
+	//   "request": {
+	//     "$ref": "GetIamPolicyRequest"
+	//   },
+	//   "response": {
+	//     "$ref": "Policy"
+	//   },
+	//   "scopes": [
+	//     "https://www.googleapis.com/auth/cloud-platform"
+	//   ]
+	// }
+
+}
+
+// method id "spanner.projects.instances.list":
+
+type ProjectsInstancesListCall struct {
+	s            *Service
+	parent       string
+	urlParams_   gensupport.URLParams
+	ifNoneMatch_ string
+	ctx_         context.Context
+	header_      http.Header
+}
+
+// List: Lists all instances in the given project.
+func (r *ProjectsInstancesService) List(parent string) *ProjectsInstancesListCall {
+	c := &ProjectsInstancesListCall{s: r.s, urlParams_: make(gensupport.URLParams)}
+	c.parent = parent
+	return c
+}
+
+// Filter sets the optional parameter "filter": An expression for
+// filtering the results of the request. Filter rules are
+// case insensitive. The fields eligible for filtering are:
+//
+//   * name
+//   * display_name
+//   * labels.key where key is the name of a label
+//
+// Some examples of using filters are:
+//
+//   * name:* --> The instance has a name.
+//   * name:Howl --> The instance's name contains the string "howl".
+//   * name:HOWL --> Equivalent to above.
+//   * NAME:howl --> Equivalent to above.
+//   * labels.env:* --> The instance has the label "env".
+//   * labels.env:dev --> The instance has the label "env" and the value
+// of
+//                        the label contains the string "dev".
+//   * name:howl labels.env:dev --> The instance's name contains "howl"
+// and
+//                                  it has the label "env" with its
+// value
+//                                  containing "dev".
+func (c *ProjectsInstancesListCall) Filter(filter string) *ProjectsInstancesListCall {
+	c.urlParams_.Set("filter", filter)
+	return c
+}
+
+// PageSize sets the optional parameter "pageSize": Number of instances
+// to be returned in the response. If 0 or less, defaults
+// to the server's maximum allowed page size.
+func (c *ProjectsInstancesListCall) PageSize(pageSize int64) *ProjectsInstancesListCall {
+	c.urlParams_.Set("pageSize", fmt.Sprint(pageSize))
+	return c
+}
+
+// PageToken sets the optional parameter "pageToken": If non-empty,
+// `page_token` should contain a
+// next_page_token from a
+// previous ListInstancesResponse.
+func (c *ProjectsInstancesListCall) PageToken(pageToken string) *ProjectsInstancesListCall {
+	c.urlParams_.Set("pageToken", pageToken)
+	return c
+}
+
+// Fields allows partial responses to be retrieved. See
+// https://developers.google.com/gdata/docs/2.0/basics#PartialResponse
+// for more information.
+func (c *ProjectsInstancesListCall) Fields(s ...googleapi.Field) *ProjectsInstancesListCall {
+	c.urlParams_.Set("fields", googleapi.CombineFields(s))
+	return c
+}
+
+// IfNoneMatch sets the optional parameter which makes the operation
+// fail if the object's ETag matches the given value. This is useful for
+// getting updates only after the object has changed since the last
+// request. Use googleapi.IsNotModified to check whether the response
+// error from Do is the result of In-None-Match.
+func (c *ProjectsInstancesListCall) IfNoneMatch(entityTag string) *ProjectsInstancesListCall {
+	c.ifNoneMatch_ = entityTag
+	return c
+}
+
+// Context sets the context to be used in this call's Do method. Any
+// pending HTTP request will be aborted if the provided context is
+// canceled.
+func (c *ProjectsInstancesListCall) Context(ctx context.Context) *ProjectsInstancesListCall {
+	c.ctx_ = ctx
+	return c
+}
+
+// Header returns an http.Header that can be modified by the caller to
+// add HTTP headers to the request.
+func (c *ProjectsInstancesListCall) Header() http.Header {
+	if c.header_ == nil {
+		c.header_ = make(http.Header)
+	}
+	return c.header_
+}
+
+func (c *ProjectsInstancesListCall) doRequest(alt string) (*http.Response, error) {
+	reqHeaders := make(http.Header)
+	for k, v := range c.header_ {
+		reqHeaders[k] = v
+	}
+	reqHeaders.Set("User-Agent", c.s.userAgent())
+	if c.ifNoneMatch_ != "" {
+		reqHeaders.Set("If-None-Match", c.ifNoneMatch_)
+	}
+	var body io.Reader = nil
+	c.urlParams_.Set("alt", alt)
+	urls := googleapi.ResolveRelative(c.s.BasePath, "v1/{+parent}/instances")
+	urls += "?" + c.urlParams_.Encode()
+	req, _ := http.NewRequest("GET", urls, body)
+	req.Header = reqHeaders
+	googleapi.Expand(req.URL, map[string]string{
+		"parent": c.parent,
+	})
+	return gensupport.SendRequest(c.ctx_, c.s.client, req)
+}
+
+// Do executes the "spanner.projects.instances.list" call.
+// Exactly one of *ListInstancesResponse or error will be non-nil. Any
+// non-2xx status code is an error. Response headers are in either
+// *ListInstancesResponse.ServerResponse.Header or (if a response was
+// returned at all) in error.(*googleapi.Error).Header. Use
+// googleapi.IsNotModified to check whether the returned error was
+// because http.StatusNotModified was returned.
+func (c *ProjectsInstancesListCall) Do(opts ...googleapi.CallOption) (*ListInstancesResponse, error) {
+	gensupport.SetOptions(c.urlParams_, opts...)
+	res, err := c.doRequest("json")
+	if res != nil && res.StatusCode == http.StatusNotModified {
+		if res.Body != nil {
+			res.Body.Close()
+		}
+		return nil, &googleapi.Error{
+			Code:   res.StatusCode,
+			Header: res.Header,
+		}
+	}
+	if err != nil {
+		return nil, err
+	}
+	defer googleapi.CloseBody(res)
+	if err := googleapi.CheckResponse(res); err != nil {
+		return nil, err
+	}
+	ret := &ListInstancesResponse{
+		ServerResponse: googleapi.ServerResponse{
+			Header:         res.Header,
+			HTTPStatusCode: res.StatusCode,
+		},
+	}
+	target := &ret
+	if err := json.NewDecoder(res.Body).Decode(target); err != nil {
+		return nil, err
+	}
+	return ret, nil
+	// {
+	//   "description": "Lists all instances in the given project.",
+	//   "flatPath": "v1/projects/{projectsId}/instances",
+	//   "httpMethod": "GET",
+	//   "id": "spanner.projects.instances.list",
+	//   "parameterOrder": [
+	//     "parent"
+	//   ],
+	//   "parameters": {
+	//     "filter": {
+	//       "description": "An expression for filtering the results of the request. Filter rules are\ncase insensitive. The fields eligible for filtering are:\n\n  * name\n  * display_name\n  * labels.key where key is the name of a label\n\nSome examples of using filters are:\n\n  * name:* --\u003e The instance has a name.\n  * name:Howl --\u003e The instance's name contains the string \"howl\".\n  * name:HOWL --\u003e Equivalent to above.\n  * NAME:howl --\u003e Equivalent to above.\n  * labels.env:* --\u003e The instance has the label \"env\".\n  * labels.env:dev --\u003e The instance has the label \"env\" and the value of\n                       the label contains the string \"dev\".\n  * name:howl labels.env:dev --\u003e The instance's name contains \"howl\" and\n                                 it has the label \"env\" with its value\n                                 containing \"dev\".",
+	//       "location": "query",
+	//       "type": "string"
+	//     },
+	//     "pageSize": {
+	//       "description": "Number of instances to be returned in the response. If 0 or less, defaults\nto the server's maximum allowed page size.",
+	//       "format": "int32",
+	//       "location": "query",
+	//       "type": "integer"
+	//     },
+	//     "pageToken": {
+	//       "description": "If non-empty, `page_token` should contain a\nnext_page_token from a\nprevious ListInstancesResponse.",
+	//       "location": "query",
+	//       "type": "string"
+	//     },
+	//     "parent": {
+	//       "description": "Required. The name of the project for which a list of instances is\nrequested. Values are of the form `projects/\u003cproject\u003e`.",
+	//       "location": "path",
+	//       "pattern": "^projects/[^/]+$",
+	//       "required": true,
+	//       "type": "string"
+	//     }
+	//   },
+	//   "path": "v1/{+parent}/instances",
+	//   "response": {
+	//     "$ref": "ListInstancesResponse"
+	//   },
+	//   "scopes": [
+	//     "https://www.googleapis.com/auth/cloud-platform"
+	//   ]
+	// }
+
+}
+
+// Pages invokes f for each page of results.
+// A non-nil error returned from f will halt the iteration.
+// The provided context supersedes any context provided to the Context method.
+func (c *ProjectsInstancesListCall) Pages(ctx context.Context, f func(*ListInstancesResponse) error) error {
+	c.ctx_ = ctx
+	defer c.PageToken(c.urlParams_.Get("pageToken")) // reset paging to original point
+	for {
+		x, err := c.Do()
+		if err != nil {
+			return err
+		}
+		if err := f(x); err != nil {
+			return err
+		}
+		if x.NextPageToken == "" {
+			return nil
+		}
+		c.PageToken(x.NextPageToken)
+	}
+}
+
+// method id "spanner.projects.instances.patch":
+
+type ProjectsInstancesPatchCall struct {
+	s                     *Service
+	nameid                string
+	updateinstancerequest *UpdateInstanceRequest
+	urlParams_            gensupport.URLParams
+	ctx_                  context.Context
+	header_               http.Header
+}
+
+// Patch: Updates an instance, and begins allocating or releasing
+// resources
+// as requested. The returned long-running
+// operation can be used to track the
+// progress of updating the instance. If the named instance does
+// not
+// exist, returns `NOT_FOUND`.
+//
+// Immediately upon completion of this request:
+//
+//   * For resource types for which a decrease in the instance's
+// allocation
+//     has been requested, billing is based on the newly-requested
+// level.
+//
+// Until completion of the returned operation:
+//
+//   * Cancelling the operation sets its metadata's
+//     cancel_time, and begins
+//     restoring resources to their pre-request values. The operation
+//     is guaranteed to succeed at undoing all resource changes,
+//     after which point it terminates with a `CANCELLED` status.
+//   * All other attempts to modify the instance are rejected.
+//   * Reading the instance via the API continues to give the
+// pre-request
+//     resource levels.
+//
+// Upon completion of the returned operation:
+//
+//   * Billing begins for all successfully-allocated resources (some
+// types
+//     may have lower than the requested levels).
+//   * All newly-reserved resources are available for serving the
+// instance's
+//     tables.
+//   * The instance's new resource levels are readable via the API.
+//
+// The returned long-running operation will
+// have a name of the format `<instance_name>/operations/<operation_id>`
+// and
+// can be used to track the instance modification.  The
+// metadata field type is
+// UpdateInstanceMetadata.
+// The response field type is
+// Instance, if successful.
+//
+// Authorization requires `spanner.instances.update` permission
+// on
+// resource name.
+func (r *ProjectsInstancesService) Patch(nameid string, updateinstancerequest *UpdateInstanceRequest) *ProjectsInstancesPatchCall {
+	c := &ProjectsInstancesPatchCall{s: r.s, urlParams_: make(gensupport.URLParams)}
+	c.nameid = nameid
+	c.updateinstancerequest = updateinstancerequest
+	return c
+}
+
+// Fields allows partial responses to be retrieved. See
+// https://developers.google.com/gdata/docs/2.0/basics#PartialResponse
+// for more information.
+func (c *ProjectsInstancesPatchCall) Fields(s ...googleapi.Field) *ProjectsInstancesPatchCall {
+	c.urlParams_.Set("fields", googleapi.CombineFields(s))
+	return c
+}
+
+// Context sets the context to be used in this call's Do method. Any
+// pending HTTP request will be aborted if the provided context is
+// canceled.
+func (c *ProjectsInstancesPatchCall) Context(ctx context.Context) *ProjectsInstancesPatchCall {
+	c.ctx_ = ctx
+	return c
+}
+
+// Header returns an http.Header that can be modified by the caller to
+// add HTTP headers to the request.
+func (c *ProjectsInstancesPatchCall) Header() http.Header {
+	if c.header_ == nil {
+		c.header_ = make(http.Header)
+	}
+	return c.header_
+}
+
+func (c *ProjectsInstancesPatchCall) doRequest(alt string) (*http.Response, error) {
+	reqHeaders := make(http.Header)
+	for k, v := range c.header_ {
+		reqHeaders[k] = v
+	}
+	reqHeaders.Set("User-Agent", c.s.userAgent())
+	var body io.Reader = nil
+	body, err := googleapi.WithoutDataWrapper.JSONReader(c.updateinstancerequest)
+	if err != nil {
+		return nil, err
+	}
+	reqHeaders.Set("Content-Type", "application/json")
+	c.urlParams_.Set("alt", alt)
+	urls := googleapi.ResolveRelative(c.s.BasePath, "v1/{+name}")
+	urls += "?" + c.urlParams_.Encode()
+	req, _ := http.NewRequest("PATCH", urls, body)
+	req.Header = reqHeaders
+	googleapi.Expand(req.URL, map[string]string{
+		"name": c.nameid,
+	})
+	return gensupport.SendRequest(c.ctx_, c.s.client, req)
+}
+
+// Do executes the "spanner.projects.instances.patch" call.
+// Exactly one of *Operation or error will be non-nil. Any non-2xx
+// status code is an error. Response headers are in either
+// *Operation.ServerResponse.Header or (if a response was returned at
+// all) in error.(*googleapi.Error).Header. Use googleapi.IsNotModified
+// to check whether the returned error was because
+// http.StatusNotModified was returned.
+func (c *ProjectsInstancesPatchCall) Do(opts ...googleapi.CallOption) (*Operation, error) {
+	gensupport.SetOptions(c.urlParams_, opts...)
+	res, err := c.doRequest("json")
+	if res != nil && res.StatusCode == http.StatusNotModified {
+		if res.Body != nil {
+			res.Body.Close()
+		}
+		return nil, &googleapi.Error{
+			Code:   res.StatusCode,
+			Header: res.Header,
+		}
+	}
+	if err != nil {
+		return nil, err
+	}
+	defer googleapi.CloseBody(res)
+	if err := googleapi.CheckResponse(res); err != nil {
+		return nil, err
+	}
+	ret := &Operation{
+		ServerResponse: googleapi.ServerResponse{
+			Header:         res.Header,
+			HTTPStatusCode: res.StatusCode,
+		},
+	}
+	target := &ret
+	if err := json.NewDecoder(res.Body).Decode(target); err != nil {
+		return nil, err
+	}
+	return ret, nil
+	// {
+	//   "description": "Updates an instance, and begins allocating or releasing resources\nas requested. The returned long-running\noperation can be used to track the\nprogress of updating the instance. If the named instance does not\nexist, returns `NOT_FOUND`.\n\nImmediately upon completion of this request:\n\n  * For resource types for which a decrease in the instance's allocation\n    has been requested, billing is based on the newly-requested level.\n\nUntil completion of the returned operation:\n\n  * Cancelling the operation sets its metadata's\n    cancel_time, and begins\n    restoring resources to their pre-request values. The operation\n    is guaranteed to succeed at undoing all resource changes,\n    after which point it terminates with a `CANCELLED` status.\n  * All other attempts to modify the instance are rejected.\n  * Reading the instance via the API continues to give the pre-request\n    resource levels.\n\nUpon completion of the returned operation:\n\n  * Billing begins for all successfully-allocated resources (some types\n    may have lower than the requested levels).\n  * All newly-reserved resources are available for serving the instance's\n    tables.\n  * The instance's new resource levels are readable via the API.\n\nThe returned long-running operation will\nhave a name of the format `\u003cinstance_name\u003e/operations/\u003coperation_id\u003e` and\ncan be used to track the instance modification.  The\nmetadata field type is\nUpdateInstanceMetadata.\nThe response field type is\nInstance, if successful.\n\nAuthorization requires `spanner.instances.update` permission on\nresource name.",
+	//   "flatPath": "v1/projects/{projectsId}/instances/{instancesId}",
+	//   "httpMethod": "PATCH",
+	//   "id": "spanner.projects.instances.patch",
+	//   "parameterOrder": [
+	//     "name"
+	//   ],
+	//   "parameters": {
+	//     "name": {
+	//       "description": "Required. A unique identifier for the instance, which cannot be changed\nafter the instance is created. Values are of the form\n`projects/\u003cproject\u003e/instances/a-z*[a-z0-9]`. The final\nsegment of the name must be between 6 and 30 characters in length.",
+	//       "location": "path",
+	//       "pattern": "^projects/[^/]+/instances/[^/]+$",
+	//       "required": true,
+	//       "type": "string"
+	//     }
+	//   },
+	//   "path": "v1/{+name}",
+	//   "request": {
+	//     "$ref": "UpdateInstanceRequest"
+	//   },
+	//   "response": {
+	//     "$ref": "Operation"
+	//   },
+	//   "scopes": [
+	//     "https://www.googleapis.com/auth/cloud-platform"
+	//   ]
+	// }
+
+}
+
+// method id "spanner.projects.instances.setIamPolicy":
+
+type ProjectsInstancesSetIamPolicyCall struct {
+	s                   *Service
+	resource            string
+	setiampolicyrequest *SetIamPolicyRequest
+	urlParams_          gensupport.URLParams
+	ctx_                context.Context
+	header_             http.Header
+}
+
+// SetIamPolicy: Sets the access control policy on an instance resource.
+// Replaces any
+// existing policy.
+//
+// Authorization requires `spanner.instances.setIamPolicy` on
+// resource.
+func (r *ProjectsInstancesService) SetIamPolicy(resource string, setiampolicyrequest *SetIamPolicyRequest) *ProjectsInstancesSetIamPolicyCall {
+	c := &ProjectsInstancesSetIamPolicyCall{s: r.s, urlParams_: make(gensupport.URLParams)}
+	c.resource = resource
+	c.setiampolicyrequest = setiampolicyrequest
+	return c
+}
+
+// Fields allows partial responses to be retrieved. See
+// https://developers.google.com/gdata/docs/2.0/basics#PartialResponse
+// for more information.
+func (c *ProjectsInstancesSetIamPolicyCall) Fields(s ...googleapi.Field) *ProjectsInstancesSetIamPolicyCall {
+	c.urlParams_.Set("fields", googleapi.CombineFields(s))
+	return c
+}
+
+// Context sets the context to be used in this call's Do method. Any
+// pending HTTP request will be aborted if the provided context is
+// canceled.
+func (c *ProjectsInstancesSetIamPolicyCall) Context(ctx context.Context) *ProjectsInstancesSetIamPolicyCall {
+	c.ctx_ = ctx
+	return c
+}
+
+// Header returns an http.Header that can be modified by the caller to
+// add HTTP headers to the request.
+func (c *ProjectsInstancesSetIamPolicyCall) Header() http.Header {
+	if c.header_ == nil {
+		c.header_ = make(http.Header)
+	}
+	return c.header_
+}
+
+func (c *ProjectsInstancesSetIamPolicyCall) doRequest(alt string) (*http.Response, error) {
+	reqHeaders := make(http.Header)
+	for k, v := range c.header_ {
+		reqHeaders[k] = v
+	}
+	reqHeaders.Set("User-Agent", c.s.userAgent())
+	var body io.Reader = nil
+	body, err := googleapi.WithoutDataWrapper.JSONReader(c.setiampolicyrequest)
+	if err != nil {
+		return nil, err
+	}
+	reqHeaders.Set("Content-Type", "application/json")
+	c.urlParams_.Set("alt", alt)
+	urls := googleapi.ResolveRelative(c.s.BasePath, "v1/{+resource}:setIamPolicy")
+	urls += "?" + c.urlParams_.Encode()
+	req, _ := http.NewRequest("POST", urls, body)
+	req.Header = reqHeaders
+	googleapi.Expand(req.URL, map[string]string{
+		"resource": c.resource,
+	})
+	return gensupport.SendRequest(c.ctx_, c.s.client, req)
+}
+
+// Do executes the "spanner.projects.instances.setIamPolicy" call.
+// Exactly one of *Policy or error will be non-nil. Any non-2xx status
+// code is an error. Response headers are in either
+// *Policy.ServerResponse.Header or (if a response was returned at all)
+// in error.(*googleapi.Error).Header. Use googleapi.IsNotModified to
+// check whether the returned error was because http.StatusNotModified
+// was returned.
+func (c *ProjectsInstancesSetIamPolicyCall) Do(opts ...googleapi.CallOption) (*Policy, error) {
+	gensupport.SetOptions(c.urlParams_, opts...)
+	res, err := c.doRequest("json")
+	if res != nil && res.StatusCode == http.StatusNotModified {
+		if res.Body != nil {
+			res.Body.Close()
+		}
+		return nil, &googleapi.Error{
+			Code:   res.StatusCode,
+			Header: res.Header,
+		}
+	}
+	if err != nil {
+		return nil, err
+	}
+	defer googleapi.CloseBody(res)
+	if err := googleapi.CheckResponse(res); err != nil {
+		return nil, err
+	}
+	ret := &Policy{
+		ServerResponse: googleapi.ServerResponse{
+			Header:         res.Header,
+			HTTPStatusCode: res.StatusCode,
+		},
+	}
+	target := &ret
+	if err := json.NewDecoder(res.Body).Decode(target); err != nil {
+		return nil, err
+	}
+	return ret, nil
+	// {
+	//   "description": "Sets the access control policy on an instance resource. Replaces any\nexisting policy.\n\nAuthorization requires `spanner.instances.setIamPolicy` on\nresource.",
+	//   "flatPath": "v1/projects/{projectsId}/instances/{instancesId}:setIamPolicy",
+	//   "httpMethod": "POST",
+	//   "id": "spanner.projects.instances.setIamPolicy",
+	//   "parameterOrder": [
+	//     "resource"
+	//   ],
+	//   "parameters": {
+	//     "resource": {
+	//       "description": "REQUIRED: The Cloud Spanner resource for which the policy is being set. The format is `projects/\u003cproject ID\u003e/instances/\u003cinstance ID\u003e` for instance resources and `projects/\u003cproject ID\u003e/instances/\u003cinstance ID\u003e/databases/\u003cdatabase ID\u003e` for databases resources.",
+	//       "location": "path",
+	//       "pattern": "^projects/[^/]+/instances/[^/]+$",
+	//       "required": true,
+	//       "type": "string"
+	//     }
+	//   },
+	//   "path": "v1/{+resource}:setIamPolicy",
+	//   "request": {
+	//     "$ref": "SetIamPolicyRequest"
+	//   },
+	//   "response": {
+	//     "$ref": "Policy"
+	//   },
+	//   "scopes": [
+	//     "https://www.googleapis.com/auth/cloud-platform"
+	//   ]
+	// }
+
+}
+
+// method id "spanner.projects.instances.testIamPermissions":
+
+type ProjectsInstancesTestIamPermissionsCall struct {
+	s                         *Service
+	resource                  string
+	testiampermissionsrequest *TestIamPermissionsRequest
+	urlParams_                gensupport.URLParams
+	ctx_                      context.Context
+	header_                   http.Header
+}
+
+// TestIamPermissions: Returns permissions that the caller has on the
+// specified instance resource.
+//
+// Attempting this RPC on a non-existent Cloud Spanner instance resource
+// will
+// result in a NOT_FOUND error if the user has
+// `spanner.instances.list`
+// permission on the containing Google Cloud Project. Otherwise returns
+// an
+// empty set of permissions.
+func (r *ProjectsInstancesService) TestIamPermissions(resource string, testiampermissionsrequest *TestIamPermissionsRequest) *ProjectsInstancesTestIamPermissionsCall {
+	c := &ProjectsInstancesTestIamPermissionsCall{s: r.s, urlParams_: make(gensupport.URLParams)}
+	c.resource = resource
+	c.testiampermissionsrequest = testiampermissionsrequest
+	return c
+}
+
+// Fields allows partial responses to be retrieved. See
+// https://developers.google.com/gdata/docs/2.0/basics#PartialResponse
+// for more information.
+func (c *ProjectsInstancesTestIamPermissionsCall) Fields(s ...googleapi.Field) *ProjectsInstancesTestIamPermissionsCall {
+	c.urlParams_.Set("fields", googleapi.CombineFields(s))
+	return c
+}
+
+// Context sets the context to be used in this call's Do method. Any
+// pending HTTP request will be aborted if the provided context is
+// canceled.
+func (c *ProjectsInstancesTestIamPermissionsCall) Context(ctx context.Context) *ProjectsInstancesTestIamPermissionsCall {
+	c.ctx_ = ctx
+	return c
+}
+
+// Header returns an http.Header that can be modified by the caller to
+// add HTTP headers to the request.
+func (c *ProjectsInstancesTestIamPermissionsCall) Header() http.Header {
+	if c.header_ == nil {
+		c.header_ = make(http.Header)
+	}
+	return c.header_
+}
+
+func (c *ProjectsInstancesTestIamPermissionsCall) doRequest(alt string) (*http.Response, error) {
+	reqHeaders := make(http.Header)
+	for k, v := range c.header_ {
+		reqHeaders[k] = v
+	}
+	reqHeaders.Set("User-Agent", c.s.userAgent())
+	var body io.Reader = nil
+	body, err := googleapi.WithoutDataWrapper.JSONReader(c.testiampermissionsrequest)
+	if err != nil {
+		return nil, err
+	}
+	reqHeaders.Set("Content-Type", "application/json")
+	c.urlParams_.Set("alt", alt)
+	urls := googleapi.ResolveRelative(c.s.BasePath, "v1/{+resource}:testIamPermissions")
+	urls += "?" + c.urlParams_.Encode()
+	req, _ := http.NewRequest("POST", urls, body)
+	req.Header = reqHeaders
+	googleapi.Expand(req.URL, map[string]string{
+		"resource": c.resource,
+	})
+	return gensupport.SendRequest(c.ctx_, c.s.client, req)
+}
+
+// Do executes the "spanner.projects.instances.testIamPermissions" call.
+// Exactly one of *TestIamPermissionsResponse or error will be non-nil.
+// Any non-2xx status code is an error. Response headers are in either
+// *TestIamPermissionsResponse.ServerResponse.Header or (if a response
+// was returned at all) in error.(*googleapi.Error).Header. Use
+// googleapi.IsNotModified to check whether the returned error was
+// because http.StatusNotModified was returned.
+func (c *ProjectsInstancesTestIamPermissionsCall) Do(opts ...googleapi.CallOption) (*TestIamPermissionsResponse, error) {
+	gensupport.SetOptions(c.urlParams_, opts...)
+	res, err := c.doRequest("json")
+	if res != nil && res.StatusCode == http.StatusNotModified {
+		if res.Body != nil {
+			res.Body.Close()
+		}
+		return nil, &googleapi.Error{
+			Code:   res.StatusCode,
+			Header: res.Header,
+		}
+	}
+	if err != nil {
+		return nil, err
+	}
+	defer googleapi.CloseBody(res)
+	if err := googleapi.CheckResponse(res); err != nil {
+		return nil, err
+	}
+	ret := &TestIamPermissionsResponse{
+		ServerResponse: googleapi.ServerResponse{
+			Header:         res.Header,
+			HTTPStatusCode: res.StatusCode,
+		},
+	}
+	target := &ret
+	if err := json.NewDecoder(res.Body).Decode(target); err != nil {
+		return nil, err
+	}
+	return ret, nil
+	// {
+	//   "description": "Returns permissions that the caller has on the specified instance resource.\n\nAttempting this RPC on a non-existent Cloud Spanner instance resource will\nresult in a NOT_FOUND error if the user has `spanner.instances.list`\npermission on the containing Google Cloud Project. Otherwise returns an\nempty set of permissions.",
+	//   "flatPath": "v1/projects/{projectsId}/instances/{instancesId}:testIamPermissions",
+	//   "httpMethod": "POST",
+	//   "id": "spanner.projects.instances.testIamPermissions",
+	//   "parameterOrder": [
+	//     "resource"
+	//   ],
+	//   "parameters": {
+	//     "resource": {
+	//       "description": "REQUIRED: The Cloud Spanner resource for which permissions are being tested. The format is `projects/\u003cproject ID\u003e/instances/\u003cinstance ID\u003e` for instance resources and `projects/\u003cproject ID\u003e/instances/\u003cinstance ID\u003e/databases/\u003cdatabase ID\u003e` for database resources.",
+	//       "location": "path",
+	//       "pattern": "^projects/[^/]+/instances/[^/]+$",
+	//       "required": true,
+	//       "type": "string"
+	//     }
+	//   },
+	//   "path": "v1/{+resource}:testIamPermissions",
+	//   "request": {
+	//     "$ref": "TestIamPermissionsRequest"
+	//   },
+	//   "response": {
+	//     "$ref": "TestIamPermissionsResponse"
+	//   },
+	//   "scopes": [
+	//     "https://www.googleapis.com/auth/cloud-platform"
+	//   ]
+	// }
+
+}
+
+// method id "spanner.projects.instances.databases.create":
+
+type ProjectsInstancesDatabasesCreateCall struct {
+	s                     *Service
+	parent                string
+	createdatabaserequest *CreateDatabaseRequest
+	urlParams_            gensupport.URLParams
+	ctx_                  context.Context
+	header_               http.Header
+}
+
+// Create: Creates a new Cloud Spanner database and starts to prepare it
+// for serving.
+// The returned long-running operation will
+// have a name of the format `<database_name>/operations/<operation_id>`
+// and
+// can be used to track preparation of the database. The
+// metadata field type is
+// CreateDatabaseMetadata. The
+// response field type is
+// Database, if successful.
+func (r *ProjectsInstancesDatabasesService) Create(parent string, createdatabaserequest *CreateDatabaseRequest) *ProjectsInstancesDatabasesCreateCall {
+	c := &ProjectsInstancesDatabasesCreateCall{s: r.s, urlParams_: make(gensupport.URLParams)}
+	c.parent = parent
+	c.createdatabaserequest = createdatabaserequest
+	return c
+}
+
+// Fields allows partial responses to be retrieved. See
+// https://developers.google.com/gdata/docs/2.0/basics#PartialResponse
+// for more information.
+func (c *ProjectsInstancesDatabasesCreateCall) Fields(s ...googleapi.Field) *ProjectsInstancesDatabasesCreateCall {
+	c.urlParams_.Set("fields", googleapi.CombineFields(s))
+	return c
+}
+
+// Context sets the context to be used in this call's Do method. Any
+// pending HTTP request will be aborted if the provided context is
+// canceled.
+func (c *ProjectsInstancesDatabasesCreateCall) Context(ctx context.Context) *ProjectsInstancesDatabasesCreateCall {
+	c.ctx_ = ctx
+	return c
+}
+
+// Header returns an http.Header that can be modified by the caller to
+// add HTTP headers to the request.
+func (c *ProjectsInstancesDatabasesCreateCall) Header() http.Header {
+	if c.header_ == nil {
+		c.header_ = make(http.Header)
+	}
+	return c.header_
+}
+
+func (c *ProjectsInstancesDatabasesCreateCall) doRequest(alt string) (*http.Response, error) {
+	reqHeaders := make(http.Header)
+	for k, v := range c.header_ {
+		reqHeaders[k] = v
+	}
+	reqHeaders.Set("User-Agent", c.s.userAgent())
+	var body io.Reader = nil
+	body, err := googleapi.WithoutDataWrapper.JSONReader(c.createdatabaserequest)
+	if err != nil {
+		return nil, err
+	}
+	reqHeaders.Set("Content-Type", "application/json")
+	c.urlParams_.Set("alt", alt)
+	urls := googleapi.ResolveRelative(c.s.BasePath, "v1/{+parent}/databases")
+	urls += "?" + c.urlParams_.Encode()
+	req, _ := http.NewRequest("POST", urls, body)
+	req.Header = reqHeaders
+	googleapi.Expand(req.URL, map[string]string{
+		"parent": c.parent,
+	})
+	return gensupport.SendRequest(c.ctx_, c.s.client, req)
+}
+
+// Do executes the "spanner.projects.instances.databases.create" call.
+// Exactly one of *Operation or error will be non-nil. Any non-2xx
+// status code is an error. Response headers are in either
+// *Operation.ServerResponse.Header or (if a response was returned at
+// all) in error.(*googleapi.Error).Header. Use googleapi.IsNotModified
+// to check whether the returned error was because
+// http.StatusNotModified was returned.
+func (c *ProjectsInstancesDatabasesCreateCall) Do(opts ...googleapi.CallOption) (*Operation, error) {
+	gensupport.SetOptions(c.urlParams_, opts...)
+	res, err := c.doRequest("json")
+	if res != nil && res.StatusCode == http.StatusNotModified {
+		if res.Body != nil {
+			res.Body.Close()
+		}
+		return nil, &googleapi.Error{
+			Code:   res.StatusCode,
+			Header: res.Header,
+		}
+	}
+	if err != nil {
+		return nil, err
+	}
+	defer googleapi.CloseBody(res)
+	if err := googleapi.CheckResponse(res); err != nil {
+		return nil, err
+	}
+	ret := &Operation{
+		ServerResponse: googleapi.ServerResponse{
+			Header:         res.Header,
+			HTTPStatusCode: res.StatusCode,
+		},
+	}
+	target := &ret
+	if err := json.NewDecoder(res.Body).Decode(target); err != nil {
+		return nil, err
+	}
+	return ret, nil
+	// {
+	//   "description": "Creates a new Cloud Spanner database and starts to prepare it for serving.\nThe returned long-running operation will\nhave a name of the format `\u003cdatabase_name\u003e/operations/\u003coperation_id\u003e` and\ncan be used to track preparation of the database. The\nmetadata field type is\nCreateDatabaseMetadata. The\nresponse field type is\nDatabase, if successful.",
+	//   "flatPath": "v1/projects/{projectsId}/instances/{instancesId}/databases",
+	//   "httpMethod": "POST",
+	//   "id": "spanner.projects.instances.databases.create",
+	//   "parameterOrder": [
+	//     "parent"
+	//   ],
+	//   "parameters": {
+	//     "parent": {
+	//       "description": "Required. The name of the instance that will serve the new database.\nValues are of the form `projects/\u003cproject\u003e/instances/\u003cinstance\u003e`.",
+	//       "location": "path",
+	//       "pattern": "^projects/[^/]+/instances/[^/]+$",
+	//       "required": true,
+	//       "type": "string"
+	//     }
+	//   },
+	//   "path": "v1/{+parent}/databases",
+	//   "request": {
+	//     "$ref": "CreateDatabaseRequest"
+	//   },
+	//   "response": {
+	//     "$ref": "Operation"
+	//   },
+	//   "scopes": [
+	//     "https://www.googleapis.com/auth/cloud-platform"
+	//   ]
+	// }
+
+}
+
+// method id "spanner.projects.instances.databases.dropDatabase":
+
+type ProjectsInstancesDatabasesDropDatabaseCall struct {
+	s          *Service
+	database   string
+	urlParams_ gensupport.URLParams
+	ctx_       context.Context
+	header_    http.Header
+}
+
+// DropDatabase: Drops (aka deletes) a Cloud Spanner database.
+func (r *ProjectsInstancesDatabasesService) DropDatabase(database string) *ProjectsInstancesDatabasesDropDatabaseCall {
+	c := &ProjectsInstancesDatabasesDropDatabaseCall{s: r.s, urlParams_: make(gensupport.URLParams)}
+	c.database = database
+	return c
+}
+
+// Fields allows partial responses to be retrieved. See
+// https://developers.google.com/gdata/docs/2.0/basics#PartialResponse
+// for more information.
+func (c *ProjectsInstancesDatabasesDropDatabaseCall) Fields(s ...googleapi.Field) *ProjectsInstancesDatabasesDropDatabaseCall {
+	c.urlParams_.Set("fields", googleapi.CombineFields(s))
+	return c
+}
+
+// Context sets the context to be used in this call's Do method. Any
+// pending HTTP request will be aborted if the provided context is
+// canceled.
+func (c *ProjectsInstancesDatabasesDropDatabaseCall) Context(ctx context.Context) *ProjectsInstancesDatabasesDropDatabaseCall {
+	c.ctx_ = ctx
+	return c
+}
+
+// Header returns an http.Header that can be modified by the caller to
+// add HTTP headers to the request.
+func (c *ProjectsInstancesDatabasesDropDatabaseCall) Header() http.Header {
+	if c.header_ == nil {
+		c.header_ = make(http.Header)
+	}
+	return c.header_
+}
+
+func (c *ProjectsInstancesDatabasesDropDatabaseCall) doRequest(alt string) (*http.Response, error) {
+	reqHeaders := make(http.Header)
+	for k, v := range c.header_ {
+		reqHeaders[k] = v
+	}
+	reqHeaders.Set("User-Agent", c.s.userAgent())
+	var body io.Reader = nil
+	c.urlParams_.Set("alt", alt)
+	urls := googleapi.ResolveRelative(c.s.BasePath, "v1/{+database}")
+	urls += "?" + c.urlParams_.Encode()
+	req, _ := http.NewRequest("DELETE", urls, body)
+	req.Header = reqHeaders
+	googleapi.Expand(req.URL, map[string]string{
+		"database": c.database,
+	})
+	return gensupport.SendRequest(c.ctx_, c.s.client, req)
+}
+
+// Do executes the "spanner.projects.instances.databases.dropDatabase" call.
+// Exactly one of *Empty or error will be non-nil. Any non-2xx status
+// code is an error. Response headers are in either
+// *Empty.ServerResponse.Header or (if a response was returned at all)
+// in error.(*googleapi.Error).Header. Use googleapi.IsNotModified to
+// check whether the returned error was because http.StatusNotModified
+// was returned.
+func (c *ProjectsInstancesDatabasesDropDatabaseCall) Do(opts ...googleapi.CallOption) (*Empty, error) {
+	gensupport.SetOptions(c.urlParams_, opts...)
+	res, err := c.doRequest("json")
+	if res != nil && res.StatusCode == http.StatusNotModified {
+		if res.Body != nil {
+			res.Body.Close()
+		}
+		return nil, &googleapi.Error{
+			Code:   res.StatusCode,
+			Header: res.Header,
+		}
+	}
+	if err != nil {
+		return nil, err
+	}
+	defer googleapi.CloseBody(res)
+	if err := googleapi.CheckResponse(res); err != nil {
+		return nil, err
+	}
+	ret := &Empty{
+		ServerResponse: googleapi.ServerResponse{
+			Header:         res.Header,
+			HTTPStatusCode: res.StatusCode,
+		},
+	}
+	target := &ret
+	if err := json.NewDecoder(res.Body).Decode(target); err != nil {
+		return nil, err
+	}
+	return ret, nil
+	// {
+	//   "description": "Drops (aka deletes) a Cloud Spanner database.",
+	//   "flatPath": "v1/projects/{projectsId}/instances/{instancesId}/databases/{databasesId}",
+	//   "httpMethod": "DELETE",
+	//   "id": "spanner.projects.instances.databases.dropDatabase",
+	//   "parameterOrder": [
+	//     "database"
+	//   ],
+	//   "parameters": {
+	//     "database": {
+	//       "description": "Required. The database to be dropped.",
+	//       "location": "path",
+	//       "pattern": "^projects/[^/]+/instances/[^/]+/databases/[^/]+$",
+	//       "required": true,
+	//       "type": "string"
+	//     }
+	//   },
+	//   "path": "v1/{+database}",
+	//   "response": {
+	//     "$ref": "Empty"
+	//   },
+	//   "scopes": [
+	//     "https://www.googleapis.com/auth/cloud-platform"
+	//   ]
+	// }
+
+}
+
+// method id "spanner.projects.instances.databases.get":
+
+type ProjectsInstancesDatabasesGetCall struct {
+	s            *Service
+	name         string
+	urlParams_   gensupport.URLParams
+	ifNoneMatch_ string
+	ctx_         context.Context
+	header_      http.Header
+}
+
+// Get: Gets the state of a Cloud Spanner database.
+func (r *ProjectsInstancesDatabasesService) Get(name string) *ProjectsInstancesDatabasesGetCall {
+	c := &ProjectsInstancesDatabasesGetCall{s: r.s, urlParams_: make(gensupport.URLParams)}
+	c.name = name
+	return c
+}
+
+// Fields allows partial responses to be retrieved. See
+// https://developers.google.com/gdata/docs/2.0/basics#PartialResponse
+// for more information.
+func (c *ProjectsInstancesDatabasesGetCall) Fields(s ...googleapi.Field) *ProjectsInstancesDatabasesGetCall {
+	c.urlParams_.Set("fields", googleapi.CombineFields(s))
+	return c
+}
+
+// IfNoneMatch sets the optional parameter which makes the operation
+// fail if the object's ETag matches the given value. This is useful for
+// getting updates only after the object has changed since the last
+// request. Use googleapi.IsNotModified to check whether the response
+// error from Do is the result of In-None-Match.
+func (c *ProjectsInstancesDatabasesGetCall) IfNoneMatch(entityTag string) *ProjectsInstancesDatabasesGetCall {
+	c.ifNoneMatch_ = entityTag
+	return c
+}
+
+// Context sets the context to be used in this call's Do method. Any
+// pending HTTP request will be aborted if the provided context is
+// canceled.
+func (c *ProjectsInstancesDatabasesGetCall) Context(ctx context.Context) *ProjectsInstancesDatabasesGetCall {
+	c.ctx_ = ctx
+	return c
+}
+
+// Header returns an http.Header that can be modified by the caller to
+// add HTTP headers to the request.
+func (c *ProjectsInstancesDatabasesGetCall) Header() http.Header {
+	if c.header_ == nil {
+		c.header_ = make(http.Header)
+	}
+	return c.header_
+}
+
+func (c *ProjectsInstancesDatabasesGetCall) doRequest(alt string) (*http.Response, error) {
+	reqHeaders := make(http.Header)
+	for k, v := range c.header_ {
+		reqHeaders[k] = v
+	}
+	reqHeaders.Set("User-Agent", c.s.userAgent())
+	if c.ifNoneMatch_ != "" {
+		reqHeaders.Set("If-None-Match", c.ifNoneMatch_)
+	}
+	var body io.Reader = nil
+	c.urlParams_.Set("alt", alt)
+	urls := googleapi.ResolveRelative(c.s.BasePath, "v1/{+name}")
+	urls += "?" + c.urlParams_.Encode()
+	req, _ := http.NewRequest("GET", urls, body)
+	req.Header = reqHeaders
+	googleapi.Expand(req.URL, map[string]string{
+		"name": c.name,
+	})
+	return gensupport.SendRequest(c.ctx_, c.s.client, req)
+}
+
+// Do executes the "spanner.projects.instances.databases.get" call.
+// Exactly one of *Database or error will be non-nil. Any non-2xx status
+// code is an error. Response headers are in either
+// *Database.ServerResponse.Header or (if a response was returned at
+// all) in error.(*googleapi.Error).Header. Use googleapi.IsNotModified
+// to check whether the returned error was because
+// http.StatusNotModified was returned.
+func (c *ProjectsInstancesDatabasesGetCall) Do(opts ...googleapi.CallOption) (*Database, error) {
+	gensupport.SetOptions(c.urlParams_, opts...)
+	res, err := c.doRequest("json")
+	if res != nil && res.StatusCode == http.StatusNotModified {
+		if res.Body != nil {
+			res.Body.Close()
+		}
+		return nil, &googleapi.Error{
+			Code:   res.StatusCode,
+			Header: res.Header,
+		}
+	}
+	if err != nil {
+		return nil, err
+	}
+	defer googleapi.CloseBody(res)
+	if err := googleapi.CheckResponse(res); err != nil {
+		return nil, err
+	}
+	ret := &Database{
+		ServerResponse: googleapi.ServerResponse{
+			Header:         res.Header,
+			HTTPStatusCode: res.StatusCode,
+		},
+	}
+	target := &ret
+	if err := json.NewDecoder(res.Body).Decode(target); err != nil {
+		return nil, err
+	}
+	return ret, nil
+	// {
+	//   "description": "Gets the state of a Cloud Spanner database.",
+	//   "flatPath": "v1/projects/{projectsId}/instances/{instancesId}/databases/{databasesId}",
+	//   "httpMethod": "GET",
+	//   "id": "spanner.projects.instances.databases.get",
+	//   "parameterOrder": [
+	//     "name"
+	//   ],
+	//   "parameters": {
+	//     "name": {
+	//       "description": "Required. The name of the requested database. Values are of the form\n`projects/\u003cproject\u003e/instances/\u003cinstance\u003e/databases/\u003cdatabase\u003e`.",
+	//       "location": "path",
+	//       "pattern": "^projects/[^/]+/instances/[^/]+/databases/[^/]+$",
+	//       "required": true,
+	//       "type": "string"
+	//     }
+	//   },
+	//   "path": "v1/{+name}",
+	//   "response": {
+	//     "$ref": "Database"
+	//   },
+	//   "scopes": [
+	//     "https://www.googleapis.com/auth/cloud-platform"
+	//   ]
+	// }
+
+}
+
+// method id "spanner.projects.instances.databases.getDdl":
+
+type ProjectsInstancesDatabasesGetDdlCall struct {
+	s            *Service
+	database     string
+	urlParams_   gensupport.URLParams
+	ifNoneMatch_ string
+	ctx_         context.Context
+	header_      http.Header
+}
+
+// GetDdl: Returns the schema of a Cloud Spanner database as a list of
+// formatted
+// DDL statements. This method does not show pending schema updates,
+// those may
+// be queried using the Operations API.
+func (r *ProjectsInstancesDatabasesService) GetDdl(database string) *ProjectsInstancesDatabasesGetDdlCall {
+	c := &ProjectsInstancesDatabasesGetDdlCall{s: r.s, urlParams_: make(gensupport.URLParams)}
+	c.database = database
+	return c
+}
+
+// Fields allows partial responses to be retrieved. See
+// https://developers.google.com/gdata/docs/2.0/basics#PartialResponse
+// for more information.
+func (c *ProjectsInstancesDatabasesGetDdlCall) Fields(s ...googleapi.Field) *ProjectsInstancesDatabasesGetDdlCall {
+	c.urlParams_.Set("fields", googleapi.CombineFields(s))
+	return c
+}
+
+// IfNoneMatch sets the optional parameter which makes the operation
+// fail if the object's ETag matches the given value. This is useful for
+// getting updates only after the object has changed since the last
+// request. Use googleapi.IsNotModified to check whether the response
+// error from Do is the result of In-None-Match.
+func (c *ProjectsInstancesDatabasesGetDdlCall) IfNoneMatch(entityTag string) *ProjectsInstancesDatabasesGetDdlCall {
+	c.ifNoneMatch_ = entityTag
+	return c
+}
+
+// Context sets the context to be used in this call's Do method. Any
+// pending HTTP request will be aborted if the provided context is
+// canceled.
+func (c *ProjectsInstancesDatabasesGetDdlCall) Context(ctx context.Context) *ProjectsInstancesDatabasesGetDdlCall {
+	c.ctx_ = ctx
+	return c
+}
+
+// Header returns an http.Header that can be modified by the caller to
+// add HTTP headers to the request.
+func (c *ProjectsInstancesDatabasesGetDdlCall) Header() http.Header {
+	if c.header_ == nil {
+		c.header_ = make(http.Header)
+	}
+	return c.header_
+}
+
+func (c *ProjectsInstancesDatabasesGetDdlCall) doRequest(alt string) (*http.Response, error) {
+	reqHeaders := make(http.Header)
+	for k, v := range c.header_ {
+		reqHeaders[k] = v
+	}
+	reqHeaders.Set("User-Agent", c.s.userAgent())
+	if c.ifNoneMatch_ != "" {
+		reqHeaders.Set("If-None-Match", c.ifNoneMatch_)
+	}
+	var body io.Reader = nil
+	c.urlParams_.Set("alt", alt)
+	urls := googleapi.ResolveRelative(c.s.BasePath, "v1/{+database}/ddl")
+	urls += "?" + c.urlParams_.Encode()
+	req, _ := http.NewRequest("GET", urls, body)
+	req.Header = reqHeaders
+	googleapi.Expand(req.URL, map[string]string{
+		"database": c.database,
+	})
+	return gensupport.SendRequest(c.ctx_, c.s.client, req)
+}
+
+// Do executes the "spanner.projects.instances.databases.getDdl" call.
+// Exactly one of *GetDatabaseDdlResponse or error will be non-nil. Any
+// non-2xx status code is an error. Response headers are in either
+// *GetDatabaseDdlResponse.ServerResponse.Header or (if a response was
+// returned at all) in error.(*googleapi.Error).Header. Use
+// googleapi.IsNotModified to check whether the returned error was
+// because http.StatusNotModified was returned.
+func (c *ProjectsInstancesDatabasesGetDdlCall) Do(opts ...googleapi.CallOption) (*GetDatabaseDdlResponse, error) {
+	gensupport.SetOptions(c.urlParams_, opts...)
+	res, err := c.doRequest("json")
+	if res != nil && res.StatusCode == http.StatusNotModified {
+		if res.Body != nil {
+			res.Body.Close()
+		}
+		return nil, &googleapi.Error{
+			Code:   res.StatusCode,
+			Header: res.Header,
+		}
+	}
+	if err != nil {
+		return nil, err
+	}
+	defer googleapi.CloseBody(res)
+	if err := googleapi.CheckResponse(res); err != nil {
+		return nil, err
+	}
+	ret := &GetDatabaseDdlResponse{
+		ServerResponse: googleapi.ServerResponse{
+			Header:         res.Header,
+			HTTPStatusCode: res.StatusCode,
+		},
+	}
+	target := &ret
+	if err := json.NewDecoder(res.Body).Decode(target); err != nil {
+		return nil, err
+	}
+	return ret, nil
+	// {
+	//   "description": "Returns the schema of a Cloud Spanner database as a list of formatted\nDDL statements. This method does not show pending schema updates, those may\nbe queried using the Operations API.",
+	//   "flatPath": "v1/projects/{projectsId}/instances/{instancesId}/databases/{databasesId}/ddl",
+	//   "httpMethod": "GET",
+	//   "id": "spanner.projects.instances.databases.getDdl",
+	//   "parameterOrder": [
+	//     "database"
+	//   ],
+	//   "parameters": {
+	//     "database": {
+	//       "description": "Required. The database whose schema we wish to get.",
+	//       "location": "path",
+	//       "pattern": "^projects/[^/]+/instances/[^/]+/databases/[^/]+$",
+	//       "required": true,
+	//       "type": "string"
+	//     }
+	//   },
+	//   "path": "v1/{+database}/ddl",
+	//   "response": {
+	//     "$ref": "GetDatabaseDdlResponse"
+	//   },
+	//   "scopes": [
+	//     "https://www.googleapis.com/auth/cloud-platform"
+	//   ]
+	// }
+
+}
+
+// method id "spanner.projects.instances.databases.getIamPolicy":
+
+type ProjectsInstancesDatabasesGetIamPolicyCall struct {
+	s                   *Service
+	resource            string
+	getiampolicyrequest *GetIamPolicyRequest
+	urlParams_          gensupport.URLParams
+	ctx_                context.Context
+	header_             http.Header
+}
+
+// GetIamPolicy: Gets the access control policy for a database resource.
+// Returns an empty
+// policy if a database exists but does not have a policy
+// set.
+//
+// Authorization requires `spanner.databases.getIamPolicy` permission
+// on
+// resource.
+func (r *ProjectsInstancesDatabasesService) GetIamPolicy(resource string, getiampolicyrequest *GetIamPolicyRequest) *ProjectsInstancesDatabasesGetIamPolicyCall {
+	c := &ProjectsInstancesDatabasesGetIamPolicyCall{s: r.s, urlParams_: make(gensupport.URLParams)}
+	c.resource = resource
+	c.getiampolicyrequest = getiampolicyrequest
+	return c
+}
+
+// Fields allows partial responses to be retrieved. See
+// https://developers.google.com/gdata/docs/2.0/basics#PartialResponse
+// for more information.
+func (c *ProjectsInstancesDatabasesGetIamPolicyCall) Fields(s ...googleapi.Field) *ProjectsInstancesDatabasesGetIamPolicyCall {
+	c.urlParams_.Set("fields", googleapi.CombineFields(s))
+	return c
+}
+
+// Context sets the context to be used in this call's Do method. Any
+// pending HTTP request will be aborted if the provided context is
+// canceled.
+func (c *ProjectsInstancesDatabasesGetIamPolicyCall) Context(ctx context.Context) *ProjectsInstancesDatabasesGetIamPolicyCall {
+	c.ctx_ = ctx
+	return c
+}
+
+// Header returns an http.Header that can be modified by the caller to
+// add HTTP headers to the request.
+func (c *ProjectsInstancesDatabasesGetIamPolicyCall) Header() http.Header {
+	if c.header_ == nil {
+		c.header_ = make(http.Header)
+	}
+	return c.header_
+}
+
+func (c *ProjectsInstancesDatabasesGetIamPolicyCall) doRequest(alt string) (*http.Response, error) {
+	reqHeaders := make(http.Header)
+	for k, v := range c.header_ {
+		reqHeaders[k] = v
+	}
+	reqHeaders.Set("User-Agent", c.s.userAgent())
+	var body io.Reader = nil
+	body, err := googleapi.WithoutDataWrapper.JSONReader(c.getiampolicyrequest)
+	if err != nil {
+		return nil, err
+	}
+	reqHeaders.Set("Content-Type", "application/json")
+	c.urlParams_.Set("alt", alt)
+	urls := googleapi.ResolveRelative(c.s.BasePath, "v1/{+resource}:getIamPolicy")
+	urls += "?" + c.urlParams_.Encode()
+	req, _ := http.NewRequest("POST", urls, body)
+	req.Header = reqHeaders
+	googleapi.Expand(req.URL, map[string]string{
+		"resource": c.resource,
+	})
+	return gensupport.SendRequest(c.ctx_, c.s.client, req)
+}
+
+// Do executes the "spanner.projects.instances.databases.getIamPolicy" call.
+// Exactly one of *Policy or error will be non-nil. Any non-2xx status
+// code is an error. Response headers are in either
+// *Policy.ServerResponse.Header or (if a response was returned at all)
+// in error.(*googleapi.Error).Header. Use googleapi.IsNotModified to
+// check whether the returned error was because http.StatusNotModified
+// was returned.
+func (c *ProjectsInstancesDatabasesGetIamPolicyCall) Do(opts ...googleapi.CallOption) (*Policy, error) {
+	gensupport.SetOptions(c.urlParams_, opts...)
+	res, err := c.doRequest("json")
+	if res != nil && res.StatusCode == http.StatusNotModified {
+		if res.Body != nil {
+			res.Body.Close()
+		}
+		return nil, &googleapi.Error{
+			Code:   res.StatusCode,
+			Header: res.Header,
+		}
+	}
+	if err != nil {
+		return nil, err
+	}
+	defer googleapi.CloseBody(res)
+	if err := googleapi.CheckResponse(res); err != nil {
+		return nil, err
+	}
+	ret := &Policy{
+		ServerResponse: googleapi.ServerResponse{
+			Header:         res.Header,
+			HTTPStatusCode: res.StatusCode,
+		},
+	}
+	target := &ret
+	if err := json.NewDecoder(res.Body).Decode(target); err != nil {
+		return nil, err
+	}
+	return ret, nil
+	// {
+	//   "description": "Gets the access control policy for a database resource. Returns an empty\npolicy if a database exists but does not have a policy set.\n\nAuthorization requires `spanner.databases.getIamPolicy` permission on\nresource.",
+	//   "flatPath": "v1/projects/{projectsId}/instances/{instancesId}/databases/{databasesId}:getIamPolicy",
+	//   "httpMethod": "POST",
+	//   "id": "spanner.projects.instances.databases.getIamPolicy",
+	//   "parameterOrder": [
+	//     "resource"
+	//   ],
+	//   "parameters": {
+	//     "resource": {
+	//       "description": "REQUIRED: The Cloud Spanner resource for which the policy is being retrieved. The format is `projects/\u003cproject ID\u003e/instances/\u003cinstance ID\u003e` for instance resources and `projects/\u003cproject ID\u003e/instances/\u003cinstance ID\u003e/databases/\u003cdatabase ID\u003e` for database resources.",
+	//       "location": "path",
+	//       "pattern": "^projects/[^/]+/instances/[^/]+/databases/[^/]+$",
+	//       "required": true,
+	//       "type": "string"
+	//     }
+	//   },
+	//   "path": "v1/{+resource}:getIamPolicy",
+	//   "request": {
+	//     "$ref": "GetIamPolicyRequest"
+	//   },
+	//   "response": {
+	//     "$ref": "Policy"
+	//   },
+	//   "scopes": [
+	//     "https://www.googleapis.com/auth/cloud-platform"
+	//   ]
+	// }
+
+}
+
+// method id "spanner.projects.instances.databases.list":
+
+type ProjectsInstancesDatabasesListCall struct {
+	s            *Service
+	parent       string
+	urlParams_   gensupport.URLParams
+	ifNoneMatch_ string
+	ctx_         context.Context
+	header_      http.Header
+}
+
+// List: Lists Cloud Spanner databases.
+func (r *ProjectsInstancesDatabasesService) List(parent string) *ProjectsInstancesDatabasesListCall {
+	c := &ProjectsInstancesDatabasesListCall{s: r.s, urlParams_: make(gensupport.URLParams)}
+	c.parent = parent
+	return c
+}
+
+// PageSize sets the optional parameter "pageSize": Number of databases
+// to be returned in the response. If 0 or less,
+// defaults to the server's maximum allowed page size.
+func (c *ProjectsInstancesDatabasesListCall) PageSize(pageSize int64) *ProjectsInstancesDatabasesListCall {
+	c.urlParams_.Set("pageSize", fmt.Sprint(pageSize))
+	return c
+}
+
+// PageToken sets the optional parameter "pageToken": If non-empty,
+// `page_token` should contain a
+// next_page_token from a
+// previous ListDatabasesResponse.
+func (c *ProjectsInstancesDatabasesListCall) PageToken(pageToken string) *ProjectsInstancesDatabasesListCall {
+	c.urlParams_.Set("pageToken", pageToken)
+	return c
+}
+
+// Fields allows partial responses to be retrieved. See
+// https://developers.google.com/gdata/docs/2.0/basics#PartialResponse
+// for more information.
+func (c *ProjectsInstancesDatabasesListCall) Fields(s ...googleapi.Field) *ProjectsInstancesDatabasesListCall {
+	c.urlParams_.Set("fields", googleapi.CombineFields(s))
+	return c
+}
+
+// IfNoneMatch sets the optional parameter which makes the operation
+// fail if the object's ETag matches the given value. This is useful for
+// getting updates only after the object has changed since the last
+// request. Use googleapi.IsNotModified to check whether the response
+// error from Do is the result of In-None-Match.
+func (c *ProjectsInstancesDatabasesListCall) IfNoneMatch(entityTag string) *ProjectsInstancesDatabasesListCall {
+	c.ifNoneMatch_ = entityTag
+	return c
+}
+
+// Context sets the context to be used in this call's Do method. Any
+// pending HTTP request will be aborted if the provided context is
+// canceled.
+func (c *ProjectsInstancesDatabasesListCall) Context(ctx context.Context) *ProjectsInstancesDatabasesListCall {
+	c.ctx_ = ctx
+	return c
+}
+
+// Header returns an http.Header that can be modified by the caller to
+// add HTTP headers to the request.
+func (c *ProjectsInstancesDatabasesListCall) Header() http.Header {
+	if c.header_ == nil {
+		c.header_ = make(http.Header)
+	}
+	return c.header_
+}
+
+func (c *ProjectsInstancesDatabasesListCall) doRequest(alt string) (*http.Response, error) {
+	reqHeaders := make(http.Header)
+	for k, v := range c.header_ {
+		reqHeaders[k] = v
+	}
+	reqHeaders.Set("User-Agent", c.s.userAgent())
+	if c.ifNoneMatch_ != "" {
+		reqHeaders.Set("If-None-Match", c.ifNoneMatch_)
+	}
+	var body io.Reader = nil
+	c.urlParams_.Set("alt", alt)
+	urls := googleapi.ResolveRelative(c.s.BasePath, "v1/{+parent}/databases")
+	urls += "?" + c.urlParams_.Encode()
+	req, _ := http.NewRequest("GET", urls, body)
+	req.Header = reqHeaders
+	googleapi.Expand(req.URL, map[string]string{
+		"parent": c.parent,
+	})
+	return gensupport.SendRequest(c.ctx_, c.s.client, req)
+}
+
+// Do executes the "spanner.projects.instances.databases.list" call.
+// Exactly one of *ListDatabasesResponse or error will be non-nil. Any
+// non-2xx status code is an error. Response headers are in either
+// *ListDatabasesResponse.ServerResponse.Header or (if a response was
+// returned at all) in error.(*googleapi.Error).Header. Use
+// googleapi.IsNotModified to check whether the returned error was
+// because http.StatusNotModified was returned.
+func (c *ProjectsInstancesDatabasesListCall) Do(opts ...googleapi.CallOption) (*ListDatabasesResponse, error) {
+	gensupport.SetOptions(c.urlParams_, opts...)
+	res, err := c.doRequest("json")
+	if res != nil && res.StatusCode == http.StatusNotModified {
+		if res.Body != nil {
+			res.Body.Close()
+		}
+		return nil, &googleapi.Error{
+			Code:   res.StatusCode,
+			Header: res.Header,
+		}
+	}
+	if err != nil {
+		return nil, err
+	}
+	defer googleapi.CloseBody(res)
+	if err := googleapi.CheckResponse(res); err != nil {
+		return nil, err
+	}
+	ret := &ListDatabasesResponse{
+		ServerResponse: googleapi.ServerResponse{
+			Header:         res.Header,
+			HTTPStatusCode: res.StatusCode,
+		},
+	}
+	target := &ret
+	if err := json.NewDecoder(res.Body).Decode(target); err != nil {
+		return nil, err
+	}
+	return ret, nil
+	// {
+	//   "description": "Lists Cloud Spanner databases.",
+	//   "flatPath": "v1/projects/{projectsId}/instances/{instancesId}/databases",
+	//   "httpMethod": "GET",
+	//   "id": "spanner.projects.instances.databases.list",
+	//   "parameterOrder": [
+	//     "parent"
+	//   ],
+	//   "parameters": {
+	//     "pageSize": {
+	//       "description": "Number of databases to be returned in the response. If 0 or less,\ndefaults to the server's maximum allowed page size.",
+	//       "format": "int32",
+	//       "location": "query",
+	//       "type": "integer"
+	//     },
+	//     "pageToken": {
+	//       "description": "If non-empty, `page_token` should contain a\nnext_page_token from a\nprevious ListDatabasesResponse.",
+	//       "location": "query",
+	//       "type": "string"
+	//     },
+	//     "parent": {
+	//       "description": "Required. The instance whose databases should be listed.\nValues are of the form `projects/\u003cproject\u003e/instances/\u003cinstance\u003e`.",
+	//       "location": "path",
+	//       "pattern": "^projects/[^/]+/instances/[^/]+$",
+	//       "required": true,
+	//       "type": "string"
+	//     }
+	//   },
+	//   "path": "v1/{+parent}/databases",
+	//   "response": {
+	//     "$ref": "ListDatabasesResponse"
+	//   },
+	//   "scopes": [
+	//     "https://www.googleapis.com/auth/cloud-platform"
+	//   ]
+	// }
+
+}
+
+// Pages invokes f for each page of results.
+// A non-nil error returned from f will halt the iteration.
+// The provided context supersedes any context provided to the Context method.
+func (c *ProjectsInstancesDatabasesListCall) Pages(ctx context.Context, f func(*ListDatabasesResponse) error) error {
+	c.ctx_ = ctx
+	defer c.PageToken(c.urlParams_.Get("pageToken")) // reset paging to original point
+	for {
+		x, err := c.Do()
+		if err != nil {
+			return err
+		}
+		if err := f(x); err != nil {
+			return err
+		}
+		if x.NextPageToken == "" {
+			return nil
+		}
+		c.PageToken(x.NextPageToken)
+	}
+}
+
+// method id "spanner.projects.instances.databases.setIamPolicy":
+
+type ProjectsInstancesDatabasesSetIamPolicyCall struct {
+	s                   *Service
+	resource            string
+	setiampolicyrequest *SetIamPolicyRequest
+	urlParams_          gensupport.URLParams
+	ctx_                context.Context
+	header_             http.Header
+}
+
+// SetIamPolicy: Sets the access control policy on a database resource.
+// Replaces any
+// existing policy.
+//
+// Authorization requires `spanner.databases.setIamPolicy` permission
+// on
+// resource.
+func (r *ProjectsInstancesDatabasesService) SetIamPolicy(resource string, setiampolicyrequest *SetIamPolicyRequest) *ProjectsInstancesDatabasesSetIamPolicyCall {
+	c := &ProjectsInstancesDatabasesSetIamPolicyCall{s: r.s, urlParams_: make(gensupport.URLParams)}
+	c.resource = resource
+	c.setiampolicyrequest = setiampolicyrequest
+	return c
+}
+
+// Fields allows partial responses to be retrieved. See
+// https://developers.google.com/gdata/docs/2.0/basics#PartialResponse
+// for more information.
+func (c *ProjectsInstancesDatabasesSetIamPolicyCall) Fields(s ...googleapi.Field) *ProjectsInstancesDatabasesSetIamPolicyCall {
+	c.urlParams_.Set("fields", googleapi.CombineFields(s))
+	return c
+}
+
+// Context sets the context to be used in this call's Do method. Any
+// pending HTTP request will be aborted if the provided context is
+// canceled.
+func (c *ProjectsInstancesDatabasesSetIamPolicyCall) Context(ctx context.Context) *ProjectsInstancesDatabasesSetIamPolicyCall {
+	c.ctx_ = ctx
+	return c
+}
+
+// Header returns an http.Header that can be modified by the caller to
+// add HTTP headers to the request.
+func (c *ProjectsInstancesDatabasesSetIamPolicyCall) Header() http.Header {
+	if c.header_ == nil {
+		c.header_ = make(http.Header)
+	}
+	return c.header_
+}
+
+func (c *ProjectsInstancesDatabasesSetIamPolicyCall) doRequest(alt string) (*http.Response, error) {
+	reqHeaders := make(http.Header)
+	for k, v := range c.header_ {
+		reqHeaders[k] = v
+	}
+	reqHeaders.Set("User-Agent", c.s.userAgent())
+	var body io.Reader = nil
+	body, err := googleapi.WithoutDataWrapper.JSONReader(c.setiampolicyrequest)
+	if err != nil {
+		return nil, err
+	}
+	reqHeaders.Set("Content-Type", "application/json")
+	c.urlParams_.Set("alt", alt)
+	urls := googleapi.ResolveRelative(c.s.BasePath, "v1/{+resource}:setIamPolicy")
+	urls += "?" + c.urlParams_.Encode()
+	req, _ := http.NewRequest("POST", urls, body)
+	req.Header = reqHeaders
+	googleapi.Expand(req.URL, map[string]string{
+		"resource": c.resource,
+	})
+	return gensupport.SendRequest(c.ctx_, c.s.client, req)
+}
+
+// Do executes the "spanner.projects.instances.databases.setIamPolicy" call.
+// Exactly one of *Policy or error will be non-nil. Any non-2xx status
+// code is an error. Response headers are in either
+// *Policy.ServerResponse.Header or (if a response was returned at all)
+// in error.(*googleapi.Error).Header. Use googleapi.IsNotModified to
+// check whether the returned error was because http.StatusNotModified
+// was returned.
+func (c *ProjectsInstancesDatabasesSetIamPolicyCall) Do(opts ...googleapi.CallOption) (*Policy, error) {
+	gensupport.SetOptions(c.urlParams_, opts...)
+	res, err := c.doRequest("json")
+	if res != nil && res.StatusCode == http.StatusNotModified {
+		if res.Body != nil {
+			res.Body.Close()
+		}
+		return nil, &googleapi.Error{
+			Code:   res.StatusCode,
+			Header: res.Header,
+		}
+	}
+	if err != nil {
+		return nil, err
+	}
+	defer googleapi.CloseBody(res)
+	if err := googleapi.CheckResponse(res); err != nil {
+		return nil, err
+	}
+	ret := &Policy{
+		ServerResponse: googleapi.ServerResponse{
+			Header:         res.Header,
+			HTTPStatusCode: res.StatusCode,
+		},
+	}
+	target := &ret
+	if err := json.NewDecoder(res.Body).Decode(target); err != nil {
+		return nil, err
+	}
+	return ret, nil
+	// {
+	//   "description": "Sets the access control policy on a database resource. Replaces any\nexisting policy.\n\nAuthorization requires `spanner.databases.setIamPolicy` permission on\nresource.",
+	//   "flatPath": "v1/projects/{projectsId}/instances/{instancesId}/databases/{databasesId}:setIamPolicy",
+	//   "httpMethod": "POST",
+	//   "id": "spanner.projects.instances.databases.setIamPolicy",
+	//   "parameterOrder": [
+	//     "resource"
+	//   ],
+	//   "parameters": {
+	//     "resource": {
+	//       "description": "REQUIRED: The Cloud Spanner resource for which the policy is being set. The format is `projects/\u003cproject ID\u003e/instances/\u003cinstance ID\u003e` for instance resources and `projects/\u003cproject ID\u003e/instances/\u003cinstance ID\u003e/databases/\u003cdatabase ID\u003e` for databases resources.",
+	//       "location": "path",
+	//       "pattern": "^projects/[^/]+/instances/[^/]+/databases/[^/]+$",
+	//       "required": true,
+	//       "type": "string"
+	//     }
+	//   },
+	//   "path": "v1/{+resource}:setIamPolicy",
+	//   "request": {
+	//     "$ref": "SetIamPolicyRequest"
+	//   },
+	//   "response": {
+	//     "$ref": "Policy"
+	//   },
+	//   "scopes": [
+	//     "https://www.googleapis.com/auth/cloud-platform"
+	//   ]
+	// }
+
+}
+
+// method id "spanner.projects.instances.databases.testIamPermissions":
+
+type ProjectsInstancesDatabasesTestIamPermissionsCall struct {
+	s                         *Service
+	resource                  string
+	testiampermissionsrequest *TestIamPermissionsRequest
+	urlParams_                gensupport.URLParams
+	ctx_                      context.Context
+	header_                   http.Header
+}
+
+// TestIamPermissions: Returns permissions that the caller has on the
+// specified database resource.
+//
+// Attempting this RPC on a non-existent Cloud Spanner database will
+// result in
+// a NOT_FOUND error if the user has `spanner.databases.list` permission
+// on
+// the containing Cloud Spanner instance. Otherwise returns an empty set
+// of
+// permissions.
+func (r *ProjectsInstancesDatabasesService) TestIamPermissions(resource string, testiampermissionsrequest *TestIamPermissionsRequest) *ProjectsInstancesDatabasesTestIamPermissionsCall {
+	c := &ProjectsInstancesDatabasesTestIamPermissionsCall{s: r.s, urlParams_: make(gensupport.URLParams)}
+	c.resource = resource
+	c.testiampermissionsrequest = testiampermissionsrequest
+	return c
+}
+
+// Fields allows partial responses to be retrieved. See
+// https://developers.google.com/gdata/docs/2.0/basics#PartialResponse
+// for more information.
+func (c *ProjectsInstancesDatabasesTestIamPermissionsCall) Fields(s ...googleapi.Field) *ProjectsInstancesDatabasesTestIamPermissionsCall {
+	c.urlParams_.Set("fields", googleapi.CombineFields(s))
+	return c
+}
+
+// Context sets the context to be used in this call's Do method. Any
+// pending HTTP request will be aborted if the provided context is
+// canceled.
+func (c *ProjectsInstancesDatabasesTestIamPermissionsCall) Context(ctx context.Context) *ProjectsInstancesDatabasesTestIamPermissionsCall {
+	c.ctx_ = ctx
+	return c
+}
+
+// Header returns an http.Header that can be modified by the caller to
+// add HTTP headers to the request.
+func (c *ProjectsInstancesDatabasesTestIamPermissionsCall) Header() http.Header {
+	if c.header_ == nil {
+		c.header_ = make(http.Header)
+	}
+	return c.header_
+}
+
+func (c *ProjectsInstancesDatabasesTestIamPermissionsCall) doRequest(alt string) (*http.Response, error) {
+	reqHeaders := make(http.Header)
+	for k, v := range c.header_ {
+		reqHeaders[k] = v
+	}
+	reqHeaders.Set("User-Agent", c.s.userAgent())
+	var body io.Reader = nil
+	body, err := googleapi.WithoutDataWrapper.JSONReader(c.testiampermissionsrequest)
+	if err != nil {
+		return nil, err
+	}
+	reqHeaders.Set("Content-Type", "application/json")
+	c.urlParams_.Set("alt", alt)
+	urls := googleapi.ResolveRelative(c.s.BasePath, "v1/{+resource}:testIamPermissions")
+	urls += "?" + c.urlParams_.Encode()
+	req, _ := http.NewRequest("POST", urls, body)
+	req.Header = reqHeaders
+	googleapi.Expand(req.URL, map[string]string{
+		"resource": c.resource,
+	})
+	return gensupport.SendRequest(c.ctx_, c.s.client, req)
+}
+
+// Do executes the "spanner.projects.instances.databases.testIamPermissions" call.
+// Exactly one of *TestIamPermissionsResponse or error will be non-nil.
+// Any non-2xx status code is an error. Response headers are in either
+// *TestIamPermissionsResponse.ServerResponse.Header or (if a response
+// was returned at all) in error.(*googleapi.Error).Header. Use
+// googleapi.IsNotModified to check whether the returned error was
+// because http.StatusNotModified was returned.
+func (c *ProjectsInstancesDatabasesTestIamPermissionsCall) Do(opts ...googleapi.CallOption) (*TestIamPermissionsResponse, error) {
+	gensupport.SetOptions(c.urlParams_, opts...)
+	res, err := c.doRequest("json")
+	if res != nil && res.StatusCode == http.StatusNotModified {
+		if res.Body != nil {
+			res.Body.Close()
+		}
+		return nil, &googleapi.Error{
+			Code:   res.StatusCode,
+			Header: res.Header,
+		}
+	}
+	if err != nil {
+		return nil, err
+	}
+	defer googleapi.CloseBody(res)
+	if err := googleapi.CheckResponse(res); err != nil {
+		return nil, err
+	}
+	ret := &TestIamPermissionsResponse{
+		ServerResponse: googleapi.ServerResponse{
+			Header:         res.Header,
+			HTTPStatusCode: res.StatusCode,
+		},
+	}
+	target := &ret
+	if err := json.NewDecoder(res.Body).Decode(target); err != nil {
+		return nil, err
+	}
+	return ret, nil
+	// {
+	//   "description": "Returns permissions that the caller has on the specified database resource.\n\nAttempting this RPC on a non-existent Cloud Spanner database will result in\na NOT_FOUND error if the user has `spanner.databases.list` permission on\nthe containing Cloud Spanner instance. Otherwise returns an empty set of\npermissions.",
+	//   "flatPath": "v1/projects/{projectsId}/instances/{instancesId}/databases/{databasesId}:testIamPermissions",
+	//   "httpMethod": "POST",
+	//   "id": "spanner.projects.instances.databases.testIamPermissions",
+	//   "parameterOrder": [
+	//     "resource"
+	//   ],
+	//   "parameters": {
+	//     "resource": {
+	//       "description": "REQUIRED: The Cloud Spanner resource for which permissions are being tested. The format is `projects/\u003cproject ID\u003e/instances/\u003cinstance ID\u003e` for instance resources and `projects/\u003cproject ID\u003e/instances/\u003cinstance ID\u003e/databases/\u003cdatabase ID\u003e` for database resources.",
+	//       "location": "path",
+	//       "pattern": "^projects/[^/]+/instances/[^/]+/databases/[^/]+$",
+	//       "required": true,
+	//       "type": "string"
+	//     }
+	//   },
+	//   "path": "v1/{+resource}:testIamPermissions",
+	//   "request": {
+	//     "$ref": "TestIamPermissionsRequest"
+	//   },
+	//   "response": {
+	//     "$ref": "TestIamPermissionsResponse"
+	//   },
+	//   "scopes": [
+	//     "https://www.googleapis.com/auth/cloud-platform"
+	//   ]
+	// }
+
+}
+
+// method id "spanner.projects.instances.databases.updateDdl":
+
+type ProjectsInstancesDatabasesUpdateDdlCall struct {
+	s                        *Service
+	database                 string
+	updatedatabaseddlrequest *UpdateDatabaseDdlRequest
+	urlParams_               gensupport.URLParams
+	ctx_                     context.Context
+	header_                  http.Header
+}
+
+// UpdateDdl: Updates the schema of a Cloud Spanner database
+// by
+// creating/altering/dropping tables, columns, indexes, etc. The
+// returned
+// long-running operation will have a name of
+// the format `<database_name>/operations/<operation_id>` and can be
+// used to
+// track execution of the schema change(s). The
+// metadata field type is
+// UpdateDatabaseDdlMetadata.  The operation has no response.
+func (r *ProjectsInstancesDatabasesService) UpdateDdl(database string, updatedatabaseddlrequest *UpdateDatabaseDdlRequest) *ProjectsInstancesDatabasesUpdateDdlCall {
+	c := &ProjectsInstancesDatabasesUpdateDdlCall{s: r.s, urlParams_: make(gensupport.URLParams)}
+	c.database = database
+	c.updatedatabaseddlrequest = updatedatabaseddlrequest
+	return c
+}
+
+// Fields allows partial responses to be retrieved. See
+// https://developers.google.com/gdata/docs/2.0/basics#PartialResponse
+// for more information.
+func (c *ProjectsInstancesDatabasesUpdateDdlCall) Fields(s ...googleapi.Field) *ProjectsInstancesDatabasesUpdateDdlCall {
+	c.urlParams_.Set("fields", googleapi.CombineFields(s))
+	return c
+}
+
+// Context sets the context to be used in this call's Do method. Any
+// pending HTTP request will be aborted if the provided context is
+// canceled.
+func (c *ProjectsInstancesDatabasesUpdateDdlCall) Context(ctx context.Context) *ProjectsInstancesDatabasesUpdateDdlCall {
+	c.ctx_ = ctx
+	return c
+}
+
+// Header returns an http.Header that can be modified by the caller to
+// add HTTP headers to the request.
+func (c *ProjectsInstancesDatabasesUpdateDdlCall) Header() http.Header {
+	if c.header_ == nil {
+		c.header_ = make(http.Header)
+	}
+	return c.header_
+}
+
+func (c *ProjectsInstancesDatabasesUpdateDdlCall) doRequest(alt string) (*http.Response, error) {
+	reqHeaders := make(http.Header)
+	for k, v := range c.header_ {
+		reqHeaders[k] = v
+	}
+	reqHeaders.Set("User-Agent", c.s.userAgent())
+	var body io.Reader = nil
+	body, err := googleapi.WithoutDataWrapper.JSONReader(c.updatedatabaseddlrequest)
+	if err != nil {
+		return nil, err
+	}
+	reqHeaders.Set("Content-Type", "application/json")
+	c.urlParams_.Set("alt", alt)
+	urls := googleapi.ResolveRelative(c.s.BasePath, "v1/{+database}/ddl")
+	urls += "?" + c.urlParams_.Encode()
+	req, _ := http.NewRequest("PATCH", urls, body)
+	req.Header = reqHeaders
+	googleapi.Expand(req.URL, map[string]string{
+		"database": c.database,
+	})
+	return gensupport.SendRequest(c.ctx_, c.s.client, req)
+}
+
+// Do executes the "spanner.projects.instances.databases.updateDdl" call.
+// Exactly one of *Operation or error will be non-nil. Any non-2xx
+// status code is an error. Response headers are in either
+// *Operation.ServerResponse.Header or (if a response was returned at
+// all) in error.(*googleapi.Error).Header. Use googleapi.IsNotModified
+// to check whether the returned error was because
+// http.StatusNotModified was returned.
+func (c *ProjectsInstancesDatabasesUpdateDdlCall) Do(opts ...googleapi.CallOption) (*Operation, error) {
+	gensupport.SetOptions(c.urlParams_, opts...)
+	res, err := c.doRequest("json")
+	if res != nil && res.StatusCode == http.StatusNotModified {
+		if res.Body != nil {
+			res.Body.Close()
+		}
+		return nil, &googleapi.Error{
+			Code:   res.StatusCode,
+			Header: res.Header,
+		}
+	}
+	if err != nil {
+		return nil, err
+	}
+	defer googleapi.CloseBody(res)
+	if err := googleapi.CheckResponse(res); err != nil {
+		return nil, err
+	}
+	ret := &Operation{
+		ServerResponse: googleapi.ServerResponse{
+			Header:         res.Header,
+			HTTPStatusCode: res.StatusCode,
+		},
+	}
+	target := &ret
+	if err := json.NewDecoder(res.Body).Decode(target); err != nil {
+		return nil, err
+	}
+	return ret, nil
+	// {
+	//   "description": "Updates the schema of a Cloud Spanner database by\ncreating/altering/dropping tables, columns, indexes, etc. The returned\nlong-running operation will have a name of\nthe format `\u003cdatabase_name\u003e/operations/\u003coperation_id\u003e` and can be used to\ntrack execution of the schema change(s). The\nmetadata field type is\nUpdateDatabaseDdlMetadata.  The operation has no response.",
+	//   "flatPath": "v1/projects/{projectsId}/instances/{instancesId}/databases/{databasesId}/ddl",
+	//   "httpMethod": "PATCH",
+	//   "id": "spanner.projects.instances.databases.updateDdl",
+	//   "parameterOrder": [
+	//     "database"
+	//   ],
+	//   "parameters": {
+	//     "database": {
+	//       "description": "Required. The database to update.",
+	//       "location": "path",
+	//       "pattern": "^projects/[^/]+/instances/[^/]+/databases/[^/]+$",
+	//       "required": true,
+	//       "type": "string"
+	//     }
+	//   },
+	//   "path": "v1/{+database}/ddl",
+	//   "request": {
+	//     "$ref": "UpdateDatabaseDdlRequest"
+	//   },
+	//   "response": {
+	//     "$ref": "Operation"
+	//   },
+	//   "scopes": [
+	//     "https://www.googleapis.com/auth/cloud-platform"
+	//   ]
+	// }
+
+}
+
+// method id "spanner.projects.instances.databases.operations.cancel":
+
+type ProjectsInstancesDatabasesOperationsCancelCall struct {
+	s          *Service
+	name       string
+	urlParams_ gensupport.URLParams
+	ctx_       context.Context
+	header_    http.Header
+}
+
+// Cancel: 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`.
+func (r *ProjectsInstancesDatabasesOperationsService) Cancel(name string) *ProjectsInstancesDatabasesOperationsCancelCall {
+	c := &ProjectsInstancesDatabasesOperationsCancelCall{s: r.s, urlParams_: make(gensupport.URLParams)}
+	c.name = name
+	return c
+}
+
+// Fields allows partial responses to be retrieved. See
+// https://developers.google.com/gdata/docs/2.0/basics#PartialResponse
+// for more information.
+func (c *ProjectsInstancesDatabasesOperationsCancelCall) Fields(s ...googleapi.Field) *ProjectsInstancesDatabasesOperationsCancelCall {
+	c.urlParams_.Set("fields", googleapi.CombineFields(s))
+	return c
+}
+
+// Context sets the context to be used in this call's Do method. Any
+// pending HTTP request will be aborted if the provided context is
+// canceled.
+func (c *ProjectsInstancesDatabasesOperationsCancelCall) Context(ctx context.Context) *ProjectsInstancesDatabasesOperationsCancelCall {
+	c.ctx_ = ctx
+	return c
+}
+
+// Header returns an http.Header that can be modified by the caller to
+// add HTTP headers to the request.
+func (c *ProjectsInstancesDatabasesOperationsCancelCall) Header() http.Header {
+	if c.header_ == nil {
+		c.header_ = make(http.Header)
+	}
+	return c.header_
+}
+
+func (c *ProjectsInstancesDatabasesOperationsCancelCall) doRequest(alt string) (*http.Response, error) {
+	reqHeaders := make(http.Header)
+	for k, v := range c.header_ {
+		reqHeaders[k] = v
+	}
+	reqHeaders.Set("User-Agent", c.s.userAgent())
+	var body io.Reader = nil
+	c.urlParams_.Set("alt", alt)
+	urls := googleapi.ResolveRelative(c.s.BasePath, "v1/{+name}:cancel")
+	urls += "?" + c.urlParams_.Encode()
+	req, _ := http.NewRequest("POST", urls, body)
+	req.Header = reqHeaders
+	googleapi.Expand(req.URL, map[string]string{
+		"name": c.name,
+	})
+	return gensupport.SendRequest(c.ctx_, c.s.client, req)
+}
+
+// Do executes the "spanner.projects.instances.databases.operations.cancel" call.
+// Exactly one of *Empty or error will be non-nil. Any non-2xx status
+// code is an error. Response headers are in either
+// *Empty.ServerResponse.Header or (if a response was returned at all)
+// in error.(*googleapi.Error).Header. Use googleapi.IsNotModified to
+// check whether the returned error was because http.StatusNotModified
+// was returned.
+func (c *ProjectsInstancesDatabasesOperationsCancelCall) Do(opts ...googleapi.CallOption) (*Empty, error) {
+	gensupport.SetOptions(c.urlParams_, opts...)
+	res, err := c.doRequest("json")
+	if res != nil && res.StatusCode == http.StatusNotModified {
+		if res.Body != nil {
+			res.Body.Close()
+		}
+		return nil, &googleapi.Error{
+			Code:   res.StatusCode,
+			Header: res.Header,
+		}
+	}
+	if err != nil {
+		return nil, err
+	}
+	defer googleapi.CloseBody(res)
+	if err := googleapi.CheckResponse(res); err != nil {
+		return nil, err
+	}
+	ret := &Empty{
+		ServerResponse: googleapi.ServerResponse{
+			Header:         res.Header,
+			HTTPStatusCode: res.StatusCode,
+		},
+	}
+	target := &ret
+	if err := json.NewDecoder(res.Body).Decode(target); err != nil {
+		return nil, err
+	}
+	return ret, nil
+	// {
+	//   "description": "Starts asynchronous cancellation on a long-running operation.  The server\nmakes a best effort to cancel the operation, but success is not\nguaranteed.  If the server doesn't support this method, it returns\n`google.rpc.Code.UNIMPLEMENTED`.  Clients can use\nOperations.GetOperation or\nother methods to check whether the cancellation succeeded or whether the\noperation completed despite cancellation. On successful cancellation,\nthe operation is not deleted; instead, it becomes an operation with\nan Operation.error value with a google.rpc.Status.code of 1,\ncorresponding to `Code.CANCELLED`.",
+	//   "flatPath": "v1/projects/{projectsId}/instances/{instancesId}/databases/{databasesId}/operations/{operationsId}:cancel",
+	//   "httpMethod": "POST",
+	//   "id": "spanner.projects.instances.databases.operations.cancel",
+	//   "parameterOrder": [
+	//     "name"
+	//   ],
+	//   "parameters": {
+	//     "name": {
+	//       "description": "The name of the operation resource to be cancelled.",
+	//       "location": "path",
+	//       "pattern": "^projects/[^/]+/instances/[^/]+/databases/[^/]+/operations/[^/]+$",
+	//       "required": true,
+	//       "type": "string"
+	//     }
+	//   },
+	//   "path": "v1/{+name}:cancel",
+	//   "response": {
+	//     "$ref": "Empty"
+	//   },
+	//   "scopes": [
+	//     "https://www.googleapis.com/auth/cloud-platform"
+	//   ]
+	// }
+
+}
+
+// method id "spanner.projects.instances.databases.operations.delete":
+
+type ProjectsInstancesDatabasesOperationsDeleteCall struct {
+	s          *Service
+	name       string
+	urlParams_ gensupport.URLParams
+	ctx_       context.Context
+	header_    http.Header
+}
+
+// Delete: 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`.
+func (r *ProjectsInstancesDatabasesOperationsService) Delete(name string) *ProjectsInstancesDatabasesOperationsDeleteCall {
+	c := &ProjectsInstancesDatabasesOperationsDeleteCall{s: r.s, urlParams_: make(gensupport.URLParams)}
+	c.name = name
+	return c
+}
+
+// Fields allows partial responses to be retrieved. See
+// https://developers.google.com/gdata/docs/2.0/basics#PartialResponse
+// for more information.
+func (c *ProjectsInstancesDatabasesOperationsDeleteCall) Fields(s ...googleapi.Field) *ProjectsInstancesDatabasesOperationsDeleteCall {
+	c.urlParams_.Set("fields", googleapi.CombineFields(s))
+	return c
+}
+
+// Context sets the context to be used in this call's Do method. Any
+// pending HTTP request will be aborted if the provided context is
+// canceled.
+func (c *ProjectsInstancesDatabasesOperationsDeleteCall) Context(ctx context.Context) *ProjectsInstancesDatabasesOperationsDeleteCall {
+	c.ctx_ = ctx
+	return c
+}
+
+// Header returns an http.Header that can be modified by the caller to
+// add HTTP headers to the request.
+func (c *ProjectsInstancesDatabasesOperationsDeleteCall) Header() http.Header {
+	if c.header_ == nil {
+		c.header_ = make(http.Header)
+	}
+	return c.header_
+}
+
+func (c *ProjectsInstancesDatabasesOperationsDeleteCall) doRequest(alt string) (*http.Response, error) {
+	reqHeaders := make(http.Header)
+	for k, v := range c.header_ {
+		reqHeaders[k] = v
+	}
+	reqHeaders.Set("User-Agent", c.s.userAgent())
+	var body io.Reader = nil
+	c.urlParams_.Set("alt", alt)
+	urls := googleapi.ResolveRelative(c.s.BasePath, "v1/{+name}")
+	urls += "?" + c.urlParams_.Encode()
+	req, _ := http.NewRequest("DELETE", urls, body)
+	req.Header = reqHeaders
+	googleapi.Expand(req.URL, map[string]string{
+		"name": c.name,
+	})
+	return gensupport.SendRequest(c.ctx_, c.s.client, req)
+}
+
+// Do executes the "spanner.projects.instances.databases.operations.delete" call.
+// Exactly one of *Empty or error will be non-nil. Any non-2xx status
+// code is an error. Response headers are in either
+// *Empty.ServerResponse.Header or (if a response was returned at all)
+// in error.(*googleapi.Error).Header. Use googleapi.IsNotModified to
+// check whether the returned error was because http.StatusNotModified
+// was returned.
+func (c *ProjectsInstancesDatabasesOperationsDeleteCall) Do(opts ...googleapi.CallOption) (*Empty, error) {
+	gensupport.SetOptions(c.urlParams_, opts...)
+	res, err := c.doRequest("json")
+	if res != nil && res.StatusCode == http.StatusNotModified {
+		if res.Body != nil {
+			res.Body.Close()
+		}
+		return nil, &googleapi.Error{
+			Code:   res.StatusCode,
+			Header: res.Header,
+		}
+	}
+	if err != nil {
+		return nil, err
+	}
+	defer googleapi.CloseBody(res)
+	if err := googleapi.CheckResponse(res); err != nil {
+		return nil, err
+	}
+	ret := &Empty{
+		ServerResponse: googleapi.ServerResponse{
+			Header:         res.Header,
+			HTTPStatusCode: res.StatusCode,
+		},
+	}
+	target := &ret
+	if err := json.NewDecoder(res.Body).Decode(target); err != nil {
+		return nil, err
+	}
+	return ret, nil
+	// {
+	//   "description": "Deletes a long-running operation. This method indicates that the client is\nno longer interested in the operation result. It does not cancel the\noperation. If the server doesn't support this method, it returns\n`google.rpc.Code.UNIMPLEMENTED`.",
+	//   "flatPath": "v1/projects/{projectsId}/instances/{instancesId}/databases/{databasesId}/operations/{operationsId}",
+	//   "httpMethod": "DELETE",
+	//   "id": "spanner.projects.instances.databases.operations.delete",
+	//   "parameterOrder": [
+	//     "name"
+	//   ],
+	//   "parameters": {
+	//     "name": {
+	//       "description": "The name of the operation resource to be deleted.",
+	//       "location": "path",
+	//       "pattern": "^projects/[^/]+/instances/[^/]+/databases/[^/]+/operations/[^/]+$",
+	//       "required": true,
+	//       "type": "string"
+	//     }
+	//   },
+	//   "path": "v1/{+name}",
+	//   "response": {
+	//     "$ref": "Empty"
+	//   },
+	//   "scopes": [
+	//     "https://www.googleapis.com/auth/cloud-platform"
+	//   ]
+	// }
+
+}
+
+// method id "spanner.projects.instances.databases.operations.get":
+
+type ProjectsInstancesDatabasesOperationsGetCall struct {
+	s            *Service
+	name         string
+	urlParams_   gensupport.URLParams
+	ifNoneMatch_ string
+	ctx_         context.Context
+	header_      http.Header
+}
+
+// Get: 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.
+func (r *ProjectsInstancesDatabasesOperationsService) Get(name string) *ProjectsInstancesDatabasesOperationsGetCall {
+	c := &ProjectsInstancesDatabasesOperationsGetCall{s: r.s, urlParams_: make(gensupport.URLParams)}
+	c.name = name
+	return c
+}
+
+// Fields allows partial responses to be retrieved. See
+// https://developers.google.com/gdata/docs/2.0/basics#PartialResponse
+// for more information.
+func (c *ProjectsInstancesDatabasesOperationsGetCall) Fields(s ...googleapi.Field) *ProjectsInstancesDatabasesOperationsGetCall {
+	c.urlParams_.Set("fields", googleapi.CombineFields(s))
+	return c
+}
+
+// IfNoneMatch sets the optional parameter which makes the operation
+// fail if the object's ETag matches the given value. This is useful for
+// getting updates only after the object has changed since the last
+// request. Use googleapi.IsNotModified to check whether the response
+// error from Do is the result of In-None-Match.
+func (c *ProjectsInstancesDatabasesOperationsGetCall) IfNoneMatch(entityTag string) *ProjectsInstancesDatabasesOperationsGetCall {
+	c.ifNoneMatch_ = entityTag
+	return c
+}
+
+// Context sets the context to be used in this call's Do method. Any
+// pending HTTP request will be aborted if the provided context is
+// canceled.
+func (c *ProjectsInstancesDatabasesOperationsGetCall) Context(ctx context.Context) *ProjectsInstancesDatabasesOperationsGetCall {
+	c.ctx_ = ctx
+	return c
+}
+
+// Header returns an http.Header that can be modified by the caller to
+// add HTTP headers to the request.
+func (c *ProjectsInstancesDatabasesOperationsGetCall) Header() http.Header {
+	if c.header_ == nil {
+		c.header_ = make(http.Header)
+	}
+	return c.header_
+}
+
+func (c *ProjectsInstancesDatabasesOperationsGetCall) doRequest(alt string) (*http.Response, error) {
+	reqHeaders := make(http.Header)
+	for k, v := range c.header_ {
+		reqHeaders[k] = v
+	}
+	reqHeaders.Set("User-Agent", c.s.userAgent())
+	if c.ifNoneMatch_ != "" {
+		reqHeaders.Set("If-None-Match", c.ifNoneMatch_)
+	}
+	var body io.Reader = nil
+	c.urlParams_.Set("alt", alt)
+	urls := googleapi.ResolveRelative(c.s.BasePath, "v1/{+name}")
+	urls += "?" + c.urlParams_.Encode()
+	req, _ := http.NewRequest("GET", urls, body)
+	req.Header = reqHeaders
+	googleapi.Expand(req.URL, map[string]string{
+		"name": c.name,
+	})
+	return gensupport.SendRequest(c.ctx_, c.s.client, req)
+}
+
+// Do executes the "spanner.projects.instances.databases.operations.get" call.
+// Exactly one of *Operation or error will be non-nil. Any non-2xx
+// status code is an error. Response headers are in either
+// *Operation.ServerResponse.Header or (if a response was returned at
+// all) in error.(*googleapi.Error).Header. Use googleapi.IsNotModified
+// to check whether the returned error was because
+// http.StatusNotModified was returned.
+func (c *ProjectsInstancesDatabasesOperationsGetCall) Do(opts ...googleapi.CallOption) (*Operation, error) {
+	gensupport.SetOptions(c.urlParams_, opts...)
+	res, err := c.doRequest("json")
+	if res != nil && res.StatusCode == http.StatusNotModified {
+		if res.Body != nil {
+			res.Body.Close()
+		}
+		return nil, &googleapi.Error{
+			Code:   res.StatusCode,
+			Header: res.Header,
+		}
+	}
+	if err != nil {
+		return nil, err
+	}
+	defer googleapi.CloseBody(res)
+	if err := googleapi.CheckResponse(res); err != nil {
+		return nil, err
+	}
+	ret := &Operation{
+		ServerResponse: googleapi.ServerResponse{
+			Header:         res.Header,
+			HTTPStatusCode: res.StatusCode,
+		},
+	}
+	target := &ret
+	if err := json.NewDecoder(res.Body).Decode(target); err != nil {
+		return nil, err
+	}
+	return ret, nil
+	// {
+	//   "description": "Gets the latest state of a long-running operation.  Clients can use this\nmethod to poll the operation result at intervals as recommended by the API\nservice.",
+	//   "flatPath": "v1/projects/{projectsId}/instances/{instancesId}/databases/{databasesId}/operations/{operationsId}",
+	//   "httpMethod": "GET",
+	//   "id": "spanner.projects.instances.databases.operations.get",
+	//   "parameterOrder": [
+	//     "name"
+	//   ],
+	//   "parameters": {
+	//     "name": {
+	//       "description": "The name of the operation resource.",
+	//       "location": "path",
+	//       "pattern": "^projects/[^/]+/instances/[^/]+/databases/[^/]+/operations/[^/]+$",
+	//       "required": true,
+	//       "type": "string"
+	//     }
+	//   },
+	//   "path": "v1/{+name}",
+	//   "response": {
+	//     "$ref": "Operation"
+	//   },
+	//   "scopes": [
+	//     "https://www.googleapis.com/auth/cloud-platform"
+	//   ]
+	// }
+
+}
+
+// method id "spanner.projects.instances.databases.operations.list":
+
+type ProjectsInstancesDatabasesOperationsListCall struct {
+	s            *Service
+	name         string
+	urlParams_   gensupport.URLParams
+	ifNoneMatch_ string
+	ctx_         context.Context
+	header_      http.Header
+}
+
+// List: 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 below allows API services to override the
+// binding
+// to use different resource name schemes, such as `users/*/operations`.
+func (r *ProjectsInstancesDatabasesOperationsService) List(name string) *ProjectsInstancesDatabasesOperationsListCall {
+	c := &ProjectsInstancesDatabasesOperationsListCall{s: r.s, urlParams_: make(gensupport.URLParams)}
+	c.name = name
+	return c
+}
+
+// Filter sets the optional parameter "filter": The standard list
+// filter.
+func (c *ProjectsInstancesDatabasesOperationsListCall) Filter(filter string) *ProjectsInstancesDatabasesOperationsListCall {
+	c.urlParams_.Set("filter", filter)
+	return c
+}
+
+// PageSize sets the optional parameter "pageSize": The standard list
+// page size.
+func (c *ProjectsInstancesDatabasesOperationsListCall) PageSize(pageSize int64) *ProjectsInstancesDatabasesOperationsListCall {
+	c.urlParams_.Set("pageSize", fmt.Sprint(pageSize))
+	return c
+}
+
+// PageToken sets the optional parameter "pageToken": The standard list
+// page token.
+func (c *ProjectsInstancesDatabasesOperationsListCall) PageToken(pageToken string) *ProjectsInstancesDatabasesOperationsListCall {
+	c.urlParams_.Set("pageToken", pageToken)
+	return c
+}
+
+// Fields allows partial responses to be retrieved. See
+// https://developers.google.com/gdata/docs/2.0/basics#PartialResponse
+// for more information.
+func (c *ProjectsInstancesDatabasesOperationsListCall) Fields(s ...googleapi.Field) *ProjectsInstancesDatabasesOperationsListCall {
+	c.urlParams_.Set("fields", googleapi.CombineFields(s))
+	return c
+}
+
+// IfNoneMatch sets the optional parameter which makes the operation
+// fail if the object's ETag matches the given value. This is useful for
+// getting updates only after the object has changed since the last
+// request. Use googleapi.IsNotModified to check whether the response
+// error from Do is the result of In-None-Match.
+func (c *ProjectsInstancesDatabasesOperationsListCall) IfNoneMatch(entityTag string) *ProjectsInstancesDatabasesOperationsListCall {
+	c.ifNoneMatch_ = entityTag
+	return c
+}
+
+// Context sets the context to be used in this call's Do method. Any
+// pending HTTP request will be aborted if the provided context is
+// canceled.
+func (c *ProjectsInstancesDatabasesOperationsListCall) Context(ctx context.Context) *ProjectsInstancesDatabasesOperationsListCall {
+	c.ctx_ = ctx
+	return c
+}
+
+// Header returns an http.Header that can be modified by the caller to
+// add HTTP headers to the request.
+func (c *ProjectsInstancesDatabasesOperationsListCall) Header() http.Header {
+	if c.header_ == nil {
+		c.header_ = make(http.Header)
+	}
+	return c.header_
+}
+
+func (c *ProjectsInstancesDatabasesOperationsListCall) doRequest(alt string) (*http.Response, error) {
+	reqHeaders := make(http.Header)
+	for k, v := range c.header_ {
+		reqHeaders[k] = v
+	}
+	reqHeaders.Set("User-Agent", c.s.userAgent())
+	if c.ifNoneMatch_ != "" {
+		reqHeaders.Set("If-None-Match", c.ifNoneMatch_)
+	}
+	var body io.Reader = nil
+	c.urlParams_.Set("alt", alt)
+	urls := googleapi.ResolveRelative(c.s.BasePath, "v1/{+name}")
+	urls += "?" + c.urlParams_.Encode()
+	req, _ := http.NewRequest("GET", urls, body)
+	req.Header = reqHeaders
+	googleapi.Expand(req.URL, map[string]string{
+		"name": c.name,
+	})
+	return gensupport.SendRequest(c.ctx_, c.s.client, req)
+}
+
+// Do executes the "spanner.projects.instances.databases.operations.list" call.
+// Exactly one of *ListOperationsResponse or error will be non-nil. Any
+// non-2xx status code is an error. Response headers are in either
+// *ListOperationsResponse.ServerResponse.Header or (if a response was
+// returned at all) in error.(*googleapi.Error).Header. Use
+// googleapi.IsNotModified to check whether the returned error was
+// because http.StatusNotModified was returned.
+func (c *ProjectsInstancesDatabasesOperationsListCall) Do(opts ...googleapi.CallOption) (*ListOperationsResponse, error) {
+	gensupport.SetOptions(c.urlParams_, opts...)
+	res, err := c.doRequest("json")
+	if res != nil && res.StatusCode == http.StatusNotModified {
+		if res.Body != nil {
+			res.Body.Close()
+		}
+		return nil, &googleapi.Error{
+			Code:   res.StatusCode,
+			Header: res.Header,
+		}
+	}
+	if err != nil {
+		return nil, err
+	}
+	defer googleapi.CloseBody(res)
+	if err := googleapi.CheckResponse(res); err != nil {
+		return nil, err
+	}
+	ret := &ListOperationsResponse{
+		ServerResponse: googleapi.ServerResponse{
+			Header:         res.Header,
+			HTTPStatusCode: res.StatusCode,
+		},
+	}
+	target := &ret
+	if err := json.NewDecoder(res.Body).Decode(target); err != nil {
+		return nil, err
+	}
+	return ret, nil
+	// {
+	//   "description": "Lists operations that match the specified filter in the request. If the\nserver doesn't support this method, it returns `UNIMPLEMENTED`.\n\nNOTE: the `name` binding below allows API services to override the binding\nto use different resource name schemes, such as `users/*/operations`.",
+	//   "flatPath": "v1/projects/{projectsId}/instances/{instancesId}/databases/{databasesId}/operations",
+	//   "httpMethod": "GET",
+	//   "id": "spanner.projects.instances.databases.operations.list",
+	//   "parameterOrder": [
+	//     "name"
+	//   ],
+	//   "parameters": {
+	//     "filter": {
+	//       "description": "The standard list filter.",
+	//       "location": "query",
+	//       "type": "string"
+	//     },
+	//     "name": {
+	//       "description": "The name of the operation collection.",
+	//       "location": "path",
+	//       "pattern": "^projects/[^/]+/instances/[^/]+/databases/[^/]+/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"
+	//   ]
+	// }
+
+}
+
+// Pages invokes f for each page of results.
+// A non-nil error returned from f will halt the iteration.
+// The provided context supersedes any context provided to the Context method.
+func (c *ProjectsInstancesDatabasesOperationsListCall) Pages(ctx context.Context, f func(*ListOperationsResponse) error) error {
+	c.ctx_ = ctx
+	defer c.PageToken(c.urlParams_.Get("pageToken")) // reset paging to original point
+	for {
+		x, err := c.Do()
+		if err != nil {
+			return err
+		}
+		if err := f(x); err != nil {
+			return err
+		}
+		if x.NextPageToken == "" {
+			return nil
+		}
+		c.PageToken(x.NextPageToken)
+	}
+}
+
+// method id "spanner.projects.instances.databases.sessions.beginTransaction":
+
+type ProjectsInstancesDatabasesSessionsBeginTransactionCall struct {
+	s                       *Service
+	session                 string
+	begintransactionrequest *BeginTransactionRequest
+	urlParams_              gensupport.URLParams
+	ctx_                    context.Context
+	header_                 http.Header
+}
+
+// BeginTransaction: Begins a new transaction. This step can often be
+// skipped:
+// Read, ExecuteSql and
+// Commit can begin a new transaction as a
+// side-effect.
+func (r *ProjectsInstancesDatabasesSessionsService) BeginTransaction(session string, begintransactionrequest *BeginTransactionRequest) *ProjectsInstancesDatabasesSessionsBeginTransactionCall {
+	c := &ProjectsInstancesDatabasesSessionsBeginTransactionCall{s: r.s, urlParams_: make(gensupport.URLParams)}
+	c.session = session
+	c.begintransactionrequest = begintransactionrequest
+	return c
+}
+
+// Fields allows partial responses to be retrieved. See
+// https://developers.google.com/gdata/docs/2.0/basics#PartialResponse
+// for more information.
+func (c *ProjectsInstancesDatabasesSessionsBeginTransactionCall) Fields(s ...googleapi.Field) *ProjectsInstancesDatabasesSessionsBeginTransactionCall {
+	c.urlParams_.Set("fields", googleapi.CombineFields(s))
+	return c
+}
+
+// Context sets the context to be used in this call's Do method. Any
+// pending HTTP request will be aborted if the provided context is
+// canceled.
+func (c *ProjectsInstancesDatabasesSessionsBeginTransactionCall) Context(ctx context.Context) *ProjectsInstancesDatabasesSessionsBeginTransactionCall {
+	c.ctx_ = ctx
+	return c
+}
+
+// Header returns an http.Header that can be modified by the caller to
+// add HTTP headers to the request.
+func (c *ProjectsInstancesDatabasesSessionsBeginTransactionCall) Header() http.Header {
+	if c.header_ == nil {
+		c.header_ = make(http.Header)
+	}
+	return c.header_
+}
+
+func (c *ProjectsInstancesDatabasesSessionsBeginTransactionCall) doRequest(alt string) (*http.Response, error) {
+	reqHeaders := make(http.Header)
+	for k, v := range c.header_ {
+		reqHeaders[k] = v
+	}
+	reqHeaders.Set("User-Agent", c.s.userAgent())
+	var body io.Reader = nil
+	body, err := googleapi.WithoutDataWrapper.JSONReader(c.begintransactionrequest)
+	if err != nil {
+		return nil, err
+	}
+	reqHeaders.Set("Content-Type", "application/json")
+	c.urlParams_.Set("alt", alt)
+	urls := googleapi.ResolveRelative(c.s.BasePath, "v1/{+session}:beginTransaction")
+	urls += "?" + c.urlParams_.Encode()
+	req, _ := http.NewRequest("POST", urls, body)
+	req.Header = reqHeaders
+	googleapi.Expand(req.URL, map[string]string{
+		"session": c.session,
+	})
+	return gensupport.SendRequest(c.ctx_, c.s.client, req)
+}
+
+// Do executes the "spanner.projects.instances.databases.sessions.beginTransaction" call.
+// Exactly one of *Transaction or error will be non-nil. Any non-2xx
+// status code is an error. Response headers are in either
+// *Transaction.ServerResponse.Header or (if a response was returned at
+// all) in error.(*googleapi.Error).Header. Use googleapi.IsNotModified
+// to check whether the returned error was because
+// http.StatusNotModified was returned.
+func (c *ProjectsInstancesDatabasesSessionsBeginTransactionCall) Do(opts ...googleapi.CallOption) (*Transaction, error) {
+	gensupport.SetOptions(c.urlParams_, opts...)
+	res, err := c.doRequest("json")
+	if res != nil && res.StatusCode == http.StatusNotModified {
+		if res.Body != nil {
+			res.Body.Close()
+		}
+		return nil, &googleapi.Error{
+			Code:   res.StatusCode,
+			Header: res.Header,
+		}
+	}
+	if err != nil {
+		return nil, err
+	}
+	defer googleapi.CloseBody(res)
+	if err := googleapi.CheckResponse(res); err != nil {
+		return nil, err
+	}
+	ret := &Transaction{
+		ServerResponse: googleapi.ServerResponse{
+			Header:         res.Header,
+			HTTPStatusCode: res.StatusCode,
+		},
+	}
+	target := &ret
+	if err := json.NewDecoder(res.Body).Decode(target); err != nil {
+		return nil, err
+	}
+	return ret, nil
+	// {
+	//   "description": "Begins a new transaction. This step can often be skipped:\nRead, ExecuteSql and\nCommit can begin a new transaction as a\nside-effect.",
+	//   "flatPath": "v1/projects/{projectsId}/instances/{instancesId}/databases/{databasesId}/sessions/{sessionsId}:beginTransaction",
+	//   "httpMethod": "POST",
+	//   "id": "spanner.projects.instances.databases.sessions.beginTransaction",
+	//   "parameterOrder": [
+	//     "session"
+	//   ],
+	//   "parameters": {
+	//     "session": {
+	//       "description": "Required. The session in which the transaction runs.",
+	//       "location": "path",
+	//       "pattern": "^projects/[^/]+/instances/[^/]+/databases/[^/]+/sessions/[^/]+$",
+	//       "required": true,
+	//       "type": "string"
+	//     }
+	//   },
+	//   "path": "v1/{+session}:beginTransaction",
+	//   "request": {
+	//     "$ref": "BeginTransactionRequest"
+	//   },
+	//   "response": {
+	//     "$ref": "Transaction"
+	//   },
+	//   "scopes": [
+	//     "https://www.googleapis.com/auth/cloud-platform"
+	//   ]
+	// }
+
+}
+
+// method id "spanner.projects.instances.databases.sessions.commit":
+
+type ProjectsInstancesDatabasesSessionsCommitCall struct {
+	s             *Service
+	session       string
+	commitrequest *CommitRequest
+	urlParams_    gensupport.URLParams
+	ctx_          context.Context
+	header_       http.Header
+}
+
+// Commit: Commits a transaction. The request includes the mutations to
+// be
+// applied to rows in the database.
+//
+// `Commit` might return an `ABORTED` error. This can occur at any
+// time;
+// commonly, the cause is conflicts with concurrent
+// transactions. However, it can also happen for a variety of
+// other
+// reasons. If `Commit` returns `ABORTED`, the caller should
+// re-attempt
+// the transaction from the beginning, re-using the same session.
+func (r *ProjectsInstancesDatabasesSessionsService) Commit(session string, commitrequest *CommitRequest) *ProjectsInstancesDatabasesSessionsCommitCall {
+	c := &ProjectsInstancesDatabasesSessionsCommitCall{s: r.s, urlParams_: make(gensupport.URLParams)}
+	c.session = session
+	c.commitrequest = commitrequest
+	return c
+}
+
+// Fields allows partial responses to be retrieved. See
+// https://developers.google.com/gdata/docs/2.0/basics#PartialResponse
+// for more information.
+func (c *ProjectsInstancesDatabasesSessionsCommitCall) Fields(s ...googleapi.Field) *ProjectsInstancesDatabasesSessionsCommitCall {
+	c.urlParams_.Set("fields", googleapi.CombineFields(s))
+	return c
+}
+
+// Context sets the context to be used in this call's Do method. Any
+// pending HTTP request will be aborted if the provided context is
+// canceled.
+func (c *ProjectsInstancesDatabasesSessionsCommitCall) Context(ctx context.Context) *ProjectsInstancesDatabasesSessionsCommitCall {
+	c.ctx_ = ctx
+	return c
+}
+
+// Header returns an http.Header that can be modified by the caller to
+// add HTTP headers to the request.
+func (c *ProjectsInstancesDatabasesSessionsCommitCall) Header() http.Header {
+	if c.header_ == nil {
+		c.header_ = make(http.Header)
+	}
+	return c.header_
+}
+
+func (c *ProjectsInstancesDatabasesSessionsCommitCall) doRequest(alt string) (*http.Response, error) {
+	reqHeaders := make(http.Header)
+	for k, v := range c.header_ {
+		reqHeaders[k] = v
+	}
+	reqHeaders.Set("User-Agent", c.s.userAgent())
+	var body io.Reader = nil
+	body, err := googleapi.WithoutDataWrapper.JSONReader(c.commitrequest)
+	if err != nil {
+		return nil, err
+	}
+	reqHeaders.Set("Content-Type", "application/json")
+	c.urlParams_.Set("alt", alt)
+	urls := googleapi.ResolveRelative(c.s.BasePath, "v1/{+session}:commit")
+	urls += "?" + c.urlParams_.Encode()
+	req, _ := http.NewRequest("POST", urls, body)
+	req.Header = reqHeaders
+	googleapi.Expand(req.URL, map[string]string{
+		"session": c.session,
+	})
+	return gensupport.SendRequest(c.ctx_, c.s.client, req)
+}
+
+// Do executes the "spanner.projects.instances.databases.sessions.commit" call.
+// Exactly one of *CommitResponse or error will be non-nil. Any non-2xx
+// status code is an error. Response headers are in either
+// *CommitResponse.ServerResponse.Header or (if a response was returned
+// at all) in error.(*googleapi.Error).Header. Use
+// googleapi.IsNotModified to check whether the returned error was
+// because http.StatusNotModified was returned.
+func (c *ProjectsInstancesDatabasesSessionsCommitCall) Do(opts ...googleapi.CallOption) (*CommitResponse, error) {
+	gensupport.SetOptions(c.urlParams_, opts...)
+	res, err := c.doRequest("json")
+	if res != nil && res.StatusCode == http.StatusNotModified {
+		if res.Body != nil {
+			res.Body.Close()
+		}
+		return nil, &googleapi.Error{
+			Code:   res.StatusCode,
+			Header: res.Header,
+		}
+	}
+	if err != nil {
+		return nil, err
+	}
+	defer googleapi.CloseBody(res)
+	if err := googleapi.CheckResponse(res); err != nil {
+		return nil, err
+	}
+	ret := &CommitResponse{
+		ServerResponse: googleapi.ServerResponse{
+			Header:         res.Header,
+			HTTPStatusCode: res.StatusCode,
+		},
+	}
+	target := &ret
+	if err := json.NewDecoder(res.Body).Decode(target); err != nil {
+		return nil, err
+	}
+	return ret, nil
+	// {
+	//   "description": "Commits a transaction. The request includes the mutations to be\napplied to rows in the database.\n\n`Commit` might return an `ABORTED` error. This can occur at any time;\ncommonly, the cause is conflicts with concurrent\ntransactions. However, it can also happen for a variety of other\nreasons. If `Commit` returns `ABORTED`, the caller should re-attempt\nthe transaction from the beginning, re-using the same session.",
+	//   "flatPath": "v1/projects/{projectsId}/instances/{instancesId}/databases/{databasesId}/sessions/{sessionsId}:commit",
+	//   "httpMethod": "POST",
+	//   "id": "spanner.projects.instances.databases.sessions.commit",
+	//   "parameterOrder": [
+	//     "session"
+	//   ],
+	//   "parameters": {
+	//     "session": {
+	//       "description": "Required. The session in which the transaction to be committed is running.",
+	//       "location": "path",
+	//       "pattern": "^projects/[^/]+/instances/[^/]+/databases/[^/]+/sessions/[^/]+$",
+	//       "required": true,
+	//       "type": "string"
+	//     }
+	//   },
+	//   "path": "v1/{+session}:commit",
+	//   "request": {
+	//     "$ref": "CommitRequest"
+	//   },
+	//   "response": {
+	//     "$ref": "CommitResponse"
+	//   },
+	//   "scopes": [
+	//     "https://www.googleapis.com/auth/cloud-platform"
+	//   ]
+	// }
+
+}
+
+// method id "spanner.projects.instances.databases.sessions.create":
+
+type ProjectsInstancesDatabasesSessionsCreateCall struct {
+	s          *Service
+	database   string
+	urlParams_ gensupport.URLParams
+	ctx_       context.Context
+	header_    http.Header
+}
+
+// Create: Creates a new session. A session can be used to
+// perform
+// transactions that read and/or modify data in a Cloud Spanner
+// database.
+// Sessions are meant to be reused for many
+// consecutive
+// transactions.
+//
+// Sessions can only execute one transaction at a time. To
+// execute
+// multiple concurrent read-write/write-only transactions,
+// create
+// multiple sessions. Note that standalone reads and queries use
+// a
+// transaction internally, and count toward the one
+// transaction
+// limit.
+//
+// Cloud Spanner limits the number of sessions that can exist at any
+// given
+// time; thus, it is a good idea to delete idle and/or unneeded
+// sessions.
+// Aside from explicit deletes, Cloud Spanner can delete sessions for
+// which no
+// operations are sent for more than an hour. If a session is
+// deleted,
+// requests to it return `NOT_FOUND`.
+//
+// Idle sessions can be kept alive by sending a trivial SQL
+// query
+// periodically, e.g., "SELECT 1".
+func (r *ProjectsInstancesDatabasesSessionsService) Create(database string) *ProjectsInstancesDatabasesSessionsCreateCall {
+	c := &ProjectsInstancesDatabasesSessionsCreateCall{s: r.s, urlParams_: make(gensupport.URLParams)}
+	c.database = database
+	return c
+}
+
+// Fields allows partial responses to be retrieved. See
+// https://developers.google.com/gdata/docs/2.0/basics#PartialResponse
+// for more information.
+func (c *ProjectsInstancesDatabasesSessionsCreateCall) Fields(s ...googleapi.Field) *ProjectsInstancesDatabasesSessionsCreateCall {
+	c.urlParams_.Set("fields", googleapi.CombineFields(s))
+	return c
+}
+
+// Context sets the context to be used in this call's Do method. Any
+// pending HTTP request will be aborted if the provided context is
+// canceled.
+func (c *ProjectsInstancesDatabasesSessionsCreateCall) Context(ctx context.Context) *ProjectsInstancesDatabasesSessionsCreateCall {
+	c.ctx_ = ctx
+	return c
+}
+
+// Header returns an http.Header that can be modified by the caller to
+// add HTTP headers to the request.
+func (c *ProjectsInstancesDatabasesSessionsCreateCall) Header() http.Header {
+	if c.header_ == nil {
+		c.header_ = make(http.Header)
+	}
+	return c.header_
+}
+
+func (c *ProjectsInstancesDatabasesSessionsCreateCall) doRequest(alt string) (*http.Response, error) {
+	reqHeaders := make(http.Header)
+	for k, v := range c.header_ {
+		reqHeaders[k] = v
+	}
+	reqHeaders.Set("User-Agent", c.s.userAgent())
+	var body io.Reader = nil
+	c.urlParams_.Set("alt", alt)
+	urls := googleapi.ResolveRelative(c.s.BasePath, "v1/{+database}/sessions")
+	urls += "?" + c.urlParams_.Encode()
+	req, _ := http.NewRequest("POST", urls, body)
+	req.Header = reqHeaders
+	googleapi.Expand(req.URL, map[string]string{
+		"database": c.database,
+	})
+	return gensupport.SendRequest(c.ctx_, c.s.client, req)
+}
+
+// Do executes the "spanner.projects.instances.databases.sessions.create" call.
+// Exactly one of *Session or error will be non-nil. Any non-2xx status
+// code is an error. Response headers are in either
+// *Session.ServerResponse.Header or (if a response was returned at all)
+// in error.(*googleapi.Error).Header. Use googleapi.IsNotModified to
+// check whether the returned error was because http.StatusNotModified
+// was returned.
+func (c *ProjectsInstancesDatabasesSessionsCreateCall) Do(opts ...googleapi.CallOption) (*Session, error) {
+	gensupport.SetOptions(c.urlParams_, opts...)
+	res, err := c.doRequest("json")
+	if res != nil && res.StatusCode == http.StatusNotModified {
+		if res.Body != nil {
+			res.Body.Close()
+		}
+		return nil, &googleapi.Error{
+			Code:   res.StatusCode,
+			Header: res.Header,
+		}
+	}
+	if err != nil {
+		return nil, err
+	}
+	defer googleapi.CloseBody(res)
+	if err := googleapi.CheckResponse(res); err != nil {
+		return nil, err
+	}
+	ret := &Session{
+		ServerResponse: googleapi.ServerResponse{
+			Header:         res.Header,
+			HTTPStatusCode: res.StatusCode,
+		},
+	}
+	target := &ret
+	if err := json.NewDecoder(res.Body).Decode(target); err != nil {
+		return nil, err
+	}
+	return ret, nil
+	// {
+	//   "description": "Creates a new session. A session can be used to perform\ntransactions that read and/or modify data in a Cloud Spanner database.\nSessions are meant to be reused for many consecutive\ntransactions.\n\nSessions can only execute one transaction at a time. To execute\nmultiple concurrent read-write/write-only transactions, create\nmultiple sessions. Note that standalone reads and queries use a\ntransaction internally, and count toward the one transaction\nlimit.\n\nCloud Spanner limits the number of sessions that can exist at any given\ntime; thus, it is a good idea to delete idle and/or unneeded sessions.\nAside from explicit deletes, Cloud Spanner can delete sessions for which no\noperations are sent for more than an hour. If a session is deleted,\nrequests to it return `NOT_FOUND`.\n\nIdle sessions can be kept alive by sending a trivial SQL query\nperiodically, e.g., `\"SELECT 1\"`.",
+	//   "flatPath": "v1/projects/{projectsId}/instances/{instancesId}/databases/{databasesId}/sessions",
+	//   "httpMethod": "POST",
+	//   "id": "spanner.projects.instances.databases.sessions.create",
+	//   "parameterOrder": [
+	//     "database"
+	//   ],
+	//   "parameters": {
+	//     "database": {
+	//       "description": "Required. The database in which the new session is created.",
+	//       "location": "path",
+	//       "pattern": "^projects/[^/]+/instances/[^/]+/databases/[^/]+$",
+	//       "required": true,
+	//       "type": "string"
+	//     }
+	//   },
+	//   "path": "v1/{+database}/sessions",
+	//   "response": {
+	//     "$ref": "Session"
+	//   },
+	//   "scopes": [
+	//     "https://www.googleapis.com/auth/cloud-platform"
+	//   ]
+	// }
+
+}
+
+// method id "spanner.projects.instances.databases.sessions.delete":
+
+type ProjectsInstancesDatabasesSessionsDeleteCall struct {
+	s          *Service
+	name       string
+	urlParams_ gensupport.URLParams
+	ctx_       context.Context
+	header_    http.Header
+}
+
+// Delete: Ends a session, releasing server resources associated with
+// it.
+func (r *ProjectsInstancesDatabasesSessionsService) Delete(name string) *ProjectsInstancesDatabasesSessionsDeleteCall {
+	c := &ProjectsInstancesDatabasesSessionsDeleteCall{s: r.s, urlParams_: make(gensupport.URLParams)}
+	c.name = name
+	return c
+}
+
+// Fields allows partial responses to be retrieved. See
+// https://developers.google.com/gdata/docs/2.0/basics#PartialResponse
+// for more information.
+func (c *ProjectsInstancesDatabasesSessionsDeleteCall) Fields(s ...googleapi.Field) *ProjectsInstancesDatabasesSessionsDeleteCall {
+	c.urlParams_.Set("fields", googleapi.CombineFields(s))
+	return c
+}
+
+// Context sets the context to be used in this call's Do method. Any
+// pending HTTP request will be aborted if the provided context is
+// canceled.
+func (c *ProjectsInstancesDatabasesSessionsDeleteCall) Context(ctx context.Context) *ProjectsInstancesDatabasesSessionsDeleteCall {
+	c.ctx_ = ctx
+	return c
+}
+
+// Header returns an http.Header that can be modified by the caller to
+// add HTTP headers to the request.
+func (c *ProjectsInstancesDatabasesSessionsDeleteCall) Header() http.Header {
+	if c.header_ == nil {
+		c.header_ = make(http.Header)
+	}
+	return c.header_
+}
+
+func (c *ProjectsInstancesDatabasesSessionsDeleteCall) doRequest(alt string) (*http.Response, error) {
+	reqHeaders := make(http.Header)
+	for k, v := range c.header_ {
+		reqHeaders[k] = v
+	}
+	reqHeaders.Set("User-Agent", c.s.userAgent())
+	var body io.Reader = nil
+	c.urlParams_.Set("alt", alt)
+	urls := googleapi.ResolveRelative(c.s.BasePath, "v1/{+name}")
+	urls += "?" + c.urlParams_.Encode()
+	req, _ := http.NewRequest("DELETE", urls, body)
+	req.Header = reqHeaders
+	googleapi.Expand(req.URL, map[string]string{
+		"name": c.name,
+	})
+	return gensupport.SendRequest(c.ctx_, c.s.client, req)
+}
+
+// Do executes the "spanner.projects.instances.databases.sessions.delete" call.
+// Exactly one of *Empty or error will be non-nil. Any non-2xx status
+// code is an error. Response headers are in either
+// *Empty.ServerResponse.Header or (if a response was returned at all)
+// in error.(*googleapi.Error).Header. Use googleapi.IsNotModified to
+// check whether the returned error was because http.StatusNotModified
+// was returned.
+func (c *ProjectsInstancesDatabasesSessionsDeleteCall) Do(opts ...googleapi.CallOption) (*Empty, error) {
+	gensupport.SetOptions(c.urlParams_, opts...)
+	res, err := c.doRequest("json")
+	if res != nil && res.StatusCode == http.StatusNotModified {
+		if res.Body != nil {
+			res.Body.Close()
+		}
+		return nil, &googleapi.Error{
+			Code:   res.StatusCode,
+			Header: res.Header,
+		}
+	}
+	if err != nil {
+		return nil, err
+	}
+	defer googleapi.CloseBody(res)
+	if err := googleapi.CheckResponse(res); err != nil {
+		return nil, err
+	}
+	ret := &Empty{
+		ServerResponse: googleapi.ServerResponse{
+			Header:         res.Header,
+			HTTPStatusCode: res.StatusCode,
+		},
+	}
+	target := &ret
+	if err := json.NewDecoder(res.Body).Decode(target); err != nil {
+		return nil, err
+	}
+	return ret, nil
+	// {
+	//   "description": "Ends a session, releasing server resources associated with it.",
+	//   "flatPath": "v1/projects/{projectsId}/instances/{instancesId}/databases/{databasesId}/sessions/{sessionsId}",
+	//   "httpMethod": "DELETE",
+	//   "id": "spanner.projects.instances.databases.sessions.delete",
+	//   "parameterOrder": [
+	//     "name"
+	//   ],
+	//   "parameters": {
+	//     "name": {
+	//       "description": "Required. The name of the session to delete.",
+	//       "location": "path",
+	//       "pattern": "^projects/[^/]+/instances/[^/]+/databases/[^/]+/sessions/[^/]+$",
+	//       "required": true,
+	//       "type": "string"
+	//     }
+	//   },
+	//   "path": "v1/{+name}",
+	//   "response": {
+	//     "$ref": "Empty"
+	//   },
+	//   "scopes": [
+	//     "https://www.googleapis.com/auth/cloud-platform"
+	//   ]
+	// }
+
+}
+
+// method id "spanner.projects.instances.databases.sessions.executeSql":
+
+type ProjectsInstancesDatabasesSessionsExecuteSqlCall struct {
+	s                 *Service
+	session           string
+	executesqlrequest *ExecuteSqlRequest
+	urlParams_        gensupport.URLParams
+	ctx_              context.Context
+	header_           http.Header
+}
+
+// ExecuteSql: Executes an SQL query, returning all rows in a single
+// reply. This
+// method cannot be used to return a result set larger than 10 MiB;
+// if the query yields more data than that, the query fails with
+// a `FAILED_PRECONDITION` error.
+//
+// Queries inside read-write transactions might return `ABORTED`.
+// If
+// this occurs, the application should restart the transaction from
+// the beginning. See Transaction for more details.
+//
+// Larger result sets can be fetched in streaming fashion by
+// calling
+// ExecuteStreamingSql instead.
+func (r *ProjectsInstancesDatabasesSessionsService) ExecuteSql(session string, executesqlrequest *ExecuteSqlRequest) *ProjectsInstancesDatabasesSessionsExecuteSqlCall {
+	c := &ProjectsInstancesDatabasesSessionsExecuteSqlCall{s: r.s, urlParams_: make(gensupport.URLParams)}
+	c.session = session
+	c.executesqlrequest = executesqlrequest
+	return c
+}
+
+// Fields allows partial responses to be retrieved. See
+// https://developers.google.com/gdata/docs/2.0/basics#PartialResponse
+// for more information.
+func (c *ProjectsInstancesDatabasesSessionsExecuteSqlCall) Fields(s ...googleapi.Field) *ProjectsInstancesDatabasesSessionsExecuteSqlCall {
+	c.urlParams_.Set("fields", googleapi.CombineFields(s))
+	return c
+}
+
+// Context sets the context to be used in this call's Do method. Any
+// pending HTTP request will be aborted if the provided context is
+// canceled.
+func (c *ProjectsInstancesDatabasesSessionsExecuteSqlCall) Context(ctx context.Context) *ProjectsInstancesDatabasesSessionsExecuteSqlCall {
+	c.ctx_ = ctx
+	return c
+}
+
+// Header returns an http.Header that can be modified by the caller to
+// add HTTP headers to the request.
+func (c *ProjectsInstancesDatabasesSessionsExecuteSqlCall) Header() http.Header {
+	if c.header_ == nil {
+		c.header_ = make(http.Header)
+	}
+	return c.header_
+}
+
+func (c *ProjectsInstancesDatabasesSessionsExecuteSqlCall) doRequest(alt string) (*http.Response, error) {
+	reqHeaders := make(http.Header)
+	for k, v := range c.header_ {
+		reqHeaders[k] = v
+	}
+	reqHeaders.Set("User-Agent", c.s.userAgent())
+	var body io.Reader = nil
+	body, err := googleapi.WithoutDataWrapper.JSONReader(c.executesqlrequest)
+	if err != nil {
+		return nil, err
+	}
+	reqHeaders.Set("Content-Type", "application/json")
+	c.urlParams_.Set("alt", alt)
+	urls := googleapi.ResolveRelative(c.s.BasePath, "v1/{+session}:executeSql")
+	urls += "?" + c.urlParams_.Encode()
+	req, _ := http.NewRequest("POST", urls, body)
+	req.Header = reqHeaders
+	googleapi.Expand(req.URL, map[string]string{
+		"session": c.session,
+	})
+	return gensupport.SendRequest(c.ctx_, c.s.client, req)
+}
+
+// Do executes the "spanner.projects.instances.databases.sessions.executeSql" call.
+// Exactly one of *ResultSet or error will be non-nil. Any non-2xx
+// status code is an error. Response headers are in either
+// *ResultSet.ServerResponse.Header or (if a response was returned at
+// all) in error.(*googleapi.Error).Header. Use googleapi.IsNotModified
+// to check whether the returned error was because
+// http.StatusNotModified was returned.
+func (c *ProjectsInstancesDatabasesSessionsExecuteSqlCall) Do(opts ...googleapi.CallOption) (*ResultSet, error) {
+	gensupport.SetOptions(c.urlParams_, opts...)
+	res, err := c.doRequest("json")
+	if res != nil && res.StatusCode == http.StatusNotModified {
+		if res.Body != nil {
+			res.Body.Close()
+		}
+		return nil, &googleapi.Error{
+			Code:   res.StatusCode,
+			Header: res.Header,
+		}
+	}
+	if err != nil {
+		return nil, err
+	}
+	defer googleapi.CloseBody(res)
+	if err := googleapi.CheckResponse(res); err != nil {
+		return nil, err
+	}
+	ret := &ResultSet{
+		ServerResponse: googleapi.ServerResponse{
+			Header:         res.Header,
+			HTTPStatusCode: res.StatusCode,
+		},
+	}
+	target := &ret
+	if err := json.NewDecoder(res.Body).Decode(target); err != nil {
+		return nil, err
+	}
+	return ret, nil
+	// {
+	//   "description": "Executes an SQL query, returning all rows in a single reply. This\nmethod cannot be used to return a result set larger than 10 MiB;\nif the query yields more data than that, the query fails with\na `FAILED_PRECONDITION` error.\n\nQueries inside read-write transactions might return `ABORTED`. If\nthis occurs, the application should restart the transaction from\nthe beginning. See Transaction for more details.\n\nLarger result sets can be fetched in streaming fashion by calling\nExecuteStreamingSql instead.",
+	//   "flatPath": "v1/projects/{projectsId}/instances/{instancesId}/databases/{databasesId}/sessions/{sessionsId}:executeSql",
+	//   "httpMethod": "POST",
+	//   "id": "spanner.projects.instances.databases.sessions.executeSql",
+	//   "parameterOrder": [
+	//     "session"
+	//   ],
+	//   "parameters": {
+	//     "session": {
+	//       "description": "Required. The session in which the SQL query should be performed.",
+	//       "location": "path",
+	//       "pattern": "^projects/[^/]+/instances/[^/]+/databases/[^/]+/sessions/[^/]+$",
+	//       "required": true,
+	//       "type": "string"
+	//     }
+	//   },
+	//   "path": "v1/{+session}:executeSql",
+	//   "request": {
+	//     "$ref": "ExecuteSqlRequest"
+	//   },
+	//   "response": {
+	//     "$ref": "ResultSet"
+	//   },
+	//   "scopes": [
+	//     "https://www.googleapis.com/auth/cloud-platform"
+	//   ]
+	// }
+
+}
+
+// method id "spanner.projects.instances.databases.sessions.executeStreamingSql":
+
+type ProjectsInstancesDatabasesSessionsExecuteStreamingSqlCall struct {
+	s                 *Service
+	session           string
+	executesqlrequest *ExecuteSqlRequest
+	urlParams_        gensupport.URLParams
+	ctx_              context.Context
+	header_           http.Header
+}
+
+// ExecuteStreamingSql: Like ExecuteSql, except returns the result
+// set as a stream. Unlike ExecuteSql, there
+// is no limit on the size of the returned result set. However,
+// no
+// individual row in the result set can exceed 100 MiB, and no
+// column value can exceed 10 MiB.
+func (r *ProjectsInstancesDatabasesSessionsService) ExecuteStreamingSql(session string, executesqlrequest *ExecuteSqlRequest) *ProjectsInstancesDatabasesSessionsExecuteStreamingSqlCall {
+	c := &ProjectsInstancesDatabasesSessionsExecuteStreamingSqlCall{s: r.s, urlParams_: make(gensupport.URLParams)}
+	c.session = session
+	c.executesqlrequest = executesqlrequest
+	return c
+}
+
+// Fields allows partial responses to be retrieved. See
+// https://developers.google.com/gdata/docs/2.0/basics#PartialResponse
+// for more information.
+func (c *ProjectsInstancesDatabasesSessionsExecuteStreamingSqlCall) Fields(s ...googleapi.Field) *ProjectsInstancesDatabasesSessionsExecuteStreamingSqlCall {
+	c.urlParams_.Set("fields", googleapi.CombineFields(s))
+	return c
+}
+
+// Context sets the context to be used in this call's Do method. Any
+// pending HTTP request will be aborted if the provided context is
+// canceled.
+func (c *ProjectsInstancesDatabasesSessionsExecuteStreamingSqlCall) Context(ctx context.Context) *ProjectsInstancesDatabasesSessionsExecuteStreamingSqlCall {
+	c.ctx_ = ctx
+	return c
+}
+
+// Header returns an http.Header that can be modified by the caller to
+// add HTTP headers to the request.
+func (c *ProjectsInstancesDatabasesSessionsExecuteStreamingSqlCall) Header() http.Header {
+	if c.header_ == nil {
+		c.header_ = make(http.Header)
+	}
+	return c.header_
+}
+
+func (c *ProjectsInstancesDatabasesSessionsExecuteStreamingSqlCall) doRequest(alt string) (*http.Response, error) {
+	reqHeaders := make(http.Header)
+	for k, v := range c.header_ {
+		reqHeaders[k] = v
+	}
+	reqHeaders.Set("User-Agent", c.s.userAgent())
+	var body io.Reader = nil
+	body, err := googleapi.WithoutDataWrapper.JSONReader(c.executesqlrequest)
+	if err != nil {
+		return nil, err
+	}
+	reqHeaders.Set("Content-Type", "application/json")
+	c.urlParams_.Set("alt", alt)
+	urls := googleapi.ResolveRelative(c.s.BasePath, "v1/{+session}:executeStreamingSql")
+	urls += "?" + c.urlParams_.Encode()
+	req, _ := http.NewRequest("POST", urls, body)
+	req.Header = reqHeaders
+	googleapi.Expand(req.URL, map[string]string{
+		"session": c.session,
+	})
+	return gensupport.SendRequest(c.ctx_, c.s.client, req)
+}
+
+// Do executes the "spanner.projects.instances.databases.sessions.executeStreamingSql" call.
+// Exactly one of *PartialResultSet or error will be non-nil. Any
+// non-2xx status code is an error. Response headers are in either
+// *PartialResultSet.ServerResponse.Header or (if a response was
+// returned at all) in error.(*googleapi.Error).Header. Use
+// googleapi.IsNotModified to check whether the returned error was
+// because http.StatusNotModified was returned.
+func (c *ProjectsInstancesDatabasesSessionsExecuteStreamingSqlCall) Do(opts ...googleapi.CallOption) (*PartialResultSet, error) {
+	gensupport.SetOptions(c.urlParams_, opts...)
+	res, err := c.doRequest("json")
+	if res != nil && res.StatusCode == http.StatusNotModified {
+		if res.Body != nil {
+			res.Body.Close()
+		}
+		return nil, &googleapi.Error{
+			Code:   res.StatusCode,
+			Header: res.Header,
+		}
+	}
+	if err != nil {
+		return nil, err
+	}
+	defer googleapi.CloseBody(res)
+	if err := googleapi.CheckResponse(res); err != nil {
+		return nil, err
+	}
+	ret := &PartialResultSet{
+		ServerResponse: googleapi.ServerResponse{
+			Header:         res.Header,
+			HTTPStatusCode: res.StatusCode,
+		},
+	}
+	target := &ret
+	if err := json.NewDecoder(res.Body).Decode(target); err != nil {
+		return nil, err
+	}
+	return ret, nil
+	// {
+	//   "description": "Like ExecuteSql, except returns the result\nset as a stream. Unlike ExecuteSql, there\nis no limit on the size of the returned result set. However, no\nindividual row in the result set can exceed 100 MiB, and no\ncolumn value can exceed 10 MiB.",
+	//   "flatPath": "v1/projects/{projectsId}/instances/{instancesId}/databases/{databasesId}/sessions/{sessionsId}:executeStreamingSql",
+	//   "httpMethod": "POST",
+	//   "id": "spanner.projects.instances.databases.sessions.executeStreamingSql",
+	//   "parameterOrder": [
+	//     "session"
+	//   ],
+	//   "parameters": {
+	//     "session": {
+	//       "description": "Required. The session in which the SQL query should be performed.",
+	//       "location": "path",
+	//       "pattern": "^projects/[^/]+/instances/[^/]+/databases/[^/]+/sessions/[^/]+$",
+	//       "required": true,
+	//       "type": "string"
+	//     }
+	//   },
+	//   "path": "v1/{+session}:executeStreamingSql",
+	//   "request": {
+	//     "$ref": "ExecuteSqlRequest"
+	//   },
+	//   "response": {
+	//     "$ref": "PartialResultSet"
+	//   },
+	//   "scopes": [
+	//     "https://www.googleapis.com/auth/cloud-platform"
+	//   ]
+	// }
+
+}
+
+// method id "spanner.projects.instances.databases.sessions.get":
+
+type ProjectsInstancesDatabasesSessionsGetCall struct {
+	s            *Service
+	name         string
+	urlParams_   gensupport.URLParams
+	ifNoneMatch_ string
+	ctx_         context.Context
+	header_      http.Header
+}
+
+// Get: Gets a session. Returns `NOT_FOUND` if the session does not
+// exist.
+// This is mainly useful for determining whether a session is
+// still
+// alive.
+func (r *ProjectsInstancesDatabasesSessionsService) Get(name string) *ProjectsInstancesDatabasesSessionsGetCall {
+	c := &ProjectsInstancesDatabasesSessionsGetCall{s: r.s, urlParams_: make(gensupport.URLParams)}
+	c.name = name
+	return c
+}
+
+// Fields allows partial responses to be retrieved. See
+// https://developers.google.com/gdata/docs/2.0/basics#PartialResponse
+// for more information.
+func (c *ProjectsInstancesDatabasesSessionsGetCall) Fields(s ...googleapi.Field) *ProjectsInstancesDatabasesSessionsGetCall {
+	c.urlParams_.Set("fields", googleapi.CombineFields(s))
+	return c
+}
+
+// IfNoneMatch sets the optional parameter which makes the operation
+// fail if the object's ETag matches the given value. This is useful for
+// getting updates only after the object has changed since the last
+// request. Use googleapi.IsNotModified to check whether the response
+// error from Do is the result of In-None-Match.
+func (c *ProjectsInstancesDatabasesSessionsGetCall) IfNoneMatch(entityTag string) *ProjectsInstancesDatabasesSessionsGetCall {
+	c.ifNoneMatch_ = entityTag
+	return c
+}
+
+// Context sets the context to be used in this call's Do method. Any
+// pending HTTP request will be aborted if the provided context is
+// canceled.
+func (c *ProjectsInstancesDatabasesSessionsGetCall) Context(ctx context.Context) *ProjectsInstancesDatabasesSessionsGetCall {
+	c.ctx_ = ctx
+	return c
+}
+
+// Header returns an http.Header that can be modified by the caller to
+// add HTTP headers to the request.
+func (c *ProjectsInstancesDatabasesSessionsGetCall) Header() http.Header {
+	if c.header_ == nil {
+		c.header_ = make(http.Header)
+	}
+	return c.header_
+}
+
+func (c *ProjectsInstancesDatabasesSessionsGetCall) doRequest(alt string) (*http.Response, error) {
+	reqHeaders := make(http.Header)
+	for k, v := range c.header_ {
+		reqHeaders[k] = v
+	}
+	reqHeaders.Set("User-Agent", c.s.userAgent())
+	if c.ifNoneMatch_ != "" {
+		reqHeaders.Set("If-None-Match", c.ifNoneMatch_)
+	}
+	var body io.Reader = nil
+	c.urlParams_.Set("alt", alt)
+	urls := googleapi.ResolveRelative(c.s.BasePath, "v1/{+name}")
+	urls += "?" + c.urlParams_.Encode()
+	req, _ := http.NewRequest("GET", urls, body)
+	req.Header = reqHeaders
+	googleapi.Expand(req.URL, map[string]string{
+		"name": c.name,
+	})
+	return gensupport.SendRequest(c.ctx_, c.s.client, req)
+}
+
+// Do executes the "spanner.projects.instances.databases.sessions.get" call.
+// Exactly one of *Session or error will be non-nil. Any non-2xx status
+// code is an error. Response headers are in either
+// *Session.ServerResponse.Header or (if a response was returned at all)
+// in error.(*googleapi.Error).Header. Use googleapi.IsNotModified to
+// check whether the returned error was because http.StatusNotModified
+// was returned.
+func (c *ProjectsInstancesDatabasesSessionsGetCall) Do(opts ...googleapi.CallOption) (*Session, error) {
+	gensupport.SetOptions(c.urlParams_, opts...)
+	res, err := c.doRequest("json")
+	if res != nil && res.StatusCode == http.StatusNotModified {
+		if res.Body != nil {
+			res.Body.Close()
+		}
+		return nil, &googleapi.Error{
+			Code:   res.StatusCode,
+			Header: res.Header,
+		}
+	}
+	if err != nil {
+		return nil, err
+	}
+	defer googleapi.CloseBody(res)
+	if err := googleapi.CheckResponse(res); err != nil {
+		return nil, err
+	}
+	ret := &Session{
+		ServerResponse: googleapi.ServerResponse{
+			Header:         res.Header,
+			HTTPStatusCode: res.StatusCode,
+		},
+	}
+	target := &ret
+	if err := json.NewDecoder(res.Body).Decode(target); err != nil {
+		return nil, err
+	}
+	return ret, nil
+	// {
+	//   "description": "Gets a session. Returns `NOT_FOUND` if the session does not exist.\nThis is mainly useful for determining whether a session is still\nalive.",
+	//   "flatPath": "v1/projects/{projectsId}/instances/{instancesId}/databases/{databasesId}/sessions/{sessionsId}",
+	//   "httpMethod": "GET",
+	//   "id": "spanner.projects.instances.databases.sessions.get",
+	//   "parameterOrder": [
+	//     "name"
+	//   ],
+	//   "parameters": {
+	//     "name": {
+	//       "description": "Required. The name of the session to retrieve.",
+	//       "location": "path",
+	//       "pattern": "^projects/[^/]+/instances/[^/]+/databases/[^/]+/sessions/[^/]+$",
+	//       "required": true,
+	//       "type": "string"
+	//     }
+	//   },
+	//   "path": "v1/{+name}",
+	//   "response": {
+	//     "$ref": "Session"
+	//   },
+	//   "scopes": [
+	//     "https://www.googleapis.com/auth/cloud-platform"
+	//   ]
+	// }
+
+}
+
+// method id "spanner.projects.instances.databases.sessions.read":
+
+type ProjectsInstancesDatabasesSessionsReadCall struct {
+	s           *Service
+	session     string
+	readrequest *ReadRequest
+	urlParams_  gensupport.URLParams
+	ctx_        context.Context
+	header_     http.Header
+}
+
+// Read: Reads rows from the database using key lookups and scans, as
+// a
+// simple key/value style alternative to
+// ExecuteSql.  This method cannot be used to
+// return a result set larger than 10 MiB; if the read matches more
+// data than that, the read fails with a
+// `FAILED_PRECONDITION`
+// error.
+//
+// Reads inside read-write transactions might return `ABORTED`. If
+// this occurs, the application should restart the transaction from
+// the beginning. See Transaction for more details.
+//
+// Larger result sets can be yielded in streaming fashion by
+// calling
+// StreamingRead instead.
+func (r *ProjectsInstancesDatabasesSessionsService) Read(session string, readrequest *ReadRequest) *ProjectsInstancesDatabasesSessionsReadCall {
+	c := &ProjectsInstancesDatabasesSessionsReadCall{s: r.s, urlParams_: make(gensupport.URLParams)}
+	c.session = session
+	c.readrequest = readrequest
+	return c
+}
+
+// Fields allows partial responses to be retrieved. See
+// https://developers.google.com/gdata/docs/2.0/basics#PartialResponse
+// for more information.
+func (c *ProjectsInstancesDatabasesSessionsReadCall) Fields(s ...googleapi.Field) *ProjectsInstancesDatabasesSessionsReadCall {
+	c.urlParams_.Set("fields", googleapi.CombineFields(s))
+	return c
+}
+
+// Context sets the context to be used in this call's Do method. Any
+// pending HTTP request will be aborted if the provided context is
+// canceled.
+func (c *ProjectsInstancesDatabasesSessionsReadCall) Context(ctx context.Context) *ProjectsInstancesDatabasesSessionsReadCall {
+	c.ctx_ = ctx
+	return c
+}
+
+// Header returns an http.Header that can be modified by the caller to
+// add HTTP headers to the request.
+func (c *ProjectsInstancesDatabasesSessionsReadCall) Header() http.Header {
+	if c.header_ == nil {
+		c.header_ = make(http.Header)
+	}
+	return c.header_
+}
+
+func (c *ProjectsInstancesDatabasesSessionsReadCall) doRequest(alt string) (*http.Response, error) {
+	reqHeaders := make(http.Header)
+	for k, v := range c.header_ {
+		reqHeaders[k] = v
+	}
+	reqHeaders.Set("User-Agent", c.s.userAgent())
+	var body io.Reader = nil
+	body, err := googleapi.WithoutDataWrapper.JSONReader(c.readrequest)
+	if err != nil {
+		return nil, err
+	}
+	reqHeaders.Set("Content-Type", "application/json")
+	c.urlParams_.Set("alt", alt)
+	urls := googleapi.ResolveRelative(c.s.BasePath, "v1/{+session}:read")
+	urls += "?" + c.urlParams_.Encode()
+	req, _ := http.NewRequest("POST", urls, body)
+	req.Header = reqHeaders
+	googleapi.Expand(req.URL, map[string]string{
+		"session": c.session,
+	})
+	return gensupport.SendRequest(c.ctx_, c.s.client, req)
+}
+
+// Do executes the "spanner.projects.instances.databases.sessions.read" call.
+// Exactly one of *ResultSet or error will be non-nil. Any non-2xx
+// status code is an error. Response headers are in either
+// *ResultSet.ServerResponse.Header or (if a response was returned at
+// all) in error.(*googleapi.Error).Header. Use googleapi.IsNotModified
+// to check whether the returned error was because
+// http.StatusNotModified was returned.
+func (c *ProjectsInstancesDatabasesSessionsReadCall) Do(opts ...googleapi.CallOption) (*ResultSet, error) {
+	gensupport.SetOptions(c.urlParams_, opts...)
+	res, err := c.doRequest("json")
+	if res != nil && res.StatusCode == http.StatusNotModified {
+		if res.Body != nil {
+			res.Body.Close()
+		}
+		return nil, &googleapi.Error{
+			Code:   res.StatusCode,
+			Header: res.Header,
+		}
+	}
+	if err != nil {
+		return nil, err
+	}
+	defer googleapi.CloseBody(res)
+	if err := googleapi.CheckResponse(res); err != nil {
+		return nil, err
+	}
+	ret := &ResultSet{
+		ServerResponse: googleapi.ServerResponse{
+			Header:         res.Header,
+			HTTPStatusCode: res.StatusCode,
+		},
+	}
+	target := &ret
+	if err := json.NewDecoder(res.Body).Decode(target); err != nil {
+		return nil, err
+	}
+	return ret, nil
+	// {
+	//   "description": "Reads rows from the database using key lookups and scans, as a\nsimple key/value style alternative to\nExecuteSql.  This method cannot be used to\nreturn a result set larger than 10 MiB; if the read matches more\ndata than that, the read fails with a `FAILED_PRECONDITION`\nerror.\n\nReads inside read-write transactions might return `ABORTED`. If\nthis occurs, the application should restart the transaction from\nthe beginning. See Transaction for more details.\n\nLarger result sets can be yielded in streaming fashion by calling\nStreamingRead instead.",
+	//   "flatPath": "v1/projects/{projectsId}/instances/{instancesId}/databases/{databasesId}/sessions/{sessionsId}:read",
+	//   "httpMethod": "POST",
+	//   "id": "spanner.projects.instances.databases.sessions.read",
+	//   "parameterOrder": [
+	//     "session"
+	//   ],
+	//   "parameters": {
+	//     "session": {
+	//       "description": "Required. The session in which the read should be performed.",
+	//       "location": "path",
+	//       "pattern": "^projects/[^/]+/instances/[^/]+/databases/[^/]+/sessions/[^/]+$",
+	//       "required": true,
+	//       "type": "string"
+	//     }
+	//   },
+	//   "path": "v1/{+session}:read",
+	//   "request": {
+	//     "$ref": "ReadRequest"
+	//   },
+	//   "response": {
+	//     "$ref": "ResultSet"
+	//   },
+	//   "scopes": [
+	//     "https://www.googleapis.com/auth/cloud-platform"
+	//   ]
+	// }
+
+}
+
+// method id "spanner.projects.instances.databases.sessions.rollback":
+
+type ProjectsInstancesDatabasesSessionsRollbackCall struct {
+	s               *Service
+	session         string
+	rollbackrequest *RollbackRequest
+	urlParams_      gensupport.URLParams
+	ctx_            context.Context
+	header_         http.Header
+}
+
+// Rollback: Rolls back a transaction, releasing any locks it holds. It
+// is a good
+// idea to call this for any transaction that includes one or more
+// Read or ExecuteSql requests and
+// ultimately decides not to commit.
+//
+// `Rollback` returns `OK` if it successfully aborts the transaction,
+// the
+// transaction was already aborted, or the transaction is not
+// found. `Rollback` never returns `ABORTED`.
+func (r *ProjectsInstancesDatabasesSessionsService) Rollback(session string, rollbackrequest *RollbackRequest) *ProjectsInstancesDatabasesSessionsRollbackCall {
+	c := &ProjectsInstancesDatabasesSessionsRollbackCall{s: r.s, urlParams_: make(gensupport.URLParams)}
+	c.session = session
+	c.rollbackrequest = rollbackrequest
+	return c
+}
+
+// Fields allows partial responses to be retrieved. See
+// https://developers.google.com/gdata/docs/2.0/basics#PartialResponse
+// for more information.
+func (c *ProjectsInstancesDatabasesSessionsRollbackCall) Fields(s ...googleapi.Field) *ProjectsInstancesDatabasesSessionsRollbackCall {
+	c.urlParams_.Set("fields", googleapi.CombineFields(s))
+	return c
+}
+
+// Context sets the context to be used in this call's Do method. Any
+// pending HTTP request will be aborted if the provided context is
+// canceled.
+func (c *ProjectsInstancesDatabasesSessionsRollbackCall) Context(ctx context.Context) *ProjectsInstancesDatabasesSessionsRollbackCall {
+	c.ctx_ = ctx
+	return c
+}
+
+// Header returns an http.Header that can be modified by the caller to
+// add HTTP headers to the request.
+func (c *ProjectsInstancesDatabasesSessionsRollbackCall) Header() http.Header {
+	if c.header_ == nil {
+		c.header_ = make(http.Header)
+	}
+	return c.header_
+}
+
+func (c *ProjectsInstancesDatabasesSessionsRollbackCall) doRequest(alt string) (*http.Response, error) {
+	reqHeaders := make(http.Header)
+	for k, v := range c.header_ {
+		reqHeaders[k] = v
+	}
+	reqHeaders.Set("User-Agent", c.s.userAgent())
+	var body io.Reader = nil
+	body, err := googleapi.WithoutDataWrapper.JSONReader(c.rollbackrequest)
+	if err != nil {
+		return nil, err
+	}
+	reqHeaders.Set("Content-Type", "application/json")
+	c.urlParams_.Set("alt", alt)
+	urls := googleapi.ResolveRelative(c.s.BasePath, "v1/{+session}:rollback")
+	urls += "?" + c.urlParams_.Encode()
+	req, _ := http.NewRequest("POST", urls, body)
+	req.Header = reqHeaders
+	googleapi.Expand(req.URL, map[string]string{
+		"session": c.session,
+	})
+	return gensupport.SendRequest(c.ctx_, c.s.client, req)
+}
+
+// Do executes the "spanner.projects.instances.databases.sessions.rollback" call.
+// Exactly one of *Empty or error will be non-nil. Any non-2xx status
+// code is an error. Response headers are in either
+// *Empty.ServerResponse.Header or (if a response was returned at all)
+// in error.(*googleapi.Error).Header. Use googleapi.IsNotModified to
+// check whether the returned error was because http.StatusNotModified
+// was returned.
+func (c *ProjectsInstancesDatabasesSessionsRollbackCall) Do(opts ...googleapi.CallOption) (*Empty, error) {
+	gensupport.SetOptions(c.urlParams_, opts...)
+	res, err := c.doRequest("json")
+	if res != nil && res.StatusCode == http.StatusNotModified {
+		if res.Body != nil {
+			res.Body.Close()
+		}
+		return nil, &googleapi.Error{
+			Code:   res.StatusCode,
+			Header: res.Header,
+		}
+	}
+	if err != nil {
+		return nil, err
+	}
+	defer googleapi.CloseBody(res)
+	if err := googleapi.CheckResponse(res); err != nil {
+		return nil, err
+	}
+	ret := &Empty{
+		ServerResponse: googleapi.ServerResponse{
+			Header:         res.Header,
+			HTTPStatusCode: res.StatusCode,
+		},
+	}
+	target := &ret
+	if err := json.NewDecoder(res.Body).Decode(target); err != nil {
+		return nil, err
+	}
+	return ret, nil
+	// {
+	//   "description": "Rolls back a transaction, releasing any locks it holds. It is a good\nidea to call this for any transaction that includes one or more\nRead or ExecuteSql requests and\nultimately decides not to commit.\n\n`Rollback` returns `OK` if it successfully aborts the transaction, the\ntransaction was already aborted, or the transaction is not\nfound. `Rollback` never returns `ABORTED`.",
+	//   "flatPath": "v1/projects/{projectsId}/instances/{instancesId}/databases/{databasesId}/sessions/{sessionsId}:rollback",
+	//   "httpMethod": "POST",
+	//   "id": "spanner.projects.instances.databases.sessions.rollback",
+	//   "parameterOrder": [
+	//     "session"
+	//   ],
+	//   "parameters": {
+	//     "session": {
+	//       "description": "Required. The session in which the transaction to roll back is running.",
+	//       "location": "path",
+	//       "pattern": "^projects/[^/]+/instances/[^/]+/databases/[^/]+/sessions/[^/]+$",
+	//       "required": true,
+	//       "type": "string"
+	//     }
+	//   },
+	//   "path": "v1/{+session}:rollback",
+	//   "request": {
+	//     "$ref": "RollbackRequest"
+	//   },
+	//   "response": {
+	//     "$ref": "Empty"
+	//   },
+	//   "scopes": [
+	//     "https://www.googleapis.com/auth/cloud-platform"
+	//   ]
+	// }
+
+}
+
+// method id "spanner.projects.instances.databases.sessions.streamingRead":
+
+type ProjectsInstancesDatabasesSessionsStreamingReadCall struct {
+	s           *Service
+	session     string
+	readrequest *ReadRequest
+	urlParams_  gensupport.URLParams
+	ctx_        context.Context
+	header_     http.Header
+}
+
+// StreamingRead: Like Read, except returns the result set as a
+// stream. Unlike Read, there is no limit on the
+// size of the returned result set. However, no individual row in
+// the result set can exceed 100 MiB, and no column value can exceed
+// 10 MiB.
+func (r *ProjectsInstancesDatabasesSessionsService) StreamingRead(session string, readrequest *ReadRequest) *ProjectsInstancesDatabasesSessionsStreamingReadCall {
+	c := &ProjectsInstancesDatabasesSessionsStreamingReadCall{s: r.s, urlParams_: make(gensupport.URLParams)}
+	c.session = session
+	c.readrequest = readrequest
+	return c
+}
+
+// Fields allows partial responses to be retrieved. See
+// https://developers.google.com/gdata/docs/2.0/basics#PartialResponse
+// for more information.
+func (c *ProjectsInstancesDatabasesSessionsStreamingReadCall) Fields(s ...googleapi.Field) *ProjectsInstancesDatabasesSessionsStreamingReadCall {
+	c.urlParams_.Set("fields", googleapi.CombineFields(s))
+	return c
+}
+
+// Context sets the context to be used in this call's Do method. Any
+// pending HTTP request will be aborted if the provided context is
+// canceled.
+func (c *ProjectsInstancesDatabasesSessionsStreamingReadCall) Context(ctx context.Context) *ProjectsInstancesDatabasesSessionsStreamingReadCall {
+	c.ctx_ = ctx
+	return c
+}
+
+// Header returns an http.Header that can be modified by the caller to
+// add HTTP headers to the request.
+func (c *ProjectsInstancesDatabasesSessionsStreamingReadCall) Header() http.Header {
+	if c.header_ == nil {
+		c.header_ = make(http.Header)
+	}
+	return c.header_
+}
+
+func (c *ProjectsInstancesDatabasesSessionsStreamingReadCall) doRequest(alt string) (*http.Response, error) {
+	reqHeaders := make(http.Header)
+	for k, v := range c.header_ {
+		reqHeaders[k] = v
+	}
+	reqHeaders.Set("User-Agent", c.s.userAgent())
+	var body io.Reader = nil
+	body, err := googleapi.WithoutDataWrapper.JSONReader(c.readrequest)
+	if err != nil {
+		return nil, err
+	}
+	reqHeaders.Set("Content-Type", "application/json")
+	c.urlParams_.Set("alt", alt)
+	urls := googleapi.ResolveRelative(c.s.BasePath, "v1/{+session}:streamingRead")
+	urls += "?" + c.urlParams_.Encode()
+	req, _ := http.NewRequest("POST", urls, body)
+	req.Header = reqHeaders
+	googleapi.Expand(req.URL, map[string]string{
+		"session": c.session,
+	})
+	return gensupport.SendRequest(c.ctx_, c.s.client, req)
+}
+
+// Do executes the "spanner.projects.instances.databases.sessions.streamingRead" call.
+// Exactly one of *PartialResultSet or error will be non-nil. Any
+// non-2xx status code is an error. Response headers are in either
+// *PartialResultSet.ServerResponse.Header or (if a response was
+// returned at all) in error.(*googleapi.Error).Header. Use
+// googleapi.IsNotModified to check whether the returned error was
+// because http.StatusNotModified was returned.
+func (c *ProjectsInstancesDatabasesSessionsStreamingReadCall) Do(opts ...googleapi.CallOption) (*PartialResultSet, error) {
+	gensupport.SetOptions(c.urlParams_, opts...)
+	res, err := c.doRequest("json")
+	if res != nil && res.StatusCode == http.StatusNotModified {
+		if res.Body != nil {
+			res.Body.Close()
+		}
+		return nil, &googleapi.Error{
+			Code:   res.StatusCode,
+			Header: res.Header,
+		}
+	}
+	if err != nil {
+		return nil, err
+	}
+	defer googleapi.CloseBody(res)
+	if err := googleapi.CheckResponse(res); err != nil {
+		return nil, err
+	}
+	ret := &PartialResultSet{
+		ServerResponse: googleapi.ServerResponse{
+			Header:         res.Header,
+			HTTPStatusCode: res.StatusCode,
+		},
+	}
+	target := &ret
+	if err := json.NewDecoder(res.Body).Decode(target); err != nil {
+		return nil, err
+	}
+	return ret, nil
+	// {
+	//   "description": "Like Read, except returns the result set as a\nstream. Unlike Read, there is no limit on the\nsize of the returned result set. However, no individual row in\nthe result set can exceed 100 MiB, and no column value can exceed\n10 MiB.",
+	//   "flatPath": "v1/projects/{projectsId}/instances/{instancesId}/databases/{databasesId}/sessions/{sessionsId}:streamingRead",
+	//   "httpMethod": "POST",
+	//   "id": "spanner.projects.instances.databases.sessions.streamingRead",
+	//   "parameterOrder": [
+	//     "session"
+	//   ],
+	//   "parameters": {
+	//     "session": {
+	//       "description": "Required. The session in which the read should be performed.",
+	//       "location": "path",
+	//       "pattern": "^projects/[^/]+/instances/[^/]+/databases/[^/]+/sessions/[^/]+$",
+	//       "required": true,
+	//       "type": "string"
+	//     }
+	//   },
+	//   "path": "v1/{+session}:streamingRead",
+	//   "request": {
+	//     "$ref": "ReadRequest"
+	//   },
+	//   "response": {
+	//     "$ref": "PartialResultSet"
+	//   },
+	//   "scopes": [
+	//     "https://www.googleapis.com/auth/cloud-platform"
+	//   ]
+	// }
+
+}
+
+// method id "spanner.projects.instances.operations.cancel":
+
+type ProjectsInstancesOperationsCancelCall struct {
+	s          *Service
+	name       string
+	urlParams_ gensupport.URLParams
+	ctx_       context.Context
+	header_    http.Header
+}
+
+// Cancel: 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`.
+func (r *ProjectsInstancesOperationsService) Cancel(name string) *ProjectsInstancesOperationsCancelCall {
+	c := &ProjectsInstancesOperationsCancelCall{s: r.s, urlParams_: make(gensupport.URLParams)}
+	c.name = name
+	return c
+}
+
+// Fields allows partial responses to be retrieved. See
+// https://developers.google.com/gdata/docs/2.0/basics#PartialResponse
+// for more information.
+func (c *ProjectsInstancesOperationsCancelCall) Fields(s ...googleapi.Field) *ProjectsInstancesOperationsCancelCall {
+	c.urlParams_.Set("fields", googleapi.CombineFields(s))
+	return c
+}
+
+// Context sets the context to be used in this call's Do method. Any
+// pending HTTP request will be aborted if the provided context is
+// canceled.
+func (c *ProjectsInstancesOperationsCancelCall) Context(ctx context.Context) *ProjectsInstancesOperationsCancelCall {
+	c.ctx_ = ctx
+	return c
+}
+
+// Header returns an http.Header that can be modified by the caller to
+// add HTTP headers to the request.
+func (c *ProjectsInstancesOperationsCancelCall) Header() http.Header {
+	if c.header_ == nil {
+		c.header_ = make(http.Header)
+	}
+	return c.header_
+}
+
+func (c *ProjectsInstancesOperationsCancelCall) doRequest(alt string) (*http.Response, error) {
+	reqHeaders := make(http.Header)
+	for k, v := range c.header_ {
+		reqHeaders[k] = v
+	}
+	reqHeaders.Set("User-Agent", c.s.userAgent())
+	var body io.Reader = nil
+	c.urlParams_.Set("alt", alt)
+	urls := googleapi.ResolveRelative(c.s.BasePath, "v1/{+name}:cancel")
+	urls += "?" + c.urlParams_.Encode()
+	req, _ := http.NewRequest("POST", urls, body)
+	req.Header = reqHeaders
+	googleapi.Expand(req.URL, map[string]string{
+		"name": c.name,
+	})
+	return gensupport.SendRequest(c.ctx_, c.s.client, req)
+}
+
+// Do executes the "spanner.projects.instances.operations.cancel" call.
+// Exactly one of *Empty or error will be non-nil. Any non-2xx status
+// code is an error. Response headers are in either
+// *Empty.ServerResponse.Header or (if a response was returned at all)
+// in error.(*googleapi.Error).Header. Use googleapi.IsNotModified to
+// check whether the returned error was because http.StatusNotModified
+// was returned.
+func (c *ProjectsInstancesOperationsCancelCall) Do(opts ...googleapi.CallOption) (*Empty, error) {
+	gensupport.SetOptions(c.urlParams_, opts...)
+	res, err := c.doRequest("json")
+	if res != nil && res.StatusCode == http.StatusNotModified {
+		if res.Body != nil {
+			res.Body.Close()
+		}
+		return nil, &googleapi.Error{
+			Code:   res.StatusCode,
+			Header: res.Header,
+		}
+	}
+	if err != nil {
+		return nil, err
+	}
+	defer googleapi.CloseBody(res)
+	if err := googleapi.CheckResponse(res); err != nil {
+		return nil, err
+	}
+	ret := &Empty{
+		ServerResponse: googleapi.ServerResponse{
+			Header:         res.Header,
+			HTTPStatusCode: res.StatusCode,
+		},
+	}
+	target := &ret
+	if err := json.NewDecoder(res.Body).Decode(target); err != nil {
+		return nil, err
+	}
+	return ret, nil
+	// {
+	//   "description": "Starts asynchronous cancellation on a long-running operation.  The server\nmakes a best effort to cancel the operation, but success is not\nguaranteed.  If the server doesn't support this method, it returns\n`google.rpc.Code.UNIMPLEMENTED`.  Clients can use\nOperations.GetOperation or\nother methods to check whether the cancellation succeeded or whether the\noperation completed despite cancellation. On successful cancellation,\nthe operation is not deleted; instead, it becomes an operation with\nan Operation.error value with a google.rpc.Status.code of 1,\ncorresponding to `Code.CANCELLED`.",
+	//   "flatPath": "v1/projects/{projectsId}/instances/{instancesId}/operations/{operationsId}:cancel",
+	//   "httpMethod": "POST",
+	//   "id": "spanner.projects.instances.operations.cancel",
+	//   "parameterOrder": [
+	//     "name"
+	//   ],
+	//   "parameters": {
+	//     "name": {
+	//       "description": "The name of the operation resource to be cancelled.",
+	//       "location": "path",
+	//       "pattern": "^projects/[^/]+/instances/[^/]+/operations/[^/]+$",
+	//       "required": true,
+	//       "type": "string"
+	//     }
+	//   },
+	//   "path": "v1/{+name}:cancel",
+	//   "response": {
+	//     "$ref": "Empty"
+	//   },
+	//   "scopes": [
+	//     "https://www.googleapis.com/auth/cloud-platform"
+	//   ]
+	// }
+
+}
+
+// method id "spanner.projects.instances.operations.delete":
+
+type ProjectsInstancesOperationsDeleteCall struct {
+	s          *Service
+	name       string
+	urlParams_ gensupport.URLParams
+	ctx_       context.Context
+	header_    http.Header
+}
+
+// Delete: 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`.
+func (r *ProjectsInstancesOperationsService) Delete(name string) *ProjectsInstancesOperationsDeleteCall {
+	c := &ProjectsInstancesOperationsDeleteCall{s: r.s, urlParams_: make(gensupport.URLParams)}
+	c.name = name
+	return c
+}
+
+// Fields allows partial responses to be retrieved. See
+// https://developers.google.com/gdata/docs/2.0/basics#PartialResponse
+// for more information.
+func (c *ProjectsInstancesOperationsDeleteCall) Fields(s ...googleapi.Field) *ProjectsInstancesOperationsDeleteCall {
+	c.urlParams_.Set("fields", googleapi.CombineFields(s))
+	return c
+}
+
+// Context sets the context to be used in this call's Do method. Any
+// pending HTTP request will be aborted if the provided context is
+// canceled.
+func (c *ProjectsInstancesOperationsDeleteCall) Context(ctx context.Context) *ProjectsInstancesOperationsDeleteCall {
+	c.ctx_ = ctx
+	return c
+}
+
+// Header returns an http.Header that can be modified by the caller to
+// add HTTP headers to the request.
+func (c *ProjectsInstancesOperationsDeleteCall) Header() http.Header {
+	if c.header_ == nil {
+		c.header_ = make(http.Header)
+	}
+	return c.header_
+}
+
+func (c *ProjectsInstancesOperationsDeleteCall) doRequest(alt string) (*http.Response, error) {
+	reqHeaders := make(http.Header)
+	for k, v := range c.header_ {
+		reqHeaders[k] = v
+	}
+	reqHeaders.Set("User-Agent", c.s.userAgent())
+	var body io.Reader = nil
+	c.urlParams_.Set("alt", alt)
+	urls := googleapi.ResolveRelative(c.s.BasePath, "v1/{+name}")
+	urls += "?" + c.urlParams_.Encode()
+	req, _ := http.NewRequest("DELETE", urls, body)
+	req.Header = reqHeaders
+	googleapi.Expand(req.URL, map[string]string{
+		"name": c.name,
+	})
+	return gensupport.SendRequest(c.ctx_, c.s.client, req)
+}
+
+// Do executes the "spanner.projects.instances.operations.delete" call.
+// Exactly one of *Empty or error will be non-nil. Any non-2xx status
+// code is an error. Response headers are in either
+// *Empty.ServerResponse.Header or (if a response was returned at all)
+// in error.(*googleapi.Error).Header. Use googleapi.IsNotModified to
+// check whether the returned error was because http.StatusNotModified
+// was returned.
+func (c *ProjectsInstancesOperationsDeleteCall) Do(opts ...googleapi.CallOption) (*Empty, error) {
+	gensupport.SetOptions(c.urlParams_, opts...)
+	res, err := c.doRequest("json")
+	if res != nil && res.StatusCode == http.StatusNotModified {
+		if res.Body != nil {
+			res.Body.Close()
+		}
+		return nil, &googleapi.Error{
+			Code:   res.StatusCode,
+			Header: res.Header,
+		}
+	}
+	if err != nil {
+		return nil, err
+	}
+	defer googleapi.CloseBody(res)
+	if err := googleapi.CheckResponse(res); err != nil {
+		return nil, err
+	}
+	ret := &Empty{
+		ServerResponse: googleapi.ServerResponse{
+			Header:         res.Header,
+			HTTPStatusCode: res.StatusCode,
+		},
+	}
+	target := &ret
+	if err := json.NewDecoder(res.Body).Decode(target); err != nil {
+		return nil, err
+	}
+	return ret, nil
+	// {
+	//   "description": "Deletes a long-running operation. This method indicates that the client is\nno longer interested in the operation result. It does not cancel the\noperation. If the server doesn't support this method, it returns\n`google.rpc.Code.UNIMPLEMENTED`.",
+	//   "flatPath": "v1/projects/{projectsId}/instances/{instancesId}/operations/{operationsId}",
+	//   "httpMethod": "DELETE",
+	//   "id": "spanner.projects.instances.operations.delete",
+	//   "parameterOrder": [
+	//     "name"
+	//   ],
+	//   "parameters": {
+	//     "name": {
+	//       "description": "The name of the operation resource to be deleted.",
+	//       "location": "path",
+	//       "pattern": "^projects/[^/]+/instances/[^/]+/operations/[^/]+$",
+	//       "required": true,
+	//       "type": "string"
+	//     }
+	//   },
+	//   "path": "v1/{+name}",
+	//   "response": {
+	//     "$ref": "Empty"
+	//   },
+	//   "scopes": [
+	//     "https://www.googleapis.com/auth/cloud-platform"
+	//   ]
+	// }
+
+}
+
+// method id "spanner.projects.instances.operations.get":
+
+type ProjectsInstancesOperationsGetCall struct {
+	s            *Service
+	name         string
+	urlParams_   gensupport.URLParams
+	ifNoneMatch_ string
+	ctx_         context.Context
+	header_      http.Header
+}
+
+// Get: 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.
+func (r *ProjectsInstancesOperationsService) Get(name string) *ProjectsInstancesOperationsGetCall {
+	c := &ProjectsInstancesOperationsGetCall{s: r.s, urlParams_: make(gensupport.URLParams)}
+	c.name = name
+	return c
+}
+
+// Fields allows partial responses to be retrieved. See
+// https://developers.google.com/gdata/docs/2.0/basics#PartialResponse
+// for more information.
+func (c *ProjectsInstancesOperationsGetCall) Fields(s ...googleapi.Field) *ProjectsInstancesOperationsGetCall {
+	c.urlParams_.Set("fields", googleapi.CombineFields(s))
+	return c
+}
+
+// IfNoneMatch sets the optional parameter which makes the operation
+// fail if the object's ETag matches the given value. This is useful for
+// getting updates only after the object has changed since the last
+// request. Use googleapi.IsNotModified to check whether the response
+// error from Do is the result of In-None-Match.
+func (c *ProjectsInstancesOperationsGetCall) IfNoneMatch(entityTag string) *ProjectsInstancesOperationsGetCall {
+	c.ifNoneMatch_ = entityTag
+	return c
+}
+
+// Context sets the context to be used in this call's Do method. Any
+// pending HTTP request will be aborted if the provided context is
+// canceled.
+func (c *ProjectsInstancesOperationsGetCall) Context(ctx context.Context) *ProjectsInstancesOperationsGetCall {
+	c.ctx_ = ctx
+	return c
+}
+
+// Header returns an http.Header that can be modified by the caller to
+// add HTTP headers to the request.
+func (c *ProjectsInstancesOperationsGetCall) Header() http.Header {
+	if c.header_ == nil {
+		c.header_ = make(http.Header)
+	}
+	return c.header_
+}
+
+func (c *ProjectsInstancesOperationsGetCall) doRequest(alt string) (*http.Response, error) {
+	reqHeaders := make(http.Header)
+	for k, v := range c.header_ {
+		reqHeaders[k] = v
+	}
+	reqHeaders.Set("User-Agent", c.s.userAgent())
+	if c.ifNoneMatch_ != "" {
+		reqHeaders.Set("If-None-Match", c.ifNoneMatch_)
+	}
+	var body io.Reader = nil
+	c.urlParams_.Set("alt", alt)
+	urls := googleapi.ResolveRelative(c.s.BasePath, "v1/{+name}")
+	urls += "?" + c.urlParams_.Encode()
+	req, _ := http.NewRequest("GET", urls, body)
+	req.Header = reqHeaders
+	googleapi.Expand(req.URL, map[string]string{
+		"name": c.name,
+	})
+	return gensupport.SendRequest(c.ctx_, c.s.client, req)
+}
+
+// Do executes the "spanner.projects.instances.operations.get" call.
+// Exactly one of *Operation or error will be non-nil. Any non-2xx
+// status code is an error. Response headers are in either
+// *Operation.ServerResponse.Header or (if a response was returned at
+// all) in error.(*googleapi.Error).Header. Use googleapi.IsNotModified
+// to check whether the returned error was because
+// http.StatusNotModified was returned.
+func (c *ProjectsInstancesOperationsGetCall) Do(opts ...googleapi.CallOption) (*Operation, error) {
+	gensupport.SetOptions(c.urlParams_, opts...)
+	res, err := c.doRequest("json")
+	if res != nil && res.StatusCode == http.StatusNotModified {
+		if res.Body != nil {
+			res.Body.Close()
+		}
+		return nil, &googleapi.Error{
+			Code:   res.StatusCode,
+			Header: res.Header,
+		}
+	}
+	if err != nil {
+		return nil, err
+	}
+	defer googleapi.CloseBody(res)
+	if err := googleapi.CheckResponse(res); err != nil {
+		return nil, err
+	}
+	ret := &Operation{
+		ServerResponse: googleapi.ServerResponse{
+			Header:         res.Header,
+			HTTPStatusCode: res.StatusCode,
+		},
+	}
+	target := &ret
+	if err := json.NewDecoder(res.Body).Decode(target); err != nil {
+		return nil, err
+	}
+	return ret, nil
+	// {
+	//   "description": "Gets the latest state of a long-running operation.  Clients can use this\nmethod to poll the operation result at intervals as recommended by the API\nservice.",
+	//   "flatPath": "v1/projects/{projectsId}/instances/{instancesId}/operations/{operationsId}",
+	//   "httpMethod": "GET",
+	//   "id": "spanner.projects.instances.operations.get",
+	//   "parameterOrder": [
+	//     "name"
+	//   ],
+	//   "parameters": {
+	//     "name": {
+	//       "description": "The name of the operation resource.",
+	//       "location": "path",
+	//       "pattern": "^projects/[^/]+/instances/[^/]+/operations/[^/]+$",
+	//       "required": true,
+	//       "type": "string"
+	//     }
+	//   },
+	//   "path": "v1/{+name}",
+	//   "response": {
+	//     "$ref": "Operation"
+	//   },
+	//   "scopes": [
+	//     "https://www.googleapis.com/auth/cloud-platform"
+	//   ]
+	// }
+
+}
+
+// method id "spanner.projects.instances.operations.list":
+
+type ProjectsInstancesOperationsListCall struct {
+	s            *Service
+	name         string
+	urlParams_   gensupport.URLParams
+	ifNoneMatch_ string
+	ctx_         context.Context
+	header_      http.Header
+}
+
+// List: 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 below allows API services to override the
+// binding
+// to use different resource name schemes, such as `users/*/operations`.
+func (r *ProjectsInstancesOperationsService) List(name string) *ProjectsInstancesOperationsListCall {
+	c := &ProjectsInstancesOperationsListCall{s: r.s, urlParams_: make(gensupport.URLParams)}
+	c.name = name
+	return c
+}
+
+// Filter sets the optional parameter "filter": The standard list
+// filter.
+func (c *ProjectsInstancesOperationsListCall) Filter(filter string) *ProjectsInstancesOperationsListCall {
+	c.urlParams_.Set("filter", filter)
+	return c
+}
+
+// PageSize sets the optional parameter "pageSize": The standard list
+// page size.
+func (c *ProjectsInstancesOperationsListCall) PageSize(pageSize int64) *ProjectsInstancesOperationsListCall {
+	c.urlParams_.Set("pageSize", fmt.Sprint(pageSize))
+	return c
+}
+
+// PageToken sets the optional parameter "pageToken": The standard list
+// page token.
+func (c *ProjectsInstancesOperationsListCall) PageToken(pageToken string) *ProjectsInstancesOperationsListCall {
+	c.urlParams_.Set("pageToken", pageToken)
+	return c
+}
+
+// Fields allows partial responses to be retrieved. See
+// https://developers.google.com/gdata/docs/2.0/basics#PartialResponse
+// for more information.
+func (c *ProjectsInstancesOperationsListCall) Fields(s ...googleapi.Field) *ProjectsInstancesOperationsListCall {
+	c.urlParams_.Set("fields", googleapi.CombineFields(s))
+	return c
+}
+
+// IfNoneMatch sets the optional parameter which makes the operation
+// fail if the object's ETag matches the given value. This is useful for
+// getting updates only after the object has changed since the last
+// request. Use googleapi.IsNotModified to check whether the response
+// error from Do is the result of In-None-Match.
+func (c *ProjectsInstancesOperationsListCall) IfNoneMatch(entityTag string) *ProjectsInstancesOperationsListCall {
+	c.ifNoneMatch_ = entityTag
+	return c
+}
+
+// Context sets the context to be used in this call's Do method. Any
+// pending HTTP request will be aborted if the provided context is
+// canceled.
+func (c *ProjectsInstancesOperationsListCall) Context(ctx context.Context) *ProjectsInstancesOperationsListCall {
+	c.ctx_ = ctx
+	return c
+}
+
+// Header returns an http.Header that can be modified by the caller to
+// add HTTP headers to the request.
+func (c *ProjectsInstancesOperationsListCall) Header() http.Header {
+	if c.header_ == nil {
+		c.header_ = make(http.Header)
+	}
+	return c.header_
+}
+
+func (c *ProjectsInstancesOperationsListCall) doRequest(alt string) (*http.Response, error) {
+	reqHeaders := make(http.Header)
+	for k, v := range c.header_ {
+		reqHeaders[k] = v
+	}
+	reqHeaders.Set("User-Agent", c.s.userAgent())
+	if c.ifNoneMatch_ != "" {
+		reqHeaders.Set("If-None-Match", c.ifNoneMatch_)
+	}
+	var body io.Reader = nil
+	c.urlParams_.Set("alt", alt)
+	urls := googleapi.ResolveRelative(c.s.BasePath, "v1/{+name}")
+	urls += "?" + c.urlParams_.Encode()
+	req, _ := http.NewRequest("GET", urls, body)
+	req.Header = reqHeaders
+	googleapi.Expand(req.URL, map[string]string{
+		"name": c.name,
+	})
+	return gensupport.SendRequest(c.ctx_, c.s.client, req)
+}
+
+// Do executes the "spanner.projects.instances.operations.list" call.
+// Exactly one of *ListOperationsResponse or error will be non-nil. Any
+// non-2xx status code is an error. Response headers are in either
+// *ListOperationsResponse.ServerResponse.Header or (if a response was
+// returned at all) in error.(*googleapi.Error).Header. Use
+// googleapi.IsNotModified to check whether the returned error was
+// because http.StatusNotModified was returned.
+func (c *ProjectsInstancesOperationsListCall) Do(opts ...googleapi.CallOption) (*ListOperationsResponse, error) {
+	gensupport.SetOptions(c.urlParams_, opts...)
+	res, err := c.doRequest("json")
+	if res != nil && res.StatusCode == http.StatusNotModified {
+		if res.Body != nil {
+			res.Body.Close()
+		}
+		return nil, &googleapi.Error{
+			Code:   res.StatusCode,
+			Header: res.Header,
+		}
+	}
+	if err != nil {
+		return nil, err
+	}
+	defer googleapi.CloseBody(res)
+	if err := googleapi.CheckResponse(res); err != nil {
+		return nil, err
+	}
+	ret := &ListOperationsResponse{
+		ServerResponse: googleapi.ServerResponse{
+			Header:         res.Header,
+			HTTPStatusCode: res.StatusCode,
+		},
+	}
+	target := &ret
+	if err := json.NewDecoder(res.Body).Decode(target); err != nil {
+		return nil, err
+	}
+	return ret, nil
+	// {
+	//   "description": "Lists operations that match the specified filter in the request. If the\nserver doesn't support this method, it returns `UNIMPLEMENTED`.\n\nNOTE: the `name` binding below allows API services to override the binding\nto use different resource name schemes, such as `users/*/operations`.",
+	//   "flatPath": "v1/projects/{projectsId}/instances/{instancesId}/operations",
+	//   "httpMethod": "GET",
+	//   "id": "spanner.projects.instances.operations.list",
+	//   "parameterOrder": [
+	//     "name"
+	//   ],
+	//   "parameters": {
+	//     "filter": {
+	//       "description": "The standard list filter.",
+	//       "location": "query",
+	//       "type": "string"
+	//     },
+	//     "name": {
+	//       "description": "The name of the operation collection.",
+	//       "location": "path",
+	//       "pattern": "^projects/[^/]+/instances/[^/]+/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"
+	//   ]
+	// }
+
+}
+
+// Pages invokes f for each page of results.
+// A non-nil error returned from f will halt the iteration.
+// The provided context supersedes any context provided to the Context method.
+func (c *ProjectsInstancesOperationsListCall) Pages(ctx context.Context, f func(*ListOperationsResponse) error) error {
+	c.ctx_ = ctx
+	defer c.PageToken(c.urlParams_.Get("pageToken")) // reset paging to original point
+	for {
+		x, err := c.Do()
+		if err != nil {
+			return err
+		}
+		if err := f(x); err != nil {
+			return err
+		}
+		if x.NextPageToken == "" {
+			return nil
+		}
+		c.PageToken(x.NextPageToken)
+	}
 }
diff --git a/spectrum/v1explorer/spectrum-gen.go b/spectrum/v1explorer/spectrum-gen.go
index d17b1f3..2d7f1f0 100644
--- a/spectrum/v1explorer/spectrum-gen.go
+++ b/spectrum/v1explorer/spectrum-gen.go
@@ -55,10 +55,9 @@
 }
 
 type Service struct {
-	client                    *http.Client
-	BasePath                  string // API endpoint base URL
-	UserAgent                 string // optional additional User-Agent fragment
-	GoogleClientHeaderElement string // client header fragment, for Google use only
+	client    *http.Client
+	BasePath  string // API endpoint base URL
+	UserAgent string // optional additional User-Agent fragment
 
 	Paws *PawsService
 }
@@ -70,10 +69,6 @@
 	return googleapi.UserAgent + " " + s.UserAgent
 }
 
-func (s *Service) clientHeader() string {
-	return gensupport.GoogleClientHeader("20170210", s.GoogleClientHeaderElement)
-}
-
 func NewPawsService(s *Service) *PawsService {
 	rs := &PawsService{s: s}
 	return rs
@@ -2004,7 +1999,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	var body io.Reader = nil
 	body, err := googleapi.WithoutDataWrapper.JSONReader(c.pawsgetspectrumrequest)
 	if err != nil {
@@ -2120,7 +2114,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	var body io.Reader = nil
 	body, err := googleapi.WithoutDataWrapper.JSONReader(c.pawsgetspectrumbatchrequest)
 	if err != nil {
@@ -2236,7 +2229,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	var body io.Reader = nil
 	body, err := googleapi.WithoutDataWrapper.JSONReader(c.pawsinitrequest)
 	if err != nil {
@@ -2355,7 +2347,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	var body io.Reader = nil
 	body, err := googleapi.WithoutDataWrapper.JSONReader(c.pawsnotifyspectrumuserequest)
 	if err != nil {
@@ -2472,7 +2463,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	var body io.Reader = nil
 	body, err := googleapi.WithoutDataWrapper.JSONReader(c.pawsregisterrequest)
 	if err != nil {
@@ -2590,7 +2580,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	var body io.Reader = nil
 	body, err := googleapi.WithoutDataWrapper.JSONReader(c.pawsverifydevicerequest)
 	if err != nil {
diff --git a/speech/v1beta1/speech-api.json b/speech/v1beta1/speech-api.json
index ba8d57c..6d4949e 100644
--- a/speech/v1beta1/speech-api.json
+++ b/speech/v1beta1/speech-api.json
@@ -1,4 +1,494 @@
 {
+  "ownerName": "Google",
+  "discoveryVersion": "v1",
+  "version_module": "True",
+  "resources": {
+    "speech": {
+      "methods": {
+        "syncrecognize": {
+          "response": {
+            "$ref": "SyncRecognizeResponse"
+          },
+          "parameterOrder": [],
+          "httpMethod": "POST",
+          "parameters": {},
+          "scopes": [
+            "https://www.googleapis.com/auth/cloud-platform"
+          ],
+          "flatPath": "v1beta1/speech:syncrecognize",
+          "path": "v1beta1/speech:syncrecognize",
+          "id": "speech.speech.syncrecognize",
+          "request": {
+            "$ref": "SyncRecognizeRequest"
+          },
+          "description": "Performs synchronous speech recognition: receive results after all audio\nhas been sent and processed."
+        },
+        "asyncrecognize": {
+          "request": {
+            "$ref": "AsyncRecognizeRequest"
+          },
+          "description": "Performs asynchronous speech recognition: receive results via the\n[google.longrunning.Operations]\n(/speech/reference/rest/v1beta1/operations#Operation)\ninterface. Returns either an\n`Operation.error` or an `Operation.response` which contains\nan `AsyncRecognizeResponse` message.",
+          "response": {
+            "$ref": "Operation"
+          },
+          "parameterOrder": [],
+          "httpMethod": "POST",
+          "parameters": {},
+          "scopes": [
+            "https://www.googleapis.com/auth/cloud-platform"
+          ],
+          "flatPath": "v1beta1/speech:asyncrecognize",
+          "path": "v1beta1/speech:asyncrecognize",
+          "id": "speech.speech.asyncrecognize"
+        }
+      }
+    },
+    "operations": {
+      "methods": {
+        "cancel": {
+          "httpMethod": "POST",
+          "response": {
+            "$ref": "Empty"
+          },
+          "parameterOrder": [
+            "name"
+          ],
+          "scopes": [
+            "https://www.googleapis.com/auth/cloud-platform"
+          ],
+          "parameters": {
+            "name": {
+              "description": "The name of the operation resource to be cancelled.",
+              "required": true,
+              "type": "string",
+              "pattern": "^[^/]+$",
+              "location": "path"
+            }
+          },
+          "flatPath": "v1beta1/operations/{operationsId}:cancel",
+          "id": "speech.operations.cancel",
+          "path": "v1beta1/operations/{+name}:cancel",
+          "description": "Starts asynchronous cancellation on a long-running operation.  The server\nmakes a best effort to cancel the operation, but success is not\nguaranteed.  If the server doesn't support this method, it returns\n`google.rpc.Code.UNIMPLEMENTED`.  Clients can use\nOperations.GetOperation or\nother methods to check whether the cancellation succeeded or whether the\noperation completed despite cancellation. On successful cancellation,\nthe operation is not deleted; instead, it becomes an operation with\nan Operation.error value with a google.rpc.Status.code of 1,\ncorresponding to `Code.CANCELLED`."
+        },
+        "delete": {
+          "id": "speech.operations.delete",
+          "path": "v1beta1/operations/{+name}",
+          "description": "Deletes a long-running operation. This method indicates that the client is\nno longer interested in the operation result. It does not cancel the\noperation. If the server doesn't support this method, it returns\n`google.rpc.Code.UNIMPLEMENTED`.",
+          "httpMethod": "DELETE",
+          "response": {
+            "$ref": "Empty"
+          },
+          "parameterOrder": [
+            "name"
+          ],
+          "scopes": [
+            "https://www.googleapis.com/auth/cloud-platform"
+          ],
+          "parameters": {
+            "name": {
+              "description": "The name of the operation resource to be deleted.",
+              "required": true,
+              "type": "string",
+              "pattern": "^[^/]+$",
+              "location": "path"
+            }
+          },
+          "flatPath": "v1beta1/operations/{operationsId}"
+        },
+        "list": {
+          "path": "v1beta1/operations",
+          "id": "speech.operations.list",
+          "description": "Lists operations that match the specified filter in the request. If the\nserver doesn't support this method, it returns `UNIMPLEMENTED`.\n\nNOTE: the `name` binding below allows API services to override the binding\nto use different resource name schemes, such as `users/*/operations`.",
+          "response": {
+            "$ref": "ListOperationsResponse"
+          },
+          "parameterOrder": [],
+          "httpMethod": "GET",
+          "parameters": {
+            "name": {
+              "location": "query",
+              "description": "The name of the operation collection.",
+              "type": "string"
+            },
+            "pageToken": {
+              "description": "The standard list page token.",
+              "type": "string",
+              "location": "query"
+            },
+            "pageSize": {
+              "description": "The standard list page size.",
+              "format": "int32",
+              "type": "integer",
+              "location": "query"
+            },
+            "filter": {
+              "description": "The standard list filter.",
+              "type": "string",
+              "location": "query"
+            }
+          },
+          "scopes": [
+            "https://www.googleapis.com/auth/cloud-platform"
+          ],
+          "flatPath": "v1beta1/operations"
+        },
+        "get": {
+          "parameterOrder": [
+            "name"
+          ],
+          "httpMethod": "GET",
+          "response": {
+            "$ref": "Operation"
+          },
+          "parameters": {
+            "name": {
+              "pattern": "^[^/]+$",
+              "location": "path",
+              "description": "The name of the operation resource.",
+              "required": true,
+              "type": "string"
+            }
+          },
+          "scopes": [
+            "https://www.googleapis.com/auth/cloud-platform"
+          ],
+          "flatPath": "v1beta1/operations/{operationsId}",
+          "path": "v1beta1/operations/{+name}",
+          "id": "speech.operations.get",
+          "description": "Gets the latest state of a long-running operation.  Clients can use this\nmethod to poll the operation result at intervals as recommended by the API\nservice."
+        }
+      }
+    }
+  },
+  "parameters": {
+    "alt": {
+      "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",
+      "description": "Data format for response.",
+      "default": "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"
+    },
+    "access_token": {
+      "location": "query",
+      "description": "OAuth access token.",
+      "type": "string"
+    },
+    "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"
+    },
+    "pp": {
+      "location": "query",
+      "description": "Pretty-print response.",
+      "type": "boolean",
+      "default": "true"
+    },
+    "bearer_token": {
+      "location": "query",
+      "description": "OAuth bearer token.",
+      "type": "string"
+    },
+    "oauth_token": {
+      "location": "query",
+      "description": "OAuth 2.0 token for the current user.",
+      "type": "string"
+    },
+    "upload_protocol": {
+      "description": "Upload protocol for media (e.g. \"raw\", \"multipart\").",
+      "type": "string",
+      "location": "query"
+    },
+    "prettyPrint": {
+      "location": "query",
+      "description": "Returns response with indentations and line breaks.",
+      "type": "boolean",
+      "default": "true"
+    },
+    "uploadType": {
+      "location": "query",
+      "description": "Legacy upload protocol for media (e.g. \"media\", \"multipart\").",
+      "type": "string"
+    },
+    "fields": {
+      "location": "query",
+      "description": "Selector specifying which fields to include in a partial response.",
+      "type": "string"
+    },
+    "callback": {
+      "location": "query",
+      "description": "JSONP",
+      "type": "string"
+    },
+    "$.xgafv": {
+      "enum": [
+        "1",
+        "2"
+      ],
+      "description": "V1 error format.",
+      "type": "string",
+      "enumDescriptions": [
+        "v1 error format",
+        "v2 error format"
+      ],
+      "location": "query"
+    }
+  },
+  "schemas": {
+    "Operation": {
+      "description": "This resource represents a long-running operation that is the result of a\nnetwork API call.",
+      "type": "object",
+      "properties": {
+        "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\nmethod returns no data on success, such as `Delete`, the response is\n`google.protobuf.Empty`.  If the original method is standard\n`Get`/`Create`/`Update`, the response should be the resource.  For other\nmethods, the response should have the type `XxxResponse`, where `Xxx`\nis the original method name.  For example, if the original method name\nis `TakeSnapshot()`, the inferred response type is\n`TakeSnapshotResponse`.",
+          "type": "object"
+        },
+        "name": {
+          "description": "The server-assigned name, which is only unique within the same service that\noriginally returns it. If you use the default HTTP mapping, the\n`name` should have the format of `operations/some/unique/name`.",
+          "type": "string"
+        },
+        "error": {
+          "description": "The error result of the operation in case of failure or cancellation.",
+          "$ref": "Status"
+        },
+        "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\ncontains progress information and common metadata such as create time.\nSome services might not provide such metadata.  Any method that returns a\nlong-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.\nIf true, the operation is completed, and either `error` or `response` is\navailable.",
+          "type": "boolean"
+        }
+      },
+      "id": "Operation"
+    },
+    "RecognitionConfig": {
+      "properties": {
+        "maxAlternatives": {
+          "description": "*Optional* Maximum number of recognition hypotheses to be returned.\nSpecifically, the maximum number of `SpeechRecognitionAlternative` messages\nwithin each `SpeechRecognitionResult`.\nThe server may return fewer than `max_alternatives`.\nValid values are `0`-`30`. A value of `0` or `1` will return a maximum of\none. If omitted, will return a maximum of one.",
+          "format": "int32",
+          "type": "integer"
+        },
+        "sampleRate": {
+          "description": "*Required* Sample rate in Hertz of the audio data sent in all\n`RecognitionAudio` messages. Valid values are: 8000-48000.\n16000 is optimal. For best results, set the sampling rate of the audio\nsource to 16000 Hz. If that's not possible, use the native sample rate of\nthe audio source (instead of re-sampling).",
+          "format": "int32",
+          "type": "integer"
+        },
+        "languageCode": {
+          "description": "*Optional* The language of the supplied audio as a BCP-47 language tag.\nExample: \"en-GB\"  https://www.rfc-editor.org/rfc/bcp/bcp47.txt\nIf omitted, defaults to \"en-US\". See\n[Language Support](https://cloud.google.com/speech/docs/languages)\nfor a list of the currently supported language codes.",
+          "type": "string"
+        },
+        "speechContext": {
+          "$ref": "SpeechContext",
+          "description": "*Optional* A means to provide context to assist the speech recognition."
+        },
+        "encoding": {
+          "enum": [
+            "ENCODING_UNSPECIFIED",
+            "LINEAR16",
+            "FLAC",
+            "MULAW",
+            "AMR",
+            "AMR_WB"
+          ],
+          "description": "*Required* Encoding of audio data sent in all `RecognitionAudio` messages.",
+          "type": "string",
+          "enumDescriptions": [
+            "Not specified. Will return result google.rpc.Code.INVALID_ARGUMENT.",
+            "Uncompressed 16-bit signed little-endian samples (Linear PCM).\nThis is the only encoding that may be used by `AsyncRecognize`.",
+            "This is the recommended encoding for `SyncRecognize` and\n`StreamingRecognize` because it uses lossless compression; therefore\nrecognition accuracy is not compromised by a lossy codec.\n\nThe stream FLAC (Free Lossless Audio Codec) encoding is specified at:\nhttp://flac.sourceforge.net/documentation.html.\n16-bit and 24-bit samples are supported.\nNot all fields in STREAMINFO are supported.",
+            "8-bit samples that compand 14-bit audio samples using G.711 PCMU/mu-law.",
+            "Adaptive Multi-Rate Narrowband codec. `sample_rate` must be 8000 Hz.",
+            "Adaptive Multi-Rate Wideband codec. `sample_rate` must be 16000 Hz."
+          ]
+        },
+        "profanityFilter": {
+          "description": "*Optional* If set to `true`, the server will attempt to filter out\nprofanities, replacing all but the initial character in each filtered word\nwith asterisks, e.g. \"f***\". If set to `false` or omitted, profanities\nwon't be filtered out.",
+          "type": "boolean"
+        }
+      },
+      "id": "RecognitionConfig",
+      "description": "Provides information to the recognizer that specifies how to process the\nrequest.",
+      "type": "object"
+    },
+    "SyncRecognizeRequest": {
+      "description": "The top-level message sent by the client for the `SyncRecognize` method.",
+      "type": "object",
+      "properties": {
+        "config": {
+          "description": "*Required* Provides information to the recognizer that specifies how to\nprocess the request.",
+          "$ref": "RecognitionConfig"
+        },
+        "audio": {
+          "$ref": "RecognitionAudio",
+          "description": "*Required* The audio data to be recognized."
+        }
+      },
+      "id": "SyncRecognizeRequest"
+    },
+    "Status": {
+      "description": "The `Status` type defines a logical error model that is suitable for different\nprogramming environments, including REST APIs and RPC APIs. It is used by\n[gRPC](https://github.com/grpc). The error model is designed to be:\n\n- Simple to use and understand for most users\n- Flexible enough to meet unexpected needs\n\n# Overview\n\nThe `Status` message contains three pieces of data: error code, error message,\nand error details. The error code should be an enum value of\ngoogle.rpc.Code, but it may accept additional error codes if needed.  The\nerror message should be a developer-facing English message that helps\ndevelopers *understand* and *resolve* the error. If a localized user-facing\nerror message is needed, put the localized message in the error details or\nlocalize it in the client. The optional error details may contain arbitrary\ninformation about the error. There is a predefined set of error detail types\nin the package `google.rpc` which can be used for common error conditions.\n\n# Language mapping\n\nThe `Status` message is the logical representation of the error model, but it\nis not necessarily the actual wire format. When the `Status` message is\nexposed in different client libraries and different wire protocols, it can be\nmapped differently. For example, it will likely be mapped to some exceptions\nin Java, but more likely mapped to some error codes in C.\n\n# Other uses\n\nThe error model and the `Status` message can be used in a variety of\nenvironments, either with or without APIs, to provide a\nconsistent developer experience across different environments.\n\nExample uses of this error model include:\n\n- Partial errors. If a service needs to return partial errors to the client,\n    it may embed the `Status` in the normal response to indicate the partial\n    errors.\n\n- Workflow errors. A typical workflow has multiple steps. Each step may\n    have a `Status` message for error reporting purpose.\n\n- Batch operations. If a client uses batch request and batch response, the\n    `Status` message should be used directly inside batch response, one for\n    each error sub-response.\n\n- Asynchronous operations. If an API call embeds asynchronous operation\n    results in its response, the status of those operations should be\n    represented directly using the `Status` message.\n\n- Logging. If some API errors are stored in logs, the message `Status` could\n    be used directly after any stripping needed for security/privacy reasons.",
+      "type": "object",
+      "properties": {
+        "message": {
+          "description": "A developer-facing error message, which should be in English. Any\nuser-facing error message should be localized and sent in the\ngoogle.rpc.Status.details field, or localized by the client.",
+          "type": "string"
+        },
+        "details": {
+          "description": "A list of messages that carry the error details.  There will be a\ncommon 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"
+            },
+            "type": "object"
+          }
+        },
+        "code": {
+          "description": "The status code, which should be an enum value of google.rpc.Code.",
+          "format": "int32",
+          "type": "integer"
+        }
+      },
+      "id": "Status"
+    },
+    "SyncRecognizeResponse": {
+      "description": "The only message returned to the client by `SyncRecognize`. method. It\ncontains the result as zero or more sequential `SpeechRecognitionResult`\nmessages.",
+      "type": "object",
+      "properties": {
+        "results": {
+          "description": "*Output-only* Sequential list of transcription results corresponding to\nsequential portions of audio.",
+          "type": "array",
+          "items": {
+            "$ref": "SpeechRecognitionResult"
+          }
+        }
+      },
+      "id": "SyncRecognizeResponse"
+    },
+    "Empty": {
+      "properties": {},
+      "id": "Empty",
+      "description": "A generic empty message that you can re-use to avoid defining duplicated\nempty messages in your APIs. A typical example is to use it as the request\nor the response type of an API method. For instance:\n\n    service Foo {\n      rpc Bar(google.protobuf.Empty) returns (google.protobuf.Empty);\n    }\n\nThe JSON representation for `Empty` is empty JSON object `{}`.",
+      "type": "object"
+    },
+    "SpeechContext": {
+      "properties": {
+        "phrases": {
+          "description": "*Optional* A list of strings containing words and phrases \"hints\" so that\nthe speech recognition is more likely to recognize them. This can be used\nto improve the accuracy for specific words and phrases, for example, if\nspecific commands are typically spoken by the user. This can also be used\nto add additional words to the vocabulary of the recognizer. See\n[usage limits](https://cloud.google.com/speech/limits#content).",
+          "type": "array",
+          "items": {
+            "type": "string"
+          }
+        }
+      },
+      "id": "SpeechContext",
+      "description": "Provides \"hints\" to the speech recognizer to favor specific words and phrases\nin the results.",
+      "type": "object"
+    },
+    "SpeechRecognitionAlternative": {
+      "description": "Alternative hypotheses (a.k.a. n-best list).",
+      "type": "object",
+      "properties": {
+        "confidence": {
+          "description": "*Output-only* The confidence estimate between 0.0 and 1.0. A higher number\nindicates an estimated greater likelihood that the recognized words are\ncorrect. This field is typically provided only for the top hypothesis, and\nonly for `is_final=true` results. Clients should not rely on the\n`confidence` field as it is not guaranteed to be accurate, or even set, in\nany of the results.\nThe default of 0.0 is a sentinel value indicating `confidence` was not set.",
+          "format": "float",
+          "type": "number"
+        },
+        "transcript": {
+          "description": "*Output-only* Transcript text representing the words that the user spoke.",
+          "type": "string"
+        }
+      },
+      "id": "SpeechRecognitionAlternative"
+    },
+    "ListOperationsResponse": {
+      "description": "The response message for Operations.ListOperations.",
+      "type": "object",
+      "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.",
+          "type": "array",
+          "items": {
+            "$ref": "Operation"
+          }
+        }
+      },
+      "id": "ListOperationsResponse"
+    },
+    "SpeechRecognitionResult": {
+      "properties": {
+        "alternatives": {
+          "description": "*Output-only* May contain one or more recognition hypotheses (up to the\nmaximum specified in `max_alternatives`).",
+          "type": "array",
+          "items": {
+            "$ref": "SpeechRecognitionAlternative"
+          }
+        }
+      },
+      "id": "SpeechRecognitionResult",
+      "description": "A speech recognition result corresponding to a portion of the audio.",
+      "type": "object"
+    },
+    "RecognitionAudio": {
+      "properties": {
+        "uri": {
+          "description": "URI that points to a file that contains audio data bytes as specified in\n`RecognitionConfig`. Currently, only Google Cloud Storage URIs are\nsupported, which must be specified in the following format:\n`gs://bucket_name/object_name` (other URI formats return\ngoogle.rpc.Code.INVALID_ARGUMENT). For more information, see\n[Request URIs](https://cloud.google.com/storage/docs/reference-uris).",
+          "type": "string"
+        },
+        "content": {
+          "description": "The audio data bytes encoded as specified in\n`RecognitionConfig`. Note: as with all bytes fields, protobuffers use a\npure binary representation, whereas JSON representations use base64.",
+          "format": "byte",
+          "type": "string"
+        }
+      },
+      "id": "RecognitionAudio",
+      "description": "Contains audio data in the encoding specified in the `RecognitionConfig`.\nEither `content` or `uri` must be supplied. Supplying both or neither\nreturns google.rpc.Code.INVALID_ARGUMENT. See\n[audio limits](https://cloud.google.com/speech/limits#content).",
+      "type": "object"
+    },
+    "AsyncRecognizeRequest": {
+      "description": "The top-level message sent by the client for the `AsyncRecognize` method.",
+      "type": "object",
+      "properties": {
+        "config": {
+          "$ref": "RecognitionConfig",
+          "description": "*Required* Provides information to the recognizer that specifies how to\nprocess the request."
+        },
+        "audio": {
+          "description": "*Required* The audio data to be recognized.",
+          "$ref": "RecognitionAudio"
+        }
+      },
+      "id": "AsyncRecognizeRequest"
+    }
+  },
   "icons": {
     "x16": "http://www.google.com/images/icons/product/search-16.gif",
     "x32": "http://www.google.com/images/icons/product/search-32.gif"
@@ -24,497 +514,7 @@
   "name": "speech",
   "batchPath": "batch",
   "id": "speech:v1beta1",
+  "revision": "20170323",
   "documentationLink": "https://cloud.google.com/speech/",
-  "revision": "20170303",
-  "title": "Google Cloud Speech API",
-  "discoveryVersion": "v1",
-  "ownerName": "Google",
-  "version_module": "True",
-  "resources": {
-    "operations": {
-      "methods": {
-        "cancel": {
-          "response": {
-            "$ref": "Empty"
-          },
-          "parameterOrder": [
-            "name"
-          ],
-          "httpMethod": "POST",
-          "scopes": [
-            "https://www.googleapis.com/auth/cloud-platform"
-          ],
-          "parameters": {
-            "name": {
-              "required": true,
-              "type": "string",
-              "pattern": "^[^/]+$",
-              "location": "path",
-              "description": "The name of the operation resource to be cancelled."
-            }
-          },
-          "flatPath": "v1beta1/operations/{operationsId}:cancel",
-          "path": "v1beta1/operations/{+name}:cancel",
-          "id": "speech.operations.cancel",
-          "description": "Starts asynchronous cancellation on a long-running operation.  The server\nmakes a best effort to cancel the operation, but success is not\nguaranteed.  If the server doesn't support this method, it returns\n`google.rpc.Code.UNIMPLEMENTED`.  Clients can use\nOperations.GetOperation or\nother methods to check whether the cancellation succeeded or whether the\noperation completed despite cancellation. On successful cancellation,\nthe operation is not deleted; instead, it becomes an operation with\nan Operation.error value with a google.rpc.Status.code of 1,\ncorresponding to `Code.CANCELLED`."
-        },
-        "delete": {
-          "httpMethod": "DELETE",
-          "parameterOrder": [
-            "name"
-          ],
-          "response": {
-            "$ref": "Empty"
-          },
-          "parameters": {
-            "name": {
-              "location": "path",
-              "description": "The name of the operation resource to be deleted.",
-              "required": true,
-              "type": "string",
-              "pattern": "^[^/]+$"
-            }
-          },
-          "scopes": [
-            "https://www.googleapis.com/auth/cloud-platform"
-          ],
-          "flatPath": "v1beta1/operations/{operationsId}",
-          "id": "speech.operations.delete",
-          "path": "v1beta1/operations/{+name}",
-          "description": "Deletes a long-running operation. This method indicates that the client is\nno longer interested in the operation result. It does not cancel the\noperation. If the server doesn't support this method, it returns\n`google.rpc.Code.UNIMPLEMENTED`."
-        },
-        "list": {
-          "response": {
-            "$ref": "ListOperationsResponse"
-          },
-          "parameterOrder": [],
-          "httpMethod": "GET",
-          "parameters": {
-            "name": {
-              "location": "query",
-              "description": "The name of the operation collection.",
-              "type": "string"
-            },
-            "pageToken": {
-              "location": "query",
-              "description": "The standard list page token.",
-              "type": "string"
-            },
-            "pageSize": {
-              "type": "integer",
-              "location": "query",
-              "description": "The standard list page size.",
-              "format": "int32"
-            },
-            "filter": {
-              "location": "query",
-              "description": "The standard list filter.",
-              "type": "string"
-            }
-          },
-          "scopes": [
-            "https://www.googleapis.com/auth/cloud-platform"
-          ],
-          "flatPath": "v1beta1/operations",
-          "path": "v1beta1/operations",
-          "id": "speech.operations.list",
-          "description": "Lists operations that match the specified filter in the request. If the\nserver doesn't support this method, it returns `UNIMPLEMENTED`.\n\nNOTE: the `name` binding below allows API services to override the binding\nto use different resource name schemes, such as `users/*/operations`."
-        },
-        "get": {
-          "parameterOrder": [
-            "name"
-          ],
-          "response": {
-            "$ref": "Operation"
-          },
-          "httpMethod": "GET",
-          "scopes": [
-            "https://www.googleapis.com/auth/cloud-platform"
-          ],
-          "parameters": {
-            "name": {
-              "required": true,
-              "type": "string",
-              "pattern": "^[^/]+$",
-              "location": "path",
-              "description": "The name of the operation resource."
-            }
-          },
-          "flatPath": "v1beta1/operations/{operationsId}",
-          "path": "v1beta1/operations/{+name}",
-          "id": "speech.operations.get",
-          "description": "Gets the latest state of a long-running operation.  Clients can use this\nmethod to poll the operation result at intervals as recommended by the API\nservice."
-        }
-      }
-    },
-    "speech": {
-      "methods": {
-        "asyncrecognize": {
-          "flatPath": "v1beta1/speech:asyncrecognize",
-          "id": "speech.speech.asyncrecognize",
-          "path": "v1beta1/speech:asyncrecognize",
-          "request": {
-            "$ref": "AsyncRecognizeRequest"
-          },
-          "description": "Performs asynchronous speech recognition: receive results via the\n[google.longrunning.Operations]\n(/speech/reference/rest/v1beta1/operations#Operation)\ninterface. Returns either an\n`Operation.error` or an `Operation.response` which contains\nan `AsyncRecognizeResponse` message.",
-          "httpMethod": "POST",
-          "parameterOrder": [],
-          "response": {
-            "$ref": "Operation"
-          },
-          "parameters": {},
-          "scopes": [
-            "https://www.googleapis.com/auth/cloud-platform"
-          ]
-        },
-        "syncrecognize": {
-          "description": "Performs synchronous speech recognition: receive results after all audio\nhas been sent and processed.",
-          "request": {
-            "$ref": "SyncRecognizeRequest"
-          },
-          "response": {
-            "$ref": "SyncRecognizeResponse"
-          },
-          "parameterOrder": [],
-          "httpMethod": "POST",
-          "scopes": [
-            "https://www.googleapis.com/auth/cloud-platform"
-          ],
-          "parameters": {},
-          "flatPath": "v1beta1/speech:syncrecognize",
-          "path": "v1beta1/speech:syncrecognize",
-          "id": "speech.speech.syncrecognize"
-        }
-      }
-    }
-  },
-  "parameters": {
-    "alt": {
-      "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",
-      "description": "Data format for response.",
-      "default": "json",
-      "enum": [
-        "json",
-        "media",
-        "proto"
-      ]
-    },
-    "access_token": {
-      "type": "string",
-      "location": "query",
-      "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."
-    },
-    "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"
-    },
-    "pp": {
-      "type": "boolean",
-      "default": "true",
-      "location": "query",
-      "description": "Pretty-print response."
-    },
-    "oauth_token": {
-      "location": "query",
-      "description": "OAuth 2.0 token for the current user.",
-      "type": "string"
-    },
-    "bearer_token": {
-      "type": "string",
-      "location": "query",
-      "description": "OAuth bearer token."
-    },
-    "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."
-    },
-    "fields": {
-      "location": "query",
-      "description": "Selector specifying which fields to include in a partial response.",
-      "type": "string"
-    },
-    "uploadType": {
-      "location": "query",
-      "description": "Legacy upload protocol for media (e.g. \"media\", \"multipart\").",
-      "type": "string"
-    },
-    "$.xgafv": {
-      "type": "string",
-      "enumDescriptions": [
-        "v1 error format",
-        "v2 error format"
-      ],
-      "location": "query",
-      "enum": [
-        "1",
-        "2"
-      ],
-      "description": "V1 error format."
-    },
-    "callback": {
-      "type": "string",
-      "location": "query",
-      "description": "JSONP"
-    }
-  },
-  "schemas": {
-    "SyncRecognizeRequest": {
-      "description": "The top-level message sent by the client for the `SyncRecognize` method.",
-      "type": "object",
-      "properties": {
-        "config": {
-          "$ref": "RecognitionConfig",
-          "description": "*Required* Provides information to the recognizer that specifies how to\nprocess the request."
-        },
-        "audio": {
-          "$ref": "RecognitionAudio",
-          "description": "*Required* The audio data to be recognized."
-        }
-      },
-      "id": "SyncRecognizeRequest"
-    },
-    "Status": {
-      "description": "The `Status` type defines a logical error model that is suitable for different\nprogramming environments, including REST APIs and RPC APIs. It is used by\n[gRPC](https://github.com/grpc). The error model is designed to be:\n\n- Simple to use and understand for most users\n- Flexible enough to meet unexpected needs\n\n# Overview\n\nThe `Status` message contains three pieces of data: error code, error message,\nand error details. The error code should be an enum value of\ngoogle.rpc.Code, but it may accept additional error codes if needed.  The\nerror message should be a developer-facing English message that helps\ndevelopers *understand* and *resolve* the error. If a localized user-facing\nerror message is needed, put the localized message in the error details or\nlocalize it in the client. The optional error details may contain arbitrary\ninformation about the error. There is a predefined set of error detail types\nin the package `google.rpc` which can be used for common error conditions.\n\n# Language mapping\n\nThe `Status` message is the logical representation of the error model, but it\nis not necessarily the actual wire format. When the `Status` message is\nexposed in different client libraries and different wire protocols, it can be\nmapped differently. For example, it will likely be mapped to some exceptions\nin Java, but more likely mapped to some error codes in C.\n\n# Other uses\n\nThe error model and the `Status` message can be used in a variety of\nenvironments, either with or without APIs, to provide a\nconsistent developer experience across different environments.\n\nExample uses of this error model include:\n\n- Partial errors. If a service needs to return partial errors to the client,\n    it may embed the `Status` in the normal response to indicate the partial\n    errors.\n\n- Workflow errors. A typical workflow has multiple steps. Each step may\n    have a `Status` message for error reporting purpose.\n\n- Batch operations. If a client uses batch request and batch response, the\n    `Status` message should be used directly inside batch response, one for\n    each error sub-response.\n\n- Asynchronous operations. If an API call embeds asynchronous operation\n    results in its response, the status of those operations should be\n    represented directly using the `Status` message.\n\n- Logging. If some API errors are stored in logs, the message `Status` could\n    be used directly after any stripping needed for security/privacy reasons.",
-      "type": "object",
-      "properties": {
-        "details": {
-          "description": "A list of messages that carry the error details.  There will be a\ncommon set of message types for APIs to use.",
-          "type": "array",
-          "items": {
-            "type": "object",
-            "additionalProperties": {
-              "type": "any",
-              "description": "Properties of the object. Contains field @type with type URL."
-            }
-          }
-        },
-        "code": {
-          "description": "The status code, which should be an enum value of google.rpc.Code.",
-          "format": "int32",
-          "type": "integer"
-        },
-        "message": {
-          "description": "A developer-facing error message, which should be in English. Any\nuser-facing error message should be localized and sent in the\ngoogle.rpc.Status.details field, or localized by the client.",
-          "type": "string"
-        }
-      },
-      "id": "Status"
-    },
-    "SyncRecognizeResponse": {
-      "type": "object",
-      "properties": {
-        "results": {
-          "type": "array",
-          "items": {
-            "$ref": "SpeechRecognitionResult"
-          },
-          "description": "*Output-only* Sequential list of transcription results corresponding to\nsequential portions of audio."
-        }
-      },
-      "id": "SyncRecognizeResponse",
-      "description": "The only message returned to the client by `SyncRecognize`. method. It\ncontains the result as zero or more sequential `SpeechRecognitionResult`\nmessages."
-    },
-    "Empty": {
-      "type": "object",
-      "properties": {},
-      "id": "Empty",
-      "description": "A generic empty message that you can re-use to avoid defining duplicated\nempty messages in your APIs. A typical example is to use it as the request\nor the response type of an API method. For instance:\n\n    service Foo {\n      rpc Bar(google.protobuf.Empty) returns (google.protobuf.Empty);\n    }\n\nThe JSON representation for `Empty` is empty JSON object `{}`."
-    },
-    "SpeechRecognitionAlternative": {
-      "type": "object",
-      "properties": {
-        "confidence": {
-          "description": "*Output-only* The confidence estimate between 0.0 and 1.0. A higher number\nindicates an estimated greater likelihood that the recognized words are\ncorrect. This field is typically provided only for the top hypothesis, and\nonly for `is_final=true` results. Clients should not rely on the\n`confidence` field as it is not guaranteed to be accurate, or even set, in\nany of the results.\nThe default of 0.0 is a sentinel value indicating `confidence` was not set.",
-          "format": "float",
-          "type": "number"
-        },
-        "transcript": {
-          "type": "string",
-          "description": "*Output-only* Transcript text representing the words that the user spoke."
-        }
-      },
-      "id": "SpeechRecognitionAlternative",
-      "description": "Alternative hypotheses (a.k.a. n-best list)."
-    },
-    "SpeechContext": {
-      "description": "Provides \"hints\" to the speech recognizer to favor specific words and phrases\nin the results.",
-      "type": "object",
-      "properties": {
-        "phrases": {
-          "description": "*Optional* A list of strings containing words and phrases \"hints\" so that\nthe speech recognition is more likely to recognize them. This can be used\nto improve the accuracy for specific words and phrases, for example, if\nspecific commands are typically spoken by the user. This can also be used\nto add additional words to the vocabulary of the recognizer. See\n[usage limits](https://cloud.google.com/speech/limits#content).",
-          "type": "array",
-          "items": {
-            "type": "string"
-          }
-        }
-      },
-      "id": "SpeechContext"
-    },
-    "ListOperationsResponse": {
-      "type": "object",
-      "properties": {
-        "nextPageToken": {
-          "description": "The standard List next-page token.",
-          "type": "string"
-        },
-        "operations": {
-          "type": "array",
-          "items": {
-            "$ref": "Operation"
-          },
-          "description": "A list of operations that matches the specified filter in the request."
-        }
-      },
-      "id": "ListOperationsResponse",
-      "description": "The response message for Operations.ListOperations."
-    },
-    "SpeechRecognitionResult": {
-      "type": "object",
-      "properties": {
-        "alternatives": {
-          "description": "*Output-only* May contain one or more recognition hypotheses (up to the\nmaximum specified in `max_alternatives`).",
-          "type": "array",
-          "items": {
-            "$ref": "SpeechRecognitionAlternative"
-          }
-        }
-      },
-      "id": "SpeechRecognitionResult",
-      "description": "A speech recognition result corresponding to a portion of the audio."
-    },
-    "AsyncRecognizeRequest": {
-      "description": "The top-level message sent by the client for the `AsyncRecognize` method.",
-      "type": "object",
-      "properties": {
-        "config": {
-          "$ref": "RecognitionConfig",
-          "description": "*Required* Provides information to the recognizer that specifies how to\nprocess the request."
-        },
-        "audio": {
-          "$ref": "RecognitionAudio",
-          "description": "*Required* The audio data to be recognized."
-        }
-      },
-      "id": "AsyncRecognizeRequest"
-    },
-    "RecognitionAudio": {
-      "description": "Contains audio data in the encoding specified in the `RecognitionConfig`.\nEither `content` or `uri` must be supplied. Supplying both or neither\nreturns google.rpc.Code.INVALID_ARGUMENT. See\n[audio limits](https://cloud.google.com/speech/limits#content).",
-      "type": "object",
-      "properties": {
-        "content": {
-          "type": "string",
-          "description": "The audio data bytes encoded as specified in\n`RecognitionConfig`. Note: as with all bytes fields, protobuffers use a\npure binary representation, whereas JSON representations use base64.",
-          "format": "byte"
-        },
-        "uri": {
-          "type": "string",
-          "description": "URI that points to a file that contains audio data bytes as specified in\n`RecognitionConfig`. Currently, only Google Cloud Storage URIs are\nsupported, which must be specified in the following format:\n`gs://bucket_name/object_name` (other URI formats return\ngoogle.rpc.Code.INVALID_ARGUMENT). For more information, see\n[Request URIs](https://cloud.google.com/storage/docs/reference-uris)."
-        }
-      },
-      "id": "RecognitionAudio"
-    },
-    "Operation": {
-      "description": "This resource represents a long-running operation that is the result of a\nnetwork API call.",
-      "type": "object",
-      "properties": {
-        "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\ncontains progress information and common metadata such as create time.\nSome services might not provide such metadata.  Any method that returns a\nlong-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.\nIf true, the operation is completed, and either `error` or `response` is\navailable.",
-          "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\nmethod returns no data on success, such as `Delete`, the response is\n`google.protobuf.Empty`.  If the original method is standard\n`Get`/`Create`/`Update`, the response should be the resource.  For other\nmethods, the response should have the type `XxxResponse`, where `Xxx`\nis the original method name.  For example, if the original method name\nis `TakeSnapshot()`, the inferred response type is\n`TakeSnapshotResponse`.",
-          "type": "object"
-        },
-        "name": {
-          "description": "The server-assigned name, which is only unique within the same service that\noriginally returns it. If you use the default HTTP mapping, the\n`name` should have the format of `operations/some/unique/name`.",
-          "type": "string"
-        },
-        "error": {
-          "$ref": "Status",
-          "description": "The error result of the operation in case of failure or cancellation."
-        }
-      },
-      "id": "Operation"
-    },
-    "RecognitionConfig": {
-      "type": "object",
-      "properties": {
-        "maxAlternatives": {
-          "description": "*Optional* Maximum number of recognition hypotheses to be returned.\nSpecifically, the maximum number of `SpeechRecognitionAlternative` messages\nwithin each `SpeechRecognitionResult`.\nThe server may return fewer than `max_alternatives`.\nValid values are `0`-`30`. A value of `0` or `1` will return a maximum of\none. If omitted, will return a maximum of one.",
-          "format": "int32",
-          "type": "integer"
-        },
-        "sampleRate": {
-          "type": "integer",
-          "description": "*Required* Sample rate in Hertz of the audio data sent in all\n`RecognitionAudio` messages. Valid values are: 8000-48000.\n16000 is optimal. For best results, set the sampling rate of the audio\nsource to 16000 Hz. If that's not possible, use the native sample rate of\nthe audio source (instead of re-sampling).",
-          "format": "int32"
-        },
-        "languageCode": {
-          "description": "*Optional* The language of the supplied audio as a BCP-47 language tag.\nExample: \"en-GB\"  https://www.rfc-editor.org/rfc/bcp/bcp47.txt\nIf omitted, defaults to \"en-US\". See\n[Language Support](https://cloud.google.com/speech/docs/languages)\nfor a list of the currently supported language codes.",
-          "type": "string"
-        },
-        "profanityFilter": {
-          "description": "*Optional* If set to `true`, the server will attempt to filter out\nprofanities, replacing all but the initial character in each filtered word\nwith asterisks, e.g. \"f***\". If set to `false` or omitted, profanities\nwon't be filtered out.",
-          "type": "boolean"
-        },
-        "speechContext": {
-          "$ref": "SpeechContext",
-          "description": "*Optional* A means to provide context to assist the speech recognition."
-        },
-        "encoding": {
-          "enum": [
-            "ENCODING_UNSPECIFIED",
-            "LINEAR16",
-            "FLAC",
-            "MULAW",
-            "AMR",
-            "AMR_WB"
-          ],
-          "description": "*Required* Encoding of audio data sent in all `RecognitionAudio` messages.",
-          "type": "string",
-          "enumDescriptions": [
-            "Not specified. Will return result google.rpc.Code.INVALID_ARGUMENT.",
-            "Uncompressed 16-bit signed little-endian samples (Linear PCM).\nThis is the only encoding that may be used by `AsyncRecognize`.",
-            "This is the recommended encoding for `SyncRecognize` and\n`StreamingRecognize` because it uses lossless compression; therefore\nrecognition accuracy is not compromised by a lossy codec.\n\nThe stream FLAC (Free Lossless Audio Codec) encoding is specified at:\nhttp://flac.sourceforge.net/documentation.html.\n16-bit and 24-bit samples are supported.\nNot all fields in STREAMINFO are supported.",
-            "8-bit samples that compand 14-bit audio samples using G.711 PCMU/mu-law.",
-            "Adaptive Multi-Rate Narrowband codec. `sample_rate` must be 8000 Hz.",
-            "Adaptive Multi-Rate Wideband codec. `sample_rate` must be 16000 Hz."
-          ]
-        }
-      },
-      "id": "RecognitionConfig",
-      "description": "Provides information to the recognizer that specifies how to process the\nrequest."
-    }
-  }
+  "title": "Google Cloud Speech API"
 }
diff --git a/speech/v1beta1/speech-gen.go b/speech/v1beta1/speech-gen.go
index bc8c508..6a4582a 100644
--- a/speech/v1beta1/speech-gen.go
+++ b/speech/v1beta1/speech-gen.go
@@ -62,10 +62,9 @@
 }
 
 type Service struct {
-	client                    *http.Client
-	BasePath                  string // API endpoint base URL
-	UserAgent                 string // optional additional User-Agent fragment
-	GoogleClientHeaderElement string // client header fragment, for Google use only
+	client    *http.Client
+	BasePath  string // API endpoint base URL
+	UserAgent string // optional additional User-Agent fragment
 
 	Operations *OperationsService
 
@@ -79,10 +78,6 @@
 	return googleapi.UserAgent + " " + s.UserAgent
 }
 
-func (s *Service) clientHeader() string {
-	return gensupport.GoogleClientHeader("20170210", s.GoogleClientHeaderElement)
-}
-
 func NewOperationsService(s *Service) *OperationsService {
 	rs := &OperationsService{s: s}
 	return rs
@@ -798,7 +793,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	var body io.Reader = nil
 	c.urlParams_.Set("alt", alt)
 	urls := googleapi.ResolveRelative(c.s.BasePath, "v1beta1/operations/{+name}:cancel")
@@ -930,7 +924,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	var body io.Reader = nil
 	c.urlParams_.Set("alt", alt)
 	urls := googleapi.ResolveRelative(c.s.BasePath, "v1beta1/operations/{+name}")
@@ -1071,7 +1064,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	if c.ifNoneMatch_ != "" {
 		reqHeaders.Set("If-None-Match", c.ifNoneMatch_)
 	}
@@ -1244,7 +1236,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	if c.ifNoneMatch_ != "" {
 		reqHeaders.Set("If-None-Match", c.ifNoneMatch_)
 	}
@@ -1411,7 +1402,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	var body io.Reader = nil
 	body, err := googleapi.WithoutDataWrapper.JSONReader(c.asyncrecognizerequest)
 	if err != nil {
@@ -1534,7 +1524,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	var body io.Reader = nil
 	body, err := googleapi.WithoutDataWrapper.JSONReader(c.syncrecognizerequest)
 	if err != nil {
diff --git a/sqladmin/v1beta3/sqladmin-gen.go b/sqladmin/v1beta3/sqladmin-gen.go
index b1634b5..4c704db 100644
--- a/sqladmin/v1beta3/sqladmin-gen.go
+++ b/sqladmin/v1beta3/sqladmin-gen.go
@@ -69,10 +69,9 @@
 }
 
 type Service struct {
-	client                    *http.Client
-	BasePath                  string // API endpoint base URL
-	UserAgent                 string // optional additional User-Agent fragment
-	GoogleClientHeaderElement string // client header fragment, for Google use only
+	client    *http.Client
+	BasePath  string // API endpoint base URL
+	UserAgent string // optional additional User-Agent fragment
 
 	BackupRuns *BackupRunsService
 
@@ -94,10 +93,6 @@
 	return googleapi.UserAgent + " " + s.UserAgent
 }
 
-func (s *Service) clientHeader() string {
-	return gensupport.GoogleClientHeader("20170210", s.GoogleClientHeaderElement)
-}
-
 func NewBackupRunsService(s *Service) *BackupRunsService {
 	rs := &BackupRunsService{s: s}
 	return rs
@@ -2001,7 +1996,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	if c.ifNoneMatch_ != "" {
 		reqHeaders.Set("If-None-Match", c.ifNoneMatch_)
 	}
@@ -2181,7 +2175,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	if c.ifNoneMatch_ != "" {
 		reqHeaders.Set("If-None-Match", c.ifNoneMatch_)
 	}
@@ -2366,7 +2359,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	if c.ifNoneMatch_ != "" {
 		reqHeaders.Set("If-None-Match", c.ifNoneMatch_)
 	}
@@ -2482,7 +2474,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	var body io.Reader = nil
 	body, err := googleapi.WithoutDataWrapper.JSONReader(c.instancesclonerequest)
 	if err != nil {
@@ -2617,7 +2608,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	var body io.Reader = nil
 	c.urlParams_.Set("alt", alt)
 	urls := googleapi.ResolveRelative(c.s.BasePath, "projects/{project}/instances/{instance}")
@@ -2755,7 +2745,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	var body io.Reader = nil
 	body, err := googleapi.WithoutDataWrapper.JSONReader(c.instancesexportrequest)
 	if err != nil {
@@ -2908,7 +2897,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	if c.ifNoneMatch_ != "" {
 		reqHeaders.Set("If-None-Match", c.ifNoneMatch_)
 	}
@@ -3049,7 +3037,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	var body io.Reader = nil
 	body, err := googleapi.WithoutDataWrapper.JSONReader(c.instancesimportrequest)
 	if err != nil {
@@ -3191,7 +3178,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	var body io.Reader = nil
 	body, err := googleapi.WithoutDataWrapper.JSONReader(c.databaseinstance)
 	if err != nil {
@@ -3351,7 +3337,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	if c.ifNoneMatch_ != "" {
 		reqHeaders.Set("If-None-Match", c.ifNoneMatch_)
 	}
@@ -3516,7 +3501,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	var body io.Reader = nil
 	body, err := googleapi.WithoutDataWrapper.JSONReader(c.databaseinstance)
 	if err != nil {
@@ -3660,7 +3644,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	var body io.Reader = nil
 	c.urlParams_.Set("alt", alt)
 	urls := googleapi.ResolveRelative(c.s.BasePath, "projects/{project}/instances/{instance}/promoteReplica")
@@ -3796,7 +3779,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	var body io.Reader = nil
 	c.urlParams_.Set("alt", alt)
 	urls := googleapi.ResolveRelative(c.s.BasePath, "projects/{project}/instances/{instance}/resetSslConfig")
@@ -3931,7 +3913,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	var body io.Reader = nil
 	c.urlParams_.Set("alt", alt)
 	urls := googleapi.ResolveRelative(c.s.BasePath, "projects/{project}/instances/{instance}/restart")
@@ -4068,7 +4049,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	var body io.Reader = nil
 	c.urlParams_.Set("alt", alt)
 	urls := googleapi.ResolveRelative(c.s.BasePath, "projects/{project}/instances/{instance}/restoreBackup")
@@ -4220,7 +4200,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	var body io.Reader = nil
 	body, err := googleapi.WithoutDataWrapper.JSONReader(c.instancesetrootpasswordrequest)
 	if err != nil {
@@ -4365,7 +4344,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	var body io.Reader = nil
 	body, err := googleapi.WithoutDataWrapper.JSONReader(c.databaseinstance)
 	if err != nil {
@@ -4523,7 +4501,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	if c.ifNoneMatch_ != "" {
 		reqHeaders.Set("If-None-Match", c.ifNoneMatch_)
 	}
@@ -4696,7 +4673,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	if c.ifNoneMatch_ != "" {
 		reqHeaders.Set("If-None-Match", c.ifNoneMatch_)
 	}
@@ -4868,7 +4844,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	var body io.Reader = nil
 	c.urlParams_.Set("alt", alt)
 	urls := googleapi.ResolveRelative(c.s.BasePath, "projects/{project}/instances/{instance}/sslCerts/{sha1Fingerprint}")
@@ -5025,7 +5000,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	if c.ifNoneMatch_ != "" {
 		reqHeaders.Set("If-None-Match", c.ifNoneMatch_)
 	}
@@ -5174,7 +5148,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	var body io.Reader = nil
 	body, err := googleapi.WithoutDataWrapper.JSONReader(c.sslcertsinsertrequest)
 	if err != nil {
@@ -5329,7 +5302,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	if c.ifNoneMatch_ != "" {
 		reqHeaders.Set("If-None-Match", c.ifNoneMatch_)
 	}
@@ -5477,7 +5449,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	if c.ifNoneMatch_ != "" {
 		reqHeaders.Set("If-None-Match", c.ifNoneMatch_)
 	}
diff --git a/sqladmin/v1beta4/sqladmin-gen.go b/sqladmin/v1beta4/sqladmin-gen.go
index 9f6dba8..e3aeb7e 100644
--- a/sqladmin/v1beta4/sqladmin-gen.go
+++ b/sqladmin/v1beta4/sqladmin-gen.go
@@ -71,10 +71,9 @@
 }
 
 type Service struct {
-	client                    *http.Client
-	BasePath                  string // API endpoint base URL
-	UserAgent                 string // optional additional User-Agent fragment
-	GoogleClientHeaderElement string // client header fragment, for Google use only
+	client    *http.Client
+	BasePath  string // API endpoint base URL
+	UserAgent string // optional additional User-Agent fragment
 
 	BackupRuns *BackupRunsService
 
@@ -100,10 +99,6 @@
 	return googleapi.UserAgent + " " + s.UserAgent
 }
 
-func (s *Service) clientHeader() string {
-	return gensupport.GoogleClientHeader("20170210", s.GoogleClientHeaderElement)
-}
-
 func NewBackupRunsService(s *Service) *BackupRunsService {
 	rs := &BackupRunsService{s: s}
 	return rs
@@ -2467,7 +2462,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	var body io.Reader = nil
 	c.urlParams_.Set("alt", alt)
 	urls := googleapi.ResolveRelative(c.s.BasePath, "projects/{project}/instances/{instance}/backupRuns/{id}")
@@ -2624,7 +2618,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	if c.ifNoneMatch_ != "" {
 		reqHeaders.Set("If-None-Match", c.ifNoneMatch_)
 	}
@@ -2774,7 +2767,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	var body io.Reader = nil
 	body, err := googleapi.WithoutDataWrapper.JSONReader(c.backuprun)
 	if err != nil {
@@ -2945,7 +2937,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	if c.ifNoneMatch_ != "" {
 		reqHeaders.Set("If-None-Match", c.ifNoneMatch_)
 	}
@@ -3117,7 +3108,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	var body io.Reader = nil
 	c.urlParams_.Set("alt", alt)
 	urls := googleapi.ResolveRelative(c.s.BasePath, "projects/{project}/instances/{instance}/databases/{database}")
@@ -3274,7 +3264,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	if c.ifNoneMatch_ != "" {
 		reqHeaders.Set("If-None-Match", c.ifNoneMatch_)
 	}
@@ -3423,7 +3412,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	var body io.Reader = nil
 	body, err := googleapi.WithoutDataWrapper.JSONReader(c.database)
 	if err != nil {
@@ -3577,7 +3565,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	if c.ifNoneMatch_ != "" {
 		reqHeaders.Set("If-None-Match", c.ifNoneMatch_)
 	}
@@ -3720,7 +3707,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	var body io.Reader = nil
 	body, err := googleapi.WithoutDataWrapper.JSONReader(c.database2)
 	if err != nil {
@@ -3876,7 +3862,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	var body io.Reader = nil
 	body, err := googleapi.WithoutDataWrapper.JSONReader(c.database2)
 	if err != nil {
@@ -4043,7 +4028,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	if c.ifNoneMatch_ != "" {
 		reqHeaders.Set("If-None-Match", c.ifNoneMatch_)
 	}
@@ -4169,7 +4153,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	var body io.Reader = nil
 	body, err := googleapi.WithoutDataWrapper.JSONReader(c.instancesclonerequest)
 	if err != nil {
@@ -4312,7 +4295,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	var body io.Reader = nil
 	c.urlParams_.Set("alt", alt)
 	urls := googleapi.ResolveRelative(c.s.BasePath, "projects/{project}/instances/{instance}")
@@ -4450,7 +4432,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	var body io.Reader = nil
 	body, err := googleapi.WithoutDataWrapper.JSONReader(c.instancesexportrequest)
 	if err != nil {
@@ -4594,7 +4575,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	var body io.Reader = nil
 	body, err := googleapi.WithoutDataWrapper.JSONReader(c.instancesfailoverrequest)
 	if err != nil {
@@ -4749,7 +4729,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	if c.ifNoneMatch_ != "" {
 		reqHeaders.Set("If-None-Match", c.ifNoneMatch_)
 	}
@@ -4890,7 +4869,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	var body io.Reader = nil
 	body, err := googleapi.WithoutDataWrapper.JSONReader(c.instancesimportrequest)
 	if err != nil {
@@ -5032,7 +5010,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	var body io.Reader = nil
 	body, err := googleapi.WithoutDataWrapper.JSONReader(c.databaseinstance)
 	if err != nil {
@@ -5199,7 +5176,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	if c.ifNoneMatch_ != "" {
 		reqHeaders.Set("If-None-Match", c.ifNoneMatch_)
 	}
@@ -5371,7 +5347,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	var body io.Reader = nil
 	body, err := googleapi.WithoutDataWrapper.JSONReader(c.databaseinstance)
 	if err != nil {
@@ -5515,7 +5490,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	var body io.Reader = nil
 	c.urlParams_.Set("alt", alt)
 	urls := googleapi.ResolveRelative(c.s.BasePath, "projects/{project}/instances/{instance}/promoteReplica")
@@ -5654,7 +5628,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	var body io.Reader = nil
 	c.urlParams_.Set("alt", alt)
 	urls := googleapi.ResolveRelative(c.s.BasePath, "projects/{project}/instances/{instance}/resetSslConfig")
@@ -5789,7 +5762,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	var body io.Reader = nil
 	c.urlParams_.Set("alt", alt)
 	urls := googleapi.ResolveRelative(c.s.BasePath, "projects/{project}/instances/{instance}/restart")
@@ -5926,7 +5898,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	var body io.Reader = nil
 	body, err := googleapi.WithoutDataWrapper.JSONReader(c.instancesrestorebackuprequest)
 	if err != nil {
@@ -6069,7 +6040,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	var body io.Reader = nil
 	c.urlParams_.Set("alt", alt)
 	urls := googleapi.ResolveRelative(c.s.BasePath, "projects/{project}/instances/{instance}/startReplica")
@@ -6204,7 +6174,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	var body io.Reader = nil
 	c.urlParams_.Set("alt", alt)
 	urls := googleapi.ResolveRelative(c.s.BasePath, "projects/{project}/instances/{instance}/stopReplica")
@@ -6341,7 +6310,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	var body io.Reader = nil
 	body, err := googleapi.WithoutDataWrapper.JSONReader(c.instancestruncatelogrequest)
 	if err != nil {
@@ -6488,7 +6456,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	var body io.Reader = nil
 	body, err := googleapi.WithoutDataWrapper.JSONReader(c.databaseinstance)
 	if err != nil {
@@ -6644,7 +6611,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	if c.ifNoneMatch_ != "" {
 		reqHeaders.Set("If-None-Match", c.ifNoneMatch_)
 	}
@@ -6809,7 +6775,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	if c.ifNoneMatch_ != "" {
 		reqHeaders.Set("If-None-Match", c.ifNoneMatch_)
 	}
@@ -6983,7 +6948,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	var body io.Reader = nil
 	body, err := googleapi.WithoutDataWrapper.JSONReader(c.sslcertscreateephemeralrequest)
 	if err != nil {
@@ -7129,7 +7093,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	var body io.Reader = nil
 	c.urlParams_.Set("alt", alt)
 	urls := googleapi.ResolveRelative(c.s.BasePath, "projects/{project}/instances/{instance}/sslCerts/{sha1Fingerprint}")
@@ -7287,7 +7250,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	if c.ifNoneMatch_ != "" {
 		reqHeaders.Set("If-None-Match", c.ifNoneMatch_)
 	}
@@ -7437,7 +7399,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	var body io.Reader = nil
 	body, err := googleapi.WithoutDataWrapper.JSONReader(c.sslcertsinsertrequest)
 	if err != nil {
@@ -7591,7 +7552,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	if c.ifNoneMatch_ != "" {
 		reqHeaders.Set("If-None-Match", c.ifNoneMatch_)
 	}
@@ -7739,7 +7699,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	if c.ifNoneMatch_ != "" {
 		reqHeaders.Set("If-None-Match", c.ifNoneMatch_)
 	}
@@ -7871,7 +7830,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	var body io.Reader = nil
 	c.urlParams_.Set("alt", alt)
 	urls := googleapi.ResolveRelative(c.s.BasePath, "projects/{project}/instances/{instance}/users")
@@ -8022,7 +7980,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	var body io.Reader = nil
 	body, err := googleapi.WithoutDataWrapper.JSONReader(c.user)
 	if err != nil {
@@ -8176,7 +8133,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	if c.ifNoneMatch_ != "" {
 		reqHeaders.Set("If-None-Match", c.ifNoneMatch_)
 	}
@@ -8318,7 +8274,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	var body io.Reader = nil
 	body, err := googleapi.WithoutDataWrapper.JSONReader(c.user)
 	if err != nil {
diff --git a/storage/v1beta1/storage-gen.go b/storage/v1beta1/storage-gen.go
index 7950865..d5467f9 100644
--- a/storage/v1beta1/storage-gen.go
+++ b/storage/v1beta1/storage-gen.go
@@ -70,10 +70,9 @@
 }
 
 type Service struct {
-	client                    *http.Client
-	BasePath                  string // API endpoint base URL
-	UserAgent                 string // optional additional User-Agent fragment
-	GoogleClientHeaderElement string // client header fragment, for Google use only
+	client    *http.Client
+	BasePath  string // API endpoint base URL
+	UserAgent string // optional additional User-Agent fragment
 
 	BucketAccessControls *BucketAccessControlsService
 
@@ -91,10 +90,6 @@
 	return googleapi.UserAgent + " " + s.UserAgent
 }
 
-func (s *Service) clientHeader() string {
-	return gensupport.GoogleClientHeader("20170210", s.GoogleClientHeaderElement)
-}
-
 func NewBucketAccessControlsService(s *Service) *BucketAccessControlsService {
 	rs := &BucketAccessControlsService{s: s}
 	return rs
@@ -770,7 +765,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	var body io.Reader = nil
 	c.urlParams_.Set("alt", alt)
 	urls := googleapi.ResolveRelative(c.s.BasePath, "b/{bucket}/acl/{entity}")
@@ -888,7 +882,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	if c.ifNoneMatch_ != "" {
 		reqHeaders.Set("If-None-Match", c.ifNoneMatch_)
 	}
@@ -1025,7 +1018,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	var body io.Reader = nil
 	body, err := googleapi.WithoutDataWrapper.JSONReader(c.bucketaccesscontrol)
 	if err != nil {
@@ -1168,7 +1160,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	if c.ifNoneMatch_ != "" {
 		reqHeaders.Set("If-None-Match", c.ifNoneMatch_)
 	}
@@ -1300,7 +1291,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	var body io.Reader = nil
 	body, err := googleapi.WithoutDataWrapper.JSONReader(c.bucketaccesscontrol)
 	if err != nil {
@@ -1444,7 +1434,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	var body io.Reader = nil
 	body, err := googleapi.WithoutDataWrapper.JSONReader(c.bucketaccesscontrol)
 	if err != nil {
@@ -1584,7 +1573,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	var body io.Reader = nil
 	c.urlParams_.Set("alt", alt)
 	urls := googleapi.ResolveRelative(c.s.BasePath, "b/{bucket}")
@@ -1703,7 +1691,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	if c.ifNoneMatch_ != "" {
 		reqHeaders.Set("If-None-Match", c.ifNoneMatch_)
 	}
@@ -1858,7 +1845,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	var body io.Reader = nil
 	body, err := googleapi.WithoutDataWrapper.JSONReader(c.bucket)
 	if err != nil {
@@ -2028,7 +2014,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	if c.ifNoneMatch_ != "" {
 		reqHeaders.Set("If-None-Match", c.ifNoneMatch_)
 	}
@@ -2214,7 +2199,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	var body io.Reader = nil
 	body, err := googleapi.WithoutDataWrapper.JSONReader(c.bucket2)
 	if err != nil {
@@ -2373,7 +2357,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	var body io.Reader = nil
 	body, err := googleapi.WithoutDataWrapper.JSONReader(c.bucket2)
 	if err != nil {
@@ -2524,7 +2507,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	var body io.Reader = nil
 	c.urlParams_.Set("alt", alt)
 	urls := googleapi.ResolveRelative(c.s.BasePath, "b/{bucket}/o/{object}/acl/{entity}")
@@ -2652,7 +2634,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	if c.ifNoneMatch_ != "" {
 		reqHeaders.Set("If-None-Match", c.ifNoneMatch_)
 	}
@@ -2799,7 +2780,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	var body io.Reader = nil
 	body, err := googleapi.WithoutDataWrapper.JSONReader(c.objectaccesscontrol)
 	if err != nil {
@@ -2952,7 +2932,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	if c.ifNoneMatch_ != "" {
 		reqHeaders.Set("If-None-Match", c.ifNoneMatch_)
 	}
@@ -3094,7 +3073,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	var body io.Reader = nil
 	body, err := googleapi.WithoutDataWrapper.JSONReader(c.objectaccesscontrol)
 	if err != nil {
@@ -3248,7 +3226,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	var body io.Reader = nil
 	body, err := googleapi.WithoutDataWrapper.JSONReader(c.objectaccesscontrol)
 	if err != nil {
@@ -3398,7 +3375,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	var body io.Reader = nil
 	c.urlParams_.Set("alt", alt)
 	urls := googleapi.ResolveRelative(c.s.BasePath, "b/{bucket}/o/{object}")
@@ -3527,7 +3503,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	if c.ifNoneMatch_ != "" {
 		reqHeaders.Set("If-None-Match", c.ifNoneMatch_)
 	}
@@ -3769,7 +3744,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	var body io.Reader = nil
 	body, err := googleapi.WithoutDataWrapper.JSONReader(c.object)
 	if err != nil {
@@ -4041,7 +4015,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	if c.ifNoneMatch_ != "" {
 		reqHeaders.Set("If-None-Match", c.ifNoneMatch_)
 	}
@@ -4243,7 +4216,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	var body io.Reader = nil
 	body, err := googleapi.WithoutDataWrapper.JSONReader(c.object2)
 	if err != nil {
@@ -4412,7 +4384,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	var body io.Reader = nil
 	body, err := googleapi.WithoutDataWrapper.JSONReader(c.object2)
 	if err != nil {
diff --git a/storage/v1beta2/storage-gen.go b/storage/v1beta2/storage-gen.go
index b7be395..a4a574b 100644
--- a/storage/v1beta2/storage-gen.go
+++ b/storage/v1beta2/storage-gen.go
@@ -72,10 +72,9 @@
 }
 
 type Service struct {
-	client                    *http.Client
-	BasePath                  string // API endpoint base URL
-	UserAgent                 string // optional additional User-Agent fragment
-	GoogleClientHeaderElement string // client header fragment, for Google use only
+	client    *http.Client
+	BasePath  string // API endpoint base URL
+	UserAgent string // optional additional User-Agent fragment
 
 	BucketAccessControls *BucketAccessControlsService
 
@@ -97,10 +96,6 @@
 	return googleapi.UserAgent + " " + s.UserAgent
 }
 
-func (s *Service) clientHeader() string {
-	return gensupport.GoogleClientHeader("20170210", s.GoogleClientHeaderElement)
-}
-
 func NewBucketAccessControlsService(s *Service) *BucketAccessControlsService {
 	rs := &BucketAccessControlsService{s: s}
 	return rs
@@ -1228,7 +1223,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	var body io.Reader = nil
 	c.urlParams_.Set("alt", alt)
 	urls := googleapi.ResolveRelative(c.s.BasePath, "b/{bucket}/acl/{entity}")
@@ -1346,7 +1340,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	if c.ifNoneMatch_ != "" {
 		reqHeaders.Set("If-None-Match", c.ifNoneMatch_)
 	}
@@ -1483,7 +1476,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	var body io.Reader = nil
 	body, err := googleapi.WithoutDataWrapper.JSONReader(c.bucketaccesscontrol)
 	if err != nil {
@@ -1626,7 +1618,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	if c.ifNoneMatch_ != "" {
 		reqHeaders.Set("If-None-Match", c.ifNoneMatch_)
 	}
@@ -1758,7 +1749,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	var body io.Reader = nil
 	body, err := googleapi.WithoutDataWrapper.JSONReader(c.bucketaccesscontrol)
 	if err != nil {
@@ -1902,7 +1892,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	var body io.Reader = nil
 	body, err := googleapi.WithoutDataWrapper.JSONReader(c.bucketaccesscontrol)
 	if err != nil {
@@ -2060,7 +2049,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	var body io.Reader = nil
 	c.urlParams_.Set("alt", alt)
 	urls := googleapi.ResolveRelative(c.s.BasePath, "b/{bucket}")
@@ -2209,7 +2197,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	if c.ifNoneMatch_ != "" {
 		reqHeaders.Set("If-None-Match", c.ifNoneMatch_)
 	}
@@ -2377,7 +2364,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	var body io.Reader = nil
 	body, err := googleapi.WithoutDataWrapper.JSONReader(c.bucket)
 	if err != nil {
@@ -2556,7 +2542,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	if c.ifNoneMatch_ != "" {
 		reqHeaders.Set("If-None-Match", c.ifNoneMatch_)
 	}
@@ -2759,7 +2744,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	var body io.Reader = nil
 	body, err := googleapi.WithoutDataWrapper.JSONReader(c.bucket2)
 	if err != nil {
@@ -2948,7 +2932,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	var body io.Reader = nil
 	body, err := googleapi.WithoutDataWrapper.JSONReader(c.bucket2)
 	if err != nil {
@@ -3106,7 +3089,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	var body io.Reader = nil
 	body, err := googleapi.WithoutDataWrapper.JSONReader(c.channel)
 	if err != nil {
@@ -3202,7 +3184,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	var body io.Reader = nil
 	c.urlParams_.Set("alt", alt)
 	urls := googleapi.ResolveRelative(c.s.BasePath, "b/{bucket}/defaultObjectAcl/{entity}")
@@ -3320,7 +3301,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	if c.ifNoneMatch_ != "" {
 		reqHeaders.Set("If-None-Match", c.ifNoneMatch_)
 	}
@@ -3458,7 +3438,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	var body io.Reader = nil
 	body, err := googleapi.WithoutDataWrapper.JSONReader(c.objectaccesscontrol)
 	if err != nil {
@@ -3618,7 +3597,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	if c.ifNoneMatch_ != "" {
 		reqHeaders.Set("If-None-Match", c.ifNoneMatch_)
 	}
@@ -3762,7 +3740,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	var body io.Reader = nil
 	body, err := googleapi.WithoutDataWrapper.JSONReader(c.objectaccesscontrol)
 	if err != nil {
@@ -3906,7 +3883,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	var body io.Reader = nil
 	body, err := googleapi.WithoutDataWrapper.JSONReader(c.objectaccesscontrol)
 	if err != nil {
@@ -4059,7 +4035,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	var body io.Reader = nil
 	c.urlParams_.Set("alt", alt)
 	urls := googleapi.ResolveRelative(c.s.BasePath, "b/{bucket}/o/{object}/acl/{entity}")
@@ -4201,7 +4176,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	if c.ifNoneMatch_ != "" {
 		reqHeaders.Set("If-None-Match", c.ifNoneMatch_)
 	}
@@ -4362,7 +4336,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	var body io.Reader = nil
 	body, err := googleapi.WithoutDataWrapper.JSONReader(c.objectaccesscontrol)
 	if err != nil {
@@ -4529,7 +4502,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	if c.ifNoneMatch_ != "" {
 		reqHeaders.Set("If-None-Match", c.ifNoneMatch_)
 	}
@@ -4685,7 +4657,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	var body io.Reader = nil
 	body, err := googleapi.WithoutDataWrapper.JSONReader(c.objectaccesscontrol)
 	if err != nil {
@@ -4853,7 +4824,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	var body io.Reader = nil
 	body, err := googleapi.WithoutDataWrapper.JSONReader(c.objectaccesscontrol)
 	if err != nil {
@@ -5028,7 +4998,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	var body io.Reader = nil
 	body, err := googleapi.WithoutDataWrapper.JSONReader(c.composerequest)
 	if err != nil {
@@ -5297,7 +5266,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	var body io.Reader = nil
 	body, err := googleapi.WithoutDataWrapper.JSONReader(c.object)
 	if err != nil {
@@ -5583,7 +5551,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	var body io.Reader = nil
 	c.urlParams_.Set("alt", alt)
 	urls := googleapi.ResolveRelative(c.s.BasePath, "b/{bucket}/o/{object}")
@@ -5783,7 +5750,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	if c.ifNoneMatch_ != "" {
 		reqHeaders.Set("If-None-Match", c.ifNoneMatch_)
 	}
@@ -6091,7 +6057,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	var body io.Reader = nil
 	body, err := googleapi.WithoutDataWrapper.JSONReader(c.object)
 	if err != nil {
@@ -6394,7 +6359,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	if c.ifNoneMatch_ != "" {
 		reqHeaders.Set("If-None-Match", c.ifNoneMatch_)
 	}
@@ -6642,7 +6606,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	var body io.Reader = nil
 	body, err := googleapi.WithoutDataWrapper.JSONReader(c.object2)
 	if err != nil {
@@ -6882,7 +6845,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	var body io.Reader = nil
 	body, err := googleapi.WithoutDataWrapper.JSONReader(c.object2)
 	if err != nil {
@@ -7137,7 +7099,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	var body io.Reader = nil
 	body, err := googleapi.WithoutDataWrapper.JSONReader(c.channel)
 	if err != nil {
diff --git a/storagetransfer/v1/storagetransfer-gen.go b/storagetransfer/v1/storagetransfer-gen.go
index 836fbf7..f0731b6 100644
--- a/storagetransfer/v1/storagetransfer-gen.go
+++ b/storagetransfer/v1/storagetransfer-gen.go
@@ -64,10 +64,9 @@
 }
 
 type Service struct {
-	client                    *http.Client
-	BasePath                  string // API endpoint base URL
-	UserAgent                 string // optional additional User-Agent fragment
-	GoogleClientHeaderElement string // client header fragment, for Google use only
+	client    *http.Client
+	BasePath  string // API endpoint base URL
+	UserAgent string // optional additional User-Agent fragment
 
 	GoogleServiceAccounts *GoogleServiceAccountsService
 
@@ -85,10 +84,6 @@
 	return googleapi.UserAgent + " " + s.UserAgent
 }
 
-func (s *Service) clientHeader() string {
-	return gensupport.GoogleClientHeader("20170210", s.GoogleClientHeaderElement)
-}
-
 func NewGoogleServiceAccountsService(s *Service) *GoogleServiceAccountsService {
 	rs := &GoogleServiceAccountsService{s: s}
 	return rs
@@ -1241,7 +1236,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	if c.ifNoneMatch_ != "" {
 		reqHeaders.Set("If-None-Match", c.ifNoneMatch_)
 	}
@@ -1368,7 +1362,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	var body io.Reader = nil
 	body, err := googleapi.WithoutDataWrapper.JSONReader(c.transferjob)
 	if err != nil {
@@ -1504,7 +1497,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	if c.ifNoneMatch_ != "" {
 		reqHeaders.Set("If-None-Match", c.ifNoneMatch_)
 	}
@@ -1674,7 +1666,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	if c.ifNoneMatch_ != "" {
 		reqHeaders.Set("If-None-Match", c.ifNoneMatch_)
 	}
@@ -1830,7 +1821,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	var body io.Reader = nil
 	body, err := googleapi.WithoutDataWrapper.JSONReader(c.updatetransferjobrequest)
 	if err != nil {
@@ -1965,7 +1955,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	var body io.Reader = nil
 	c.urlParams_.Set("alt", alt)
 	urls := googleapi.ResolveRelative(c.s.BasePath, "v1/{+name}:cancel")
@@ -2091,7 +2080,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	var body io.Reader = nil
 	c.urlParams_.Set("alt", alt)
 	urls := googleapi.ResolveRelative(c.s.BasePath, "v1/{+name}")
@@ -2229,7 +2217,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	if c.ifNoneMatch_ != "" {
 		reqHeaders.Set("If-None-Match", c.ifNoneMatch_)
 	}
@@ -2393,7 +2380,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	if c.ifNoneMatch_ != "" {
 		reqHeaders.Set("If-None-Match", c.ifNoneMatch_)
 	}
@@ -2560,7 +2546,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	var body io.Reader = nil
 	body, err := googleapi.WithoutDataWrapper.JSONReader(c.pausetransferoperationrequest)
 	if err != nil {
@@ -2695,7 +2680,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	var body io.Reader = nil
 	body, err := googleapi.WithoutDataWrapper.JSONReader(c.resumetransferoperationrequest)
 	if err != nil {
@@ -2852,7 +2836,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	if c.ifNoneMatch_ != "" {
 		reqHeaders.Set("If-None-Match", c.ifNoneMatch_)
 	}
diff --git a/surveys/v2/surveys-gen.go b/surveys/v2/surveys-gen.go
index 1cf92b4..0a51abc 100644
--- a/surveys/v2/surveys-gen.go
+++ b/surveys/v2/surveys-gen.go
@@ -67,10 +67,9 @@
 }
 
 type Service struct {
-	client                    *http.Client
-	BasePath                  string // API endpoint base URL
-	UserAgent                 string // optional additional User-Agent fragment
-	GoogleClientHeaderElement string // client header fragment, for Google use only
+	client    *http.Client
+	BasePath  string // API endpoint base URL
+	UserAgent string // optional additional User-Agent fragment
 
 	Mobileapppanels *MobileapppanelsService
 
@@ -86,10 +85,6 @@
 	return googleapi.UserAgent + " " + s.UserAgent
 }
 
-func (s *Service) clientHeader() string {
-	return gensupport.GoogleClientHeader("20170210", s.GoogleClientHeaderElement)
-}
-
 func NewMobileapppanelsService(s *Service) *MobileapppanelsService {
 	rs := &MobileapppanelsService{s: s}
 	return rs
@@ -993,7 +988,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	if c.ifNoneMatch_ != "" {
 		reqHeaders.Set("If-None-Match", c.ifNoneMatch_)
 	}
@@ -1149,7 +1143,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	if c.ifNoneMatch_ != "" {
 		reqHeaders.Set("If-None-Match", c.ifNoneMatch_)
 	}
@@ -1283,7 +1276,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	var body io.Reader = nil
 	body, err := googleapi.WithoutDataWrapper.JSONReader(c.mobileapppanel)
 	if err != nil {
@@ -1431,7 +1423,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	if c.ifNoneMatch_ != "" {
 		reqHeaders.Set("If-None-Match", c.ifNoneMatch_)
 	}
@@ -1580,7 +1571,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	var body io.Reader = nil
 	c.urlParams_.Set("alt", alt)
 	urls := googleapi.ResolveRelative(c.s.BasePath, "surveys/{surveyUrlId}")
@@ -1716,7 +1706,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	if c.ifNoneMatch_ != "" {
 		reqHeaders.Set("If-None-Match", c.ifNoneMatch_)
 	}
@@ -1845,7 +1834,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	var body io.Reader = nil
 	body, err := googleapi.WithoutDataWrapper.JSONReader(c.survey)
 	if err != nil {
@@ -1991,7 +1979,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	if c.ifNoneMatch_ != "" {
 		reqHeaders.Set("If-None-Match", c.ifNoneMatch_)
 	}
@@ -2124,7 +2111,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	var body io.Reader = nil
 	body, err := googleapi.WithoutDataWrapper.JSONReader(c.surveysstartrequest)
 	if err != nil {
@@ -2256,7 +2242,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	var body io.Reader = nil
 	c.urlParams_.Set("alt", alt)
 	urls := googleapi.ResolveRelative(c.s.BasePath, "surveys/{resourceId}/stop")
@@ -2383,7 +2368,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	var body io.Reader = nil
 	body, err := googleapi.WithoutDataWrapper.JSONReader(c.survey)
 	if err != nil {
diff --git a/tagmanager/v1/tagmanager-gen.go b/tagmanager/v1/tagmanager-gen.go
index cd36ee9..2eb5960 100644
--- a/tagmanager/v1/tagmanager-gen.go
+++ b/tagmanager/v1/tagmanager-gen.go
@@ -81,10 +81,9 @@
 }
 
 type Service struct {
-	client                    *http.Client
-	BasePath                  string // API endpoint base URL
-	UserAgent                 string // optional additional User-Agent fragment
-	GoogleClientHeaderElement string // client header fragment, for Google use only
+	client    *http.Client
+	BasePath  string // API endpoint base URL
+	UserAgent string // optional additional User-Agent fragment
 
 	Accounts *AccountsService
 }
@@ -96,10 +95,6 @@
 	return googleapi.UserAgent + " " + s.UserAgent
 }
 
-func (s *Service) clientHeader() string {
-	return gensupport.GoogleClientHeader("20170210", s.GoogleClientHeaderElement)
-}
-
 func NewAccountsService(s *Service) *AccountsService {
 	rs := &AccountsService{s: s}
 	rs.Containers = NewAccountsContainersService(s)
@@ -1898,7 +1893,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	if c.ifNoneMatch_ != "" {
 		reqHeaders.Set("If-None-Match", c.ifNoneMatch_)
 	}
@@ -2036,7 +2030,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	if c.ifNoneMatch_ != "" {
 		reqHeaders.Set("If-None-Match", c.ifNoneMatch_)
 	}
@@ -2161,7 +2154,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	var body io.Reader = nil
 	body, err := googleapi.WithoutDataWrapper.JSONReader(c.account)
 	if err != nil {
@@ -2300,7 +2292,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	var body io.Reader = nil
 	body, err := googleapi.WithoutDataWrapper.JSONReader(c.container)
 	if err != nil {
@@ -2434,7 +2425,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	var body io.Reader = nil
 	c.urlParams_.Set("alt", alt)
 	urls := googleapi.ResolveRelative(c.s.BasePath, "accounts/{accountId}/containers/{containerId}")
@@ -2551,7 +2541,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	if c.ifNoneMatch_ != "" {
 		reqHeaders.Set("If-None-Match", c.ifNoneMatch_)
 	}
@@ -2698,7 +2687,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	if c.ifNoneMatch_ != "" {
 		reqHeaders.Set("If-None-Match", c.ifNoneMatch_)
 	}
@@ -2838,7 +2826,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	var body io.Reader = nil
 	body, err := googleapi.WithoutDataWrapper.JSONReader(c.container)
 	if err != nil {
@@ -2987,7 +2974,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	var body io.Reader = nil
 	body, err := googleapi.WithoutDataWrapper.JSONReader(c.environment)
 	if err != nil {
@@ -3131,7 +3117,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	var body io.Reader = nil
 	c.urlParams_.Set("alt", alt)
 	urls := googleapi.ResolveRelative(c.s.BasePath, "accounts/{accountId}/containers/{containerId}/environments/{environmentId}")
@@ -3258,7 +3243,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	if c.ifNoneMatch_ != "" {
 		reqHeaders.Set("If-None-Match", c.ifNoneMatch_)
 	}
@@ -3415,7 +3399,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	if c.ifNoneMatch_ != "" {
 		reqHeaders.Set("If-None-Match", c.ifNoneMatch_)
 	}
@@ -3566,7 +3549,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	var body io.Reader = nil
 	body, err := googleapi.WithoutDataWrapper.JSONReader(c.environment)
 	if err != nil {
@@ -3733,7 +3715,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	var body io.Reader = nil
 	body, err := googleapi.WithoutDataWrapper.JSONReader(c.environment)
 	if err != nil {
@@ -3890,7 +3871,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	var body io.Reader = nil
 	body, err := googleapi.WithoutDataWrapper.JSONReader(c.folder)
 	if err != nil {
@@ -4034,7 +4014,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	var body io.Reader = nil
 	c.urlParams_.Set("alt", alt)
 	urls := googleapi.ResolveRelative(c.s.BasePath, "accounts/{accountId}/containers/{containerId}/folders/{folderId}")
@@ -4161,7 +4140,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	if c.ifNoneMatch_ != "" {
 		reqHeaders.Set("If-None-Match", c.ifNoneMatch_)
 	}
@@ -4318,7 +4296,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	if c.ifNoneMatch_ != "" {
 		reqHeaders.Set("If-None-Match", c.ifNoneMatch_)
 	}
@@ -4467,7 +4444,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	var body io.Reader = nil
 	body, err := googleapi.WithoutDataWrapper.JSONReader(c.folder)
 	if err != nil {
@@ -4635,7 +4611,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	if c.ifNoneMatch_ != "" {
 		reqHeaders.Set("If-None-Match", c.ifNoneMatch_)
 	}
@@ -4806,7 +4781,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	var body io.Reader = nil
 	body, err := googleapi.WithoutDataWrapper.JSONReader(c.folder)
 	if err != nil {
@@ -4950,7 +4924,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	var body io.Reader = nil
 	body, err := googleapi.WithoutDataWrapper.JSONReader(c.environment)
 	if err != nil {
@@ -5102,7 +5075,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	var body io.Reader = nil
 	body, err := googleapi.WithoutDataWrapper.JSONReader(c.tag)
 	if err != nil {
@@ -5246,7 +5218,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	var body io.Reader = nil
 	c.urlParams_.Set("alt", alt)
 	urls := googleapi.ResolveRelative(c.s.BasePath, "accounts/{accountId}/containers/{containerId}/tags/{tagId}")
@@ -5373,7 +5344,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	if c.ifNoneMatch_ != "" {
 		reqHeaders.Set("If-None-Match", c.ifNoneMatch_)
 	}
@@ -5530,7 +5500,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	if c.ifNoneMatch_ != "" {
 		reqHeaders.Set("If-None-Match", c.ifNoneMatch_)
 	}
@@ -5679,7 +5648,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	var body io.Reader = nil
 	body, err := googleapi.WithoutDataWrapper.JSONReader(c.tag)
 	if err != nil {
@@ -5836,7 +5804,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	var body io.Reader = nil
 	body, err := googleapi.WithoutDataWrapper.JSONReader(c.trigger)
 	if err != nil {
@@ -5980,7 +5947,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	var body io.Reader = nil
 	c.urlParams_.Set("alt", alt)
 	urls := googleapi.ResolveRelative(c.s.BasePath, "accounts/{accountId}/containers/{containerId}/triggers/{triggerId}")
@@ -6107,7 +6073,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	if c.ifNoneMatch_ != "" {
 		reqHeaders.Set("If-None-Match", c.ifNoneMatch_)
 	}
@@ -6264,7 +6229,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	if c.ifNoneMatch_ != "" {
 		reqHeaders.Set("If-None-Match", c.ifNoneMatch_)
 	}
@@ -6414,7 +6378,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	var body io.Reader = nil
 	body, err := googleapi.WithoutDataWrapper.JSONReader(c.trigger)
 	if err != nil {
@@ -6571,7 +6534,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	var body io.Reader = nil
 	body, err := googleapi.WithoutDataWrapper.JSONReader(c.variable)
 	if err != nil {
@@ -6715,7 +6677,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	var body io.Reader = nil
 	c.urlParams_.Set("alt", alt)
 	urls := googleapi.ResolveRelative(c.s.BasePath, "accounts/{accountId}/containers/{containerId}/variables/{variableId}")
@@ -6842,7 +6803,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	if c.ifNoneMatch_ != "" {
 		reqHeaders.Set("If-None-Match", c.ifNoneMatch_)
 	}
@@ -6999,7 +6959,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	if c.ifNoneMatch_ != "" {
 		reqHeaders.Set("If-None-Match", c.ifNoneMatch_)
 	}
@@ -7149,7 +7108,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	var body io.Reader = nil
 	body, err := googleapi.WithoutDataWrapper.JSONReader(c.variable)
 	if err != nil {
@@ -7306,7 +7264,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	var body io.Reader = nil
 	body, err := googleapi.WithoutDataWrapper.JSONReader(c.createcontainerversionrequestversionoptions)
 	if err != nil {
@@ -7450,7 +7407,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	var body io.Reader = nil
 	c.urlParams_.Set("alt", alt)
 	urls := googleapi.ResolveRelative(c.s.BasePath, "accounts/{accountId}/containers/{containerId}/versions/{containerVersionId}")
@@ -7577,7 +7533,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	if c.ifNoneMatch_ != "" {
 		reqHeaders.Set("If-None-Match", c.ifNoneMatch_)
 	}
@@ -7749,7 +7704,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	if c.ifNoneMatch_ != "" {
 		reqHeaders.Set("If-None-Match", c.ifNoneMatch_)
 	}
@@ -7910,7 +7864,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	var body io.Reader = nil
 	c.urlParams_.Set("alt", alt)
 	urls := googleapi.ResolveRelative(c.s.BasePath, "accounts/{accountId}/containers/{containerId}/versions/{containerVersionId}/publish")
@@ -8062,7 +8015,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	var body io.Reader = nil
 	c.urlParams_.Set("alt", alt)
 	urls := googleapi.ResolveRelative(c.s.BasePath, "accounts/{accountId}/containers/{containerId}/versions/{containerVersionId}/restore")
@@ -8206,7 +8158,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	var body io.Reader = nil
 	c.urlParams_.Set("alt", alt)
 	urls := googleapi.ResolveRelative(c.s.BasePath, "accounts/{accountId}/containers/{containerId}/versions/{containerVersionId}/undelete")
@@ -8360,7 +8311,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	var body io.Reader = nil
 	body, err := googleapi.WithoutDataWrapper.JSONReader(c.containerversion)
 	if err != nil {
@@ -8515,7 +8465,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	var body io.Reader = nil
 	body, err := googleapi.WithoutDataWrapper.JSONReader(c.useraccess)
 	if err != nil {
@@ -8650,7 +8599,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	var body io.Reader = nil
 	c.urlParams_.Set("alt", alt)
 	urls := googleapi.ResolveRelative(c.s.BasePath, "accounts/{accountId}/permissions/{permissionId}")
@@ -8767,7 +8715,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	if c.ifNoneMatch_ != "" {
 		reqHeaders.Set("If-None-Match", c.ifNoneMatch_)
 	}
@@ -8914,7 +8861,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	if c.ifNoneMatch_ != "" {
 		reqHeaders.Set("If-None-Match", c.ifNoneMatch_)
 	}
@@ -9045,7 +8991,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	var body io.Reader = nil
 	body, err := googleapi.WithoutDataWrapper.JSONReader(c.useraccess)
 	if err != nil {
diff --git a/taskqueue/v1beta1/taskqueue-gen.go b/taskqueue/v1beta1/taskqueue-gen.go
index 403465a..ee42a03 100644
--- a/taskqueue/v1beta1/taskqueue-gen.go
+++ b/taskqueue/v1beta1/taskqueue-gen.go
@@ -65,10 +65,9 @@
 }
 
 type Service struct {
-	client                    *http.Client
-	BasePath                  string // API endpoint base URL
-	UserAgent                 string // optional additional User-Agent fragment
-	GoogleClientHeaderElement string // client header fragment, for Google use only
+	client    *http.Client
+	BasePath  string // API endpoint base URL
+	UserAgent string // optional additional User-Agent fragment
 
 	Taskqueues *TaskqueuesService
 
@@ -82,10 +81,6 @@
 	return googleapi.UserAgent + " " + s.UserAgent
 }
 
-func (s *Service) clientHeader() string {
-	return gensupport.GoogleClientHeader("20170210", s.GoogleClientHeaderElement)
-}
-
 func NewTaskqueuesService(s *Service) *TaskqueuesService {
 	rs := &TaskqueuesService{s: s}
 	return rs
@@ -415,7 +410,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	if c.ifNoneMatch_ != "" {
 		reqHeaders.Set("If-None-Match", c.ifNoneMatch_)
 	}
@@ -560,7 +554,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	var body io.Reader = nil
 	c.urlParams_.Set("alt", alt)
 	urls := googleapi.ResolveRelative(c.s.BasePath, "{project}/taskqueues/{taskqueue}/tasks/{task}")
@@ -688,7 +681,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	if c.ifNoneMatch_ != "" {
 		reqHeaders.Set("If-None-Match", c.ifNoneMatch_)
 	}
@@ -836,7 +828,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	var body io.Reader = nil
 	c.urlParams_.Set("alt", alt)
 	urls := googleapi.ResolveRelative(c.s.BasePath, "{project}/taskqueues/{taskqueue}/tasks/lease")
@@ -998,7 +989,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	if c.ifNoneMatch_ != "" {
 		reqHeaders.Set("If-None-Match", c.ifNoneMatch_)
 	}
diff --git a/taskqueue/v1beta2/taskqueue-gen.go b/taskqueue/v1beta2/taskqueue-gen.go
index 699388f..bae1862 100644
--- a/taskqueue/v1beta2/taskqueue-gen.go
+++ b/taskqueue/v1beta2/taskqueue-gen.go
@@ -65,10 +65,9 @@
 }
 
 type Service struct {
-	client                    *http.Client
-	BasePath                  string // API endpoint base URL
-	UserAgent                 string // optional additional User-Agent fragment
-	GoogleClientHeaderElement string // client header fragment, for Google use only
+	client    *http.Client
+	BasePath  string // API endpoint base URL
+	UserAgent string // optional additional User-Agent fragment
 
 	Taskqueues *TaskqueuesService
 
@@ -82,10 +81,6 @@
 	return googleapi.UserAgent + " " + s.UserAgent
 }
 
-func (s *Service) clientHeader() string {
-	return gensupport.GoogleClientHeader("20170210", s.GoogleClientHeaderElement)
-}
-
 func NewTaskqueuesService(s *Service) *TaskqueuesService {
 	rs := &TaskqueuesService{s: s}
 	return rs
@@ -422,7 +417,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	if c.ifNoneMatch_ != "" {
 		reqHeaders.Set("If-None-Match", c.ifNoneMatch_)
 	}
@@ -567,7 +561,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	var body io.Reader = nil
 	c.urlParams_.Set("alt", alt)
 	urls := googleapi.ResolveRelative(c.s.BasePath, "{project}/taskqueues/{taskqueue}/tasks/{task}")
@@ -695,7 +688,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	if c.ifNoneMatch_ != "" {
 		reqHeaders.Set("If-None-Match", c.ifNoneMatch_)
 	}
@@ -843,7 +835,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	var body io.Reader = nil
 	body, err := googleapi.WithoutDataWrapper.JSONReader(c.task)
 	if err != nil {
@@ -1004,7 +995,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	var body io.Reader = nil
 	c.urlParams_.Set("alt", alt)
 	urls := googleapi.ResolveRelative(c.s.BasePath, "{project}/taskqueues/{taskqueue}/tasks/lease")
@@ -1176,7 +1166,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	if c.ifNoneMatch_ != "" {
 		reqHeaders.Set("If-None-Match", c.ifNoneMatch_)
 	}
@@ -1320,7 +1309,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	var body io.Reader = nil
 	body, err := googleapi.WithoutDataWrapper.JSONReader(c.task2)
 	if err != nil {
@@ -1482,7 +1470,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	var body io.Reader = nil
 	body, err := googleapi.WithoutDataWrapper.JSONReader(c.task2)
 	if err != nil {
diff --git a/tasks/v1/tasks-gen.go b/tasks/v1/tasks-gen.go
index 2c5179f..d48f0d8 100644
--- a/tasks/v1/tasks-gen.go
+++ b/tasks/v1/tasks-gen.go
@@ -65,10 +65,9 @@
 }
 
 type Service struct {
-	client                    *http.Client
-	BasePath                  string // API endpoint base URL
-	UserAgent                 string // optional additional User-Agent fragment
-	GoogleClientHeaderElement string // client header fragment, for Google use only
+	client    *http.Client
+	BasePath  string // API endpoint base URL
+	UserAgent string // optional additional User-Agent fragment
 
 	Tasklists *TasklistsService
 
@@ -82,10 +81,6 @@
 	return googleapi.UserAgent + " " + s.UserAgent
 }
 
-func (s *Service) clientHeader() string {
-	return gensupport.GoogleClientHeader("20170210", s.GoogleClientHeaderElement)
-}
-
 func NewTasklistsService(s *Service) *TasklistsService {
 	rs := &TasklistsService{s: s}
 	return rs
@@ -403,7 +398,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	var body io.Reader = nil
 	c.urlParams_.Set("alt", alt)
 	urls := googleapi.ResolveRelative(c.s.BasePath, "users/@me/lists/{tasklist}")
@@ -510,7 +504,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	if c.ifNoneMatch_ != "" {
 		reqHeaders.Set("If-None-Match", c.ifNoneMatch_)
 	}
@@ -639,7 +632,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	var body io.Reader = nil
 	body, err := googleapi.WithoutDataWrapper.JSONReader(c.tasklist)
 	if err != nil {
@@ -780,7 +772,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	if c.ifNoneMatch_ != "" {
 		reqHeaders.Set("If-None-Match", c.ifNoneMatch_)
 	}
@@ -931,7 +922,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	var body io.Reader = nil
 	body, err := googleapi.WithoutDataWrapper.JSONReader(c.tasklist)
 	if err != nil {
@@ -1065,7 +1055,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	var body io.Reader = nil
 	body, err := googleapi.WithoutDataWrapper.JSONReader(c.tasklist)
 	if err != nil {
@@ -1199,7 +1188,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	var body io.Reader = nil
 	c.urlParams_.Set("alt", alt)
 	urls := googleapi.ResolveRelative(c.s.BasePath, "lists/{tasklist}/clear")
@@ -1297,7 +1285,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	var body io.Reader = nil
 	c.urlParams_.Set("alt", alt)
 	urls := googleapi.ResolveRelative(c.s.BasePath, "lists/{tasklist}/tasks/{task}")
@@ -1414,7 +1401,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	if c.ifNoneMatch_ != "" {
 		reqHeaders.Set("If-None-Match", c.ifNoneMatch_)
 	}
@@ -1567,7 +1553,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	var body io.Reader = nil
 	body, err := googleapi.WithoutDataWrapper.JSONReader(c.task)
 	if err != nil {
@@ -1798,7 +1783,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	if c.ifNoneMatch_ != "" {
 		reqHeaders.Set("If-None-Match", c.ifNoneMatch_)
 	}
@@ -2018,7 +2002,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	var body io.Reader = nil
 	c.urlParams_.Set("alt", alt)
 	urls := googleapi.ResolveRelative(c.s.BasePath, "lists/{tasklist}/tasks/{task}/move")
@@ -2165,7 +2148,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	var body io.Reader = nil
 	body, err := googleapi.WithoutDataWrapper.JSONReader(c.task)
 	if err != nil {
@@ -2309,7 +2291,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	var body io.Reader = nil
 	body, err := googleapi.WithoutDataWrapper.JSONReader(c.task)
 	if err != nil {
diff --git a/toolresults/v1beta3/toolresults-api.json b/toolresults/v1beta3/toolresults-api.json
index 49fba8d..65b2e18 100644
--- a/toolresults/v1beta3/toolresults-api.json
+++ b/toolresults/v1beta3/toolresults-api.json
@@ -1,12 +1,12 @@
 {
  "kind": "discovery#restDescription",
- "etag": "\"tbys6C40o18GZwyMen5GMkdK-3s/NzKUQu6v7g0rUrostDgJQFvSU28\"",
+ "etag": "\"tbys6C40o18GZwyMen5GMkdK-3s/fe58Z_wMQi0Hq_VNeSHkv3uJtPg\"",
  "discoveryVersion": "v1",
  "id": "toolresults:v1beta3",
  "name": "toolresults",
  "canonicalName": "Tool Results",
  "version": "v1beta3",
- "revision": "20170303",
+ "revision": "20170324",
  "title": "Cloud Tool Results API",
  "description": "Reads and publishes results from Firebase Test Lab.",
  "ownerDomain": "google.com",
@@ -116,6 +116,7 @@
     "perfUnit": {
      "type": "string",
      "enum": [
+      "bytesPerSecond",
       "kibibyte",
       "percent",
       "perfUnitUnspecified"
@@ -123,6 +124,7 @@
      "enumDescriptions": [
       "",
       "",
+      "",
       ""
      ]
     },
@@ -135,6 +137,9 @@
       "memoryRssPrivate",
       "memoryRssShared",
       "memoryRssTotal",
+      "memoryTotal",
+      "networkReceived",
+      "networkSent",
       "ntBytesReceived",
       "ntBytesTransferred",
       "sampleSeriesTypeUnspecified"
@@ -148,6 +153,9 @@
       "",
       "",
       "",
+      "",
+      "",
+      "",
       ""
      ]
     }
@@ -211,7 +219,7 @@
     },
     "seconds": {
      "type": "string",
-     "description": "Signed seconds of the span of time. Must be from -315,576,000,000 to +315,576,000,000 inclusive.",
+     "description": "Signed seconds of the span of time. Must be from -315,576,000,000 to +315,576,000,000 inclusive. Note: these bounds are computed from: 60 sec/min * 60 min/hr * 24 hr/day * 365.25 days/year * 10000 years",
      "format": "int64"
     }
    }
diff --git a/toolresults/v1beta3/toolresults-gen.go b/toolresults/v1beta3/toolresults-gen.go
index a7c2993..8df2c80 100644
--- a/toolresults/v1beta3/toolresults-gen.go
+++ b/toolresults/v1beta3/toolresults-gen.go
@@ -61,10 +61,9 @@
 }
 
 type Service struct {
-	client                    *http.Client
-	BasePath                  string // API endpoint base URL
-	UserAgent                 string // optional additional User-Agent fragment
-	GoogleClientHeaderElement string // client header fragment, for Google use only
+	client    *http.Client
+	BasePath  string // API endpoint base URL
+	UserAgent string // optional additional User-Agent fragment
 
 	Projects *ProjectsService
 }
@@ -76,10 +75,6 @@
 	return googleapi.UserAgent + " " + s.UserAgent
 }
 
-func (s *Service) clientHeader() string {
-	return gensupport.GoogleClientHeader("20170210", s.GoogleClientHeaderElement)
-}
-
 func NewProjectsService(s *Service) *ProjectsService {
 	rs := &ProjectsService{s: s}
 	rs.Histories = NewProjectsHistoriesService(s)
@@ -282,6 +277,7 @@
 	PerfMetricType string `json:"perfMetricType,omitempty"`
 
 	// Possible values:
+	//   "bytesPerSecond"
 	//   "kibibyte"
 	//   "percent"
 	//   "perfUnitUnspecified"
@@ -294,6 +290,9 @@
 	//   "memoryRssPrivate"
 	//   "memoryRssShared"
 	//   "memoryRssTotal"
+	//   "memoryTotal"
+	//   "networkReceived"
+	//   "networkSent"
 	//   "ntBytesReceived"
 	//   "ntBytesTransferred"
 	//   "sampleSeriesTypeUnspecified"
@@ -492,7 +491,9 @@
 	Nanos int64 `json:"nanos,omitempty"`
 
 	// Seconds: Signed seconds of the span of time. Must be from
-	// -315,576,000,000 to +315,576,000,000 inclusive.
+	// -315,576,000,000 to +315,576,000,000 inclusive. Note: these bounds
+	// are computed from: 60 sec/min * 60 min/hr * 24 hr/day * 365.25
+	// days/year * 10000 years
 	Seconds int64 `json:"seconds,omitempty,string"`
 
 	// ForceSendFields is a list of field names (e.g. "Nanos") to
@@ -2545,7 +2546,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	if c.ifNoneMatch_ != "" {
 		reqHeaders.Set("If-None-Match", c.ifNoneMatch_)
 	}
@@ -2698,7 +2698,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	var body io.Reader = nil
 	c.urlParams_.Set("alt", alt)
 	urls := googleapi.ResolveRelative(c.s.BasePath, "{projectId}:initializeSettings")
@@ -2842,7 +2841,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	var body io.Reader = nil
 	body, err := googleapi.WithoutDataWrapper.JSONReader(c.history)
 	if err != nil {
@@ -2998,7 +2996,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	if c.ifNoneMatch_ != "" {
 		reqHeaders.Set("If-None-Match", c.ifNoneMatch_)
 	}
@@ -3179,7 +3176,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	if c.ifNoneMatch_ != "" {
 		reqHeaders.Set("If-None-Match", c.ifNoneMatch_)
 	}
@@ -3365,7 +3361,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	var body io.Reader = nil
 	body, err := googleapi.WithoutDataWrapper.JSONReader(c.execution)
 	if err != nil {
@@ -3531,7 +3526,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	if c.ifNoneMatch_ != "" {
 		reqHeaders.Set("If-None-Match", c.ifNoneMatch_)
 	}
@@ -3714,7 +3708,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	if c.ifNoneMatch_ != "" {
 		reqHeaders.Set("If-None-Match", c.ifNoneMatch_)
 	}
@@ -3905,7 +3898,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	var body io.Reader = nil
 	body, err := googleapi.WithoutDataWrapper.JSONReader(c.execution)
 	if err != nil {
@@ -4083,7 +4075,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	var body io.Reader = nil
 	body, err := googleapi.WithoutDataWrapper.JSONReader(c.step)
 	if err != nil {
@@ -4259,7 +4250,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	if c.ifNoneMatch_ != "" {
 		reqHeaders.Set("If-None-Match", c.ifNoneMatch_)
 	}
@@ -4430,7 +4420,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	if c.ifNoneMatch_ != "" {
 		reqHeaders.Set("If-None-Match", c.ifNoneMatch_)
 	}
@@ -4625,7 +4614,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	if c.ifNoneMatch_ != "" {
 		reqHeaders.Set("If-None-Match", c.ifNoneMatch_)
 	}
@@ -4828,7 +4816,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	var body io.Reader = nil
 	body, err := googleapi.WithoutDataWrapper.JSONReader(c.step)
 	if err != nil {
@@ -5005,7 +4992,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	var body io.Reader = nil
 	body, err := googleapi.WithoutDataWrapper.JSONReader(c.publishxunitxmlfilesrequest)
 	if err != nil {
@@ -5173,7 +5159,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	var body io.Reader = nil
 	body, err := googleapi.WithoutDataWrapper.JSONReader(c.perfmetricssummary)
 	if err != nil {
@@ -5341,7 +5326,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	var body io.Reader = nil
 	body, err := googleapi.WithoutDataWrapper.JSONReader(c.perfsampleseries)
 	if err != nil {
@@ -5519,7 +5503,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	if c.ifNoneMatch_ != "" {
 		reqHeaders.Set("If-None-Match", c.ifNoneMatch_)
 	}
@@ -5715,7 +5698,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	if c.ifNoneMatch_ != "" {
 		reqHeaders.Set("If-None-Match", c.ifNoneMatch_)
 	}
@@ -5903,7 +5885,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	var body io.Reader = nil
 	body, err := googleapi.WithoutDataWrapper.JSONReader(c.batchcreateperfsamplesrequest)
 	if err != nil {
@@ -6111,7 +6092,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	if c.ifNoneMatch_ != "" {
 		reqHeaders.Set("If-None-Match", c.ifNoneMatch_)
 	}
@@ -6342,7 +6322,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	if c.ifNoneMatch_ != "" {
 		reqHeaders.Set("If-None-Match", c.ifNoneMatch_)
 	}
diff --git a/toolresults/v1beta3firstparty/toolresults-api.json b/toolresults/v1beta3firstparty/toolresults-api.json
index f629ed0..89d0fe0 100644
--- a/toolresults/v1beta3firstparty/toolresults-api.json
+++ b/toolresults/v1beta3firstparty/toolresults-api.json
@@ -1,12 +1,12 @@
 {
  "kind": "discovery#restDescription",
- "etag": "\"tbys6C40o18GZwyMen5GMkdK-3s/8tHMdgD24Igfmft38TQMll4PsfQ\"",
+ "etag": "\"tbys6C40o18GZwyMen5GMkdK-3s/TLrDDGVO_vqmHpHlNWo6A54rliU\"",
  "discoveryVersion": "v1",
  "id": "toolresults:v1beta3firstparty",
  "name": "toolresults",
  "canonicalName": "Tool Results",
  "version": "v1beta3firstparty",
- "revision": "20170303",
+ "revision": "20170324",
  "title": "Cloud Tool Results firstparty API",
  "description": "Reads and publishes results from Firebase Test Lab.",
  "ownerDomain": "google.com",
@@ -107,6 +107,7 @@
     "perfUnit": {
      "type": "string",
      "enum": [
+      "bytesPerSecond",
       "kibibyte",
       "percent",
       "perfUnitUnspecified"
@@ -114,6 +115,7 @@
      "enumDescriptions": [
       "",
       "",
+      "",
       ""
      ]
     },
@@ -126,6 +128,9 @@
       "memoryRssPrivate",
       "memoryRssShared",
       "memoryRssTotal",
+      "memoryTotal",
+      "networkReceived",
+      "networkSent",
       "ntBytesReceived",
       "ntBytesTransferred",
       "sampleSeriesTypeUnspecified"
@@ -139,6 +144,9 @@
       "",
       "",
       "",
+      "",
+      "",
+      "",
       ""
      ]
     }
@@ -202,7 +210,7 @@
     },
     "seconds": {
      "type": "string",
-     "description": "Signed seconds of the span of time. Must be from -315,576,000,000 to +315,576,000,000 inclusive.",
+     "description": "Signed seconds of the span of time. Must be from -315,576,000,000 to +315,576,000,000 inclusive. Note: these bounds are computed from: 60 sec/min * 60 min/hr * 24 hr/day * 365.25 days/year * 10000 years",
      "format": "int64"
     }
    }
diff --git a/toolresults/v1beta3firstparty/toolresults-gen.go b/toolresults/v1beta3firstparty/toolresults-gen.go
index 31bb0c8..91f1cfc 100644
--- a/toolresults/v1beta3firstparty/toolresults-gen.go
+++ b/toolresults/v1beta3firstparty/toolresults-gen.go
@@ -55,10 +55,9 @@
 }
 
 type Service struct {
-	client                    *http.Client
-	BasePath                  string // API endpoint base URL
-	UserAgent                 string // optional additional User-Agent fragment
-	GoogleClientHeaderElement string // client header fragment, for Google use only
+	client    *http.Client
+	BasePath  string // API endpoint base URL
+	UserAgent string // optional additional User-Agent fragment
 
 	Projects *ProjectsService
 }
@@ -70,10 +69,6 @@
 	return googleapi.UserAgent + " " + s.UserAgent
 }
 
-func (s *Service) clientHeader() string {
-	return gensupport.GoogleClientHeader("20170210", s.GoogleClientHeaderElement)
-}
-
 func NewProjectsService(s *Service) *ProjectsService {
 	rs := &ProjectsService{s: s}
 	rs.Histories = NewProjectsHistoriesService(s)
@@ -276,6 +271,7 @@
 	PerfMetricType string `json:"perfMetricType,omitempty"`
 
 	// Possible values:
+	//   "bytesPerSecond"
 	//   "kibibyte"
 	//   "percent"
 	//   "perfUnitUnspecified"
@@ -288,6 +284,9 @@
 	//   "memoryRssPrivate"
 	//   "memoryRssShared"
 	//   "memoryRssTotal"
+	//   "memoryTotal"
+	//   "networkReceived"
+	//   "networkSent"
 	//   "ntBytesReceived"
 	//   "ntBytesTransferred"
 	//   "sampleSeriesTypeUnspecified"
@@ -486,7 +485,9 @@
 	Nanos int64 `json:"nanos,omitempty"`
 
 	// Seconds: Signed seconds of the span of time. Must be from
-	// -315,576,000,000 to +315,576,000,000 inclusive.
+	// -315,576,000,000 to +315,576,000,000 inclusive. Note: these bounds
+	// are computed from: 60 sec/min * 60 min/hr * 24 hr/day * 365.25
+	// days/year * 10000 years
 	Seconds int64 `json:"seconds,omitempty,string"`
 
 	// ForceSendFields is a list of field names (e.g. "Nanos") to
@@ -2539,7 +2540,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	if c.ifNoneMatch_ != "" {
 		reqHeaders.Set("If-None-Match", c.ifNoneMatch_)
 	}
@@ -2689,7 +2689,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	var body io.Reader = nil
 	c.urlParams_.Set("alt", alt)
 	urls := googleapi.ResolveRelative(c.s.BasePath, "{projectId}:initializeSettings")
@@ -2830,7 +2829,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	var body io.Reader = nil
 	body, err := googleapi.WithoutDataWrapper.JSONReader(c.history)
 	if err != nil {
@@ -2983,7 +2981,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	if c.ifNoneMatch_ != "" {
 		reqHeaders.Set("If-None-Match", c.ifNoneMatch_)
 	}
@@ -3161,7 +3158,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	if c.ifNoneMatch_ != "" {
 		reqHeaders.Set("If-None-Match", c.ifNoneMatch_)
 	}
@@ -3344,7 +3340,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	var body io.Reader = nil
 	body, err := googleapi.WithoutDataWrapper.JSONReader(c.execution)
 	if err != nil {
@@ -3507,7 +3502,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	if c.ifNoneMatch_ != "" {
 		reqHeaders.Set("If-None-Match", c.ifNoneMatch_)
 	}
@@ -3687,7 +3681,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	if c.ifNoneMatch_ != "" {
 		reqHeaders.Set("If-None-Match", c.ifNoneMatch_)
 	}
@@ -3875,7 +3868,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	var body io.Reader = nil
 	body, err := googleapi.WithoutDataWrapper.JSONReader(c.execution)
 	if err != nil {
@@ -4050,7 +4042,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	var body io.Reader = nil
 	body, err := googleapi.WithoutDataWrapper.JSONReader(c.step)
 	if err != nil {
@@ -4223,7 +4214,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	if c.ifNoneMatch_ != "" {
 		reqHeaders.Set("If-None-Match", c.ifNoneMatch_)
 	}
@@ -4391,7 +4381,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	if c.ifNoneMatch_ != "" {
 		reqHeaders.Set("If-None-Match", c.ifNoneMatch_)
 	}
@@ -4583,7 +4572,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	if c.ifNoneMatch_ != "" {
 		reqHeaders.Set("If-None-Match", c.ifNoneMatch_)
 	}
@@ -4783,7 +4771,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	var body io.Reader = nil
 	body, err := googleapi.WithoutDataWrapper.JSONReader(c.step)
 	if err != nil {
@@ -4957,7 +4944,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	var body io.Reader = nil
 	body, err := googleapi.WithoutDataWrapper.JSONReader(c.publishxunitxmlfilesrequest)
 	if err != nil {
@@ -5122,7 +5108,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	var body io.Reader = nil
 	body, err := googleapi.WithoutDataWrapper.JSONReader(c.perfmetricssummary)
 	if err != nil {
@@ -5287,7 +5272,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	var body io.Reader = nil
 	body, err := googleapi.WithoutDataWrapper.JSONReader(c.perfsampleseries)
 	if err != nil {
@@ -5462,7 +5446,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	if c.ifNoneMatch_ != "" {
 		reqHeaders.Set("If-None-Match", c.ifNoneMatch_)
 	}
@@ -5655,7 +5638,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	if c.ifNoneMatch_ != "" {
 		reqHeaders.Set("If-None-Match", c.ifNoneMatch_)
 	}
@@ -5840,7 +5822,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	var body io.Reader = nil
 	body, err := googleapi.WithoutDataWrapper.JSONReader(c.batchcreateperfsamplesrequest)
 	if err != nil {
@@ -6045,7 +6026,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	if c.ifNoneMatch_ != "" {
 		reqHeaders.Set("If-None-Match", c.ifNoneMatch_)
 	}
@@ -6273,7 +6253,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	if c.ifNoneMatch_ != "" {
 		reqHeaders.Set("If-None-Match", c.ifNoneMatch_)
 	}
diff --git a/tracing/v1/tracing-api.json b/tracing/v1/tracing-api.json
index aa79be0..f7a2c2d 100644
--- a/tracing/v1/tracing-api.json
+++ b/tracing/v1/tracing-api.json
@@ -1,26 +1,416 @@
 {
+  "title": "Google Tracing API",
+  "ownerName": "Google",
+  "resources": {
+    "projects": {
+      "resources": {
+        "traces": {
+          "methods": {
+            "listSpans": {
+              "description": "Returns a list of spans within a trace.",
+              "response": {
+                "$ref": "ListSpansResponse"
+              },
+              "parameterOrder": [
+                "name"
+              ],
+              "httpMethod": "GET",
+              "parameters": {
+                "name": {
+                  "description": "ID of the trace for which to list child spans. Format is\n`projects/PROJECT_ID/traces/TRACE_ID`.",
+                  "required": true,
+                  "type": "string",
+                  "pattern": "^projects/[^/]+/traces/[^/]+$",
+                  "location": "path"
+                },
+                "pageToken": {
+                  "description": "Token identifying the page of results to return. If provided, use the\nvalue of the `nextPageToken` field from a previous request. Optional.",
+                  "type": "string",
+                  "location": "query"
+                }
+              },
+              "scopes": [
+                "https://www.googleapis.com/auth/cloud-platform",
+                "https://www.googleapis.com/auth/trace.readonly"
+              ],
+              "flatPath": "v1/projects/{projectsId}/traces/{tracesId}:listSpans",
+              "path": "v1/{+name}:listSpans",
+              "id": "tracing.projects.traces.listSpans"
+            },
+            "list": {
+              "flatPath": "v1/projects/{projectsId}/traces",
+              "path": "v1/{+parent}/traces",
+              "id": "tracing.projects.traces.list",
+              "description": "Returns of a list of traces that match the specified filter conditions.",
+              "response": {
+                "$ref": "ListTracesResponse"
+              },
+              "parameterOrder": [
+                "parent"
+              ],
+              "httpMethod": "GET",
+              "scopes": [
+                "https://www.googleapis.com/auth/cloud-platform",
+                "https://www.googleapis.com/auth/trace.readonly"
+              ],
+              "parameters": {
+                "pageSize": {
+                  "location": "query",
+                  "description": "Maximum number of traces to return. If not specified or \u003c= 0, the\nimplementation selects a reasonable value. The implementation may\nreturn fewer traces than the requested page size. Optional.",
+                  "format": "int32",
+                  "type": "integer"
+                },
+                "parent": {
+                  "description": "ID of the Cloud project where the trace data is stored.",
+                  "required": true,
+                  "type": "string",
+                  "pattern": "^projects/[^/]+$",
+                  "location": "path"
+                },
+                "orderBy": {
+                  "location": "query",
+                  "description": "Field used to sort the returned traces. Optional.\nCan be one of the following:\n\n*   `trace_id`\n*   `name` (`name` field of root span in the trace)\n*   `duration` (difference between `end_time` and `start_time` fields of\n     the root span)\n*   `start` (`start_time` field of the root span)\n\nDescending order can be specified by appending `desc` to the sort field\n(for example, `name desc`).\n\nOnly one sort field is permitted.",
+                  "type": "string"
+                },
+                "filter": {
+                  "location": "query",
+                  "description": "An optional filter for the request.\nExample:\n`version_label_key:a some_label:some_label_key`\nreturns traces from version `a` and has `some_label` with `some_label_key`.",
+                  "type": "string"
+                },
+                "endTime": {
+                  "location": "query",
+                  "description": "End of the time interval (inclusive) during which the trace data was\ncollected from the application.",
+                  "format": "google-datetime",
+                  "type": "string"
+                },
+                "startTime": {
+                  "description": "Start of the time interval (inclusive) during which the trace data was\ncollected from the application.",
+                  "format": "google-datetime",
+                  "type": "string",
+                  "location": "query"
+                },
+                "pageToken": {
+                  "description": "Token identifying the page of results to return. If provided, use the\nvalue of the `next_page_token` field from a previous request. Optional.",
+                  "type": "string",
+                  "location": "query"
+                }
+              }
+            },
+            "get": {
+              "description": "Returns a specific trace.",
+              "httpMethod": "GET",
+              "parameterOrder": [
+                "name"
+              ],
+              "response": {
+                "$ref": "Trace"
+              },
+              "parameters": {
+                "name": {
+                  "location": "path",
+                  "description": "ID of the trace. Format is `projects/PROJECT_ID/traces/TRACE_ID`.",
+                  "required": true,
+                  "type": "string",
+                  "pattern": "^projects/[^/]+/traces/[^/]+$"
+                }
+              },
+              "scopes": [
+                "https://www.googleapis.com/auth/cloud-platform",
+                "https://www.googleapis.com/auth/trace.readonly"
+              ],
+              "flatPath": "v1/projects/{projectsId}/traces/{tracesId}",
+              "id": "tracing.projects.traces.get",
+              "path": "v1/{+name}"
+            },
+            "batchUpdate": {
+              "httpMethod": "POST",
+              "parameterOrder": [
+                "parent"
+              ],
+              "response": {
+                "$ref": "Empty"
+              },
+              "scopes": [
+                "https://www.googleapis.com/auth/cloud-platform",
+                "https://www.googleapis.com/auth/trace.append"
+              ],
+              "parameters": {
+                "parent": {
+                  "description": "ID of the Cloud project where the trace data is stored.",
+                  "required": true,
+                  "type": "string",
+                  "pattern": "^projects/[^/]+$",
+                  "location": "path"
+                }
+              },
+              "flatPath": "v1/projects/{projectsId}/traces:batchUpdate",
+              "id": "tracing.projects.traces.batchUpdate",
+              "path": "v1/{+parent}/traces:batchUpdate",
+              "description": "Sends new spans to Stackdriver Trace or updates existing spans. If the\nname of a trace that you send matches that of an existing trace, any fields\nin the existing trace and its spans are overwritten by the provided values,\nand any new fields provided are merged with the existing trace data. If the\nname does not match, a new trace is created with given set of spans.",
+              "request": {
+                "$ref": "BatchUpdateSpansRequest"
+              }
+            }
+          }
+        }
+      }
+    }
+  },
+  "parameters": {
+    "pp": {
+      "location": "query",
+      "description": "Pretty-print response.",
+      "type": "boolean",
+      "default": "true"
+    },
+    "oauth_token": {
+      "description": "OAuth 2.0 token for the current user.",
+      "type": "string",
+      "location": "query"
+    },
+    "bearer_token": {
+      "description": "OAuth bearer token.",
+      "type": "string",
+      "location": "query"
+    },
+    "upload_protocol": {
+      "description": "Upload protocol for media (e.g. \"raw\", \"multipart\").",
+      "type": "string",
+      "location": "query"
+    },
+    "prettyPrint": {
+      "description": "Returns response with indentations and line breaks.",
+      "type": "boolean",
+      "default": "true",
+      "location": "query"
+    },
+    "fields": {
+      "location": "query",
+      "description": "Selector specifying which fields to include in a partial response.",
+      "type": "string"
+    },
+    "uploadType": {
+      "location": "query",
+      "description": "Legacy upload protocol for media (e.g. \"media\", \"multipart\").",
+      "type": "string"
+    },
+    "$.xgafv": {
+      "enumDescriptions": [
+        "v1 error format",
+        "v2 error format"
+      ],
+      "location": "query",
+      "enum": [
+        "1",
+        "2"
+      ],
+      "description": "V1 error format.",
+      "type": "string"
+    },
+    "callback": {
+      "description": "JSONP",
+      "type": "string",
+      "location": "query"
+    },
+    "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"
+    },
+    "access_token": {
+      "location": "query",
+      "description": "OAuth access token.",
+      "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"
+    },
+    "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"
+    }
+  },
+  "version": "v1",
+  "baseUrl": "https://tracing.googleapis.com/",
+  "servicePath": "",
+  "description": "Send and retrieve trace data from Google Stackdriver Trace.\n",
+  "kind": "discovery#restDescription",
+  "basePath": "",
+  "revision": "20170320",
+  "documentationLink": "https://cloud.google.com/trace",
+  "id": "tracing:v1",
   "discoveryVersion": "v1",
   "version_module": "True",
   "schemas": {
+    "ListSpansResponse": {
+      "description": "The response message for the `ListSpans` method.",
+      "type": "object",
+      "properties": {
+        "nextPageToken": {
+          "description": "If defined, indicates that there are more spans that match the request.\nPass this as the value of `pageToken` in a subsequent request to retrieve\nadditional spans.",
+          "type": "string"
+        },
+        "spans": {
+          "description": "The requested spans if there are any in the specified trace.",
+          "type": "array",
+          "items": {
+            "$ref": "Span"
+          }
+        }
+      },
+      "id": "ListSpansResponse"
+    },
+    "NetworkEvent": {
+      "description": "An event describing an RPC message sent/received on the network.",
+      "type": "object",
+      "properties": {
+        "kernelTime": {
+          "description": "If available, this is the kernel time:\n\n*  For sent messages, this is the time at which the first bit was sent.\n*  For received messages, this is the time at which the last bit was\n   received.",
+          "format": "google-datetime",
+          "type": "string"
+        },
+        "type": {
+          "description": "Type of NetworkEvent. Indicates whether the RPC message was sent or\nreceived.",
+          "type": "string",
+          "enumDescriptions": [
+            "Unknown event type.",
+            "Indicates a sent RPC message.",
+            "Indicates a received RPC message."
+          ],
+          "enum": [
+            "TYPE_UNSPECIFIED",
+            "SENT",
+            "RECV"
+          ]
+        },
+        "messageId": {
+          "description": "An identifier for the message, which must be unique in this span.",
+          "format": "uint64",
+          "type": "string"
+        },
+        "messageSize": {
+          "description": "The number of bytes sent or received.",
+          "format": "uint64",
+          "type": "string"
+        }
+      },
+      "id": "NetworkEvent"
+    },
+    "SpanUpdates": {
+      "description": "Collection of spans to update.",
+      "type": "object",
+      "properties": {
+        "spans": {
+          "description": "A collection of spans.",
+          "type": "array",
+          "items": {
+            "$ref": "Span"
+          }
+        }
+      },
+      "id": "SpanUpdates"
+    },
+    "StackFrame": {
+      "description": "Represents a single stack frame in a stack trace.",
+      "type": "object",
+      "properties": {
+        "fileName": {
+          "description": "The filename of the file containing this frame.",
+          "type": "string"
+        },
+        "sourceVersion": {
+          "description": "The version of the deployed source code.",
+          "type": "string"
+        },
+        "originalFunctionName": {
+          "description": "Used when the function name is\n[mangled](http://www.avabodh.com/cxxin/namemangling.html). May be\nfully-qualified.",
+          "type": "string"
+        },
+        "functionName": {
+          "description": "The fully-qualified name that uniquely identifies this function or\nmethod.",
+          "type": "string"
+        },
+        "lineNumber": {
+          "description": "Line number of the frame.",
+          "format": "int64",
+          "type": "string"
+        },
+        "loadModule": {
+          "$ref": "Module",
+          "description": "Binary module the code is loaded from."
+        },
+        "columnNumber": {
+          "description": "Column number is important in JavaScript (anonymous functions).\nMay not be available in some languages.",
+          "format": "int64",
+          "type": "string"
+        }
+      },
+      "id": "StackFrame"
+    },
+    "Link": {
+      "description": "A pointer from this span to another span in a different `Trace`. Used\n(for example) in batching operations, where a single batch handler\nprocesses multiple requests from different traces.",
+      "type": "object",
+      "properties": {
+        "type": {
+          "description": "The relationship of the current span relative to the linked span.",
+          "type": "string",
+          "enumDescriptions": [
+            "The relationship of the two spans is unknown.",
+            "The current span is a child of the linked span.",
+            "The current span is the parent of the linked span."
+          ],
+          "enum": [
+            "TYPE_UNSPECIFIED",
+            "CHILD",
+            "PARENT"
+          ]
+        },
+        "traceId": {
+          "description": "The ID of the parent trace of the linked span.",
+          "type": "string"
+        },
+        "spanId": {
+          "description": "The `id` of the linked span.",
+          "format": "uint64",
+          "type": "string"
+        }
+      },
+      "id": "Link"
+    },
     "Annotation": {
+      "description": "Text annotation with a set of attributes.",
       "type": "object",
       "properties": {
         "description": {
-          "type": "string",
-          "description": "A user-supplied message describing the event."
+          "description": "A user-supplied message describing the event.",
+          "type": "string"
         },
         "attributes": {
-          "type": "object",
           "additionalProperties": {
             "$ref": "AttributeValue"
           },
-          "description": "A set of attributes on the annotation."
+          "description": "A set of attributes on the annotation.",
+          "type": "object"
         }
       },
-      "id": "Annotation",
-      "description": "Text annotation with a set of attributes."
+      "id": "Annotation"
     },
     "Trace": {
+      "description": "A trace describes how long it takes for an application to perform some\noperations. It consists of a set of spans, each representing\nan operation and including time information and operation details.",
       "type": "object",
       "properties": {
         "name": {
@@ -28,25 +418,25 @@
           "type": "string"
         }
       },
-      "id": "Trace",
-      "description": "A trace describes how long it takes for an application to perform some\noperations. It consists of a set of spans, each representing\nan operation and including time information and operation details."
+      "id": "Trace"
     },
     "Module": {
+      "description": "Binary module.",
       "type": "object",
       "properties": {
         "module": {
-          "type": "string",
-          "description": "E.g. main binary, kernel modules, and dynamic libraries\nsuch as libc.so, sharedlib.so"
+          "description": "E.g. main binary, kernel modules, and dynamic libraries\nsuch as libc.so, sharedlib.so",
+          "type": "string"
         },
         "buildId": {
-          "type": "string",
-          "description": "Build_id is a unique identifier for the module,\nusually a hash of its contents"
+          "description": "Build_id is a unique identifier for the module,\nusually a hash of its contents",
+          "type": "string"
         }
       },
-      "id": "Module",
-      "description": "Binary module."
+      "id": "Module"
     },
     "Status": {
+      "description": "The `Status` type defines a logical error model that is suitable for different\nprogramming environments, including REST APIs and RPC APIs. It is used by\n[gRPC](https://github.com/grpc). The error model is designed to be:\n\n- Simple to use and understand for most users\n- Flexible enough to meet unexpected needs\n\n# Overview\n\nThe `Status` message contains three pieces of data: error code, error message,\nand error details. The error code should be an enum value of\ngoogle.rpc.Code, but it may accept additional error codes if needed.  The\nerror message should be a developer-facing English message that helps\ndevelopers *understand* and *resolve* the error. If a localized user-facing\nerror message is needed, put the localized message in the error details or\nlocalize it in the client. The optional error details may contain arbitrary\ninformation about the error. There is a predefined set of error detail types\nin the package `google.rpc` which can be used for common error conditions.\n\n# Language mapping\n\nThe `Status` message is the logical representation of the error model, but it\nis not necessarily the actual wire format. When the `Status` message is\nexposed in different client libraries and different wire protocols, it can be\nmapped differently. For example, it will likely be mapped to some exceptions\nin Java, but more likely mapped to some error codes in C.\n\n# Other uses\n\nThe error model and the `Status` message can be used in a variety of\nenvironments, either with or without APIs, to provide a\nconsistent developer experience across different environments.\n\nExample uses of this error model include:\n\n- Partial errors. If a service needs to return partial errors to the client,\n    it may embed the `Status` in the normal response to indicate the partial\n    errors.\n\n- Workflow errors. A typical workflow has multiple steps. Each step may\n    have a `Status` message for error reporting purpose.\n\n- Batch operations. If a client uses batch request and batch response, the\n    `Status` message should be used directly inside batch response, one for\n    each error sub-response.\n\n- Asynchronous operations. If an API call embeds asynchronous operation\n    results in its response, the status of those operations should be\n    represented directly using the `Status` message.\n\n- Logging. If some API errors are stored in logs, the message `Status` could\n    be used directly after any stripping needed for security/privacy reasons.",
       "type": "object",
       "properties": {
         "code": {
@@ -70,50 +460,18 @@
           }
         }
       },
-      "id": "Status",
-      "description": "The `Status` type defines a logical error model that is suitable for different\nprogramming environments, including REST APIs and RPC APIs. It is used by\n[gRPC](https://github.com/grpc). The error model is designed to be:\n\n- Simple to use and understand for most users\n- Flexible enough to meet unexpected needs\n\n# Overview\n\nThe `Status` message contains three pieces of data: error code, error message,\nand error details. The error code should be an enum value of\ngoogle.rpc.Code, but it may accept additional error codes if needed.  The\nerror message should be a developer-facing English message that helps\ndevelopers *understand* and *resolve* the error. If a localized user-facing\nerror message is needed, put the localized message in the error details or\nlocalize it in the client. The optional error details may contain arbitrary\ninformation about the error. There is a predefined set of error detail types\nin the package `google.rpc` which can be used for common error conditions.\n\n# Language mapping\n\nThe `Status` message is the logical representation of the error model, but it\nis not necessarily the actual wire format. When the `Status` message is\nexposed in different client libraries and different wire protocols, it can be\nmapped differently. For example, it will likely be mapped to some exceptions\nin Java, but more likely mapped to some error codes in C.\n\n# Other uses\n\nThe error model and the `Status` message can be used in a variety of\nenvironments, either with or without APIs, to provide a\nconsistent developer experience across different environments.\n\nExample uses of this error model include:\n\n- Partial errors. If a service needs to return partial errors to the client,\n    it may embed the `Status` in the normal response to indicate the partial\n    errors.\n\n- Workflow errors. A typical workflow has multiple steps. Each step may\n    have a `Status` message for error reporting purpose.\n\n- Batch operations. If a client uses batch request and batch response, the\n    `Status` message should be used directly inside batch response, one for\n    each error sub-response.\n\n- Asynchronous operations. If an API call embeds asynchronous operation\n    results in its response, the status of those operations should be\n    represented directly using the `Status` message.\n\n- Logging. If some API errors are stored in logs, the message `Status` could\n    be used directly after any stripping needed for security/privacy reasons."
+      "id": "Status"
     },
     "Empty": {
+      "description": "A generic empty message that you can re-use to avoid defining duplicated\nempty messages in your APIs. A typical example is to use it as the request\nor the response type of an API method. For instance:\n\n    service Foo {\n      rpc Bar(google.protobuf.Empty) returns (google.protobuf.Empty);\n    }\n\nThe JSON representation for `Empty` is empty JSON object `{}`.",
       "type": "object",
       "properties": {},
-      "id": "Empty",
-      "description": "A generic empty message that you can re-use to avoid defining duplicated\nempty messages in your APIs. A typical example is to use it as the request\nor the response type of an API method. For instance:\n\n    service Foo {\n      rpc Bar(google.protobuf.Empty) returns (google.protobuf.Empty);\n    }\n\nThe JSON representation for `Empty` is empty JSON object `{}`."
+      "id": "Empty"
     },
     "Span": {
       "description": "A span represents a single operation within a trace. Spans can be nested\nto form a trace tree. Often, a trace contains a root span that\ndescribes the end-to-end latency and, optionally, one or more subspans for\nits sub-operations. (A trace could alternatively contain multiple root spans,\nor none at all.) Spans do not need to be contiguous. There may be gaps\nand/or overlaps between spans in a trace.",
       "type": "object",
       "properties": {
-        "status": {
-          "$ref": "Status",
-          "description": "An optional final status for this span."
-        },
-        "name": {
-          "type": "string",
-          "description": "Name of the span. The span name is sanitized and displayed in the\nStackdriver Trace tool in the {% dynamic print site_values.console_name %}.\nThe name may be a method name or some other per-call site name.\nFor the same executable and the same call point, a best practice is\nto use a consistent name, which makes it easier to correlate\ncross-trace spans."
-        },
-        "stackTrace": {
-          "$ref": "StackTrace",
-          "description": "Stack trace captured at the start of the span."
-        },
-        "links": {
-          "type": "array",
-          "items": {
-            "$ref": "Link"
-          },
-          "description": "A collection of links, which are references from this span to another span\nin a different trace."
-        },
-        "attributes": {
-          "additionalProperties": {
-            "$ref": "AttributeValue"
-          },
-          "description": "Properties of a span in key:value format. The maximum length for the\nkey is 128 characters. The value can be a string (up to 2000 characters),\nint, or boolean.\n\nSome common pair examples:\n\n    \"/instance_id\": \"my-instance\"\n    \"/zone\": \"us-central1-a\"\n    \"/grpc/peer_address\": \"ip:port\" (dns, etc.)\n    \"/grpc/deadline\": \"Duration\"\n    \"/http/user_agent\"\n    \"/http/request_bytes\": 300\n    \"/http/response_bytes\": 1200\n    \"/http/url\": google.com/apis\n    \"abc.com/myattribute\": true",
-          "type": "object"
-        },
-        "id": {
-          "type": "string",
-          "description": "Identifier for the span. Must be a 64-bit integer other than 0 and\nunique within a trace.",
-          "format": "uint64"
-        },
         "localStartTime": {
           "description": "Start time of the span.\nOn the client side, this is the local machine clock time at which the span\nexecution was started; on the server\nside, this is the time at which the server application handler started\nrunning.",
           "format": "google-datetime",
@@ -124,21 +482,52 @@
           "type": "boolean"
         },
         "localEndTime": {
-          "type": "string",
           "description": "End time of the span.\nOn the client side, this is the local machine clock time at which the span\nexecution was ended; on the server\nside, this is the time at which the server application handler stopped\nrunning.",
-          "format": "google-datetime"
+          "format": "google-datetime",
+          "type": "string"
         },
         "parentId": {
-          "type": "string",
           "description": "ID of the parent span. If this is a root span, the value must be `0` or\nempty.",
-          "format": "uint64"
+          "format": "uint64",
+          "type": "string"
         },
         "timeEvents": {
+          "description": "A collection of `TimeEvent`s. A `TimeEvent` is a time-stamped annotation\non the span, consisting of either user-supplied key:value pairs, or\ndetails of an RPC message sent/received on the network.",
           "type": "array",
           "items": {
             "$ref": "TimeEvent"
+          }
+        },
+        "status": {
+          "description": "An optional final status for this span.",
+          "$ref": "Status"
+        },
+        "name": {
+          "description": "Name of the span. The span name is sanitized and displayed in the\nStackdriver Trace tool in the {% dynamic print site_values.console_name %}.\nThe name may be a method name or some other per-call site name.\nFor the same executable and the same call point, a best practice is\nto use a consistent name, which makes it easier to correlate\ncross-trace spans.",
+          "type": "string"
+        },
+        "stackTrace": {
+          "$ref": "StackTrace",
+          "description": "Stack trace captured at the start of the span."
+        },
+        "links": {
+          "description": "A collection of links, which are references from this span to another span\nin a different trace.",
+          "type": "array",
+          "items": {
+            "$ref": "Link"
+          }
+        },
+        "attributes": {
+          "additionalProperties": {
+            "$ref": "AttributeValue"
           },
-          "description": "A collection of `TimeEvent`s. A `TimeEvent` is a time-stamped annotation\non the span, consisting of either user-supplied key:value pairs, or\ndetails of an RPC message sent/received on the network."
+          "description": "Properties of a span in key:value format. The maximum length for the\nkey is 128 characters. The value can be a string (up to 2000 characters),\nint, or boolean.\n\nSome common pair examples:\n\n    \"/instance_id\": \"my-instance\"\n    \"/zone\": \"us-central1-a\"\n    \"/grpc/peer_address\": \"ip:port\" (dns, etc.)\n    \"/grpc/deadline\": \"Duration\"\n    \"/http/user_agent\"\n    \"/http/request_bytes\": 300\n    \"/http/response_bytes\": 1200\n    \"/http/url\": google.com/apis\n    \"abc.com/myattribute\": true",
+          "type": "object"
+        },
+        "id": {
+          "description": "Identifier for the span. Must be a 64-bit integer other than 0 and\nunique within a trace.",
+          "format": "uint64",
+          "type": "string"
         }
       },
       "id": "Span"
@@ -162,12 +551,13 @@
       "id": "ListTracesResponse"
     },
     "AttributeValue": {
+      "description": "The allowed types for the value side of an attribute key:value pair.",
       "type": "object",
       "properties": {
         "intValue": {
-          "type": "string",
           "description": "An integer value.",
-          "format": "int64"
+          "format": "int64",
+          "type": "string"
         },
         "stringValue": {
           "description": "A string value.",
@@ -178,19 +568,18 @@
           "type": "boolean"
         }
       },
-      "id": "AttributeValue",
-      "description": "The allowed types for the value side of an attribute key:value pair."
+      "id": "AttributeValue"
     },
     "BatchUpdateSpansRequest": {
       "description": "The request message for the `BatchUpdateSpans` method.",
       "type": "object",
       "properties": {
         "spanUpdates": {
-          "type": "object",
           "additionalProperties": {
             "$ref": "SpanUpdates"
           },
-          "description": "A map from trace name to spans to be stored or updated."
+          "description": "A map from trace name to spans to be stored or updated.",
+          "type": "object"
         }
       },
       "id": "BatchUpdateSpansRequest"
@@ -199,22 +588,23 @@
       "description": "StackTrace collected in a trace.",
       "type": "object",
       "properties": {
-        "stackTraceHashId": {
-          "type": "string",
-          "description": "The hash ID is used to conserve network bandwidth for duplicate\nstack traces within a single trace.\n\nOften multiple spans will have identical stack traces.\nThe first occurance of a stack trace should contain both the\n`stackFrame` content and a value in `stackTraceHashId`.\n\nSubsequent spans within the same request can refer\nto that stack trace by only setting `stackTraceHashId`.",
-          "format": "uint64"
-        },
         "stackFrame": {
+          "description": "Stack frames of this stack trace.",
           "type": "array",
           "items": {
             "$ref": "StackFrame"
-          },
-          "description": "Stack frames of this stack trace."
+          }
+        },
+        "stackTraceHashId": {
+          "description": "The hash ID is used to conserve network bandwidth for duplicate\nstack traces within a single trace.\n\nOften multiple spans will have identical stack traces.\nThe first occurance of a stack trace should contain both the\n`stackFrame` content and a value in `stackTraceHashId`.\n\nSubsequent spans within the same request can refer\nto that stack trace by only setting `stackTraceHashId`.",
+          "format": "uint64",
+          "type": "string"
         }
       },
       "id": "StackTrace"
     },
     "TimeEvent": {
+      "description": "A time-stamped annotation in the Span.",
       "type": "object",
       "properties": {
         "annotation": {
@@ -231,150 +621,14 @@
           "description": "An event describing an RPC message sent/received on the network."
         }
       },
-      "id": "TimeEvent",
-      "description": "A time-stamped annotation in the Span."
-    },
-    "NetworkEvent": {
-      "type": "object",
-      "properties": {
-        "messageSize": {
-          "description": "The number of bytes sent or received.",
-          "format": "uint64",
-          "type": "string"
-        },
-        "kernelTime": {
-          "description": "If available, this is the kernel time:\n\n*  For sent messages, this is the time at which the first bit was sent.\n*  For received messages, this is the time at which the last bit was\n   received.",
-          "format": "google-datetime",
-          "type": "string"
-        },
-        "type": {
-          "enum": [
-            "TYPE_UNSPECIFIED",
-            "SENT",
-            "RECV"
-          ],
-          "description": "Type of NetworkEvent. Indicates whether the RPC message was sent or\nreceived.",
-          "type": "string",
-          "enumDescriptions": [
-            "Unknown event type.",
-            "Indicates a sent RPC message.",
-            "Indicates a received RPC message."
-          ]
-        },
-        "messageId": {
-          "type": "string",
-          "description": "An identifier for the message, which must be unique in this span.",
-          "format": "uint64"
-        }
-      },
-      "id": "NetworkEvent",
-      "description": "An event describing an RPC message sent/received on the network."
-    },
-    "ListSpansResponse": {
-      "description": "The response message for the `ListSpans` method.",
-      "type": "object",
-      "properties": {
-        "spans": {
-          "description": "The requested spans if there are any in the specified trace.",
-          "type": "array",
-          "items": {
-            "$ref": "Span"
-          }
-        },
-        "nextPageToken": {
-          "type": "string",
-          "description": "If defined, indicates that there are more spans that match the request.\nPass this as the value of `pageToken` in a subsequent request to retrieve\nadditional spans."
-        }
-      },
-      "id": "ListSpansResponse"
-    },
-    "SpanUpdates": {
-      "description": "Collection of spans to update.",
-      "type": "object",
-      "properties": {
-        "spans": {
-          "type": "array",
-          "items": {
-            "$ref": "Span"
-          },
-          "description": "A collection of spans."
-        }
-      },
-      "id": "SpanUpdates"
-    },
-    "StackFrame": {
-      "description": "Represents a single stack frame in a stack trace.",
-      "type": "object",
-      "properties": {
-        "functionName": {
-          "description": "The fully-qualified name that uniquely identifies this function or\nmethod.",
-          "type": "string"
-        },
-        "lineNumber": {
-          "description": "Line number of the frame.",
-          "format": "int64",
-          "type": "string"
-        },
-        "loadModule": {
-          "$ref": "Module",
-          "description": "Binary module the code is loaded from."
-        },
-        "columnNumber": {
-          "description": "Column number is important in JavaScript (anonymous functions).\nMay not be available in some languages.",
-          "format": "int64",
-          "type": "string"
-        },
-        "fileName": {
-          "description": "The filename of the file containing this frame.",
-          "type": "string"
-        },
-        "sourceVersion": {
-          "type": "string",
-          "description": "The version of the deployed source code."
-        },
-        "originalFunctionName": {
-          "type": "string",
-          "description": "Used when the function name is\n[mangled](http://www.avabodh.com/cxxin/namemangling.html). May be\nfully-qualified."
-        }
-      },
-      "id": "StackFrame"
-    },
-    "Link": {
-      "description": "A pointer from this span to another span in a different `Trace`. Used\n(for example) in batching operations, where a single batch handler\nprocesses multiple requests from different traces.",
-      "type": "object",
-      "properties": {
-        "type": {
-          "enum": [
-            "TYPE_UNSPECIFIED",
-            "CHILD",
-            "PARENT"
-          ],
-          "description": "The relationship of the current span relative to the linked span.",
-          "type": "string",
-          "enumDescriptions": [
-            "The relationship of the two spans is unknown.",
-            "The current span is a child of the linked span.",
-            "The current span is the parent of the linked span."
-          ]
-        },
-        "traceId": {
-          "description": "The ID of the parent trace of the linked span.",
-          "type": "string"
-        },
-        "spanId": {
-          "description": "The `id` of the linked span.",
-          "format": "uint64",
-          "type": "string"
-        }
-      },
-      "id": "Link"
+      "id": "TimeEvent"
     }
   },
-  "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",
+  "icons": {
+    "x16": "http://www.google.com/images/icons/product/search-16.gif",
+    "x32": "http://www.google.com/images/icons/product/search-32.gif"
+  },
   "canonicalName": "Tracing",
   "auth": {
     "oauth2": {
@@ -394,259 +648,5 @@
   "rootUrl": "https://tracing.googleapis.com/",
   "ownerDomain": "google.com",
   "name": "tracing",
-  "batchPath": "batch",
-  "title": "Google Tracing API",
-  "ownerName": "Google",
-  "resources": {
-    "projects": {
-      "resources": {
-        "traces": {
-          "methods": {
-            "listSpans": {
-              "httpMethod": "GET",
-              "parameterOrder": [
-                "name"
-              ],
-              "response": {
-                "$ref": "ListSpansResponse"
-              },
-              "scopes": [
-                "https://www.googleapis.com/auth/cloud-platform",
-                "https://www.googleapis.com/auth/trace.readonly"
-              ],
-              "parameters": {
-                "name": {
-                  "required": true,
-                  "type": "string",
-                  "pattern": "^projects/[^/]+/traces/[^/]+$",
-                  "location": "path",
-                  "description": "ID of the trace for which to list child spans. Format is\n`projects/PROJECT_ID/traces/TRACE_ID`."
-                },
-                "pageToken": {
-                  "type": "string",
-                  "location": "query",
-                  "description": "Token identifying the page of results to return. If provided, use the\nvalue of the `nextPageToken` field from a previous request. Optional."
-                }
-              },
-              "flatPath": "v1/projects/{projectsId}/traces/{tracesId}:listSpans",
-              "id": "tracing.projects.traces.listSpans",
-              "path": "v1/{+name}:listSpans",
-              "description": "Returns a list of spans within a trace."
-            },
-            "list": {
-              "response": {
-                "$ref": "ListTracesResponse"
-              },
-              "parameterOrder": [
-                "parent"
-              ],
-              "httpMethod": "GET",
-              "scopes": [
-                "https://www.googleapis.com/auth/cloud-platform",
-                "https://www.googleapis.com/auth/trace.readonly"
-              ],
-              "parameters": {
-                "parent": {
-                  "location": "path",
-                  "description": "ID of the Cloud project where the trace data is stored.",
-                  "required": true,
-                  "type": "string",
-                  "pattern": "^projects/[^/]+$"
-                },
-                "orderBy": {
-                  "type": "string",
-                  "location": "query",
-                  "description": "Field used to sort the returned traces. Optional.\nCan be one of the following:\n\n*   `trace_id`\n*   `name` (`name` field of root span in the trace)\n*   `duration` (difference between `end_time` and `start_time` fields of\n     the root span)\n*   `start` (`start_time` field of the root span)\n\nDescending order can be specified by appending `desc` to the sort field\n(for example, `name desc`).\n\nOnly one sort field is permitted."
-                },
-                "filter": {
-                  "location": "query",
-                  "description": "An optional filter for the request.\nExample:\n`version_label_key:a some_label:some_label_key`\nreturns traces from version `a` and has `some_label` with `some_label_key`.",
-                  "type": "string"
-                },
-                "endTime": {
-                  "location": "query",
-                  "description": "End of the time interval (inclusive) during which the trace data was\ncollected from the application.",
-                  "format": "google-datetime",
-                  "type": "string"
-                },
-                "pageToken": {
-                  "type": "string",
-                  "location": "query",
-                  "description": "Token identifying the page of results to return. If provided, use the\nvalue of the `next_page_token` field from a previous request. Optional."
-                },
-                "startTime": {
-                  "type": "string",
-                  "location": "query",
-                  "description": "Start of the time interval (inclusive) during which the trace data was\ncollected from the application.",
-                  "format": "google-datetime"
-                },
-                "pageSize": {
-                  "location": "query",
-                  "description": "Maximum number of traces to return. If not specified or \u003c= 0, the\nimplementation selects a reasonable value. The implementation may\nreturn fewer traces than the requested page size. Optional.",
-                  "format": "int32",
-                  "type": "integer"
-                }
-              },
-              "flatPath": "v1/projects/{projectsId}/traces",
-              "path": "v1/{+parent}/traces",
-              "id": "tracing.projects.traces.list",
-              "description": "Returns of a list of traces that match the specified filter conditions."
-            },
-            "get": {
-              "response": {
-                "$ref": "Trace"
-              },
-              "parameterOrder": [
-                "name"
-              ],
-              "httpMethod": "GET",
-              "parameters": {
-                "name": {
-                  "required": true,
-                  "type": "string",
-                  "pattern": "^projects/[^/]+/traces/[^/]+$",
-                  "location": "path",
-                  "description": "ID of the trace. Format is `projects/PROJECT_ID/traces/TRACE_ID`."
-                }
-              },
-              "scopes": [
-                "https://www.googleapis.com/auth/cloud-platform",
-                "https://www.googleapis.com/auth/trace.readonly"
-              ],
-              "flatPath": "v1/projects/{projectsId}/traces/{tracesId}",
-              "path": "v1/{+name}",
-              "id": "tracing.projects.traces.get",
-              "description": "Returns a specific trace."
-            },
-            "batchUpdate": {
-              "httpMethod": "POST",
-              "parameterOrder": [
-                "parent"
-              ],
-              "response": {
-                "$ref": "Empty"
-              },
-              "parameters": {
-                "parent": {
-                  "location": "path",
-                  "description": "ID of the Cloud project where the trace data is stored.",
-                  "required": true,
-                  "type": "string",
-                  "pattern": "^projects/[^/]+$"
-                }
-              },
-              "scopes": [
-                "https://www.googleapis.com/auth/cloud-platform",
-                "https://www.googleapis.com/auth/trace.append"
-              ],
-              "flatPath": "v1/projects/{projectsId}/traces:batchUpdate",
-              "id": "tracing.projects.traces.batchUpdate",
-              "path": "v1/{+parent}/traces:batchUpdate",
-              "request": {
-                "$ref": "BatchUpdateSpansRequest"
-              },
-              "description": "Sends new spans to Stackdriver Trace or updates existing spans. If the\nname of a trace that you send matches that of an existing trace, any fields\nin the existing trace and its spans are overwritten by the provided values,\nand any new fields provided are merged with the existing trace data. If the\nname does not match, a new trace is created with given set of spans."
-            }
-          }
-        }
-      }
-    }
-  },
-  "parameters": {
-    "alt": {
-      "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",
-      "description": "Data format for response.",
-      "default": "json"
-    },
-    "access_token": {
-      "location": "query",
-      "description": "OAuth access token.",
-      "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."
-    },
-    "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."
-    },
-    "pp": {
-      "type": "boolean",
-      "default": "true",
-      "location": "query",
-      "description": "Pretty-print response."
-    },
-    "oauth_token": {
-      "location": "query",
-      "description": "OAuth 2.0 token for the current user.",
-      "type": "string"
-    },
-    "bearer_token": {
-      "location": "query",
-      "description": "OAuth bearer token.",
-      "type": "string"
-    },
-    "upload_protocol": {
-      "location": "query",
-      "description": "Upload protocol for media (e.g. \"raw\", \"multipart\").",
-      "type": "string"
-    },
-    "prettyPrint": {
-      "location": "query",
-      "description": "Returns response with indentations and line breaks.",
-      "type": "boolean",
-      "default": "true"
-    },
-    "fields": {
-      "location": "query",
-      "description": "Selector specifying which fields to include in a partial response.",
-      "type": "string"
-    },
-    "uploadType": {
-      "type": "string",
-      "location": "query",
-      "description": "Legacy upload protocol for media (e.g. \"media\", \"multipart\")."
-    },
-    "$.xgafv": {
-      "location": "query",
-      "enum": [
-        "1",
-        "2"
-      ],
-      "description": "V1 error format.",
-      "type": "string",
-      "enumDescriptions": [
-        "v1 error format",
-        "v2 error format"
-      ]
-    },
-    "callback": {
-      "type": "string",
-      "location": "query",
-      "description": "JSONP"
-    }
-  },
-  "version": "v1",
-  "baseUrl": "https://tracing.googleapis.com/",
-  "servicePath": "",
-  "description": "Send and retrieve trace data from Google Stackdriver Trace.\n",
-  "kind": "discovery#restDescription",
-  "basePath": "",
-  "id": "tracing:v1",
-  "documentationLink": "https://cloud.google.com/trace",
-  "revision": "20170308"
+  "batchPath": "batch"
 }
diff --git a/tracing/v1/tracing-gen.go b/tracing/v1/tracing-gen.go
index afd84a5..44167e7 100644
--- a/tracing/v1/tracing-gen.go
+++ b/tracing/v1/tracing-gen.go
@@ -67,10 +67,9 @@
 }
 
 type Service struct {
-	client                    *http.Client
-	BasePath                  string // API endpoint base URL
-	UserAgent                 string // optional additional User-Agent fragment
-	GoogleClientHeaderElement string // client header fragment, for Google use only
+	client    *http.Client
+	BasePath  string // API endpoint base URL
+	UserAgent string // optional additional User-Agent fragment
 
 	Projects *ProjectsService
 }
@@ -82,10 +81,6 @@
 	return googleapi.UserAgent + " " + s.UserAgent
 }
 
-func (s *Service) clientHeader() string {
-	return gensupport.GoogleClientHeader("20170210", s.GoogleClientHeaderElement)
-}
-
 func NewProjectsService(s *Service) *ProjectsService {
 	rs := &ProjectsService{s: s}
 	rs.Traces = NewProjectsTracesService(s)
@@ -916,7 +911,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	var body io.Reader = nil
 	body, err := googleapi.WithoutDataWrapper.JSONReader(c.batchupdatespansrequest)
 	if err != nil {
@@ -1062,7 +1056,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	if c.ifNoneMatch_ != "" {
 		reqHeaders.Set("If-None-Match", c.ifNoneMatch_)
 	}
@@ -1270,7 +1263,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	if c.ifNoneMatch_ != "" {
 		reqHeaders.Set("If-None-Match", c.ifNoneMatch_)
 	}
@@ -1473,7 +1465,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	if c.ifNoneMatch_ != "" {
 		reqHeaders.Set("If-None-Match", c.ifNoneMatch_)
 	}
diff --git a/translate/v2/translate-gen.go b/translate/v2/translate-gen.go
index 86e2587..a3705f9 100644
--- a/translate/v2/translate-gen.go
+++ b/translate/v2/translate-gen.go
@@ -57,10 +57,9 @@
 }
 
 type Service struct {
-	client                    *http.Client
-	BasePath                  string // API endpoint base URL
-	UserAgent                 string // optional additional User-Agent fragment
-	GoogleClientHeaderElement string // client header fragment, for Google use only
+	client    *http.Client
+	BasePath  string // API endpoint base URL
+	UserAgent string // optional additional User-Agent fragment
 
 	Detections *DetectionsService
 
@@ -76,10 +75,6 @@
 	return googleapi.UserAgent + " " + s.UserAgent
 }
 
-func (s *Service) clientHeader() string {
-	return gensupport.GoogleClientHeader("20170210", s.GoogleClientHeaderElement)
-}
-
 func NewDetectionsService(s *Service) *DetectionsService {
 	rs := &DetectionsService{s: s}
 	return rs
@@ -375,7 +370,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	if c.ifNoneMatch_ != "" {
 		reqHeaders.Set("If-None-Match", c.ifNoneMatch_)
 	}
@@ -515,7 +509,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	if c.ifNoneMatch_ != "" {
 		reqHeaders.Set("If-None-Match", c.ifNoneMatch_)
 	}
@@ -669,7 +662,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	if c.ifNoneMatch_ != "" {
 		reqHeaders.Set("If-None-Match", c.ifNoneMatch_)
 	}
diff --git a/urlshortener/v1/urlshortener-gen.go b/urlshortener/v1/urlshortener-gen.go
index 13ce6c6..a885113 100644
--- a/urlshortener/v1/urlshortener-gen.go
+++ b/urlshortener/v1/urlshortener-gen.go
@@ -61,10 +61,9 @@
 }
 
 type Service struct {
-	client                    *http.Client
-	BasePath                  string // API endpoint base URL
-	UserAgent                 string // optional additional User-Agent fragment
-	GoogleClientHeaderElement string // client header fragment, for Google use only
+	client    *http.Client
+	BasePath  string // API endpoint base URL
+	UserAgent string // optional additional User-Agent fragment
 
 	Url *UrlService
 }
@@ -76,10 +75,6 @@
 	return googleapi.UserAgent + " " + s.UserAgent
 }
 
-func (s *Service) clientHeader() string {
-	return gensupport.GoogleClientHeader("20170210", s.GoogleClientHeaderElement)
-}
-
 func NewUrlService(s *Service) *UrlService {
 	rs := &UrlService{s: s}
 	return rs
@@ -376,7 +371,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	if c.ifNoneMatch_ != "" {
 		reqHeaders.Set("If-None-Match", c.ifNoneMatch_)
 	}
@@ -515,7 +509,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	var body io.Reader = nil
 	body, err := googleapi.WithoutDataWrapper.JSONReader(c.url)
 	if err != nil {
@@ -660,7 +653,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	if c.ifNoneMatch_ != "" {
 		reqHeaders.Set("If-None-Match", c.ifNoneMatch_)
 	}
diff --git a/vision/v1/vision-api.json b/vision/v1/vision-api.json
index a021550..4debc1f 100644
--- a/vision/v1/vision-api.json
+++ b/vision/v1/vision-api.json
@@ -1,129 +1,374 @@
 {
-  "ownerName": "Google",
-  "resources": {
-    "images": {
-      "methods": {
-        "annotate": {
-          "httpMethod": "POST",
-          "parameterOrder": [],
-          "response": {
-            "$ref": "BatchAnnotateImagesResponse"
-          },
-          "parameters": {},
-          "scopes": [
-            "https://www.googleapis.com/auth/cloud-platform"
-          ],
-          "flatPath": "v1/images:annotate",
-          "id": "vision.images.annotate",
-          "path": "v1/images:annotate",
-          "request": {
-            "$ref": "BatchAnnotateImagesRequest"
-          },
-          "description": "Run image detection and annotation for a batch of images."
-        }
-      }
-    }
-  },
-  "parameters": {
-    "upload_protocol": {
-      "description": "Upload protocol for media (e.g. \"raw\", \"multipart\").",
-      "type": "string",
-      "location": "query"
-    },
-    "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"
-    },
-    "fields": {
-      "description": "Selector specifying which fields to include in a partial response.",
-      "type": "string",
-      "location": "query"
-    },
-    "callback": {
-      "location": "query",
-      "description": "JSONP",
-      "type": "string"
-    },
-    "$.xgafv": {
-      "description": "V1 error format.",
-      "type": "string",
-      "enumDescriptions": [
-        "v1 error format",
-        "v2 error format"
-      ],
-      "location": "query",
-      "enum": [
-        "1",
-        "2"
-      ]
-    },
-    "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",
-      "description": "Data format for response.",
-      "default": "json",
-      "enum": [
-        "json",
-        "media",
-        "proto"
-      ],
-      "type": "string"
-    },
-    "access_token": {
-      "location": "query",
-      "description": "OAuth access token.",
-      "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"
-    },
-    "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"
-    },
-    "pp": {
-      "location": "query",
-      "description": "Pretty-print response.",
-      "type": "boolean",
-      "default": "true"
-    },
-    "bearer_token": {
-      "location": "query",
-      "description": "OAuth bearer token.",
-      "type": "string"
-    },
-    "oauth_token": {
-      "description": "OAuth 2.0 token for the current user.",
-      "type": "string",
-      "location": "query"
-    }
-  },
-  "version": "v1",
-  "baseUrl": "https://vision.googleapis.com/",
-  "kind": "discovery#restDescription",
-  "description": "Integrates Google Vision features, including image labeling, face, logo, and landmark detection, optical character recognition (OCR), and detection of explicit content, into applications.",
-  "servicePath": "",
   "basePath": "",
+  "revision": "20170321",
   "documentationLink": "https://cloud.google.com/vision/",
-  "revision": "20170301",
   "id": "vision:v1",
   "discoveryVersion": "v1",
   "version_module": "True",
   "schemas": {
+    "ImageContext": {
+      "description": "Image context and/or feature-specific parameters.",
+      "type": "object",
+      "properties": {
+        "languageHints": {
+          "description": "List of languages to use for TEXT_DETECTION. In most cases, an empty value\nyields the best results since it enables automatic language detection. For\nlanguages based on the Latin alphabet, setting `language_hints` is not\nneeded. In rare cases, when the language of the text in the image is known,\nsetting a hint will help get better results (although it will be a\nsignificant hindrance if the hint is wrong). Text detection returns an\nerror if one or more of the specified languages is not one of the\n[supported languages](/vision/docs/languages).",
+          "type": "array",
+          "items": {
+            "type": "string"
+          }
+        },
+        "latLongRect": {
+          "description": "lat/long rectangle that specifies the location of the image.",
+          "$ref": "LatLongRect"
+        },
+        "cropHintsParams": {
+          "description": "Parameters for crop hints annotation request.",
+          "$ref": "CropHintsParams"
+        }
+      },
+      "id": "ImageContext"
+    },
+    "Page": {
+      "description": "Detected page from OCR.",
+      "type": "object",
+      "properties": {
+        "height": {
+          "description": "Page height in pixels.",
+          "format": "int32",
+          "type": "integer"
+        },
+        "width": {
+          "description": "Page width in pixels.",
+          "format": "int32",
+          "type": "integer"
+        },
+        "blocks": {
+          "description": "List of blocks of text, images etc on this page.",
+          "type": "array",
+          "items": {
+            "$ref": "Block"
+          }
+        },
+        "property": {
+          "description": "Additional information detected on the page.",
+          "$ref": "TextProperty"
+        }
+      },
+      "id": "Page"
+    },
+    "AnnotateImageRequest": {
+      "properties": {
+        "image": {
+          "description": "The image to be processed.",
+          "$ref": "Image"
+        },
+        "features": {
+          "description": "Requested features.",
+          "type": "array",
+          "items": {
+            "$ref": "Feature"
+          }
+        },
+        "imageContext": {
+          "description": "Additional context that may accompany the image.",
+          "$ref": "ImageContext"
+        }
+      },
+      "id": "AnnotateImageRequest",
+      "description": "Request for performing Google Cloud Vision API tasks over a user-provided\nimage, with user-requested features.",
+      "type": "object"
+    },
+    "Status": {
+      "properties": {
+        "details": {
+          "description": "A list of messages that carry the error details.  There will be a\ncommon 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"
+            },
+            "type": "object"
+          }
+        },
+        "code": {
+          "description": "The status code, which should be an enum value of google.rpc.Code.",
+          "format": "int32",
+          "type": "integer"
+        },
+        "message": {
+          "description": "A developer-facing error message, which should be in English. Any\nuser-facing error message should be localized and sent in the\ngoogle.rpc.Status.details field, or localized by the client.",
+          "type": "string"
+        }
+      },
+      "id": "Status",
+      "description": "The `Status` type defines a logical error model that is suitable for different\nprogramming environments, including REST APIs and RPC APIs. It is used by\n[gRPC](https://github.com/grpc). The error model is designed to be:\n\n- Simple to use and understand for most users\n- Flexible enough to meet unexpected needs\n\n# Overview\n\nThe `Status` message contains three pieces of data: error code, error message,\nand error details. The error code should be an enum value of\ngoogle.rpc.Code, but it may accept additional error codes if needed.  The\nerror message should be a developer-facing English message that helps\ndevelopers *understand* and *resolve* the error. If a localized user-facing\nerror message is needed, put the localized message in the error details or\nlocalize it in the client. The optional error details may contain arbitrary\ninformation about the error. There is a predefined set of error detail types\nin the package `google.rpc` which can be used for common error conditions.\n\n# Language mapping\n\nThe `Status` message is the logical representation of the error model, but it\nis not necessarily the actual wire format. When the `Status` message is\nexposed in different client libraries and different wire protocols, it can be\nmapped differently. For example, it will likely be mapped to some exceptions\nin Java, but more likely mapped to some error codes in C.\n\n# Other uses\n\nThe error model and the `Status` message can be used in a variety of\nenvironments, either with or without APIs, to provide a\nconsistent developer experience across different environments.\n\nExample uses of this error model include:\n\n- Partial errors. If a service needs to return partial errors to the client,\n    it may embed the `Status` in the normal response to indicate the partial\n    errors.\n\n- Workflow errors. A typical workflow has multiple steps. Each step may\n    have a `Status` message for error reporting purpose.\n\n- Batch operations. If a client uses batch request and batch response, the\n    `Status` message should be used directly inside batch response, one for\n    each error sub-response.\n\n- Asynchronous operations. If an API call embeds asynchronous operation\n    results in its response, the status of those operations should be\n    represented directly using the `Status` message.\n\n- Logging. If some API errors are stored in logs, the message `Status` could\n    be used directly after any stripping needed for security/privacy reasons.",
+      "type": "object"
+    },
+    "LatLongRect": {
+      "properties": {
+        "maxLatLng": {
+          "$ref": "LatLng",
+          "description": "Max lat/long pair."
+        },
+        "minLatLng": {
+          "description": "Min lat/long pair.",
+          "$ref": "LatLng"
+        }
+      },
+      "id": "LatLongRect",
+      "description": "Rectangle determined by min and max `LatLng` pairs.",
+      "type": "object"
+    },
+    "Symbol": {
+      "properties": {
+        "boundingBox": {
+          "description": "The bounding box for the symbol.\nThe vertices are in the order of top-left, top-right, bottom-right,\nbottom-left. When a rotation of the bounding box is detected the rotation\nis represented as around the top-left corner as defined when the text is\nread in the 'natural' orientation.\nFor example:\n  * when the text is horizontal it might look like:\n     0----1\n     |    |\n     3----2\n  * when it's rotated 180 degrees around the top-left corner it becomes:\n     2----3\n     |    |\n     1----0\n  and the vertice order will still be (0, 1, 2, 3).",
+          "$ref": "BoundingPoly"
+        },
+        "text": {
+          "description": "The actual UTF-8 representation of the symbol.",
+          "type": "string"
+        },
+        "property": {
+          "$ref": "TextProperty",
+          "description": "Additional information detected for the symbol."
+        }
+      },
+      "id": "Symbol",
+      "description": "A single symbol representation.",
+      "type": "object"
+    },
+    "CropHintsAnnotation": {
+      "properties": {
+        "cropHints": {
+          "description": "Crop hint results.",
+          "type": "array",
+          "items": {
+            "$ref": "CropHint"
+          }
+        }
+      },
+      "id": "CropHintsAnnotation",
+      "description": "Set of crop hints that are used to generate new crops when serving images.",
+      "type": "object"
+    },
+    "LatLng": {
+      "properties": {
+        "longitude": {
+          "description": "The longitude in degrees. It must be in the range [-180.0, +180.0].",
+          "format": "double",
+          "type": "number"
+        },
+        "latitude": {
+          "description": "The latitude in degrees. It must be in the range [-90.0, +90.0].",
+          "format": "double",
+          "type": "number"
+        }
+      },
+      "id": "LatLng",
+      "description": "An object representing a latitude/longitude pair. This is expressed as a pair\nof doubles representing degrees latitude and degrees longitude. Unless\nspecified otherwise, this must conform to the\n\u003ca href=\"http://www.unoosa.org/pdf/icg/2012/template/WGS_84.pdf\"\u003eWGS84\nstandard\u003c/a\u003e. Values must be within normalized ranges.\n\nExample of normalization code in Python:\n\n    def NormalizeLongitude(longitude):\n      \"\"\"Wraps decimal degrees longitude to [-180.0, 180.0].\"\"\"\n      q, r = divmod(longitude, 360.0)\n      if r \u003e 180.0 or (r == 180.0 and q \u003c= -1.0):\n        return r - 360.0\n      return r\n\n    def NormalizeLatLng(latitude, longitude):\n      \"\"\"Wraps decimal degrees latitude and longitude to\n      [-90.0, 90.0] and [-180.0, 180.0], respectively.\"\"\"\n      r = latitude % 360.0\n      if r \u003c= 90.0:\n        return r, NormalizeLongitude(longitude)\n      elif r \u003e= 270.0:\n        return r - 360, NormalizeLongitude(longitude)\n      else:\n        return 180 - r, NormalizeLongitude(longitude + 180.0)\n\n    assert 180.0 == NormalizeLongitude(180.0)\n    assert -180.0 == NormalizeLongitude(-180.0)\n    assert -179.0 == NormalizeLongitude(181.0)\n    assert (0.0, 0.0) == NormalizeLatLng(360.0, 0.0)\n    assert (0.0, 0.0) == NormalizeLatLng(-360.0, 0.0)\n    assert (85.0, 180.0) == NormalizeLatLng(95.0, 0.0)\n    assert (-85.0, -170.0) == NormalizeLatLng(-95.0, 10.0)\n    assert (90.0, 10.0) == NormalizeLatLng(90.0, 10.0)\n    assert (-90.0, -10.0) == NormalizeLatLng(-90.0, -10.0)\n    assert (0.0, -170.0) == NormalizeLatLng(-180.0, 10.0)\n    assert (0.0, -170.0) == NormalizeLatLng(180.0, 10.0)\n    assert (-90.0, 10.0) == NormalizeLatLng(270.0, 10.0)\n    assert (90.0, 10.0) == NormalizeLatLng(-270.0, 10.0)\n\nThe code in logs/storage/validator/logs_validator_traits.cc treats this type\nas if it were annotated as ST_LOCATION.",
+      "type": "object"
+    },
+    "Color": {
+      "description": "Represents a color in the RGBA color space. This representation is designed\nfor simplicity of conversion to/from color representations in various\nlanguages over compactness; for example, the fields of this representation\ncan be trivially provided to the constructor of \"java.awt.Color\" in Java; it\ncan also be trivially provided to UIColor's \"+colorWithRed:green:blue:alpha\"\nmethod in iOS; and, with just a little work, it can be easily formatted into\na CSS \"rgba()\" string in JavaScript, as well. Here are some examples:\n\nExample (Java):\n\n     import com.google.type.Color;\n\n     // ...\n     public static java.awt.Color fromProto(Color protocolor) {\n       float alpha = protocolor.hasAlpha()\n           ? protocolor.getAlpha().getValue()\n           : 1.0;\n\n       return new java.awt.Color(\n           protocolor.getRed(),\n           protocolor.getGreen(),\n           protocolor.getBlue(),\n           alpha);\n     }\n\n     public static Color toProto(java.awt.Color color) {\n       float red = (float) color.getRed();\n       float green = (float) color.getGreen();\n       float blue = (float) color.getBlue();\n       float denominator = 255.0;\n       Color.Builder resultBuilder =\n           Color\n               .newBuilder()\n               .setRed(red / denominator)\n               .setGreen(green / denominator)\n               .setBlue(blue / denominator);\n       int alpha = color.getAlpha();\n       if (alpha != 255) {\n         result.setAlpha(\n             FloatValue\n                 .newBuilder()\n                 .setValue(((float) alpha) / denominator)\n                 .build());\n       }\n       return resultBuilder.build();\n     }\n     // ...\n\nExample (iOS / Obj-C):\n\n     // ...\n     static UIColor* fromProto(Color* protocolor) {\n        float red = [protocolor red];\n        float green = [protocolor green];\n        float blue = [protocolor blue];\n        FloatValue* alpha_wrapper = [protocolor alpha];\n        float alpha = 1.0;\n        if (alpha_wrapper != nil) {\n          alpha = [alpha_wrapper value];\n        }\n        return [UIColor colorWithRed:red green:green blue:blue alpha:alpha];\n     }\n\n     static Color* toProto(UIColor* color) {\n         CGFloat red, green, blue, alpha;\n         if (![color getRed:&red green:&green blue:&blue alpha:&alpha]) {\n           return nil;\n         }\n         Color* result = [Color alloc] init];\n         [result setRed:red];\n         [result setGreen:green];\n         [result setBlue:blue];\n         if (alpha \u003c= 0.9999) {\n           [result setAlpha:floatWrapperWithValue(alpha)];\n         }\n         [result autorelease];\n         return result;\n    }\n    // ...\n\n Example (JavaScript):\n\n    // ...\n\n    var protoToCssColor = function(rgb_color) {\n       var redFrac = rgb_color.red || 0.0;\n       var greenFrac = rgb_color.green || 0.0;\n       var blueFrac = rgb_color.blue || 0.0;\n       var red = Math.floor(redFrac * 255);\n       var green = Math.floor(greenFrac * 255);\n       var blue = Math.floor(blueFrac * 255);\n\n       if (!('alpha' in rgb_color)) {\n          return rgbToCssColor_(red, green, blue);\n       }\n\n       var alphaFrac = rgb_color.alpha.value || 0.0;\n       var rgbParams = [red, green, blue].join(',');\n       return ['rgba(', rgbParams, ',', alphaFrac, ')'].join('');\n    };\n\n    var rgbToCssColor_ = function(red, green, blue) {\n      var rgbNumber = new Number((red \u003c\u003c 16) | (green \u003c\u003c 8) | blue);\n      var hexString = rgbNumber.toString(16);\n      var missingZeros = 6 - hexString.length;\n      var resultBuilder = ['#'];\n      for (var i = 0; i \u003c missingZeros; i++) {\n         resultBuilder.push('0');\n      }\n      resultBuilder.push(hexString);\n      return resultBuilder.join('');\n    };\n\n    // ...",
+      "type": "object",
+      "properties": {
+        "red": {
+          "description": "The amount of red 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"
+        },
+        "blue": {
+          "description": "The amount of blue in the color as a value in the interval [0, 1].",
+          "format": "float",
+          "type": "number"
+        },
+        "alpha": {
+          "description": "The fraction of this color that should be applied to the pixel. That is,\nthe final pixel color is defined by the equation:\n\n  pixel color = alpha * (this color) + (1.0 - alpha) * (background color)\n\nThis means that a value of 1.0 corresponds to a solid color, whereas\na value of 0.0 corresponds to a completely transparent color. This\nuses a wrapper message rather than a simple float scalar so that it is\npossible to distinguish between a default value and the value being unset.\nIf omitted, this color object is to be rendered as a solid color\n(as if the alpha value had been explicitly given with a value of 1.0).",
+          "format": "float",
+          "type": "number"
+        }
+      },
+      "id": "Color"
+    },
+    "Feature": {
+      "properties": {
+        "type": {
+          "enumDescriptions": [
+            "Unspecified feature type.",
+            "Run face detection.",
+            "Run landmark detection.",
+            "Run logo detection.",
+            "Run label detection.",
+            "Run OCR.",
+            "Run dense text document OCR. Takes precedence when both\nDOCUMENT_TEXT_DETECTION and TEXT_DETECTION are present.",
+            "Run computer vision models to compute image safe-search properties.",
+            "Compute a set of image properties, such as the image's dominant colors.",
+            "Run crop hints.",
+            "Run web detection."
+          ],
+          "enum": [
+            "TYPE_UNSPECIFIED",
+            "FACE_DETECTION",
+            "LANDMARK_DETECTION",
+            "LOGO_DETECTION",
+            "LABEL_DETECTION",
+            "TEXT_DETECTION",
+            "DOCUMENT_TEXT_DETECTION",
+            "SAFE_SEARCH_DETECTION",
+            "IMAGE_PROPERTIES",
+            "CROP_HINTS",
+            "WEB_DETECTION"
+          ],
+          "description": "The feature type.",
+          "type": "string"
+        },
+        "maxResults": {
+          "description": "Maximum number of results of this type.",
+          "format": "int32",
+          "type": "integer"
+        }
+      },
+      "id": "Feature",
+      "description": "Users describe the type of Google Cloud Vision API tasks to perform over\nimages by using *Feature*s. Each Feature indicates a type of image\ndetection task to perform. Features encode the Cloud Vision API\nvertical to operate on and the number of top-scoring results to return.",
+      "type": "object"
+    },
+    "ImageProperties": {
+      "description": "Stores image properties, such as dominant colors.",
+      "type": "object",
+      "properties": {
+        "dominantColors": {
+          "description": "If present, dominant colors completed successfully.",
+          "$ref": "DominantColorsAnnotation"
+        }
+      },
+      "id": "ImageProperties"
+    },
+    "SafeSearchAnnotation": {
+      "properties": {
+        "violence": {
+          "enum": [
+            "UNKNOWN",
+            "VERY_UNLIKELY",
+            "UNLIKELY",
+            "POSSIBLE",
+            "LIKELY",
+            "VERY_LIKELY"
+          ],
+          "description": "Violence likelihood.",
+          "type": "string",
+          "enumDescriptions": [
+            "Unknown likelihood.",
+            "It is very unlikely that the image belongs to the specified vertical.",
+            "It is unlikely that the image belongs to the specified vertical.",
+            "It is possible that the image belongs to the specified vertical.",
+            "It is likely that the image belongs to the specified vertical.",
+            "It is very likely that the image belongs to the specified vertical."
+          ]
+        },
+        "adult": {
+          "enumDescriptions": [
+            "Unknown likelihood.",
+            "It is very unlikely that the image belongs to the specified vertical.",
+            "It is unlikely that the image belongs to the specified vertical.",
+            "It is possible that the image belongs to the specified vertical.",
+            "It is likely that the image belongs to the specified vertical.",
+            "It is very likely that the image belongs to the specified vertical."
+          ],
+          "enum": [
+            "UNKNOWN",
+            "VERY_UNLIKELY",
+            "UNLIKELY",
+            "POSSIBLE",
+            "LIKELY",
+            "VERY_LIKELY"
+          ],
+          "description": "Represents the adult content likelihood for the image.",
+          "type": "string"
+        },
+        "spoof": {
+          "enum": [
+            "UNKNOWN",
+            "VERY_UNLIKELY",
+            "UNLIKELY",
+            "POSSIBLE",
+            "LIKELY",
+            "VERY_LIKELY"
+          ],
+          "description": "Spoof likelihood. The likelihood that an modification\nwas made to the image's canonical version to make it appear\nfunny or offensive.",
+          "type": "string",
+          "enumDescriptions": [
+            "Unknown likelihood.",
+            "It is very unlikely that the image belongs to the specified vertical.",
+            "It is unlikely that the image belongs to the specified vertical.",
+            "It is possible that the image belongs to the specified vertical.",
+            "It is likely that the image belongs to the specified vertical.",
+            "It is very likely that the image belongs to the specified vertical."
+          ]
+        },
+        "medical": {
+          "enum": [
+            "UNKNOWN",
+            "VERY_UNLIKELY",
+            "UNLIKELY",
+            "POSSIBLE",
+            "LIKELY",
+            "VERY_LIKELY"
+          ],
+          "description": "Likelihood that this is a medical image.",
+          "type": "string",
+          "enumDescriptions": [
+            "Unknown likelihood.",
+            "It is very unlikely that the image belongs to the specified vertical.",
+            "It is unlikely that the image belongs to the specified vertical.",
+            "It is possible that the image belongs to the specified vertical.",
+            "It is likely that the image belongs to the specified vertical.",
+            "It is very likely that the image belongs to the specified vertical."
+          ]
+        }
+      },
+      "id": "SafeSearchAnnotation",
+      "description": "Set of features pertaining to the image, computed by computer vision\nmethods over safe-search verticals (for example, adult, spoof, medical,\nviolence).",
+      "type": "object"
+    },
+    "DominantColorsAnnotation": {
+      "properties": {
+        "colors": {
+          "description": "RGB color values with their score and pixel fraction.",
+          "type": "array",
+          "items": {
+            "$ref": "ColorInfo"
+          }
+        }
+      },
+      "id": "DominantColorsAnnotation",
+      "description": "Set of dominant colors and their corresponding scores.",
+      "type": "object"
+    },
+    "TextAnnotation": {
+      "description": "TextAnnotation contains a structured representation of OCR extracted text.\nThe hierarchy of an OCR extracted text structure is like this:\n    TextAnnotation -\u003e Page -\u003e Block -\u003e Paragraph -\u003e Word -\u003e Symbol\nEach structural component, starting from Page, may further have their own\nproperties. Properties describe detected languages, breaks etc.. Please\nrefer to the google.cloud.vision.v1.TextAnnotation.TextProperty message\ndefinition below for more detail.",
+      "type": "object",
+      "properties": {
+        "pages": {
+          "description": "List of pages detected by OCR.",
+          "type": "array",
+          "items": {
+            "$ref": "Page"
+          }
+        },
+        "text": {
+          "description": "UTF-8 text detected on the pages.",
+          "type": "string"
+        }
+      },
+      "id": "TextAnnotation"
+    },
     "DetectedLanguage": {
       "description": "Detected language for a structural component.",
       "type": "object",
@@ -141,8 +386,6 @@
       "id": "DetectedLanguage"
     },
     "Vertex": {
-      "description": "A vertex represents a 2D point in the image.\nNOTE: the vertex coordinates are in the same scale as the original image.",
-      "type": "object",
       "properties": {
         "y": {
           "description": "Y coordinate.",
@@ -155,27 +398,27 @@
           "type": "integer"
         }
       },
-      "id": "Vertex"
+      "id": "Vertex",
+      "description": "A vertex represents a 2D point in the image.\nNOTE: the vertex coordinates are in the same scale as the original image.",
+      "type": "object"
     },
-    "WebEntity": {
-      "description": "Entity deduced from similar images on the Internet.",
-      "type": "object",
+    "TextProperty": {
       "properties": {
-        "description": {
-          "description": "Canonical description of the entity, in English.",
-          "type": "string"
+        "detectedLanguages": {
+          "description": "A list of detected languages together with confidence.",
+          "type": "array",
+          "items": {
+            "$ref": "DetectedLanguage"
+          }
         },
-        "score": {
-          "description": "Overall relevancy score for the entity.\nNot normalized and not comparable across different image queries.",
-          "format": "float",
-          "type": "number"
-        },
-        "entityId": {
-          "description": "Opaque entity ID.",
-          "type": "string"
+        "detectedBreak": {
+          "description": "Detected start or end of a text segment.",
+          "$ref": "DetectedBreak"
         }
       },
-      "id": "WebEntity"
+      "id": "TextProperty",
+      "description": "Additional information detected on the structural component.",
+      "type": "object"
     },
     "BoundingPoly": {
       "description": "A bounding polygon for the detected image annotation.",
@@ -191,32 +434,30 @@
       },
       "id": "BoundingPoly"
     },
-    "TextProperty": {
-      "description": "Additional information detected on the structural component.",
-      "type": "object",
+    "WebEntity": {
       "properties": {
-        "detectedLanguages": {
-          "description": "A list of detected languages together with confidence.",
-          "type": "array",
-          "items": {
-            "$ref": "DetectedLanguage"
-          }
+        "entityId": {
+          "description": "Opaque entity ID.",
+          "type": "string"
         },
-        "detectedBreak": {
-          "description": "Detected start or end of a text segment.",
-          "$ref": "DetectedBreak"
+        "description": {
+          "description": "Canonical description of the entity, in English.",
+          "type": "string"
+        },
+        "score": {
+          "description": "Overall relevancy score for the entity.\nNot normalized and not comparable across different image queries.",
+          "format": "float",
+          "type": "number"
         }
       },
-      "id": "TextProperty"
+      "id": "WebEntity",
+      "description": "Entity deduced from similar images on the Internet.",
+      "type": "object"
     },
     "AnnotateImageResponse": {
       "description": "Response to an image annotation request.",
       "type": "object",
       "properties": {
-        "error": {
-          "description": "If set, represents the error message for the operation.\nNote that filled-in image annotations are guaranteed to be\ncorrect, even when `error` is set.",
-          "$ref": "Status"
-        },
         "fullTextAnnotation": {
           "$ref": "TextAnnotation",
           "description": "If present, text (OCR) detection or document (OCR) text detection has\ncompleted successfully.\nThis annotation provides the structural hierarchy for the OCR detected\ntext."
@@ -235,6 +476,10 @@
             "$ref": "EntityAnnotation"
           }
         },
+        "imagePropertiesAnnotation": {
+          "description": "If present, image properties were extracted successfully.",
+          "$ref": "ImageProperties"
+        },
         "faceAnnotations": {
           "description": "If present, face detection has completed successfully.",
           "type": "array",
@@ -242,10 +487,6 @@
             "$ref": "FaceAnnotation"
           }
         },
-        "imagePropertiesAnnotation": {
-          "$ref": "ImageProperties",
-          "description": "If present, image properties were extracted successfully."
-        },
         "logoAnnotations": {
           "description": "If present, logo detection has completed successfully.",
           "type": "array",
@@ -253,14 +494,14 @@
             "$ref": "EntityAnnotation"
           }
         },
+        "cropHintsAnnotation": {
+          "$ref": "CropHintsAnnotation",
+          "description": "If present, crop hints have completed successfully."
+        },
         "webDetection": {
           "description": "If present, web detection has completed successfully.",
           "$ref": "WebDetection"
         },
-        "cropHintsAnnotation": {
-          "description": "If present, crop hints have completed successfully.",
-          "$ref": "CropHintsAnnotation"
-        },
         "labelAnnotations": {
           "description": "If present, label detection has completed successfully.",
           "type": "array",
@@ -271,13 +512,15 @@
         "safeSearchAnnotation": {
           "description": "If present, safe-search annotation has completed successfully.",
           "$ref": "SafeSearchAnnotation"
+        },
+        "error": {
+          "$ref": "Status",
+          "description": "If set, represents the error message for the operation.\nNote that filled-in image annotations are guaranteed to be\ncorrect, even when `error` is set."
         }
       },
       "id": "AnnotateImageResponse"
     },
     "CropHintsParams": {
-      "description": "Parameters for crop hints annotation request.",
-      "type": "object",
       "properties": {
         "aspectRatios": {
           "description": "Aspect ratios in floats, representing the ratio of the width to the height\nof the image. For example, if the desired aspect ratio is 4/3, the\ncorresponding float value should be 1.33333.  If not specified, the\nbest possible crop is returned. The number of provided aspect ratios is\nlimited to a maximum of 16; any aspect ratios provided after the 16th are\nignored.",
@@ -288,19 +531,19 @@
           }
         }
       },
-      "id": "CropHintsParams"
+      "id": "CropHintsParams",
+      "description": "Parameters for crop hints annotation request.",
+      "type": "object"
     },
     "Block": {
       "description": "Logical element on the page.",
       "type": "object",
       "properties": {
         "property": {
-          "$ref": "TextProperty",
-          "description": "Additional information detected for the block."
+          "description": "Additional information detected for the block.",
+          "$ref": "TextProperty"
         },
         "blockType": {
-          "description": "Detected block type (text, image etc) for this block.",
-          "type": "string",
           "enumDescriptions": [
             "Unknown block type.",
             "Regular text block.",
@@ -316,11 +559,13 @@
             "PICTURE",
             "RULER",
             "BARCODE"
-          ]
+          ],
+          "description": "Detected block type (text, image etc) for this block.",
+          "type": "string"
         },
         "boundingBox": {
-          "$ref": "BoundingPoly",
-          "description": "The bounding box for the block.\nThe vertices are in the order of top-left, top-right, bottom-right,\nbottom-left. When a rotation of the bounding box is detected the rotation\nis represented as around the top-left corner as defined when the text is\nread in the 'natural' orientation.\nFor example:\n  * when the text is horizontal it might look like:\n     0----1\n     |    |\n     3----2\n  * when it's rotated 180 degrees around the top-left corner it becomes:\n     2----3\n     |    |\n     1----0\n  and the vertice order will still be (0, 1, 2, 3)."
+          "description": "The bounding box for the block.\nThe vertices are in the order of top-left, top-right, bottom-right,\nbottom-left. When a rotation of the bounding box is detected the rotation\nis represented as around the top-left corner as defined when the text is\nread in the 'natural' orientation.\nFor example:\n  * when the text is horizontal it might look like:\n     0----1\n     |    |\n     3----2\n  * when it's rotated 180 degrees around the top-left corner it becomes:\n     2----3\n     |    |\n     1----0\n  and the vertice order will still be (0, 1, 2, 3).",
+          "$ref": "BoundingPoly"
         },
         "paragraphs": {
           "description": "List of paragraphs in this block (if this blocks is of type text).",
@@ -332,63 +577,8 @@
       },
       "id": "Block"
     },
-    "Property": {
-      "description": "A `Property` consists of a user-supplied name/value pair.",
-      "type": "object",
-      "properties": {
-        "uint64Value": {
-          "description": "Value of numeric properties.",
-          "format": "uint64",
-          "type": "string"
-        },
-        "name": {
-          "description": "Name of the property.",
-          "type": "string"
-        },
-        "value": {
-          "description": "Value of the property.",
-          "type": "string"
-        }
-      },
-      "id": "Property"
-    },
-    "LocationInfo": {
-      "description": "Detected entity location information.",
-      "type": "object",
-      "properties": {
-        "latLng": {
-          "$ref": "LatLng",
-          "description": "lat/long location coordinates."
-        }
-      },
-      "id": "LocationInfo"
-    },
-    "ImageSource": {
-      "description": "External image source (Google Cloud Storage image location).",
-      "type": "object",
-      "properties": {
-        "gcsImageUri": {
-          "description": "NOTE: For new code `image_uri` below is preferred.\nGoogle Cloud Storage image URI, which must be in the following form:\n`gs://bucket_name/object_name` (for details, see\n[Google Cloud Storage Request\nURIs](https://cloud.google.com/storage/docs/reference-uris)).\nNOTE: Cloud Storage object versioning is not supported.",
-          "type": "string"
-        },
-        "imageUri": {
-          "description": "Image URI which supports:\n1) Google Cloud Storage image URI, which must be in the following form:\n`gs://bucket_name/object_name` (for details, see\n[Google Cloud Storage Request\nURIs](https://cloud.google.com/storage/docs/reference-uris)).\nNOTE: Cloud Storage object versioning is not supported.\n2) Publicly accessible image HTTP/HTTPS URL.\nThis is preferred over the legacy `gcs_image_uri` above. When both\n`gcs_image_uri` and `image_uri` are specified, `image_uri` takes\nprecedence.",
-          "type": "string"
-        }
-      },
-      "id": "ImageSource"
-    },
     "WebDetection": {
-      "description": "Relevant information for the image from the Internet.",
-      "type": "object",
       "properties": {
-        "pagesWithMatchingImages": {
-          "description": "Web pages containing the matching images from the Internet.",
-          "type": "array",
-          "items": {
-            "$ref": "WebPage"
-          }
-        },
         "partialMatchingImages": {
           "description": "Partial matching images from the Internet.\nThose images are similar enough to share some key-point features. For\nexample an original image will likely have partial matching for its crops.",
           "type": "array",
@@ -396,6 +586,13 @@
             "$ref": "WebImage"
           }
         },
+        "visuallySimilarImages": {
+          "description": "The visually similar image results.",
+          "type": "array",
+          "items": {
+            "$ref": "WebImage"
+          }
+        },
         "fullMatchingImages": {
           "description": "Fully matching images from the Internet.\nThey're definite neardups and most often a copy of the query image with\nmerely a size change.",
           "type": "array",
@@ -409,9 +606,18 @@
           "items": {
             "$ref": "WebEntity"
           }
+        },
+        "pagesWithMatchingImages": {
+          "description": "Web pages containing the matching images from the Internet.",
+          "type": "array",
+          "items": {
+            "$ref": "WebPage"
+          }
         }
       },
-      "id": "WebDetection"
+      "id": "WebDetection",
+      "description": "Relevant information for the image from the Internet.",
+      "type": "object"
     },
     "BatchAnnotateImagesResponse": {
       "description": "Response to a batch image annotation request.",
@@ -427,6 +633,52 @@
       },
       "id": "BatchAnnotateImagesResponse"
     },
+    "ImageSource": {
+      "properties": {
+        "gcsImageUri": {
+          "description": "NOTE: For new code `image_uri` below is preferred.\nGoogle Cloud Storage image URI, which must be in the following form:\n`gs://bucket_name/object_name` (for details, see\n[Google Cloud Storage Request\nURIs](https://cloud.google.com/storage/docs/reference-uris)).\nNOTE: Cloud Storage object versioning is not supported.",
+          "type": "string"
+        },
+        "imageUri": {
+          "description": "Image URI which supports:\n1) Google Cloud Storage image URI, which must be in the following form:\n`gs://bucket_name/object_name` (for details, see\n[Google Cloud Storage Request\nURIs](https://cloud.google.com/storage/docs/reference-uris)).\nNOTE: Cloud Storage object versioning is not supported.\n2) Publicly accessible image HTTP/HTTPS URL.\nThis is preferred over the legacy `gcs_image_uri` above. When both\n`gcs_image_uri` and `image_uri` are specified, `image_uri` takes\nprecedence.",
+          "type": "string"
+        }
+      },
+      "id": "ImageSource",
+      "description": "External image source (Google Cloud Storage image location).",
+      "type": "object"
+    },
+    "LocationInfo": {
+      "properties": {
+        "latLng": {
+          "$ref": "LatLng",
+          "description": "lat/long location coordinates."
+        }
+      },
+      "id": "LocationInfo",
+      "description": "Detected entity location information.",
+      "type": "object"
+    },
+    "Property": {
+      "properties": {
+        "uint64Value": {
+          "description": "Value of numeric properties.",
+          "format": "uint64",
+          "type": "string"
+        },
+        "name": {
+          "description": "Name of the property.",
+          "type": "string"
+        },
+        "value": {
+          "description": "Value of the property.",
+          "type": "string"
+        }
+      },
+      "id": "Property",
+      "description": "A `Property` consists of a user-supplied name/value pair.",
+      "type": "object"
+    },
     "Position": {
       "description": "A 3D position in the image, used primarily for Face detection landmarks.\nA valid Position must have both x and y coordinates.\nThe position coordinates are in the same scale as the original image.",
       "type": "object",
@@ -449,52 +701,45 @@
       },
       "id": "Position"
     },
-    "WebPage": {
-      "description": "Metadata for web pages.",
-      "type": "object",
-      "properties": {
-        "score": {
-          "description": "Overall relevancy score for the web page.\nNot normalized and not comparable across different image queries.",
-          "format": "float",
-          "type": "number"
-        },
-        "url": {
-          "description": "The result web page URL.",
-          "type": "string"
-        }
-      },
-      "id": "WebPage"
-    },
     "ColorInfo": {
-      "description": "Color information consists of RGB channels, score, and the fraction of\nthe image that the color occupies in the image.",
-      "type": "object",
       "properties": {
-        "score": {
-          "description": "Image-specific score for this color. Value in range [0, 1].",
-          "format": "float",
-          "type": "number"
-        },
         "pixelFraction": {
           "description": "The fraction of pixels the color occupies in the image.\nValue in range [0, 1].",
           "format": "float",
           "type": "number"
         },
         "color": {
-          "$ref": "Color",
-          "description": "RGB components of the color."
-        }
-      },
-      "id": "ColorInfo"
-    },
-    "EntityAnnotation": {
-      "description": "Set of detected entity features.",
-      "type": "object",
-      "properties": {
+          "description": "RGB components of the color.",
+          "$ref": "Color"
+        },
         "score": {
-          "description": "Overall score of the result. Range [0, 1].",
+          "description": "Image-specific score for this color. Value in range [0, 1].",
           "format": "float",
           "type": "number"
+        }
+      },
+      "id": "ColorInfo",
+      "description": "Color information consists of RGB channels, score, and the fraction of\nthe image that the color occupies in the image.",
+      "type": "object"
+    },
+    "WebPage": {
+      "properties": {
+        "url": {
+          "description": "The result web page URL.",
+          "type": "string"
         },
+        "score": {
+          "description": "Overall relevancy score for the web page.\nNot normalized and not comparable across different image queries.",
+          "format": "float",
+          "type": "number"
+        }
+      },
+      "id": "WebPage",
+      "description": "Metadata for web pages.",
+      "type": "object"
+    },
+    "EntityAnnotation": {
+      "properties": {
         "locations": {
           "description": "The location information for the detected entity. Multiple\n`LocationInfo` elements can be present because one location may\nindicate the location of the scene in the image, and another location\nmay indicate the location of the place where the image was taken.\nLocation information is usually present for landmarks.",
           "type": "array",
@@ -511,14 +756,14 @@
           "format": "float",
           "type": "number"
         },
-        "boundingPoly": {
-          "$ref": "BoundingPoly",
-          "description": "Image region to which this entity belongs. Currently not produced\nfor `LABEL_DETECTION` features. For `TEXT_DETECTION` (OCR), `boundingPoly`s\nare produced for the entire text detected in an image region, followed by\n`boundingPoly`s for each word within the detected text."
-        },
         "locale": {
           "description": "The language code for the locale in which the entity textual\n`description` is expressed.",
           "type": "string"
         },
+        "boundingPoly": {
+          "$ref": "BoundingPoly",
+          "description": "Image region to which this entity belongs. Currently not produced\nfor `LABEL_DETECTION` features. For `TEXT_DETECTION` (OCR), `boundingPoly`s\nare produced for the entire text detected in an image region, followed by\n`boundingPoly`s for each word within the detected text."
+        },
         "description": {
           "description": "Entity textual description, expressed in its `locale` language.",
           "type": "string"
@@ -534,13 +779,18 @@
           "items": {
             "$ref": "Property"
           }
+        },
+        "score": {
+          "description": "Overall score of the result. Range [0, 1].",
+          "format": "float",
+          "type": "number"
         }
       },
-      "id": "EntityAnnotation"
+      "id": "EntityAnnotation",
+      "description": "Set of detected entity features.",
+      "type": "object"
     },
     "CropHint": {
-      "description": "Single crop hint that is used to generate a new crop when serving an image.",
-      "type": "object",
       "properties": {
         "confidence": {
           "description": "Confidence of this being a salient region.  Range [0, 1].",
@@ -553,58 +803,19 @@
           "type": "number"
         },
         "boundingPoly": {
-          "description": "The bounding polygon for the crop region. The coordinates of the bounding\nbox are in the original image's scale, as returned in `ImageParams`.",
-          "$ref": "BoundingPoly"
+          "$ref": "BoundingPoly",
+          "description": "The bounding polygon for the crop region. The coordinates of the bounding\nbox are in the original image's scale, as returned in `ImageParams`."
         }
       },
-      "id": "CropHint"
+      "id": "CropHint",
+      "description": "Single crop hint that is used to generate a new crop when serving an image.",
+      "type": "object"
     },
     "Landmark": {
       "description": "A face-specific landmark (for example, a face feature).\nLandmark positions may fall outside the bounds of the image\nif the face is near one or more edges of the image.\nTherefore it is NOT guaranteed that `0 \u003c= x \u003c width` or\n`0 \u003c= y \u003c height`.",
       "type": "object",
       "properties": {
-        "position": {
-          "$ref": "Position",
-          "description": "Face landmark position."
-        },
         "type": {
-          "enumDescriptions": [
-            "Unknown face landmark detected. Should not be filled.",
-            "Left eye.",
-            "Right eye.",
-            "Left of left eyebrow.",
-            "Right of left eyebrow.",
-            "Left of right eyebrow.",
-            "Right of right eyebrow.",
-            "Midpoint between eyes.",
-            "Nose tip.",
-            "Upper lip.",
-            "Lower lip.",
-            "Mouth left.",
-            "Mouth right.",
-            "Mouth center.",
-            "Nose, bottom right.",
-            "Nose, bottom left.",
-            "Nose, bottom center.",
-            "Left eye, top boundary.",
-            "Left eye, right corner.",
-            "Left eye, bottom boundary.",
-            "Left eye, left corner.",
-            "Right eye, top boundary.",
-            "Right eye, right corner.",
-            "Right eye, bottom boundary.",
-            "Right eye, left corner.",
-            "Left eyebrow, upper midpoint.",
-            "Right eyebrow, upper midpoint.",
-            "Left ear tragion.",
-            "Right ear tragion.",
-            "Left eye pupil.",
-            "Right eye pupil.",
-            "Forehead glabella.",
-            "Chin gnathion.",
-            "Chin left gonion.",
-            "Chin right gonion."
-          ],
           "enum": [
             "UNKNOWN_LANDMARK",
             "LEFT_EYE",
@@ -643,7 +854,48 @@
             "CHIN_RIGHT_GONION"
           ],
           "description": "Face landmark type.",
-          "type": "string"
+          "type": "string",
+          "enumDescriptions": [
+            "Unknown face landmark detected. Should not be filled.",
+            "Left eye.",
+            "Right eye.",
+            "Left of left eyebrow.",
+            "Right of left eyebrow.",
+            "Left of right eyebrow.",
+            "Right of right eyebrow.",
+            "Midpoint between eyes.",
+            "Nose tip.",
+            "Upper lip.",
+            "Lower lip.",
+            "Mouth left.",
+            "Mouth right.",
+            "Mouth center.",
+            "Nose, bottom right.",
+            "Nose, bottom left.",
+            "Nose, bottom center.",
+            "Left eye, top boundary.",
+            "Left eye, right corner.",
+            "Left eye, bottom boundary.",
+            "Left eye, left corner.",
+            "Right eye, top boundary.",
+            "Right eye, right corner.",
+            "Right eye, bottom boundary.",
+            "Right eye, left corner.",
+            "Left eyebrow, upper midpoint.",
+            "Right eyebrow, upper midpoint.",
+            "Left ear tragion.",
+            "Right ear tragion.",
+            "Left eye pupil.",
+            "Right eye pupil.",
+            "Forehead glabella.",
+            "Chin gnathion.",
+            "Chin left gonion.",
+            "Chin right gonion."
+          ]
+        },
+        "position": {
+          "description": "Face landmark position.",
+          "$ref": "Position"
         }
       },
       "id": "Landmark"
@@ -665,13 +917,7 @@
       "id": "WebImage"
     },
     "Word": {
-      "description": "A word representation.",
-      "type": "object",
       "properties": {
-        "property": {
-          "$ref": "TextProperty",
-          "description": "Additional information detected for the word."
-        },
         "boundingBox": {
           "description": "The bounding box for the word.\nThe vertices are in the order of top-left, top-right, bottom-right,\nbottom-left. When a rotation of the bounding box is detected the rotation\nis represented as around the top-left corner as defined when the text is\nread in the 'natural' orientation.\nFor example:\n  * when the text is horizontal it might look like:\n     0----1\n     |    |\n     3----2\n  * when it's rotated 180 degrees around the top-left corner it becomes:\n     2----3\n     |    |\n     1----0\n  and the vertice order will still be (0, 1, 2, 3).",
           "$ref": "BoundingPoly"
@@ -682,13 +928,39 @@
           "items": {
             "$ref": "Symbol"
           }
+        },
+        "property": {
+          "description": "Additional information detected for the word.",
+          "$ref": "TextProperty"
         }
       },
-      "id": "Word"
+      "id": "Word",
+      "description": "A word representation.",
+      "type": "object"
+    },
+    "Paragraph": {
+      "properties": {
+        "boundingBox": {
+          "$ref": "BoundingPoly",
+          "description": "The bounding box for the paragraph.\nThe vertices are in the order of top-left, top-right, bottom-right,\nbottom-left. When a rotation of the bounding box is detected the rotation\nis represented as around the top-left corner as defined when the text is\nread in the 'natural' orientation.\nFor example:\n  * when the text is horizontal it might look like:\n     0----1\n     |    |\n     3----2\n  * when it's rotated 180 degrees around the top-left corner it becomes:\n     2----3\n     |    |\n     1----0\n  and the vertice order will still be (0, 1, 2, 3)."
+        },
+        "words": {
+          "description": "List of words in this paragraph.",
+          "type": "array",
+          "items": {
+            "$ref": "Word"
+          }
+        },
+        "property": {
+          "description": "Additional information detected for the paragraph.",
+          "$ref": "TextProperty"
+        }
+      },
+      "id": "Paragraph",
+      "description": "Structural unit of text representing a number of words in certain order.",
+      "type": "object"
     },
     "Image": {
-      "description": "Client image to perform Google Cloud Vision API tasks over.",
-      "type": "object",
       "properties": {
         "content": {
           "description": "Image content, represented as a stream of bytes.\nNote: as with all `bytes` fields, protobuffers use a pure binary\nrepresentation, whereas JSON representations use base64.",
@@ -700,195 +972,21 @@
           "description": "Google Cloud Storage image location. If both `content` and `source`\nare provided for an image, `content` takes precedence and is\nused to perform the image annotation request."
         }
       },
-      "id": "Image"
-    },
-    "Paragraph": {
-      "description": "Structural unit of text representing a number of words in certain order.",
-      "type": "object",
-      "properties": {
-        "property": {
-          "description": "Additional information detected for the paragraph.",
-          "$ref": "TextProperty"
-        },
-        "boundingBox": {
-          "$ref": "BoundingPoly",
-          "description": "The bounding box for the paragraph.\nThe vertices are in the order of top-left, top-right, bottom-right,\nbottom-left. When a rotation of the bounding box is detected the rotation\nis represented as around the top-left corner as defined when the text is\nread in the 'natural' orientation.\nFor example:\n  * when the text is horizontal it might look like:\n     0----1\n     |    |\n     3----2\n  * when it's rotated 180 degrees around the top-left corner it becomes:\n     2----3\n     |    |\n     1----0\n  and the vertice order will still be (0, 1, 2, 3)."
-        },
-        "words": {
-          "description": "List of words in this paragraph.",
-          "type": "array",
-          "items": {
-            "$ref": "Word"
-          }
-        }
-      },
-      "id": "Paragraph"
+      "id": "Image",
+      "description": "Client image to perform Google Cloud Vision API tasks over.",
+      "type": "object"
     },
     "FaceAnnotation": {
-      "description": "A face annotation object contains the results of face detection.",
-      "type": "object",
       "properties": {
-        "tiltAngle": {
-          "description": "Pitch angle, which indicates the upwards/downwards angle that the face is\npointing relative to the image's horizontal plane. Range [-180,180].",
-          "format": "float",
-          "type": "number"
-        },
-        "fdBoundingPoly": {
-          "$ref": "BoundingPoly",
-          "description": "The `fd_bounding_poly` bounding polygon is tighter than the\n`boundingPoly`, and encloses only the skin part of the face. Typically, it\nis used to eliminate the face from any image analysis that detects the\n\"amount of skin\" visible in an image. It is not based on the\nlandmarker results, only on the initial face detection, hence\nthe \u003ccode\u003efd\u003c/code\u003e (face detection) prefix."
-        },
-        "surpriseLikelihood": {
-          "description": "Surprise likelihood.",
-          "type": "string",
-          "enumDescriptions": [
-            "Unknown likelihood.",
-            "It is very unlikely that the image belongs to the specified vertical.",
-            "It is unlikely that the image belongs to the specified vertical.",
-            "It is possible that the image belongs to the specified vertical.",
-            "It is likely that the image belongs to the specified vertical.",
-            "It is very likely that the image belongs to the specified vertical."
-          ],
-          "enum": [
-            "UNKNOWN",
-            "VERY_UNLIKELY",
-            "UNLIKELY",
-            "POSSIBLE",
-            "LIKELY",
-            "VERY_LIKELY"
-          ]
-        },
-        "landmarks": {
-          "description": "Detected face landmarks.",
-          "type": "array",
-          "items": {
-            "$ref": "Landmark"
-          }
-        },
-        "angerLikelihood": {
-          "description": "Anger likelihood.",
-          "type": "string",
-          "enumDescriptions": [
-            "Unknown likelihood.",
-            "It is very unlikely that the image belongs to the specified vertical.",
-            "It is unlikely that the image belongs to the specified vertical.",
-            "It is possible that the image belongs to the specified vertical.",
-            "It is likely that the image belongs to the specified vertical.",
-            "It is very likely that the image belongs to the specified vertical."
-          ],
-          "enum": [
-            "UNKNOWN",
-            "VERY_UNLIKELY",
-            "UNLIKELY",
-            "POSSIBLE",
-            "LIKELY",
-            "VERY_LIKELY"
-          ]
-        },
-        "joyLikelihood": {
-          "description": "Joy likelihood.",
-          "type": "string",
-          "enumDescriptions": [
-            "Unknown likelihood.",
-            "It is very unlikely that the image belongs to the specified vertical.",
-            "It is unlikely that the image belongs to the specified vertical.",
-            "It is possible that the image belongs to the specified vertical.",
-            "It is likely that the image belongs to the specified vertical.",
-            "It is very likely that the image belongs to the specified vertical."
-          ],
-          "enum": [
-            "UNKNOWN",
-            "VERY_UNLIKELY",
-            "UNLIKELY",
-            "POSSIBLE",
-            "LIKELY",
-            "VERY_LIKELY"
-          ]
-        },
-        "landmarkingConfidence": {
-          "description": "Face landmarking confidence. Range [0, 1].",
-          "format": "float",
-          "type": "number"
-        },
-        "underExposedLikelihood": {
-          "description": "Under-exposed likelihood.",
-          "type": "string",
-          "enumDescriptions": [
-            "Unknown likelihood.",
-            "It is very unlikely that the image belongs to the specified vertical.",
-            "It is unlikely that the image belongs to the specified vertical.",
-            "It is possible that the image belongs to the specified vertical.",
-            "It is likely that the image belongs to the specified vertical.",
-            "It is very likely that the image belongs to the specified vertical."
-          ],
-          "enum": [
-            "UNKNOWN",
-            "VERY_UNLIKELY",
-            "UNLIKELY",
-            "POSSIBLE",
-            "LIKELY",
-            "VERY_LIKELY"
-          ]
-        },
-        "panAngle": {
-          "description": "Yaw angle, which indicates the leftward/rightward angle that the face is\npointing relative to the vertical plane perpendicular to the image. Range\n[-180,180].",
-          "format": "float",
-          "type": "number"
-        },
-        "detectionConfidence": {
-          "description": "Detection confidence. Range [0, 1].",
-          "format": "float",
-          "type": "number"
-        },
-        "blurredLikelihood": {
-          "enumDescriptions": [
-            "Unknown likelihood.",
-            "It is very unlikely that the image belongs to the specified vertical.",
-            "It is unlikely that the image belongs to the specified vertical.",
-            "It is possible that the image belongs to the specified vertical.",
-            "It is likely that the image belongs to the specified vertical.",
-            "It is very likely that the image belongs to the specified vertical."
-          ],
-          "enum": [
-            "UNKNOWN",
-            "VERY_UNLIKELY",
-            "UNLIKELY",
-            "POSSIBLE",
-            "LIKELY",
-            "VERY_LIKELY"
-          ],
-          "description": "Blurred likelihood.",
-          "type": "string"
-        },
-        "headwearLikelihood": {
-          "description": "Headwear likelihood.",
-          "type": "string",
-          "enumDescriptions": [
-            "Unknown likelihood.",
-            "It is very unlikely that the image belongs to the specified vertical.",
-            "It is unlikely that the image belongs to the specified vertical.",
-            "It is possible that the image belongs to the specified vertical.",
-            "It is likely that the image belongs to the specified vertical.",
-            "It is very likely that the image belongs to the specified vertical."
-          ],
-          "enum": [
-            "UNKNOWN",
-            "VERY_UNLIKELY",
-            "UNLIKELY",
-            "POSSIBLE",
-            "LIKELY",
-            "VERY_LIKELY"
-          ]
-        },
-        "boundingPoly": {
-          "description": "The bounding polygon around the face. The coordinates of the bounding box\nare in the original image's scale, as returned in `ImageParams`.\nThe bounding box is computed to \"frame\" the face in accordance with human\nexpectations. It is based on the landmarker results.\nNote that one or more x and/or y coordinates may not be generated in the\n`BoundingPoly` (the polygon will be unbounded) if only a partial face\nappears in the image to be annotated.",
-          "$ref": "BoundingPoly"
-        },
-        "rollAngle": {
-          "description": "Roll angle, which indicates the amount of clockwise/anti-clockwise rotation\nof the face relative to the image vertical about the axis perpendicular to\nthe face. Range [-180,180].",
-          "format": "float",
-          "type": "number"
-        },
         "sorrowLikelihood": {
+          "enum": [
+            "UNKNOWN",
+            "VERY_UNLIKELY",
+            "UNLIKELY",
+            "POSSIBLE",
+            "LIKELY",
+            "VERY_LIKELY"
+          ],
           "description": "Sorrow likelihood.",
           "type": "string",
           "enumDescriptions": [
@@ -898,6 +996,32 @@
             "It is possible that the image belongs to the specified vertical.",
             "It is likely that the image belongs to the specified vertical.",
             "It is very likely that the image belongs to the specified vertical."
+          ]
+        },
+        "tiltAngle": {
+          "description": "Pitch angle, which indicates the upwards/downwards angle that the face is\npointing relative to the image's horizontal plane. Range [-180,180].",
+          "format": "float",
+          "type": "number"
+        },
+        "fdBoundingPoly": {
+          "$ref": "BoundingPoly",
+          "description": "The `fd_bounding_poly` bounding polygon is tighter than the\n`boundingPoly`, and encloses only the skin part of the face. Typically, it\nis used to eliminate the face from any image analysis that detects the\n\"amount of skin\" visible in an image. It is not based on the\nlandmarker results, only on the initial face detection, hence\nthe \u003ccode\u003efd\u003c/code\u003e (face detection) prefix."
+        },
+        "landmarks": {
+          "description": "Detected face landmarks.",
+          "type": "array",
+          "items": {
+            "$ref": "Landmark"
+          }
+        },
+        "surpriseLikelihood": {
+          "enumDescriptions": [
+            "Unknown likelihood.",
+            "It is very unlikely that the image belongs to the specified vertical.",
+            "It is unlikely that the image belongs to the specified vertical.",
+            "It is possible that the image belongs to the specified vertical.",
+            "It is likely that the image belongs to the specified vertical.",
+            "It is very likely that the image belongs to the specified vertical."
           ],
           "enum": [
             "UNKNOWN",
@@ -906,10 +1030,138 @@
             "POSSIBLE",
             "LIKELY",
             "VERY_LIKELY"
+          ],
+          "description": "Surprise likelihood.",
+          "type": "string"
+        },
+        "angerLikelihood": {
+          "enum": [
+            "UNKNOWN",
+            "VERY_UNLIKELY",
+            "UNLIKELY",
+            "POSSIBLE",
+            "LIKELY",
+            "VERY_LIKELY"
+          ],
+          "description": "Anger likelihood.",
+          "type": "string",
+          "enumDescriptions": [
+            "Unknown likelihood.",
+            "It is very unlikely that the image belongs to the specified vertical.",
+            "It is unlikely that the image belongs to the specified vertical.",
+            "It is possible that the image belongs to the specified vertical.",
+            "It is likely that the image belongs to the specified vertical.",
+            "It is very likely that the image belongs to the specified vertical."
           ]
+        },
+        "joyLikelihood": {
+          "enum": [
+            "UNKNOWN",
+            "VERY_UNLIKELY",
+            "UNLIKELY",
+            "POSSIBLE",
+            "LIKELY",
+            "VERY_LIKELY"
+          ],
+          "description": "Joy likelihood.",
+          "type": "string",
+          "enumDescriptions": [
+            "Unknown likelihood.",
+            "It is very unlikely that the image belongs to the specified vertical.",
+            "It is unlikely that the image belongs to the specified vertical.",
+            "It is possible that the image belongs to the specified vertical.",
+            "It is likely that the image belongs to the specified vertical.",
+            "It is very likely that the image belongs to the specified vertical."
+          ]
+        },
+        "landmarkingConfidence": {
+          "description": "Face landmarking confidence. Range [0, 1].",
+          "format": "float",
+          "type": "number"
+        },
+        "detectionConfidence": {
+          "description": "Detection confidence. Range [0, 1].",
+          "format": "float",
+          "type": "number"
+        },
+        "panAngle": {
+          "description": "Yaw angle, which indicates the leftward/rightward angle that the face is\npointing relative to the vertical plane perpendicular to the image. Range\n[-180,180].",
+          "format": "float",
+          "type": "number"
+        },
+        "underExposedLikelihood": {
+          "enum": [
+            "UNKNOWN",
+            "VERY_UNLIKELY",
+            "UNLIKELY",
+            "POSSIBLE",
+            "LIKELY",
+            "VERY_LIKELY"
+          ],
+          "description": "Under-exposed likelihood.",
+          "type": "string",
+          "enumDescriptions": [
+            "Unknown likelihood.",
+            "It is very unlikely that the image belongs to the specified vertical.",
+            "It is unlikely that the image belongs to the specified vertical.",
+            "It is possible that the image belongs to the specified vertical.",
+            "It is likely that the image belongs to the specified vertical.",
+            "It is very likely that the image belongs to the specified vertical."
+          ]
+        },
+        "blurredLikelihood": {
+          "enum": [
+            "UNKNOWN",
+            "VERY_UNLIKELY",
+            "UNLIKELY",
+            "POSSIBLE",
+            "LIKELY",
+            "VERY_LIKELY"
+          ],
+          "description": "Blurred likelihood.",
+          "type": "string",
+          "enumDescriptions": [
+            "Unknown likelihood.",
+            "It is very unlikely that the image belongs to the specified vertical.",
+            "It is unlikely that the image belongs to the specified vertical.",
+            "It is possible that the image belongs to the specified vertical.",
+            "It is likely that the image belongs to the specified vertical.",
+            "It is very likely that the image belongs to the specified vertical."
+          ]
+        },
+        "headwearLikelihood": {
+          "enumDescriptions": [
+            "Unknown likelihood.",
+            "It is very unlikely that the image belongs to the specified vertical.",
+            "It is unlikely that the image belongs to the specified vertical.",
+            "It is possible that the image belongs to the specified vertical.",
+            "It is likely that the image belongs to the specified vertical.",
+            "It is very likely that the image belongs to the specified vertical."
+          ],
+          "enum": [
+            "UNKNOWN",
+            "VERY_UNLIKELY",
+            "UNLIKELY",
+            "POSSIBLE",
+            "LIKELY",
+            "VERY_LIKELY"
+          ],
+          "description": "Headwear likelihood.",
+          "type": "string"
+        },
+        "boundingPoly": {
+          "description": "The bounding polygon around the face. The coordinates of the bounding box\nare in the original image's scale, as returned in `ImageParams`.\nThe bounding box is computed to \"frame\" the face in accordance with human\nexpectations. It is based on the landmarker results.\nNote that one or more x and/or y coordinates may not be generated in the\n`BoundingPoly` (the polygon will be unbounded) if only a partial face\nappears in the image to be annotated.",
+          "$ref": "BoundingPoly"
+        },
+        "rollAngle": {
+          "description": "Roll angle, which indicates the amount of clockwise/anti-clockwise rotation\nof the face relative to the image vertical about the axis perpendicular to\nthe face. Range [-180,180].",
+          "format": "float",
+          "type": "number"
         }
       },
-      "id": "FaceAnnotation"
+      "id": "FaceAnnotation",
+      "description": "A face annotation object contains the results of face detection.",
+      "type": "object"
     },
     "BatchAnnotateImagesRequest": {
       "description": "Multiple image annotation requests are batched into a single service call.",
@@ -955,376 +1207,13 @@
         }
       },
       "id": "DetectedBreak"
-    },
-    "ImageContext": {
-      "description": "Image context and/or feature-specific parameters.",
-      "type": "object",
-      "properties": {
-        "cropHintsParams": {
-          "$ref": "CropHintsParams",
-          "description": "Parameters for crop hints annotation request."
-        },
-        "languageHints": {
-          "description": "List of languages to use for TEXT_DETECTION. In most cases, an empty value\nyields the best results since it enables automatic language detection. For\nlanguages based on the Latin alphabet, setting `language_hints` is not\nneeded. In rare cases, when the language of the text in the image is known,\nsetting a hint will help get better results (although it will be a\nsignificant hindrance if the hint is wrong). Text detection returns an\nerror if one or more of the specified languages is not one of the\n[supported languages](/vision/docs/languages).",
-          "type": "array",
-          "items": {
-            "type": "string"
-          }
-        },
-        "latLongRect": {
-          "description": "lat/long rectangle that specifies the location of the image.",
-          "$ref": "LatLongRect"
-        }
-      },
-      "id": "ImageContext"
-    },
-    "Page": {
-      "description": "Detected page from OCR.",
-      "type": "object",
-      "properties": {
-        "width": {
-          "description": "Page width in pixels.",
-          "format": "int32",
-          "type": "integer"
-        },
-        "blocks": {
-          "description": "List of blocks of text, images etc on this page.",
-          "type": "array",
-          "items": {
-            "$ref": "Block"
-          }
-        },
-        "property": {
-          "$ref": "TextProperty",
-          "description": "Additional information detected on the page."
-        },
-        "height": {
-          "description": "Page height in pixels.",
-          "format": "int32",
-          "type": "integer"
-        }
-      },
-      "id": "Page"
-    },
-    "AnnotateImageRequest": {
-      "description": "Request for performing Google Cloud Vision API tasks over a user-provided\nimage, with user-requested features.",
-      "type": "object",
-      "properties": {
-        "image": {
-          "description": "The image to be processed.",
-          "$ref": "Image"
-        },
-        "features": {
-          "description": "Requested features.",
-          "type": "array",
-          "items": {
-            "$ref": "Feature"
-          }
-        },
-        "imageContext": {
-          "description": "Additional context that may accompany the image.",
-          "$ref": "ImageContext"
-        }
-      },
-      "id": "AnnotateImageRequest"
-    },
-    "Status": {
-      "description": "The `Status` type defines a logical error model that is suitable for different\nprogramming environments, including REST APIs and RPC APIs. It is used by\n[gRPC](https://github.com/grpc). The error model is designed to be:\n\n- Simple to use and understand for most users\n- Flexible enough to meet unexpected needs\n\n# Overview\n\nThe `Status` message contains three pieces of data: error code, error message,\nand error details. The error code should be an enum value of\ngoogle.rpc.Code, but it may accept additional error codes if needed.  The\nerror message should be a developer-facing English message that helps\ndevelopers *understand* and *resolve* the error. If a localized user-facing\nerror message is needed, put the localized message in the error details or\nlocalize it in the client. The optional error details may contain arbitrary\ninformation about the error. There is a predefined set of error detail types\nin the package `google.rpc` which can be used for common error conditions.\n\n# Language mapping\n\nThe `Status` message is the logical representation of the error model, but it\nis not necessarily the actual wire format. When the `Status` message is\nexposed in different client libraries and different wire protocols, it can be\nmapped differently. For example, it will likely be mapped to some exceptions\nin Java, but more likely mapped to some error codes in C.\n\n# Other uses\n\nThe error model and the `Status` message can be used in a variety of\nenvironments, either with or without APIs, to provide a\nconsistent developer experience across different environments.\n\nExample uses of this error model include:\n\n- Partial errors. If a service needs to return partial errors to the client,\n    it may embed the `Status` in the normal response to indicate the partial\n    errors.\n\n- Workflow errors. A typical workflow has multiple steps. Each step may\n    have a `Status` message for error reporting purpose.\n\n- Batch operations. If a client uses batch request and batch response, the\n    `Status` message should be used directly inside batch response, one for\n    each error sub-response.\n\n- Asynchronous operations. If an API call embeds asynchronous operation\n    results in its response, the status of those operations should be\n    represented directly using the `Status` message.\n\n- Logging. If some API errors are stored in logs, the message `Status` could\n    be used directly after any stripping needed for security/privacy reasons.",
-      "type": "object",
-      "properties": {
-        "details": {
-          "description": "A list of messages that carry the error details.  There will be a\ncommon 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"
-            },
-            "type": "object"
-          }
-        },
-        "code": {
-          "description": "The status code, which should be an enum value of google.rpc.Code.",
-          "format": "int32",
-          "type": "integer"
-        },
-        "message": {
-          "description": "A developer-facing error message, which should be in English. Any\nuser-facing error message should be localized and sent in the\ngoogle.rpc.Status.details field, or localized by the client.",
-          "type": "string"
-        }
-      },
-      "id": "Status"
-    },
-    "Symbol": {
-      "description": "A single symbol representation.",
-      "type": "object",
-      "properties": {
-        "text": {
-          "description": "The actual UTF-8 representation of the symbol.",
-          "type": "string"
-        },
-        "property": {
-          "description": "Additional information detected for the symbol.",
-          "$ref": "TextProperty"
-        },
-        "boundingBox": {
-          "$ref": "BoundingPoly",
-          "description": "The bounding box for the symbol.\nThe vertices are in the order of top-left, top-right, bottom-right,\nbottom-left. When a rotation of the bounding box is detected the rotation\nis represented as around the top-left corner as defined when the text is\nread in the 'natural' orientation.\nFor example:\n  * when the text is horizontal it might look like:\n     0----1\n     |    |\n     3----2\n  * when it's rotated 180 degrees around the top-left corner it becomes:\n     2----3\n     |    |\n     1----0\n  and the vertice order will still be (0, 1, 2, 3)."
-        }
-      },
-      "id": "Symbol"
-    },
-    "LatLongRect": {
-      "description": "Rectangle determined by min and max `LatLng` pairs.",
-      "type": "object",
-      "properties": {
-        "minLatLng": {
-          "description": "Min lat/long pair.",
-          "$ref": "LatLng"
-        },
-        "maxLatLng": {
-          "description": "Max lat/long pair.",
-          "$ref": "LatLng"
-        }
-      },
-      "id": "LatLongRect"
-    },
-    "CropHintsAnnotation": {
-      "description": "Set of crop hints that are used to generate new crops when serving images.",
-      "type": "object",
-      "properties": {
-        "cropHints": {
-          "description": "Crop hint results.",
-          "type": "array",
-          "items": {
-            "$ref": "CropHint"
-          }
-        }
-      },
-      "id": "CropHintsAnnotation"
-    },
-    "LatLng": {
-      "description": "An object representing a latitude/longitude pair. This is expressed as a pair\nof doubles representing degrees latitude and degrees longitude. Unless\nspecified otherwise, this must conform to the\n\u003ca href=\"http://www.unoosa.org/pdf/icg/2012/template/WGS_84.pdf\"\u003eWGS84\nstandard\u003c/a\u003e. Values must be within normalized ranges.\n\nExample of normalization code in Python:\n\n    def NormalizeLongitude(longitude):\n      \"\"\"Wraps decimal degrees longitude to [-180.0, 180.0].\"\"\"\n      q, r = divmod(longitude, 360.0)\n      if r \u003e 180.0 or (r == 180.0 and q \u003c= -1.0):\n        return r - 360.0\n      return r\n\n    def NormalizeLatLng(latitude, longitude):\n      \"\"\"Wraps decimal degrees latitude and longitude to\n      [-90.0, 90.0] and [-180.0, 180.0], respectively.\"\"\"\n      r = latitude % 360.0\n      if r \u003c= 90.0:\n        return r, NormalizeLongitude(longitude)\n      elif r \u003e= 270.0:\n        return r - 360, NormalizeLongitude(longitude)\n      else:\n        return 180 - r, NormalizeLongitude(longitude + 180.0)\n\n    assert 180.0 == NormalizeLongitude(180.0)\n    assert -180.0 == NormalizeLongitude(-180.0)\n    assert -179.0 == NormalizeLongitude(181.0)\n    assert (0.0, 0.0) == NormalizeLatLng(360.0, 0.0)\n    assert (0.0, 0.0) == NormalizeLatLng(-360.0, 0.0)\n    assert (85.0, 180.0) == NormalizeLatLng(95.0, 0.0)\n    assert (-85.0, -170.0) == NormalizeLatLng(-95.0, 10.0)\n    assert (90.0, 10.0) == NormalizeLatLng(90.0, 10.0)\n    assert (-90.0, -10.0) == NormalizeLatLng(-90.0, -10.0)\n    assert (0.0, -170.0) == NormalizeLatLng(-180.0, 10.0)\n    assert (0.0, -170.0) == NormalizeLatLng(180.0, 10.0)\n    assert (-90.0, 10.0) == NormalizeLatLng(270.0, 10.0)\n    assert (90.0, 10.0) == NormalizeLatLng(-270.0, 10.0)\n\nThe code in logs/storage/validator/logs_validator_traits.cc treats this type\nas if it were annotated as ST_LOCATION.",
-      "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].",
-          "format": "double",
-          "type": "number"
-        }
-      },
-      "id": "LatLng"
-    },
-    "Color": {
-      "description": "Represents a color in the RGBA color space. This representation is designed\nfor simplicity of conversion to/from color representations in various\nlanguages over compactness; for example, the fields of this representation\ncan be trivially provided to the constructor of \"java.awt.Color\" in Java; it\ncan also be trivially provided to UIColor's \"+colorWithRed:green:blue:alpha\"\nmethod in iOS; and, with just a little work, it can be easily formatted into\na CSS \"rgba()\" string in JavaScript, as well. Here are some examples:\n\nExample (Java):\n\n     import com.google.type.Color;\n\n     // ...\n     public static java.awt.Color fromProto(Color protocolor) {\n       float alpha = protocolor.hasAlpha()\n           ? protocolor.getAlpha().getValue()\n           : 1.0;\n\n       return new java.awt.Color(\n           protocolor.getRed(),\n           protocolor.getGreen(),\n           protocolor.getBlue(),\n           alpha);\n     }\n\n     public static Color toProto(java.awt.Color color) {\n       float red = (float) color.getRed();\n       float green = (float) color.getGreen();\n       float blue = (float) color.getBlue();\n       float denominator = 255.0;\n       Color.Builder resultBuilder =\n           Color\n               .newBuilder()\n               .setRed(red / denominator)\n               .setGreen(green / denominator)\n               .setBlue(blue / denominator);\n       int alpha = color.getAlpha();\n       if (alpha != 255) {\n         result.setAlpha(\n             FloatValue\n                 .newBuilder()\n                 .setValue(((float) alpha) / denominator)\n                 .build());\n       }\n       return resultBuilder.build();\n     }\n     // ...\n\nExample (iOS / Obj-C):\n\n     // ...\n     static UIColor* fromProto(Color* protocolor) {\n        float red = [protocolor red];\n        float green = [protocolor green];\n        float blue = [protocolor blue];\n        FloatValue* alpha_wrapper = [protocolor alpha];\n        float alpha = 1.0;\n        if (alpha_wrapper != nil) {\n          alpha = [alpha_wrapper value];\n        }\n        return [UIColor colorWithRed:red green:green blue:blue alpha:alpha];\n     }\n\n     static Color* toProto(UIColor* color) {\n         CGFloat red, green, blue, alpha;\n         if (![color getRed:&red green:&green blue:&blue alpha:&alpha]) {\n           return nil;\n         }\n         Color* result = [Color alloc] init];\n         [result setRed:red];\n         [result setGreen:green];\n         [result setBlue:blue];\n         if (alpha \u003c= 0.9999) {\n           [result setAlpha:floatWrapperWithValue(alpha)];\n         }\n         [result autorelease];\n         return result;\n    }\n    // ...\n\n Example (JavaScript):\n\n    // ...\n\n    var protoToCssColor = function(rgb_color) {\n       var redFrac = rgb_color.red || 0.0;\n       var greenFrac = rgb_color.green || 0.0;\n       var blueFrac = rgb_color.blue || 0.0;\n       var red = Math.floor(redFrac * 255);\n       var green = Math.floor(greenFrac * 255);\n       var blue = Math.floor(blueFrac * 255);\n\n       if (!('alpha' in rgb_color)) {\n          return rgbToCssColor_(red, green, blue);\n       }\n\n       var alphaFrac = rgb_color.alpha.value || 0.0;\n       var rgbParams = [red, green, blue].join(',');\n       return ['rgba(', rgbParams, ',', alphaFrac, ')'].join('');\n    };\n\n    var rgbToCssColor_ = function(red, green, blue) {\n      var rgbNumber = new Number((red \u003c\u003c 16) | (green \u003c\u003c 8) | blue);\n      var hexString = rgbNumber.toString(16);\n      var missingZeros = 6 - hexString.length;\n      var resultBuilder = ['#'];\n      for (var i = 0; i \u003c missingZeros; i++) {\n         resultBuilder.push('0');\n      }\n      resultBuilder.push(hexString);\n      return resultBuilder.join('');\n    };\n\n    // ...",
-      "type": "object",
-      "properties": {
-        "red": {
-          "description": "The amount of red 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"
-        },
-        "blue": {
-          "description": "The amount of blue in the color as a value in the interval [0, 1].",
-          "format": "float",
-          "type": "number"
-        },
-        "alpha": {
-          "description": "The fraction of this color that should be applied to the pixel. That is,\nthe final pixel color is defined by the equation:\n\n  pixel color = alpha * (this color) + (1.0 - alpha) * (background color)\n\nThis means that a value of 1.0 corresponds to a solid color, whereas\na value of 0.0 corresponds to a completely transparent color. This\nuses a wrapper message rather than a simple float scalar so that it is\npossible to distinguish between a default value and the value being unset.\nIf omitted, this color object is to be rendered as a solid color\n(as if the alpha value had been explicitly given with a value of 1.0).",
-          "format": "float",
-          "type": "number"
-        }
-      },
-      "id": "Color"
-    },
-    "ImageProperties": {
-      "description": "Stores image properties, such as dominant colors.",
-      "type": "object",
-      "properties": {
-        "dominantColors": {
-          "$ref": "DominantColorsAnnotation",
-          "description": "If present, dominant colors completed successfully."
-        }
-      },
-      "id": "ImageProperties"
-    },
-    "Feature": {
-      "description": "Users describe the type of Google Cloud Vision API tasks to perform over\nimages by using *Feature*s. Each Feature indicates a type of image\ndetection task to perform. Features encode the Cloud Vision API\nvertical to operate on and the number of top-scoring results to return.",
-      "type": "object",
-      "properties": {
-        "type": {
-          "description": "The feature type.",
-          "type": "string",
-          "enumDescriptions": [
-            "Unspecified feature type.",
-            "Run face detection.",
-            "Run landmark detection.",
-            "Run logo detection.",
-            "Run label detection.",
-            "Run OCR.",
-            "Run dense text document OCR. Takes precedence when both\nDOCUMENT_TEXT_DETECTION and TEXT_DETECTION are present.",
-            "Run computer vision models to compute image safe-search properties.",
-            "Compute a set of image properties, such as the image's dominant colors.",
-            "Run crop hints.",
-            "Run web detection."
-          ],
-          "enum": [
-            "TYPE_UNSPECIFIED",
-            "FACE_DETECTION",
-            "LANDMARK_DETECTION",
-            "LOGO_DETECTION",
-            "LABEL_DETECTION",
-            "TEXT_DETECTION",
-            "DOCUMENT_TEXT_DETECTION",
-            "SAFE_SEARCH_DETECTION",
-            "IMAGE_PROPERTIES",
-            "CROP_HINTS",
-            "WEB_DETECTION"
-          ]
-        },
-        "maxResults": {
-          "description": "Maximum number of results of this type.",
-          "format": "int32",
-          "type": "integer"
-        }
-      },
-      "id": "Feature"
-    },
-    "SafeSearchAnnotation": {
-      "description": "Set of features pertaining to the image, computed by computer vision\nmethods over safe-search verticals (for example, adult, spoof, medical,\nviolence).",
-      "type": "object",
-      "properties": {
-        "medical": {
-          "description": "Likelihood that this is a medical image.",
-          "type": "string",
-          "enumDescriptions": [
-            "Unknown likelihood.",
-            "It is very unlikely that the image belongs to the specified vertical.",
-            "It is unlikely that the image belongs to the specified vertical.",
-            "It is possible that the image belongs to the specified vertical.",
-            "It is likely that the image belongs to the specified vertical.",
-            "It is very likely that the image belongs to the specified vertical."
-          ],
-          "enum": [
-            "UNKNOWN",
-            "VERY_UNLIKELY",
-            "UNLIKELY",
-            "POSSIBLE",
-            "LIKELY",
-            "VERY_LIKELY"
-          ]
-        },
-        "violence": {
-          "enumDescriptions": [
-            "Unknown likelihood.",
-            "It is very unlikely that the image belongs to the specified vertical.",
-            "It is unlikely that the image belongs to the specified vertical.",
-            "It is possible that the image belongs to the specified vertical.",
-            "It is likely that the image belongs to the specified vertical.",
-            "It is very likely that the image belongs to the specified vertical."
-          ],
-          "enum": [
-            "UNKNOWN",
-            "VERY_UNLIKELY",
-            "UNLIKELY",
-            "POSSIBLE",
-            "LIKELY",
-            "VERY_LIKELY"
-          ],
-          "description": "Violence likelihood.",
-          "type": "string"
-        },
-        "adult": {
-          "enumDescriptions": [
-            "Unknown likelihood.",
-            "It is very unlikely that the image belongs to the specified vertical.",
-            "It is unlikely that the image belongs to the specified vertical.",
-            "It is possible that the image belongs to the specified vertical.",
-            "It is likely that the image belongs to the specified vertical.",
-            "It is very likely that the image belongs to the specified vertical."
-          ],
-          "enum": [
-            "UNKNOWN",
-            "VERY_UNLIKELY",
-            "UNLIKELY",
-            "POSSIBLE",
-            "LIKELY",
-            "VERY_LIKELY"
-          ],
-          "description": "Represents the adult content likelihood for the image.",
-          "type": "string"
-        },
-        "spoof": {
-          "description": "Spoof likelihood. The likelihood that an modification\nwas made to the image's canonical version to make it appear\nfunny or offensive.",
-          "type": "string",
-          "enumDescriptions": [
-            "Unknown likelihood.",
-            "It is very unlikely that the image belongs to the specified vertical.",
-            "It is unlikely that the image belongs to the specified vertical.",
-            "It is possible that the image belongs to the specified vertical.",
-            "It is likely that the image belongs to the specified vertical.",
-            "It is very likely that the image belongs to the specified vertical."
-          ],
-          "enum": [
-            "UNKNOWN",
-            "VERY_UNLIKELY",
-            "UNLIKELY",
-            "POSSIBLE",
-            "LIKELY",
-            "VERY_LIKELY"
-          ]
-        }
-      },
-      "id": "SafeSearchAnnotation"
-    },
-    "DominantColorsAnnotation": {
-      "description": "Set of dominant colors and their corresponding scores.",
-      "type": "object",
-      "properties": {
-        "colors": {
-          "description": "RGB color values with their score and pixel fraction.",
-          "type": "array",
-          "items": {
-            "$ref": "ColorInfo"
-          }
-        }
-      },
-      "id": "DominantColorsAnnotation"
-    },
-    "TextAnnotation": {
-      "description": "TextAnnotation contains a structured representation of OCR extracted text.\nThe hierarchy of an OCR extracted text structure is like this:\n    TextAnnotation -\u003e Page -\u003e Block -\u003e Paragraph -\u003e Word -\u003e Symbol\nEach structural component, starting from Page, may further have their own\nproperties. Properties describe detected languages, breaks etc.. Please\nrefer to the google.cloud.vision.v1.TextAnnotation.TextProperty message\ndefinition below for more detail.",
-      "type": "object",
-      "properties": {
-        "pages": {
-          "description": "List of pages detected by OCR.",
-          "type": "array",
-          "items": {
-            "$ref": "Page"
-          }
-        },
-        "text": {
-          "description": "UTF-8 text detected on the pages.",
-          "type": "string"
-        }
-      },
-      "id": "TextAnnotation"
     }
   },
-  "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",
+  "icons": {
+    "x16": "http://www.google.com/images/icons/product/search-16.gif",
+    "x32": "http://www.google.com/images/icons/product/search-32.gif"
+  },
   "canonicalName": "Vision",
   "auth": {
     "oauth2": {
@@ -1339,5 +1228,123 @@
   "ownerDomain": "google.com",
   "name": "vision",
   "batchPath": "batch",
-  "title": "Google Cloud Vision API"
+  "title": "Google Cloud Vision API",
+  "ownerName": "Google",
+  "resources": {
+    "images": {
+      "methods": {
+        "annotate": {
+          "description": "Run image detection and annotation for a batch of images.",
+          "request": {
+            "$ref": "BatchAnnotateImagesRequest"
+          },
+          "response": {
+            "$ref": "BatchAnnotateImagesResponse"
+          },
+          "parameterOrder": [],
+          "httpMethod": "POST",
+          "scopes": [
+            "https://www.googleapis.com/auth/cloud-platform"
+          ],
+          "parameters": {},
+          "flatPath": "v1/images:annotate",
+          "path": "v1/images:annotate",
+          "id": "vision.images.annotate"
+        }
+      }
+    }
+  },
+  "parameters": {
+    "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\").",
+      "type": "string",
+      "location": "query"
+    },
+    "$.xgafv": {
+      "enumDescriptions": [
+        "v1 error format",
+        "v2 error format"
+      ],
+      "location": "query",
+      "enum": [
+        "1",
+        "2"
+      ],
+      "description": "V1 error format.",
+      "type": "string"
+    },
+    "callback": {
+      "description": "JSONP",
+      "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",
+      "description": "Data format for response.",
+      "default": "json",
+      "enum": [
+        "json",
+        "media",
+        "proto"
+      ],
+      "type": "string"
+    },
+    "access_token": {
+      "description": "OAuth access token.",
+      "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"
+    },
+    "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"
+    },
+    "pp": {
+      "location": "query",
+      "description": "Pretty-print response.",
+      "type": "boolean",
+      "default": "true"
+    },
+    "oauth_token": {
+      "location": "query",
+      "description": "OAuth 2.0 token for the current user.",
+      "type": "string"
+    },
+    "bearer_token": {
+      "location": "query",
+      "description": "OAuth bearer token.",
+      "type": "string"
+    },
+    "upload_protocol": {
+      "location": "query",
+      "description": "Upload protocol for media (e.g. \"raw\", \"multipart\").",
+      "type": "string"
+    },
+    "prettyPrint": {
+      "description": "Returns response with indentations and line breaks.",
+      "type": "boolean",
+      "default": "true",
+      "location": "query"
+    }
+  },
+  "version": "v1",
+  "baseUrl": "https://vision.googleapis.com/",
+  "description": "Integrates Google Vision features, including image labeling, face, logo, and landmark detection, optical character recognition (OCR), and detection of explicit content, into applications.",
+  "servicePath": "",
+  "kind": "discovery#restDescription"
 }
diff --git a/vision/v1/vision-gen.go b/vision/v1/vision-gen.go
index a592697..9416d87 100644
--- a/vision/v1/vision-gen.go
+++ b/vision/v1/vision-gen.go
@@ -61,10 +61,9 @@
 }
 
 type Service struct {
-	client                    *http.Client
-	BasePath                  string // API endpoint base URL
-	UserAgent                 string // optional additional User-Agent fragment
-	GoogleClientHeaderElement string // client header fragment, for Google use only
+	client    *http.Client
+	BasePath  string // API endpoint base URL
+	UserAgent string // optional additional User-Agent fragment
 
 	Images *ImagesService
 }
@@ -76,10 +75,6 @@
 	return googleapi.UserAgent + " " + s.UserAgent
 }
 
-func (s *Service) clientHeader() string {
-	return gensupport.GoogleClientHeader("20170210", s.GoogleClientHeaderElement)
-}
-
 func NewImagesService(s *Service) *ImagesService {
 	rs := &ImagesService{s: s}
 	return rs
@@ -2194,6 +2189,9 @@
 	// crops.
 	PartialMatchingImages []*WebImage `json:"partialMatchingImages,omitempty"`
 
+	// VisuallySimilarImages: The visually similar image results.
+	VisuallySimilarImages []*WebImage `json:"visuallySimilarImages,omitempty"`
+
 	// WebEntities: Deduced entities from similar images on the Internet.
 	WebEntities []*WebEntity `json:"webEntities,omitempty"`
 
@@ -2463,7 +2461,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	var body io.Reader = nil
 	body, err := googleapi.WithoutDataWrapper.JSONReader(c.batchannotateimagesrequest)
 	if err != nil {
diff --git a/webfonts/v1/webfonts-gen.go b/webfonts/v1/webfonts-gen.go
index 97aa215..8da3833 100644
--- a/webfonts/v1/webfonts-gen.go
+++ b/webfonts/v1/webfonts-gen.go
@@ -55,10 +55,9 @@
 }
 
 type Service struct {
-	client                    *http.Client
-	BasePath                  string // API endpoint base URL
-	UserAgent                 string // optional additional User-Agent fragment
-	GoogleClientHeaderElement string // client header fragment, for Google use only
+	client    *http.Client
+	BasePath  string // API endpoint base URL
+	UserAgent string // optional additional User-Agent fragment
 
 	Webfonts *WebfontsService
 }
@@ -70,10 +69,6 @@
 	return googleapi.UserAgent + " " + s.UserAgent
 }
 
-func (s *Service) clientHeader() string {
-	return gensupport.GoogleClientHeader("20170210", s.GoogleClientHeaderElement)
-}
-
 func NewWebfontsService(s *Service) *WebfontsService {
 	rs := &WebfontsService{s: s}
 	return rs
@@ -239,7 +234,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	if c.ifNoneMatch_ != "" {
 		reqHeaders.Set("If-None-Match", c.ifNoneMatch_)
 	}
diff --git a/webmasters/v3/webmasters-gen.go b/webmasters/v3/webmasters-gen.go
index 364d982..e5f5e6e 100644
--- a/webmasters/v3/webmasters-gen.go
+++ b/webmasters/v3/webmasters-gen.go
@@ -68,10 +68,9 @@
 }
 
 type Service struct {
-	client                    *http.Client
-	BasePath                  string // API endpoint base URL
-	UserAgent                 string // optional additional User-Agent fragment
-	GoogleClientHeaderElement string // client header fragment, for Google use only
+	client    *http.Client
+	BasePath  string // API endpoint base URL
+	UserAgent string // optional additional User-Agent fragment
 
 	Searchanalytics *SearchanalyticsService
 
@@ -91,10 +90,6 @@
 	return googleapi.UserAgent + " " + s.UserAgent
 }
 
-func (s *Service) clientHeader() string {
-	return gensupport.GoogleClientHeader("20170210", s.GoogleClientHeaderElement)
-}
-
 func NewSearchanalyticsService(s *Service) *SearchanalyticsService {
 	rs := &SearchanalyticsService{s: s}
 	return rs
@@ -846,7 +841,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	var body io.Reader = nil
 	body, err := googleapi.WithoutDataWrapper.JSONReader(c.searchanalyticsqueryrequest)
 	if err != nil {
@@ -981,7 +975,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	var body io.Reader = nil
 	c.urlParams_.Set("alt", alt)
 	urls := googleapi.ResolveRelative(c.s.BasePath, "sites/{siteUrl}/sitemaps/{feedpath}")
@@ -1098,7 +1091,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	if c.ifNoneMatch_ != "" {
 		reqHeaders.Set("If-None-Match", c.ifNoneMatch_)
 	}
@@ -1255,7 +1247,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	if c.ifNoneMatch_ != "" {
 		reqHeaders.Set("If-None-Match", c.ifNoneMatch_)
 	}
@@ -1390,7 +1381,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	var body io.Reader = nil
 	c.urlParams_.Set("alt", alt)
 	urls := googleapi.ResolveRelative(c.s.BasePath, "sites/{siteUrl}/sitemaps/{feedpath}")
@@ -1494,7 +1484,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	var body io.Reader = nil
 	c.urlParams_.Set("alt", alt)
 	urls := googleapi.ResolveRelative(c.s.BasePath, "sites/{siteUrl}")
@@ -1591,7 +1580,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	var body io.Reader = nil
 	c.urlParams_.Set("alt", alt)
 	urls := googleapi.ResolveRelative(c.s.BasePath, "sites/{siteUrl}")
@@ -1698,7 +1686,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	if c.ifNoneMatch_ != "" {
 		reqHeaders.Set("If-None-Match", c.ifNoneMatch_)
 	}
@@ -1835,7 +1822,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	if c.ifNoneMatch_ != "" {
 		reqHeaders.Set("If-None-Match", c.ifNoneMatch_)
 	}
@@ -2000,7 +1986,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	if c.ifNoneMatch_ != "" {
 		reqHeaders.Set("If-None-Match", c.ifNoneMatch_)
 	}
@@ -2192,7 +2177,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	if c.ifNoneMatch_ != "" {
 		reqHeaders.Set("If-None-Match", c.ifNoneMatch_)
 	}
@@ -2388,7 +2372,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	if c.ifNoneMatch_ != "" {
 		reqHeaders.Set("If-None-Match", c.ifNoneMatch_)
 	}
@@ -2568,7 +2551,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	var body io.Reader = nil
 	c.urlParams_.Set("alt", alt)
 	urls := googleapi.ResolveRelative(c.s.BasePath, "sites/{siteUrl}/urlCrawlErrorsSamples/{url}")
diff --git a/youtube/v3/youtube-gen.go b/youtube/v3/youtube-gen.go
index 41b27b9..525ce86 100644
--- a/youtube/v3/youtube-gen.go
+++ b/youtube/v3/youtube-gen.go
@@ -103,10 +103,9 @@
 }
 
 type Service struct {
-	client                    *http.Client
-	BasePath                  string // API endpoint base URL
-	UserAgent                 string // optional additional User-Agent fragment
-	GoogleClientHeaderElement string // client header fragment, for Google use only
+	client    *http.Client
+	BasePath  string // API endpoint base URL
+	UserAgent string // optional additional User-Agent fragment
 
 	Activities *ActivitiesService
 
@@ -170,10 +169,6 @@
 	return googleapi.UserAgent + " " + s.UserAgent
 }
 
-func (s *Service) clientHeader() string {
-	return gensupport.GoogleClientHeader("20170210", s.GoogleClientHeaderElement)
-}
-
 func NewActivitiesService(s *Service) *ActivitiesService {
 	rs := &ActivitiesService{s: s}
 	return rs
@@ -9831,7 +9826,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	var body io.Reader = nil
 	body, err := googleapi.WithoutDataWrapper.JSONReader(c.activity)
 	if err != nil {
@@ -10050,7 +10044,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	if c.ifNoneMatch_ != "" {
 		reqHeaders.Set("If-None-Match", c.ifNoneMatch_)
 	}
@@ -10268,7 +10261,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	var body io.Reader = nil
 	c.urlParams_.Set("alt", alt)
 	urls := googleapi.ResolveRelative(c.s.BasePath, "captions")
@@ -10439,7 +10431,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	if c.ifNoneMatch_ != "" {
 		reqHeaders.Set("If-None-Match", c.ifNoneMatch_)
 	}
@@ -10684,7 +10675,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	var body io.Reader = nil
 	body, err := googleapi.WithoutDataWrapper.JSONReader(c.caption)
 	if err != nil {
@@ -10945,7 +10935,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	if c.ifNoneMatch_ != "" {
 		reqHeaders.Set("If-None-Match", c.ifNoneMatch_)
 	}
@@ -11187,7 +11176,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	var body io.Reader = nil
 	body, err := googleapi.WithoutDataWrapper.JSONReader(c.caption)
 	if err != nil {
@@ -11481,7 +11469,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	var body io.Reader = nil
 	body, err := googleapi.WithoutDataWrapper.JSONReader(c.channelbannerresource)
 	if err != nil {
@@ -11692,7 +11679,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	var body io.Reader = nil
 	c.urlParams_.Set("alt", alt)
 	urls := googleapi.ResolveRelative(c.s.BasePath, "channelSections")
@@ -11837,7 +11823,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	var body io.Reader = nil
 	body, err := googleapi.WithoutDataWrapper.JSONReader(c.channelsection)
 	if err != nil {
@@ -12045,7 +12030,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	if c.ifNoneMatch_ != "" {
 		reqHeaders.Set("If-None-Match", c.ifNoneMatch_)
 	}
@@ -12216,7 +12200,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	var body io.Reader = nil
 	body, err := googleapi.WithoutDataWrapper.JSONReader(c.channelsection)
 	if err != nil {
@@ -12460,7 +12443,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	if c.ifNoneMatch_ != "" {
 		reqHeaders.Set("If-None-Match", c.ifNoneMatch_)
 	}
@@ -12681,7 +12663,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	var body io.Reader = nil
 	body, err := googleapi.WithoutDataWrapper.JSONReader(c.channel)
 	if err != nil {
@@ -12819,7 +12800,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	var body io.Reader = nil
 	body, err := googleapi.WithoutDataWrapper.JSONReader(c.commentthread)
 	if err != nil {
@@ -13082,7 +13062,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	if c.ifNoneMatch_ != "" {
 		reqHeaders.Set("If-None-Match", c.ifNoneMatch_)
 	}
@@ -13311,7 +13290,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	var body io.Reader = nil
 	body, err := googleapi.WithoutDataWrapper.JSONReader(c.commentthread)
 	if err != nil {
@@ -13439,7 +13417,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	var body io.Reader = nil
 	c.urlParams_.Set("alt", alt)
 	urls := googleapi.ResolveRelative(c.s.BasePath, "comments")
@@ -13534,7 +13511,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	var body io.Reader = nil
 	body, err := googleapi.WithoutDataWrapper.JSONReader(c.comment)
 	if err != nil {
@@ -13730,7 +13706,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	if c.ifNoneMatch_ != "" {
 		reqHeaders.Set("If-None-Match", c.ifNoneMatch_)
 	}
@@ -13913,7 +13888,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	var body io.Reader = nil
 	c.urlParams_.Set("alt", alt)
 	urls := googleapi.ResolveRelative(c.s.BasePath, "comments/markAsSpam")
@@ -14020,7 +13994,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	var body io.Reader = nil
 	c.urlParams_.Set("alt", alt)
 	urls := googleapi.ResolveRelative(c.s.BasePath, "comments/setModerationStatus")
@@ -14137,7 +14110,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	var body io.Reader = nil
 	body, err := googleapi.WithoutDataWrapper.JSONReader(c.comment)
 	if err != nil {
@@ -14309,7 +14281,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	if c.ifNoneMatch_ != "" {
 		reqHeaders.Set("If-None-Match", c.ifNoneMatch_)
 	}
@@ -14511,7 +14482,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	if c.ifNoneMatch_ != "" {
 		reqHeaders.Set("If-None-Match", c.ifNoneMatch_)
 	}
@@ -14672,7 +14642,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	if c.ifNoneMatch_ != "" {
 		reqHeaders.Set("If-None-Match", c.ifNoneMatch_)
 	}
@@ -14823,7 +14792,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	if c.ifNoneMatch_ != "" {
 		reqHeaders.Set("If-None-Match", c.ifNoneMatch_)
 	}
@@ -15012,7 +14980,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	var body io.Reader = nil
 	c.urlParams_.Set("alt", alt)
 	urls := googleapi.ResolveRelative(c.s.BasePath, "liveBroadcasts/bind")
@@ -15238,7 +15205,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	var body io.Reader = nil
 	c.urlParams_.Set("alt", alt)
 	urls := googleapi.ResolveRelative(c.s.BasePath, "liveBroadcasts/control")
@@ -15437,7 +15403,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	var body io.Reader = nil
 	c.urlParams_.Set("alt", alt)
 	urls := googleapi.ResolveRelative(c.s.BasePath, "liveBroadcasts")
@@ -15586,7 +15551,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	var body io.Reader = nil
 	body, err := googleapi.WithoutDataWrapper.JSONReader(c.livebroadcast)
 	if err != nil {
@@ -15844,7 +15808,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	if c.ifNoneMatch_ != "" {
 		reqHeaders.Set("If-None-Match", c.ifNoneMatch_)
 	}
@@ -16109,7 +16072,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	var body io.Reader = nil
 	c.urlParams_.Set("alt", alt)
 	urls := googleapi.ResolveRelative(c.s.BasePath, "liveBroadcasts/transition")
@@ -16312,7 +16274,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	var body io.Reader = nil
 	body, err := googleapi.WithoutDataWrapper.JSONReader(c.livebroadcast)
 	if err != nil {
@@ -16451,7 +16412,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	var body io.Reader = nil
 	c.urlParams_.Set("alt", alt)
 	urls := googleapi.ResolveRelative(c.s.BasePath, "liveChat/bans")
@@ -16546,7 +16506,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	var body io.Reader = nil
 	body, err := googleapi.WithoutDataWrapper.JSONReader(c.livechatban)
 	if err != nil {
@@ -16675,7 +16634,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	var body io.Reader = nil
 	c.urlParams_.Set("alt", alt)
 	urls := googleapi.ResolveRelative(c.s.BasePath, "liveChat/messages")
@@ -16770,7 +16728,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	var body io.Reader = nil
 	body, err := googleapi.WithoutDataWrapper.JSONReader(c.livechatmessage)
 	if err != nil {
@@ -16952,7 +16909,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	if c.ifNoneMatch_ != "" {
 		reqHeaders.Set("If-None-Match", c.ifNoneMatch_)
 	}
@@ -17132,7 +17088,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	var body io.Reader = nil
 	c.urlParams_.Set("alt", alt)
 	urls := googleapi.ResolveRelative(c.s.BasePath, "liveChat/moderators")
@@ -17227,7 +17182,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	var body io.Reader = nil
 	body, err := googleapi.WithoutDataWrapper.JSONReader(c.livechatmoderator)
 	if err != nil {
@@ -17385,7 +17339,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	if c.ifNoneMatch_ != "" {
 		reqHeaders.Set("If-None-Match", c.ifNoneMatch_)
 	}
@@ -17596,7 +17549,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	var body io.Reader = nil
 	c.urlParams_.Set("alt", alt)
 	urls := googleapi.ResolveRelative(c.s.BasePath, "liveStreams")
@@ -17747,7 +17699,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	var body io.Reader = nil
 	body, err := googleapi.WithoutDataWrapper.JSONReader(c.livestream)
 	if err != nil {
@@ -17977,7 +17928,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	if c.ifNoneMatch_ != "" {
 		reqHeaders.Set("If-None-Match", c.ifNoneMatch_)
 	}
@@ -18205,7 +18155,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	var body io.Reader = nil
 	body, err := googleapi.WithoutDataWrapper.JSONReader(c.livestream)
 	if err != nil {
@@ -18362,7 +18311,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	var body io.Reader = nil
 	c.urlParams_.Set("alt", alt)
 	urls := googleapi.ResolveRelative(c.s.BasePath, "playlistItems")
@@ -18481,7 +18429,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	var body io.Reader = nil
 	body, err := googleapi.WithoutDataWrapper.JSONReader(c.playlistitem)
 	if err != nil {
@@ -18690,7 +18637,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	if c.ifNoneMatch_ != "" {
 		reqHeaders.Set("If-None-Match", c.ifNoneMatch_)
 	}
@@ -18893,7 +18839,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	var body io.Reader = nil
 	body, err := googleapi.WithoutDataWrapper.JSONReader(c.playlistitem)
 	if err != nil {
@@ -19046,7 +18991,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	var body io.Reader = nil
 	c.urlParams_.Set("alt", alt)
 	urls := googleapi.ResolveRelative(c.s.BasePath, "playlists")
@@ -19191,7 +19135,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	var body io.Reader = nil
 	body, err := googleapi.WithoutDataWrapper.JSONReader(c.playlist)
 	if err != nil {
@@ -19439,7 +19382,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	if c.ifNoneMatch_ != "" {
 		reqHeaders.Set("If-None-Match", c.ifNoneMatch_)
 	}
@@ -19651,7 +19593,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	var body io.Reader = nil
 	body, err := googleapi.WithoutDataWrapper.JSONReader(c.playlist)
 	if err != nil {
@@ -20200,7 +20141,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	if c.ifNoneMatch_ != "" {
 		reqHeaders.Set("If-None-Match", c.ifNoneMatch_)
 	}
@@ -20666,7 +20606,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	if c.ifNoneMatch_ != "" {
 		reqHeaders.Set("If-None-Match", c.ifNoneMatch_)
 	}
@@ -20840,7 +20779,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	var body io.Reader = nil
 	c.urlParams_.Set("alt", alt)
 	urls := googleapi.ResolveRelative(c.s.BasePath, "subscriptions")
@@ -20936,7 +20874,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	var body io.Reader = nil
 	body, err := googleapi.WithoutDataWrapper.JSONReader(c.subscription)
 	if err != nil {
@@ -21202,7 +21139,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	if c.ifNoneMatch_ != "" {
 		reqHeaders.Set("If-None-Match", c.ifNoneMatch_)
 	}
@@ -21463,7 +21399,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	if c.ifNoneMatch_ != "" {
 		reqHeaders.Set("If-None-Match", c.ifNoneMatch_)
 	}
@@ -21701,7 +21636,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	var body io.Reader = nil
 	c.urlParams_.Set("alt", alt)
 	urls := googleapi.ResolveRelative(c.s.BasePath, "thumbnails/set")
@@ -21915,7 +21849,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	if c.ifNoneMatch_ != "" {
 		reqHeaders.Set("If-None-Match", c.ifNoneMatch_)
 	}
@@ -22083,7 +22016,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	if c.ifNoneMatch_ != "" {
 		reqHeaders.Set("If-None-Match", c.ifNoneMatch_)
 	}
@@ -22244,7 +22176,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	var body io.Reader = nil
 	c.urlParams_.Set("alt", alt)
 	urls := googleapi.ResolveRelative(c.s.BasePath, "videos")
@@ -22373,7 +22304,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	if c.ifNoneMatch_ != "" {
 		reqHeaders.Set("If-None-Match", c.ifNoneMatch_)
 	}
@@ -22632,7 +22562,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	var body io.Reader = nil
 	body, err := googleapi.WithoutDataWrapper.JSONReader(c.video)
 	if err != nil {
@@ -23001,7 +22930,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	if c.ifNoneMatch_ != "" {
 		reqHeaders.Set("If-None-Match", c.ifNoneMatch_)
 	}
@@ -23235,7 +23163,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	var body io.Reader = nil
 	c.urlParams_.Set("alt", alt)
 	urls := googleapi.ResolveRelative(c.s.BasePath, "videos/rate")
@@ -23365,7 +23292,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	var body io.Reader = nil
 	body, err := googleapi.WithoutDataWrapper.JSONReader(c.videoabusereport)
 	if err != nil {
@@ -23484,7 +23410,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	var body io.Reader = nil
 	body, err := googleapi.WithoutDataWrapper.JSONReader(c.video)
 	if err != nil {
@@ -23692,7 +23617,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	var body io.Reader = nil
 	body, err := googleapi.WithoutDataWrapper.JSONReader(c.invideobranding)
 	if err != nil {
@@ -23885,7 +23809,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	var body io.Reader = nil
 	c.urlParams_.Set("alt", alt)
 	urls := googleapi.ResolveRelative(c.s.BasePath, "watermarks/unset")
diff --git a/youtubeanalytics/v1/youtubeanalytics-gen.go b/youtubeanalytics/v1/youtubeanalytics-gen.go
index 5e36838..6d7c44d 100644
--- a/youtubeanalytics/v1/youtubeanalytics-gen.go
+++ b/youtubeanalytics/v1/youtubeanalytics-gen.go
@@ -76,10 +76,9 @@
 }
 
 type Service struct {
-	client                    *http.Client
-	BasePath                  string // API endpoint base URL
-	UserAgent                 string // optional additional User-Agent fragment
-	GoogleClientHeaderElement string // client header fragment, for Google use only
+	client    *http.Client
+	BasePath  string // API endpoint base URL
+	UserAgent string // optional additional User-Agent fragment
 
 	GroupItems *GroupItemsService
 
@@ -95,10 +94,6 @@
 	return googleapi.UserAgent + " " + s.UserAgent
 }
 
-func (s *Service) clientHeader() string {
-	return gensupport.GoogleClientHeader("20170210", s.GoogleClientHeaderElement)
-}
-
 func NewGroupItemsService(s *Service) *GroupItemsService {
 	rs := &GroupItemsService{s: s}
 	return rs
@@ -519,7 +514,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	var body io.Reader = nil
 	c.urlParams_.Set("alt", alt)
 	urls := googleapi.ResolveRelative(c.s.BasePath, "groupItems")
@@ -636,7 +630,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	var body io.Reader = nil
 	body, err := googleapi.WithoutDataWrapper.JSONReader(c.groupitem)
 	if err != nil {
@@ -791,7 +784,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	if c.ifNoneMatch_ != "" {
 		reqHeaders.Set("If-None-Match", c.ifNoneMatch_)
 	}
@@ -940,7 +932,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	var body io.Reader = nil
 	c.urlParams_.Set("alt", alt)
 	urls := googleapi.ResolveRelative(c.s.BasePath, "groups")
@@ -1057,7 +1048,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	var body io.Reader = nil
 	body, err := googleapi.WithoutDataWrapper.JSONReader(c.group)
 	if err != nil {
@@ -1239,7 +1229,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	if c.ifNoneMatch_ != "" {
 		reqHeaders.Set("If-None-Match", c.ifNoneMatch_)
 	}
@@ -1417,7 +1406,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	var body io.Reader = nil
 	body, err := googleapi.WithoutDataWrapper.JSONReader(c.group)
 	if err != nil {
@@ -1625,7 +1613,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	if c.ifNoneMatch_ != "" {
 		reqHeaders.Set("If-None-Match", c.ifNoneMatch_)
 	}
diff --git a/youtubeanalytics/v1beta1/youtubeanalytics-gen.go b/youtubeanalytics/v1beta1/youtubeanalytics-gen.go
index 32b4e85..3efb6e4 100644
--- a/youtubeanalytics/v1beta1/youtubeanalytics-gen.go
+++ b/youtubeanalytics/v1beta1/youtubeanalytics-gen.go
@@ -76,10 +76,9 @@
 }
 
 type Service struct {
-	client                    *http.Client
-	BasePath                  string // API endpoint base URL
-	UserAgent                 string // optional additional User-Agent fragment
-	GoogleClientHeaderElement string // client header fragment, for Google use only
+	client    *http.Client
+	BasePath  string // API endpoint base URL
+	UserAgent string // optional additional User-Agent fragment
 
 	GroupItems *GroupItemsService
 
@@ -95,10 +94,6 @@
 	return googleapi.UserAgent + " " + s.UserAgent
 }
 
-func (s *Service) clientHeader() string {
-	return gensupport.GoogleClientHeader("20170210", s.GoogleClientHeaderElement)
-}
-
 func NewGroupItemsService(s *Service) *GroupItemsService {
 	rs := &GroupItemsService{s: s}
 	return rs
@@ -519,7 +514,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	var body io.Reader = nil
 	c.urlParams_.Set("alt", alt)
 	urls := googleapi.ResolveRelative(c.s.BasePath, "groupItems")
@@ -636,7 +630,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	var body io.Reader = nil
 	body, err := googleapi.WithoutDataWrapper.JSONReader(c.groupitem)
 	if err != nil {
@@ -791,7 +784,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	if c.ifNoneMatch_ != "" {
 		reqHeaders.Set("If-None-Match", c.ifNoneMatch_)
 	}
@@ -940,7 +932,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	var body io.Reader = nil
 	c.urlParams_.Set("alt", alt)
 	urls := googleapi.ResolveRelative(c.s.BasePath, "groups")
@@ -1057,7 +1048,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	var body io.Reader = nil
 	body, err := googleapi.WithoutDataWrapper.JSONReader(c.group)
 	if err != nil {
@@ -1239,7 +1229,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	if c.ifNoneMatch_ != "" {
 		reqHeaders.Set("If-None-Match", c.ifNoneMatch_)
 	}
@@ -1417,7 +1406,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	var body io.Reader = nil
 	body, err := googleapi.WithoutDataWrapper.JSONReader(c.group)
 	if err != nil {
@@ -1625,7 +1613,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	if c.ifNoneMatch_ != "" {
 		reqHeaders.Set("If-None-Match", c.ifNoneMatch_)
 	}
diff --git a/youtubereporting/v1/youtubereporting-api.json b/youtubereporting/v1/youtubereporting-api.json
index d31eab0..888f9e0 100644
--- a/youtubereporting/v1/youtubereporting-api.json
+++ b/youtubereporting/v1/youtubereporting-api.json
@@ -1,180 +1,62 @@
 {
-  "canonicalName": "YouTube Reporting",
-  "auth": {
-    "oauth2": {
-      "scopes": {
-        "https://www.googleapis.com/auth/yt-analytics.readonly": {
-          "description": "View YouTube Analytics reports for your YouTube content"
-        },
-        "https://www.googleapis.com/auth/yt-analytics-monetary.readonly": {
-          "description": "View monetary and non-monetary YouTube Analytics reports for your YouTube content"
-        }
-      }
-    }
-  },
-  "kind": "discovery#restDescription",
-  "description": "Schedules reporting jobs containing your YouTube Analytics data and downloads the resulting bulk data reports in the form of CSV files.",
-  "servicePath": "",
   "rootUrl": "https://youtubereporting.googleapis.com/",
   "basePath": "",
   "ownerDomain": "google.com",
   "name": "youtubereporting",
   "batchPath": "batch",
-  "id": "youtubereporting:v1",
+  "revision": "20170326",
   "documentationLink": "https://developers.google.com/youtube/reporting/v1/reports/",
-  "revision": "20170308",
+  "id": "youtubereporting:v1",
   "title": "YouTube Reporting API",
-  "ownerName": "Google",
   "discoveryVersion": "v1",
+  "ownerName": "Google",
   "resources": {
-    "jobs": {
-      "resources": {
-        "reports": {
-          "methods": {
-            "list": {
-              "httpMethod": "GET",
-              "parameterOrder": [
-                "jobId"
-              ],
-              "response": {
-                "$ref": "ListReportsResponse"
-              },
-              "parameters": {
-                "jobId": {
-                  "location": "path",
-                  "description": "The ID of the job.",
-                  "required": true,
-                  "type": "string"
-                },
-                "createdAfter": {
-                  "description": "If set, only reports created after the specified date/time are returned.",
-                  "format": "google-datetime",
-                  "type": "string",
-                  "location": "query"
-                },
-                "startTimeAtOrAfter": {
-                  "location": "query",
-                  "description": "If set, only reports whose start time is greater than or equal the\nspecified date/time are returned.",
-                  "format": "google-datetime",
-                  "type": "string"
-                },
-                "pageToken": {
-                  "location": "query",
-                  "description": "A token identifying a page of results the server should return. Typically,\nthis is the value of\nListReportsResponse.next_page_token\nreturned in response to the previous call to the `ListReports` method.",
-                  "type": "string"
-                },
-                "pageSize": {
-                  "description": "Requested page size. Server may return fewer report types than requested.\nIf unspecified, server will pick an appropriate default.",
-                  "format": "int32",
-                  "type": "integer",
-                  "location": "query"
-                },
-                "onBehalfOfContentOwner": {
-                  "location": "query",
-                  "description": "The content owner's external ID on which behalf the user is acting on. If\nnot set, the user is acting for himself (his own channel).",
-                  "type": "string"
-                },
-                "startTimeBefore": {
-                  "description": "If set, only reports whose start time is smaller than the specified\ndate/time are returned.",
-                  "format": "google-datetime",
-                  "type": "string",
-                  "location": "query"
-                }
-              },
-              "scopes": [
-                "https://www.googleapis.com/auth/yt-analytics-monetary.readonly",
-                "https://www.googleapis.com/auth/yt-analytics.readonly"
-              ],
-              "flatPath": "v1/jobs/{jobId}/reports",
-              "id": "youtubereporting.jobs.reports.list",
-              "path": "v1/jobs/{jobId}/reports",
-              "description": "Lists reports created by a specific job.\nReturns NOT_FOUND if the job does not exist."
-            },
-            "get": {
-              "httpMethod": "GET",
-              "response": {
-                "$ref": "Report"
-              },
-              "parameterOrder": [
-                "jobId",
-                "reportId"
-              ],
-              "scopes": [
-                "https://www.googleapis.com/auth/yt-analytics-monetary.readonly",
-                "https://www.googleapis.com/auth/yt-analytics.readonly"
-              ],
-              "parameters": {
-                "onBehalfOfContentOwner": {
-                  "description": "The content owner's external ID on which behalf the user is acting on. If\nnot set, the user is acting for himself (his own channel).",
-                  "type": "string",
-                  "location": "query"
-                },
-                "reportId": {
-                  "description": "The ID of the report to retrieve.",
-                  "required": true,
-                  "type": "string",
-                  "location": "path"
-                },
-                "jobId": {
-                  "location": "path",
-                  "description": "The ID of the job.",
-                  "required": true,
-                  "type": "string"
-                }
-              },
-              "flatPath": "v1/jobs/{jobId}/reports/{reportId}",
-              "id": "youtubereporting.jobs.reports.get",
-              "path": "v1/jobs/{jobId}/reports/{reportId}",
-              "description": "Gets the metadata of a specific report."
-            }
-          }
-        }
-      },
+    "media": {
       "methods": {
-        "delete": {
-          "httpMethod": "DELETE",
+        "download": {
+          "supportsMediaDownload": true,
           "response": {
-            "$ref": "Empty"
+            "$ref": "Media"
           },
           "parameterOrder": [
-            "jobId"
+            "resourceName"
           ],
+          "httpMethod": "GET",
+          "scopes": [
+            "https://www.googleapis.com/auth/yt-analytics-monetary.readonly",
+            "https://www.googleapis.com/auth/yt-analytics.readonly"
+          ],
+          "parameters": {
+            "resourceName": {
+              "description": "Name of the media that is being downloaded.  See\nReadRequest.resource_name.",
+              "required": true,
+              "type": "string",
+              "pattern": "^.+$",
+              "location": "path"
+            }
+          },
+          "flatPath": "v1/media/{mediaId}",
+          "path": "v1/media/{+resourceName}",
+          "id": "youtubereporting.media.download",
+          "description": "Method for media download. Download is supported\non the URI `/v1/media/{+name}?alt=media`."
+        }
+      }
+    },
+    "jobs": {
+      "methods": {
+        "list": {
+          "description": "Lists jobs.",
+          "response": {
+            "$ref": "ListJobsResponse"
+          },
+          "parameterOrder": [],
+          "httpMethod": "GET",
           "parameters": {
             "onBehalfOfContentOwner": {
               "location": "query",
               "description": "The content owner's external ID on which behalf the user is acting on. If\nnot set, the user is acting for himself (his own channel).",
               "type": "string"
             },
-            "jobId": {
-              "description": "The ID of the job to delete.",
-              "required": true,
-              "type": "string",
-              "location": "path"
-            }
-          },
-          "scopes": [
-            "https://www.googleapis.com/auth/yt-analytics-monetary.readonly",
-            "https://www.googleapis.com/auth/yt-analytics.readonly"
-          ],
-          "flatPath": "v1/jobs/{jobId}",
-          "id": "youtubereporting.jobs.delete",
-          "path": "v1/jobs/{jobId}",
-          "description": "Deletes a job."
-        },
-        "list": {
-          "id": "youtubereporting.jobs.list",
-          "path": "v1/jobs",
-          "description": "Lists jobs.",
-          "httpMethod": "GET",
-          "response": {
-            "$ref": "ListJobsResponse"
-          },
-          "parameterOrder": [],
-          "scopes": [
-            "https://www.googleapis.com/auth/yt-analytics-monetary.readonly",
-            "https://www.googleapis.com/auth/yt-analytics.readonly"
-          ],
-          "parameters": {
             "pageToken": {
               "location": "query",
               "description": "A token identifying a page of results the server should return. Typically,\nthis is the value of\nListReportTypesResponse.next_page_token\nreturned in response to the previous call to the `ListJobs` method.",
@@ -186,24 +68,25 @@
               "type": "boolean"
             },
             "pageSize": {
-              "location": "query",
               "description": "Requested page size. Server may return fewer jobs than requested.\nIf unspecified, server will pick an appropriate default.",
               "format": "int32",
-              "type": "integer"
-            },
-            "onBehalfOfContentOwner": {
-              "location": "query",
-              "description": "The content owner's external ID on which behalf the user is acting on. If\nnot set, the user is acting for himself (his own channel).",
-              "type": "string"
+              "type": "integer",
+              "location": "query"
             }
           },
-          "flatPath": "v1/jobs"
+          "scopes": [
+            "https://www.googleapis.com/auth/yt-analytics-monetary.readonly",
+            "https://www.googleapis.com/auth/yt-analytics.readonly"
+          ],
+          "flatPath": "v1/jobs",
+          "path": "v1/jobs",
+          "id": "youtubereporting.jobs.list"
         },
         "get": {
-          "httpMethod": "GET",
           "response": {
             "$ref": "Job"
           },
+          "httpMethod": "GET",
           "parameterOrder": [
             "jobId"
           ],
@@ -213,25 +96,23 @@
           ],
           "parameters": {
             "onBehalfOfContentOwner": {
+              "location": "query",
               "description": "The content owner's external ID on which behalf the user is acting on. If\nnot set, the user is acting for himself (his own channel).",
-              "type": "string",
-              "location": "query"
+              "type": "string"
             },
             "jobId": {
+              "location": "path",
               "description": "The ID of the job to retrieve.",
               "required": true,
-              "type": "string",
-              "location": "path"
+              "type": "string"
             }
           },
           "flatPath": "v1/jobs/{jobId}",
-          "id": "youtubereporting.jobs.get",
           "path": "v1/jobs/{jobId}",
+          "id": "youtubereporting.jobs.get",
           "description": "Gets a job."
         },
         "create": {
-          "id": "youtubereporting.jobs.create",
-          "path": "v1/jobs",
           "request": {
             "$ref": "Job"
           },
@@ -243,36 +124,175 @@
           },
           "parameters": {
             "onBehalfOfContentOwner": {
+              "location": "query",
               "description": "The content owner's external ID on which behalf the user is acting on. If\nnot set, the user is acting for himself (his own channel).",
-              "type": "string",
-              "location": "query"
+              "type": "string"
             }
           },
           "scopes": [
             "https://www.googleapis.com/auth/yt-analytics-monetary.readonly",
             "https://www.googleapis.com/auth/yt-analytics.readonly"
           ],
-          "flatPath": "v1/jobs"
-        }
-      }
-    },
-    "reportTypes": {
-      "methods": {
-        "list": {
-          "parameterOrder": [],
-          "httpMethod": "GET",
+          "flatPath": "v1/jobs",
+          "id": "youtubereporting.jobs.create",
+          "path": "v1/jobs"
+        },
+        "delete": {
+          "description": "Deletes a job.",
+          "httpMethod": "DELETE",
+          "parameterOrder": [
+            "jobId"
+          ],
           "response": {
-            "$ref": "ListReportTypesResponse"
+            "$ref": "Empty"
           },
           "scopes": [
             "https://www.googleapis.com/auth/yt-analytics-monetary.readonly",
             "https://www.googleapis.com/auth/yt-analytics.readonly"
           ],
           "parameters": {
-            "pageToken": {
-              "description": "A token identifying a page of results the server should return. Typically,\nthis is the value of\nListReportTypesResponse.next_page_token\nreturned in response to the previous call to the `ListReportTypes` method.",
+            "jobId": {
+              "location": "path",
+              "description": "The ID of the job to delete.",
+              "required": true,
+              "type": "string"
+            },
+            "onBehalfOfContentOwner": {
+              "location": "query",
+              "description": "The content owner's external ID on which behalf the user is acting on. If\nnot set, the user is acting for himself (his own channel).",
+              "type": "string"
+            }
+          },
+          "flatPath": "v1/jobs/{jobId}",
+          "id": "youtubereporting.jobs.delete",
+          "path": "v1/jobs/{jobId}"
+        }
+      },
+      "resources": {
+        "reports": {
+          "methods": {
+            "list": {
+              "description": "Lists reports created by a specific job.\nReturns NOT_FOUND if the job does not exist.",
+              "httpMethod": "GET",
+              "parameterOrder": [
+                "jobId"
+              ],
+              "response": {
+                "$ref": "ListReportsResponse"
+              },
+              "scopes": [
+                "https://www.googleapis.com/auth/yt-analytics-monetary.readonly",
+                "https://www.googleapis.com/auth/yt-analytics.readonly"
+              ],
+              "parameters": {
+                "onBehalfOfContentOwner": {
+                  "description": "The content owner's external ID on which behalf the user is acting on. If\nnot set, the user is acting for himself (his own channel).",
+                  "type": "string",
+                  "location": "query"
+                },
+                "startTimeBefore": {
+                  "location": "query",
+                  "description": "If set, only reports whose start time is smaller than the specified\ndate/time are returned.",
+                  "format": "google-datetime",
+                  "type": "string"
+                },
+                "jobId": {
+                  "description": "The ID of the job.",
+                  "required": true,
+                  "type": "string",
+                  "location": "path"
+                },
+                "createdAfter": {
+                  "description": "If set, only reports created after the specified date/time are returned.",
+                  "format": "google-datetime",
+                  "type": "string",
+                  "location": "query"
+                },
+                "startTimeAtOrAfter": {
+                  "description": "If set, only reports whose start time is greater than or equal the\nspecified date/time are returned.",
+                  "format": "google-datetime",
+                  "type": "string",
+                  "location": "query"
+                },
+                "pageToken": {
+                  "type": "string",
+                  "location": "query",
+                  "description": "A token identifying a page of results the server should return. Typically,\nthis is the value of\nListReportsResponse.next_page_token\nreturned in response to the previous call to the `ListReports` method."
+                },
+                "pageSize": {
+                  "location": "query",
+                  "description": "Requested page size. Server may return fewer report types than requested.\nIf unspecified, server will pick an appropriate default.",
+                  "format": "int32",
+                  "type": "integer"
+                }
+              },
+              "flatPath": "v1/jobs/{jobId}/reports",
+              "id": "youtubereporting.jobs.reports.list",
+              "path": "v1/jobs/{jobId}/reports"
+            },
+            "get": {
+              "response": {
+                "$ref": "Report"
+              },
+              "httpMethod": "GET",
+              "parameterOrder": [
+                "jobId",
+                "reportId"
+              ],
+              "parameters": {
+                "jobId": {
+                  "description": "The ID of the job.",
+                  "required": true,
+                  "type": "string",
+                  "location": "path"
+                },
+                "onBehalfOfContentOwner": {
+                  "location": "query",
+                  "description": "The content owner's external ID on which behalf the user is acting on. If\nnot set, the user is acting for himself (his own channel).",
+                  "type": "string"
+                },
+                "reportId": {
+                  "location": "path",
+                  "description": "The ID of the report to retrieve.",
+                  "required": true,
+                  "type": "string"
+                }
+              },
+              "scopes": [
+                "https://www.googleapis.com/auth/yt-analytics-monetary.readonly",
+                "https://www.googleapis.com/auth/yt-analytics.readonly"
+              ],
+              "flatPath": "v1/jobs/{jobId}/reports/{reportId}",
+              "path": "v1/jobs/{jobId}/reports/{reportId}",
+              "id": "youtubereporting.jobs.reports.get",
+              "description": "Gets the metadata of a specific report."
+            }
+          }
+        }
+      }
+    },
+    "reportTypes": {
+      "methods": {
+        "list": {
+          "response": {
+            "$ref": "ListReportTypesResponse"
+          },
+          "parameterOrder": [],
+          "httpMethod": "GET",
+          "scopes": [
+            "https://www.googleapis.com/auth/yt-analytics-monetary.readonly",
+            "https://www.googleapis.com/auth/yt-analytics.readonly"
+          ],
+          "parameters": {
+            "onBehalfOfContentOwner": {
               "type": "string",
-              "location": "query"
+              "location": "query",
+              "description": "The content owner's external ID on which behalf the user is acting on. If\nnot set, the user is acting for himself (his own channel)."
+            },
+            "pageToken": {
+              "location": "query",
+              "description": "A token identifying a page of results the server should return. Typically,\nthis is the value of\nListReportTypesResponse.next_page_token\nreturned in response to the previous call to the `ListReportTypes` method.",
+              "type": "string"
             },
             "includeSystemManaged": {
               "location": "query",
@@ -284,11 +304,6 @@
               "format": "int32",
               "type": "integer",
               "location": "query"
-            },
-            "onBehalfOfContentOwner": {
-              "location": "query",
-              "description": "The content owner's external ID on which behalf the user is acting on. If\nnot set, the user is acting for himself (his own channel).",
-              "type": "string"
             }
           },
           "flatPath": "v1/reportTypes",
@@ -297,81 +312,19 @@
           "description": "Lists report types."
         }
       }
-    },
-    "media": {
-      "methods": {
-        "download": {
-          "response": {
-            "$ref": "Media"
-          },
-          "parameterOrder": [
-            "resourceName"
-          ],
-          "httpMethod": "GET",
-          "parameters": {
-            "resourceName": {
-              "pattern": "^.+$",
-              "location": "path",
-              "description": "Name of the media that is being downloaded.  See\nReadRequest.resource_name.",
-              "required": true,
-              "type": "string"
-            }
-          },
-          "scopes": [
-            "https://www.googleapis.com/auth/yt-analytics-monetary.readonly",
-            "https://www.googleapis.com/auth/yt-analytics.readonly"
-          ],
-          "flatPath": "v1/media/{mediaId}",
-          "path": "v1/media/{+resourceName}",
-          "id": "youtubereporting.media.download",
-          "description": "Method for media download. Download is supported\non the URI `/v1/media/{+name}?alt=media`.",
-          "supportsMediaDownload": true
-        }
-      }
     }
   },
   "parameters": {
-    "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"
-    },
-    "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"
-    },
-    "pp": {
-      "description": "Pretty-print response.",
-      "type": "boolean",
-      "default": "true",
-      "location": "query"
-    },
-    "bearer_token": {
-      "description": "OAuth bearer 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"
     },
     "prettyPrint": {
+      "location": "query",
       "description": "Returns response with indentations and line breaks.",
       "type": "boolean",
-      "default": "true",
-      "location": "query"
+      "default": "true"
     },
     "uploadType": {
       "location": "query",
@@ -379,16 +332,17 @@
       "type": "string"
     },
     "fields": {
+      "location": "query",
       "description": "Selector specifying which fields to include in a partial response.",
-      "type": "string",
-      "location": "query"
+      "type": "string"
     },
     "callback": {
+      "location": "query",
       "description": "JSONP",
-      "type": "string",
-      "location": "query"
+      "type": "string"
     },
     "$.xgafv": {
+      "type": "string",
       "enumDescriptions": [
         "v1 error format",
         "v2 error format"
@@ -398,10 +352,11 @@
         "1",
         "2"
       ],
-      "description": "V1 error format.",
-      "type": "string"
+      "description": "V1 error format."
     },
     "alt": {
+      "description": "Data format for response.",
+      "default": "json",
       "enum": [
         "json",
         "media",
@@ -413,42 +368,106 @@
         "Media download with context-dependent Content-Type",
         "Responses with Content-Type of application/x-protobuf"
       ],
+      "location": "query"
+    },
+    "access_token": {
       "location": "query",
-      "description": "Data format for response.",
-      "default": "json"
+      "description": "OAuth access token.",
+      "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"
+    },
+    "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."
+    },
+    "pp": {
+      "type": "boolean",
+      "default": "true",
+      "location": "query",
+      "description": "Pretty-print response."
+    },
+    "bearer_token": {
+      "location": "query",
+      "description": "OAuth bearer token.",
+      "type": "string"
+    },
+    "oauth_token": {
+      "location": "query",
+      "description": "OAuth 2.0 token for the current user.",
+      "type": "string"
     }
   },
   "schemas": {
-    "ListReportsResponse": {
+    "Report": {
       "properties": {
-        "nextPageToken": {
-          "description": "A token to retrieve next page of results.\nPass this value in the\nListReportsRequest.page_token\nfield in the subsequent call to `ListReports` method to retrieve the next\npage of results.",
+        "createTime": {
+          "description": "The date/time when this report was created.",
+          "format": "google-datetime",
           "type": "string"
         },
-        "reports": {
+        "jobId": {
+          "description": "The ID of the job that created this report.",
+          "type": "string"
+        },
+        "id": {
+          "description": "The server-generated ID of the report.",
+          "type": "string"
+        },
+        "jobExpireTime": {
+          "description": "The date/time when the job this report belongs to will expire/expired.",
+          "format": "google-datetime",
+          "type": "string"
+        },
+        "endTime": {
+          "description": "The end of the time period that the report instance covers. The value is\nexclusive.",
+          "format": "google-datetime",
+          "type": "string"
+        },
+        "downloadUrl": {
+          "description": "The URL from which the report can be downloaded (max. 1000 characters).",
+          "type": "string"
+        },
+        "startTime": {
+          "description": "The start of the time period that the report instance covers. The value is\ninclusive.",
+          "format": "google-datetime",
+          "type": "string"
+        }
+      },
+      "id": "Report",
+      "description": "A report's metadata including the URL from which the report itself can be\ndownloaded.",
+      "type": "object"
+    },
+    "Empty": {
+      "description": "A generic empty message that you can re-use to avoid defining duplicated\nempty messages in your APIs. A typical example is to use it as the request\nor the response type of an API method. For instance:\n\n    service Foo {\n      rpc Bar(google.protobuf.Empty) returns (google.protobuf.Empty);\n    }\n\nThe JSON representation for `Empty` is empty JSON object `{}`.",
+      "type": "object",
+      "properties": {},
+      "id": "Empty"
+    },
+    "ListReportTypesResponse": {
+      "description": "Response message for ReportingService.ListReportTypes.",
+      "type": "object",
+      "properties": {
+        "reportTypes": {
           "description": "The list of report types.",
           "type": "array",
           "items": {
-            "$ref": "Report"
+            "$ref": "ReportType"
           }
-        }
-      },
-      "id": "ListReportsResponse",
-      "description": "Response message for ReportingService.ListReports.",
-      "type": "object"
-    },
-    "Media": {
-      "properties": {
-        "resourceName": {
-          "description": "Name of the media resource.",
+        },
+        "nextPageToken": {
+          "description": "A token to retrieve next page of results.\nPass this value in the\nListReportTypesRequest.page_token\nfield in the subsequent call to `ListReportTypes` method to retrieve the next\npage of results.",
           "type": "string"
         }
       },
-      "id": "Media",
-      "description": "Media resource.",
-      "type": "object"
+      "id": "ListReportTypesResponse"
     },
     "ReportType": {
+      "type": "object",
       "properties": {
         "id": {
           "description": "The ID of the report type (max. 100 characters).",
@@ -464,97 +483,32 @@
           "type": "string"
         },
         "name": {
-          "description": "The name of the report type (max. 100 characters).",
-          "type": "string"
+          "type": "string",
+          "description": "The name of the report type (max. 100 characters)."
         }
       },
       "id": "ReportType",
-      "description": "A report type.",
-      "type": "object"
-    },
-    "Report": {
-      "description": "A report's metadata including the URL from which the report itself can be\ndownloaded.",
-      "type": "object",
-      "properties": {
-        "id": {
-          "description": "The server-generated ID of the report.",
-          "type": "string"
-        },
-        "endTime": {
-          "description": "The end of the time period that the report instance covers. The value is\nexclusive.",
-          "format": "google-datetime",
-          "type": "string"
-        },
-        "jobExpireTime": {
-          "description": "The date/time when the job this report belongs to will expire/expired.",
-          "format": "google-datetime",
-          "type": "string"
-        },
-        "downloadUrl": {
-          "description": "The URL from which the report can be downloaded (max. 1000 characters).",
-          "type": "string"
-        },
-        "startTime": {
-          "description": "The start of the time period that the report instance covers. The value is\ninclusive.",
-          "format": "google-datetime",
-          "type": "string"
-        },
-        "createTime": {
-          "description": "The date/time when this report was created.",
-          "format": "google-datetime",
-          "type": "string"
-        },
-        "jobId": {
-          "description": "The ID of the job that created this report.",
-          "type": "string"
-        }
-      },
-      "id": "Report"
-    },
-    "Empty": {
-      "properties": {},
-      "id": "Empty",
-      "description": "A generic empty message that you can re-use to avoid defining duplicated\nempty messages in your APIs. A typical example is to use it as the request\nor the response type of an API method. For instance:\n\n    service Foo {\n      rpc Bar(google.protobuf.Empty) returns (google.protobuf.Empty);\n    }\n\nThe JSON representation for `Empty` is empty JSON object `{}`.",
-      "type": "object"
-    },
-    "ListReportTypesResponse": {
-      "description": "Response message for ReportingService.ListReportTypes.",
-      "type": "object",
-      "properties": {
-        "nextPageToken": {
-          "description": "A token to retrieve next page of results.\nPass this value in the\nListReportTypesRequest.page_token\nfield in the subsequent call to `ListReportTypes` method to retrieve the next\npage of results.",
-          "type": "string"
-        },
-        "reportTypes": {
-          "description": "The list of report types.",
-          "type": "array",
-          "items": {
-            "$ref": "ReportType"
-          }
-        }
-      },
-      "id": "ListReportTypesResponse"
+      "description": "A report type."
     },
     "ListJobsResponse": {
-      "description": "Response message for ReportingService.ListJobs.",
       "type": "object",
       "properties": {
-        "nextPageToken": {
-          "description": "A token to retrieve next page of results.\nPass this value in the\nListJobsRequest.page_token\nfield in the subsequent call to `ListJobs` method to retrieve the next\npage of results.",
-          "type": "string"
-        },
         "jobs": {
           "description": "The list of jobs.",
           "type": "array",
           "items": {
             "$ref": "Job"
           }
+        },
+        "nextPageToken": {
+          "description": "A token to retrieve next page of results.\nPass this value in the\nListJobsRequest.page_token\nfield in the subsequent call to `ListJobs` method to retrieve the next\npage of results.",
+          "type": "string"
         }
       },
-      "id": "ListJobsResponse"
+      "id": "ListJobsResponse",
+      "description": "Response message for ReportingService.ListJobs."
     },
     "Job": {
-      "description": "A job creating reports of a specific type.",
       "type": "object",
       "properties": {
         "createTime": {
@@ -580,18 +534,64 @@
           "type": "string"
         },
         "systemManaged": {
-          "description": "True if this a system-managed job that cannot be modified by the user;\notherwise false.",
-          "type": "boolean"
+          "type": "boolean",
+          "description": "True if this a system-managed job that cannot be modified by the user;\notherwise false."
         }
       },
-      "id": "Job"
+      "id": "Job",
+      "description": "A job creating reports of a specific type."
+    },
+    "ListReportsResponse": {
+      "description": "Response message for ReportingService.ListReports.",
+      "type": "object",
+      "properties": {
+        "reports": {
+          "description": "The list of report types.",
+          "type": "array",
+          "items": {
+            "$ref": "Report"
+          }
+        },
+        "nextPageToken": {
+          "description": "A token to retrieve next page of results.\nPass this value in the\nListReportsRequest.page_token\nfield in the subsequent call to `ListReports` method to retrieve the next\npage of results.",
+          "type": "string"
+        }
+      },
+      "id": "ListReportsResponse"
+    },
+    "Media": {
+      "id": "Media",
+      "description": "Media resource.",
+      "type": "object",
+      "properties": {
+        "resourceName": {
+          "description": "Name of the media resource.",
+          "type": "string"
+        }
+      }
     }
   },
   "icons": {
-    "x16": "http://www.google.com/images/icons/product/search-16.gif",
-    "x32": "http://www.google.com/images/icons/product/search-32.gif"
+    "x32": "http://www.google.com/images/icons/product/search-32.gif",
+    "x16": "http://www.google.com/images/icons/product/search-16.gif"
   },
   "protocol": "rest",
   "version": "v1",
-  "baseUrl": "https://youtubereporting.googleapis.com/"
+  "baseUrl": "https://youtubereporting.googleapis.com/",
+  "canonicalName": "YouTube Reporting",
+  "auth": {
+    "oauth2": {
+      "scopes": {
+        "https://www.googleapis.com/auth/yt-analytics-monetary.readonly": {
+          "description": "View monetary and non-monetary YouTube Analytics reports for your YouTube content"
+        },
+        "https://www.googleapis.com/auth/yt-analytics.readonly": {
+          "description": "View YouTube Analytics reports for your YouTube content"
+        }
+      }
+    }
+  },
+  "description": "Schedules reporting jobs containing your YouTube Analytics data and downloads the resulting bulk data reports in the form of CSV files.",
+  "servicePath": "",
+  "kind": "discovery#restDescription"
 }
diff --git a/youtubereporting/v1/youtubereporting-gen.go b/youtubereporting/v1/youtubereporting-gen.go
index f70b7cb..f865680 100644
--- a/youtubereporting/v1/youtubereporting-gen.go
+++ b/youtubereporting/v1/youtubereporting-gen.go
@@ -67,10 +67,9 @@
 }
 
 type Service struct {
-	client                    *http.Client
-	BasePath                  string // API endpoint base URL
-	UserAgent                 string // optional additional User-Agent fragment
-	GoogleClientHeaderElement string // client header fragment, for Google use only
+	client    *http.Client
+	BasePath  string // API endpoint base URL
+	UserAgent string // optional additional User-Agent fragment
 
 	Jobs *JobsService
 
@@ -86,10 +85,6 @@
 	return googleapi.UserAgent + " " + s.UserAgent
 }
 
-func (s *Service) clientHeader() string {
-	return gensupport.GoogleClientHeader("20170210", s.GoogleClientHeaderElement)
-}
-
 func NewJobsService(s *Service) *JobsService {
 	rs := &JobsService{s: s}
 	rs.Reports = NewJobsReportsService(s)
@@ -511,7 +506,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	var body io.Reader = nil
 	body, err := googleapi.WithoutDataWrapper.JSONReader(c.job)
 	if err != nil {
@@ -648,7 +642,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	var body io.Reader = nil
 	c.urlParams_.Set("alt", alt)
 	urls := googleapi.ResolveRelative(c.s.BasePath, "v1/jobs/{jobId}")
@@ -799,7 +792,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	if c.ifNoneMatch_ != "" {
 		reqHeaders.Set("If-None-Match", c.ifNoneMatch_)
 	}
@@ -981,7 +973,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	if c.ifNoneMatch_ != "" {
 		reqHeaders.Set("If-None-Match", c.ifNoneMatch_)
 	}
@@ -1163,7 +1154,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	if c.ifNoneMatch_ != "" {
 		reqHeaders.Set("If-None-Match", c.ifNoneMatch_)
 	}
@@ -1371,7 +1361,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	if c.ifNoneMatch_ != "" {
 		reqHeaders.Set("If-None-Match", c.ifNoneMatch_)
 	}
@@ -1567,7 +1556,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	if c.ifNoneMatch_ != "" {
 		reqHeaders.Set("If-None-Match", c.ifNoneMatch_)
 	}
@@ -1763,7 +1751,6 @@
 		reqHeaders[k] = v
 	}
 	reqHeaders.Set("User-Agent", c.s.userAgent())
-	reqHeaders.Set("x-goog-api-client", c.s.clientHeader())
 	if c.ifNoneMatch_ != "" {
 		reqHeaders.Set("If-None-Match", c.ifNoneMatch_)
 	}